From ba435af17db4a272b749be7b6530b48ef374ff12 Mon Sep 17 00:00:00 2001 From: A O Date: Sat, 27 Jun 2020 13:22:29 +0500 Subject: [PATCH] add short hash to hame --- package.json | 40 ++-- src/hash.ts | 12 ++ src/lp-loader.ts | 202 +++++++++++-------- tsconfig.json | 15 +- webpack4/watch.ts | 2 +- webpack4/wds.ts | 30 ++- yarn.lock | 497 +++++++++++++++++++++++----------------------- 7 files changed, 436 insertions(+), 362 deletions(-) create mode 100644 src/hash.ts diff --git a/package.json b/package.json index 0f6834d..98368dd 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,28 @@ { "name": "lp-loader", - "version": "1.0.0-pre.1", + "version": "1.0.0-pre.2", "description": "Frictionless language packs for Webpack.", - "keywords": ["i18n", "l10n", "webpack", "loader", "dictionary", "languages"], - "scripts": { - "wp3-build": "ts-node-dev webpack3/build", + "prettier": { + "semi": false, + "singleQuote": true, + "arrowParens": "avoid" + }, + "keywords": [ + "i18n", + "l10n", + "webpack", + "loader", + "dictionary", + "languages" + ], + "scripts": { + "wp3-build": "ts-node-dev webpack3/build", "wp3-watch": "h --n lp-loader-wp3 -- ts-node-dev webpack3/watch", - "wp3-wds": "h --n lp-loader-wp3-wds -- ts-node-dev webpack3/wds", - "wp4-build": "ts-node-dev webpack4/build", + "wp3-wds": "h --n lp-loader-wp3-wds -- ts-node-dev webpack3/wds", + "wp4-build": "ts-node-dev --respawn webpack4/build", "wp4-watch": "h --n lp-loader-wp4 -- ts-node-dev webpack4/watch", - "wp4-wds": "h --n lp-loader-wp4-wds -- ts-node-dev webpack4/wds", - "wp5-build": "ts-node-dev webpack5/build", + "wp4-wds": "ts-node-dev webpack4/wds", + "wp5-build": "ts-node-dev webpack5/build", "wp5-watch": "h --n lp-loader-wp5 -- ts-node-dev webpack4/watch", "wp5-wds": "h --n lp-loader-wp5-wds -- ts-node-dev webpack4/wds", "test": "echo \"Error: no test specified\" && exit 1", @@ -18,7 +30,7 @@ }, "author": "whitecolor", "files": [ - "lib/lp-loader.*" + "lib/*" ], "main": "./lib/lp-loader", "loader": "./lib/lp-loader", @@ -29,12 +41,14 @@ "@types/es6-shim": "0.0.31", "@types/express": "^4.0.32", "@types/node": "^8.0.25", - "@types/systemjs": "^0.19.30", + "@types/systemjs": "^0.19.30", + "get-port": "^5.1.1", "minihost": "^0.4.1", "node-static": "^0.7.9", - "ts-node": "^3.3.0", - "ts-node-dev": "^1.0.0-pre.4", - "typescript": "^2.4.2", + "open": "^7.0.4", + "ts-node": "^8.10.2", + "ts-node-dev": "^1.0.0-pre.49", + "typescript": "^3.9.5", "xstream": "^10.9.0" }, "license": "MIT" diff --git a/src/hash.ts b/src/hash.ts new file mode 100644 index 0000000..b56493a --- /dev/null +++ b/src/hash.ts @@ -0,0 +1,12 @@ +import * as crypto from 'crypto' + +const fullHashes: { [S: string]: string } = {} +const usedShortHashes: { [H: string]: string } = {} + +export const getShortHash = (str: string, len = 4): string => { + const hash = + fullHashes[str] || crypto.createHash('md5').update(str).digest('hex') + const short = hash.slice(0, len) + usedShortHashes[short] = usedShortHashes[short] || str + return usedShortHashes[short] === str ? short : getShortHash(str, len + 1) +} diff --git a/src/lp-loader.ts b/src/lp-loader.ts index cefaee1..6cab2cf 100644 --- a/src/lp-loader.ts +++ b/src/lp-loader.ts @@ -5,6 +5,7 @@ import * as path from 'path' import * as fs from 'fs' import * as qs from 'querystring' +import { getShortHash } from './hash' export interface LoaderOptions { /** @@ -12,13 +13,13 @@ export interface LoaderOptions { * Should use different names for different kinds of content. * Label name should not contain dots. */ - name?: string, + name?: string /** - * Custom promis library to be imported. + * Custom promis library to be imported. */ - promiseLib?: string, + promiseLib?: string - disableLoaders?: boolean, // TODO: remove this option? + disableLoaders?: boolean // TODO: remove this option? /** * Target ES format for exporting loading function. * Default is es6. @@ -30,18 +31,18 @@ export interface LoaderOptions { */ exportName?: string /** - * - * Match label files names (actually full path), RegExp or function, + * + * Match label files names (actually full path), RegExp or function, * By default index.* files are excluded, you may override it. */ - include?: RegExp | ((filePath: string) => boolean), + include?: RegExp | ((filePath: string) => boolean) /** - * + * * Do not consider folders as labeled dictionary data. By default `false` */ - excludeFolders?: boolean, + excludeFolders?: boolean /** - * + * * Output some debug data */ debug?: boolean @@ -49,19 +50,21 @@ export interface LoaderOptions { // https://webpack.js.org/api/stats/#module-objects type Module = { - id: number | null, - name: string, - debugId: number, - context: string, - userRequest: string, + id: number | null + name: string + debugId: number + context: string + userRequest: string reasons: Reason[] } interface Dependency { - module: Module, - block: { - chunkName?: string - } | undefined + module: Module + block: + | { + chunkName?: string + } + | undefined } type Reason = { @@ -70,9 +73,9 @@ type Reason = { } interface LoaderSharedData { - result: string, - exportStr: string, - fullExportStr: string, + result: string + exportStr: string + fullExportStr: string promiseStr: string } @@ -82,6 +85,7 @@ interface LoaderContext { cacheable: () => {} query: LoaderOptions | string resourcePath: string + rootContext: string } const flatten = (flat: T[], found: T[]): T[] => flat.concat(found) @@ -97,16 +101,18 @@ const isDependencyDynamic = (dependency: Dependency): boolean => !!dependency.block const getChunkNameOfDynamicDependency = (mod: Module) => - (mod.reasons - .map(r => r.dependency) - .filter(isDependencyDynamic)[0] || { block: { chunkName: '' } }).block!.chunkName + ( + mod.reasons.map(r => r.dependency).filter(isDependencyDynamic)[0] || { + block: { chunkName: '' }, + } + ).block!.chunkName const isModuleDynamicDependency = (mod: Module): boolean => { // Maybe here we should check non-zero count of dynamic relations - // instead of checking zero count of static relations? - return mod.reasons - .map(r => r.dependency) - .filter(isDependencyStatic).length === 0 + // instead of checking zero count of static relations? + return ( + mod.reasons.map(r => r.dependency).filter(isDependencyStatic).length === 0 + ) } const moduleIsChunk = isModuleDynamicDependency @@ -119,20 +125,24 @@ const findChunkParents = (mod: Module, depsChain: Module[] = []): Module[] => { .map(r => r.module) .filter(uniq) .filter(_ => !!_) - const staticParentsNotInChain = staticParents.filter(m => depsChain.indexOf(m) < 0) + const staticParentsNotInChain = staticParents.filter( + m => depsChain.indexOf(m) < 0 + ) if (!staticParents.length) { return [mod] } const chunks = staticParentsNotInChain.filter(moduleIsChunk) const notChunks = staticParentsNotInChain.filter(m => !moduleIsChunk(m)) const newChain = depsChain.concat(mod).concat(notChunks) - return notChunks.map((m) => findChunkParents(m, newChain)) - .reduce(flatten, []).concat(chunks) + return notChunks + .map(m => findChunkParents(m, newChain)) + .reduce(flatten, []) + .concat(chunks) } function getOptions(context: LoaderContext): LoaderOptions { const query = context.query - if (typeof query === 'string' && query !== "") { + if (typeof query === 'string' && query !== '') { return qs.parse(context.query as string) } if (!query || typeof query !== 'object') { @@ -146,26 +156,44 @@ module.exports = function (this: LoaderContext, source: string) { const parentChunks = findChunkParents(this._module) if (process.env.LP_DEBUG || options.debug) { console.log('LP-LOADER:', this._module.context) - console.log('Static parents: ', this._module.context, parentChunks - .filter(uniq) - .map(p => ({ req: p.userRequest, name: p.name, id: p.id, debugId: p.debugId })) + console.log( + 'Static parents: ', + this._module.context, + parentChunks.filter(uniq).map(p => ({ + req: p.userRequest, + name: p.name, + id: p.id, + debugId: p.debugId, + })) ) } - const parentChunksIds = parentChunks - .map(m => m.name || getChunkNameOfDynamicDependency(m) || m.debugId) + .map( + m => m.name || getChunkNameOfDynamicDependency(m) || '' + //m.debugId + ) + .filter(_ => _) .filter(uniq) .sort() - const chunkId = parentChunksIds.join('-') - const newExport = this.data.fullExportStr.replace(/__CHUNK_ID__/g, chunkId + '.') + + const parentChunksContextId = getShortHash( + parentChunks + .map(m => m.context.slice(this.rootContext.length)) + .filter(uniq) + .join('') + .replace(/\\/g, '/') + ) + + const chunkId = parentChunksIds.concat(parentChunksContextId).join('-') + const newExport = this.data.fullExportStr.replace( + /__CHUNK_ID__/g, + chunkId + '.' + ) const replaceRegExp = new RegExp(this.data.exportStr + '.*?;') if (replaceRegExp.test(source)) { source = source.replace(replaceRegExp, newExport) } else { - source = [ - this.data.promiseStr, - newExport - ].join('\n') + source = [this.data.promiseStr, newExport].join('\n') } return source } @@ -174,7 +202,8 @@ module.exports.pitch = function ( this: LoaderContext, remainingRequest: string, precedingRequest: string, - data: LoaderContext['data']) { + data: LoaderContext['data'] +) { this.cacheable && this.cacheable() const options = getOptions(this) @@ -184,40 +213,41 @@ module.exports.pitch = function ( const request = requestParts.pop() const excludeFiles = /^index\./ const disableLoaders = options.disableLoaders! - const exportName = typeof options.exportName === 'string' - ? options.exportName : 'default' + const exportName = + typeof options.exportName === 'string' ? options.exportName : 'default' - remainingRequest = requestParts.length - ? requestParts.join('!') + '!' : '' + remainingRequest = requestParts.length ? requestParts.join('!') + '!' : '' const stats = fs.lstatSync(request!) - const dirname = stats.isDirectory() - ? request! - : path.dirname(request!) + const dirname = stats.isDirectory() ? request! : path.dirname(request!) - type Entry = { fileName: string, label: string } + type Entry = { fileName: string; label: string } const filterFiles = (fileName: string) => { const filePath = path.join(dirname, fileName) const includeMatch = options.include as any return ( - includeMatch + (includeMatch ? typeof includeMatch === 'function' ? includeMatch(filePath) : includeMatch.test(filePath) - : !excludeFiles.test(fileName) - ) && (options.excludeFolders - ? !fs.statSync(filePath).isDirectory() - : true) + : !excludeFiles.test(fileName)) && + (options.excludeFolders ? !fs.statSync(filePath).isDirectory() : true) + ) } - const entries: Entry[] = fs.readdirSync(dirname) + const entries: Entry[] = fs + .readdirSync(dirname) .filter(filterFiles) .map(fileName => ({ - fileName, label: fileName.replace(/\..*/, '') + fileName, + label: fileName.replace(/\..*/, ''), })) const getPromiseSource = (entry: Entry) => { - const labeledModulePath = JSON.stringify(disableLoaders ? '!!' : '' - + remainingRequest + path.resolve(dirname, entry.fileName)) + const labeledModulePath = JSON.stringify( + disableLoaders + ? '!!' + : '' + remainingRequest + path.resolve(dirname, entry.fileName) + ) return [ ` return new Promise(function (resolve) {`, ` require.ensure([], function (require) {`, @@ -227,32 +257,38 @@ module.exports.pitch = function ( ` });`, ].join('\n') } - const exportTarget = typeof options.exportTarget === 'string' - ? options.exportTarget.toLocaleLowerCase() : 'es6' + const exportTarget = + typeof options.exportTarget === 'string' + ? options.exportTarget.toLocaleLowerCase() + : 'es6' - const exportStr = exportTarget === 'es6' - ? (exportName === 'default' ? 'export default' : `export const {exportName} =`) - : `exports${exportName ? '.' + exportName : ''} =` + const exportStr = + exportTarget === 'es6' + ? exportName === 'default' + ? 'export default' + : `export const {exportName} =` + : `exports${exportName ? '.' + exportName : ''} =` - const promiseStr = promiseLib ? `var Promise = require(${JSON.stringify(promiseLib)});\n` : '' + const promiseStr = promiseLib + ? `var Promise = require(${JSON.stringify(promiseLib)});\n` + : '' - const fullExportStr = [ - `${exportStr} function (label) {\n`, - ].concat( - entries.map(entry => [ - 'if (label === ' + JSON.stringify(entry.label) + ') {', - getPromiseSource(entry), - '}\n' - ].join('')), - 'return Promise.resolve();', - '};' - ).join('') + const fullExportStr = [`${exportStr} function (label) {\n`] + .concat( + entries.map(entry => + [ + 'if (label === ' + JSON.stringify(entry.label) + ') {', + getPromiseSource(entry), + '}\n', + ].join('') + ), + 'return Promise.resolve();', + '};' + ) + .join('') data.promiseStr = promiseStr data.exportStr = exportStr data.fullExportStr = fullExportStr - data.result = [ - promiseStr, - fullExportStr - ].join('') + data.result = [promiseStr, fullExportStr].join('') } diff --git a/tsconfig.json b/tsconfig.json index 54fcf8c..8ce7b5f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,22 +12,17 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true, "newLine": "LF", + "skipLibCheck": true, "noEmit": false, "baseUrl": ".", "paths": { - "lp-loader": [ - "src/lp-loader.ts" - ] + "lp-loader": ["src/lp-loader.ts"] } }, "formatCodeOptions": { "indentSize": 2, "tabSize": 2 }, - "include": [ - "src/*" - ], - "exclude": [ - "**/node_modules" - ] -} \ No newline at end of file + "include": ["src/*"], + "exclude": ["**/node_modules"] +} diff --git a/webpack4/watch.ts b/webpack4/watch.ts index 705564a..0915b46 100644 --- a/webpack4/watch.ts +++ b/webpack4/watch.ts @@ -11,7 +11,7 @@ compiler.watch({ poll: 100 }, (err, stats) => { }) const file = new staticServer(join(__dirname + '/build')) -console.log('Static HTTP server is listenting on', process.env.PORT) +console.log('Static HTTP server is listening on', process.env.PORT) http.createServer((request, response) => { request.addListener('end', function () { file.serve(request, response); diff --git a/webpack4/wds.ts b/webpack4/wds.ts index 2e7c7df..8ca87bd 100644 --- a/webpack4/wds.ts +++ b/webpack4/wds.ts @@ -2,13 +2,23 @@ import * as webpack from 'webpack' import config from './webpack.config' const WebpackDevServer = require('webpack-dev-server') -new WebpackDevServer(webpack(config), { - disableHostCheck: true, - hot: true, - stats: { colors: true }, - port: process.env.PORT, - historyApiFallback: { - index: 'index.html', - } -}) - .listen(process.env.PORT) +import * as getPort from 'get-port' +import * as open from 'open' + +const run = async () => { + const port = await getPort({}) + + new WebpackDevServer(webpack(config), { + disableHostCheck: true, + hot: true, + stats: { colors: true }, + port: process.env.PORT, + historyApiFallback: { + index: 'index.html', + }, + }).listen(process.env.PORT || port) + + open('http://localhost:' + port) +} + +run() diff --git a/yarn.lock b/yarn.lock index 6631bf2..8e6c742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -60,6 +60,16 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" +"@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" + integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + "@types/systemjs@^0.19.30": version "0.19.33" resolved "https://registry.yarnpkg.com/@types/systemjs/-/systemjs-0.19.33.tgz#47c47e7639867b6694beb3f60c4f53ad55eb1b13" @@ -114,15 +124,18 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: - color-convert "^1.9.0" + normalize-path "^3.0.0" + picomatch "^2.0.4" -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.9" @@ -138,10 +151,6 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - asap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/asap/-/asap-1.0.0.tgz#b2a45da5fdfa20b0496fc3768cc27c12fa916a7d" @@ -188,6 +197,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + body-parser@1.18.3, body-parser@^1.12.0: version "1.18.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" @@ -210,10 +224,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-split@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/browser-split/-/browser-split-0.0.1.tgz#7b097574f8e3ead606fb4664e64adfdda2981a93" +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -237,13 +263,6 @@ camelcase@^2.0.0, camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -255,7 +274,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -265,18 +284,25 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - character-parser@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-1.2.1.tgz#c0dde4ab182713b919b970959a123ecc1a30fcd6" +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + clean-css@^3.1.9: version "3.4.28" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" @@ -284,19 +310,6 @@ clean-css@^3.1.9: commander "2.8.x" source-map "0.4.x" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - -cli-usage@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" - dependencies: - marked "^0.3.6" - marked-terminal "^1.6.2" - cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -317,20 +330,6 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - colors@>=0.6.0: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -440,10 +439,6 @@ dateformat@~1.0.4-1.2.3: get-stdin "^4.0.1" meow "^3.3.0" -debounce@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.0.2.tgz#503cc674d8d7f737099664fb75ddbd36b9626dc6" - debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -480,9 +475,10 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -diff@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== duplexify@^3.2.0: version "3.6.1" @@ -493,11 +489,12 @@ duplexify@^3.2.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -dynamic-dedupe@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.2.0.tgz#50f7c28684831ecf1c170aab67a1d5311cdd76ce" +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= dependencies: - xtend "~2.0.6" + xtend "^4.0.0" ecc-jsbn@~0.1.1: version "0.1.1" @@ -572,7 +569,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -580,10 +577,6 @@ esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" -esprima@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" - etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -650,11 +643,12 @@ fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" -filewatcher@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/filewatcher/-/filewatcher-3.0.1.tgz#f4a1957355ddaf443ccd78a895f3d55e23c8a034" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - debounce "^1.0.0" + to-regex-range "^5.0.1" finalhandler@1.1.1: version "1.1.1" @@ -681,10 +675,6 @@ follow-redirects@^1.0.0: dependencies: debug "=3.1.0" -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -709,10 +699,20 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + get-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-1.0.0.tgz#6920003b5ae418213938fb8c1e4343b4cbe63deb" +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -723,6 +723,13 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.0.5: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -763,9 +770,10 @@ graceful-fs@^4.1.2: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growly@^1.2.0: +growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= har-schema@^2.0.0: version "2.0.0" @@ -784,10 +792,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" @@ -838,10 +842,6 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - infinity-agent@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216" @@ -873,6 +873,13 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -883,6 +890,16 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -895,13 +912,21 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-promise@^2.0.0: version "2.1.0" @@ -927,9 +952,17 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" @@ -1029,36 +1062,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - lodash._baseflatten@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" @@ -1104,17 +1107,6 @@ lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.clonedeep@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash.deburr@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" @@ -1162,10 +1154,6 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - lodash.union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-3.1.0.tgz#a4a3066fc15d6a7f8151cce9bdfe63dce7f5bcff" @@ -1207,20 +1195,6 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -marked-terminal@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" - dependencies: - cardinal "^1.0.0" - chalk "^1.1.3" - cli-table "^0.3.1" - lodash.assign "^4.2.0" - node-emoji "^1.4.1" - -marked@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - matches-selector@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/matches-selector/-/matches-selector-1.0.0.tgz#434833447026a25ea4999edab18e4b8892b25721" @@ -1283,6 +1257,7 @@ mime@>=1.2.9: minihost@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/minihost/-/minihost-0.4.1.tgz#58a163d8c0d3df234324cca742c83ae6d9f104f3" + integrity sha1-WKFj2MDT3yNDJMynQsg65tnxBPM= dependencies: async "^2.1.2" body-parser "^1.12.0" @@ -1311,20 +1286,30 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@^0.5.0, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + morgan@^1.5.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -1353,23 +1338,16 @@ nested-error-stacks@^1.0.0: dependencies: inherits "~2.0.1" -node-emoji@^1.4.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" - dependencies: - lodash.toarray "^4.4.0" - -node-notifier@^4.0.2: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" +node-notifier@^5.4.0: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: - cli-usage "^0.1.1" - growly "^1.2.0" - lodash.clonedeep "^3.0.0" - minimist "^1.1.1" - semver "^5.1.0" - shellwords "^0.1.0" - which "^1.0.5" + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" node-static@^0.7.9: version "0.7.9" @@ -1388,6 +1366,11 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -1408,14 +1391,6 @@ object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -1432,6 +1407,14 @@ once@^1.3.0, once@^1.4.0: dependencies: wrappy "1" +open@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83" + integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + optimist@>=0.3.4: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -1513,6 +1496,11 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -1626,6 +1614,13 @@ readable-stream@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1633,12 +1628,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -redeyed@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" - dependencies: - esprima "~3.0.0" - registry-url@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" @@ -1726,7 +1715,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.1.0: +"semver@2 || 3 || 4 || 5": version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -1734,6 +1723,11 @@ semver@^5.0.3: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -1769,9 +1763,10 @@ setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -shellwords@^0.1.0: +shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0: version "3.0.2" @@ -1798,11 +1793,13 @@ snabbdom@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.5.0.tgz#be46231942602154b74cd94985dd9deda5b41761" -source-map-support@^0.4.0: - version "0.4.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" +source-map-support@^0.5.12, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: - source-map "^0.5.6" + buffer-from "^1.0.0" + source-map "^0.6.0" source-map@0.4.x: version "0.4.4" @@ -1810,9 +1807,10 @@ source-map@0.4.x: dependencies: amdefine ">=0.0.4" -source-map@^0.5.6, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.1.7: version "0.1.43" @@ -1820,6 +1818,10 @@ source-map@~0.1.7: dependencies: amdefine ">=0.0.4" +source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" @@ -1918,12 +1920,6 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" - dependencies: - has-flag "^2.0.0" - symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -1936,6 +1932,13 @@ timed-out@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -1951,42 +1954,51 @@ transformers@2.1.0: promise "~2.0" uglify-js "~2.2.5" +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" -ts-node-dev@^1.0.0-pre.4: - version "1.0.0-pre.4" - resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.4.tgz#aee63a3135cadffa295c8bbc131ad8e1d5ea1579" +ts-node-dev@^1.0.0-pre.49: + version "1.0.0-pre.49" + resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.49.tgz#28836f73fe9513f339ccb1c0bebdb2e2e25c52f0" + integrity sha512-iJd4QPPOaCAByl/WuEdmDX8xDR2GmoWYu6aKvGudGUcfP1sJRjpaHb7oFDuvBspQF1xhxUdbjfHuvEtZPwKZFQ== dependencies: + chokidar "^3.4.0" dateformat "~1.0.4-1.2.3" - dynamic-dedupe "^0.2.0" - filewatcher "~3.0.0" - minimist "^1.1.3" - node-notifier "^4.0.2" + dynamic-dedupe "^0.3.0" + minimist "^1.2.5" + mkdirp "^1.0.4" + node-notifier "^5.4.0" resolve "^1.0.0" rimraf "^2.6.1" - ts-node "^3.0.6" - -ts-node@^3.0.6, ts-node@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69" - dependencies: - arrify "^1.0.0" - chalk "^2.0.0" - diff "^3.1.0" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^8.10.2" + tsconfig "^7.0.0" + +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.0" - tsconfig "^6.0.0" - v8flags "^3.0.0" - yn "^2.0.0" + source-map-support "^0.5.17" + yn "3.1.1" -tsconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" strip-bom "^3.0.0" strip-json-comments "^2.0.0" @@ -2007,9 +2019,10 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" -typescript@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" +typescript@^3.9.5: + version "3.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== uglify-js@^2.4.19: version "2.8.29" @@ -2076,12 +2089,6 @@ uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" -v8flags@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.0.tgz#4be9604488e0c4123645def705b1848d16b8e01f" - dependencies: - user-home "^1.1.1" - validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -2105,9 +2112,10 @@ void-elements@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" -which@^1.0.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" @@ -2157,12 +2165,10 @@ xstream@^10.9.0: dependencies: symbol-observable "^1.0.2" -xtend@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.0: version "3.2.1" @@ -2189,6 +2195,7 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==