From 31e975d312294130ea73757a27ae251e45111db0 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 12:38:49 +0100 Subject: [PATCH 01/58] feat: add getOptions method (resolves: #215) --- src/client/$meta.js | 1 + src/server/$meta.js | 1 + test/plugin-browser.test.js | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/client/$meta.js b/src/client/$meta.js index c9c7c47..874d06d 100644 --- a/src/client/$meta.js +++ b/src/client/$meta.js @@ -12,6 +12,7 @@ export default function _$meta(options = {}) { */ return function $meta() { return { + getOptions: () => Object.freeze({ ...options }), refresh: _refresh.bind(this), inject, pause: pause.bind(this), diff --git a/src/server/$meta.js b/src/server/$meta.js index cd700b1..5faffa0 100644 --- a/src/server/$meta.js +++ b/src/server/$meta.js @@ -13,6 +13,7 @@ export default function _$meta(options = {}) { */ return function $meta() { return { + getOptions: () => Object.freeze({ ...options }), refresh: _refresh.bind(this), inject: _inject.bind(this), pause: pause.bind(this), diff --git a/test/plugin-browser.test.js b/test/plugin-browser.test.js index 6f5b30e..3932658 100644 --- a/test/plugin-browser.test.js +++ b/test/plugin-browser.test.js @@ -20,9 +20,14 @@ describe('plugin', () => { expect(instance.$meta().inject).toEqual(expect.any(Function)) expect(instance.$meta().refresh).toEqual(expect.any(Function)) + expect(instance.$meta().getOptions).toEqual(expect.any(Function)) expect(instance.$meta().inject()).toBeUndefined() expect(instance.$meta().refresh()).toBeDefined() + + const options = instance.$meta().getOptions() + expect(options).toBeDefined() + expect(options.keyName).toBe(defaultOptions.keyName) }) test('component has _hasMetaInfo set to true', () => { From 95ba9c0291c4b94027596244775e3e73a06a0312 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 12:58:22 +0100 Subject: [PATCH 02/58] refactor: extract escape method --- src/shared/escape.js | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/shared/escape.js diff --git a/src/shared/escape.js b/src/shared/escape.js new file mode 100644 index 0000000..5dfc3d3 --- /dev/null +++ b/src/shared/escape.js @@ -0,0 +1,47 @@ +import { metaInfoOptionKeys, disableOptionKeys } from './constants' +import isArray from './isArray' +import { isString, isObject } from './typeof' + +// sanitizes potentially dangerous characters +export default function escape(info, { tagIDKeyName }, escapeSequences = []) { + const escaped = {} + + for (const key in info) { + const value = info[key] + + // no need to escape configuration options + if (metaInfoOptionKeys.includes(key)) { + escaped[key] = value + continue + } + + let disableKey = disableOptionKeys[0] + if (info[disableKey] && info[disableKey].includes(key)) { + // this info[key] doesnt need to escaped if the option is listed in __dangerouslyDisableSanitizers + escaped[key] = value + continue + } + + if (info[tagIDKeyName]) { + disableKey = disableOptionKeys[1] + + // items which vmid is listed in __dangerouslyDisableSanitizersByTagID do not need to be escaped + if (info[disableKey] && info[disableKey][key] && info[disableKey][key].includes(info[tagIDKeyName])) { + escaped[key] = value + continue + } + } + + if (isString(value)) { + escaped[key] = escapeSequences.reduce((val, [v, r]) => val.replace(v, r), value) + } else if (isArray(value)) { + escaped[key] = value.map(v => escape(v, { tagIDKeyName }, escapeSequences)) + } else if (isObject(value)) { + escaped[key] = escape(value, { tagIDKeyName }, escapeSequences) + } else { + escaped[key] = value + } + } + + return escaped +} From 15eb9ccfd1f9836255328a85009b735db2cd0f34 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 12:58:31 +0100 Subject: [PATCH 03/58] refactor: extract merge methods --- src/shared/merge.js | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/shared/merge.js diff --git a/src/shared/merge.js b/src/shared/merge.js new file mode 100644 index 0000000..966182e --- /dev/null +++ b/src/shared/merge.js @@ -0,0 +1,51 @@ +import deepmerge from 'deepmerge' +import applyTemplate from './applyTemplate' + +export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, contentKeyName }, target, source) { + // we concat the arrays without merging objects contained in, + // but we check for a `vmid` property on each object in the array + // using an O(1) lookup associative array exploit + const destination = [] + + target.forEach((targetItem, targetIndex) => { + // no tagID so no need to check for duplicity + if (!targetItem[tagIDKeyName]) { + destination.push(targetItem) + return + } + + const sourceIndex = source.findIndex(item => item[tagIDKeyName] === targetItem[tagIDKeyName]) + + // source doesnt contain any duplicate id's + if (sourceIndex === -1) { + destination.push(targetItem) + return + } + + // we now know that targetItem is a duplicate and we should ignore it in favor of sourceItem + // now we only need to check if the target has a template to combine it with the source + const targetTemplate = targetItem[metaTemplateKeyName] + if (!targetTemplate) { + return + } + + const sourceItem = source[sourceIndex] + const sourceTemplate = sourceItem[metaTemplateKeyName] + + if (!sourceTemplate) { + // use parent template and child content + applyTemplate({ component, metaTemplateKeyName, contentKeyName }, sourceItem, targetTemplate) + } else if (!sourceItem[contentKeyName]) { + // use child template and parent content + applyTemplate({ component, metaTemplateKeyName, contentKeyName }, sourceItem, undefined, targetItem[contentKeyName]) + } + }) + + return destination.concat(source) +} + +export function merge(target, source, options = {}) { + return deepmerge(target, source, { + arrayMerge: (t, s) => arrayMerge(options, t, s) + }) +} From fa90902fc79261230e53f1a22c0af8a05eb29c80 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 12:59:16 +0100 Subject: [PATCH 04/58] refactor: extract applyTemplate method and make it more generic --- src/shared/applyTemplate.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/shared/applyTemplate.js diff --git a/src/shared/applyTemplate.js b/src/shared/applyTemplate.js new file mode 100644 index 0000000..a83e9b3 --- /dev/null +++ b/src/shared/applyTemplate.js @@ -0,0 +1,24 @@ +import { isUndefined, isFunction } from './typeof' + +export default function applyTemplate({ component, metaTemplateKeyName, contentKeyName }, headObject, template, chunk) { + if (isUndefined(template)) { + template = headObject[metaTemplateKeyName] + delete headObject[metaTemplateKeyName] + } + + // return early if no template defined + if (!template) { + return false + } + + if (isUndefined(chunk)) { + chunk = headObject[contentKeyName] + } + + if (isFunction(template)) { + headObject[contentKeyName] = template.call(component, chunk) + } else { + headObject[contentKeyName] = template.replace(/%s/g, chunk) + } + return true +} From f2e8eb537d0ff5edad9aca865c5cacc9e5e41edc Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:11:01 +0100 Subject: [PATCH 05/58] feat: track branches which contain metaInfo components --- src/shared/inMetaInfoBranch.js | 6 ++++++ src/shared/mixin.js | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 src/shared/inMetaInfoBranch.js diff --git a/src/shared/inMetaInfoBranch.js b/src/shared/inMetaInfoBranch.js new file mode 100644 index 0000000..e2884d9 --- /dev/null +++ b/src/shared/inMetaInfoBranch.js @@ -0,0 +1,6 @@ +import { isUndefined } from './typeof' + +// a component is in a metaInfo branch when itself has meta info or one of its (grand-)children has +export default function inMetaInfoBranch(vm = this) { + return vm && !isUndefined(vm._vueMeta) +} diff --git a/src/shared/mixin.js b/src/shared/mixin.js index 8bd2795..c47167d 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -1,4 +1,5 @@ import triggerUpdate from '../client/triggerUpdate' +import hasMetaInfo from './hasMetaInfo' import { isUndefined, isFunction } from './typeof' import { ensuredPush } from './ensure' @@ -16,7 +17,7 @@ export default function createMixin(Vue, options) { console.warn('VueMeta DeprecationWarning: _hasMetaInfo has been deprecated and will be removed in a future version. Please import hasMetaInfo and use hasMetaInfo(vm) instead') // eslint-disable-line no-console this.$root._vueMeta.hasMetaInfoDeprecationWarningShown = true } - return !!this._vueMeta + return hasMetaInfo(this) } }) @@ -28,8 +29,18 @@ export default function createMixin(Vue, options) { this.$root._vueMeta = {} } + // to speed up updates we keep track of branches which have a component with vue-meta info defined + // if _vueMeta = true it has info, if _vueMeta = false a child has info if (!this._vueMeta) { this._vueMeta = true + + let p = this.$parent + while (p && p !== this.$root) { + if (isUndefined(p._vueMeta)) { + p._vueMeta = false + } + p = p.$parent + } } // coerce function-style metaInfo to a computed prop so we can observe @@ -55,7 +66,7 @@ export default function createMixin(Vue, options) { // force an initial refresh on page load and prevent other lifecycleHooks // to triggerUpdate until this initial refresh is finished // this is to make sure that when a page is opened in an inactive tab which - // has throttled rAF/timers we still immeditately set the page title + // has throttled rAF/timers we still immediately set the page title if (isUndefined(this.$root._vueMeta.initialized)) { this.$root._vueMeta.initialized = this.$isServer From cd98210acb881a47dd527d5c6d4899452b6b566e Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:11:13 +0100 Subject: [PATCH 06/58] refactor: make hasMetaInfo default export --- src/browser.js | 2 +- src/index.js | 2 +- src/shared/hasMetaInfo.js | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/browser.js b/src/browser.js index 2567240..885f415 100644 --- a/src/browser.js +++ b/src/browser.js @@ -3,7 +3,7 @@ import createMixin from './shared/mixin' import setOptions from './shared/options' import { isUndefined } from './shared/typeof' import $meta from './client/$meta' -import { hasMetaInfo } from './shared/hasMetaInfo' +import hasMetaInfo from './shared/hasMetaInfo' /** * Plugin install function. diff --git a/src/index.js b/src/index.js index 5ed7470..9e049d0 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import { version } from '../package.json' import createMixin from './shared/mixin' import setOptions from './shared/options' import $meta from './server/$meta' -import { hasMetaInfo } from './shared/hasMetaInfo' +import hasMetaInfo from './shared/hasMetaInfo' /** * Plugin install function. diff --git a/src/shared/hasMetaInfo.js b/src/shared/hasMetaInfo.js index 975f762..7946896 100644 --- a/src/shared/hasMetaInfo.js +++ b/src/shared/hasMetaInfo.js @@ -1,3 +1,6 @@ -export function hasMetaInfo(vm = this) { - return vm && !!vm._vueMeta +import { isObject } from './typeof' + +// Vue $root instance has a _vueMeta object property, otherwise its a boolean true +export default function hasMetaInfo(vm = this) { + return vm && (vm._vueMeta === true || isObject(vm._vueMeta)) } From 4fc67df86a8cefb22d3dbe452c6f82c6885dd303 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:20:29 +0100 Subject: [PATCH 07/58] refactor(build): use babel instead of buble --- package.json | 6 +- scripts/rollup.config.js | 9 +- yarn.lock | 259 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 261 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 90b83c8..6fa1b8a 100644 --- a/package.json +++ b/package.json @@ -53,15 +53,14 @@ "postversion": "npm run update-cdn && git add . && git commit -m \":ship: CDN update\"" }, "dependencies": { - "deepmerge": "^3.2.0", - "lodash.isplainobject": "^4.0.6", - "lodash.uniqueid": "^4.0.1" + "deepmerge": "^3.2.0" }, "devDependencies": { "@babel/cli": "^7.2.3", "@babel/core": "^7.3.3", "@babel/node": "^7.2.2", "@babel/preset-env": "^7.3.1", + "@nuxt/babel-preset-app": "^2.4.5", "@nuxtjs/eslint-config": "^0.0.1", "@vue/server-test-utils": "^1.0.0-beta.29", "@vue/test-utils": "^1.0.0-beta.29", @@ -85,6 +84,7 @@ "jsdom-global": "^3.0.2", "rimraf": "^2.6.3", "rollup": "^1.2.2", + "rollup-plugin-babel": "^4.3.2", "rollup-plugin-buble": "^0.19.6", "rollup-plugin-commonjs": "^9.2.0", "rollup-plugin-json": "^3.1.0", diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index e6a2d0f..7e38a81 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js @@ -1,6 +1,7 @@ import commonjs from 'rollup-plugin-commonjs' import nodeResolve from 'rollup-plugin-node-resolve' import json from 'rollup-plugin-json' +import babel from 'rollup-plugin-babel' import buble from 'rollup-plugin-buble' import { terser } from 'rollup-plugin-terser' @@ -26,7 +27,9 @@ const baseConfig = { json(), nodeResolve(), commonjs(), - buble(), + /*buble({ + objectAssign: 'Object.assign' + }),*/ ] } @@ -40,6 +43,10 @@ export default [{ }, plugins: [ ...baseConfig.plugins, + babel({ + runtimeHelpers: true, + presets: ['@nuxt/babel-preset-app'] + }), terser() ] }, { diff --git a/yarn.lock b/yarn.lock index f36546c..5ccbee6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,6 +46,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.2.2": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.3.4" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.3.3": version "7.3.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.3.tgz#d090d157b7c5060d05a05acaebc048bd2b037947" @@ -88,6 +108,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" + integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg== + dependencies: + "@babel/types" "^7.3.4" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -112,6 +143,18 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz#092711a7a3ad8ea34de3e541644c2ce6af1f6f0c" + integrity sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.3.4" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -218,6 +261,16 @@ "@babel/traverse" "^7.2.3" "@babel/types" "^7.0.0" +"@babel/helper-replace-supers@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13" + integrity sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -282,6 +335,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87" integrity sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg== +"@babel/parser@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" + integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -291,6 +349,23 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" +"@babel/plugin-proposal-class-properties@^7.3.0": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz#410f5173b3dc45939f9ab30ca26684d72901405e" + integrity sha512-lUf8D3HLs4yYlAo8zjuneLvfxN7qfKv1Yzbj5vjqaqMJxgJA3Ipwp4VUJ+OrOdz53Wbww6ahwB8UhB2HQyLotA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-decorators@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz#637ba075fa780b1f75d08186e8fb4357d03a72a7" + integrity sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/plugin-proposal-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" @@ -331,6 +406,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-decorators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" + integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" @@ -338,6 +427,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -528,6 +624,16 @@ dependencies: regenerator-transform "^0.13.3" +"@babel/plugin-transform-runtime@^7.2.0": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz#57805ac8c1798d102ecd75c03b024a5b3ea9b431" + integrity sha512-PaoARuztAdd5MgeVjAxnIDAIUet5KpogqaefQvPOmPYCxYoaPhautxDh3aO8a4xHsKgT/b9gSxR0BKK1MIewPA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" @@ -644,6 +750,13 @@ pirates "^4.0.0" source-map-support "^0.5.9" +"@babel/runtime@^7.3.1": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== + dependencies: + regenerator-runtime "^0.12.0" + "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -668,6 +781,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" + integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.3.4" + "@babel/types" "^7.3.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.2.tgz#424f5be4be633fff33fb83ab8d67e4a8290f5a2f" @@ -686,6 +814,29 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" + integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + +"@nuxt/babel-preset-app@^2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@nuxt/babel-preset-app/-/babel-preset-app-2.4.5.tgz#707043fe4686b7375df0917cca9134b7681ae9bf" + integrity sha512-Pfpp9++AjTLSvr0EQY00SPacSxw6nvIgARVTiFG8xEkqzUzChx1xz424u4e8mKhu3qEgj9ldcF5iKC5A87RYkw== + dependencies: + "@babel/core" "^7.2.2" + "@babel/plugin-proposal-class-properties" "^7.3.0" + "@babel/plugin-proposal-decorators" "^7.3.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-runtime" "^7.2.0" + "@babel/preset-env" "^7.3.1" + "@babel/runtime" "^7.3.1" + "@vue/babel-preset-jsx" "^1.0.0-beta.2" + "@nuxtjs/eslint-config@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@nuxtjs/eslint-config/-/eslint-config-0.0.1.tgz#3aeed1cc6a2e01331c7e6b56bfa7152ce8bb2d90" @@ -734,6 +885,70 @@ resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== +"@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz#f3e20d77b89ddb7a4b9b7a75372f05cd3ac22d92" + integrity sha512-Yj92Q1GcGjjctecBfnBmVqKSlMdyZaVq10hlZB4HSd1DJgu4cWgpEImJSzcJRUCZmas6UigwE7f4IjJuQs+JvQ== + +"@vue/babel-plugin-transform-vue-jsx@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.2.tgz#6f7903fe66a34a02163f418c426cf419e862d97e" + integrity sha512-fvAymRZAPHitomRE+jIipWRj0STXNSMqeOSdOFu9Ffjqg9WGOxSdCjORxexManfZ2y5QDv7gzI1xfgprsK3nlw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-jsx@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.2.tgz#3e5dc2b73da58391c1c7327c2bd2ef154fe4e46e" + integrity sha512-nZoAKBR/h6iPMQ66ieQcIdlpPBmqhtUUcgjBS541jIVxSog1rwzrc00jlsuecLonzUMWPU0PabyitsG74vhN1w== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" + "@vue/babel-sugar-functional-vue" "^1.0.0-beta.2" + "@vue/babel-sugar-inject-h" "^1.0.0-beta.2" + "@vue/babel-sugar-v-model" "^1.0.0-beta.2" + "@vue/babel-sugar-v-on" "^1.0.0-beta.2" + +"@vue/babel-sugar-functional-vue@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.2.tgz#8831f686e7614f282d5170b902483ef538deef38" + integrity sha512-5qvi4hmExgjtrESDk0vflL69dIxkDAukJcYH9o4663E8Nh12Jpbmr+Ja8WmgkAPtTVhk90UVcVUFCCZLHBmhkQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.2.tgz#5f92f994bf4b4126fad8633f554e8a426b51b413" + integrity sha512-qGXZ6yE+1trk82xCVJ9j3shsgI+R2ePj3+o8b2Ee7JNaRqQvMfTwpgx5BRlk4q1+CTjvYexdqBS+q4Kg7sSxcg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.2.tgz#051d3ae3ef5e70d514e09058ec5790f6a42e8c28" + integrity sha512-63US3IMEtATJzzK2le/Na53Sk2bp3LHfwZ8eMFwbTaz6e2qeV9frBl3ZYaha64ghT4IDSbrDXUmm0J09EAzFfA== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.2.tgz#3e2d122e229b10017f091d178346b601d9245260" + integrity sha512-XH/m3k11EKdMY0MrTg4+hQv8BFM8juzHT95chYkgxDmvDdVJnSCuf9+mcysEJttWD4PVuUGN7EHoIWsIhC0dRw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" + camelcase "^5.0.0" + "@vue/server-test-utils@^1.0.0-beta.29": version "1.0.0-beta.29" resolved "https://registry.yarnpkg.com/@vue/server-test-utils/-/server-test-utils-1.0.0-beta.29.tgz#8a61a9900992b742cda7c143593db1c5e4a019bd" @@ -2125,6 +2340,11 @@ estree-walker@^0.5.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== +estree-walker@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" + integrity sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw== + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -2675,6 +2895,11 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + htmlparser2@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" @@ -3788,10 +4013,10 @@ lodash._reinterpolate@~3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= lodash.sortby@^4.7.0: version "4.7.0" @@ -3818,11 +4043,6 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash.uniqueid@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz#3268f26a7c88e4f4b1758d679271814e31fa5b26" - integrity sha1-MmjyanyI5PSxdY1nknGBTjH6WyY= - lodash@4.x, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -4968,6 +5188,14 @@ rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rollup-plugin-babel@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" + integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.3.0" + rollup-plugin-buble@^0.19.6: version "0.19.6" resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e" @@ -5012,6 +5240,14 @@ rollup-plugin-terser@^4.0.4: serialize-javascript "^1.6.1" terser "^3.14.1" +rollup-pluginutils@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" + integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== + dependencies: + estree-walker "^0.6.0" + micromatch "^3.1.10" + rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" @@ -5435,6 +5671,11 @@ supports-color@^6.0.0, supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" From 12c7949132f7e6d7fcde8ead198b2093a9e9dd99 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:22:43 +0100 Subject: [PATCH 08/58] fix: dont updateTags when the new info is not an array --- src/client/updateClientMetaInfo.js | 6 ++++++ src/client/updaters/tag.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index e7bb46a..b0bf87c 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -1,5 +1,6 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' import { updateAttribute, updateTag, updateTitle } from './updaters' +import isArray from '../shared/isArray' const getTag = (tags, tag) => { if (!tags[tag]) { @@ -46,6 +47,11 @@ export default function updateClientMetaInfo(options = {}, newInfo) { continue } + // tags should always be an array, ignore if it isnt + if (!isArray(newInfo[type])) { + continue + } + const { oldTags, newTags } = updateTag( options, type, diff --git a/src/client/updaters/tag.js b/src/client/updaters/tag.js index 7167d8b..5b28ff9 100644 --- a/src/client/updaters/tag.js +++ b/src/client/updaters/tag.js @@ -26,7 +26,7 @@ export default function updateTag({ attribute, tagIDKeyName } = {}, type, tags, }) } - if (tags && tags.length) { + if (tags.length) { tags.forEach((tag) => { const newElement = document.createElement(type) newElement.setAttribute(attribute, 'true') From 7b888c943767cb062ca663903654b1c2f5350365 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:33:24 +0100 Subject: [PATCH 09/58] refactor: optimize getMetaInfo by extracting functions this should make it easier for javascript engines to optimize these functions --- src/shared/constants.js | 24 ++++++++ src/shared/getMetaInfo.js | 125 ++++++-------------------------------- 2 files changed, 43 insertions(+), 106 deletions(-) diff --git a/src/shared/constants.js b/src/shared/constants.js index 42bcc0c..135ff92 100644 --- a/src/shared/constants.js +++ b/src/shared/constants.js @@ -2,6 +2,24 @@ * These are constant variables used throughout the application. */ +// set some sane defaults +export const defaultInfo = { + title: '', + titleChunk: '', + titleTemplate: '%s', + htmlAttrs: {}, + bodyAttrs: {}, + headAttrs: {}, + base: [], + link: [], + meta: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} +} + // This is the name of the component option that contains all the information that // gets converted to the various meta tags & attributes for the page. export const keyName = 'metaInfo' @@ -35,6 +53,12 @@ export const metaInfoOptionKeys = [ '__dangerouslyDisableSanitizersByTagID' ] +// The metaInfo property keys which are used to disable escaping +export const disableOptionKeys = [ + '__dangerouslyDisableSanitizers', + '__dangerouslyDisableSanitizersByTagID' +] + // List of metaInfo property keys which only generates attributes and no tags export const metaInfoAttributeKeys = [ 'htmlAttrs', diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 08f8eaa..06480a3 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -1,12 +1,9 @@ -import deepmerge from 'deepmerge' -import isPlainObject from 'lodash.isplainobject' -import { isFunction, isString } from './typeof' -import isArray from './isArray' +import applyTemplate from './applyTemplate' +import { defaultInfo, disableOptionKeys } from './constants' +import { ensureIsArray } from './ensure' +import escape from './escape' import getComponentOption from './getComponentOption' -const applyTemplate = (component, template, chunk) => - isFunction(template) ? template.call(component, chunk) : template.replace(/%s/g, chunk) - /** * Returns the correct meta info for the given component * (child components will overwrite parent meta info) @@ -15,74 +12,14 @@ const applyTemplate = (component, template, chunk) => * @return {Object} - returned meta info */ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName, contentKeyName } = {}, component, escapeSequences = []) { - // set some sane defaults - const defaultInfo = { - title: '', - titleChunk: '', - titleTemplate: '%s', - htmlAttrs: {}, - bodyAttrs: {}, - headAttrs: {}, - meta: [], - base: [], - link: [], - style: [], - script: [], - noscript: [], - __dangerouslyDisableSanitizers: [], - __dangerouslyDisableSanitizersByTagID: {} - } - // collect & aggregate all metaInfo $options let info = getComponentOption({ - deep: true, component, keyName, metaTemplateKeyName, tagIDKeyName, - contentKeyName, - arrayMerge(target, source) { - // we concat the arrays without merging objects contained in, - // but we check for a `vmid` property on each object in the array - // using an O(1) lookup associative array exploit - // note the use of "for in" - we are looping through arrays here, not - // plain objects - const destination = [] - - for (const targetIndex in target) { - const targetItem = target[targetIndex] - let shared = false - - for (const sourceIndex in source) { - const sourceItem = source[sourceIndex] - - if (targetItem[tagIDKeyName] && targetItem[tagIDKeyName] === sourceItem[tagIDKeyName]) { - const targetTemplate = targetItem[metaTemplateKeyName] - const sourceTemplate = sourceItem[metaTemplateKeyName] - - if (targetTemplate && !sourceTemplate) { - sourceItem[contentKeyName] = applyTemplate(component, targetTemplate, sourceItem[contentKeyName]) - } - - // If template defined in child but content in parent - if (targetTemplate && sourceTemplate && !sourceItem[contentKeyName]) { - sourceItem[contentKeyName] = applyTemplate(component, sourceTemplate, targetItem[contentKeyName]) - delete sourceItem[metaTemplateKeyName] - } - - shared = true - break - } - } - - if (!shared) { - destination.push(targetItem) - } - } - - return destination.concat(source) - } - }) + contentKeyName + }, defaultInfo) // Remove all "template" tags from meta @@ -92,8 +29,8 @@ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName } // replace title with populated template - if (info.titleTemplate) { - info.title = applyTemplate(component, info.titleTemplate, info.titleChunk || '') + if (info.titleTemplate && info.titleTemplate !== '%s') { + applyTemplate({ component, contentKeyName: 'title' }, info, info.titleTemplate, info.titleChunk || '') } // convert base tag to an array so it can be handled the same way @@ -102,47 +39,23 @@ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName info.base = Object.keys(info.base).length ? [info.base] : [] } - const ref = info.__dangerouslyDisableSanitizers - const refByTagID = info.__dangerouslyDisableSanitizersByTagID - - // sanitizes potentially dangerous characters - const escape = info => Object.keys(info).reduce((escaped, key) => { - let isDisabled = ref && ref.includes(key) - const tagID = info[tagIDKeyName] - - if (!isDisabled && tagID) { - isDisabled = refByTagID && refByTagID[tagID] && refByTagID[tagID].includes(key) + for (const index in disableOptionKeys) { + const disableKey = disableOptionKeys[index] + if (!info[disableKey]) { + continue } - const val = info[key] - escaped[key] = val - - if (key === '__dangerouslyDisableSanitizers' || key === '__dangerouslyDisableSanitizersByTagID') { - return escaped - } - - if (!isDisabled) { - if (isString(val)) { - escaped[key] = escapeSequences.reduce((val, [v, r]) => val.replace(v, r), val) - } else if (isPlainObject(val)) { - escaped[key] = escape(val) - } else if (isArray(val)) { - escaped[key] = val.map(escape) - } else { - escaped[key] = val + if (index === 0) { + ensureIsArray(info, disableKey) + } else if (index === 1) { + for (const key in info[disableKey]) { + ensureIsArray(info[disableKey], key) } - } else { - escaped[key] = val } - - return escaped - }, {}) - - // merge with defaults - info = deepmerge(defaultInfo, info) + } // begin sanitization - info = escape(info) + info = escape(info, { tagIDKeyName }, escapeSequences) return info } From 23c3380c90d4a0c9ecce9b6d1651f56338a94ef8 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:40:30 +0100 Subject: [PATCH 10/58] refactor: optimize getComponentOption by making it less generic --- src/shared/getComponentOption.js | 73 ++++++++++++++++---------------- src/shared/uniqBy.js | 7 --- test/getComponentOptions.test.js | 43 +++++++++++-------- 3 files changed, 62 insertions(+), 61 deletions(-) delete mode 100644 src/shared/uniqBy.js diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index f468520..dfcca9c 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -1,7 +1,7 @@ -import deepmerge from 'deepmerge' -import uniqueId from 'lodash.uniqueid' -import { isUndefined, isFunction, isObject } from './typeof' -import uniqBy from './uniqBy' +import { merge } from './merge' +import applyTemplate from './applyTemplate' +import inMetaInfoBranch from './inMetaInfoBranch' +import { isFunction, isObject } from './typeof' /** * Returns the `opts.option` $option value of the given `opts.component`. @@ -17,15 +17,16 @@ import uniqBy from './uniqBy' * @param {Object} [result={}] - result so far * @return {Object} result - final aggregated result */ -export default function getComponentOption({ component, deep, arrayMerge, keyName, metaTemplateKeyName, tagIDKeyName, contentKeyName } = {}, result = {}) { - const { $options } = component +export default function getComponentOption(options = {}, result = {}) { + const { component, keyName, metaTemplateKeyName, tagIDKeyName } = options + const { $options, $children } = component if (component._inactive) { return result } // only collect option data if it exists - if (!isUndefined($options[keyName]) && $options[keyName] !== null) { + if ($options[keyName]) { let data = $options[keyName] // if option is a function, replace it with it's result @@ -33,46 +34,46 @@ export default function getComponentOption({ component, deep, arrayMerge, keyNam data = data.call(component) } - if (isObject(data)) { - // merge with existing options - result = deepmerge(result, data, { arrayMerge }) - } else { - result = data + // ignore data if its not an object, then we keep our previous result + if (!isObject(data)) { + console.log(data) + return result } + + // merge with existing options + result = merge(result, data, options) } // collect & aggregate child options if deep = true - if (deep && component.$children.length) { - component.$children.forEach((childComponent) => { + if ($children.length) { + $children.forEach((childComponent) => { + // check if the childComponent is in a branch + // return otherwise so we dont walk all component branches unnecessarily + if (!inMetaInfoBranch(childComponent)) { + return + } + result = getComponentOption({ - component: childComponent, - keyName, - deep, - arrayMerge + ...options, + component: childComponent }, result) }) } - if (metaTemplateKeyName && result.hasOwnProperty('meta')) { - result.meta = Object.keys(result.meta).map((metaKey) => { - const metaObject = result.meta[metaKey] - if (!metaObject.hasOwnProperty(metaTemplateKeyName) || !metaObject.hasOwnProperty(contentKeyName) || isUndefined(metaObject[metaTemplateKeyName])) { - return result.meta[metaKey] - } + if (metaTemplateKeyName && result.meta) { + // apply templates if needed + result.meta.forEach(metaObject => applyTemplate(options, metaObject)) - const template = metaObject[metaTemplateKeyName] - delete metaObject[metaTemplateKeyName] - - if (template) { - metaObject.content = isFunction(template) ? template(metaObject.content) : template.replace(/%s/g, metaObject.content) - } - - return metaObject + // remove meta items with duplicate vmid's + result.meta = result.meta.filter((metaItem, index, arr) => { + return ( + // keep meta item if it doesnt has a vmid + !metaItem.hasOwnProperty(tagIDKeyName) || + // or if it's the first item in the array with this vmid + index === arr.findIndex(item => item[tagIDKeyName] === metaItem[tagIDKeyName]) + ) }) - result.meta = uniqBy( - result.meta, - metaObject => metaObject.hasOwnProperty(tagIDKeyName) ? metaObject[tagIDKeyName] : uniqueId() - ) } + return result } diff --git a/src/shared/uniqBy.js b/src/shared/uniqBy.js deleted file mode 100644 index c3257d9..0000000 --- a/src/shared/uniqBy.js +++ /dev/null @@ -1,7 +0,0 @@ -export default function uniqBy(inputArray, predicate) { - return inputArray - .filter((x, i, arr) => i === arr.length - 1 - ? true - : predicate(x) !== predicate(arr[i + 1]) - ) -} diff --git a/test/getComponentOptions.test.js b/test/getComponentOptions.test.js index ba04fb2..2517745 100644 --- a/test/getComponentOptions.test.js +++ b/test/getComponentOptions.test.js @@ -1,5 +1,5 @@ import getComponentOption from '../src/shared/getComponentOption' -import { getVue } from './utils' +import { mount, getVue, loadVueMetaPlugin } from './utils' describe('getComponentOption', () => { let Vue @@ -31,46 +31,53 @@ describe('getComponentOption', () => { }) it('fetches deeply nested component options and merges them', () => { - Vue.component('merge-child', { render: h => h('div'), foo: { bar: 'baz' } }) + const localVue = loadVueMetaPlugin(true, { keyName: 'foo' }) + localVue.component('merge-child', { render: h => h('div'), foo: { bar: 'baz' } }) - const component = new Vue({ + const component = localVue.component('parent', { foo: { fizz: 'buzz' }, - el: document.createElement('div'), render: h => h('div', null, [h('merge-child')]) }) - const mergedOption = getComponentOption({ component, keyName: 'foo', deep: true }) + const wrapper = mount(component, { localVue }) + + const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) expect(mergedOption).toEqual({ bar: 'baz', fizz: 'buzz' }) }) it('allows for a custom array merge strategy', () => { - Vue.component('array-child', { + const localVue = loadVueMetaPlugin(false, { keyName: 'foo' }) + localVue.component('array-child', { render: h => h('div'), - foo: [ - { name: 'flower', content: 'rose' } - ] + foo: { + meta: [ + { name: 'flower', content: 'rose' } + ] + } }) - const component = new Vue({ - foo: [ - { name: 'flower', content: 'tulip' } - ], - el: document.createElement('div'), + const component = localVue.component('parent', { + foo: { + meta: [ + { name: 'flower', content: 'tulip' } + ] + }, render: h => h('div', null, [h('array-child')]) }) + const wrapper = mount(component, { localVue }) + const mergedOption = getComponentOption({ - component, + component: wrapper.vm, keyName: 'foo', - deep: true, arrayMerge(target, source) { return target.concat(source) } }) - expect(mergedOption).toEqual([ + expect(mergedOption).toEqual({ meta: [ { name: 'flower', content: 'tulip' }, { name: 'flower', content: 'rose' } - ]) + ] }) }) }) From 7615f4120c4e5dd7300e306a4e48db947060ff85 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:45:57 +0100 Subject: [PATCH 11/58] fix: ignore data when its not an object (fixes: #253, #279, #297) --- src/shared/getComponentOption.js | 1 - test/getComponentOptions.test.js | 10 ++++++---- test/getMetaInfo.test.js | 27 ++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index dfcca9c..ae819a8 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -36,7 +36,6 @@ export default function getComponentOption(options = {}, result = {}) { // ignore data if its not an object, then we keep our previous result if (!isObject(data)) { - console.log(data) return result } diff --git a/test/getComponentOptions.test.js b/test/getComponentOptions.test.js index 2517745..85a0272 100644 --- a/test/getComponentOptions.test.js +++ b/test/getComponentOptions.test.js @@ -13,21 +13,23 @@ describe('getComponentOption', () => { }) it('fetches the given option from the given component', () => { - const component = new Vue({ someOption: 'foo' }) + const component = new Vue({ someOption: { foo: 'bar' } }) const mergedOption = getComponentOption({ component, keyName: 'someOption' }) - expect(mergedOption).toEqual('foo') + expect(mergedOption.foo).toBeDefined() + expect(mergedOption.foo).toEqual('bar') }) it('calls a function option, injecting the component as context', () => { const component = new Vue({ name: 'Foobar', someFunc() { - return this.$options.name + return { opt: this.$options.name } } }) const mergedOption = getComponentOption({ component, keyName: 'someFunc' }) // TODO: Should this be foobar or Foobar - expect(mergedOption).toEqual('Foobar') + expect(mergedOption.opt).toBeDefined() + expect(mergedOption.opt).toEqual('Foobar') }) it('fetches deeply nested component options and merges them', () => { diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index 416c180..a6159fe 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -117,7 +117,7 @@ describe('getMetaInfo', () => { { vmid: 'a', property: 'a', - content: 'b' + content: 'a' } ], base: [], @@ -592,4 +592,29 @@ describe('getMetaInfo', () => { __dangerouslyDisableSanitizersByTagID: {} }) }) + + test('no errors when metaInfo returns nothing', () => { + const component = new Vue({ + metaInfo() {}, + el: document.createElement('div'), + render: h => h('div', null, []) + }) + + expect(getMetaInfo(component)).toEqual({ + title: '', + titleChunk: '', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: {}, + meta: [], + base: [], + link: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} + }) + }) }) From 6bea7f45f41d1daaab42c6f86e266c4efdfcb08b Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:46:46 +0100 Subject: [PATCH 12/58] test: fix escape test as we only escape keys which are used in html --- test/escaping.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/escaping.test.js b/test/escaping.test.js index 347813e..6ccb00f 100644 --- a/test/escaping.test.js +++ b/test/escaping.test.js @@ -19,7 +19,7 @@ describe('escaping', () => { expect(getMetaInfo(component, [[/&/g, '&']])).toEqual({ title: 'Hello & Goodbye', - titleChunk: 'Hello & Goodbye', + titleChunk: 'Hello & Goodbye', titleTemplate: '%s', htmlAttrs: {}, headAttrs: {}, From b7ee0409ea39d60616c086387e88275ab24add8a Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 13:58:52 +0100 Subject: [PATCH 13/58] feat: add amp as boolean attribute (resolves: #311) --- src/shared/constants.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shared/constants.js b/src/shared/constants.js index 135ff92..af65ceb 100644 --- a/src/shared/constants.js +++ b/src/shared/constants.js @@ -79,6 +79,7 @@ export const tagAttributeAsInnerContent = ['innerHTML', 'cssText'] // from: https://github.com/kangax/html-minifier/blob/gh-pages/src/htmlminifier.js#L202 export const booleanHtmlAttributes = [ 'allowfullscreen', + 'amp', 'async', 'autofocus', 'autoplay', From 4dafffea4e9a9c4abe67702a3bfc845da52b46b0 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 14:32:42 +0100 Subject: [PATCH 14/58] refactor: prefer forEach --- src/shared/getMetaInfo.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 06480a3..708959a 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -48,9 +48,7 @@ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName if (index === 0) { ensureIsArray(info, disableKey) } else if (index === 1) { - for (const key in info[disableKey]) { - ensureIsArray(info[disableKey], key) - } + info[disableKey].forEach(key => ensureIsArray(info[disableKey], key)) } } From 22e456cbe27abb1430c2ca6ed980d10c1cef1280 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 14:41:11 +0100 Subject: [PATCH 15/58] feat: child can indicate its content should be ignored (resolves: #204) --- src/shared/merge.js | 25 +++++++++++++++++-- test/getMetaInfo.test.js | 54 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/shared/merge.js b/src/shared/merge.js index 966182e..fcbbe22 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -1,5 +1,6 @@ import deepmerge from 'deepmerge' import applyTemplate from './applyTemplate' +import { metaInfoAttributeKeys } from './constants' export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, contentKeyName }, target, source) { // we concat the arrays without merging objects contained in, @@ -15,9 +16,11 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte } const sourceIndex = source.findIndex(item => item[tagIDKeyName] === targetItem[tagIDKeyName]) + const sourceItem = source[sourceIndex] // source doesnt contain any duplicate id's - if (sourceIndex === -1) { + // or the source item should be ignored + if (sourceIndex === -1 || sourceItem[contentKeyName] === false || sourceItem.innerHTML === false) { destination.push(targetItem) return } @@ -29,7 +32,6 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte return } - const sourceItem = source[sourceIndex] const sourceTemplate = sourceItem[metaTemplateKeyName] if (!sourceTemplate) { @@ -45,6 +47,25 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte } export function merge(target, source, options = {}) { + // remove properties explicitly set to false so child components can + // optionally _not_ overwrite the parents content + // (for array properties this is checked in arrayMerge) + if (source.title === false) { + delete source.title + } + + for (const attrKey in metaInfoAttributeKeys) { + if (!source[attrKey]) { + continue + } + + for (const key in source[attrKey]) { + if (source[attrKey][key] === false) { + delete source[attrKey][key] + } + } + } + return deepmerge(target, source, { arrayMerge: (t, s) => arrayMerge(options, t, s) }) diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index a6159fe..d6ab3ec 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -617,4 +617,58 @@ describe('getMetaInfo', () => { __dangerouslyDisableSanitizersByTagID: {} }) }) + + test('child can indicate its content should be ignored', () => { + Vue.component('merge-child', { + render: h => h('div'), + metaInfo: { + title: false, + meta: [ + { + vmid: 'og:title', + content: false + } + ] + } + }) + + const component = new Vue({ + metaInfo: { + title: 'Hello', + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'Test title', + template: chunk => `${chunk} - My page` + } + ] + }, + el: document.createElement('div'), + render: h => h('div', null, [h('merge-child')]) + }) + + expect(getMetaInfo(component)).toEqual({ + title: 'Hello', + titleChunk: 'Hello', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: {}, + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'Test title - My page' + } + ], + base: [], + link: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} + }) + }) }) From 915fedfb7f5cd852292576397c37b42bd7c55191 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 15:25:57 +0100 Subject: [PATCH 16/58] feat: child can indicate parent vmid to be removed (resolves: #288) --- src/shared/merge.js | 7 ++++++ test/getMetaInfo.test.js | 48 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/shared/merge.js b/src/shared/merge.js index fcbbe22..f0af9c3 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -25,6 +25,13 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte return } + // if source specifies null as content then ignore both the target as the source + if (sourceItem[contentKeyName] === null || sourceItem.innerHTML === null) { + // remove current index from source array so its not concatenated to destination below + source.splice(sourceIndex, 1) + return + } + // we now know that targetItem is a duplicate and we should ignore it in favor of sourceItem // now we only need to check if the target has a template to combine it with the source const targetTemplate = targetItem[metaTemplateKeyName] diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index d6ab3ec..b496e85 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -671,4 +671,52 @@ describe('getMetaInfo', () => { __dangerouslyDisableSanitizersByTagID: {} }) }) + + test('child can indicate to remove parent vmids', () => { + Vue.component('merge-child', { + render: h => h('div'), + metaInfo: { + title: 'Hi', + meta: [ + { + vmid: 'og:title', + content: null + } + ] + } + }) + + const component = new Vue({ + metaInfo: { + title: 'Hello', + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'Test title', + template: chunk => `${chunk} - My page` + } + ] + }, + el: document.createElement('div'), + render: h => h('div', null, [h('merge-child')]) + }) + + expect(getMetaInfo(component)).toEqual({ + title: 'Hi', + titleChunk: 'Hi', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: {}, + meta: [], + base: [], + link: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} + }) + }) }) From 104113a7b80579e9d9cb1d959bbe19ac1913767b Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 15:54:17 +0100 Subject: [PATCH 17/58] fix: use undefined as child ignore indicator --- src/shared/merge.js | 9 ++++++--- test/getMetaInfo.test.js | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/shared/merge.js b/src/shared/merge.js index f0af9c3..00bc59b 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -20,7 +20,10 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte // source doesnt contain any duplicate id's // or the source item should be ignored - if (sourceIndex === -1 || sourceItem[contentKeyName] === false || sourceItem.innerHTML === false) { + if (sourceIndex === -1 || + (sourceItem.hasOwnProperty(contentKeyName) && sourceItem[contentKeyName] === undefined) || + (sourceItem.hasOwnProperty('innerHTML') && sourceItem.innerHTML === undefined) + ) { destination.push(targetItem) return } @@ -57,7 +60,7 @@ export function merge(target, source, options = {}) { // remove properties explicitly set to false so child components can // optionally _not_ overwrite the parents content // (for array properties this is checked in arrayMerge) - if (source.title === false) { + if (source.hasOwnProperty('title') && source.title === undefined) { delete source.title } @@ -67,7 +70,7 @@ export function merge(target, source, options = {}) { } for (const key in source[attrKey]) { - if (source[attrKey][key] === false) { + if (source[attrKey].hasOwnProperty(key) && source[attrKey][key] === undefined) { delete source[attrKey][key] } } diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index b496e85..65152f9 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -622,11 +622,11 @@ describe('getMetaInfo', () => { Vue.component('merge-child', { render: h => h('div'), metaInfo: { - title: false, + title: undefined, meta: [ { vmid: 'og:title', - content: false + content: undefined } ] } From 6e18a7d54a5d18de57277365a3df30f6929e8668 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 16:22:37 +0100 Subject: [PATCH 18/58] chore: fix lint --- src/client/updateClientMetaInfo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index b0bf87c..aaff25d 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -1,6 +1,6 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' -import { updateAttribute, updateTag, updateTitle } from './updaters' import isArray from '../shared/isArray' +import { updateAttribute, updateTag, updateTitle } from './updaters' const getTag = (tags, tag) => { if (!tags[tag]) { From 01edc8c2428984da74c3ebf324ad0db8dc1725dd Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 16:40:43 +0100 Subject: [PATCH 19/58] feat: attr keys can have array values (resolves #231) --- src/client/updaters/attribute.js | 7 ++++-- src/server/generators/attribute.js | 3 ++- src/shared/escape.js | 6 ++++- test/getMetaInfo.test.js | 40 ++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/client/updaters/attribute.js b/src/client/updaters/attribute.js index 4808f74..79a347b 100644 --- a/src/client/updaters/attribute.js +++ b/src/client/updaters/attribute.js @@ -1,3 +1,5 @@ +import isArray from '../../shared/isArray' + /** * Updates the document's html tag attributes * @@ -12,8 +14,9 @@ export default function updateAttribute({ attribute } = {}, attrs, tag) { const keepIndexes = [] for (const attr in attrs) { if (attrs.hasOwnProperty(attr)) { - const value = attrs[attr] || '' - tag.setAttribute(attr, value) + const value = isArray(attrs[attr]) ? attrs[attr].join(' ') : attrs[attr] + + tag.setAttribute(attr, value || '') if (!vueMetaAttrs.includes(attr)) { vueMetaAttrs.push(attr) diff --git a/src/server/generators/attribute.js b/src/server/generators/attribute.js index 03e29bf..9b24b53 100644 --- a/src/server/generators/attribute.js +++ b/src/server/generators/attribute.js @@ -1,5 +1,6 @@ import { booleanHtmlAttributes } from '../../shared/constants' import { isUndefined } from '../../shared/typeof' +import isArray from '../../shared/isArray' /** * Generates tag attributes for use on the server. @@ -20,7 +21,7 @@ export default function attributeGenerator({ attribute } = {}, type, data) { attributeStr += isUndefined(data[attr]) || booleanHtmlAttributes.includes(attr) ? attr - : `${attr}="${data[attr]}"` + : `${attr}="${isArray(data[attr]) ? data[attr].join(' ') : data[attr]}"` attributeStr += ' ' } diff --git a/src/shared/escape.js b/src/shared/escape.js index 5dfc3d3..21d1ddd 100644 --- a/src/shared/escape.js +++ b/src/shared/escape.js @@ -35,7 +35,11 @@ export default function escape(info, { tagIDKeyName }, escapeSequences = []) { if (isString(value)) { escaped[key] = escapeSequences.reduce((val, [v, r]) => val.replace(v, r), value) } else if (isArray(value)) { - escaped[key] = value.map(v => escape(v, { tagIDKeyName }, escapeSequences)) + escaped[key] = value.map((v) => { + return isObject(v) + ? escape(v, { tagIDKeyName }, escapeSequences) + : escapeSequences.reduce((val, [v, r]) => val.replace(v, r), v) + }) } else if (isObject(value)) { escaped[key] = escape(value, { tagIDKeyName }, escapeSequences) } else { diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index 65152f9..710e547 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -719,4 +719,44 @@ describe('getMetaInfo', () => { __dangerouslyDisableSanitizersByTagID: {} }) }) + + test('attribute values can be an array', () => { + Vue.component('merge-child', { + render: h => h('div'), + metaInfo: { + bodyAttrs: { + class: ['foo'] + } + } + }) + + const component = new Vue({ + metaInfo: { + bodyAttrs: { + class: ['bar'] + } + }, + el: document.createElement('div'), + render: h => h('div', null, [h('merge-child')]) + }) + + expect(getMetaInfo(component)).toEqual({ + title: '', + titleChunk: '', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: { + class: ['bar', 'foo'] + }, + meta: [], + base: [], + link: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} + }) + }) }) From 6f1b080654f43acb2858b87b7ccafcc4147db51d Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Fri, 8 Mar 2019 17:02:09 +0100 Subject: [PATCH 20/58] refactor: prefer destruct syntax Co-Authored-By: pimlie --- src/shared/escape.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/escape.js b/src/shared/escape.js index 21d1ddd..d645a04 100644 --- a/src/shared/escape.js +++ b/src/shared/escape.js @@ -15,7 +15,7 @@ export default function escape(info, { tagIDKeyName }, escapeSequences = []) { continue } - let disableKey = disableOptionKeys[0] + let [ disableKey ] = disableOptionKeys if (info[disableKey] && info[disableKey].includes(key)) { // this info[key] doesnt need to escaped if the option is listed in __dangerouslyDisableSanitizers escaped[key] = value From 9d8ea758ac21ffdedea11dd34e319bbf753dedb9 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 17:04:41 +0100 Subject: [PATCH 21/58] refactor: prefer ternary --- src/shared/applyTemplate.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/shared/applyTemplate.js b/src/shared/applyTemplate.js index a83e9b3..5805f6f 100644 --- a/src/shared/applyTemplate.js +++ b/src/shared/applyTemplate.js @@ -15,10 +15,9 @@ export default function applyTemplate({ component, metaTemplateKeyName, contentK chunk = headObject[contentKeyName] } - if (isFunction(template)) { - headObject[contentKeyName] = template.call(component, chunk) - } else { - headObject[contentKeyName] = template.replace(/%s/g, chunk) - } + headObject[contentKeyName] = isFunction(template) + ? template.call(component, chunk) + : template.replace(/%s/g, chunk) + return true } From c9a732c9d7df9752fdf2d7f6be3196c4c7b13f0c Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 17:54:04 +0100 Subject: [PATCH 22/58] test: add generator/updater test for array attributes --- test/utils/meta-info-data.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/utils/meta-info-data.js b/test/utils/meta-info-data.js index 261b760..5d869db 100644 --- a/test/utils/meta-info-data.js +++ b/test/utils/meta-info-data.js @@ -196,12 +196,12 @@ const metaInfoData = { }, bodyAttrs: { add: { - data: { foo: 'bar' }, - expect: [''] + data: { foo: 'bar', fizz: ['fuzz', 'fozz'] }, + expect: [''] }, change: { data: { foo: 'baz' }, - expect: [''] + expect: [''] }, remove: { data: {}, From da4bb27a4b49613cbde85c0a91873736b5eaf298 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 18:08:19 +0100 Subject: [PATCH 23/58] refactor: just pass all options to getComponentOption --- src/shared/getMetaInfo.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 708959a..f15a618 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -11,15 +11,9 @@ import getComponentOption from './getComponentOption' * @param {Object} component - the Vue instance to get meta info from * @return {Object} - returned meta info */ -export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName, contentKeyName } = {}, component, escapeSequences = []) { +export default function getMetaInfo(options = {}, component, escapeSequences = []) { // collect & aggregate all metaInfo $options - let info = getComponentOption({ - component, - keyName, - metaTemplateKeyName, - tagIDKeyName, - contentKeyName - }, defaultInfo) + let info = getComponentOption({ ...options, component }, defaultInfo) // Remove all "template" tags from meta @@ -53,7 +47,7 @@ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName } // begin sanitization - info = escape(info, { tagIDKeyName }, escapeSequences) + info = escape(info, options, escapeSequences) return info } From ce7eaf56d30080ef4e6312c82f2d03c65cbe0253 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 18:53:13 +0100 Subject: [PATCH 24/58] test: add missing test for sanitizeByTagId fix: broken sanitizeByTagId implementation --- src/shared/escape.js | 21 ++++++++++++--------- src/shared/getMetaInfo.js | 19 +++++++++++++------ test/escaping.test.js | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/shared/escape.js b/src/shared/escape.js index d645a04..77b73e3 100644 --- a/src/shared/escape.js +++ b/src/shared/escape.js @@ -3,7 +3,9 @@ import isArray from './isArray' import { isString, isObject } from './typeof' // sanitizes potentially dangerous characters -export default function escape(info, { tagIDKeyName }, escapeSequences = []) { +export default function escape(info, options, escapeOptions) { + const { tagIDKeyName } = options + const { doEscape = v => v } = escapeOptions const escaped = {} for (const key in info) { @@ -16,32 +18,33 @@ export default function escape(info, { tagIDKeyName }, escapeSequences = []) { } let [ disableKey ] = disableOptionKeys - if (info[disableKey] && info[disableKey].includes(key)) { + if (escapeOptions[disableKey] && escapeOptions[disableKey].includes(key)) { // this info[key] doesnt need to escaped if the option is listed in __dangerouslyDisableSanitizers escaped[key] = value continue } - if (info[tagIDKeyName]) { + const tagId = info[tagIDKeyName] + if (tagId) { disableKey = disableOptionKeys[1] - // items which vmid is listed in __dangerouslyDisableSanitizersByTagID do not need to be escaped - if (info[disableKey] && info[disableKey][key] && info[disableKey][key].includes(info[tagIDKeyName])) { + // keys which are listed in __dangerouslyDisableSanitizersByTagID for the current vmid do not need to be escaped + if (escapeOptions[disableKey] && escapeOptions[disableKey][tagId] && escapeOptions[disableKey][tagId].includes(key)) { escaped[key] = value continue } } if (isString(value)) { - escaped[key] = escapeSequences.reduce((val, [v, r]) => val.replace(v, r), value) + escaped[key] = doEscape(value) } else if (isArray(value)) { escaped[key] = value.map((v) => { return isObject(v) - ? escape(v, { tagIDKeyName }, escapeSequences) - : escapeSequences.reduce((val, [v, r]) => val.replace(v, r), v) + ? escape(v, options, escapeOptions) + : doEscape(v) }) } else if (isObject(value)) { - escaped[key] = escape(value, { tagIDKeyName }, escapeSequences) + escaped[key] = escape(value, options, escapeOptions) } else { escaped[key] = value } diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index f15a618..1106b6c 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -33,21 +33,28 @@ export default function getMetaInfo(options = {}, component, escapeSequences = [ info.base = Object.keys(info.base).length ? [info.base] : [] } - for (const index in disableOptionKeys) { - const disableKey = disableOptionKeys[index] + const escapeOptions = { + doEscape: value => escapeSequences.reduce((val, [v, r]) => val.replace(v, r), value) + } + + disableOptionKeys.forEach((disableKey, index) => { if (!info[disableKey]) { - continue + return } if (index === 0) { ensureIsArray(info, disableKey) } else if (index === 1) { - info[disableKey].forEach(key => ensureIsArray(info[disableKey], key)) + for (const key in info[disableKey]) { + ensureIsArray(info[disableKey], key) + } } - } + + escapeOptions[disableKey] = info[disableKey] + }) // begin sanitization - info = escape(info, options, escapeSequences) + info = escape(info, options, escapeOptions) return info } diff --git a/test/escaping.test.js b/test/escaping.test.js index 6ccb00f..1d5afa8 100644 --- a/test/escaping.test.js +++ b/test/escaping.test.js @@ -34,4 +34,37 @@ describe('escaping', () => { __dangerouslyDisableSanitizersByTagID: {} }) }) + + test('special chars are escaped unless disabled by vmid', () => { + const component = new Vue({ + metaInfo: { + title: 'Hello', + script: [ + { vmid: 'yescape', innerHTML: 'Hello & Goodbye' }, + { vmid: 'noscape', innerHTML: 'Hello & Goodbye' } + ], + __dangerouslyDisableSanitizersByTagID: { noscape: ['innerHTML'] } + } + }) + + expect(getMetaInfo(component, [[/&/g, '&']])).toEqual({ + title: 'Hello', + titleChunk: 'Hello', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: {}, + meta: [], + base: [], + link: [], + style: [], + script: [ + { innerHTML: 'Hello & Goodbye', vmid: 'yescape' }, + { innerHTML: 'Hello & Goodbye', vmid: 'noscape' } + ], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: { noscape: ['innerHTML'] } + }) + }) }) From 5f8025e126df4d79846dc3d45810e547037bc9dd Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 22:13:21 +0100 Subject: [PATCH 25/58] test: increase coverage, add missing tests fix: issues discovered by adding missing tests --- jest.config.js | 2 +- package.json | 3 +- src/client/updateClientMetaInfo.js | 95 ++++++------ src/shared/getMetaInfo.js | 4 - src/shared/merge.js | 28 ++-- src/shared/mixin.js | 2 + test/components.test.js | 73 +++++++++- test/escaping.test.js | 8 +- test/generators.test.js | 2 +- test/getComponentOptions.test.js | 52 ++++++- test/getMetaInfo.test.js | 69 ++++++++- test/plugin-browser.test.js | 3 +- test/plugin-server.test.js | 14 +- test/updaters.test.js | 2 +- test/utils/index.js | 19 +-- test/utils/meta-info-data.js | 2 +- test/utils/setup.js | 4 - yarn.lock | 224 ++++++++++++++++++++++++++++- 18 files changed, 494 insertions(+), 112 deletions(-) diff --git a/jest.config.js b/jest.config.js index a1bb29f..953f0fa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,5 @@ module.exports = { - testEnvironment: 'node', + testEnvironment: 'jest-environment-jsdom-global', expand: true, diff --git a/package.json b/package.json index 6fa1b8a..fff70f7 100644 --- a/package.json +++ b/package.json @@ -80,8 +80,9 @@ "eslint-plugin-vue": "^5.2.2", "esm": "^3.2.5", "jest": "^24.1.0", + "jest-environment-jsdom": "^24.3.1", + "jest-environment-jsdom-global": "^1.1.1", "jsdom": "^13.2.0", - "jsdom-global": "^3.0.2", "rimraf": "^2.6.3", "rollup": "^1.2.2", "rollup-plugin-babel": "^4.3.2", diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index aaff25d..e365213 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -2,7 +2,7 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' import isArray from '../shared/isArray' import { updateAttribute, updateTag, updateTitle } from './updaters' -const getTag = (tags, tag) => { +function getTag(tags, tag) { if (!tags[tag]) { tags[tag] = document.getElementsByTagName(tag)[0] } @@ -23,54 +23,53 @@ export default function updateClientMetaInfo(options = {}, newInfo) { const htmlTag = getTag(tags, 'html') - // if this is not a server render, then update - if (htmlTag.getAttribute(ssrAttribute) === null) { - // initialize tracked changes - const addedTags = {} - const removedTags = {} - - for (const type in newInfo) { - // ignore these - if (metaInfoOptionKeys.includes(type)) { - continue - } - - if (type === 'title') { - // update the title - updateTitle(newInfo.title) - continue - } - - if (metaInfoAttributeKeys.includes(type)) { - const tagName = type.substr(0, 4) - updateAttribute(options, newInfo[type], getTag(tags, tagName)) - continue - } - - // tags should always be an array, ignore if it isnt - if (!isArray(newInfo[type])) { - continue - } - - const { oldTags, newTags } = updateTag( - options, - type, - newInfo[type], - getTag(tags, 'head'), - getTag(tags, 'body') - ) - - if (newTags.length) { - addedTags[type] = newTags - removedTags[type] = oldTags - } - } - - return { addedTags, removedTags } - } else { - // remove the server render attribute so we can update on changes + // if this is a server render, then dont update + if (htmlTag.getAttribute(ssrAttribute)) { + // remove the server render attribute so we can update on (next) changes htmlTag.removeAttribute(ssrAttribute) + return false } - return false + // initialize tracked changes + const addedTags = {} + const removedTags = {} + + for (const type in newInfo) { + // ignore these + if (metaInfoOptionKeys.includes(type)) { + continue + } + + if (type === 'title') { + // update the title + updateTitle(newInfo.title) + continue + } + + if (metaInfoAttributeKeys.includes(type)) { + const tagName = type.substr(0, 4) + updateAttribute(options, newInfo[type], getTag(tags, tagName)) + continue + } + + // tags should always be an array, ignore if it isnt + if (!isArray(newInfo[type])) { + continue + } + + const { oldTags, newTags } = updateTag( + options, + type, + newInfo[type], + getTag(tags, 'head'), + getTag(tags, 'body') + ) + + if (newTags.length) { + addedTags[type] = newTags + removedTags[type] = oldTags + } + } + + return { addedTags, removedTags } } diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 1106b6c..2e6d324 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -38,10 +38,6 @@ export default function getMetaInfo(options = {}, component, escapeSequences = [ } disableOptionKeys.forEach((disableKey, index) => { - if (!info[disableKey]) { - return - } - if (index === 0) { ensureIsArray(info, disableKey) } else if (index === 1) { diff --git a/src/shared/merge.js b/src/shared/merge.js index 00bc59b..4a64709 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -18,16 +18,25 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte const sourceIndex = source.findIndex(item => item[tagIDKeyName] === targetItem[tagIDKeyName]) const sourceItem = source[sourceIndex] - // source doesnt contain any duplicate id's - // or the source item should be ignored - if (sourceIndex === -1 || - (sourceItem.hasOwnProperty(contentKeyName) && sourceItem[contentKeyName] === undefined) || - (sourceItem.hasOwnProperty('innerHTML') && sourceItem.innerHTML === undefined) - ) { + // source doesnt contain any duplicate vmid's, we can keep targetItem + if (sourceIndex === -1) { destination.push(targetItem) return } + // when sourceItem explictly defines contentKeyName or innerHTML as undefined, its + // an indication that we need to skip the default behaviour + // So we keep the targetItem and ignore/remove the sourceItem + if ((sourceItem.hasOwnProperty(contentKeyName) && sourceItem[contentKeyName] === undefined) || + (sourceItem.hasOwnProperty('innerHTML') && sourceItem.innerHTML === undefined)) { + destination.push(targetItem) + // remove current index from source array so its not concatenated to destination below + source.splice(sourceIndex, 1) + return + } + + // we now know that targetItem is a duplicate and we should ignore it in favor of sourceItem + // if source specifies null as content then ignore both the target as the source if (sourceItem[contentKeyName] === null || sourceItem.innerHTML === null) { // remove current index from source array so its not concatenated to destination below @@ -35,7 +44,6 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte return } - // we now know that targetItem is a duplicate and we should ignore it in favor of sourceItem // now we only need to check if the target has a template to combine it with the source const targetTemplate = targetItem[metaTemplateKeyName] if (!targetTemplate) { @@ -64,9 +72,9 @@ export function merge(target, source, options = {}) { delete source.title } - for (const attrKey in metaInfoAttributeKeys) { + metaInfoAttributeKeys.forEach((attrKey) => { if (!source[attrKey]) { - continue + return } for (const key in source[attrKey]) { @@ -74,7 +82,7 @@ export function merge(target, source, options = {}) { delete source[attrKey][key] } } - } + }) return deepmerge(target, source, { arrayMerge: (t, s) => arrayMerge(options, t, s) diff --git a/src/shared/mixin.js b/src/shared/mixin.js index c47167d..1faf876 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -114,12 +114,14 @@ export default function createMixin(Vue, options) { // Wait that element is hidden before refreshing meta tags (to support animations) const interval = setInterval(() => { if (this.$el && this.$el.offsetParent !== null) { + /* istanbul ignore next line */ return } clearInterval(interval) if (!this.$parent) { + /* istanbul ignore next line */ return } diff --git a/test/components.test.js b/test/components.test.js index fa8c037..21d4e95 100644 --- a/test/components.test.js +++ b/test/components.test.js @@ -1,5 +1,6 @@ import _getMetaInfo from '../src/shared/getMetaInfo' -import { mount, defaultOptions, loadVueMetaPlugin } from './utils' +import { mount, loadVueMetaPlugin, vmTick } from './utils' +import { defaultOptions } from './utils/constants' import GoodbyeWorld from './fixtures/goodbye-world.vue' import HelloWorld from './fixtures/hello-world.vue' @@ -8,10 +9,31 @@ import Changed from './fixtures/changed.vue' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) +jest.mock('../src/shared/window', () => ({ + hasGlobalWindow: false +})) + describe('client', () => { let Vue + let html - beforeAll(() => (Vue = loadVueMetaPlugin())) + beforeAll(() => { + Vue = loadVueMetaPlugin() + + // force using timers, jest cant mock rAF + delete window.requestAnimationFrame + delete window.cancelAnimationFrame + + html = document.createElement('html') + document._getElementsByTagName = document.getElementsByTagName + jest.spyOn(document, 'getElementsByTagName').mockImplementation((tag) => { + if (tag === 'html') { + return [html] + } + + return document._getElementsByTagName(tag) + }) + }) test('meta-info refreshed on component\'s data change', () => { const wrapper = mount(HelloWorld, { localVue: Vue }) @@ -78,20 +100,59 @@ describe('client', () => { expect(metaInfo.title.text()).toEqual('Hello World') }) - test('changed function is called', () => { + test('doesnt update when ssr attribute is set', () => { + html.setAttribute(defaultOptions.ssrAttribute, 'true') + const wrapper = mount(HelloWorld, { localVue: Vue }) + + const { tags } = wrapper.vm.$meta().refresh() + expect(tags).toBe(false) + }) + + test('changed function is called', async () => { const parentComponent = new Vue({ render: h => h('div') }) const wrapper = mount(Changed, { localVue: Vue, parentComponent }) + await vmTick(wrapper.vm) + expect(wrapper.vm.$root._vueMeta.initialized).toBe(true) + let context const changed = jest.fn(function () { context = this }) - wrapper.setData({ changed }) - wrapper.setData({ childVisible: true }) + wrapper.setData({ changed, childVisible: true }) + jest.runAllTimers() - wrapper.vm.$parent.$meta().refresh() expect(changed).toHaveBeenCalledTimes(1) // TODO: this isnt what the docs say expect(context._uid).not.toBe(wrapper.vm._uid) }) + + test('afterNavigation function is called', () => { + const Vue = loadVueMetaPlugin(false, { refreshOnceOnNavigation: true }) + const afterNavigation = jest.fn() + const component = Vue.component('nav-component', { + render: h => h('div'), + metaInfo: { afterNavigation } + }) + + const guards = {} + Vue.prototype.$router = { + beforeEach(fn) { + guards.before = fn + }, + afterEach(fn) { + guards.after = fn + } + } + const wrapper = mount(component, { localVue: Vue }) + + expect(guards.before).toBeDefined() + expect(guards.after).toBeDefined() + + guards.before(null, null, () => {}) + expect(wrapper.vm.$root._vueMeta.paused).toBe(true) + + guards.after() + expect(afterNavigation).toHaveBeenCalled() + }) }) diff --git a/test/escaping.test.js b/test/escaping.test.js index 1d5afa8..84408fa 100644 --- a/test/escaping.test.js +++ b/test/escaping.test.js @@ -1,5 +1,6 @@ import _getMetaInfo from '../src/shared/getMetaInfo' -import { defaultOptions, loadVueMetaPlugin } from './utils' +import { loadVueMetaPlugin } from './utils' +import { defaultOptions } from './utils/constants' const getMetaInfo = (component, escapeSequences) => _getMetaInfo(defaultOptions, component, escapeSequences) @@ -11,6 +12,7 @@ describe('escaping', () => { test('special chars are escaped unless disabled', () => { const component = new Vue({ metaInfo: { + htmlAttrs: { key: 1 }, title: 'Hello & Goodbye', script: [{ innerHTML: 'Hello & Goodbye' }], __dangerouslyDisableSanitizers: ['script'] @@ -21,7 +23,9 @@ describe('escaping', () => { title: 'Hello & Goodbye', titleChunk: 'Hello & Goodbye', titleTemplate: '%s', - htmlAttrs: {}, + htmlAttrs: { + key: 1 + }, headAttrs: {}, bodyAttrs: {}, meta: [], diff --git a/test/generators.test.js b/test/generators.test.js index 3bdcd57..9aae149 100644 --- a/test/generators.test.js +++ b/test/generators.test.js @@ -1,5 +1,5 @@ import _generateServerInjector from '../src/server/generateServerInjector' -import { defaultOptions } from './utils' +import { defaultOptions } from './utils/constants' import metaInfoData from './utils/meta-info-data' const generateServerInjector = (type, data) => _generateServerInjector(defaultOptions, type, data) diff --git a/test/getComponentOptions.test.js b/test/getComponentOptions.test.js index 85a0272..bddf9f0 100644 --- a/test/getComponentOptions.test.js +++ b/test/getComponentOptions.test.js @@ -1,4 +1,5 @@ import getComponentOption from '../src/shared/getComponentOption' +import inMetaInfoBranch from '../src/shared/inMetaInfoBranch' import { mount, getVue, loadVueMetaPlugin } from './utils' describe('getComponentOption', () => { @@ -6,20 +7,20 @@ describe('getComponentOption', () => { beforeAll(() => (Vue = getVue())) - it('returns an empty object when no matching options are found', () => { + test('returns an empty object when no matching options are found', () => { const component = new Vue() const mergedOption = getComponentOption({ component, keyName: 'noop' }) expect(mergedOption).toEqual({}) }) - it('fetches the given option from the given component', () => { + test('fetches the given option from the given component', () => { const component = new Vue({ someOption: { foo: 'bar' } }) const mergedOption = getComponentOption({ component, keyName: 'someOption' }) expect(mergedOption.foo).toBeDefined() expect(mergedOption.foo).toEqual('bar') }) - it('calls a function option, injecting the component as context', () => { + test('calls a function option, injecting the component as context', () => { const component = new Vue({ name: 'Foobar', someFunc() { @@ -32,7 +33,7 @@ describe('getComponentOption', () => { expect(mergedOption.opt).toEqual('Foobar') }) - it('fetches deeply nested component options and merges them', () => { + test('fetches deeply nested component options and merges them', () => { const localVue = loadVueMetaPlugin(true, { keyName: 'foo' }) localVue.component('merge-child', { render: h => h('div'), foo: { bar: 'baz' } }) @@ -47,7 +48,8 @@ describe('getComponentOption', () => { expect(mergedOption).toEqual({ bar: 'baz', fizz: 'buzz' }) }) - it('allows for a custom array merge strategy', () => { + /* this undocumented functionality has been removed + test('allows for a custom array merge strategy', () => { const localVue = loadVueMetaPlugin(false, { keyName: 'foo' }) localVue.component('array-child', { render: h => h('div'), @@ -81,5 +83,45 @@ describe('getComponentOption', () => { { name: 'flower', content: 'tulip' }, { name: 'flower', content: 'rose' } ] }) + }) */ + + test('only traverses branches with metaInfo components', () => { + const localVue = loadVueMetaPlugin(false, { keyName: 'foo' }) + + localVue.component('meta-child', { + foo: { bar: 'baz' }, + render(h) { + return h('div', this.$slots.default) + } + }) + + localVue.component('nometa-child', { + render(h) { + return h('div', this.$slots.default) + } + }) + + const component = localVue.component('parent', { + render: h => h('div', null, [ + h('meta-child', null, [ h('nometa-child') ]), + h('nometa-child', null, [ h('meta-child') ]), + h('nometa-child') + ]) + }) + + const wrapper = mount(component, { localVue }) + + const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) + + expect(mergedOption).toEqual({ bar: 'baz' }) + expect(wrapper.vm.$children[0]._vueMeta).toBe(true) + expect(wrapper.vm.$children[1]._vueMeta).toBe(false) + expect(wrapper.vm.$children[2]._vueMeta).toBeUndefined() + + expect(inMetaInfoBranch(wrapper.vm.$children[0])).toBe(true) + expect(inMetaInfoBranch(wrapper.vm.$children[0].$children[0])).toBe(false) + expect(inMetaInfoBranch(wrapper.vm.$children[1])).toBe(true) + expect(inMetaInfoBranch(wrapper.vm.$children[1].$children[0])).toBe(true) + expect(inMetaInfoBranch(wrapper.vm.$children[2])).toBe(false) }) }) diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index 710e547..55592ac 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -1,5 +1,6 @@ import _getMetaInfo from '../src/shared/getMetaInfo' -import { defaultOptions, loadVueMetaPlugin } from './utils' +import { loadVueMetaPlugin } from './utils' +import { defaultOptions } from './utils/constants' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) @@ -593,6 +594,60 @@ describe('getMetaInfo', () => { }) }) + test('properly uses meta templates with one-level-deep nested children when parent has no template', () => { + Vue.component('merge-child', { + render: h => h('div'), + metaInfo: { + title: 'Hello', + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'An important title!', + template: chunk => `${chunk} - My page` + } + ] + } + }) + + const component = new Vue({ + metaInfo: { + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'Test title' + } + ] + }, + el: document.createElement('div'), + render: h => h('div', null, [h('merge-child')]) + }) + + expect(getMetaInfo(component)).toEqual({ + title: 'Hello', + titleChunk: 'Hello', + titleTemplate: '%s', + htmlAttrs: {}, + headAttrs: {}, + bodyAttrs: {}, + meta: [ + { + vmid: 'og:title', + property: 'og:title', + content: 'An important title! - My page' + } + ], + base: [], + link: [], + style: [], + script: [], + noscript: [], + __dangerouslyDisableSanitizers: [], + __dangerouslyDisableSanitizersByTagID: {} + }) + }) + test('no errors when metaInfo returns nothing', () => { const component = new Vue({ metaInfo() {}, @@ -623,6 +678,9 @@ describe('getMetaInfo', () => { render: h => h('div'), metaInfo: { title: undefined, + bodyAttrs: { + class: undefined + }, meta: [ { vmid: 'og:title', @@ -635,6 +693,9 @@ describe('getMetaInfo', () => { const component = new Vue({ metaInfo: { title: 'Hello', + bodyAttrs: { + class: 'class' + }, meta: [ { vmid: 'og:title', @@ -652,9 +713,11 @@ describe('getMetaInfo', () => { title: 'Hello', titleChunk: 'Hello', titleTemplate: '%s', - htmlAttrs: {}, + bodyAttrs: { + class: 'class' + }, headAttrs: {}, - bodyAttrs: {}, + htmlAttrs: {}, meta: [ { vmid: 'og:title', diff --git a/test/plugin-browser.test.js b/test/plugin-browser.test.js index 3932658..87b4410 100644 --- a/test/plugin-browser.test.js +++ b/test/plugin-browser.test.js @@ -1,6 +1,7 @@ import triggerUpdate from '../src/client/triggerUpdate' import batchUpdate from '../src/client/batchUpdate' -import { mount, defaultOptions, vmTick, VueMetaBrowserPlugin, loadVueMetaPlugin } from './utils' +import { mount, vmTick, VueMetaBrowserPlugin, loadVueMetaPlugin } from './utils' +import { defaultOptions } from './utils/constants' jest.mock('../src/client/triggerUpdate') jest.mock('../src/client/batchUpdate') diff --git a/test/plugin-server.test.js b/test/plugin-server.test.js index b989d7d..60b218a 100644 --- a/test/plugin-server.test.js +++ b/test/plugin-server.test.js @@ -1,4 +1,5 @@ -import { mount, defaultOptions, VueMetaServerPlugin, loadVueMetaPlugin } from './utils' +import { mount, VueMetaServerPlugin, loadVueMetaPlugin } from './utils' +import { defaultOptions } from './utils/constants' jest.mock('../package.json', () => ({ version: 'test-version' @@ -13,6 +14,17 @@ describe('plugin', () => { test('is loaded', () => { const instance = new Vue() expect(instance.$meta).toEqual(expect.any(Function)) + + expect(instance.$meta().inject).toEqual(expect.any(Function)) + expect(instance.$meta().refresh).toEqual(expect.any(Function)) + expect(instance.$meta().getOptions).toEqual(expect.any(Function)) + + expect(instance.$meta().inject()).toBeDefined() + expect(instance.$meta().refresh()).toBeDefined() + + const options = instance.$meta().getOptions() + expect(options).toBeDefined() + expect(options.keyName).toBe(defaultOptions.keyName) }) test('component has _hasMetaInfo set to true', () => { diff --git a/test/updaters.test.js b/test/updaters.test.js index bbee40a..d37ffc8 100644 --- a/test/updaters.test.js +++ b/test/updaters.test.js @@ -1,5 +1,5 @@ import _updateClientMetaInfo from '../src/client/updateClientMetaInfo' -import { defaultOptions } from './utils' +import { defaultOptions } from './utils/constants' import metaInfoData from './utils/meta-info-data' const updateClientMetaInfo = (type, data) => _updateClientMetaInfo(defaultOptions, { [type]: data }) diff --git a/test/utils/index.js b/test/utils/index.js index fee4c7b..0087c4e 100644 --- a/test/utils/index.js +++ b/test/utils/index.js @@ -2,15 +2,7 @@ import { mount, createLocalVue } from '@vue/test-utils' import { renderToString } from '@vue/server-test-utils' import VueMetaBrowserPlugin from '../../src/browser' import VueMetaServerPlugin from '../../src' - -import { - keyName, - attribute, - ssrAttribute, - tagIDKeyName, - metaTemplateKeyName, - contentKeyName -} from '../../src/shared/constants' +import { defaultOptions } from './constants' export { mount, @@ -19,15 +11,6 @@ export { VueMetaServerPlugin } -export const defaultOptions = { - keyName, - attribute, - ssrAttribute, - tagIDKeyName, - metaTemplateKeyName, - contentKeyName -} - export function getVue() { return createLocalVue() } diff --git a/test/utils/meta-info-data.js b/test/utils/meta-info-data.js index 5d869db..8ac912b 100644 --- a/test/utils/meta-info-data.js +++ b/test/utils/meta-info-data.js @@ -1,4 +1,4 @@ -import { defaultOptions } from './' +import { defaultOptions } from './constants' const metaInfoData = { title: { diff --git a/test/utils/setup.js b/test/utils/setup.js index 79e5d6d..a08224d 100644 --- a/test/utils/setup.js +++ b/test/utils/setup.js @@ -1,5 +1 @@ -import jsdom from 'jsdom-global' - -jsdom() - jest.useFakeTimers() diff --git a/yarn.lock b/yarn.lock index 5ccbee6..8decf8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -823,6 +823,92 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e" + integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA== + dependencies: + "@jest/source-map" "^24.3.0" + "@types/node" "*" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/environment@^24.3.1": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.3.1.tgz#1fbda3ec8fb8ffbaee665d314da91d662227e11e" + integrity sha512-M8bqEkQqPwZVhMMFMqqCnzqIZtuM5vDMfFQ9ZvnEfRT+2T1zTA4UAOH/V4HagEi6S3BCd/mdxFdYmPgXf7GKCA== + dependencies: + "@jest/fake-timers" "^24.3.0" + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + "@types/node" "*" + jest-mock "^24.3.0" + +"@jest/fake-timers@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.3.0.tgz#0a7f8b877b78780c3fa5c3f8683cc0aaf9488331" + integrity sha512-rHwVI17dGMHxHzfAhnZ04+wFznjFfZ246QugeBnbiYr7/bDosPD2P1qeNjWnJUUcfl0HpS6kkr+OB/mqSJxQFg== + dependencies: + "@jest/types" "^24.3.0" + "@types/node" "*" + jest-message-util "^24.3.0" + jest-mock "^24.3.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.3.0.tgz#4c0b1c9716212111920f7cf8c4329c69bc81924a" + integrity sha512-j7UZ49T8C4CVipEY99nLttnczVTtLyVzFfN20OiBVn7awOs0U3endXSTq7ouPrLR5y4YjI5GDcbcvDUjgeamzg== + dependencies: + "@jest/console" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/istanbul-lib-coverage" "^1.1.0" + +"@jest/transform@^24.3.1": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.3.1.tgz#ce9e1329eb5e640f493bcd5c8eb9970770959bfc" + integrity sha512-PpjylI5goT4Si69+qUjEeHuKjex0LjjrqJzrMYzlOZn/+SCumGKuGC0UQFeEPThyGsFvWH1Q4gj0R66eOHnIpw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.3.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.3.1" + jest-regex-util "^24.3.0" + jest-util "^24.3.0" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.3.0.tgz#3f6e117e47248a9a6b5f1357ec645bd364f7ad23" + integrity sha512-VoO1F5tU2n/93QN/zaZ7Q8SeV/Rj+9JJOgbvKbBwy4lenvmdj1iDaQEPXGTKrO6OSvDeb2drTFipZJYxgo6kIQ== + dependencies: + "@types/istanbul-lib-coverage" "^1.1.0" + "@types/yargs" "^12.0.9" + "@nuxt/babel-preset-app@^2.4.5": version "2.4.5" resolved "https://registry.yarnpkg.com/@nuxt/babel-preset-app/-/babel-preset-app-2.4.5.tgz#707043fe4686b7375df0917cca9134b7681ae9bf" @@ -865,6 +951,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/istanbul-lib-coverage@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a" + integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== + "@types/node@*", "@types/node@^10.11.7": version "10.12.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.24.tgz#b13564af612a22a20b5d95ca40f1bffb3af315cf" @@ -875,6 +966,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -885,6 +981,11 @@ resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== +"@types/yargs@^12.0.9": + version "12.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0" + integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA== + "@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.2": version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz#f3e20d77b89ddb7a4b9b7a75372f05cd3ac22d92" @@ -2357,6 +2458,11 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3508,6 +3614,11 @@ jest-each@^24.0.0: jest-util "^24.0.0" pretty-format "^24.0.0" +jest-environment-jsdom-global@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.1.1.tgz#c0b5fd969ace23137fd9c4a3b8e3367a54b4ed15" + integrity sha512-7+M6yMM6vpHfaR9ymrjobx1kG3TQyMpSu9yH7bz9bVHsBMUEdiBOmf6qVvyi8z09delLmHuPQpUFYm5SIGSzhQ== + jest-environment-jsdom@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz#5affa0654d6e44cd798003daa1a8701dbd6e4d11" @@ -3517,6 +3628,18 @@ jest-environment-jsdom@^24.0.0: jest-util "^24.0.0" jsdom "^11.5.1" +jest-environment-jsdom@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.3.1.tgz#49826bcf12fb3e38895f1e2aaeb52bde603cc2e4" + integrity sha512-rz2OSYJiQerDqWDwjisqRwhVNpwkqFXdtyMzEuJ47Ip9NRpRQ+qy7/+zFujPUy/Z+zjWRO5seHLB/dOD4VpEVg== + dependencies: + "@jest/environment" "^24.3.1" + "@jest/fake-timers" "^24.3.0" + "@jest/types" "^24.3.0" + jest-mock "^24.3.0" + jest-util "^24.3.0" + jsdom "^11.5.1" + jest-environment-node@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.0.0.tgz#330948980656ed8773ce2e04eb597ed91e3c7190" @@ -3544,6 +3667,21 @@ jest-haste-map@^24.0.0: micromatch "^3.1.10" sane "^3.0.0" +jest-haste-map@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.3.1.tgz#b4a66dbe1e6bc45afb9cd19c083bff81cdd535a1" + integrity sha512-OTMQle+astr1lWKi62Ccmk2YWn6OtUoU/8JpJdg8zdsnpFIry/k0S4sQ4nWocdM07PFdvqcthWc78CkCE6sXvA== + dependencies: + "@jest/types" "^24.3.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.3.0" + jest-util "^24.3.0" + jest-worker "^24.3.1" + micromatch "^3.1.10" + sane "^4.0.3" + jest-jasmine2@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" @@ -3590,16 +3728,42 @@ jest-message-util@^24.0.0: slash "^2.0.0" stack-utils "^1.0.1" +jest-message-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.3.0.tgz#e8f64b63ebc75b1a9c67ee35553752596e70d4a9" + integrity sha512-lXM0YgKYGqN5/eH1NGw4Ix+Pk2I9Y77beyRas7xM24n+XTTK3TbT0VkT3L/qiyS7WkW0YwyxoXnnAaGw4hsEDA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + jest-mock@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== +jest-mock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.3.0.tgz#95a86b6ad474e3e33227e6dd7c4ff6b07e18d3cb" + integrity sha512-AhAo0qjbVWWGvcbW5nChFjR0ObQImvGtU6DodprNziDOt+pP0CBdht/sYcNIOXeim8083QUi9bC8QdKB8PTK4Q== + dependencies: + "@jest/types" "^24.3.0" + jest-regex-util@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + jest-resolve-dependencies@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" @@ -3670,6 +3834,11 @@ jest-serializer@^24.0.0: resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== +jest-serializer@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.3.0.tgz#074e307300d1451617cf2630d11543ee4f74a1c8" + integrity sha512-RiSpqo2OFbVLJN/PgAOwQIUeHDfss6NBUDTLhjiJM8Bb5rMrwRqHfkaqahIsOf9cXXB5UjcqDCzbQ7AIoMqWkg== + jest-snapshot@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" @@ -3700,6 +3869,25 @@ jest-util@^24.0.0: slash "^2.0.0" source-map "^0.6.0" +jest-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.3.0.tgz#a549ae9910fedbd4c5912b204bb1bcc122ea0057" + integrity sha512-eKIAC+MTKWZthUUVOwZ3Tc5a0cKMnxalQHr6qZ4kPzKn6k09sKvsmjCygqZ1SxVVfUKoa8Sfn6XDv9uTJ1iXTg== + dependencies: + "@jest/console" "^24.3.0" + "@jest/fake-timers" "^24.3.0" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/node" "*" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + jest-validate@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" @@ -3729,6 +3917,15 @@ jest-worker@^24.0.0: merge-stream "^1.0.1" supports-color "^6.1.0" +jest-worker@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.3.1.tgz#c1759dd2b1d5541b09a2e5e1bc3288de6c9d8632" + integrity sha512-ZCoAe/iGLzTJvWHrO8fyx3bmEQhpL16SILJmWHKe8joHhyF3z00psF1sCRT54DoHw5GJG0ZpUtGy+ylvwA4haA== + dependencies: + "@types/node" "*" + merge-stream "^1.0.1" + supports-color "^6.1.0" + jest@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" @@ -3776,11 +3973,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom-global@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-3.0.2.tgz#6bd299c13b0c4626b2da2c0393cd4385d606acb9" - integrity sha1-a9KZwTsMRiay2iwDk81DhdYGrLk= - jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -4951,6 +5143,13 @@ realpath-native@^1.0.0, realpath-native@^1.0.2: dependencies: util.promisify "^1.0.0" +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -5318,6 +5517,21 @@ sane@^3.0.0: optionalDependencies: fsevents "^1.2.3" +sane@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.0.3.tgz#e878c3f19e25cc57fbb734602f48f8a97818b181" + integrity sha512-hSLkC+cPHiBQs7LSyXkotC3UUtyn8C4FMn50TNaacRyvBlI+3ebcxMpqckmTdtXVtel87YS7GXN3UIOj7NiGVQ== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" From 5ad671169bbbd8fb342c97366c612c769c40a805 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 23:05:39 +0100 Subject: [PATCH 26/58] fix: dont call changed with explicit this in refresh this is probably not the component changed was defined on, removing call(this) gives context control back to the user --- src/client/refresh.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/refresh.js b/src/client/refresh.js index 8896240..a70deee 100644 --- a/src/client/refresh.js +++ b/src/client/refresh.js @@ -27,7 +27,7 @@ export default function _refresh(options = {}) { const tags = updateClientMetaInfo(options, metaInfo) // emit "event" with new info if (tags && isFunction(metaInfo.changed)) { - metaInfo.changed.call(this, metaInfo, tags.addedTags, tags.removedTags) + metaInfo.changed(metaInfo, tags.addedTags, tags.removedTags) } return { vm: this, metaInfo, tags } From f490a48b998888d99cf957a58178167284beaee8 Mon Sep 17 00:00:00 2001 From: pimlie Date: Fri, 8 Mar 2019 23:14:24 +0100 Subject: [PATCH 27/58] refactor: small improvements (mainly tests) --- src/shared/merge.js | 4 +-- test/components.test.js | 41 ++++++++++++++----------- test/fixtures/changed.vue | 12 ++++++-- test/getMetaInfo.test.js | 2 -- test/shared.test.js | 64 +++++++++++++++++++++++++++++++++++++++ test/utils/constants.js | 17 +++++++++++ 6 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 test/shared.test.js create mode 100644 test/utils/constants.js diff --git a/src/shared/merge.js b/src/shared/merge.js index 4a64709..ced8de3 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -25,8 +25,8 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte } // when sourceItem explictly defines contentKeyName or innerHTML as undefined, its - // an indication that we need to skip the default behaviour - // So we keep the targetItem and ignore/remove the sourceItem + // an indication that we need to skip the default behaviour or child has preference over parent + // which means we keep the targetItem and ignore/remove the sourceItem if ((sourceItem.hasOwnProperty(contentKeyName) && sourceItem[contentKeyName] === undefined) || (sourceItem.hasOwnProperty('innerHTML') && sourceItem.innerHTML === undefined)) { destination.push(targetItem) diff --git a/test/components.test.js b/test/components.test.js index 21d4e95..5742836 100644 --- a/test/components.test.js +++ b/test/components.test.js @@ -109,22 +109,23 @@ describe('client', () => { }) test('changed function is called', async () => { - const parentComponent = new Vue({ render: h => h('div') }) - const wrapper = mount(Changed, { localVue: Vue, parentComponent }) - - await vmTick(wrapper.vm) - expect(wrapper.vm.$root._vueMeta.initialized).toBe(true) - let context const changed = jest.fn(function () { context = this }) - wrapper.setData({ changed, childVisible: true }) + + const wrapper = mount(Changed, { localVue: Vue, propsData: { changed } }) + + await vmTick(wrapper.vm) + expect(wrapper.vm.$root._vueMeta.initialized).toBe(true) + // TODO: does changed need to run on initialization? + expect(changed).toHaveBeenCalledTimes(1) + + wrapper.setData({ childVisible: true }) jest.runAllTimers() - expect(changed).toHaveBeenCalledTimes(1) - // TODO: this isnt what the docs say - expect(context._uid).not.toBe(wrapper.vm._uid) + expect(changed).toHaveBeenCalledTimes(2) + expect(context._uid).toBe(wrapper.vm._uid) }) test('afterNavigation function is called', () => { @@ -136,15 +137,19 @@ describe('client', () => { }) const guards = {} - Vue.prototype.$router = { - beforeEach(fn) { - guards.before = fn - }, - afterEach(fn) { - guards.after = fn + const wrapper = mount(component, { + localVue: Vue, + mocks: { + $router: { + beforeEach(fn) { + guards.before = fn + }, + afterEach(fn) { + guards.after = fn + } + } } - } - const wrapper = mount(component, { localVue: Vue }) + }) expect(guards.before).toBeDefined() expect(guards.after).toBeDefined() diff --git a/test/fixtures/changed.vue b/test/fixtures/changed.vue index 20a6de5..4d2c02d 100644 --- a/test/fixtures/changed.vue +++ b/test/fixtures/changed.vue @@ -11,16 +11,24 @@ export default { components: { HelloWorld }, + props: { + changed: { + type: Function + } + }, metaInfo() { return { - changed: this.changed + changed: this._changed } }, data() { return { childVisible: false, - changed: () => {} + _changed: () => {} } + }, + mounted() { + this._changed = this.changed.bind(this) } } diff --git a/test/getMetaInfo.test.js b/test/getMetaInfo.test.js index 55592ac..8a822ff 100644 --- a/test/getMetaInfo.test.js +++ b/test/getMetaInfo.test.js @@ -483,8 +483,6 @@ describe('getMetaInfo', () => { }) }) - // TODO: Still failing :( Child template won't be applied if child has no content as well - test('properly uses meta templates with one-level-deep nested children template', () => { Vue.component('merge-child', { render: h => h('div'), diff --git a/test/shared.test.js b/test/shared.test.js new file mode 100644 index 0000000..57d70a2 --- /dev/null +++ b/test/shared.test.js @@ -0,0 +1,64 @@ +/** + * @jest-environment node + */ +import { ensureIsArray } from '../src/shared/ensure' +import setOptions from '../src/shared/options' +import { hasGlobalWindowFn } from '../src/shared/window' +import { defaultOptions } from './utils/constants' + +const noop = () => {} + +describe('shared', () => { + test('ensureIsArray ensures var is array', () => { + let a = { p: 1 } + expect(ensureIsArray(a)).toEqual([]) + + a = 1 + expect(ensureIsArray(a)).toEqual([]) + + a = [1] + expect(ensureIsArray(a)).toBe(a) + }) + + test('ensureIsArray ensures obj prop is array', () => { + const a = { p: 1 } + expect(ensureIsArray(a, 'p')).toEqual({ p: [] }) + }) + + test('no error when window is not defined', () => { + expect(hasGlobalWindowFn()).toBe(false) + }) + + test('can use setOptions', () => { + const keyName = 'MY KEY' + let options = { keyName } + options = setOptions(options) + + expect(options.keyName).toBe(keyName) + expect(options.contentKeyName).toBeDefined() + expect(options.contentKeyName).toBe(defaultOptions.contentKeyName) + }) + + test('setOptions warns when afterNavigation not fn', () => { + const warn = jest.spyOn(console, 'warn').mockImplementation(noop) + + let options = { afterNavigation: true } + options = setOptions(options) + + expect(warn).toHaveBeenCalledTimes(1) + expect(options.afterNavigation).toBeUndefined() + + warn.mockRestore() + }) + test('setOptions sets refreshOnceOnNavigation when afterNavigation defined', () => { + const warn = jest.spyOn(console, 'warn').mockImplementation(noop) + + let options = { afterNavigation: noop } + options = setOptions(options) + + expect(warn).not.toHaveBeenCalled() + expect(options.refreshOnceOnNavigation).toBe(true) + + warn.mockRestore() + }) +}) diff --git a/test/utils/constants.js b/test/utils/constants.js new file mode 100644 index 0000000..a1b60bb --- /dev/null +++ b/test/utils/constants.js @@ -0,0 +1,17 @@ +import { + keyName, + attribute, + ssrAttribute, + tagIDKeyName, + metaTemplateKeyName, + contentKeyName +} from '../../src/shared/constants' + +export const defaultOptions = { + keyName, + attribute, + ssrAttribute, + tagIDKeyName, + metaTemplateKeyName, + contentKeyName +} From 18fd23d3c0efc06bec716c3f814141be8c323f56 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 09:12:58 +0100 Subject: [PATCH 28/58] refactor: remove beforeMount hook This shouldnt be necessary anymore because we force initialization once on mounted/nextTick. Using beforeMount is also inherently less optimal because you are unlikely to benefit from walking the component tree as beforeMount is called before all child components are loaded. So using beforeMount resulted probably that for every component which uses metaInfo a refresh was called on load. A possible caveat that may exists due to removing beforeMount in favor of a single refresh is that it takes longer for your metaInfo to be updated if you have a lot of components on your page, not sure if this will be a problem in real world scenarios because if this is a problem you should probably be using ssr anyway. Also the v1 docs state that using beforeMount also results in a single update (although in practice it could be more then one) --- src/shared/mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/mixin.js b/src/shared/mixin.js index 1faf876..f6807a2 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -5,7 +5,7 @@ import { ensuredPush } from './ensure' export default function createMixin(Vue, options) { // for which Vue lifecycle hooks should the metaInfo be refreshed - const updateOnLifecycleHook = ['activated', 'deactivated', 'beforeMount'] + const updateOnLifecycleHook = ['activated', 'deactivated'] // watch for client side component updates return { From a853ce3de74cbceeeab122c28925bbb9c869ba6a Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 09:24:50 +0100 Subject: [PATCH 29/58] Revert "refactor: remove beforeMount hook" This reverts commit 3a6374e2afa57e624c60e42277f71edc998f1f9f. --- src/shared/mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/mixin.js b/src/shared/mixin.js index f6807a2..1faf876 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -5,7 +5,7 @@ import { ensuredPush } from './ensure' export default function createMixin(Vue, options) { // for which Vue lifecycle hooks should the metaInfo be refreshed - const updateOnLifecycleHook = ['activated', 'deactivated'] + const updateOnLifecycleHook = ['activated', 'deactivated', 'beforeMount'] // watch for client side component updates return { From 05b8891110fcbd2c6b0d6289affd184f9527c686 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 17:56:47 +0100 Subject: [PATCH 30/58] test: add e2e tests fix: boolean attributes client side --- .babelrc | 8 +- .gitignore | 1 + examples/.babelrc | 3 +- examples/package.json | 1 + examples/vuex/router.js | 5 +- package.json | 13 +- src/client/batchUpdate.js | 4 +- src/client/updateClientMetaInfo.js | 2 +- src/client/updaters/attribute.js | 5 +- test/{fixtures => components}/changed.vue | 0 .../goodbye-world.vue | 0 test/{fixtures => components}/hello-world.vue | 0 test/{fixtures => components}/keep-alive.vue | 0 test/e2e/browser.test.js | 79 + test/fixtures/app.template.html | 17 + test/fixtures/app.vue | 33 - test/fixtures/basic/App.vue | 21 + test/fixtures/basic/client.js | 10 + test/fixtures/basic/router.js | 18 + test/fixtures/basic/server.js | 10 + test/fixtures/basic/views/about.vue | 16 + test/fixtures/basic/views/home.vue | 37 + test/{ => unit}/components.test.js | 16 +- test/{ => unit}/escaping.test.js | 6 +- test/{ => unit}/generators.test.js | 6 +- test/{ => unit}/getComponentOptions.test.js | 6 +- test/{ => unit}/getMetaInfo.test.js | 6 +- test/{ => unit}/plugin-browser.test.js | 18 +- test/{ => unit}/plugin-server.test.js | 6 +- test/{ => unit}/shared.test.js | 8 +- test/{ => unit}/updaters.test.js | 6 +- test/utils/browser.js | 99 ++ test/utils/build.js | 114 ++ test/utils/chrome.js | 264 ++++ test/utils/setup.js | 1 + yarn.lock | 1265 ++++++++++++++++- 36 files changed, 1999 insertions(+), 105 deletions(-) rename test/{fixtures => components}/changed.vue (100%) rename test/{fixtures => components}/goodbye-world.vue (100%) rename test/{fixtures => components}/hello-world.vue (100%) rename test/{fixtures => components}/keep-alive.vue (100%) create mode 100644 test/e2e/browser.test.js create mode 100644 test/fixtures/app.template.html delete mode 100644 test/fixtures/app.vue create mode 100644 test/fixtures/basic/App.vue create mode 100644 test/fixtures/basic/client.js create mode 100644 test/fixtures/basic/router.js create mode 100644 test/fixtures/basic/server.js create mode 100644 test/fixtures/basic/views/about.vue create mode 100644 test/fixtures/basic/views/home.vue rename test/{ => unit}/components.test.js (91%) rename test/{ => unit}/escaping.test.js (92%) rename test/{ => unit}/generators.test.js (89%) rename test/{ => unit}/getComponentOptions.test.js (95%) rename test/{ => unit}/getMetaInfo.test.js (99%) rename test/{ => unit}/plugin-browser.test.js (86%) rename test/{ => unit}/plugin-server.test.js (95%) rename test/{ => unit}/shared.test.js (87%) rename test/{ => unit}/updaters.test.js (93%) create mode 100644 test/utils/browser.js create mode 100644 test/utils/build.js create mode 100644 test/utils/chrome.js diff --git a/.babelrc b/.babelrc index 4f4194d..98d9142 100644 --- a/.babelrc +++ b/.babelrc @@ -1,13 +1,13 @@ { + "plugins": ["@babel/plugin-syntax-dynamic-import"], "env": { "test": { + "plugins": ["dynamic-import-node"], "presets": [ [ "@babel/env", { - "targets": { - "node": "current" - } + "targets": { "node": "current" } }] ] } - } + }, } diff --git a/.gitignore b/.gitignore index 003e265..1ae8e09 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ package-lock.json # built code lib es +.vue-meta # examples yarn lock examples/yarn.lock diff --git a/examples/.babelrc b/examples/.babelrc index 1320b9a..bf6f867 100644 --- a/examples/.babelrc +++ b/examples/.babelrc @@ -1,3 +1,4 @@ { - "presets": ["@babel/preset-env"] + "presets": ["@babel/preset-env"], + "plugins": ["@babel/plugin-syntax-dynamic-import"], } diff --git a/examples/package.json b/examples/package.json index fb54612..67a2156 100644 --- a/examples/package.json +++ b/examples/package.json @@ -21,6 +21,7 @@ "devDependencies": { "@babel/core": "^7.3.3", "@babel/node": "^7.2.2", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/preset-env": "^7.3.1", "babel-loader": "^8.0.5", "cross-env": "^5.2.0", diff --git a/examples/vuex/router.js b/examples/vuex/router.js index 677b408..063a2fb 100644 --- a/examples/vuex/router.js +++ b/examples/vuex/router.js @@ -1,12 +1,13 @@ import Vue from 'vue' import Router from 'vue-router' import Meta from 'vue-meta' -import Home from './views/Home.vue' -import Post from './views/Post.vue' Vue.use(Router) Vue.use(Meta) +const Home = () => import('./views/Home.vue') +const Post = () => import('./views/Post.vue') + export default new Router({ mode: 'history', base: '/vuex', diff --git a/package.json b/package.json index fff70f7..30870a0 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,9 @@ "lint": "eslint src test", "prerelease": "npm run build", "release": "npm publish", - "test": "jest", + "test": "yarn test:unit && yarn test:e2e", + "test:e2e": "jest test/e2e", + "test:unit": "jest test/unit", "toc": "doctoc README.md --title '# Table of Contents'", "update-cdn": "babel-node scripts/update-cdn.js", "preversion": "npm run toc", @@ -59,6 +61,7 @@ "@babel/cli": "^7.2.3", "@babel/core": "^7.3.3", "@babel/node": "^7.2.2", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/preset-env": "^7.3.1", "@nuxt/babel-preset-app": "^2.4.5", "@nuxtjs/eslint-config": "^0.0.1", @@ -68,6 +71,7 @@ "babel-eslint": "^10.0.1", "babel-jest": "^24.1.0", "babel-loader": "^8.0.5", + "babel-plugin-dynamic-import-node": "^2.2.0", "codecov": "^3.2.0", "doctoc": "^1.4.0", "eslint": "^5.14.1", @@ -83,6 +87,8 @@ "jest-environment-jsdom": "^24.3.1", "jest-environment-jsdom-global": "^1.1.1", "jsdom": "^13.2.0", + "lodash": "^4.17.11", + "puppeteer-core": "^1.13.0", "rimraf": "^2.6.3", "rollup": "^1.2.2", "rollup-plugin-babel": "^4.3.2", @@ -94,7 +100,10 @@ "update-section": "^0.3.3", "vue": "^2.6.6", "vue-jest": "^3.0.3", + "vue-loader": "^15.7.0", + "vue-router": "^3.0.2", "vue-server-renderer": "^2.6.6", - "vue-template-compiler": "^2.6.6" + "vue-template-compiler": "^2.6.6", + "webpack": "^4.29.6" } } diff --git a/src/client/batchUpdate.js b/src/client/batchUpdate.js index 909000d..5d6e278 100644 --- a/src/client/batchUpdate.js +++ b/src/client/batchUpdate.js @@ -15,9 +15,7 @@ const startUpdate = (hasGlobalWindow ? window.requestAnimationFrame : null) || ( * @return {Number} id - a new ID */ export default function batchUpdate(id, callback) { - if (id) { - stopUpdate(id) - } + stopUpdate(id) return startUpdate(() => { id = null diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index e365213..633a9a3 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -24,7 +24,7 @@ export default function updateClientMetaInfo(options = {}, newInfo) { const htmlTag = getTag(tags, 'html') // if this is a server render, then dont update - if (htmlTag.getAttribute(ssrAttribute)) { + if (htmlTag.hasAttribute(ssrAttribute)) { // remove the server render attribute so we can update on (next) changes htmlTag.removeAttribute(ssrAttribute) return false diff --git a/src/client/updaters/attribute.js b/src/client/updaters/attribute.js index 79a347b..6780c7c 100644 --- a/src/client/updaters/attribute.js +++ b/src/client/updaters/attribute.js @@ -1,3 +1,4 @@ +import { booleanHtmlAttributes } from '../../shared/constants' import isArray from '../../shared/isArray' /** @@ -14,7 +15,9 @@ export default function updateAttribute({ attribute } = {}, attrs, tag) { const keepIndexes = [] for (const attr in attrs) { if (attrs.hasOwnProperty(attr)) { - const value = isArray(attrs[attr]) ? attrs[attr].join(' ') : attrs[attr] + const value = booleanHtmlAttributes.includes(attr) + ? '' + : isArray(attrs[attr]) ? attrs[attr].join(' ') : attrs[attr] tag.setAttribute(attr, value || '') diff --git a/test/fixtures/changed.vue b/test/components/changed.vue similarity index 100% rename from test/fixtures/changed.vue rename to test/components/changed.vue diff --git a/test/fixtures/goodbye-world.vue b/test/components/goodbye-world.vue similarity index 100% rename from test/fixtures/goodbye-world.vue rename to test/components/goodbye-world.vue diff --git a/test/fixtures/hello-world.vue b/test/components/hello-world.vue similarity index 100% rename from test/fixtures/hello-world.vue rename to test/components/hello-world.vue diff --git a/test/fixtures/keep-alive.vue b/test/components/keep-alive.vue similarity index 100% rename from test/fixtures/keep-alive.vue rename to test/components/keep-alive.vue diff --git a/test/e2e/browser.test.js b/test/e2e/browser.test.js new file mode 100644 index 0000000..460a89e --- /dev/null +++ b/test/e2e/browser.test.js @@ -0,0 +1,79 @@ +import Browser from '../utils/browser' +import { buildFixture } from '../utils/build' + +const browser = new Browser() + +describe('basic browser with ssr page', () => { + let page = null + let url + let html + + beforeAll(async () => { + const fixture = await buildFixture('basic') + url = fixture.url + html = fixture.html + + await browser.start({ + // slowMo: 50, + // headless: false + }) + }) + + // Stop browser + afterAll(async () => { + if (page) await page.close() + await browser.close() + }) + + test('validate ssr', () => { + const htmlTag = html.match(/]+)>/)[0] + expect(htmlTag).toContain('data-vue-meta-server-rendered') + expect(htmlTag).toContain(' lang="en" ') + expect(htmlTag).toContain(' amp ') + expect(htmlTag).not.toContain('allowfullscreen') + expect(html.match(/]*>(.*?)<\/title>/)[1]).toBe('Home | Vue Meta Test') + expect(html.match(/]+type="application\/ld\+json"[^>]*>(.*?) JSON.parse(sanitizeCheck[0])).not.toThrow() + expect(() => JSON.parse(sanitizeCheck[1])).toThrow() + expect(() => JSON.parse(sanitizeCheck[2])).not.toThrow() + }) + + test('Open /', async () => { + page = await browser.page(url) + + expect(await page.$attr('html', 'data-vue-meta-server-rendered')).toBe(null) + expect(await page.$attr('html', 'lang')).toBe('en') + expect(await page.$attr('html', 'amp')).toBe('') + expect(await page.$attr('html', 'allowfullscreen')).toBe(null) + expect(await page.$attr('head', 'test')).toBe('true') + expect(await page.$text('h1')).toBe('Basic') + expect(await page.$text('title')).toBe('Home | Vue Meta Test') + expect(await page.$$eval('meta', metas => metas.length)).toBe(2) + + let sanitizeCheck = await page.$$text('script') + sanitizeCheck.push(...(await page.$$text('noscript'))) + sanitizeCheck = sanitizeCheck.filter(v => !!v) + + expect(sanitizeCheck.length).toBe(3) + expect(() => JSON.parse(sanitizeCheck[0])).not.toThrow() + expect(() => JSON.parse(sanitizeCheck[1])).not.toThrow() + expect(() => JSON.parse(sanitizeCheck[2])).not.toThrow() + }) + + test('/about', async () => { + const { hook } = await page.vueMeta.navigate('/about', false) + await hook + expect(await page.$text('title')).toBe('About') + expect(await page.$$eval('meta', metas => metas.length)).toBe(1) + }) +}) diff --git a/test/fixtures/app.template.html b/test/fixtures/app.template.html new file mode 100644 index 0000000..531cf99 --- /dev/null +++ b/test/fixtures/app.template.html @@ -0,0 +1,17 @@ + + + + {{ meta.text() }} + {{ title.text() }} + {{ link.text() }} + {{ style.text() }} + {{ webpackAssets }} + {{ script.text() }} + {{ noscript.text() }} + + + {{ app }} + {{ script.text({ body: true }) }} + {{ noscript.text({ body: true }) }} + + diff --git a/test/fixtures/app.vue b/test/fixtures/app.vue deleted file mode 100644 index 5e7cd91..0000000 --- a/test/fixtures/app.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - - diff --git a/test/fixtures/basic/App.vue b/test/fixtures/basic/App.vue new file mode 100644 index 0000000..6a25e78 --- /dev/null +++ b/test/fixtures/basic/App.vue @@ -0,0 +1,21 @@ + + + diff --git a/test/fixtures/basic/client.js b/test/fixtures/basic/client.js new file mode 100644 index 0000000..96a4f08 --- /dev/null +++ b/test/fixtures/basic/client.js @@ -0,0 +1,10 @@ +import Vue from 'vue' +import VueMeta from '../../../src/browser' +import App from './App.vue' +import createRouter from './router' + +Vue.use(VueMeta) + +App.router = createRouter() + +new Vue(App).$mount('#app') diff --git a/test/fixtures/basic/router.js b/test/fixtures/basic/router.js new file mode 100644 index 0000000..0dcc535 --- /dev/null +++ b/test/fixtures/basic/router.js @@ -0,0 +1,18 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +const Home = () => import('./views/home.vue') +const Post = () => import('./views/about.vue') + +export default function createRouter() { + return new Router({ + mode: 'hash', + base: '/', + routes: [ + { path: '/', component: Home }, + { path: '/about', component: Post } + ] + }) +} diff --git a/test/fixtures/basic/server.js b/test/fixtures/basic/server.js new file mode 100644 index 0000000..4ddc030 --- /dev/null +++ b/test/fixtures/basic/server.js @@ -0,0 +1,10 @@ +import Vue from 'vue' +import VueMeta from '../../../src' +import App from './App.vue' +import createRouter from './router' + +Vue.use(VueMeta) + +App.router = createRouter() + +export default new Vue(App) diff --git a/test/fixtures/basic/views/about.vue b/test/fixtures/basic/views/about.vue new file mode 100644 index 0000000..e6388ae --- /dev/null +++ b/test/fixtures/basic/views/about.vue @@ -0,0 +1,16 @@ + + + diff --git a/test/fixtures/basic/views/home.vue b/test/fixtures/basic/views/home.vue new file mode 100644 index 0000000..d0ea32c --- /dev/null +++ b/test/fixtures/basic/views/home.vue @@ -0,0 +1,37 @@ + + + diff --git a/test/components.test.js b/test/unit/components.test.js similarity index 91% rename from test/components.test.js rename to test/unit/components.test.js index 5742836..5f56f35 100644 --- a/test/components.test.js +++ b/test/unit/components.test.js @@ -1,15 +1,15 @@ -import _getMetaInfo from '../src/shared/getMetaInfo' -import { mount, loadVueMetaPlugin, vmTick } from './utils' -import { defaultOptions } from './utils/constants' +import _getMetaInfo from '../../src/shared/getMetaInfo' +import { mount, loadVueMetaPlugin, vmTick } from '../utils' +import { defaultOptions } from '../utils/constants' -import GoodbyeWorld from './fixtures/goodbye-world.vue' -import HelloWorld from './fixtures/hello-world.vue' -import KeepAlive from './fixtures/keep-alive.vue' -import Changed from './fixtures/changed.vue' +import GoodbyeWorld from '../components/goodbye-world.vue' +import HelloWorld from '../components/hello-world.vue' +import KeepAlive from '../components/keep-alive.vue' +import Changed from '../components/changed.vue' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) -jest.mock('../src/shared/window', () => ({ +jest.mock('../../src/shared/window', () => ({ hasGlobalWindow: false })) diff --git a/test/escaping.test.js b/test/unit/escaping.test.js similarity index 92% rename from test/escaping.test.js rename to test/unit/escaping.test.js index 84408fa..2ed0b86 100644 --- a/test/escaping.test.js +++ b/test/unit/escaping.test.js @@ -1,6 +1,6 @@ -import _getMetaInfo from '../src/shared/getMetaInfo' -import { loadVueMetaPlugin } from './utils' -import { defaultOptions } from './utils/constants' +import _getMetaInfo from '../../src/shared/getMetaInfo' +import { loadVueMetaPlugin } from '../utils' +import { defaultOptions } from '../utils/constants' const getMetaInfo = (component, escapeSequences) => _getMetaInfo(defaultOptions, component, escapeSequences) diff --git a/test/generators.test.js b/test/unit/generators.test.js similarity index 89% rename from test/generators.test.js rename to test/unit/generators.test.js index 9aae149..33aa4b2 100644 --- a/test/generators.test.js +++ b/test/unit/generators.test.js @@ -1,6 +1,6 @@ -import _generateServerInjector from '../src/server/generateServerInjector' -import { defaultOptions } from './utils/constants' -import metaInfoData from './utils/meta-info-data' +import _generateServerInjector from '../../src/server/generateServerInjector' +import { defaultOptions } from '../utils/constants' +import metaInfoData from '../utils/meta-info-data' const generateServerInjector = (type, data) => _generateServerInjector(defaultOptions, type, data) diff --git a/test/getComponentOptions.test.js b/test/unit/getComponentOptions.test.js similarity index 95% rename from test/getComponentOptions.test.js rename to test/unit/getComponentOptions.test.js index bddf9f0..e49ffaa 100644 --- a/test/getComponentOptions.test.js +++ b/test/unit/getComponentOptions.test.js @@ -1,6 +1,6 @@ -import getComponentOption from '../src/shared/getComponentOption' -import inMetaInfoBranch from '../src/shared/inMetaInfoBranch' -import { mount, getVue, loadVueMetaPlugin } from './utils' +import getComponentOption from '../../src/shared/getComponentOption' +import inMetaInfoBranch from '../../src/shared/inMetaInfoBranch' +import { mount, getVue, loadVueMetaPlugin } from '../utils' describe('getComponentOption', () => { let Vue diff --git a/test/getMetaInfo.test.js b/test/unit/getMetaInfo.test.js similarity index 99% rename from test/getMetaInfo.test.js rename to test/unit/getMetaInfo.test.js index 8a822ff..ba79c23 100644 --- a/test/getMetaInfo.test.js +++ b/test/unit/getMetaInfo.test.js @@ -1,6 +1,6 @@ -import _getMetaInfo from '../src/shared/getMetaInfo' -import { loadVueMetaPlugin } from './utils' -import { defaultOptions } from './utils/constants' +import _getMetaInfo from '../../src/shared/getMetaInfo' +import { loadVueMetaPlugin } from '../utils' +import { defaultOptions } from '../utils/constants' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) diff --git a/test/plugin-browser.test.js b/test/unit/plugin-browser.test.js similarity index 86% rename from test/plugin-browser.test.js rename to test/unit/plugin-browser.test.js index 87b4410..6ec044c 100644 --- a/test/plugin-browser.test.js +++ b/test/unit/plugin-browser.test.js @@ -1,11 +1,11 @@ -import triggerUpdate from '../src/client/triggerUpdate' -import batchUpdate from '../src/client/batchUpdate' -import { mount, vmTick, VueMetaBrowserPlugin, loadVueMetaPlugin } from './utils' -import { defaultOptions } from './utils/constants' +import triggerUpdate from '../../src/client/triggerUpdate' +import batchUpdate from '../../src/client/batchUpdate' +import { mount, vmTick, VueMetaBrowserPlugin, loadVueMetaPlugin } from '../utils' +import { defaultOptions } from '../utils/constants' -jest.mock('../src/client/triggerUpdate') -jest.mock('../src/client/batchUpdate') -jest.mock('../package.json', () => ({ +jest.mock('../../src/client/triggerUpdate') +jest.mock('../../src/client/batchUpdate') +jest.mock('../../package.json', () => ({ version: 'test-version' })) @@ -48,8 +48,8 @@ describe('plugin', () => { }) test('updates can be paused and resumed', async () => { - const _triggerUpdate = jest.requireActual('../src/client/triggerUpdate').default - const _batchUpdate = jest.requireActual('../src/client/batchUpdate').default + const _triggerUpdate = jest.requireActual('../../src/client/triggerUpdate').default + const _batchUpdate = jest.requireActual('../../src/client/batchUpdate').default const triggerUpdateSpy = triggerUpdate.mockImplementation(_triggerUpdate) const batchUpdateSpy = batchUpdate.mockImplementation(_batchUpdate) diff --git a/test/plugin-server.test.js b/test/unit/plugin-server.test.js similarity index 95% rename from test/plugin-server.test.js rename to test/unit/plugin-server.test.js index 60b218a..fa6a113 100644 --- a/test/plugin-server.test.js +++ b/test/unit/plugin-server.test.js @@ -1,7 +1,7 @@ -import { mount, VueMetaServerPlugin, loadVueMetaPlugin } from './utils' -import { defaultOptions } from './utils/constants' +import { mount, VueMetaServerPlugin, loadVueMetaPlugin } from '../utils' +import { defaultOptions } from '../utils/constants' -jest.mock('../package.json', () => ({ +jest.mock('../../package.json', () => ({ version: 'test-version' })) diff --git a/test/shared.test.js b/test/unit/shared.test.js similarity index 87% rename from test/shared.test.js rename to test/unit/shared.test.js index 57d70a2..61fa92d 100644 --- a/test/shared.test.js +++ b/test/unit/shared.test.js @@ -1,10 +1,10 @@ /** * @jest-environment node */ -import { ensureIsArray } from '../src/shared/ensure' -import setOptions from '../src/shared/options' -import { hasGlobalWindowFn } from '../src/shared/window' -import { defaultOptions } from './utils/constants' +import { ensureIsArray } from '../../src/shared/ensure' +import setOptions from '../../src/shared/options' +import { hasGlobalWindowFn } from '../../src/shared/window' +import { defaultOptions } from '../utils/constants' const noop = () => {} diff --git a/test/updaters.test.js b/test/unit/updaters.test.js similarity index 93% rename from test/updaters.test.js rename to test/unit/updaters.test.js index d37ffc8..1453887 100644 --- a/test/updaters.test.js +++ b/test/unit/updaters.test.js @@ -1,6 +1,6 @@ -import _updateClientMetaInfo from '../src/client/updateClientMetaInfo' -import { defaultOptions } from './utils/constants' -import metaInfoData from './utils/meta-info-data' +import _updateClientMetaInfo from '../../src/client/updateClientMetaInfo' +import { defaultOptions } from '../utils/constants' +import metaInfoData from '../utils/meta-info-data' const updateClientMetaInfo = (type, data) => _updateClientMetaInfo(defaultOptions, { [type]: data }) diff --git a/test/utils/browser.js b/test/utils/browser.js new file mode 100644 index 0000000..def5b19 --- /dev/null +++ b/test/utils/browser.js @@ -0,0 +1,99 @@ +import puppeteer from 'puppeteer-core' + +import ChromeDetector from './chrome' + +export default class Browser { + constructor() { + this.detector = new ChromeDetector() + } + + async start(options = {}) { + // https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions + const _opts = { + args: [ + '--no-sandbox', + '--disable-setuid-sandbox' + ], + executablePath: process.env.PUPPETEER_EXECUTABLE_PATH, + ...options + } + + if (!_opts.executablePath) { + _opts.executablePath = this.detector.detect() + } + + this.browser = await puppeteer.launch(_opts) + } + + async close() { + if (!this.browser) return + await this.browser.close() + } + + async page(url, globalName = 'vueMeta') { + if (!this.browser) throw new Error('Please call start() before page(url)') + const page = await this.browser.newPage() + + // pass on console messages + const typeMap = { + debug: 'debug', + warning: 'warn', + error: 'error' + } + page.on('console', (msg) => { + if (typeMap[msg.type()]) { + console[typeMap[msg.type()]](msg.text()) // eslint-disable-line no-console + } + }) + + await page.goto(url) + page.$globalHandle = `window.$${globalName}` + await page.waitForFunction(`!!${page.$globalHandle}`) + page.html = () => page.evaluate(() => window.document.documentElement.outerHTML) + page.$text = (selector, trim) => page.$eval(selector, (el, trim) => { + return trim ? el.textContent.replace(/^\s+|\s+$/g, '') : el.textContent + }, trim) + page.$$text = (selector, trim) => + page.$$eval(selector, (els, trim) => els.map((el) => { + return trim ? el.textContent.replace(/^\s+|\s+$/g, '') : el.textContent + }), trim) + page.$attr = (selector, attr) => + page.$eval(selector, (el, attr) => el.getAttribute(attr), attr) + page.$$attr = (selector, attr) => + page.$$eval( + selector, + (els, attr) => els.map(el => el.getAttribute(attr)), + attr + ) + + page.$vueMeta = await page.evaluateHandle(page.$globalHandle) + + page.vueMeta = { + async navigate(path, waitEnd = true) { + const hook = page.evaluate(` + new Promise(resolve => + ${page.$globalHandle}.$once('routeChanged', resolve) + ).then(() => new Promise(resolve => setTimeout(resolve, 50))) + `) + await page.evaluate( + ($vueMeta, path) => $vueMeta.$router.push(path), + page.$vueMeta, + path + ) + if (waitEnd) { + await hook + } + return { hook } + }, + routeData() { + return page.evaluate(($vueMeta) => { + return { + path: $vueMeta.$route.path, + query: $vueMeta.$route.query + } + }, page.$vueMeta) + } + } + return page + } +} diff --git a/test/utils/build.js b/test/utils/build.js new file mode 100644 index 0000000..8af3956 --- /dev/null +++ b/test/utils/build.js @@ -0,0 +1,114 @@ +import fs from 'fs' +import path from 'path' +import { promisify } from 'util' +import { template } from 'lodash' +import webpack from 'webpack' +import VueLoaderPlugin from 'vue-loader/lib/plugin' +import { createRenderer } from 'vue-server-renderer' + +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) + +const renderer = createRenderer() + +export function webpackRun(config) { + const compiler = webpack(config) + + return new Promise((resolve, reject) => { + compiler.run((err, stats) => { + if (err) { + reject(err) + } + + resolve(stats.toJson()) + }) + }) +} + +export async function buildFixture(fixture, config = {}) { + if (!fixture) { + throw new Error('buildFixture should be called with a fixture name') + } + + const fixturePath = path.resolve(__dirname, '..', 'fixtures', fixture) + config.entry = path.resolve(fixturePath, 'client.js') + + if (!config.name) { + config.name = path.basename(path.dirname(config.entry)) + } + + const webpackConfig = createWebpackConfig(config) + const webpackStats = await webpackRun(webpackConfig) + + // for test debugging + webpackStats.errors.map(e => console.error(e)) // eslint-disable-line no-console + webpackStats.warnings.map(e => console.warn(e)) // eslint-disable-line no-console + + const vueApp = await import(path.resolve(fixturePath, 'server')).then(m => m.default || m) + + const templateFile = await readFile(path.resolve(fixturePath, '..', 'app.template.html'), { encoding: 'utf8' }) + const compiled = template(templateFile, { interpolate: /{{([\s\S]+?)}}/g }) + + const webpackAssets = webpackStats.assets.reduce((s, asset) => `${s}\n`, '') + const app = await renderer.renderToString(vueApp) + // !!! run inject after renderToString !!! + const metaInfo = vueApp.$meta().inject() + + const appFile = path.resolve(webpackStats.outputPath, 'index.html') + const html = compiled({ app, webpackAssets, ...metaInfo }) + + await writeFile(appFile, html) + + return { + url: `file://${appFile}`, + appFile, + webpackStats, + html, + metaInfo + } +} + +export function createWebpackConfig(config = {}) { + const publicPath = '.vue-meta' + + return { + mode: 'development', + output: { + path: path.join(path.dirname(config.entry), publicPath), + filename: '[name].js', + chunkFilename: '[id].chunk.js', + publicPath: `/${publicPath}/` + }, + module: { + rules: [ + { test: /\.js$/, exclude: /node_modules/, use: 'babel-loader' }, + { test: /\.vue$/, use: 'vue-loader' } + ] + }, + // Expose __dirname to allow automatically setting basename. + context: __dirname, + node: { + __dirname: true + }, + optimization: { + splitChunks: { + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name: 'vendor', + chunks: 'all' + } + } + } + }, + plugins: [ + new VueLoaderPlugin() + ], + resolve: { + alias: { + 'vue': 'vue/dist/vue.esm.js' + } + }, + ...config + } +} diff --git a/test/utils/chrome.js b/test/utils/chrome.js new file mode 100644 index 0000000..e6c54f4 --- /dev/null +++ b/test/utils/chrome.js @@ -0,0 +1,264 @@ +/** + * @license Copyright 2016 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ +import fs from 'fs' +import path from 'path' +import { execSync, execFileSync } from 'child_process' +import isWsl from 'is-wsl' +import uniq from 'lodash/uniq' + +const newLineRegex = /\r?\n/ + +/** + * This class is based on node-get-chrome + * https://github.com/mrlee23/node-get-chrome + * https://github.com/gwuhaolin/chrome-finder + */ +export default class ChromeDetector { + constructor() { + this.platform = isWsl ? 'wsl' : process.platform + } + + detect(platform = this.platform) { + const handler = this[platform] + if (typeof handler !== 'function') { + throw new Error(`${platform} is not supported.`) + } + return this[platform]()[0] + } + + darwin() { + const suffixes = [ + '/Contents/MacOS/Chromium', + '/Contents/MacOS/Google Chrome Canary', + '/Contents/MacOS/Google Chrome' + ] + const LSREGISTER = + '/System/Library/Frameworks/CoreServices.framework' + + '/Versions/A/Frameworks/LaunchServices.framework' + + '/Versions/A/Support/lsregister' + const installations = [] + const customChromePath = this.resolveChromePath() + if (customChromePath) { + installations.push(customChromePath) + } + execSync( + `${LSREGISTER} -dump` + + " | grep -i '(google chrome\\( canary\\)\\?|chromium).app$'" + + ' | awk \'{$1=""; print $0}\'' + ) + .toString() + .split(newLineRegex) + .forEach((inst) => { + suffixes.forEach((suffix) => { + const execPath = path.join(inst.trim(), suffix) + if (this.canAccess(execPath)) { + installations.push(execPath) + } + }) + }) + // Retains one per line to maintain readability. + // clang-format off + const priorities = [ + { regex: new RegExp(`^${process.env.HOME}/Applications/.*Chrome.app`), weight: 50 }, + { regex: new RegExp(`^${process.env.HOME}/Applications/.*Chrome Canary.app`), weight: 51 }, + { regex: new RegExp(`^${process.env.HOME}/Applications/.*Chromium.app`), weight: 52 }, + { regex: /^\/Applications\/.*Chrome.app/, weight: 100 }, + { regex: /^\/Applications\/.*Chrome Canary.app/, weight: 101 }, + { regex: /^\/Applications\/.*Chromium.app/, weight: 102 }, + { regex: /^\/Volumes\/.*Chrome.app/, weight: -3 }, + { regex: /^\/Volumes\/.*Chrome Canary.app/, weight: -2 }, + { regex: /^\/Volumes\/.*Chromium.app/, weight: -1 } + ] + if (process.env.LIGHTHOUSE_CHROMIUM_PATH) { + priorities.push({ regex: new RegExp(process.env.LIGHTHOUSE_CHROMIUM_PATH), weight: 150 }) + } + if (process.env.CHROME_PATH) { + priorities.push({ regex: new RegExp(process.env.CHROME_PATH), weight: 151 }) + } + // clang-format on + return this.sort(installations, priorities) + } + + /** + * Look for linux executables in 3 ways + * 1. Look into CHROME_PATH env variable + * 2. Look into the directories where .desktop are saved on gnome based distro's + * 3. Look for google-chrome-stable & google-chrome executables by using the which command + */ + linux() { + let installations = [] + // 1. Look into CHROME_PATH env variable + const customChromePath = this.resolveChromePath() + if (customChromePath) { + installations.push(customChromePath) + } + // 2. Look into the directories where .desktop are saved on gnome based distro's + const desktopInstallationFolders = [ + path.join(require('os').homedir(), '.local/share/applications/'), + '/usr/share/applications/' + ] + desktopInstallationFolders.forEach((folder) => { + installations = installations.concat(this.findChromeExecutables(folder)) + }) + // Look for chromium(-browser) & google-chrome(-stable) executables by using the which command + const executables = [ + 'chromium-browser', + 'chromium', + 'google-chrome-stable', + 'google-chrome' + ] + executables.forEach((executable) => { + try { + const chromePath = execFileSync('which', [executable]) + .toString() + .split(newLineRegex)[0] + if (this.canAccess(chromePath)) { + installations.push(chromePath) + } + } catch (e) { + // Not installed. + } + }) + if (!installations.length) { + throw new Error( + 'The environment variable CHROME_PATH must be set to ' + + 'executable of a build of Chromium version 54.0 or later.' + ) + } + const priorities = [ + { regex: /chromium-browser$/, weight: 51 }, + { regex: /chromium$/, weight: 50 }, + { regex: /chrome-wrapper$/, weight: 49 }, + { regex: /google-chrome-stable$/, weight: 48 }, + { regex: /google-chrome$/, weight: 47 } + ] + if (process.env.LIGHTHOUSE_CHROMIUM_PATH) { + priorities.push({ + regex: new RegExp(process.env.LIGHTHOUSE_CHROMIUM_PATH), + weight: 100 + }) + } + if (process.env.CHROME_PATH) { + priorities.push({ regex: new RegExp(process.env.CHROME_PATH), weight: 101 }) + } + return this.sort(uniq(installations.filter(Boolean)), priorities) + } + + wsl() { + // Manually populate the environment variables assuming it's the default config + process.env.LOCALAPPDATA = this.getLocalAppDataPath(process.env.PATH) + process.env.PROGRAMFILES = '/mnt/c/Program Files' + process.env['PROGRAMFILES(X86)'] = '/mnt/c/Program Files (x86)' + return this.win32() + } + + win32() { + const installations = [] + const sep = path.sep + const suffixes = [ + `${sep}Chromium${sep}Application${sep}chrome.exe`, + `${sep}Google${sep}Chrome SxS${sep}Application${sep}chrome.exe`, + `${sep}Google${sep}Chrome${sep}Application${sep}chrome.exe`, + `${sep}chrome-win32${sep}chrome.exe`, + `${sep}Google${sep}Chrome Beta${sep}Application${sep}chrome.exe` + ] + const prefixes = [ + process.env.LOCALAPPDATA, + process.env.PROGRAMFILES, + process.env['PROGRAMFILES(X86)'] + ].filter(Boolean) + const customChromePath = this.resolveChromePath() + if (customChromePath) { + installations.push(customChromePath) + } + prefixes.forEach(prefix => + suffixes.forEach((suffix) => { + const chromePath = path.join(prefix, suffix) + if (this.canAccess(chromePath)) { + installations.push(chromePath) + } + }) + ) + return installations + } + + resolveChromePath() { + if (this.canAccess(process.env.CHROME_PATH)) { + return process.env.CHROME_PATH + } + if (this.canAccess(process.env.LIGHTHOUSE_CHROMIUM_PATH)) { + console.warn( // eslint-disable-line no-console + 'ChromeLauncher', + 'LIGHTHOUSE_CHROMIUM_PATH is deprecated, use CHROME_PATH env variable instead.' + ) + return process.env.LIGHTHOUSE_CHROMIUM_PATH + } + } + + getLocalAppDataPath(path) { + const userRegExp = /\/mnt\/([a-z])\/Users\/([^/:]+)\/AppData\// + const results = userRegExp.exec(path) || [] + return `/mnt/${results[1]}/Users/${results[2]}/AppData/Local` + } + + sort(installations, priorities) { + const defaultPriority = 10 + return installations + .map((inst) => { + for (const pair of priorities) { + if (pair.regex.test(inst)) { + return { path: inst, weight: pair.weight } + } + } + return { path: inst, weight: defaultPriority } + }) + .sort((a, b) => b.weight - a.weight) + .map(pair => pair.path) + } + + canAccess(file) { + if (!file) { + return false + } + try { + fs.accessSync(file) + return true + } catch (e) { + return false + } + } + + findChromeExecutables(folder) { + const argumentsRegex = /(^[^ ]+).*/ // Take everything up to the first space + const chromeExecRegex = '^Exec=/.*/(google-chrome|chrome|chromium)-.*' + const installations = [] + if (this.canAccess(folder)) { + // Output of the grep & print looks like: + // /opt/google/chrome/google-chrome --profile-directory + // /home/user/Downloads/chrome-linux/chrome-wrapper %U + let execPaths + // Some systems do not support grep -R so fallback to -r. + // See https://github.com/GoogleChrome/chrome-launcher/issues/46 for more context. + try { + execPaths = execSync( + `grep -ER "${chromeExecRegex}" ${folder} | awk -F '=' '{print $2}'` + ) + } catch (e) { + execPaths = execSync( + `grep -Er "${chromeExecRegex}" ${folder} | awk -F '=' '{print $2}'` + ) + } + execPaths = execPaths + .toString() + .split(newLineRegex) + .map(execPath => execPath.replace(argumentsRegex, '$1')) + execPaths.forEach( + execPath => this.canAccess(execPath) && installations.push(execPath) + ) + } + return installations + } +} diff --git a/test/utils/setup.js b/test/utils/setup.js index a08224d..816a227 100644 --- a/test/utils/setup.js +++ b/test/utils/setup.js @@ -1 +1,2 @@ jest.useFakeTimers() +jest.setTimeout(15000) diff --git a/yarn.lock b/yarn.lock index 8decf8e..44e1202 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1050,6 +1050,21 @@ "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" camelcase "^5.0.0" +"@vue/component-compiler-utils@^2.5.1": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b" + integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^5.0.0" + prettier "1.16.3" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + "@vue/server-test-utils@^1.0.0-beta.29": version "1.0.0-beta.29" resolved "https://registry.yarnpkg.com/@vue/server-test-utils/-/server-test-utils-1.0.0-beta.29.tgz#8a61a9900992b742cda7c143593db1c5e4a019bd" @@ -1065,6 +1080,162 @@ dom-event-types "^1.0.0" lodash "^4.17.4" +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" @@ -1075,6 +1246,11 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0, acorn-globals@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" @@ -1103,6 +1279,11 @@ acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7, acorn@^6.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== +acorn@^6.0.5: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + agent-base@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -1110,6 +1291,26 @@ agent-base@^4.1.0: dependencies: es6-promisify "^5.0.0" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== + +ajv@^6.1.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.5.5, ajv@^6.9.1: version "6.9.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1" @@ -1174,7 +1375,7 @@ append-transform@^1.0.0: dependencies: default-require-extensions "^2.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -1241,6 +1442,15 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1253,6 +1463,13 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1353,6 +1570,13 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e" + integrity sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA== + dependencies: + object.assign "^4.1.0" + babel-plugin-istanbul@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.0.tgz#6892f529eff65a3e2d33d87dc5888ffa2ecd4a30" @@ -1452,6 +1676,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1482,6 +1711,16 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw== +bluebird@^3.1.1, bluebird@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1525,6 +1764,11 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -1537,6 +1781,65 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^4.3.4: version "4.4.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" @@ -1570,11 +1873,50 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + builtin-modules@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cacache@^11.0.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1669,7 +2011,7 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^2.0.3: +chokidar@^2.0.2, chokidar@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg== @@ -1693,11 +2035,26 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== + dependencies: + tslib "^1.9.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1832,6 +2189,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@1.6.2, concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + config-chain@^1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -1840,11 +2207,30 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -1857,6 +2243,18 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -1872,6 +2270,37 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1883,6 +2312,23 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -1908,6 +2354,11 @@ css@^2.1.0: source-map-resolve "^0.5.2" urix "^0.1.0" +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: version "0.3.6" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" @@ -1920,6 +2371,11 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: dependencies: cssom "0.3.x" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1936,12 +2392,17 @@ data-urls@^1.0.0, data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2033,6 +2494,14 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -2048,6 +2517,15 @@ diff-sequences@^24.0.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + doctoc@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" @@ -2088,6 +2566,11 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -2128,6 +2611,16 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2153,6 +2646,19 @@ electron-to-chromium@^1.3.103: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2168,18 +2674,34 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2451,6 +2973,19 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" @@ -2576,6 +3111,16 @@ extract-from-css@^0.4.4: dependencies: css "^2.1.0" +extract-zip@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2615,6 +3160,18 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -2717,6 +3274,14 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2755,6 +3320,14 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -2767,6 +3340,16 @@ fs-readdir-recursive@^1.1.0: resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2967,16 +3550,41 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash-sum@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + he@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + home-or-tmp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" @@ -3039,6 +3647,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" @@ -3054,6 +3667,16 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -3092,6 +3715,16 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3100,11 +3733,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -4047,7 +4685,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -4175,7 +4813,12 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-utils@^1.0.2: +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -4247,7 +4890,7 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^4.1.3: +lru-cache@^4.1.2, lru-cache@^4.1.3: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -4255,6 +4898,13 @@ lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + magic-string@^0.25.1: version "0.25.2" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" @@ -4276,6 +4926,11 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -4305,6 +4960,15 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mem@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" @@ -4314,6 +4978,21 @@ mem@^4.0.0: mimic-fn "^1.0.0" p-is-promise "^2.0.0" +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -4345,7 +5024,7 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4364,6 +5043,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.37.0: version "1.37.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" @@ -4376,11 +5063,26 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.37.0" +mime@^2.0.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" + integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4418,6 +5120,22 @@ minizlib@^1.1.1: dependencies: minipass "^2.2.1" +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -4426,13 +5144,25 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4484,6 +5214,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +neo-async@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4507,6 +5242,35 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-libs-browser@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" + integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "0.0.4" + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -4642,6 +5406,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-keys@^1.0.11: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== + object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" @@ -4654,6 +5423,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -4711,6 +5490,11 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -4812,6 +5596,20 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + parent-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" @@ -4819,6 +5617,18 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-entities@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" @@ -4883,6 +5693,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -4927,6 +5742,22 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -4973,6 +5804,24 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-selector-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^7.0.14: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -4983,6 +5832,11 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prettier@1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" + integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== + pretty-format@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" @@ -5001,11 +5855,21 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== -progress@^2.0.0: +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0, progress@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + prompts@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.2.tgz#094119b0b0a553ec652908b583205b9867630154" @@ -5019,6 +5883,16 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5029,6 +5903,26 @@ psl@^1.1.24, psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -5037,7 +5931,21 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.4.1: +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -5047,11 +5955,35 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +puppeteer-core@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-1.13.0.tgz#f8001851e924e6e9ef6e9fae1778c3ab87c3f307" + integrity sha512-8MypjWVHu2EEdtN2HxhCsTtIYdJgiCcbGpHoosv265fzanfOICC2/DadLZq6/Qc/OKsovQmjkO+2vKMrV3BRfA== + dependencies: + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -5061,6 +5993,21 @@ randomatic@^3.0.0: kind-of "^6.0.0" math-random "^1.0.1" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -5105,7 +6052,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -5387,6 +6334,14 @@ rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + rollup-plugin-babel@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" @@ -5476,6 +6431,13 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -5483,7 +6445,7 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -5544,12 +6506,21 @@ saxes@^3.1.5: dependencies: xmlchars "^1.3.1" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== -serialize-javascript@^1.3.0, serialize-javascript@^1.6.1: +serialize-javascript@^1.3.0, serialize-javascript@^1.4.0, serialize-javascript@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== @@ -5579,6 +6550,19 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -5655,6 +6639,11 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -5752,6 +6741,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -5775,6 +6771,38 @@ stealthy-require@^1.1.0: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -5809,7 +6837,7 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.0.0" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== @@ -5905,6 +6933,11 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" + integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== + tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -5927,7 +6960,21 @@ teeny-request@^3.7.0: node-fetch "^2.2.0" uuid "^3.3.2" -terser@^3.14.1: +terser-webpack-plugin@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" + integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== + dependencies: + cacache "^11.0.2" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + terser "^3.16.1" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +terser@^3.14.1, terser@^3.16.1: version "3.16.1" resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== @@ -5956,11 +7003,26 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + dependencies: + setimmediate "^1.0.4" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -5973,6 +7035,11 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -6080,6 +7147,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6099,6 +7171,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + uglify-js@^3.1.4: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" @@ -6165,6 +7242,25 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + dependencies: + imurmurhash "^0.1.4" + unist-util-is@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" @@ -6226,6 +7322,14 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + urlgrey@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" @@ -6249,6 +7353,20 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -6305,6 +7423,13 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= + dependencies: + indexof "0.0.1" + vue-eslint-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" @@ -6317,6 +7442,11 @@ vue-eslint-parser@^5.0.0: esquery "^1.0.1" lodash "^4.17.11" +vue-hot-reload-api@^2.3.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" + integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== + vue-jest@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.3.tgz#80f664712f2678b1d8bb3af0f2c0bef5efa8de31" @@ -6333,6 +7463,22 @@ vue-jest@^3.0.3: tsconfig "^7.0.0" vue-template-es2015-compiler "^1.6.0" +vue-loader@^15.7.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.0.tgz#27275aa5a3ef4958c5379c006dd1436ad04b25b3" + integrity sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA== + dependencies: + "@vue/component-compiler-utils" "^2.5.1" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-router@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" + integrity sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg== + vue-server-renderer@^2.6.6: version "2.6.6" resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.6.tgz#a2b1174cf1914817147b34789cc1a6baa0672aa1" @@ -6347,6 +7493,14 @@ vue-server-renderer@^2.6.6: serialize-javascript "^1.3.0" source-map "0.5.6" +vue-style-loader@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + vue-template-compiler@^2.6.6: version "2.6.6" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.6.tgz#a807acbf3d51971d3721d75ecb1b927b517c1a02" @@ -6360,6 +7514,11 @@ vue-template-es2015-compiler@^1.6.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.2.tgz#dd73e80ba58bb65dd7a8aa2aeef6089cf6116f2a" integrity sha512-cliV19VHLJqFUYbz/XeWXe5CO6guzwd0yrrqqp0bmjlMP3ZZULY7fu8RTC4+3lmHwo6ESVDHFDsvjB15hcR5IA== +vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + vue@^2.6.6: version "2.6.6" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.6.tgz#dde41e483c11c46a7bf523909f4f2f816ab60d25" @@ -6396,11 +7555,58 @@ watch@~0.18.0: exec-sh "^0.2.0" minimist "^1.2.0" +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webpack-sources@^1.1.0, webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.29.6: + version "4.29.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" + integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -6460,6 +7666,13 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -6496,6 +7709,13 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" +ws@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.0.tgz#13806d9913b2a5f3cbb9ba47b563c002cbc7c526" + integrity sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w== + dependencies: + async-limiter "~1.0.0" + ws@^6.1.2: version "6.1.3" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.3.tgz#d2d2e5f0e3c700ef2de89080ebc0ac6e1bf3a72d" @@ -6518,12 +7738,12 @@ xmlchars@^1.3.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw== -xtend@^4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= -"y18n@^3.2.1 || ^4.0.0": +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== @@ -6563,3 +7783,10 @@ yargs@^12.0.2, yargs@^12.0.5: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" From a10fd83539eabe59e6e324f19becb72c4e392a56 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 17:57:32 +0100 Subject: [PATCH 31/58] chore: update dependencies --- package.json | 26 +- yarn.lock | 913 ++++++++++++++++++++++++++++----------------------- 2 files changed, 511 insertions(+), 428 deletions(-) diff --git a/package.json b/package.json index 30870a0..38c7d62 100644 --- a/package.json +++ b/package.json @@ -59,22 +59,22 @@ }, "devDependencies": { "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.3", + "@babel/core": "^7.3.4", "@babel/node": "^7.2.2", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/preset-env": "^7.3.1", + "@babel/preset-env": "^7.3.4", "@nuxt/babel-preset-app": "^2.4.5", "@nuxtjs/eslint-config": "^0.0.1", "@vue/server-test-utils": "^1.0.0-beta.29", "@vue/test-utils": "^1.0.0-beta.29", "babel-core": "^7.0.0-bridge", "babel-eslint": "^10.0.1", - "babel-jest": "^24.1.0", + "babel-jest": "^24.3.1", "babel-loader": "^8.0.5", "babel-plugin-dynamic-import-node": "^2.2.0", "codecov": "^3.2.0", "doctoc": "^1.4.0", - "eslint": "^5.14.1", + "eslint": "^5.15.1", "eslint-config-standard": "^12.0.0", "eslint-plugin-import": "^2.16.0", "eslint-plugin-jest": "^22.3.0", @@ -82,28 +82,28 @@ "eslint-plugin-promise": "^4.0.1", "eslint-plugin-standard": "^4.0.0", "eslint-plugin-vue": "^5.2.2", - "esm": "^3.2.5", - "jest": "^24.1.0", + "esm": "^3.2.14", + "jest": "^24.3.1", "jest-environment-jsdom": "^24.3.1", "jest-environment-jsdom-global": "^1.1.1", "jsdom": "^13.2.0", "lodash": "^4.17.11", "puppeteer-core": "^1.13.0", "rimraf": "^2.6.3", - "rollup": "^1.2.2", + "rollup": "^1.6.0", "rollup-plugin-babel": "^4.3.2", "rollup-plugin-buble": "^0.19.6", - "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-commonjs": "^9.2.1", "rollup-plugin-json": "^3.1.0", - "rollup-plugin-node-resolve": "^4.0.0", + "rollup-plugin-node-resolve": "^4.0.1", "rollup-plugin-terser": "^4.0.4", "update-section": "^0.3.3", - "vue": "^2.6.6", - "vue-jest": "^3.0.3", + "vue": "^2.6.8", + "vue-jest": "^3.0.4", "vue-loader": "^15.7.0", "vue-router": "^3.0.2", - "vue-server-renderer": "^2.6.6", - "vue-template-compiler": "^2.6.6", + "vue-server-renderer": "^2.6.8", + "vue-template-compiler": "^2.6.8", "webpack": "^4.29.6" } } diff --git a/yarn.lock b/yarn.lock index 44e1202..d98b57a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,7 +46,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.2.2": +"@babel/core@^7.2.2", "@babel/core@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== @@ -66,26 +66,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.3.tgz#d090d157b7c5060d05a05acaebc048bd2b037947" - integrity sha512-w445QGI2qd0E0GlSnq6huRZWPMmQGCp5gd5ZWS4hagn0EiwzxD5QMFkpchyusAyVC1n27OKXzQ0/88aVU9n4xQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.3" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.3.3" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.3.3" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/generator@^7.0.0", "@babel/generator@^7.2.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.2.tgz#fff31a7b2f2f3dad23ef8e01be45b0d5c2fc0132" @@ -97,17 +77,6 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.3.tgz#185962ade59a52e00ca2bdfcfd1d58e528d4e39e" - integrity sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A== - dependencies: - "@babel/types" "^7.3.3" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - "@babel/generator@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" @@ -330,12 +299,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd" integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ== -"@babel/parser@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87" - integrity sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg== - -"@babel/parser@^7.3.4": +"@babel/parser@^7.1.0", "@babel/parser@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== @@ -382,6 +346,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" +"@babel/plugin-proposal-object-rest-spread@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654" + integrity sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-proposal-optional-catch-binding@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" @@ -464,6 +436,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" +"@babel/plugin-transform-async-to-generator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c" + integrity sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-transform-block-scoped-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" @@ -479,6 +460,14 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" +"@babel/plugin-transform-block-scoping@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4" + integrity sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.11" + "@babel/plugin-transform-classes@^7.2.0": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" @@ -493,6 +482,20 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc" + integrity sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.1.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.3.4" + "@babel/helper-split-export-declaration" "^7.0.0" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" @@ -578,6 +581,14 @@ "@babel/helper-hoist-variables" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-modules-systemjs@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861" + integrity sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-modules-umd@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" @@ -624,6 +635,13 @@ dependencies: regenerator-transform "^0.13.3" +"@babel/plugin-transform-regenerator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a" + integrity sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA== + dependencies: + regenerator-transform "^0.13.4" + "@babel/plugin-transform-runtime@^7.2.0": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz#57805ac8c1798d102ecd75c03b024a5b3ea9b431" @@ -737,6 +755,55 @@ js-levenshtein "^1.1.3" semver "^5.3.0" +"@babel/preset-env@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.3.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.3.4" + "@babel/plugin-transform-classes" "^7.3.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-dotall-regex" "^7.2.0" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.3.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.3.4" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.2.0" + browserslist "^4.3.4" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + "@babel/register@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" @@ -805,15 +872,6 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@babel/types@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.3.tgz#6c44d1cdac2a7625b624216657d5bc6c107ab436" - integrity sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - "@babel/types@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" @@ -841,6 +899,39 @@ chalk "^2.0.1" slash "^2.0.0" +"@jest/core@^24.3.1": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.3.1.tgz#9811596d9fcc6dbb3d4062c67e4c4867bc061585" + integrity sha512-orucOIBKfXgm1IJirtPT0ToprqDVGYKUNJKNc9a6v1Lww6qLPq+xj5OfxyhpJb2rWOgzEkATW1bfZzg3oqV70w== + dependencies: + "@jest/console" "^24.3.0" + "@jest/reporters" "^24.3.1" + "@jest/test-result" "^24.3.0" + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.3.0" + jest-config "^24.3.1" + jest-haste-map "^24.3.1" + jest-message-util "^24.3.0" + jest-regex-util "^24.3.0" + jest-resolve-dependencies "^24.3.1" + jest-runner "^24.3.1" + jest-runtime "^24.3.1" + jest-snapshot "^24.3.1" + jest-util "^24.3.0" + jest-validate "^24.3.1" + jest-watcher "^24.3.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + pirates "^4.0.1" + realpath-native "^1.1.0" + rimraf "^2.5.4" + strip-ansi "^5.0.0" + "@jest/environment@^24.3.1": version "24.3.1" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.3.1.tgz#1fbda3ec8fb8ffbaee665d314da91d662227e11e" @@ -862,6 +953,32 @@ jest-message-util "^24.3.0" jest-mock "^24.3.0" +"@jest/reporters@^24.3.1": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.3.1.tgz#68e4abc8d4233acd0dd87287f3bd270d81066248" + integrity sha512-jEIDJcvk20ReUW1Iqb+prlAcFV+kfFhQ/01poCq8X9As7/l/2y1GqVwJ3+6SaPTZuCXh0d0LVDy86zDAa8zlVA== + dependencies: + "@jest/environment" "^24.3.1" + "@jest/test-result" "^24.3.0" + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-api "^2.1.1" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-haste-map "^24.3.1" + jest-resolve "^24.3.1" + jest-runtime "^24.3.1" + jest-util "^24.3.0" + jest-worker "^24.3.1" + node-notifier "^5.2.1" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + "@jest/source-map@^24.3.0": version "24.3.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" @@ -946,6 +1063,39 @@ traverse "^0.6.6" unified "^6.1.6" +"@types/babel__core@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.0.tgz#710f2487dda4dcfd010ca6abb2b4dc7394365c51" + integrity sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" + integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + dependencies: + "@babel/types" "^7.3.0" + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -961,6 +1111,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.24.tgz#b13564af612a22a20b5d95ca40f1bffb3af315cf" integrity sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ== +"@types/node@^11.9.5": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.0.tgz#070e9ce7c90e727aca0e0c14e470f9a93ffe9390" + integrity sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg== + "@types/semver@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" @@ -981,7 +1136,7 @@ resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== -"@types/yargs@^12.0.9": +"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": version "12.0.9" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0" integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA== @@ -1274,12 +1429,12 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7, acorn@^6.1.0: +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7: version "6.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== -acorn@^6.0.5: +acorn@^6.0.5, acorn@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== @@ -1543,13 +1698,16 @@ babel-eslint@^10.0.1: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" - integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== +babel-jest@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.3.1.tgz#168468a37e90426520c5293da4f55e1a512063b0" + integrity sha512-6KaXyUevY0KAxD5Ba+EBhyfwvc+R2f7JV7BpBZ5T8yJGgj0M1hYDfRhDq35oD5MzprMf/ggT81nEuLtMyxfDIg== dependencies: + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.1.0" + babel-preset-jest "^24.3.0" chalk "^2.4.2" slash "^2.0.0" @@ -1586,10 +1744,12 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.0.0" test-exclude "^5.0.0" -babel-plugin-jest-hoist@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" - integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== +babel-plugin-jest-hoist@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz#f2e82952946f6e40bb0a75d266a3790d854c8b5b" + integrity sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w== + dependencies: + "@types/babel__traverse" "^7.0.6" babel-plugin-transform-es2015-modules-commonjs@^6.26.0: version "6.26.2" @@ -1609,13 +1769,13 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-preset-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" - integrity sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw== +babel-preset-jest@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz#db88497e18869f15b24d9c0e547d8e0ab950796d" + integrity sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw== dependencies: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.1.0" + babel-plugin-jest-hoist "^24.3.0" babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" @@ -2512,10 +2672,10 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -diff-sequences@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" - integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== +diff-sequences@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" + integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== diffie-hellman@^5.0.0: version "5.0.3" @@ -2854,6 +3014,14 @@ eslint-scope@^4.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e" + integrity sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-utils@^1.3.0, eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" @@ -2864,10 +3032,10 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^5.14.1: - version "5.14.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.14.1.tgz#490a28906be313685c55ccd43a39e8d22efc04ba" - integrity sha512-CyUMbmsjxedx8B0mr79mNOqetvkbij/zrXnFeK2zc3pGRn3/tibjiNAv/3UxFEyfMDjh+ZqTrJrEGBFiGfD5Og== +eslint@^5.15.1: + version "5.15.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.1.tgz#8266b089fd5391e0009a047050795b1d73664524" + integrity sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.9.1" @@ -2875,7 +3043,7 @@ eslint@^5.14.1: cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.0" + eslint-scope "^4.0.2" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" espree "^5.0.1" @@ -2906,10 +3074,10 @@ eslint@^5.14.1: table "^5.2.3" text-table "^0.2.0" -esm@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.5.tgz#036e410a2373ea81bfe62166c419ca0b0cf85c09" - integrity sha512-rukU6Nd3agbHQCJWV4rrlZxqpbO3ix8qhUxK1BhKALGS2E465O0BFwgCOqJjNnYfO/I2MwpUBmPsW8DXoe8tcA== +esm@^3.2.14: + version "3.2.14" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.14.tgz#567f65e9433bb0873eb92ed5e92e876c3ec2a212" + integrity sha512-uQq8DK0HB0n2Ze9gshhxGQa60caKmwNH7tKxALAT6wxYGfQCdEMXA3MV3z1rh8TSmQIVFYbltm9Xe1ghusnCqw== espree@^4.1.0: version "4.1.0" @@ -2986,13 +3154,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== - dependencies: - merge "^1.2.0" - exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" @@ -3043,16 +3204,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.1.0.tgz#88e73301c4c785cde5f16da130ab407bdaf8c0f2" - integrity sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw== +expect@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.3.1.tgz#7c42507da231a91a8099d065bc8dc9322dc85fc0" + integrity sha512-xnmobSlaqhg4FKqjb5REk4AobQzFMJoctDdREKfSGqrtzRfCWYbfqt3WmikAvQz/J8mCNQhORgYdEjPMJbMQPQ== dependencies: + "@jest/types" "^24.3.0" ansi-styles "^3.2.0" - jest-get-type "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" + jest-get-type "^24.3.0" + jest-matcher-utils "^24.3.1" + jest-message-util "^24.3.0" + jest-regex-util "^24.3.0" extend-shallow@^2.0.1: version "2.0.1" @@ -3355,7 +3517,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.3, fsevents@^1.2.7: +fsevents@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== @@ -3466,7 +3628,7 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.11: +handlebars@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== @@ -4081,10 +4243,10 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^2.0.8: - version "2.1.0" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.0.tgz#37ab0c2c3e83065462f5254b94749d6157846c4e" - integrity sha512-+Ygg4t1StoiNlBGc6x0f8q/Bv26FbZqP/+jegzfNpU7Q8o+4ZRoJxJPhBkgE/UonpAjtxnE4zCZIyJX+MwLRMQ== +istanbul-api@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" + integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== dependencies: async "^2.6.1" compare-versions "^3.2.1" @@ -4094,7 +4256,7 @@ istanbul-api@^2.0.8: istanbul-lib-instrument "^3.1.0" istanbul-lib-report "^2.0.4" istanbul-lib-source-maps "^3.0.2" - istanbul-reports "^2.1.0" + istanbul-reports "^2.1.1" js-yaml "^3.12.0" make-dir "^1.3.0" minimatch "^3.0.4" @@ -4145,127 +4307,96 @@ istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.2: rimraf "^2.6.2" source-map "^0.6.1" -istanbul-reports@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.0.tgz#87b8b55cd1901ba1748964c98ddd8900ce306d59" - integrity sha512-azQdSX+dtTtkQEfqq20ICxWi6eOHXyHIgMFw1VOOVi8iIPWeCWRgCyFh/CsBKIhcgskMI8ExXmU7rjXTRCIJ+A== +istanbul-reports@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" + integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== dependencies: - handlebars "^4.0.11" + handlebars "^4.1.0" -jest-changed-files@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.0.0.tgz#c02c09a8cc9ca93f513166bc773741bd39898ff7" - integrity sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ== +jest-changed-files@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.3.0.tgz#7050ae29aaf1d59437c80f21d5b3cd354e88a499" + integrity sha512-fTq0YAUR6644fgsqLC7Zi2gXA/bAplMRvfXQdutmkwgrCKK6upkj+sgXqsUfUZRm15CVr3YSojr/GRNn71IMvg== dependencies: + "@jest/types" "^24.3.0" execa "^1.0.0" throat "^4.0.0" -jest-cli@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.1.0.tgz#f7cc98995f36e7210cce3cbb12974cbf60940843" - integrity sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw== +jest-cli@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.3.1.tgz#52e4ae5f11044b41e06ca39fc7a7302fbbcb1661" + integrity sha512-HdwMgigvDQdlWX7gwM2QMkJJRqSk7tTYKq7kVplblK28RarqquJMWV/lOCN8CukuG9u3DZTeXpCDXR7kpGfB3w== dependencies: - ansi-escapes "^3.0.0" + "@jest/core" "^24.3.1" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" chalk "^2.0.1" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.15" import-local "^2.0.0" is-ci "^2.0.0" - istanbul-api "^2.0.8" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-source-maps "^3.0.1" - jest-changed-files "^24.0.0" - jest-config "^24.1.0" - jest-environment-jsdom "^24.0.0" - jest-get-type "^24.0.0" - jest-haste-map "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" - jest-resolve-dependencies "^24.1.0" - jest-runner "^24.1.0" - jest-runtime "^24.1.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" - jest-watcher "^24.0.0" - jest-worker "^24.0.0" - micromatch "^3.1.10" - node-notifier "^5.2.1" - p-each-series "^1.0.0" - pirates "^4.0.0" + jest-config "^24.3.1" + jest-util "^24.3.0" + jest-validate "^24.3.1" prompts "^2.0.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^2.0.0" - string-length "^2.0.0" - strip-ansi "^5.0.0" - which "^1.2.12" + realpath-native "^1.1.0" yargs "^12.0.2" -jest-config@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.1.0.tgz#6ea6881cfdd299bc86cc144ee36d937c97c3850c" - integrity sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg== +jest-config@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.3.1.tgz#271aff2d3aeabf1ff92512024eeca3323cd31a07" + integrity sha512-ujHQywsM//vKFvJwEC02KNZgKAGOzGz1bFPezmTQtuj8XdfsAVq8p6N/dw4yodXV11gSf6TJ075i4ehM+mKatA== dependencies: "@babel/core" "^7.1.0" - babel-jest "^24.1.0" + "@jest/types" "^24.3.0" + babel-jest "^24.3.1" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^24.0.0" - jest-environment-node "^24.0.0" - jest-get-type "^24.0.0" - jest-jasmine2 "^24.1.0" - jest-regex-util "^24.0.0" - jest-resolve "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" + jest-environment-jsdom "^24.3.1" + jest-environment-node "^24.3.1" + jest-get-type "^24.3.0" + jest-jasmine2 "^24.3.1" + jest-regex-util "^24.3.0" + jest-resolve "^24.3.1" + jest-util "^24.3.0" + jest-validate "^24.3.1" micromatch "^3.1.10" - pretty-format "^24.0.0" - realpath-native "^1.0.2" + pretty-format "^24.3.1" + realpath-native "^1.1.0" -jest-diff@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.0.0.tgz#a3e5f573dbac482f7d9513ac9cfa21644d3d6b34" - integrity sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA== +jest-diff@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.3.1.tgz#87952e5ea1548567da91df398fa7bf7977d3f96a" + integrity sha512-YRVzDguyzShP3Pb9wP/ykBkV7Z+O4wltrMZ2P4LBtNxrHNpxwI2DECrpD9XevxWubRy5jcE8sSkxyX3bS7W+rA== dependencies: chalk "^2.0.1" - diff-sequences "^24.0.0" - jest-get-type "^24.0.0" - pretty-format "^24.0.0" + diff-sequences "^24.3.0" + jest-get-type "^24.3.0" + pretty-format "^24.3.1" -jest-docblock@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.0.0.tgz#54d77a188743e37f62181a91a01eb9222289f94e" - integrity sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA== +jest-docblock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" + integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== dependencies: detect-newline "^2.1.0" -jest-each@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.0.0.tgz#10987a06b21c7ffbfb7706c89d24c52ed864be55" - integrity sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA== +jest-each@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.3.1.tgz#ed8fe8b9f92a835a6625ca8c7ee06bc904440316" + integrity sha512-GTi+nxDaWwSgOPLiiqb/p4LURy0mv3usoqsA2eoTYSmRsLgjgZ6VUyRpUBH5JY9EMBx33suNFXk0iyUm29WRpw== dependencies: + "@jest/types" "^24.3.0" chalk "^2.0.1" - jest-get-type "^24.0.0" - jest-util "^24.0.0" - pretty-format "^24.0.0" + jest-get-type "^24.3.0" + jest-util "^24.3.0" + pretty-format "^24.3.1" jest-environment-jsdom-global@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.1.1.tgz#c0b5fd969ace23137fd9c4a3b8e3367a54b4ed15" integrity sha512-7+M6yMM6vpHfaR9ymrjobx1kG3TQyMpSu9yH7bz9bVHsBMUEdiBOmf6qVvyi8z09delLmHuPQpUFYm5SIGSzhQ== -jest-environment-jsdom@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz#5affa0654d6e44cd798003daa1a8701dbd6e4d11" - integrity sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw== - dependencies: - jest-mock "^24.0.0" - jest-util "^24.0.0" - jsdom "^11.5.1" - jest-environment-jsdom@^24.3.1: version "24.3.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.3.1.tgz#49826bcf12fb3e38895f1e2aaeb52bde603cc2e4" @@ -4278,32 +4409,21 @@ jest-environment-jsdom@^24.3.1: jest-util "^24.3.0" jsdom "^11.5.1" -jest-environment-node@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.0.0.tgz#330948980656ed8773ce2e04eb597ed91e3c7190" - integrity sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg== +jest-environment-node@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.3.1.tgz#333d864c569b27658a96bb3b10e02e7172125415" + integrity sha512-Xy+/yFem/yUs9OkzbcawQT237vwDjBhAVLjac1KYAMYVjGb0Vb/Ovw4g61PunVdrEIpfcXNtRUltM4+9c7lARQ== dependencies: - jest-mock "^24.0.0" - jest-util "^24.0.0" + "@jest/environment" "^24.3.1" + "@jest/fake-timers" "^24.3.0" + "@jest/types" "^24.3.0" + jest-mock "^24.3.0" + jest-util "^24.3.0" -jest-get-type@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.0.0.tgz#36e72930b78e33da59a4f63d44d332188278940b" - integrity sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w== - -jest-haste-map@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e" - integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ== - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.0.0" - jest-util "^24.0.0" - jest-worker "^24.0.0" - micromatch "^3.1.10" - sane "^3.0.0" +jest-get-type@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" + integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== jest-haste-map@^24.3.1: version "24.3.1" @@ -4320,51 +4440,44 @@ jest-haste-map@^24.3.1: micromatch "^3.1.10" sane "^4.0.3" -jest-jasmine2@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" - integrity sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg== +jest-jasmine2@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.3.1.tgz#127d628d3ac0829bd3c0fccacb87193e543b420b" + integrity sha512-STo6ar1IyPlIPq9jPxDQhM7lC0dAX7KKN0LmCLMlgJeXwX+1XiVdtZDv1a4zyg6qhNdpo1arOBGY0BcovUK7ug== dependencies: "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.3.1" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" chalk "^2.0.1" co "^4.6.0" - expect "^24.1.0" + expect "^24.3.1" is-generator-fn "^2.0.0" - jest-each "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - pretty-format "^24.0.0" + jest-each "^24.3.1" + jest-matcher-utils "^24.3.1" + jest-message-util "^24.3.0" + jest-runtime "^24.3.1" + jest-snapshot "^24.3.1" + jest-util "^24.3.0" + pretty-format "^24.3.1" throat "^4.0.0" -jest-leak-detector@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz#78280119fd05ee98317daee62cddb3aa537a31c6" - integrity sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg== +jest-leak-detector@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.3.1.tgz#ed89d05ca07e91b2b51dac1f676ab354663aa8da" + integrity sha512-GncRwEtAw/SohdSyY4bk2RE06Ac1dZrtQGZQ2j35hSuN4gAAAKSYMszJS2WDixsAEaFN+GHBHG+d8pjVGklKyw== dependencies: - pretty-format "^24.0.0" + pretty-format "^24.3.1" -jest-matcher-utils@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz#fc9c41cfc49b2c3ec14e576f53d519c37729d579" - integrity sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA== +jest-matcher-utils@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.3.1.tgz#025e1cd9c54a5fde68e74b12428775d06d123aa8" + integrity sha512-P5VIsUTJeI0FYvWVMwEHjxK1L83vEkDiKMV0XFPIrT2jzWaWPB2+dPCHkP2ID9z4eUKElaHqynZnJiOdNVHfXQ== dependencies: chalk "^2.0.1" - jest-diff "^24.0.0" - jest-get-type "^24.0.0" - pretty-format "^24.0.0" - -jest-message-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.0.0.tgz#a07a141433b2c992dbaec68d4cbfe470ba289619" - integrity sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q== - dependencies: - "@babel/code-frame" "^7.0.0" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" + jest-diff "^24.3.1" + jest-get-type "^24.3.0" + pretty-format "^24.3.1" jest-message-util@^24.3.0: version "24.3.0" @@ -4380,11 +4493,6 @@ jest-message-util@^24.3.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" - integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== - jest-mock@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.3.0.tgz#95a86b6ad474e3e33227e6dd7c4ff6b07e18d3cb" @@ -4392,121 +4500,107 @@ jest-mock@^24.3.0: dependencies: "@jest/types" "^24.3.0" -jest-regex-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" - integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== - jest-regex-util@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== -jest-resolve-dependencies@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" - integrity sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw== +jest-resolve-dependencies@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.3.1.tgz#a22839d611ba529a74594ee274ce2b77d046bea9" + integrity sha512-9JUejNImGnJjbNR/ttnod+zQIWANpsrYMPt18s2tYGK6rP191qFsyEQ2BhAQMdYDRkTmi8At+Co9tL+jTPqdpw== dependencies: - jest-regex-util "^24.0.0" - jest-snapshot "^24.1.0" + "@jest/types" "^24.3.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.3.1" -jest-resolve@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.1.0.tgz#42ff0169b0ea47bfdbd0c52a0067ca7d022c7688" - integrity sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg== +jest-resolve@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.3.1.tgz#103dbd438b59618ea428ec4acbd65c56495ba397" + integrity sha512-N+Q3AcVuKxpn/kjQMxUVLwBk32ZE1diP4MPcHyjVwcKpCUuKrktfRR3Mqe/T2HoD25wyccstaqcPUKIudl41bg== dependencies: + "@jest/types" "^24.3.0" browser-resolve "^1.11.3" chalk "^2.0.1" - realpath-native "^1.0.0" + realpath-native "^1.1.0" -jest-runner@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.1.0.tgz#3686a2bb89ce62800da23d7fdc3da2c32792943b" - integrity sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg== +jest-runner@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.3.1.tgz#5488566fa60cdb4b00a89c734ad6b54b9561415d" + integrity sha512-Etc9hQ5ruwg+q7DChm+E8qzHHdNTLeUdlo+whPQRSpNSgl0AEgc2r2mT4lxODREqmnHg9A8JHA44pIG4GE0Gzg== dependencies: + "@jest/console" "^24.3.0" + "@jest/environment" "^24.3.1" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" chalk "^2.4.2" exit "^0.1.2" graceful-fs "^4.1.15" - jest-config "^24.1.0" - jest-docblock "^24.0.0" - jest-haste-map "^24.0.0" - jest-jasmine2 "^24.1.0" - jest-leak-detector "^24.0.0" - jest-message-util "^24.0.0" - jest-runtime "^24.1.0" - jest-util "^24.0.0" - jest-worker "^24.0.0" + jest-config "^24.3.1" + jest-docblock "^24.3.0" + jest-haste-map "^24.3.1" + jest-jasmine2 "^24.3.1" + jest-leak-detector "^24.3.1" + jest-message-util "^24.3.0" + jest-resolve "^24.3.1" + jest-runtime "^24.3.1" + jest-util "^24.3.0" + jest-worker "^24.3.1" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.1.0.tgz#7c157a2e776609e8cf552f956a5a19ec9c985214" - integrity sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ== +jest-runtime@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.3.1.tgz#2798230b4fbed594b375a13e395278694d4751e2" + integrity sha512-Qz/tJWbZ2naFJ2Kvy1p+RhhRgsPYh4e6wddVRy6aHBr32FTt3Ja33bfV7pkMFWXFbVuAsJMJVdengbvdhWzq4A== dependencies: - "@babel/core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" + "@jest/console" "^24.3.0" + "@jest/environment" "^24.3.1" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + "@types/yargs" "^12.0.2" chalk "^2.0.1" - convert-source-map "^1.4.0" exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" glob "^7.1.3" graceful-fs "^4.1.15" - jest-config "^24.1.0" - jest-haste-map "^24.0.0" - jest-message-util "^24.0.0" - jest-regex-util "^24.0.0" - jest-resolve "^24.1.0" - jest-snapshot "^24.1.0" - jest-util "^24.0.0" - jest-validate "^24.0.0" - micromatch "^3.1.10" - realpath-native "^1.0.0" + jest-config "^24.3.1" + jest-haste-map "^24.3.1" + jest-message-util "^24.3.0" + jest-mock "^24.3.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.3.1" + jest-snapshot "^24.3.1" + jest-util "^24.3.0" + jest-validate "^24.3.1" + realpath-native "^1.1.0" slash "^2.0.0" strip-bom "^3.0.0" - write-file-atomic "2.4.1" yargs "^12.0.2" -jest-serializer@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" - integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== - jest-serializer@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.3.0.tgz#074e307300d1451617cf2630d11543ee4f74a1c8" integrity sha512-RiSpqo2OFbVLJN/PgAOwQIUeHDfss6NBUDTLhjiJM8Bb5rMrwRqHfkaqahIsOf9cXXB5UjcqDCzbQ7AIoMqWkg== -jest-snapshot@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" - integrity sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA== +jest-snapshot@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.3.1.tgz#0f22a86c1b8c87e823f5ad095e82c19d9ed93d72" + integrity sha512-7wbNJWh0sBjmoaexTOWqS7nleTQME7o2W9XKU6CHCxG49Thjct4aVPC/QPNF5NHnvf4M/VDmudIDbwz6noJTRA== dependencies: "@babel/types" "^7.0.0" + "@jest/types" "^24.3.0" chalk "^2.0.1" - jest-diff "^24.0.0" - jest-matcher-utils "^24.0.0" - jest-message-util "^24.0.0" - jest-resolve "^24.1.0" + expect "^24.3.1" + jest-diff "^24.3.1" + jest-matcher-utils "^24.3.1" + jest-message-util "^24.3.0" + jest-resolve "^24.3.1" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.0.0" + pretty-format "^24.3.1" semver "^5.5.0" -jest-util@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.0.0.tgz#fd38fcafd6dedbd0af2944d7a227c0d91b68f7d6" - integrity sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ== - dependencies: - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - jest-message-util "^24.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - jest-util@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.3.0.tgz#a549ae9910fedbd4c5912b204bb1bcc122ea0057" @@ -4526,25 +4620,30 @@ jest-util@^24.3.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" - integrity sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g== +jest-validate@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.3.1.tgz#9359eea5a767a3d20b4fa7a5764fd78330ba8312" + integrity sha512-ww3+IPNCOEMi1oKlrHdSnBXetXtdrrdSh0bqLNTVkWglduhORf94RJWd1ko9oEPU2TcEQS5QIPacYziQIUzc4A== dependencies: + "@jest/types" "^24.3.0" camelcase "^5.0.0" chalk "^2.0.1" - jest-get-type "^24.0.0" + jest-get-type "^24.3.0" leven "^2.1.0" - pretty-format "^24.0.0" + pretty-format "^24.3.1" -jest-watcher@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.0.0.tgz#20d44244d10b0b7312410aefd256c1c1eef68890" - integrity sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g== +jest-watcher@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.3.0.tgz#ee51c6afbe4b35a12fcf1107556db6756d7b9290" + integrity sha512-EpJS/aUG8D3DMuy9XNA4fnkKWy3DQdoWhY92ZUdlETIeEn1xya4Np/96MBSh4II5YvxwKe6JKwbu3Bnzfwa7vA== dependencies: + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/node" "*" + "@types/yargs" "^12.0.9" ansi-escapes "^3.0.0" chalk "^2.0.1" - jest-util "^24.0.0" + jest-util "^24.3.0" string-length "^2.0.0" jest-worker@^24.0.0: @@ -4564,13 +4663,13 @@ jest-worker@^24.3.1: merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" - integrity sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A== +jest@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.3.1.tgz#81959de0d57b2df923510f4fafe266712d37dcca" + integrity sha512-SqZguEbYNcZ3r0KUUBN+IkKfyPS1VBbIUiK4Wrc0AiGUR52gJa0fmlWSOCL3x25908QrfoQwkVDu5jCsfXb2ig== dependencies: import-local "^2.0.0" - jest-cli "^24.1.0" + jest-cli "^24.3.1" js-beautify@^1.6.14: version "1.8.9" @@ -5000,11 +5099,6 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -5780,6 +5874,13 @@ pirates@^4.0.0: dependencies: node-modules-regexp "^1.0.0" +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -5837,13 +5938,15 @@ prettier@1.16.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== -pretty-format@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" - integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== +pretty-format@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.3.1.tgz#ae4a98e93d73d86913a8a7dd1a7c3c900f8fda59" + integrity sha512-NZGH1NWS6o4i9pvRWLsxIK00JB9pqOUzVrO7yWT6vjI2thdxwvxefBJO6O5T24UAhI8P5dMceZ7x5wphgVI7Mg== dependencies: + "@jest/types" "^24.3.0" ansi-regex "^4.0.0" ansi-styles "^3.2.0" + react-is "^16.8.4" private@^0.1.6: version "0.1.8" @@ -6018,6 +6121,11 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^16.8.4: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" + integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -6083,13 +6191,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -realpath-native@^1.0.0, realpath-native@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" - integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g== - dependencies: - util.promisify "^1.0.0" - realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -6126,6 +6227,13 @@ regenerator-transform@^0.13.3: dependencies: private "^0.1.6" +regenerator-transform@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" + integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== + dependencies: + private "^0.1.6" + regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -6358,14 +6466,14 @@ rollup-plugin-buble@^0.19.6: buble "^0.19.6" rollup-pluginutils "^2.3.3" -rollup-plugin-commonjs@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" - integrity sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA== +rollup-plugin-commonjs@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.1.tgz#bb151ca8fa23600c7a03e25f9f0a45b1ee922dac" + integrity sha512-X0A/Cp/t+zbONFinBhiTZrfuUaVwRIp4xsbKq/2ohA2CDULa/7ONSJTelqxon+Vds2R2t2qJTqJQucKUC8GKkw== dependencies: estree-walker "^0.5.2" magic-string "^0.25.1" - resolve "^1.8.1" + resolve "^1.10.0" rollup-pluginutils "^2.3.3" rollup-plugin-json@^3.1.0: @@ -6375,14 +6483,14 @@ rollup-plugin-json@^3.1.0: dependencies: rollup-pluginutils "^2.3.1" -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw== +rollup-plugin-node-resolve@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz#f95765d174e5daeef9ea6268566141f53aa9d422" + integrity sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg== dependencies: builtin-modules "^3.0.0" is-module "^1.0.0" - resolve "^1.8.1" + resolve "^1.10.0" rollup-plugin-terser@^4.0.4: version "4.0.4" @@ -6410,14 +6518,14 @@ rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.2.2.tgz#960416d098d3dba44bbe64c8db94510d6e568104" - integrity sha512-fsn5KJcfSuejjrv8GV7kZNciElqxyzZdUq8rA3e528JsR3ccxrWwoptyUY8GGLlgMFAQMB3dZW8nWF2I1/xrZA== +rollup@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.6.0.tgz#4329f4634718197c678d18491724d50d8b7ee76c" + integrity sha512-qu9iWyuiOxAuBM8cAwLuqPclYdarIpayrkfQB7aTGTiyYPbvx+qVF33sIznfq4bxZCiytQux/FvZieUBAXivCw== dependencies: "@types/estree" "0.0.39" - "@types/node" "*" - acorn "^6.1.0" + "@types/node" "^11.9.5" + acorn "^6.1.1" rsvp@^3.3.3: version "3.6.2" @@ -6462,23 +6570,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" - integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - sane@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/sane/-/sane-4.0.3.tgz#e878c3f19e25cc57fbb734602f48f8a97818b181" @@ -7447,10 +7538,10 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== -vue-jest@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.3.tgz#80f664712f2678b1d8bb3af0f2c0bef5efa8de31" - integrity sha512-QwFQjkv2vXYPKUkNZkMbV/ZTHyQhRM1JY8nP68dRLQmdvCN+VUEKhlByH/PgPqDr2p/NuhaM3PUjJ9nreR++3w== +vue-jest@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.4.tgz#b6a2b0d874968f26fa775ac901903fece531e08b" + integrity sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.26.0" chalk "^2.1.0" @@ -7479,10 +7570,10 @@ vue-router@^3.0.2: resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" integrity sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg== -vue-server-renderer@^2.6.6: - version "2.6.6" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.6.tgz#a2b1174cf1914817147b34789cc1a6baa0672aa1" - integrity sha512-dJ4IrIilS3nhxpOrR12+IKGu9Meg8L0t/W/e/UNSXKyh9EkwDqFPK0nZTfGPudXzr9FMQfg2hK6p2RMydPRU2Q== +vue-server-renderer@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.8.tgz#7f191eede16778d96916f2f9199efa781fd30879" + integrity sha512-aiN2Fz3Sw35KRDQYqSSdsWjOtYcDWpm8rjcf3oSf/iiwFF/i1Q9UjDWvxQv4mbqVRBXGhdoICClQ005IZJoVbQ== dependencies: chalk "^1.1.3" hash-sum "^1.0.2" @@ -7501,10 +7592,10 @@ vue-style-loader@^4.1.0: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.6.6: - version "2.6.6" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.6.tgz#a807acbf3d51971d3721d75ecb1b927b517c1a02" - integrity sha512-OakxDGyrmMQViCjkakQFbDZlG0NibiOzpLauOfyCUVRQc9yPmTqpiz9nF0VeA+dFkXegetw0E5x65BFhhLXO0A== +vue-template-compiler@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.8.tgz#750802604595134775b9c53141b9850b35255e1c" + integrity sha512-SwWKANE5ee+oJg+dEJmsdxsxWYICPsNwk68+1AFjOS8l0O/Yz2845afuJtFqf3UjS/vXG7ECsPeHHEAD65Cjng== dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -7519,10 +7610,10 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.6.6: - version "2.6.6" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.6.tgz#dde41e483c11c46a7bf523909f4f2f816ab60d25" - integrity sha512-Y2DdOZD8sxApS+iUlwv1v8U1qN41kq6Kw45lM6nVZKhygeWA49q7VCCXkjXqeDBXgurrKWkYQ9cJeEJwAq0b9Q== +vue@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.8.tgz#f21cbc536bfc14f7d1d792a137bb12f69e60ea91" + integrity sha512-+vp9lEC2Kt3yom673pzg1J7T1NVGuGzO9j8Wxno+rQN2WYVBX2pyo/RGQ3fXCLh2Pk76Skw/laAPCuBuEQ4diw== w3c-hr-time@^1.0.1: version "1.0.1" @@ -7547,14 +7638,6 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -7642,7 +7725,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.12, which@^1.2.9, which@^1.3.0: +which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== From 5cbb5bdc52c57e91a24653c3e10b084d5f477607 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:00:27 +0100 Subject: [PATCH 32/58] refactor: use forEach not map --- test/utils/build.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/utils/build.js b/test/utils/build.js index 8af3956..85967ec 100644 --- a/test/utils/build.js +++ b/test/utils/build.js @@ -41,8 +41,8 @@ export async function buildFixture(fixture, config = {}) { const webpackStats = await webpackRun(webpackConfig) // for test debugging - webpackStats.errors.map(e => console.error(e)) // eslint-disable-line no-console - webpackStats.warnings.map(e => console.warn(e)) // eslint-disable-line no-console + webpackStats.errors.forEach(e => console.error(e)) // eslint-disable-line no-console + webpackStats.warnings.forEach(e => console.warn(e)) // eslint-disable-line no-console const vueApp = await import(path.resolve(fixturePath, 'server')).then(m => m.default || m) From c6916746123b127a57b0c0806aa18d98b65ab5f5 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:10:13 +0100 Subject: [PATCH 33/58] chore: update circlci config for e2e tests --- .circleci/config.yml | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f4dca5c..3feab76 100755 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,10 +29,10 @@ jobs: # Test - run: - name: Test - command: yarn test + name: Unit Tests + command: yarn test:unit --coverage && yarn coverage - # Coverage + # Test - run: - name: Coverage - command: yarn codecov + name: E2E Tests + command: yarn test:e2e diff --git a/package.json b/package.json index 38c7d62..0225414 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "build": "yarn build:other && yarn build:es", "build:es": "rimraf es && babel src --env-name es --out-dir es --ignore 'src/browser.js'", "build:other": "rimraf lib && rollup -c scripts/rollup.config.js", - "codecov": "codecov", + "coverage": "codecov", "predeploy": "git checkout master && git pull -r", "deploy": "npm version", "postdeploy": "git push origin master --follow-tags && npm run release", From bfa64af29b8d40821022e39d67dda24a5a0641e1 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:13:00 +0100 Subject: [PATCH 34/58] chore: add missing dep --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 0225414..929f395 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "eslint-plugin-standard": "^4.0.0", "eslint-plugin-vue": "^5.2.2", "esm": "^3.2.14", + "is-wsl": "^1.1.0", "jest": "^24.3.1", "jest-environment-jsdom": "^24.3.1", "jest-environment-jsdom-global": "^1.1.1", From c1f97c4ea4c3998ac8e378749dad2ac5dd330acc Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:28:15 +0100 Subject: [PATCH 35/58] refactor: move isArray into is-type --- src/browser.js | 2 +- src/client/refresh.js | 2 +- src/client/updateClientMetaInfo.js | 2 +- src/client/updaters/attribute.js | 2 +- src/client/updaters/tag.js | 2 +- src/server/generators/attribute.js | 3 +-- src/server/generators/tag.js | 2 +- src/shared/applyTemplate.js | 2 +- src/shared/ensure.js | 3 +-- src/shared/escape.js | 3 +-- src/shared/getComponentOption.js | 2 +- src/shared/hasMetaInfo.js | 2 +- src/shared/inMetaInfoBranch.js | 2 +- src/shared/is-type.js | 26 ++++++++++++++++++++++++++ src/shared/isArray.js | 10 ---------- src/shared/mixin.js | 2 +- src/shared/options.js | 2 +- src/shared/typeof.js | 15 --------------- src/shared/window.js | 2 +- 19 files changed, 42 insertions(+), 44 deletions(-) create mode 100644 src/shared/is-type.js delete mode 100644 src/shared/isArray.js delete mode 100644 src/shared/typeof.js diff --git a/src/browser.js b/src/browser.js index 885f415..c459669 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,7 +1,7 @@ import { version } from '../package.json' import createMixin from './shared/mixin' import setOptions from './shared/options' -import { isUndefined } from './shared/typeof' +import { isUndefined } from './shared/is-type' import $meta from './client/$meta' import hasMetaInfo from './shared/hasMetaInfo' diff --git a/src/client/refresh.js b/src/client/refresh.js index a70deee..9c11e0b 100644 --- a/src/client/refresh.js +++ b/src/client/refresh.js @@ -1,5 +1,5 @@ import getMetaInfo from '../shared/getMetaInfo' -import { isFunction } from '../shared/typeof' +import { isFunction } from '../shared/is-type' import updateClientMetaInfo from './updateClientMetaInfo' export default function _refresh(options = {}) { diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index 633a9a3..30c7800 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -1,5 +1,5 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' -import isArray from '../shared/isArray' +import { isArray } from '../shared/is-type' import { updateAttribute, updateTag, updateTitle } from './updaters' function getTag(tags, tag) { diff --git a/src/client/updaters/attribute.js b/src/client/updaters/attribute.js index 6780c7c..ec05073 100644 --- a/src/client/updaters/attribute.js +++ b/src/client/updaters/attribute.js @@ -1,5 +1,5 @@ import { booleanHtmlAttributes } from '../../shared/constants' -import isArray from '../../shared/isArray' +import { isArray } from '../../shared/is-type' /** * Updates the document's html tag attributes diff --git a/src/client/updaters/tag.js b/src/client/updaters/tag.js index 5b28ff9..9739344 100644 --- a/src/client/updaters/tag.js +++ b/src/client/updaters/tag.js @@ -1,4 +1,4 @@ -import { isUndefined } from '../../shared/typeof' +import { isUndefined } from '../../shared/is-type' /** * Updates meta tags inside and on the client. Borrowed from `react-helmet`: diff --git a/src/server/generators/attribute.js b/src/server/generators/attribute.js index 9b24b53..0ac406a 100644 --- a/src/server/generators/attribute.js +++ b/src/server/generators/attribute.js @@ -1,6 +1,5 @@ import { booleanHtmlAttributes } from '../../shared/constants' -import { isUndefined } from '../../shared/typeof' -import isArray from '../../shared/isArray' +import { isUndefined, isArray } from '../../shared/is-type' /** * Generates tag attributes for use on the server. diff --git a/src/server/generators/tag.js b/src/server/generators/tag.js index ae481de..2849ed2 100644 --- a/src/server/generators/tag.js +++ b/src/server/generators/tag.js @@ -1,5 +1,5 @@ import { booleanHtmlAttributes, tagsWithoutEndTag, tagsWithInnerContent, tagAttributeAsInnerContent } from '../../shared/constants' -import { isUndefined } from '../../shared/typeof' +import { isUndefined } from '../../shared/is-type' /** * Generates meta, base, link, style, script, noscript tags for use on the server diff --git a/src/shared/applyTemplate.js b/src/shared/applyTemplate.js index 5805f6f..ca5bc81 100644 --- a/src/shared/applyTemplate.js +++ b/src/shared/applyTemplate.js @@ -1,4 +1,4 @@ -import { isUndefined, isFunction } from './typeof' +import { isUndefined, isFunction } from './is-type' export default function applyTemplate({ component, metaTemplateKeyName, contentKeyName }, headObject, template, chunk) { if (isUndefined(template)) { diff --git a/src/shared/ensure.js b/src/shared/ensure.js index 3054549..865ac3e 100644 --- a/src/shared/ensure.js +++ b/src/shared/ensure.js @@ -1,5 +1,4 @@ -import isArray from './isArray' -import { isObject } from './typeof' +import { isArray, isObject } from './is-type' export function ensureIsArray(arg, key) { if (!key || !isObject(arg)) { diff --git a/src/shared/escape.js b/src/shared/escape.js index 77b73e3..e190b7f 100644 --- a/src/shared/escape.js +++ b/src/shared/escape.js @@ -1,6 +1,5 @@ import { metaInfoOptionKeys, disableOptionKeys } from './constants' -import isArray from './isArray' -import { isString, isObject } from './typeof' +import { isString, isArray, isObject } from './is-type' // sanitizes potentially dangerous characters export default function escape(info, options, escapeOptions) { diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index ae819a8..b66df4c 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -1,7 +1,7 @@ import { merge } from './merge' import applyTemplate from './applyTemplate' import inMetaInfoBranch from './inMetaInfoBranch' -import { isFunction, isObject } from './typeof' +import { isFunction, isObject } from './is-type' /** * Returns the `opts.option` $option value of the given `opts.component`. diff --git a/src/shared/hasMetaInfo.js b/src/shared/hasMetaInfo.js index 7946896..033c34a 100644 --- a/src/shared/hasMetaInfo.js +++ b/src/shared/hasMetaInfo.js @@ -1,4 +1,4 @@ -import { isObject } from './typeof' +import { isObject } from './is-type' // Vue $root instance has a _vueMeta object property, otherwise its a boolean true export default function hasMetaInfo(vm = this) { diff --git a/src/shared/inMetaInfoBranch.js b/src/shared/inMetaInfoBranch.js index e2884d9..cf89e9e 100644 --- a/src/shared/inMetaInfoBranch.js +++ b/src/shared/inMetaInfoBranch.js @@ -1,4 +1,4 @@ -import { isUndefined } from './typeof' +import { isUndefined } from './is-type' // a component is in a metaInfo branch when itself has meta info or one of its (grand-)children has export default function inMetaInfoBranch(vm = this) { diff --git a/src/shared/is-type.js b/src/shared/is-type.js new file mode 100644 index 0000000..220cab7 --- /dev/null +++ b/src/shared/is-type.js @@ -0,0 +1,26 @@ +/** + * checks if passed argument is an array + * @param {any} arr - the object to check + * @return {Boolean} - true if `arr` is an array + */ +export function isArray(arr) { + return Array.isArray + ? Array.isArray(arr) + : Object.prototype.toString.call(arr) === '[object Array]' +} + +export function isUndefined(arg) { + return typeof arg === 'undefined' +} + +export function isObject(arg) { + return typeof arg === 'object' +} + +export function isFunction(arg) { + return typeof arg === 'function' +} + +export function isString(arg) { + return typeof arg === 'string' +} diff --git a/src/shared/isArray.js b/src/shared/isArray.js deleted file mode 100644 index 698b037..0000000 --- a/src/shared/isArray.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * checks if passed argument is an array - * @param {any} arr - the object to check - * @return {Boolean} - true if `arr` is an array - */ -export default function isArray(arr) { - return Array.isArray - ? Array.isArray(arr) - : Object.prototype.toString.call(arr) === '[object Array]' -} diff --git a/src/shared/mixin.js b/src/shared/mixin.js index 1faf876..ca6b83f 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -1,6 +1,6 @@ import triggerUpdate from '../client/triggerUpdate' import hasMetaInfo from './hasMetaInfo' -import { isUndefined, isFunction } from './typeof' +import { isUndefined, isFunction } from './is-type' import { ensuredPush } from './ensure' export default function createMixin(Vue, options) { diff --git a/src/shared/options.js b/src/shared/options.js index eb81847..8547fd4 100644 --- a/src/shared/options.js +++ b/src/shared/options.js @@ -1,4 +1,4 @@ -import { isObject, isFunction } from './typeof' +import { isObject, isFunction } from './is-type' import { keyName, diff --git a/src/shared/typeof.js b/src/shared/typeof.js deleted file mode 100644 index c6b39b2..0000000 --- a/src/shared/typeof.js +++ /dev/null @@ -1,15 +0,0 @@ -export function isUndefined(arg) { - return typeof arg === 'undefined' -} - -export function isObject(arg) { - return typeof arg === 'object' -} - -export function isFunction(arg) { - return typeof arg === 'function' -} - -export function isString(arg) { - return typeof arg === 'string' -} diff --git a/src/shared/window.js b/src/shared/window.js index 118705e..d31dbab 100644 --- a/src/shared/window.js +++ b/src/shared/window.js @@ -1,4 +1,4 @@ -import { isUndefined } from './typeof' +import { isUndefined } from './is-type' export function hasGlobalWindowFn() { try { From 2b24acc8b2c72a4c507342895fe6052606e0a615 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:38:10 +0100 Subject: [PATCH 36/58] refactor: set defaultOptions in shared/constants --- src/shared/constants.js | 9 +++++++++ src/shared/options.js | 20 +------------------- test/unit/components.test.js | 2 +- test/unit/escaping.test.js | 2 +- test/unit/generators.test.js | 2 +- test/unit/getMetaInfo.test.js | 2 +- test/unit/plugin-browser.test.js | 2 +- test/unit/plugin-server.test.js | 2 +- test/unit/shared.test.js | 2 +- test/unit/updaters.test.js | 2 +- test/utils/constants.js | 17 ----------------- test/utils/index.js | 2 +- test/utils/meta-info-data.js | 2 +- 13 files changed, 20 insertions(+), 46 deletions(-) delete mode 100644 test/utils/constants.js diff --git a/src/shared/constants.js b/src/shared/constants.js index af65ceb..ead0b93 100644 --- a/src/shared/constants.js +++ b/src/shared/constants.js @@ -44,6 +44,15 @@ export const metaTemplateKeyName = 'template' // This is the key name for the content-holding property export const contentKeyName = 'content' +export const defaultOptions = { + keyName, + attribute, + ssrAttribute, + tagIDKeyName, + contentKeyName, + metaTemplateKeyName +} + // List of metaInfo property keys which are configuration options (and dont generate html) export const metaInfoOptionKeys = [ 'titleChunk', diff --git a/src/shared/options.js b/src/shared/options.js index 8547fd4..ce0687a 100644 --- a/src/shared/options.js +++ b/src/shared/options.js @@ -1,23 +1,5 @@ import { isObject, isFunction } from './is-type' - -import { - keyName, - attribute, - ssrAttribute, - tagIDKeyName, - metaTemplateKeyName, - contentKeyName -} from './constants' - -// set some default options -const defaultOptions = { - keyName, - contentKeyName, - metaTemplateKeyName, - attribute, - ssrAttribute, - tagIDKeyName -} +import { defaultOptions } from './constants' export default function setOptions(options) { // combine options diff --git a/test/unit/components.test.js b/test/unit/components.test.js index 5f56f35..07b76e0 100644 --- a/test/unit/components.test.js +++ b/test/unit/components.test.js @@ -1,6 +1,6 @@ import _getMetaInfo from '../../src/shared/getMetaInfo' import { mount, loadVueMetaPlugin, vmTick } from '../utils' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' import GoodbyeWorld from '../components/goodbye-world.vue' import HelloWorld from '../components/hello-world.vue' diff --git a/test/unit/escaping.test.js b/test/unit/escaping.test.js index 2ed0b86..f9c26f0 100644 --- a/test/unit/escaping.test.js +++ b/test/unit/escaping.test.js @@ -1,6 +1,6 @@ import _getMetaInfo from '../../src/shared/getMetaInfo' import { loadVueMetaPlugin } from '../utils' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' const getMetaInfo = (component, escapeSequences) => _getMetaInfo(defaultOptions, component, escapeSequences) diff --git a/test/unit/generators.test.js b/test/unit/generators.test.js index 33aa4b2..5692242 100644 --- a/test/unit/generators.test.js +++ b/test/unit/generators.test.js @@ -1,5 +1,5 @@ import _generateServerInjector from '../../src/server/generateServerInjector' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' import metaInfoData from '../utils/meta-info-data' const generateServerInjector = (type, data) => _generateServerInjector(defaultOptions, type, data) diff --git a/test/unit/getMetaInfo.test.js b/test/unit/getMetaInfo.test.js index ba79c23..0ae0e2c 100644 --- a/test/unit/getMetaInfo.test.js +++ b/test/unit/getMetaInfo.test.js @@ -1,6 +1,6 @@ import _getMetaInfo from '../../src/shared/getMetaInfo' import { loadVueMetaPlugin } from '../utils' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) diff --git a/test/unit/plugin-browser.test.js b/test/unit/plugin-browser.test.js index 6ec044c..606a2b1 100644 --- a/test/unit/plugin-browser.test.js +++ b/test/unit/plugin-browser.test.js @@ -1,7 +1,7 @@ import triggerUpdate from '../../src/client/triggerUpdate' import batchUpdate from '../../src/client/batchUpdate' import { mount, vmTick, VueMetaBrowserPlugin, loadVueMetaPlugin } from '../utils' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' jest.mock('../../src/client/triggerUpdate') jest.mock('../../src/client/batchUpdate') diff --git a/test/unit/plugin-server.test.js b/test/unit/plugin-server.test.js index fa6a113..d0f35db 100644 --- a/test/unit/plugin-server.test.js +++ b/test/unit/plugin-server.test.js @@ -1,5 +1,5 @@ import { mount, VueMetaServerPlugin, loadVueMetaPlugin } from '../utils' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' jest.mock('../../package.json', () => ({ version: 'test-version' diff --git a/test/unit/shared.test.js b/test/unit/shared.test.js index 61fa92d..70668f6 100644 --- a/test/unit/shared.test.js +++ b/test/unit/shared.test.js @@ -4,7 +4,7 @@ import { ensureIsArray } from '../../src/shared/ensure' import setOptions from '../../src/shared/options' import { hasGlobalWindowFn } from '../../src/shared/window' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' const noop = () => {} diff --git a/test/unit/updaters.test.js b/test/unit/updaters.test.js index 1453887..e24d136 100644 --- a/test/unit/updaters.test.js +++ b/test/unit/updaters.test.js @@ -1,5 +1,5 @@ import _updateClientMetaInfo from '../../src/client/updateClientMetaInfo' -import { defaultOptions } from '../utils/constants' +import { defaultOptions } from '../../src/shared/constants' import metaInfoData from '../utils/meta-info-data' const updateClientMetaInfo = (type, data) => _updateClientMetaInfo(defaultOptions, { [type]: data }) diff --git a/test/utils/constants.js b/test/utils/constants.js deleted file mode 100644 index a1b60bb..0000000 --- a/test/utils/constants.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - keyName, - attribute, - ssrAttribute, - tagIDKeyName, - metaTemplateKeyName, - contentKeyName -} from '../../src/shared/constants' - -export const defaultOptions = { - keyName, - attribute, - ssrAttribute, - tagIDKeyName, - metaTemplateKeyName, - contentKeyName -} diff --git a/test/utils/index.js b/test/utils/index.js index 0087c4e..1fb19c0 100644 --- a/test/utils/index.js +++ b/test/utils/index.js @@ -1,8 +1,8 @@ import { mount, createLocalVue } from '@vue/test-utils' import { renderToString } from '@vue/server-test-utils' +import { defaultOptions } from '../../src/shared/constants' import VueMetaBrowserPlugin from '../../src/browser' import VueMetaServerPlugin from '../../src' -import { defaultOptions } from './constants' export { mount, diff --git a/test/utils/meta-info-data.js b/test/utils/meta-info-data.js index 8ac912b..67d1593 100644 --- a/test/utils/meta-info-data.js +++ b/test/utils/meta-info-data.js @@ -1,4 +1,4 @@ -import { defaultOptions } from './constants' +import { defaultOptions } from '../../src/shared/constants' const metaInfoData = { title: { From 749f8d6228119ea92b88711a0f3cb26c37367171 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 18:56:10 +0100 Subject: [PATCH 37/58] chore: update circlici config for e2e tests --- .circleci/config.yml | 51 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3feab76..8999084 100755 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,15 @@ version: 2 + +defaults: &defaults + working_directory: ~/project + docker: + - image: circleci/node:latest + environment: + NODE_ENV: test + jobs: - build: - docker: - - image: circleci/node + setup: + <<: *defaults steps: # Checkout repository - checkout @@ -22,17 +29,49 @@ jobs: paths: - "node_modules" - # Lint + # Persist workspace + - persist_to_workspace: + root: ~/project + paths: + - node_modules + + lint: + <<: *defaults + steps: + - checkout + - attach_workspace: + at: ~/project - run: name: Lint command: yarn lint - # Test + test-unit: + <<: *defaults + steps: + - checkout + - attach_workspace: + at: ~/project - run: name: Unit Tests command: yarn test:unit --coverage && yarn coverage - # Test + test-e2e: + docker: + - image: circleci/node:latest-browsers + steps: + - checkout + - attach_workspace: + at: ~/project - run: name: E2E Tests command: yarn test:e2e + +workflows: + version: 2 + + commit: + jobs: + - setup + - lint: { requires: [setup] } + - test-unit: { requires: [lint] } + - test-e2e: { requires: [lint] } From 012873c9ac7cdf76e311e19c49adc43212033fa7 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 20:05:42 +0100 Subject: [PATCH 38/58] chore: add audit to ci --- .circleci/config.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8999084..df16198 100755 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,6 +45,16 @@ jobs: name: Lint command: yarn lint + audit: + <<: *defaults + steps: + - checkout + - attach_workspace: + at: ~/project + - run: + name: Security Audit + command: yarn audit + test-unit: <<: *defaults steps: @@ -72,6 +82,7 @@ workflows: commit: jobs: - setup - - lint: { requires: [setup] } - - test-unit: { requires: [lint] } - - test-e2e: { requires: [lint] } + - lint: { requires: [setup] } + - audit: { requires: [setup] } + - test-unit: { requires: [lint] } + - test-e2e: { requires: [lint] } From 077407297bc919cf829aaf60b4236a326c49d436 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 20:41:27 +0100 Subject: [PATCH 39/58] chore: improve build config --- scripts/rollup.config.js | 103 +++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index 7e38a81..830b63c 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js @@ -4,6 +4,7 @@ import json from 'rollup-plugin-json' import babel from 'rollup-plugin-babel' import buble from 'rollup-plugin-buble' import { terser } from 'rollup-plugin-terser' +import defaultsDeep from 'lodash/defaultsDeep' const pkg = require('../package.json') @@ -14,48 +15,64 @@ const banner = `/** */ `.replace(/ {4}/gm, '').trim() -const baseConfig = { - input: 'src/browser.js', - output: { - file: pkg.web, - format: 'umd', - name: 'VueMeta', - sourcemap: false, - banner - }, - plugins: [ - json(), - nodeResolve(), - commonjs(), - /*buble({ - objectAssign: 'Object.assign' - }),*/ - ] +function rollupConfig({ + plugins = [], + ...config + }) { + + return defaultsDeep({}, config, { + input: 'src/browser.js', + output: { + name: 'VueMeta', + format: 'umd', + sourcemap: false, + banner + }, + plugins: [ + json(), + nodeResolve() + ].concat(plugins), + }) } -export default [{ - ...baseConfig, -}, { - ...baseConfig, - output: { - ...baseConfig.output, - file: pkg.web.replace('.js', '.min.js'), - }, - plugins: [ - ...baseConfig.plugins, - babel({ - runtimeHelpers: true, - presets: ['@nuxt/babel-preset-app'] - }), - terser() - ] -}, { - ...baseConfig, - input: 'src/index.js', - output: { - ...baseConfig.output, - file: pkg.main, - format: 'cjs' - }, - external: Object.keys(pkg.dependencies) -}] +const babelConfig = { + runtimeHelpers: true, + exclude : 'node_modules/**', + presets: [['@nuxt/babel-preset-app', { + // useBuiltIns: 'usage', + // target: { ie: 9 } + }]] +} + +export default [ + rollupConfig({ + output: { + file: pkg.web, + }, + plugins: [ + babel(babelConfig), + commonjs() + ] + }), + rollupConfig({ + output: { + file: pkg.web.replace('.js', '.min.js'), + }, + plugins: [ + babel(babelConfig), + commonjs(), + terser() + ] + }), + rollupConfig({ + input: 'src/index.js', + output: { + file: pkg.main, + format: 'cjs' + }, + plugins: [ + commonjs() + ], + external: Object.keys(pkg.dependencies) + }) +] From a9d46888ce701f4e148c7690dbf075853b185d32 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sat, 9 Mar 2019 20:47:48 +0100 Subject: [PATCH 40/58] chore: remove unused rollup-plugin-buble --- package.json | 1 - scripts/rollup.config.js | 1 - yarn.lock | 29 ++--------------------------- 3 files changed, 2 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 929f395..f22a381 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,6 @@ "rimraf": "^2.6.3", "rollup": "^1.6.0", "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-buble": "^0.19.6", "rollup-plugin-commonjs": "^9.2.1", "rollup-plugin-json": "^3.1.0", "rollup-plugin-node-resolve": "^4.0.1", diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index 830b63c..2d6243f 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js @@ -2,7 +2,6 @@ import commonjs from 'rollup-plugin-commonjs' import nodeResolve from 'rollup-plugin-node-resolve' import json from 'rollup-plugin-json' import babel from 'rollup-plugin-babel' -import buble from 'rollup-plugin-buble' import { terser } from 'rollup-plugin-terser' import defaultsDeep from 'lodash/defaultsDeep' diff --git a/yarn.lock b/yarn.lock index d98b57a..86d6885 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2016,18 +2016,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buble@^0.19.6: - version "0.19.6" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" - integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== - dependencies: - chalk "^2.4.1" - magic-string "^0.25.1" - minimist "^1.2.0" - os-homedir "^1.0.1" - regexpu-core "^4.2.0" - vlq "^1.0.0" - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2130,7 +2118,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5589,7 +5577,7 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -6458,14 +6446,6 @@ rollup-plugin-babel@^4.3.2: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.3.0" -rollup-plugin-buble@^0.19.6: - version "0.19.6" - resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e" - integrity sha512-El5Fut4/wEO17ZN/n9BZvqd7DXXB2WbJr/DKvr89LXChC/cHllE0XwiUDeAalrTkgr0WrnyLDTCQvEv+cGywWQ== - dependencies: - buble "^0.19.6" - rollup-pluginutils "^2.3.3" - rollup-plugin-commonjs@^9.2.1: version "9.2.1" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.1.tgz#bb151ca8fa23600c7a03e25f9f0a45b1ee922dac" @@ -7509,11 +7489,6 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vlq@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" - integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== - vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" From 2adba84e58face3cb8d2880107dace4e7ffd244f Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 11:48:23 +0100 Subject: [PATCH 41/58] refactor: combine escape info --- src/client/refresh.js | 11 ++--------- src/server/inject.js | 11 ++--------- src/shared/{escape.js => escaping.js} | 18 +++++++++++++++++- src/shared/getMetaInfo.js | 2 +- 4 files changed, 22 insertions(+), 20 deletions(-) rename src/shared/{escape.js => escaping.js} (82%) diff --git a/src/client/refresh.js b/src/client/refresh.js index 9c11e0b..c5d1136 100644 --- a/src/client/refresh.js +++ b/src/client/refresh.js @@ -1,16 +1,9 @@ import getMetaInfo from '../shared/getMetaInfo' import { isFunction } from '../shared/is-type' +import { clientSequences } from '../shared/escaping' import updateClientMetaInfo from './updateClientMetaInfo' export default function _refresh(options = {}) { - const escapeSequences = [ - [/&/g, '\u0026'], - [//g, '\u003e'], - [/"/g, '\u0022'], - [/'/g, '\u0027'] - ] - /** * When called, will update the current meta info with new meta info. * Useful when updating meta info as the result of an asynchronous @@ -22,7 +15,7 @@ export default function _refresh(options = {}) { * @return {Object} - new meta info */ return function refresh() { - const metaInfo = getMetaInfo(options, this.$root, escapeSequences) + const metaInfo = getMetaInfo(options, this.$root, clientSequences) const tags = updateClientMetaInfo(options, metaInfo) // emit "event" with new info diff --git a/src/server/inject.js b/src/server/inject.js index f094198..fa58e8c 100644 --- a/src/server/inject.js +++ b/src/server/inject.js @@ -1,16 +1,9 @@ import getMetaInfo from '../shared/getMetaInfo' import { metaInfoOptionKeys } from '../shared/constants' +import { serverSequences } from '../shared/escaping' import generateServerInjector from './generateServerInjector' export default function _inject(options = {}) { - const escapeSequences = [ - [/&/g, '&'], - [//g, '>'], - [/"/g, '"'], - [/'/g, '''] - ] - /** * Converts the state of the meta info object such that each item * can be compiled to a tag string on the server @@ -20,7 +13,7 @@ export default function _inject(options = {}) { */ return function inject() { // get meta info with sensible defaults - const metaInfo = getMetaInfo(options, this.$root, escapeSequences) + const metaInfo = getMetaInfo(options, this.$root, serverSequences) // generate server injectors for (const key in metaInfo) { diff --git a/src/shared/escape.js b/src/shared/escaping.js similarity index 82% rename from src/shared/escape.js rename to src/shared/escaping.js index e190b7f..f790b7f 100644 --- a/src/shared/escape.js +++ b/src/shared/escaping.js @@ -1,8 +1,24 @@ import { metaInfoOptionKeys, disableOptionKeys } from './constants' import { isString, isArray, isObject } from './is-type' +export const serverSequences = [ + [/&/g, '&'], + [//g, '>'], + [/"/g, '"'], + [/'/g, '''] +] + +export const clientSequences = [ + [/&/g, '\u0026'], + [//g, '\u003e'], + [/"/g, '\u0022'], + [/'/g, '\u0027'] +] + // sanitizes potentially dangerous characters -export default function escape(info, options, escapeOptions) { +export function escape(info, options, escapeOptions) { const { tagIDKeyName } = options const { doEscape = v => v } = escapeOptions const escaped = {} diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 2e6d324..5574164 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -1,7 +1,7 @@ import applyTemplate from './applyTemplate' import { defaultInfo, disableOptionKeys } from './constants' import { ensureIsArray } from './ensure' -import escape from './escape' +import { escape } from './escaping' import getComponentOption from './getComponentOption' /** From f92fb676199764a83fc7230fb2503223e1ca7cc6 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 11:55:00 +0100 Subject: [PATCH 42/58] refactor: rename to template module --- src/shared/merge.js | 2 +- src/shared/{applyTemplate.js => template.js} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/shared/{applyTemplate.js => template.js} (79%) diff --git a/src/shared/merge.js b/src/shared/merge.js index ced8de3..e33c0a2 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -1,5 +1,5 @@ import deepmerge from 'deepmerge' -import applyTemplate from './applyTemplate' +import { applyTemplate } from './template' import { metaInfoAttributeKeys } from './constants' export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, contentKeyName }, target, source) { diff --git a/src/shared/applyTemplate.js b/src/shared/template.js similarity index 79% rename from src/shared/applyTemplate.js rename to src/shared/template.js index ca5bc81..cb6fd16 100644 --- a/src/shared/applyTemplate.js +++ b/src/shared/template.js @@ -1,6 +1,6 @@ import { isUndefined, isFunction } from './is-type' -export default function applyTemplate({ component, metaTemplateKeyName, contentKeyName }, headObject, template, chunk) { +export function applyTemplate({ component, metaTemplateKeyName, contentKeyName }, headObject, template, chunk) { if (isUndefined(template)) { template = headObject[metaTemplateKeyName] delete headObject[metaTemplateKeyName] From 419951c59f6b4a9986e3fb317b834724709f71b8 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 11:56:19 +0100 Subject: [PATCH 43/58] refactor: combine meta helpers --- src/browser.js | 2 +- src/index.js | 2 +- src/shared/getComponentOption.js | 4 ++-- src/shared/hasMetaInfo.js | 6 ------ src/shared/inMetaInfoBranch.js | 6 ------ src/shared/meta-helpers.js | 11 +++++++++++ test/unit/getComponentOptions.test.js | 2 +- 7 files changed, 16 insertions(+), 17 deletions(-) delete mode 100644 src/shared/hasMetaInfo.js delete mode 100644 src/shared/inMetaInfoBranch.js create mode 100644 src/shared/meta-helpers.js diff --git a/src/browser.js b/src/browser.js index c459669..037de92 100644 --- a/src/browser.js +++ b/src/browser.js @@ -3,7 +3,7 @@ import createMixin from './shared/mixin' import setOptions from './shared/options' import { isUndefined } from './shared/is-type' import $meta from './client/$meta' -import hasMetaInfo from './shared/hasMetaInfo' +import { hasMetaInfo } from './shared/meta-helpers' /** * Plugin install function. diff --git a/src/index.js b/src/index.js index 9e049d0..470fb7d 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import { version } from '../package.json' import createMixin from './shared/mixin' import setOptions from './shared/options' import $meta from './server/$meta' -import hasMetaInfo from './shared/hasMetaInfo' +import { hasMetaInfo } from './shared/meta-helpers' /** * Plugin install function. diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index b66df4c..7e46bec 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -1,6 +1,6 @@ import { merge } from './merge' -import applyTemplate from './applyTemplate' -import inMetaInfoBranch from './inMetaInfoBranch' +import { applyTemplate } from './template' +import { inMetaInfoBranch } from './meta-helpers' import { isFunction, isObject } from './is-type' /** diff --git a/src/shared/hasMetaInfo.js b/src/shared/hasMetaInfo.js deleted file mode 100644 index 033c34a..0000000 --- a/src/shared/hasMetaInfo.js +++ /dev/null @@ -1,6 +0,0 @@ -import { isObject } from './is-type' - -// Vue $root instance has a _vueMeta object property, otherwise its a boolean true -export default function hasMetaInfo(vm = this) { - return vm && (vm._vueMeta === true || isObject(vm._vueMeta)) -} diff --git a/src/shared/inMetaInfoBranch.js b/src/shared/inMetaInfoBranch.js deleted file mode 100644 index cf89e9e..0000000 --- a/src/shared/inMetaInfoBranch.js +++ /dev/null @@ -1,6 +0,0 @@ -import { isUndefined } from './is-type' - -// a component is in a metaInfo branch when itself has meta info or one of its (grand-)children has -export default function inMetaInfoBranch(vm = this) { - return vm && !isUndefined(vm._vueMeta) -} diff --git a/src/shared/meta-helpers.js b/src/shared/meta-helpers.js new file mode 100644 index 0000000..382e7f0 --- /dev/null +++ b/src/shared/meta-helpers.js @@ -0,0 +1,11 @@ +import { isUndefined, isObject } from './is-type' + +// Vue $root instance has a _vueMeta object property, otherwise its a boolean true +export function hasMetaInfo(vm = this) { + return vm && (vm._vueMeta === true || isObject(vm._vueMeta)) +} + +// a component is in a metaInfo branch when itself has meta info or one of its (grand-)children has +export function inMetaInfoBranch(vm = this) { + return vm && !isUndefined(vm._vueMeta) +} diff --git a/test/unit/getComponentOptions.test.js b/test/unit/getComponentOptions.test.js index e49ffaa..7bdc895 100644 --- a/test/unit/getComponentOptions.test.js +++ b/test/unit/getComponentOptions.test.js @@ -1,5 +1,5 @@ import getComponentOption from '../../src/shared/getComponentOption' -import inMetaInfoBranch from '../../src/shared/inMetaInfoBranch' +import { inMetaInfoBranch } from '../../src/shared/meta-helpers' import { mount, getVue, loadVueMetaPlugin } from '../utils' describe('getComponentOption', () => { From 4a8f9753e08da4958acf771618879e29c2137ce6 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 11:57:25 +0100 Subject: [PATCH 44/58] fix: afterNavigation logic (its never set in options) --- src/shared/mixin.js | 34 ++++++++++++++-------------------- src/shared/nav-guards.js | 25 +++++++++++++++++++++++++ src/shared/options.js | 12 +----------- test/unit/shared.test.js | 25 ------------------------- 4 files changed, 40 insertions(+), 56 deletions(-) create mode 100644 src/shared/nav-guards.js diff --git a/src/shared/mixin.js b/src/shared/mixin.js index ca6b83f..ce9a544 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -1,7 +1,8 @@ import triggerUpdate from '../client/triggerUpdate' -import hasMetaInfo from './hasMetaInfo' +import { hasMetaInfo } from './meta-helpers' import { isUndefined, isFunction } from './is-type' import { ensuredPush } from './ensure' +import { addNavGuards } from './nav-guards' export default function createMixin(Vue, options) { // for which Vue lifecycle hooks should the metaInfo be refreshed @@ -14,7 +15,7 @@ export default function createMixin(Vue, options) { get() { // Show deprecation warning once when devtools enabled if (Vue.config.devtools && !this.$root._vueMeta.hasMetaInfoDeprecationWarningShown) { - console.warn('VueMeta DeprecationWarning: _hasMetaInfo has been deprecated and will be removed in a future version. Please import hasMetaInfo and use hasMetaInfo(vm) instead') // eslint-disable-line no-console + console.warn('VueMeta DeprecationWarning: _hasMetaInfo has been deprecated and will be removed in a future version. Please use hasMetaInfo(vm) instead') // eslint-disable-line no-console this.$root._vueMeta.hasMetaInfoDeprecationWarningShown = true } return hasMetaInfo(this) @@ -71,39 +72,32 @@ export default function createMixin(Vue, options) { this.$root._vueMeta.initialized = this.$isServer if (!this.$root._vueMeta.initialized) { - const $rootMeta = this.$root.$meta() - ensuredPush(this.$options, 'mounted', () => { if (!this.$root._vueMeta.initialized) { // refresh meta in nextTick so all child components have loaded this.$nextTick(function () { - $rootMeta.refresh() + this.$root.$meta().refresh() this.$root._vueMeta.initialized = true }) } }) - // add vue-router navigation guard to prevent multiple updates during navigation - // only usefull on the client side - if (options.refreshOnceOnNavigation && this.$root.$router) { - const $router = this.$root.$router - $router.beforeEach((to, from, next) => { - $rootMeta.pause() - next() - }) - - $router.afterEach(() => { - const { vm, metaInfo } = $rootMeta.resume() - if (metaInfo && metaInfo.afterNavigation && isFunction(metaInfo.afterNavigation)) { - metaInfo.afterNavigation.call(vm, metaInfo) - } - }) + // add the navigation guards if they havent been added yet + if (options.refreshOnceOnNavigation) { + addNavGuards(this) } } } // do not trigger refresh on the server side if (!this.$isServer) { + // add the navigation guards if they havent been added yet + // if metaInfo is defined as a function, this does call the computed fn redundantly + // but as Vue internally caches the results of computed props it shouldnt hurt performance + if (this.$options[options.keyName].afterNavigation) { + addNavGuards(this) + } + // no need to add this hooks on server side updateOnLifecycleHook.forEach((lifecycleHook) => { ensuredPush(this.$options, lifecycleHook, () => triggerUpdate(this, lifecycleHook)) diff --git a/src/shared/nav-guards.js b/src/shared/nav-guards.js new file mode 100644 index 0000000..eee2200 --- /dev/null +++ b/src/shared/nav-guards.js @@ -0,0 +1,25 @@ +import { isFunction } from './is-type' + +export function addNavGuards(vm) { + // return when nav guards already added or no router exists + if (vm.$root._vueMeta.navGuards || !vm.$root.$router) { + return + } + + vm.$root._vueMeta.navGuards = true + + const $router = vm.$root.$router + const $meta = vm.$root.$meta() + + $router.beforeEach((to, from, next) => { + $meta.pause() + next() + }) + + $router.afterEach(() => { + const { metaInfo } = $meta.resume() + if (metaInfo && metaInfo.afterNavigation && isFunction(metaInfo.afterNavigation)) { + metaInfo.afterNavigation(metaInfo) + } + }) +} diff --git a/src/shared/options.js b/src/shared/options.js index ce0687a..5595808 100644 --- a/src/shared/options.js +++ b/src/shared/options.js @@ -1,4 +1,4 @@ -import { isObject, isFunction } from './is-type' +import { isObject } from './is-type' import { defaultOptions } from './constants' export default function setOptions(options) { @@ -11,15 +11,5 @@ export default function setOptions(options) { } } - if (options.afterNavigation && !isFunction(options.afterNavigation)) { - console.warn(`afterNavigation should be a function, received ${typeof options.afterNavigation} instead`) // eslint-disable-line no-console - options.afterNavigation = void 0 - return options - } - - if (options.afterNavigation && !options.refreshOnceOnNavigation) { - options.refreshOnceOnNavigation = true - } - return options } diff --git a/test/unit/shared.test.js b/test/unit/shared.test.js index 70668f6..7351cee 100644 --- a/test/unit/shared.test.js +++ b/test/unit/shared.test.js @@ -6,8 +6,6 @@ import setOptions from '../../src/shared/options' import { hasGlobalWindowFn } from '../../src/shared/window' import { defaultOptions } from '../../src/shared/constants' -const noop = () => {} - describe('shared', () => { test('ensureIsArray ensures var is array', () => { let a = { p: 1 } @@ -38,27 +36,4 @@ describe('shared', () => { expect(options.contentKeyName).toBeDefined() expect(options.contentKeyName).toBe(defaultOptions.contentKeyName) }) - - test('setOptions warns when afterNavigation not fn', () => { - const warn = jest.spyOn(console, 'warn').mockImplementation(noop) - - let options = { afterNavigation: true } - options = setOptions(options) - - expect(warn).toHaveBeenCalledTimes(1) - expect(options.afterNavigation).toBeUndefined() - - warn.mockRestore() - }) - test('setOptions sets refreshOnceOnNavigation when afterNavigation defined', () => { - const warn = jest.spyOn(console, 'warn').mockImplementation(noop) - - let options = { afterNavigation: noop } - options = setOptions(options) - - expect(warn).not.toHaveBeenCalled() - expect(options.refreshOnceOnNavigation).toBe(true) - - warn.mockRestore() - }) }) From 4c967b0b4ba9f69f2fa6a3120ab37e5836bacaa3 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 11:58:10 +0100 Subject: [PATCH 45/58] refactor: missed template import --- src/shared/getMetaInfo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 5574164..0ab9627 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -1,4 +1,4 @@ -import applyTemplate from './applyTemplate' +import { applyTemplate } from './template' import { defaultInfo, disableOptionKeys } from './constants' import { ensureIsArray } from './ensure' import { escape } from './escaping' From 6405724881932a6bc358f96ab125b8b49a98b043 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 12:17:42 +0100 Subject: [PATCH 46/58] refactor: move utils to utils folder --- src/browser.js | 2 +- src/client/batchUpdate.js | 2 +- src/client/refresh.js | 2 +- src/client/updateClientMetaInfo.js | 2 +- src/client/updaters/attribute.js | 2 +- src/client/updaters/tag.js | 2 +- src/server/generators/attribute.js | 2 +- src/server/generators/tag.js | 2 +- src/shared/escaping.js | 2 +- src/shared/getComponentOption.js | 2 +- src/shared/getMetaInfo.js | 2 +- src/shared/meta-helpers.js | 2 +- src/shared/mixin.js | 4 ++-- src/shared/nav-guards.js | 2 +- src/shared/options.js | 2 +- src/shared/template.js | 2 +- src/{shared => utils}/ensure.js | 0 src/{shared => utils}/is-type.js | 0 src/{shared => utils}/window.js | 0 test/unit/components.test.js | 2 +- test/unit/shared.test.js | 4 ++-- 21 files changed, 20 insertions(+), 20 deletions(-) rename src/{shared => utils}/ensure.js (100%) rename src/{shared => utils}/is-type.js (100%) rename src/{shared => utils}/window.js (100%) diff --git a/src/browser.js b/src/browser.js index 037de92..0be29cf 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,7 +1,7 @@ import { version } from '../package.json' import createMixin from './shared/mixin' import setOptions from './shared/options' -import { isUndefined } from './shared/is-type' +import { isUndefined } from './utils/is-type' import $meta from './client/$meta' import { hasMetaInfo } from './shared/meta-helpers' diff --git a/src/client/batchUpdate.js b/src/client/batchUpdate.js index 5d6e278..6e9a7a9 100644 --- a/src/client/batchUpdate.js +++ b/src/client/batchUpdate.js @@ -1,4 +1,4 @@ -import { hasGlobalWindow } from '../shared/window' +import { hasGlobalWindow } from '../utils/window' // fallback to timers if rAF not present const stopUpdate = (hasGlobalWindow ? window.cancelAnimationFrame : null) || clearTimeout diff --git a/src/client/refresh.js b/src/client/refresh.js index c5d1136..3d6020b 100644 --- a/src/client/refresh.js +++ b/src/client/refresh.js @@ -1,5 +1,5 @@ import getMetaInfo from '../shared/getMetaInfo' -import { isFunction } from '../shared/is-type' +import { isFunction } from '../utils/is-type' import { clientSequences } from '../shared/escaping' import updateClientMetaInfo from './updateClientMetaInfo' diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index 30c7800..19abe89 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -1,5 +1,5 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' -import { isArray } from '../shared/is-type' +import { isArray } from '../utils/is-type' import { updateAttribute, updateTag, updateTitle } from './updaters' function getTag(tags, tag) { diff --git a/src/client/updaters/attribute.js b/src/client/updaters/attribute.js index ec05073..446060f 100644 --- a/src/client/updaters/attribute.js +++ b/src/client/updaters/attribute.js @@ -1,5 +1,5 @@ import { booleanHtmlAttributes } from '../../shared/constants' -import { isArray } from '../../shared/is-type' +import { isArray } from '../../utils/is-type' /** * Updates the document's html tag attributes diff --git a/src/client/updaters/tag.js b/src/client/updaters/tag.js index 9739344..7c6bd84 100644 --- a/src/client/updaters/tag.js +++ b/src/client/updaters/tag.js @@ -1,4 +1,4 @@ -import { isUndefined } from '../../shared/is-type' +import { isUndefined } from '../../utils/is-type' /** * Updates meta tags inside and on the client. Borrowed from `react-helmet`: diff --git a/src/server/generators/attribute.js b/src/server/generators/attribute.js index 0ac406a..ff0933e 100644 --- a/src/server/generators/attribute.js +++ b/src/server/generators/attribute.js @@ -1,5 +1,5 @@ import { booleanHtmlAttributes } from '../../shared/constants' -import { isUndefined, isArray } from '../../shared/is-type' +import { isUndefined, isArray } from '../../utils/is-type' /** * Generates tag attributes for use on the server. diff --git a/src/server/generators/tag.js b/src/server/generators/tag.js index 2849ed2..e6ea38b 100644 --- a/src/server/generators/tag.js +++ b/src/server/generators/tag.js @@ -1,5 +1,5 @@ import { booleanHtmlAttributes, tagsWithoutEndTag, tagsWithInnerContent, tagAttributeAsInnerContent } from '../../shared/constants' -import { isUndefined } from '../../shared/is-type' +import { isUndefined } from '../../utils/is-type' /** * Generates meta, base, link, style, script, noscript tags for use on the server diff --git a/src/shared/escaping.js b/src/shared/escaping.js index f790b7f..ef0e4b0 100644 --- a/src/shared/escaping.js +++ b/src/shared/escaping.js @@ -1,5 +1,5 @@ +import { isString, isArray, isObject } from '../utils/is-type' import { metaInfoOptionKeys, disableOptionKeys } from './constants' -import { isString, isArray, isObject } from './is-type' export const serverSequences = [ [/&/g, '&'], diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index 7e46bec..f0d2d38 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -1,7 +1,7 @@ +import { isFunction, isObject } from '../utils/is-type' import { merge } from './merge' import { applyTemplate } from './template' import { inMetaInfoBranch } from './meta-helpers' -import { isFunction, isObject } from './is-type' /** * Returns the `opts.option` $option value of the given `opts.component`. diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 0ab9627..9bb78c3 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -1,6 +1,6 @@ +import { ensureIsArray } from '../utils/ensure' import { applyTemplate } from './template' import { defaultInfo, disableOptionKeys } from './constants' -import { ensureIsArray } from './ensure' import { escape } from './escaping' import getComponentOption from './getComponentOption' diff --git a/src/shared/meta-helpers.js b/src/shared/meta-helpers.js index 382e7f0..d1d7ac2 100644 --- a/src/shared/meta-helpers.js +++ b/src/shared/meta-helpers.js @@ -1,4 +1,4 @@ -import { isUndefined, isObject } from './is-type' +import { isUndefined, isObject } from '../utils/is-type' // Vue $root instance has a _vueMeta object property, otherwise its a boolean true export function hasMetaInfo(vm = this) { diff --git a/src/shared/mixin.js b/src/shared/mixin.js index ce9a544..03ee7ed 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -1,7 +1,7 @@ import triggerUpdate from '../client/triggerUpdate' +import { isUndefined, isFunction } from '../utils/is-type' +import { ensuredPush } from '../utils/ensure' import { hasMetaInfo } from './meta-helpers' -import { isUndefined, isFunction } from './is-type' -import { ensuredPush } from './ensure' import { addNavGuards } from './nav-guards' export default function createMixin(Vue, options) { diff --git a/src/shared/nav-guards.js b/src/shared/nav-guards.js index eee2200..b86c525 100644 --- a/src/shared/nav-guards.js +++ b/src/shared/nav-guards.js @@ -1,4 +1,4 @@ -import { isFunction } from './is-type' +import { isFunction } from '../utils/is-type' export function addNavGuards(vm) { // return when nav guards already added or no router exists diff --git a/src/shared/options.js b/src/shared/options.js index 5595808..da36d43 100644 --- a/src/shared/options.js +++ b/src/shared/options.js @@ -1,4 +1,4 @@ -import { isObject } from './is-type' +import { isObject } from '../utils/is-type' import { defaultOptions } from './constants' export default function setOptions(options) { diff --git a/src/shared/template.js b/src/shared/template.js index cb6fd16..1de07b0 100644 --- a/src/shared/template.js +++ b/src/shared/template.js @@ -1,4 +1,4 @@ -import { isUndefined, isFunction } from './is-type' +import { isUndefined, isFunction } from '../utils/is-type' export function applyTemplate({ component, metaTemplateKeyName, contentKeyName }, headObject, template, chunk) { if (isUndefined(template)) { diff --git a/src/shared/ensure.js b/src/utils/ensure.js similarity index 100% rename from src/shared/ensure.js rename to src/utils/ensure.js diff --git a/src/shared/is-type.js b/src/utils/is-type.js similarity index 100% rename from src/shared/is-type.js rename to src/utils/is-type.js diff --git a/src/shared/window.js b/src/utils/window.js similarity index 100% rename from src/shared/window.js rename to src/utils/window.js diff --git a/test/unit/components.test.js b/test/unit/components.test.js index 07b76e0..2a32113 100644 --- a/test/unit/components.test.js +++ b/test/unit/components.test.js @@ -9,7 +9,7 @@ import Changed from '../components/changed.vue' const getMetaInfo = component => _getMetaInfo(defaultOptions, component) -jest.mock('../../src/shared/window', () => ({ +jest.mock('../../src/utils/window', () => ({ hasGlobalWindow: false })) diff --git a/test/unit/shared.test.js b/test/unit/shared.test.js index 7351cee..60c25b9 100644 --- a/test/unit/shared.test.js +++ b/test/unit/shared.test.js @@ -1,10 +1,10 @@ /** * @jest-environment node */ -import { ensureIsArray } from '../../src/shared/ensure' import setOptions from '../../src/shared/options' -import { hasGlobalWindowFn } from '../../src/shared/window' import { defaultOptions } from '../../src/shared/constants' +import { ensureIsArray } from '../../src/utils/ensure' +import { hasGlobalWindowFn } from '../../src/utils/window' describe('shared', () => { test('ensureIsArray ensures var is array', () => { From 336f9b5284ddf2f6e10eb8e32202f2062eeaaf73 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 12:20:43 +0100 Subject: [PATCH 47/58] chore: update deps --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f22a381..f321b81 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "jest": "^24.3.1", "jest-environment-jsdom": "^24.3.1", "jest-environment-jsdom-global": "^1.1.1", - "jsdom": "^13.2.0", + "jsdom": "^14.0.0", "lodash": "^4.17.11", "puppeteer-core": "^1.13.0", "rimraf": "^2.6.3", diff --git a/yarn.lock b/yarn.lock index 86d6885..c9ea0fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4730,10 +4730,10 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsdom@^13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" - integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== +jsdom@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-14.0.0.tgz#c7f1441ebcc57902d08d5fb2f6ba2baf746da7c6" + integrity sha512-/VkyPmdtbwqpJSkwDx3YyJ3U1oawYNB/h5z8vTUZGAzjtu2OHTeFRfnJqyMHsJ5Cyes23trOmvUpM1GfHH1leA== dependencies: abab "^2.0.0" acorn "^6.0.4" From 214f52ebe87cf881fac2a55f81d6560f50896a01 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 12:28:29 +0100 Subject: [PATCH 48/58] test: clean e2e build folder before test --- package.json | 2 +- test/utils/build.js | 14 +++++++------- yarn.lock | 25 +++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index f321b81..3213ca5 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "eslint-plugin-standard": "^4.0.0", "eslint-plugin-vue": "^5.2.2", "esm": "^3.2.14", + "fs-extra": "^7.0.1", "is-wsl": "^1.1.0", "jest": "^24.3.1", "jest-environment-jsdom": "^24.3.1", @@ -90,7 +91,6 @@ "jsdom": "^14.0.0", "lodash": "^4.17.11", "puppeteer-core": "^1.13.0", - "rimraf": "^2.6.3", "rollup": "^1.6.0", "rollup-plugin-babel": "^4.3.2", "rollup-plugin-commonjs": "^9.2.1", diff --git a/test/utils/build.js b/test/utils/build.js index 85967ec..f7ab39d 100644 --- a/test/utils/build.js +++ b/test/utils/build.js @@ -1,14 +1,10 @@ -import fs from 'fs' +import fs from 'fs-extra' import path from 'path' -import { promisify } from 'util' import { template } from 'lodash' import webpack from 'webpack' import VueLoaderPlugin from 'vue-loader/lib/plugin' import { createRenderer } from 'vue-server-renderer' -const readFile = promisify(fs.readFile) -const writeFile = promisify(fs.writeFile) - const renderer = createRenderer() export function webpackRun(config) { @@ -38,6 +34,10 @@ export async function buildFixture(fixture, config = {}) { } const webpackConfig = createWebpackConfig(config) + // remove old files + await fs.remove(webpackConfig.output.path) + + // run webpack const webpackStats = await webpackRun(webpackConfig) // for test debugging @@ -46,7 +46,7 @@ export async function buildFixture(fixture, config = {}) { const vueApp = await import(path.resolve(fixturePath, 'server')).then(m => m.default || m) - const templateFile = await readFile(path.resolve(fixturePath, '..', 'app.template.html'), { encoding: 'utf8' }) + const templateFile = await fs.readFile(path.resolve(fixturePath, '..', 'app.template.html'), { encoding: 'utf8' }) const compiled = template(templateFile, { interpolate: /{{([\s\S]+?)}}/g }) const webpackAssets = webpackStats.assets.reduce((s, asset) => `${s}\n`, '') @@ -57,7 +57,7 @@ export async function buildFixture(fixture, config = {}) { const appFile = path.resolve(webpackStats.outputPath, 'index.html') const html = compiled({ app, webpackAssets, ...metaInfo }) - await writeFile(appFile, html) + await fs.writeFile(appFile, html) return { url: `file://${appFile}`, diff --git a/yarn.lock b/yarn.lock index c9ea0fe..769e161 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3478,6 +3478,15 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -3606,7 +3615,7 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== @@ -4816,6 +4825,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -6423,7 +6439,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -7363,6 +7379,11 @@ unist-util-visit@^1.1.0: dependencies: unist-util-visit-parents "^2.0.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" From 1c74f9fe57b7e113d65e70cd6b27462d74627cbd Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 12:29:53 +0100 Subject: [PATCH 49/58] chore: fix lint --- test/utils/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/utils/build.js b/test/utils/build.js index f7ab39d..8c9c51d 100644 --- a/test/utils/build.js +++ b/test/utils/build.js @@ -1,5 +1,5 @@ -import fs from 'fs-extra' import path from 'path' +import fs from 'fs-extra' import { template } from 'lodash' import webpack from 'webpack' import VueLoaderPlugin from 'vue-loader/lib/plugin' From 34c534be82462144998bc84ebcf1c81896115641 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 14:16:19 +0100 Subject: [PATCH 50/58] chore: add missing dev dep --- package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3213ca5..af9fd1f 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "jsdom": "^14.0.0", "lodash": "^4.17.11", "puppeteer-core": "^1.13.0", + "rimraf": "^2.6.3", "rollup": "^1.6.0", "rollup-plugin-babel": "^4.3.2", "rollup-plugin-commonjs": "^9.2.1", diff --git a/yarn.lock b/yarn.lock index 769e161..3277e1a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6439,7 +6439,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== From 93fb900a85ed7cd8250238485775ada4d538f9eb Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 14:49:00 +0100 Subject: [PATCH 51/58] refactor: let transpiler fix Array.isArray --- src/utils/is-type.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/utils/is-type.js b/src/utils/is-type.js index 220cab7..83dfeb3 100644 --- a/src/utils/is-type.js +++ b/src/utils/is-type.js @@ -1,12 +1,10 @@ /** * checks if passed argument is an array - * @param {any} arr - the object to check - * @return {Boolean} - true if `arr` is an array + * @param {any} arg - the object to check + * @return {Boolean} - true if `arg` is an array */ -export function isArray(arr) { - return Array.isArray - ? Array.isArray(arr) - : Object.prototype.toString.call(arr) === '[object Array]' +export function isArray(arg) { + return Array.isArray(arg) } export function isUndefined(arg) { From 93f021b75796c49566c440a7c812345f22ff7426 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 10 Mar 2019 21:54:54 +0100 Subject: [PATCH 52/58] fix: only add navguards when refreshOnceOnNav is false --- src/shared/mixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/mixin.js b/src/shared/mixin.js index 03ee7ed..362cc7b 100644 --- a/src/shared/mixin.js +++ b/src/shared/mixin.js @@ -94,7 +94,7 @@ export default function createMixin(Vue, options) { // add the navigation guards if they havent been added yet // if metaInfo is defined as a function, this does call the computed fn redundantly // but as Vue internally caches the results of computed props it shouldnt hurt performance - if (this.$options[options.keyName].afterNavigation) { + if (!options.refreshOnceOnNavigation && this.$options[options.keyName].afterNavigation) { addNavGuards(this) } From d717dbf4e1bdf903b87601a32a36da200f1c30cf Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 11 Mar 2019 17:15:25 +0100 Subject: [PATCH 53/58] fix: dont use object.assign/spread so we dont need a polyfill --- src/browser.js | 2 +- src/client/$meta.js | 3 ++- src/index.js | 2 +- src/server/$meta.js | 5 +++-- src/shared/getComponentOption.js | 12 +++++------- src/shared/options.js | 10 +++++++++- test/unit/getComponentOptions.test.js | 10 +++++----- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/browser.js b/src/browser.js index 0be29cf..73693f0 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,6 +1,6 @@ import { version } from '../package.json' import createMixin from './shared/mixin' -import setOptions from './shared/options' +import { setOptions } from './shared/options' import { isUndefined } from './utils/is-type' import $meta from './client/$meta' import { hasMetaInfo } from './shared/meta-helpers' diff --git a/src/client/$meta.js b/src/client/$meta.js index 874d06d..1d60d3f 100644 --- a/src/client/$meta.js +++ b/src/client/$meta.js @@ -1,3 +1,4 @@ +import { getOptions } from '../shared/options' import { pause, resume } from '../shared/pausing' import refresh from './refresh' @@ -12,7 +13,7 @@ export default function _$meta(options = {}) { */ return function $meta() { return { - getOptions: () => Object.freeze({ ...options }), + getOptions: () => getOptions(options), refresh: _refresh.bind(this), inject, pause: pause.bind(this), diff --git a/src/index.js b/src/index.js index 470fb7d..303c73d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import { version } from '../package.json' import createMixin from './shared/mixin' -import setOptions from './shared/options' +import { setOptions } from './shared/options' import $meta from './server/$meta' import { hasMetaInfo } from './shared/meta-helpers' diff --git a/src/server/$meta.js b/src/server/$meta.js index 5faffa0..42694a6 100644 --- a/src/server/$meta.js +++ b/src/server/$meta.js @@ -1,5 +1,6 @@ -import refresh from '../client/refresh' +import { getOptions } from '../shared/options' import { pause, resume } from '../shared/pausing' +import refresh from '../client/refresh' import inject from './inject' export default function _$meta(options = {}) { @@ -13,7 +14,7 @@ export default function _$meta(options = {}) { */ return function $meta() { return { - getOptions: () => Object.freeze({ ...options }), + getOptions: () => getOptions(options), refresh: _refresh.bind(this), inject: _inject.bind(this), pause: pause.bind(this), diff --git a/src/shared/getComponentOption.js b/src/shared/getComponentOption.js index f0d2d38..16485a0 100644 --- a/src/shared/getComponentOption.js +++ b/src/shared/getComponentOption.js @@ -1,4 +1,5 @@ import { isFunction, isObject } from '../utils/is-type' +import { findIndex } from '../utils/array' import { merge } from './merge' import { applyTemplate } from './template' import { inMetaInfoBranch } from './meta-helpers' @@ -17,8 +18,8 @@ import { inMetaInfoBranch } from './meta-helpers' * @param {Object} [result={}] - result so far * @return {Object} result - final aggregated result */ -export default function getComponentOption(options = {}, result = {}) { - const { component, keyName, metaTemplateKeyName, tagIDKeyName } = options +export default function getComponentOption(options = {}, component, result = {}) { + const { keyName, metaTemplateKeyName, tagIDKeyName } = options const { $options, $children } = component if (component._inactive) { @@ -52,10 +53,7 @@ export default function getComponentOption(options = {}, result = {}) { return } - result = getComponentOption({ - ...options, - component: childComponent - }, result) + result = getComponentOption(options, childComponent, result) }) } @@ -69,7 +67,7 @@ export default function getComponentOption(options = {}, result = {}) { // keep meta item if it doesnt has a vmid !metaItem.hasOwnProperty(tagIDKeyName) || // or if it's the first item in the array with this vmid - index === arr.findIndex(item => item[tagIDKeyName] === metaItem[tagIDKeyName]) + index === findIndex(arr, item => item[tagIDKeyName] === metaItem[tagIDKeyName]) ) }) } diff --git a/src/shared/options.js b/src/shared/options.js index da36d43..deb8079 100644 --- a/src/shared/options.js +++ b/src/shared/options.js @@ -1,7 +1,7 @@ import { isObject } from '../utils/is-type' import { defaultOptions } from './constants' -export default function setOptions(options) { +export function setOptions(options) { // combine options options = isObject(options) ? options : {} @@ -13,3 +13,11 @@ export default function setOptions(options) { return options } + +export function getOptions(options) { + const optionsCopy = {} + for (const key in options) { + optionsCopy[key] = options[key] + } + return optionsCopy +} diff --git a/test/unit/getComponentOptions.test.js b/test/unit/getComponentOptions.test.js index 7bdc895..5d482b7 100644 --- a/test/unit/getComponentOptions.test.js +++ b/test/unit/getComponentOptions.test.js @@ -9,13 +9,13 @@ describe('getComponentOption', () => { test('returns an empty object when no matching options are found', () => { const component = new Vue() - const mergedOption = getComponentOption({ component, keyName: 'noop' }) + const mergedOption = getComponentOption({ keyName: 'noop' }, component) expect(mergedOption).toEqual({}) }) test('fetches the given option from the given component', () => { const component = new Vue({ someOption: { foo: 'bar' } }) - const mergedOption = getComponentOption({ component, keyName: 'someOption' }) + const mergedOption = getComponentOption({ keyName: 'someOption' }, component) expect(mergedOption.foo).toBeDefined() expect(mergedOption.foo).toEqual('bar') }) @@ -27,7 +27,7 @@ describe('getComponentOption', () => { return { opt: this.$options.name } } }) - const mergedOption = getComponentOption({ component, keyName: 'someFunc' }) + const mergedOption = getComponentOption({ keyName: 'someFunc' }, component) // TODO: Should this be foobar or Foobar expect(mergedOption.opt).toBeDefined() expect(mergedOption.opt).toEqual('Foobar') @@ -44,7 +44,7 @@ describe('getComponentOption', () => { const wrapper = mount(component, { localVue }) - const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) + const mergedOption = getComponentOption({ keyName: 'foo' }, wrapper.vm) expect(mergedOption).toEqual({ bar: 'baz', fizz: 'buzz' }) }) @@ -111,7 +111,7 @@ describe('getComponentOption', () => { const wrapper = mount(component, { localVue }) - const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) + const mergedOption = getComponentOption({ keyName: 'foo' }, wrapper.vm) expect(mergedOption).toEqual({ bar: 'baz' }) expect(wrapper.vm.$children[0]._vueMeta).toBe(true) From 7cf4efd29031d55d22210e8638a8da08f136f880 Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 11 Mar 2019 17:17:13 +0100 Subject: [PATCH 54/58] test: add nav-guard tests for refresOnce false --- src/shared/nav-guards.js | 1 + test/unit/components.test.js | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/shared/nav-guards.js b/src/shared/nav-guards.js index b86c525..edbae81 100644 --- a/src/shared/nav-guards.js +++ b/src/shared/nav-guards.js @@ -3,6 +3,7 @@ import { isFunction } from '../utils/is-type' export function addNavGuards(vm) { // return when nav guards already added or no router exists if (vm.$root._vueMeta.navGuards || !vm.$root.$router) { + /* istanbul ignore next */ return } diff --git a/test/unit/components.test.js b/test/unit/components.test.js index 2a32113..f909afe 100644 --- a/test/unit/components.test.js +++ b/test/unit/components.test.js @@ -128,7 +128,7 @@ describe('client', () => { expect(context._uid).toBe(wrapper.vm._uid) }) - test('afterNavigation function is called', () => { + test('afterNavigation function is called with refreshOnce: true', () => { const Vue = loadVueMetaPlugin(false, { refreshOnceOnNavigation: true }) const afterNavigation = jest.fn() const component = Vue.component('nav-component', { @@ -160,4 +160,37 @@ describe('client', () => { guards.after() expect(afterNavigation).toHaveBeenCalled() }) + + test('afterNavigation function is called with refreshOnce: false', () => { + const Vue = loadVueMetaPlugin(false, { refreshOnceOnNavigation: false }) + const afterNavigation = jest.fn() + const component = Vue.component('nav-component', { + render: h => h('div'), + metaInfo: { afterNavigation } + }) + + const guards = {} + const wrapper = mount(component, { + localVue: Vue, + mocks: { + $router: { + beforeEach(fn) { + guards.before = fn + }, + afterEach(fn) { + guards.after = fn + } + } + } + }) + + expect(guards.before).toBeDefined() + expect(guards.after).toBeDefined() + + guards.before(null, null, () => {}) + expect(wrapper.vm.$root._vueMeta.paused).toBe(true) + + guards.after() + expect(afterNavigation).toHaveBeenCalled() + }) }) From 02c7beb6de4ad623206d935994b8d87da903394b Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 11 Mar 2019 17:18:37 +0100 Subject: [PATCH 55/58] chore: use buble again for rollup and also replace --- package.json | 5 +++-- scripts/rollup.config.js | 36 +++++++++++++++++++------------ yarn.lock | 46 +++++++++++++++++++++++++++++++--------- 3 files changed, 61 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index af9fd1f..6ef760a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "typings": "types/index.d.ts", "scripts": { "build": "yarn build:other && yarn build:es", - "build:es": "rimraf es && babel src --env-name es --out-dir es --ignore 'src/browser.js'", + "build:es": "rimraf es && babel src --env-name es --out-dir es", "build:other": "rimraf lib && rollup -c scripts/rollup.config.js", "coverage": "codecov", "predeploy": "git checkout master && git pull -r", @@ -93,10 +93,11 @@ "puppeteer-core": "^1.13.0", "rimraf": "^2.6.3", "rollup": "^1.6.0", - "rollup-plugin-babel": "^4.3.2", + "rollup-plugin-buble": "^0.19.6", "rollup-plugin-commonjs": "^9.2.1", "rollup-plugin-json": "^3.1.0", "rollup-plugin-node-resolve": "^4.0.1", + "rollup-plugin-replace": "^2.1.0", "rollup-plugin-terser": "^4.0.4", "update-section": "^0.3.3", "vue": "^2.6.8", diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index 2d6243f..7176a11 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js @@ -1,7 +1,8 @@ import commonjs from 'rollup-plugin-commonjs' import nodeResolve from 'rollup-plugin-node-resolve' import json from 'rollup-plugin-json' -import babel from 'rollup-plugin-babel' +import buble from 'rollup-plugin-buble' +import replace from 'rollup-plugin-replace' import { terser } from 'rollup-plugin-terser' import defaultsDeep from 'lodash/defaultsDeep' @@ -19,6 +20,21 @@ function rollupConfig({ ...config }) { + const replaceConfig = { + exclude: 'node_modules/**', + delimiters: ['', ''], + values: { + // replaceConfig needs to have some values + 'const polyfill = process.env.NODE_ENV === \'test\'': 'const polyfill = false', + } + } + + if (!config.output.format || config.output.format === 'umd') { + replaceConfig.values = { + 'const polyfill = process.env.NODE_ENV === \'test\'': 'const polyfill = true', + } + } + return defaultsDeep({}, config, { input: 'src/browser.js', output: { @@ -29,28 +45,20 @@ function rollupConfig({ }, plugins: [ json(), - nodeResolve() + nodeResolve(), + replace(replaceConfig) ].concat(plugins), }) } -const babelConfig = { - runtimeHelpers: true, - exclude : 'node_modules/**', - presets: [['@nuxt/babel-preset-app', { - // useBuiltIns: 'usage', - // target: { ie: 9 } - }]] -} - export default [ rollupConfig({ output: { file: pkg.web, }, plugins: [ - babel(babelConfig), - commonjs() + commonjs(), + buble() ] }), rollupConfig({ @@ -58,8 +66,8 @@ export default [ file: pkg.web.replace('.js', '.min.js'), }, plugins: [ - babel(babelConfig), commonjs(), + buble(), terser() ] }), diff --git a/yarn.lock b/yarn.lock index 3277e1a..4ea1c1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2016,6 +2016,18 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buble@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" + integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== + dependencies: + chalk "^2.4.1" + magic-string "^0.25.1" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.2.0" + vlq "^1.0.0" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2118,7 +2130,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5181,7 +5193,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5593,7 +5605,7 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -6454,13 +6466,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-babel@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" - integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== +rollup-plugin-buble@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e" + integrity sha512-El5Fut4/wEO17ZN/n9BZvqd7DXXB2WbJr/DKvr89LXChC/cHllE0XwiUDeAalrTkgr0WrnyLDTCQvEv+cGywWQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.3.0" + buble "^0.19.6" + rollup-pluginutils "^2.3.3" rollup-plugin-commonjs@^9.2.1: version "9.2.1" @@ -6488,6 +6500,15 @@ rollup-plugin-node-resolve@^4.0.1: is-module "^1.0.0" resolve "^1.10.0" +rollup-plugin-replace@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz#f9c07a4a89a2f8be912ee54b3f0f68d91e9ed0ae" + integrity sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ== + dependencies: + magic-string "^0.25.1" + minimatch "^3.0.2" + rollup-pluginutils "^2.0.1" + rollup-plugin-terser@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz#6f661ef284fa7c27963d242601691dc3d23f994e" @@ -6498,7 +6519,7 @@ rollup-plugin-terser@^4.0.4: serialize-javascript "^1.6.1" terser "^3.14.1" -rollup-pluginutils@^2.3.0: +rollup-pluginutils@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== @@ -7510,6 +7531,11 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" +vlq@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" + integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" From d38f81e0a9ecbe658d25a88cc8a3791c43e706c0 Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 11 Mar 2019 17:19:55 +0100 Subject: [PATCH 56/58] fix: implement simply array polyfills (fixes #328) --- src/client/updateClientMetaInfo.js | 5 ++- src/client/updaters/attribute.js | 9 +++-- src/client/updaters/tag.js | 17 ++++---- src/shared/escaping.js | 7 ++-- src/shared/getMetaInfo.js | 2 +- src/shared/merge.js | 3 +- src/utils/array.js | 45 +++++++++++++++++++++ test/unit/shared.test.js | 27 +------------ test/unit/utils.test.js | 63 ++++++++++++++++++++++++++++++ 9 files changed, 133 insertions(+), 45 deletions(-) create mode 100644 src/utils/array.js create mode 100644 test/unit/utils.test.js diff --git a/src/client/updateClientMetaInfo.js b/src/client/updateClientMetaInfo.js index 19abe89..9f15607 100644 --- a/src/client/updateClientMetaInfo.js +++ b/src/client/updateClientMetaInfo.js @@ -1,5 +1,6 @@ import { metaInfoOptionKeys, metaInfoAttributeKeys } from '../shared/constants' import { isArray } from '../utils/is-type' +import { includes } from '../utils/array' import { updateAttribute, updateTag, updateTitle } from './updaters' function getTag(tags, tag) { @@ -36,7 +37,7 @@ export default function updateClientMetaInfo(options = {}, newInfo) { for (const type in newInfo) { // ignore these - if (metaInfoOptionKeys.includes(type)) { + if (includes(metaInfoOptionKeys, type)) { continue } @@ -46,7 +47,7 @@ export default function updateClientMetaInfo(options = {}, newInfo) { continue } - if (metaInfoAttributeKeys.includes(type)) { + if (includes(metaInfoAttributeKeys, type)) { const tagName = type.substr(0, 4) updateAttribute(options, newInfo[type], getTag(tags, tagName)) continue diff --git a/src/client/updaters/attribute.js b/src/client/updaters/attribute.js index 446060f..cb68f70 100644 --- a/src/client/updaters/attribute.js +++ b/src/client/updaters/attribute.js @@ -1,4 +1,5 @@ import { booleanHtmlAttributes } from '../../shared/constants' +import { toArray, includes } from '../../utils/array' import { isArray } from '../../utils/is-type' /** @@ -10,18 +11,18 @@ import { isArray } from '../../utils/is-type' export default function updateAttribute({ attribute } = {}, attrs, tag) { const vueMetaAttrString = tag.getAttribute(attribute) const vueMetaAttrs = vueMetaAttrString ? vueMetaAttrString.split(',') : [] - const toRemove = Array.from(vueMetaAttrs) + const toRemove = toArray(vueMetaAttrs) const keepIndexes = [] for (const attr in attrs) { if (attrs.hasOwnProperty(attr)) { - const value = booleanHtmlAttributes.includes(attr) + const value = includes(booleanHtmlAttributes, attr) ? '' : isArray(attrs[attr]) ? attrs[attr].join(' ') : attrs[attr] tag.setAttribute(attr, value || '') - if (!vueMetaAttrs.includes(attr)) { + if (!includes(vueMetaAttrs, attr)) { vueMetaAttrs.push(attr) } @@ -31,7 +32,7 @@ export default function updateAttribute({ attribute } = {}, attrs, tag) { } const removedAttributesCount = toRemove - .filter((el, index) => !keepIndexes.includes(index)) + .filter((el, index) => !includes(keepIndexes, index)) .reduce((acc, attr) => { tag.removeAttribute(attr) return acc + 1 diff --git a/src/client/updaters/tag.js b/src/client/updaters/tag.js index 7c6bd84..09f645d 100644 --- a/src/client/updaters/tag.js +++ b/src/client/updaters/tag.js @@ -1,4 +1,5 @@ import { isUndefined } from '../../utils/is-type' +import { toArray, includes } from '../../utils/array' /** * Updates meta tags inside and on the client. Borrowed from `react-helmet`: @@ -9,8 +10,9 @@ import { isUndefined } from '../../utils/is-type' * @return {Object} - a representation of what tags changed */ export default function updateTag({ attribute, tagIDKeyName } = {}, type, tags, headTag, bodyTag) { - const oldHeadTags = Array.from(headTag.querySelectorAll(`${type}[${attribute}]`)) - const oldBodyTags = Array.from(bodyTag.querySelectorAll(`${type}[${attribute}][data-body="true"]`)) + const oldHeadTags = toArray(headTag.querySelectorAll(`${type}[${attribute}]`)) + const oldBodyTags = toArray(bodyTag.querySelectorAll(`${type}[${attribute}][data-body="true"]`)) + const dataAttributes = [tagIDKeyName, 'body'] const newTags = [] if (tags.length > 1) { @@ -20,7 +22,7 @@ export default function updateTag({ attribute, tagIDKeyName } = {}, type, tags, const found = [] tags = tags.filter((x) => { const k = JSON.stringify(x) - const res = !found.includes(k) + const res = !includes(found, k) found.push(k) return res }) @@ -44,13 +46,12 @@ export default function updateTag({ attribute, tagIDKeyName } = {}, type, tags, } else { newElement.appendChild(document.createTextNode(tag.cssText)) } - } else if ([tagIDKeyName, 'body'].includes(attr)) { - const _attr = `data-${attr}` + } else { + const _attr = includes(dataAttributes, attr) + ? `data-${attr}` + : attr const value = isUndefined(tag[attr]) ? '' : tag[attr] newElement.setAttribute(_attr, value) - } else { - const value = isUndefined(tag[attr]) ? '' : tag[attr] - newElement.setAttribute(attr, value) } } } diff --git a/src/shared/escaping.js b/src/shared/escaping.js index ef0e4b0..fe28a28 100644 --- a/src/shared/escaping.js +++ b/src/shared/escaping.js @@ -1,4 +1,5 @@ import { isString, isArray, isObject } from '../utils/is-type' +import { includes } from '../utils/array' import { metaInfoOptionKeys, disableOptionKeys } from './constants' export const serverSequences = [ @@ -27,13 +28,13 @@ export function escape(info, options, escapeOptions) { const value = info[key] // no need to escape configuration options - if (metaInfoOptionKeys.includes(key)) { + if (includes(metaInfoOptionKeys, key)) { escaped[key] = value continue } let [ disableKey ] = disableOptionKeys - if (escapeOptions[disableKey] && escapeOptions[disableKey].includes(key)) { + if (escapeOptions[disableKey] && includes(escapeOptions[disableKey], key)) { // this info[key] doesnt need to escaped if the option is listed in __dangerouslyDisableSanitizers escaped[key] = value continue @@ -44,7 +45,7 @@ export function escape(info, options, escapeOptions) { disableKey = disableOptionKeys[1] // keys which are listed in __dangerouslyDisableSanitizersByTagID for the current vmid do not need to be escaped - if (escapeOptions[disableKey] && escapeOptions[disableKey][tagId] && escapeOptions[disableKey][tagId].includes(key)) { + if (escapeOptions[disableKey] && escapeOptions[disableKey][tagId] && includes(escapeOptions[disableKey][tagId], key)) { escaped[key] = value continue } diff --git a/src/shared/getMetaInfo.js b/src/shared/getMetaInfo.js index 9bb78c3..a94d79a 100644 --- a/src/shared/getMetaInfo.js +++ b/src/shared/getMetaInfo.js @@ -13,7 +13,7 @@ import getComponentOption from './getComponentOption' */ export default function getMetaInfo(options = {}, component, escapeSequences = []) { // collect & aggregate all metaInfo $options - let info = getComponentOption({ ...options, component }, defaultInfo) + let info = getComponentOption(options, component, defaultInfo) // Remove all "template" tags from meta diff --git a/src/shared/merge.js b/src/shared/merge.js index e33c0a2..b7b5349 100644 --- a/src/shared/merge.js +++ b/src/shared/merge.js @@ -1,4 +1,5 @@ import deepmerge from 'deepmerge' +import { findIndex } from '../utils/array' import { applyTemplate } from './template' import { metaInfoAttributeKeys } from './constants' @@ -15,7 +16,7 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte return } - const sourceIndex = source.findIndex(item => item[tagIDKeyName] === targetItem[tagIDKeyName]) + const sourceIndex = findIndex(source, item => item[tagIDKeyName] === targetItem[tagIDKeyName]) const sourceItem = source[sourceIndex] // source doesnt contain any duplicate vmid's, we can keep targetItem diff --git a/src/utils/array.js b/src/utils/array.js new file mode 100644 index 0000000..7ac529c --- /dev/null +++ b/src/utils/array.js @@ -0,0 +1,45 @@ +/* + * To reduce build size, this file provides simple polyfills without + * overly excessive type checking and without modifying + * the global Array.prototype + * The polyfills are automatically removed in the commonjs build + * Also, only files in client/ & shared/ should use these functions + * files in server/ still use normal js function + */ + +// this const is replaced by rollup to true for umd builds +// which means the polyfills are removed for other build formats +const polyfill = process.env.NODE_ENV === 'test' + +export function findIndex(array, predicate) { + if (polyfill && !Array.prototype.findIndex) { + // idx needs to be a Number, for..in returns string + for (let idx = 0; idx < array.length; idx++) { + if (predicate.call(arguments[2], array[idx], idx, array)) { + return idx + } + } + return -1 + } + return array.findIndex(predicate, arguments[2]) +} + +export function toArray(arg) { + if (polyfill && !Array.from) { + return Array.prototype.slice.call(arg) + } + return Array.from(arg) +} + +export function includes(array, value) { + if (polyfill && !Array.prototype.includes) { + for (const idx in array) { + if (array[idx] === value) { + return true + } + } + + return false + } + return array.includes(value) +} diff --git a/test/unit/shared.test.js b/test/unit/shared.test.js index 60c25b9..118a11a 100644 --- a/test/unit/shared.test.js +++ b/test/unit/shared.test.js @@ -1,32 +1,7 @@ -/** - * @jest-environment node - */ -import setOptions from '../../src/shared/options' +import { setOptions } from '../../src/shared/options' import { defaultOptions } from '../../src/shared/constants' -import { ensureIsArray } from '../../src/utils/ensure' -import { hasGlobalWindowFn } from '../../src/utils/window' describe('shared', () => { - test('ensureIsArray ensures var is array', () => { - let a = { p: 1 } - expect(ensureIsArray(a)).toEqual([]) - - a = 1 - expect(ensureIsArray(a)).toEqual([]) - - a = [1] - expect(ensureIsArray(a)).toBe(a) - }) - - test('ensureIsArray ensures obj prop is array', () => { - const a = { p: 1 } - expect(ensureIsArray(a, 'p')).toEqual({ p: [] }) - }) - - test('no error when window is not defined', () => { - expect(hasGlobalWindowFn()).toBe(false) - }) - test('can use setOptions', () => { const keyName = 'MY KEY' let options = { keyName } diff --git a/test/unit/utils.test.js b/test/unit/utils.test.js new file mode 100644 index 0000000..8f897e3 --- /dev/null +++ b/test/unit/utils.test.js @@ -0,0 +1,63 @@ +/** + * @jest-environment node + */ +import { findIndex, includes, toArray } from '../../src/utils/array' +import { ensureIsArray } from '../../src/utils/ensure' +import { hasGlobalWindowFn } from '../../src/utils/window' + +describe('shared', () => { + afterEach(() => jest.restoreAllMocks()) + + test('ensureIsArray ensures var is array', () => { + let a = { p: 1 } + expect(ensureIsArray(a)).toEqual([]) + + a = 1 + expect(ensureIsArray(a)).toEqual([]) + + a = [1] + expect(ensureIsArray(a)).toBe(a) + }) + + test('ensureIsArray ensures obj prop is array', () => { + const a = { p: 1 } + expect(ensureIsArray(a, 'p')).toEqual({ p: [] }) + }) + + test('no error when window is not defined', () => { + expect(hasGlobalWindowFn()).toBe(false) + }) + + /* eslint-disable no-extend-native */ + test('findIndex polyfill', () => { + const _findIndex = Array.prototype.findIndex + Array.prototype.findIndex = false + + const arr = [1, 2, 3] + expect(findIndex(arr, v => v === 2)).toBe(1) + expect(findIndex(arr, v => v === 4)).toBe(-1) + + Array.prototype.findIndex = _findIndex + }) + + test('includes polyfill', () => { + const _includes = Array.prototype.includes + Array.prototype.includes = false + + const arr = [1, 2, 3] + expect(includes(arr, 2)).toBe(true) + expect(includes(arr, 4)).toBe(false) + + Array.prototype.includes = _includes + }) + + test('from/toArray polyfill', () => { + const _from = Array.from + Array.from = false + + expect(toArray('foo')).toEqual(['f', 'o', 'o']) + + Array.from = _from + }) + /* eslint-enable no-extend-native */ +}) From 840d8ea02b83ae7bfe82f465bcd5b956c97b0954 Mon Sep 17 00:00:00 2001 From: pimlie Date: Mon, 11 Mar 2019 17:20:46 +0100 Subject: [PATCH 57/58] chore: update deps --- package.json | 6 +- yarn.lock | 350 ++++++++++++++++++++++++++------------------------- 2 files changed, 181 insertions(+), 175 deletions(-) diff --git a/package.json b/package.json index 6ef760a..0dcbcf0 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@vue/test-utils": "^1.0.0-beta.29", "babel-core": "^7.0.0-bridge", "babel-eslint": "^10.0.1", - "babel-jest": "^24.3.1", + "babel-jest": "^24.4.0", "babel-loader": "^8.0.5", "babel-plugin-dynamic-import-node": "^2.2.0", "codecov": "^3.2.0", @@ -85,8 +85,8 @@ "esm": "^3.2.14", "fs-extra": "^7.0.1", "is-wsl": "^1.1.0", - "jest": "^24.3.1", - "jest-environment-jsdom": "^24.3.1", + "jest": "^24.4.0", + "jest-environment-jsdom": "^24.4.0", "jest-environment-jsdom-global": "^1.1.1", "jsdom": "^14.0.0", "lodash": "^4.17.11", diff --git a/yarn.lock b/yarn.lock index 4ea1c1c..a23cae6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -899,31 +899,31 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/core@^24.3.1": - version "24.3.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.3.1.tgz#9811596d9fcc6dbb3d4062c67e4c4867bc061585" - integrity sha512-orucOIBKfXgm1IJirtPT0ToprqDVGYKUNJKNc9a6v1Lww6qLPq+xj5OfxyhpJb2rWOgzEkATW1bfZzg3oqV70w== +"@jest/core@^24.4.0": + version "24.4.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.4.0.tgz#ec53510f19dde5aaf4e9e28a3c3426fc0f2a41d6" + integrity sha512-S48krBwigVm3DwLSEtMiiWnWz+G3uGii192LIZYbWULYSOCwQeG7hWb6a3yWBLYuZnATh3W6QMxs7whS0/hQMQ== dependencies: "@jest/console" "^24.3.0" - "@jest/reporters" "^24.3.1" + "@jest/reporters" "^24.4.0" "@jest/test-result" "^24.3.0" - "@jest/transform" "^24.3.1" + "@jest/transform" "^24.4.0" "@jest/types" "^24.3.0" ansi-escapes "^3.0.0" chalk "^2.0.1" exit "^0.1.2" graceful-fs "^4.1.15" jest-changed-files "^24.3.0" - jest-config "^24.3.1" - jest-haste-map "^24.3.1" + jest-config "^24.4.0" + jest-haste-map "^24.4.0" jest-message-util "^24.3.0" jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.3.1" - jest-runner "^24.3.1" - jest-runtime "^24.3.1" - jest-snapshot "^24.3.1" + jest-resolve-dependencies "^24.4.0" + jest-runner "^24.4.0" + jest-runtime "^24.4.0" + jest-snapshot "^24.4.0" jest-util "^24.3.0" - jest-validate "^24.3.1" + jest-validate "^24.4.0" jest-watcher "^24.3.0" micromatch "^3.1.10" p-each-series "^1.0.0" @@ -932,13 +932,13 @@ rimraf "^2.5.4" strip-ansi "^5.0.0" -"@jest/environment@^24.3.1": - version "24.3.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.3.1.tgz#1fbda3ec8fb8ffbaee665d314da91d662227e11e" - integrity sha512-M8bqEkQqPwZVhMMFMqqCnzqIZtuM5vDMfFQ9ZvnEfRT+2T1zTA4UAOH/V4HagEi6S3BCd/mdxFdYmPgXf7GKCA== +"@jest/environment@^24.4.0": + version "24.4.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.4.0.tgz#552f0629a9cc2bd015f370b3af77222f069f158f" + integrity sha512-YuPsWWwTS4wkMsvCNXvBZPZQGOVtsVyle9OzHIAdWvV+B9qjs0vA85Il1+FSG0b765VqznPvpfIe1wKoIFOleQ== dependencies: "@jest/fake-timers" "^24.3.0" - "@jest/transform" "^24.3.1" + "@jest/transform" "^24.4.0" "@jest/types" "^24.3.0" "@types/node" "*" jest-mock "^24.3.0" @@ -953,14 +953,14 @@ jest-message-util "^24.3.0" jest-mock "^24.3.0" -"@jest/reporters@^24.3.1": - version "24.3.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.3.1.tgz#68e4abc8d4233acd0dd87287f3bd270d81066248" - integrity sha512-jEIDJcvk20ReUW1Iqb+prlAcFV+kfFhQ/01poCq8X9As7/l/2y1GqVwJ3+6SaPTZuCXh0d0LVDy86zDAa8zlVA== +"@jest/reporters@^24.4.0": + version "24.4.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.4.0.tgz#e1e6ca29593f36088db76a380f04e93e71f09607" + integrity sha512-teO0to16UaYJTLWXCWCa1kBPx/PY4dw2/8I2LPIzk5mNN5km8jyx5jz8D1Yy0nqascVtbpG4+VnSt7E16cnrcw== dependencies: - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/test-result" "^24.3.0" - "@jest/transform" "^24.3.1" + "@jest/transform" "^24.4.0" "@jest/types" "^24.3.0" chalk "^2.0.1" exit "^0.1.2" @@ -969,11 +969,11 @@ istanbul-lib-coverage "^2.0.2" istanbul-lib-instrument "^3.0.1" istanbul-lib-source-maps "^3.0.1" - jest-haste-map "^24.3.1" - jest-resolve "^24.3.1" - jest-runtime "^24.3.1" + jest-haste-map "^24.4.0" + jest-resolve "^24.4.0" + jest-runtime "^24.4.0" jest-util "^24.3.0" - jest-worker "^24.3.1" + jest-worker "^24.4.0" node-notifier "^5.2.1" slash "^2.0.0" source-map "^0.6.0" @@ -997,10 +997,10 @@ "@jest/types" "^24.3.0" "@types/istanbul-lib-coverage" "^1.1.0" -"@jest/transform@^24.3.1": - version "24.3.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.3.1.tgz#ce9e1329eb5e640f493bcd5c8eb9970770959bfc" - integrity sha512-PpjylI5goT4Si69+qUjEeHuKjex0LjjrqJzrMYzlOZn/+SCumGKuGC0UQFeEPThyGsFvWH1Q4gj0R66eOHnIpw== +"@jest/transform@^24.4.0": + version "24.4.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.4.0.tgz#2f6b4b5dc7f7673d8fec8bf1040d4236c58c7a60" + integrity sha512-Y928pU6bqWqMlGugRiaWOresox/CIrRuBVdPnYiSoIcRtwNKZujCOkzIzRalcTTxm77wuLjNihcq8OWfdm+Dxg== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^24.3.0" @@ -1009,7 +1009,7 @@ convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.1.15" - jest-haste-map "^24.3.1" + jest-haste-map "^24.4.0" jest-regex-util "^24.3.0" jest-util "^24.3.0" micromatch "^3.1.10" @@ -1698,12 +1698,12 @@ babel-eslint@^10.0.1: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-jest@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.3.1.tgz#168468a37e90426520c5293da4f55e1a512063b0" - integrity sha512-6KaXyUevY0KAxD5Ba+EBhyfwvc+R2f7JV7BpBZ5T8yJGgj0M1hYDfRhDq35oD5MzprMf/ggT81nEuLtMyxfDIg== +babel-jest@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.4.0.tgz#6c4029f52175d4f8f138cdad42d2a02fe34ddb03" + integrity sha512-wh23nKbWZf9SeO0GNOQc2QDqaMXOmbaI2Hvbcl6FGqg9zqHwr9Jy0e0ZqsXiJ2Cv8YKqD+eOE2wAGVhq4nzWDQ== dependencies: - "@jest/transform" "^24.3.1" + "@jest/transform" "^24.4.0" "@jest/types" "^24.3.0" "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" @@ -3204,15 +3204,15 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.3.1.tgz#7c42507da231a91a8099d065bc8dc9322dc85fc0" - integrity sha512-xnmobSlaqhg4FKqjb5REk4AobQzFMJoctDdREKfSGqrtzRfCWYbfqt3WmikAvQz/J8mCNQhORgYdEjPMJbMQPQ== +expect@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.4.0.tgz#df52da212bc06831c38fb51a53106ae7a0e7aaf2" + integrity sha512-p3QGkNhxN4WXih12lOx4vuhJpl/ZFD1AWu9lWh8IXNZD10ySSOzDN4Io8zuEOWvzylFkDpU9oQ/KRTZ/Bs9/ag== dependencies: "@jest/types" "^24.3.0" ansi-styles "^3.2.0" jest-get-type "^24.3.0" - jest-matcher-utils "^24.3.1" + jest-matcher-utils "^24.4.0" jest-message-util "^24.3.0" jest-regex-util "^24.3.0" @@ -4332,56 +4332,56 @@ jest-changed-files@^24.3.0: execa "^1.0.0" throat "^4.0.0" -jest-cli@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.3.1.tgz#52e4ae5f11044b41e06ca39fc7a7302fbbcb1661" - integrity sha512-HdwMgigvDQdlWX7gwM2QMkJJRqSk7tTYKq7kVplblK28RarqquJMWV/lOCN8CukuG9u3DZTeXpCDXR7kpGfB3w== +jest-cli@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.4.0.tgz#3297c2f817611b86ce1250fb5703a28bca201034" + integrity sha512-QQOgpRpXoDqpxhEux/AGyI9XJzVOJ5ppz4Kb9MlA5PvzsyYD3DRk/uiyJgmvBhCCXvcA1CKEl/g/LH0kbKg10Q== dependencies: - "@jest/core" "^24.3.1" + "@jest/core" "^24.4.0" "@jest/test-result" "^24.3.0" "@jest/types" "^24.3.0" chalk "^2.0.1" exit "^0.1.2" import-local "^2.0.0" is-ci "^2.0.0" - jest-config "^24.3.1" + jest-config "^24.4.0" jest-util "^24.3.0" - jest-validate "^24.3.1" + jest-validate "^24.4.0" prompts "^2.0.1" realpath-native "^1.1.0" yargs "^12.0.2" -jest-config@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.3.1.tgz#271aff2d3aeabf1ff92512024eeca3323cd31a07" - integrity sha512-ujHQywsM//vKFvJwEC02KNZgKAGOzGz1bFPezmTQtuj8XdfsAVq8p6N/dw4yodXV11gSf6TJ075i4ehM+mKatA== +jest-config@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.4.0.tgz#07bf14d43c02aec3bd384121a165a6ee9d8c5ed1" + integrity sha512-H2R6qkfUPck+OlIWsjeShecbqYiEDUvzZfsfgQkx6LVakAORy7wZFptONVF+Qz7iO9Bl6x35cBA2A1o1W+ctDg== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^24.3.0" - babel-jest "^24.3.1" + babel-jest "^24.4.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^24.3.1" - jest-environment-node "^24.3.1" + jest-environment-jsdom "^24.4.0" + jest-environment-node "^24.4.0" jest-get-type "^24.3.0" - jest-jasmine2 "^24.3.1" + jest-jasmine2 "^24.4.0" jest-regex-util "^24.3.0" - jest-resolve "^24.3.1" + jest-resolve "^24.4.0" jest-util "^24.3.0" - jest-validate "^24.3.1" + jest-validate "^24.4.0" micromatch "^3.1.10" - pretty-format "^24.3.1" + pretty-format "^24.4.0" realpath-native "^1.1.0" -jest-diff@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.3.1.tgz#87952e5ea1548567da91df398fa7bf7977d3f96a" - integrity sha512-YRVzDguyzShP3Pb9wP/ykBkV7Z+O4wltrMZ2P4LBtNxrHNpxwI2DECrpD9XevxWubRy5jcE8sSkxyX3bS7W+rA== +jest-diff@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.4.0.tgz#106cd0491cb32da31debbea3e21f094d358dc7d9" + integrity sha512-2GdKN8GOledWkMGXcRCSr3KVTrjZU6vxbfZzwzRlM7gSG8HNIx+eoFXauQNQ5j7q73fZCoPnyS5/uOcXQ3wkWg== dependencies: chalk "^2.0.1" diff-sequences "^24.3.0" jest-get-type "^24.3.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" jest-docblock@^24.3.0: version "24.3.0" @@ -4390,40 +4390,40 @@ jest-docblock@^24.3.0: dependencies: detect-newline "^2.1.0" -jest-each@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.3.1.tgz#ed8fe8b9f92a835a6625ca8c7ee06bc904440316" - integrity sha512-GTi+nxDaWwSgOPLiiqb/p4LURy0mv3usoqsA2eoTYSmRsLgjgZ6VUyRpUBH5JY9EMBx33suNFXk0iyUm29WRpw== +jest-each@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.4.0.tgz#2a0e06d957b31ec9ca4679ed9d4a15ac48299d6b" + integrity sha512-W98N4Ep6BBdCanynA9jdJDUaPvZ9OAnIHNA8mK6kbH7JYdnNQKGvp5ivl/PjCTqiI2wnHKYRI06EjsfOqT8ZFQ== dependencies: "@jest/types" "^24.3.0" chalk "^2.0.1" jest-get-type "^24.3.0" jest-util "^24.3.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" jest-environment-jsdom-global@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.1.1.tgz#c0b5fd969ace23137fd9c4a3b8e3367a54b4ed15" integrity sha512-7+M6yMM6vpHfaR9ymrjobx1kG3TQyMpSu9yH7bz9bVHsBMUEdiBOmf6qVvyi8z09delLmHuPQpUFYm5SIGSzhQ== -jest-environment-jsdom@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.3.1.tgz#49826bcf12fb3e38895f1e2aaeb52bde603cc2e4" - integrity sha512-rz2OSYJiQerDqWDwjisqRwhVNpwkqFXdtyMzEuJ47Ip9NRpRQ+qy7/+zFujPUy/Z+zjWRO5seHLB/dOD4VpEVg== +jest-environment-jsdom@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.4.0.tgz#86e1c494abb1ab58b7aa5791bdb4fa96d709b57b" + integrity sha512-7irZXPZLQF79r97uH9dG9mm76H+27CMSH8TEcF70x6pY4xFJipjjluiXRw1C2lh0o6FrbSQKpkSXncdOw+hY0A== dependencies: - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/fake-timers" "^24.3.0" "@jest/types" "^24.3.0" jest-mock "^24.3.0" jest-util "^24.3.0" jsdom "^11.5.1" -jest-environment-node@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.3.1.tgz#333d864c569b27658a96bb3b10e02e7172125415" - integrity sha512-Xy+/yFem/yUs9OkzbcawQT237vwDjBhAVLjac1KYAMYVjGb0Vb/Ovw4g61PunVdrEIpfcXNtRUltM4+9c7lARQ== +jest-environment-node@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.4.0.tgz#c10cd617ccc73c1936d46a925e9dcade8709d044" + integrity sha512-ed1TjncsHO+Ird4BDrWwqsMQQM+bg9AFHj0AcCumgzfc+Us6ywWUQUg+5UbKLKnu1EWp5mK7mmbLxLqdz2kc9w== dependencies: - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/fake-timers" "^24.3.0" "@jest/types" "^24.3.0" jest-mock "^24.3.0" @@ -4434,59 +4434,59 @@ jest-get-type@^24.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== -jest-haste-map@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.3.1.tgz#b4a66dbe1e6bc45afb9cd19c083bff81cdd535a1" - integrity sha512-OTMQle+astr1lWKi62Ccmk2YWn6OtUoU/8JpJdg8zdsnpFIry/k0S4sQ4nWocdM07PFdvqcthWc78CkCE6sXvA== +jest-haste-map@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.4.0.tgz#a969ecab8a9521115c5fecec82366d66433c851b" + integrity sha512-X20xhhPBjbz4UVTN9BMBjlFUM/gmi1TmYWWxZUgLg4fZXMIve4RUdA/nS/QgC76ouGgvwb9z52KwZ85bmNx55A== dependencies: "@jest/types" "^24.3.0" fb-watchman "^2.0.0" graceful-fs "^4.1.15" invariant "^2.2.4" - jest-serializer "^24.3.0" + jest-serializer "^24.4.0" jest-util "^24.3.0" - jest-worker "^24.3.1" + jest-worker "^24.4.0" micromatch "^3.1.10" sane "^4.0.3" -jest-jasmine2@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.3.1.tgz#127d628d3ac0829bd3c0fccacb87193e543b420b" - integrity sha512-STo6ar1IyPlIPq9jPxDQhM7lC0dAX7KKN0LmCLMlgJeXwX+1XiVdtZDv1a4zyg6qhNdpo1arOBGY0BcovUK7ug== +jest-jasmine2@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.4.0.tgz#f1d3749b1fc4a90cbdca1480f0ce932d135b69e5" + integrity sha512-J9A0SKWuUNDmXKU+a3Yj69NmUXK7R3btHHu1ZMpjHKlMoHggVjdzsolpNHELCENBOTXvcLXqEH0Xm+pYRoNfMw== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/test-result" "^24.3.0" "@jest/types" "^24.3.0" chalk "^2.0.1" co "^4.6.0" - expect "^24.3.1" + expect "^24.4.0" is-generator-fn "^2.0.0" - jest-each "^24.3.1" - jest-matcher-utils "^24.3.1" + jest-each "^24.4.0" + jest-matcher-utils "^24.4.0" jest-message-util "^24.3.0" - jest-runtime "^24.3.1" - jest-snapshot "^24.3.1" + jest-runtime "^24.4.0" + jest-snapshot "^24.4.0" jest-util "^24.3.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" throat "^4.0.0" -jest-leak-detector@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.3.1.tgz#ed89d05ca07e91b2b51dac1f676ab354663aa8da" - integrity sha512-GncRwEtAw/SohdSyY4bk2RE06Ac1dZrtQGZQ2j35hSuN4gAAAKSYMszJS2WDixsAEaFN+GHBHG+d8pjVGklKyw== +jest-leak-detector@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.4.0.tgz#f255d2f582b8dda7b960e04a42f7239b7ec6520b" + integrity sha512-PAo0y19ZkWZWYmdoPAQKpYTDt7IGwrTFhIwGmHO1xkRjzAWW8zcCoiMLrFwNSi9rir2ZH7el8gXZ0d2mmU7O9Q== dependencies: - pretty-format "^24.3.1" + pretty-format "^24.4.0" -jest-matcher-utils@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.3.1.tgz#025e1cd9c54a5fde68e74b12428775d06d123aa8" - integrity sha512-P5VIsUTJeI0FYvWVMwEHjxK1L83vEkDiKMV0XFPIrT2jzWaWPB2+dPCHkP2ID9z4eUKElaHqynZnJiOdNVHfXQ== +jest-matcher-utils@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.4.0.tgz#285a2a5c8414d2f4a62d89ddc4b381730e2b717d" + integrity sha512-JDWrJ1G+GfxtEQlX7DlCV/0sk0uYbnra0jVl3DiDbS0FUX0HeGA1CxRW/U87LB3XNHQydhBKbXgf+pDCiUCn4w== dependencies: chalk "^2.0.1" - jest-diff "^24.3.1" + jest-diff "^24.4.0" jest-get-type "^24.3.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" jest-message-util@^24.3.0: version "24.3.0" @@ -4509,105 +4509,111 @@ jest-mock@^24.3.0: dependencies: "@jest/types" "^24.3.0" +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + jest-regex-util@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== -jest-resolve-dependencies@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.3.1.tgz#a22839d611ba529a74594ee274ce2b77d046bea9" - integrity sha512-9JUejNImGnJjbNR/ttnod+zQIWANpsrYMPt18s2tYGK6rP191qFsyEQ2BhAQMdYDRkTmi8At+Co9tL+jTPqdpw== +jest-resolve-dependencies@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.4.0.tgz#296420c04211d2697dfe3141744e7071028ea9b0" + integrity sha512-3ssDSve3iSsIKm5daivq1mrCaBVFAa+TMG4qardNPoi7IJfupDUETIBCXYF9GRtIfNuD/dJOSag4u6oMHRxTGg== dependencies: "@jest/types" "^24.3.0" jest-regex-util "^24.3.0" - jest-snapshot "^24.3.1" + jest-snapshot "^24.4.0" -jest-resolve@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.3.1.tgz#103dbd438b59618ea428ec4acbd65c56495ba397" - integrity sha512-N+Q3AcVuKxpn/kjQMxUVLwBk32ZE1diP4MPcHyjVwcKpCUuKrktfRR3Mqe/T2HoD25wyccstaqcPUKIudl41bg== +jest-resolve@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.4.0.tgz#5314af3cc9abc8d2de55c6e78edac4253c2f46f3" + integrity sha512-XvMIuDH6wQi76YJfNG40iolXP2l+fA+LLORGgNSZ5VgowCeyV/XVygTN4L3No3GP1cthUdl/ULzWBd2CfYmTkw== dependencies: "@jest/types" "^24.3.0" browser-resolve "^1.11.3" chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-runner@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.3.1.tgz#5488566fa60cdb4b00a89c734ad6b54b9561415d" - integrity sha512-Etc9hQ5ruwg+q7DChm+E8qzHHdNTLeUdlo+whPQRSpNSgl0AEgc2r2mT4lxODREqmnHg9A8JHA44pIG4GE0Gzg== +jest-runner@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.4.0.tgz#71ad09858be897cc37da1bf88bf67baaa0219fdb" + integrity sha512-eCuEMDbJknyKEUBWBDebW3GQ6Ty8wwB3YqDjFb4p3UQozA2HarPq0n9N83viq18vvZ/BDrQvW6RLdZaiLipM4Q== dependencies: "@jest/console" "^24.3.0" - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/test-result" "^24.3.0" "@jest/types" "^24.3.0" chalk "^2.4.2" exit "^0.1.2" graceful-fs "^4.1.15" - jest-config "^24.3.1" + jest-config "^24.4.0" jest-docblock "^24.3.0" - jest-haste-map "^24.3.1" - jest-jasmine2 "^24.3.1" - jest-leak-detector "^24.3.1" + jest-haste-map "^24.4.0" + jest-jasmine2 "^24.4.0" + jest-leak-detector "^24.4.0" jest-message-util "^24.3.0" - jest-resolve "^24.3.1" - jest-runtime "^24.3.1" + jest-resolve "^24.4.0" + jest-runtime "^24.4.0" jest-util "^24.3.0" - jest-worker "^24.3.1" + jest-worker "^24.4.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.3.1.tgz#2798230b4fbed594b375a13e395278694d4751e2" - integrity sha512-Qz/tJWbZ2naFJ2Kvy1p+RhhRgsPYh4e6wddVRy6aHBr32FTt3Ja33bfV7pkMFWXFbVuAsJMJVdengbvdhWzq4A== +jest-runtime@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.4.0.tgz#77df2137d1cb78a30f8b7c52cc06427272e06334" + integrity sha512-wmopIA6EqgfSvYmqFvfZViJy5LCyIATUSRRt16HQDNN4ypWUQAaFwZ9fpbPo7e2UnKHTe2CK0dCRB1o/a6JUfQ== dependencies: "@jest/console" "^24.3.0" - "@jest/environment" "^24.3.1" + "@jest/environment" "^24.4.0" "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.3.1" + "@jest/transform" "^24.4.0" "@jest/types" "^24.3.0" "@types/yargs" "^12.0.2" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.1.15" - jest-config "^24.3.1" - jest-haste-map "^24.3.1" + jest-config "^24.4.0" + jest-haste-map "^24.4.0" jest-message-util "^24.3.0" jest-mock "^24.3.0" jest-regex-util "^24.3.0" - jest-resolve "^24.3.1" - jest-snapshot "^24.3.1" + jest-resolve "^24.4.0" + jest-snapshot "^24.4.0" jest-util "^24.3.0" - jest-validate "^24.3.1" + jest-validate "^24.4.0" realpath-native "^1.1.0" slash "^2.0.0" strip-bom "^3.0.0" yargs "^12.0.2" -jest-serializer@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.3.0.tgz#074e307300d1451617cf2630d11543ee4f74a1c8" - integrity sha512-RiSpqo2OFbVLJN/PgAOwQIUeHDfss6NBUDTLhjiJM8Bb5rMrwRqHfkaqahIsOf9cXXB5UjcqDCzbQ7AIoMqWkg== +jest-serializer@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== -jest-snapshot@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.3.1.tgz#0f22a86c1b8c87e823f5ad095e82c19d9ed93d72" - integrity sha512-7wbNJWh0sBjmoaexTOWqS7nleTQME7o2W9XKU6CHCxG49Thjct4aVPC/QPNF5NHnvf4M/VDmudIDbwz6noJTRA== +jest-snapshot@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.4.0.tgz#7e76ff377cf84af65e37b46c48bbda555e7545da" + integrity sha512-h+xO+ZQC+XEcf5wsy6+yducTKw6ku+oS5E2eJZI4YI65AT/lvbMjKgulgQWUOxga4HP0qHnz9uwa67/Zo7jVrw== dependencies: "@babel/types" "^7.0.0" "@jest/types" "^24.3.0" chalk "^2.0.1" - expect "^24.3.1" - jest-diff "^24.3.1" - jest-matcher-utils "^24.3.1" + expect "^24.4.0" + jest-diff "^24.4.0" + jest-matcher-utils "^24.4.0" jest-message-util "^24.3.0" - jest-resolve "^24.3.1" + jest-resolve "^24.4.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" semver "^5.5.0" jest-util@^24.3.0: @@ -4629,17 +4635,17 @@ jest-util@^24.3.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.3.1.tgz#9359eea5a767a3d20b4fa7a5764fd78330ba8312" - integrity sha512-ww3+IPNCOEMi1oKlrHdSnBXetXtdrrdSh0bqLNTVkWglduhORf94RJWd1ko9oEPU2TcEQS5QIPacYziQIUzc4A== +jest-validate@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.4.0.tgz#4f19c7d738a6bb700620c766428c7738d6985555" + integrity sha512-XESrpRYneLmiN9ayFm9RhBV5dwmhRZ+LbebScuuQ5GsY6ILpX9UeUMUdQ5Iz++YxFsmn5Lyi/Wkw6EV4v7nNTg== dependencies: "@jest/types" "^24.3.0" camelcase "^5.0.0" chalk "^2.0.1" jest-get-type "^24.3.0" leven "^2.1.0" - pretty-format "^24.3.1" + pretty-format "^24.4.0" jest-watcher@^24.3.0: version "24.3.0" @@ -4663,22 +4669,22 @@ jest-worker@^24.0.0: merge-stream "^1.0.1" supports-color "^6.1.0" -jest-worker@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.3.1.tgz#c1759dd2b1d5541b09a2e5e1bc3288de6c9d8632" - integrity sha512-ZCoAe/iGLzTJvWHrO8fyx3bmEQhpL16SILJmWHKe8joHhyF3z00psF1sCRT54DoHw5GJG0ZpUtGy+ylvwA4haA== +jest-worker@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0" + integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ== dependencies: "@types/node" "*" merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.3.1.tgz#81959de0d57b2df923510f4fafe266712d37dcca" - integrity sha512-SqZguEbYNcZ3r0KUUBN+IkKfyPS1VBbIUiK4Wrc0AiGUR52gJa0fmlWSOCL3x25908QrfoQwkVDu5jCsfXb2ig== +jest@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.4.0.tgz#688b71a2dadd41e26d0cfc04e1ddcacf30a1efbb" + integrity sha512-gAGfjvu8hHN0N6/aDyCBpncWWBcpY6wq69Msq/I6Xd763q/ZYBEMh0SKUomrViFoJ/dyistA6b4aJh8e+5QMyw== dependencies: import-local "^2.0.0" - jest-cli "^24.3.1" + jest-cli "^24.4.0" js-beautify@^1.6.14: version "1.8.9" @@ -5954,10 +5960,10 @@ prettier@1.16.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== -pretty-format@^24.3.1: - version "24.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.3.1.tgz#ae4a98e93d73d86913a8a7dd1a7c3c900f8fda59" - integrity sha512-NZGH1NWS6o4i9pvRWLsxIK00JB9pqOUzVrO7yWT6vjI2thdxwvxefBJO6O5T24UAhI8P5dMceZ7x5wphgVI7Mg== +pretty-format@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.4.0.tgz#48db91969eb89f272c1bf3514bc5d5b228b3e722" + integrity sha512-SEXFzT01NwO4vaymwhz1/CM+wKCLOT92uqrzxIjmdRQMt7JAEuZ2eInCMvDS+4ZidEB+Rdq+fMs/Vwse8VAh1A== dependencies: "@jest/types" "^24.3.0" ansi-regex "^4.0.0" From 1acadbc1b4227880c6b738da00260854eeaea904 Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Tue, 12 Mar 2019 10:01:25 +0100 Subject: [PATCH 58/58] chore: update deps --- yarn.lock | 910 +++++++++++++----------------------------------------- 1 file changed, 219 insertions(+), 691 deletions(-) diff --git a/yarn.lock b/yarn.lock index a23cae6..ad08908 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,27 +26,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.2.2", "@babel/core@^7.3.4": +"@babel/core@^7.1.0", "@babel/core@^7.2.2", "@babel/core@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== @@ -66,18 +46,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.2.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.2.tgz#fff31a7b2f2f3dad23ef8e01be45b0d5c2fc0132" - integrity sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ== - dependencies: - "@babel/types" "^7.3.2" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.3.4": +"@babel/generator@^7.0.0", "@babel/generator@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg== @@ -220,17 +189,7 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.1.0": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" - integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.2.3" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.3.4": +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13" integrity sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A== @@ -294,12 +253,7 @@ lodash "^4.17.10" v8flags "^3.1.1" -"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd" - integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ== - -"@babel/parser@^7.1.0", "@babel/parser@^7.3.4": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== @@ -338,14 +292,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.3.1": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1" - integrity sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654" @@ -427,15 +373,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - integrity sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-transform-async-to-generator@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c" @@ -452,14 +389,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - integrity sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - "@babel/plugin-transform-block-scoping@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4" @@ -468,20 +397,6 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.11" -"@babel/plugin-transform-classes@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" - integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - "@babel/plugin-transform-classes@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc" @@ -573,14 +488,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - integrity sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ== - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-modules-systemjs@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861" @@ -620,21 +527,14 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - integrity sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA== + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz#3a873e07114e1a5bee17d04815662c8317f10e30" + integrity sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw== dependencies: "@babel/helper-call-delegate" "^7.1.0" "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw== - dependencies: - regenerator-transform "^0.13.3" - "@babel/plugin-transform-regenerator@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a" @@ -706,56 +606,7 @@ core-js "^2.5.7" regenerator-runtime "^0.12.0" -"@babel/preset-env@^7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.1.tgz#389e8ca6b17ae67aaf9a2111665030be923515db" - integrity sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.3.1" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-env@^7.3.4": +"@babel/preset-env@^7.3.1", "@babel/preset-env@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== @@ -833,22 +684,7 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.3.4": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ== @@ -863,16 +699,7 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.2.tgz#424f5be4be633fff33fb83ab8d67e4a8290f5a2f" - integrity sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.3.4": +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ== @@ -1106,20 +933,10 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a" integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== -"@types/node@*", "@types/node@^10.11.7": - version "10.12.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.24.tgz#b13564af612a22a20b5d95ca40f1bffb3af315cf" - integrity sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ== - -"@types/node@^11.9.5": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.0.tgz#070e9ce7c90e727aca0e0c14e470f9a93ffe9390" - integrity sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg== - -"@types/semver@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" - integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== +"@types/node@*", "@types/node@^11.9.5": + version "11.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.1.tgz#9ee55ffce20f72e141863b0036a6e51c6fc09a1f" + integrity sha512-2azXFP9n4aA2QNLkKm/F9pzKxgYj1SMawZ5Eh9iC21RH3XNcFsivLVU2NhpMgQm7YobSByvIol4c42ZFusXFHQ== "@types/stack-utils@^1.0.1": version "1.0.1" @@ -1414,7 +1231,7 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.0: +acorn-jsx@^5.0.0, acorn-jsx@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== @@ -1429,12 +1246,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7: - version "6.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" - integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== - -acorn@^6.0.5, acorn@^6.1.1: +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.5, acorn@^6.0.7, acorn@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== @@ -1456,7 +1268,7 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== -ajv@^6.1.0: +ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== @@ -1466,16 +1278,6 @@ ajv@^6.1.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.5.5, ajv@^6.9.1: - version "6.9.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1" - integrity sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - anchor-markdown-header@^0.5.5: version "0.5.7" resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" @@ -1498,10 +1300,10 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-styles@^2.2.1: version "2.2.1" @@ -1555,19 +1357,12 @@ argv@^0.0.2: resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -1582,11 +1377,6 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1646,11 +1436,11 @@ async-limiter@~1.0.0: integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async@^2.5.0, async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== dependencies: - lodash "^4.17.10" + lodash "^4.17.11" asynckit@^0.4.0: version "0.4.0" @@ -1736,9 +1526,9 @@ babel-plugin-dynamic-import-node@^2.2.0: object.assign "^4.1.0" babel-plugin-istanbul@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.0.tgz#6892f529eff65a3e2d33d87dc5888ffa2ecd4a30" - integrity sha512-CLoXPRSUWiR8yao8bShqZUIC6qLfZVVY3X1wj+QPNXu0wfmrRRfarh1LYy+dYMVI+bDj0ghy3tuqFFRFZmL1Nw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" + integrity sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ== dependencies: find-up "^3.0.0" istanbul-lib-instrument "^3.0.0" @@ -1899,15 +1689,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -2001,13 +1782,13 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.3.4: - version "4.4.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" - integrity sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A== + version "4.4.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.2.tgz#6ea8a74d6464bb0bd549105f659b41197d8f0ba2" + integrity sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg== dependencies: - caniuse-lite "^1.0.30000929" - electron-to-chromium "^1.3.103" - node-releases "^1.1.3" + caniuse-lite "^1.0.30000939" + electron-to-chromium "^1.3.113" + node-releases "^1.1.8" bser@^2.0.0: version "2.0.0" @@ -2017,16 +1798,18 @@ bser@^2.0.0: node-int64 "^0.4.0" buble@^0.19.6: - version "0.19.6" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" - integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== + version "0.19.7" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.7.tgz#1dfd080ab688101aad5388d3304bc82601a244fd" + integrity sha512-YLgWxX/l+NnfotydBlxqCMPR4FREE4ubuHphALz0FxQ7u2hp3BzxTKQ4nKpapOaRJfEm1gukC68KnT2OymRK0g== dependencies: - chalk "^2.4.1" - magic-string "^0.25.1" + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.2" minimist "^1.2.0" os-homedir "^1.0.1" - regexpu-core "^4.2.0" - vlq "^1.0.0" + regexpu-core "^4.5.4" buffer-from@^1.0.0: version "1.1.1" @@ -2098,14 +1881,14 @@ callsites@^3.0.0: integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== -caniuse-lite@^1.0.30000929: - version "1.0.30000935" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz#d1b59df00b46f4921bb84a8a34c1d172b346df59" - integrity sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ== +caniuse-lite@^1.0.30000939: + version "1.0.30000945" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000945.tgz#d51e3750416dd05126d5ac94a9c57d1c26c6fd21" + integrity sha512-PSGwYChNIXJ4FZr9Z9mrVzBCB1TF3yyiRmIDRIdKDHZ6u+1jYH6xeR28XaquxnMwcZVX3f48S9zi7eswO/G1nQ== capture-exit@^1.2.0: version "1.2.0" @@ -2130,7 +1913,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2232,16 +2015,6 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -2307,11 +2080,6 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colors@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -2421,9 +2189,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^2.4.0, core-js@^2.5.7: - version "2.6.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" - integrity sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A== + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2500,9 +2268,9 @@ css-select@~1.2.0: nth-check "~1.0.1" css-what@2.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== css@^2.1.0: version "2.2.4" @@ -2525,9 +2293,9 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== cssstyle@^1.0.0, cssstyle@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" - integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.1.tgz#3aceb2759eaf514ac1a21628d723d6043a819495" + integrity sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A== dependencies: cssom "0.3.x" @@ -2719,28 +2487,23 @@ dom-event-types@^1.0.0: integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + domelementtype "^1.3.0" + entities "^1.1.1" domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0: +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -2790,21 +2553,19 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" editorconfig@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.2.tgz#047be983abb9ab3c2eefe5199cb2b7c5689f0702" - integrity sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ== + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== dependencies: - "@types/node" "^10.11.7" - "@types/semver" "^5.5.0" commander "^2.19.0" - lru-cache "^4.1.3" + lru-cache "^4.1.5" semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.3.103: - version "1.3.113" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" - integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== +electron-to-chromium@^1.3.113: + version "1.3.115" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.115.tgz#fdaa56c19b9f7386dbf29abc1cc632ff5468ff3b" + integrity sha512-mN2qeapQWdi2B9uddxTZ4nl80y46hbyKY5Wt9Yjih+QZFQLdaujEDK4qJky35WhyxMzHF3ZY41Lgjd2BPDuBhg== elliptic@^6.0.0: version "6.4.1" @@ -2908,9 +2669,9 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0, escodegen@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== + version "1.11.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" + integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3006,15 +2767,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.2: +eslint-scope@^4.0.0, eslint-scope@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e" integrity sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg== @@ -3075,9 +2828,9 @@ eslint@^5.15.1: text-table "^0.2.0" esm@^3.2.14: - version "3.2.14" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.14.tgz#567f65e9433bb0873eb92ed5e92e876c3ec2a212" - integrity sha512-uQq8DK0HB0n2Ze9gshhxGQa60caKmwNH7tKxALAT6wxYGfQCdEMXA3MV3z1rh8TSmQIVFYbltm9Xe1ghusnCqw== + version "3.2.15" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.15.tgz#a6cf1b209c6718871cb35fd2a3733e7c3befc144" + integrity sha512-GcKZRSlQ/QevC/t94FXYKbUobSTArdLfRBAV6t6HIguoUBfuFGomxSZbsRHySaTppixC9jtmzAX+0GF4tbJaJA== espree@^4.1.0: version "4.1.0" @@ -3177,13 +2930,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3197,13 +2943,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - expect@^24.4.0: version "24.4.0" resolved "https://registry.yarnpkg.com/expect/-/expect-24.4.0.tgz#df52da212bc06831c38fb51a53106ae7a0e7aaf2" @@ -3245,13 +2984,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -3348,11 +3080,6 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" @@ -3361,17 +3088,6 @@ fileset@^2.0.3: glob "^7.0.3" minimatch "^3.0.3" -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3383,9 +3099,9 @@ fill-range@^4.0.0: to-regex-range "^2.1.0" find-babel-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" - integrity sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U= + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== dependencies: json5 "^0.5.1" path-exists "^3.0.0" @@ -3400,12 +3116,12 @@ find-cache-dir@^1.0.0: pkg-dir "^2.0.0" find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" + make-dir "^2.0.0" pkg-dir "^3.0.0" find-up@^2.0.0, find-up@^2.1.0: @@ -3444,18 +3160,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3582,21 +3291,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3618,9 +3312,9 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: path-is-absolute "^1.0.0" globals@^11.1.0, globals@^11.7.0: - version "11.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50" - integrity sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ== + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== globals@^9.18.0: version "9.18.0" @@ -3762,9 +3456,9 @@ home-or-tmp@^3.0.0: integrity sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs= homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw= + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" @@ -3786,16 +3480,16 @@ html-tags@^2.0.0: integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= htmlparser2@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ== + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== dependencies: - domelementtype "^1.3.0" + domelementtype "^1.3.1" domhandler "^2.3.0" domutils "^1.5.1" entities "^1.1.1" inherits "^2.0.1" - readable-stream "^3.0.6" + readable-stream "^3.1.1" htmlparser2@~3.9.2: version "3.9.2" @@ -3950,11 +3644,6 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -4053,18 +3742,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4077,11 +3754,6 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4104,13 +3776,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4135,13 +3800,6 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4149,11 +3807,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -4166,16 +3819,6 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -4402,9 +4045,9 @@ jest-each@^24.4.0: pretty-format "^24.4.0" jest-environment-jsdom-global@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.1.1.tgz#c0b5fd969ace23137fd9c4a3b8e3367a54b4ed15" - integrity sha512-7+M6yMM6vpHfaR9ymrjobx1kG3TQyMpSu9yH7bz9bVHsBMUEdiBOmf6qVvyi8z09delLmHuPQpUFYm5SIGSzhQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.2.0.tgz#dd5b16fe0a0566ee40010d8632be5adf5a5ccb65" + integrity sha512-41cDl0OxzmFY/cnW0COUN+lnt2N2ks1r3V4fAKOnlZ9xIrGy0PNPan+Bz8HP+uQy/8bGV6T7J4Oi7X+h43It6g== jest-environment-jsdom@^24.4.0: version "24.4.0" @@ -4661,15 +4304,7 @@ jest-watcher@^24.3.0: jest-util "^24.3.0" string-length "^2.0.0" -jest-worker@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d" - integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg== - dependencies: - merge-stream "^1.0.1" - supports-color "^6.1.0" - -jest-worker@^24.4.0: +jest-worker@^24.0.0, jest-worker@^24.4.0: version "24.4.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0" integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ== @@ -4687,9 +4322,9 @@ jest@^24.4.0: jest-cli "^24.4.0" js-beautify@^1.6.14: - version "1.8.9" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.8.9.tgz#08e3c05ead3ecfbd4f512c3895b1cda76c87d523" - integrity sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f" + integrity sha512-P0skmY4IDjfLiVrx+GLDeme8w5G0R1IGXgccVU5HP2VM3lRblH7qN2LTea5vZAxrDjpZBD0Jv+ahpjwVcbz/rw== dependencies: config-chain "^1.1.12" editorconfig "^0.15.2" @@ -4713,9 +4348,9 @@ js-tokens@^3.0.2: integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.12.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" - integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" + integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4999,7 +4634,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.x, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: +lodash@4.x, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -5011,7 +4646,7 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.1.2, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -5026,7 +4661,7 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.25.1: +magic-string@^0.25.1, magic-string@^0.25.2: version "0.25.2" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg== @@ -5040,6 +4675,14 @@ make-dir@^1.0.0, make-dir@^1.3.0: dependencies: pify "^3.0.0" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -5076,11 +4719,6 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5121,25 +4759,6 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5167,17 +4786,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.37.0: - version "1.37.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== +mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.21" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== dependencies: - mime-db "~1.37.0" + mime-db "~1.38.0" mime@^2.0.3: version "2.4.0" @@ -5419,10 +5038,10 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.7.tgz#b09a10394d0ed8f7778f72bb861dde68b146303b" - integrity sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA== +node-releases@^1.1.8: + version "1.1.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.10.tgz#5dbeb6bc7f4e9c85b899e2e7adcc0635c9b2adf7" + integrity sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ== dependencies: semver "^5.3.0" @@ -5444,7 +5063,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= @@ -5462,9 +5081,9 @@ npm-bundled@^1.0.1: integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" - integrity sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -5499,9 +5118,9 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.7, nwsapi@^2.0.9: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.0.tgz#781065940aed90d9bb01ca5d0ce0fcf81c32712f" - integrity sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.1.tgz#08d6d75e69fd791bdea31507ffafe8c843b67e9c" + integrity sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg== oauth-sign@~0.9.0: version "0.9.0" @@ -5522,16 +5141,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11: +object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -5557,14 +5171,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -5677,9 +5283,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" - integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: p-try "^2.0.0" @@ -5746,9 +5352,9 @@ parse-asn1@^5.0.0: safe-buffer "^5.1.1" parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - integrity sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g== + version "1.2.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" + integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -5757,16 +5363,6 @@ parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -5889,14 +5485,12 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pirates@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" - integrity sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA== - dependencies: - node-modules-regexp "^1.0.0" +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1: +pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== @@ -5950,11 +5544,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - prettier@1.16.3: version "1.16.3" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" @@ -5996,9 +5585,9 @@ promise-inflight@^1.0.1: integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= prompts@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.2.tgz#094119b0b0a553ec652908b583205b9867630154" - integrity sha512-Pc/c53d2WZHJWZr78/BhZ5eHsdQtltbyBjHoA4T0cs/4yKJqCcoOHrq2SNKwtspVE0C+ebqAR5u0/mXwrHaADQ== + version "2.0.3" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.3.tgz#c5ccb324010b2e8f74752aadceeb57134c1d2522" + integrity sha512-H8oWEoRZpybm6NV4to9/1limhttEo13xK62pNvn2JzY0MA03p7s0OjtmhXyon3uJmxiJJVSuUwEJFFssI3eBiQ== dependencies: kleur "^3.0.2" sisteransi "^1.0.0" @@ -6109,15 +5698,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -6195,10 +5775,10 @@ read-pkg@^3.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" - integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== +readable-stream@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" + integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -6220,10 +5800,10 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== +regenerate-unicode-properties@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" + integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== dependencies: regenerate "^1.4.0" @@ -6242,13 +5822,6 @@ regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== - dependencies: - private "^0.1.6" - regenerator-transform@^0.13.4: version "0.13.4" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" @@ -6256,13 +5829,6 @@ regenerator-transform@^0.13.4: dependencies: private "^0.1.6" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -6272,30 +5838,26 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp-tree@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.1.tgz#27b455f9b138ca2e84c090e9aff1ffe2a04d97fa" - integrity sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw== - dependencies: - cli-table3 "^0.5.0" - colors "^1.1.2" - yargs "^12.0.5" + version "0.1.5" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" + integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ== regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA== +regexpu-core@^4.1.3, regexpu-core@^4.2.0, regexpu-core@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" + regenerate-unicode-properties "^8.0.2" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" + unicode-match-property-value-ecmascript "^1.1.0" regjsgen@^0.5.0: version "0.5.0" @@ -6348,7 +5910,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -6358,21 +5920,21 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== dependencies: - lodash "^4.13.1" + lodash "^4.17.11" request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" request@^2.87.0, request@^2.88.0: version "2.88.0" @@ -6525,7 +6087,7 @@ rollup-plugin-terser@^4.0.4: serialize-javascript "^1.6.1" terser "^3.14.1" -rollup-pluginutils@^2.0.1: +rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: version "2.4.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== @@ -6533,14 +6095,6 @@ rollup-pluginutils@^2.0.1: estree-walker "^0.6.0" micromatch "^3.1.10" -rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" - integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA== - dependencies: - estree-walker "^0.5.2" - micromatch "^2.3.11" - rollup@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.6.0.tgz#4329f4634718197c678d18491724d50d8b7ee76c" @@ -6614,9 +6168,9 @@ sax@^1.2.4: integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^3.1.5: - version "3.1.6" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.6.tgz#2d948a47b54918516c5a64096f08865deb5bd8cd" - integrity sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w== + version "3.1.9" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.9.tgz#c1c197cd54956d88c09f960254b999e192d7058b" + integrity sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw== dependencies: xmlchars "^1.3.1" @@ -6769,7 +6323,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.9: +source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.10: version "0.5.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== @@ -6880,7 +6434,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -stealthy-require@^1.1.0: +stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= @@ -6943,13 +6497,13 @@ string-width@^1.0.1: strip-ansi "^4.0.0" string-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1" - integrity sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew== + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.0.0" + strip-ansi "^5.1.0" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" @@ -6979,12 +6533,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +strip-ansi@^5.0.0, strip-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" + integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg== dependencies: - ansi-regex "^4.0.0" + ansi-regex "^4.1.0" strip-bom@^3.0.0: version "3.0.0" @@ -7089,13 +6643,13 @@ terser-webpack-plugin@^1.1.0: worker-farm "^1.5.2" terser@^3.14.1, terser@^3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" - integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== dependencies: - commander "~2.17.1" + commander "^2.19.0" source-map "~0.6.1" - source-map-support "~0.5.9" + source-map-support "~0.5.10" test-exclude@^5.0.0: version "5.1.0" @@ -7189,16 +6743,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@>=2.3.3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^2.3.4, tough-cookie@^2.5.0: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -7324,15 +6869,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== unified@^6.1.6: version "6.2.0" @@ -7420,9 +6965,9 @@ unset-value@^1.0.0: isobject "^3.0.0" upath@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== update-section@^0.3.0, update-section@^0.3.3: version "0.3.3" @@ -7537,11 +7082,6 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vlq@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" - integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== - vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" @@ -7628,12 +7168,7 @@ vue-template-compiler@^2.6.8: de-indent "^1.0.2" he "^1.1.0" -vue-template-es2015-compiler@^1.6.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.2.tgz#dd73e80ba58bb65dd7a8aa2aeef6089cf6116f2a" - integrity sha512-cliV19VHLJqFUYbz/XeWXe5CO6guzwd0yrrqqp0bmjlMP3ZZULY7fu8RTC4+3lmHwo6ESVDHFDsvjB15hcR5IA== - -vue-template-es2015-compiler@^1.9.0: +vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== @@ -7820,20 +7355,13 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -ws@^6.1.0: +ws@^6.1.0, ws@^6.1.2: version "6.2.0" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.0.tgz#13806d9913b2a5f3cbb9ba47b563c002cbc7c526" integrity sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w== dependencies: async-limiter "~1.0.0" -ws@^6.1.2: - version "6.1.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.3.tgz#d2d2e5f0e3c700ef2de89080ebc0ac6e1bf3a72d" - integrity sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg== - dependencies: - async-limiter "~1.0.0" - x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" @@ -7877,7 +7405,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^12.0.2, yargs@^12.0.5: +yargs@^12.0.2: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==