From 761d73b4e72208f4a44aca3d833fbde5a3c9d26d Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Thu, 3 May 2018 09:57:02 -0700 Subject: [PATCH] chore(types): add Compiler and Compilation type support --- declarations.d.ts | 93 +++ lib/AsyncDependenciesBlock.js | 58 ++ lib/Chunk.js | 22 + lib/Compilation.js | 514 +++++++++++- lib/Compiler.js | 70 +- lib/ContextModule.js | 9 +- lib/DelegatedModule.js | 4 + lib/DependenciesBlock.js | 42 +- lib/DependenciesBlockVariable.js | 23 +- lib/Dependency.js | 3 + lib/DynamicEntryPlugin.js | 24 +- lib/EntryOptionPlugin.js | 12 + lib/JavascriptGenerator.js | 2 +- lib/Module.js | 12 +- lib/MultiEntryPlugin.js | 23 +- lib/NormalModule.js | 2 + lib/SingleEntryPlugin.js | 14 + lib/WebpackError.js | 11 +- lib/dependencies/DependencyReference.js | 9 + lib/dependencies/LoaderPlugin.js | 6 +- lib/dependencies/ModuleDependency.js | 3 + lib/dependencies/MultiEntryDependency.js | 5 + lib/dependencies/SingleEntryDependency.js | 4 + lib/optimize/ConcatenatedModule.js | 2 +- lib/util/Semaphore.js | 12 + package.json | 1 + tsconfig.json | 113 +-- yarn.lock | 914 ++++++++++------------ 28 files changed, 1376 insertions(+), 631 deletions(-) diff --git a/declarations.d.ts b/declarations.d.ts index d73b4d830..42a387af5 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -8,6 +8,99 @@ declare namespace NodeJS { } } +declare module "neo-async" { + export interface Dictionary { + [key: string]: T; + } + export type IterableCollection = T[] | IterableIterator | Dictionary; + + export interface ErrorCallback { + (err?: T): void; + } + export interface AsyncBooleanResultCallback { + (err?: E, truthValue?: boolean): void; + } + export interface AsyncResultCallback { + (err?: E, result?: T): void; + } + export interface AsyncResultArrayCallback { + (err?: E, results?: Array): void; + } + export interface AsyncResultObjectCallback { + (err: E | undefined, results: Dictionary): void; + } + + export interface AsyncFunction { + (callback: (err?: E, result?: T) => void): void; + } + export interface AsyncFunctionEx { + (callback: (err?: E, ...results: T[]) => void): void; + } + export interface AsyncIterator { + (item: T, callback: ErrorCallback): void; + } + export interface AsyncForEachOfIterator { + (item: T, key: number | string, callback: ErrorCallback): void; + } + export interface AsyncResultIterator { + (item: T, callback: AsyncResultCallback): void; + } + export interface AsyncMemoIterator { + (memo: R | undefined, item: T, callback: AsyncResultCallback): void; + } + export interface AsyncBooleanIterator { + (item: T, callback: AsyncBooleanResultCallback): void; + } + + export interface AsyncWorker { + (task: T, callback: ErrorCallback): void; + } + export interface AsyncVoidFunction { + (callback: ErrorCallback): void; + } + + export type AsyncAutoTasks, E> = { + [K in keyof R]: AsyncAutoTask + }; + export type AsyncAutoTask, E> = + | AsyncAutoTaskFunctionWithoutDependencies + | (keyof R | AsyncAutoTaskFunction)[]; + export interface AsyncAutoTaskFunctionWithoutDependencies { + (cb: AsyncResultCallback | ErrorCallback): void; + } + export interface AsyncAutoTaskFunction, E> { + (results: R, cb: AsyncResultCallback | ErrorCallback): void; + } + + export function each( + arr: IterableCollection, + iterator: AsyncIterator, + callback?: ErrorCallback + ): void; + + export function map( + arr: T[] | IterableIterator, + iterator: AsyncResultIterator, + callback?: AsyncResultArrayCallback + ): void; + export function map( + arr: Dictionary, + iterator: AsyncResultIterator, + callback?: AsyncResultArrayCallback + ): void; + + export function parallel( + tasks: Array>, + callback?: AsyncResultArrayCallback + ): void; + export function parallel( + tasks: Dictionary>, + callback?: AsyncResultObjectCallback + ): void; + + export const forEach: typeof each; +} + // There are no typings for chrome-trace-event declare module "chrome-trace-event" { interface Event { diff --git a/lib/AsyncDependenciesBlock.js b/lib/AsyncDependenciesBlock.js index 3bf22d2e2..a9c03a53f 100644 --- a/lib/AsyncDependenciesBlock.js +++ b/lib/AsyncDependenciesBlock.js @@ -5,7 +5,34 @@ "use strict"; const DependenciesBlock = require("./DependenciesBlock"); +/** + * @typedef {import("./ChunkGroup")} ChunkGroup + * @typedef {import("./Module")} Module + * @typedef {import("crypto").Hash} Hash + * @typedef {TODO} GroupOptions + * + */ + +/** + * @typedef {Object} SourcePosition + * @property {number} line + * @property {number} column + */ + +/** + * @typedef {Object} SourceLocation + * @property {number} index + * @property {SourcePosition} start + * @property {SourcePosition} end + */ + module.exports = class AsyncDependenciesBlock extends DependenciesBlock { + /** + * @param {GroupOptions} groupOptions options for the group + * @param {Module} module the Module object + * @param {SourceLocation=} loc the line of code + * @param {TODO=} request the request + */ constructor(groupOptions, module, loc, request) { super(); if (typeof groupOptions === "string") { @@ -14,28 +41,50 @@ module.exports = class AsyncDependenciesBlock extends DependenciesBlock { groupOptions = { name: undefined }; } this.groupOptions = groupOptions; + /** @type {ChunkGroup=} */ this.chunkGroup = undefined; this.module = module; this.loc = loc; this.request = request; + /** @type {DependenciesBlock} */ + this.parent = undefined; } + /** + * @returns {string} The name of the chunk + */ get chunkName() { return this.groupOptions.name; } + /** + * @param {string} value The new chunk name + * @returns {void} + */ set chunkName(value) { this.groupOptions.name = value; } + /** + * @returns {never} this throws and should never be called + */ get chunks() { throw new Error("Moved to AsyncDependenciesBlock.chunkGroup"); } + /** + * @param {never} value setter value + * @returns {never} this is going to throw therefore we should throw type + * assertions by returning never + */ set chunks(value) { throw new Error("Moved to AsyncDependenciesBlock.chunkGroup"); } + /** + * @param {Hash} hash the hash used to track block changes, from "crypto" module + * @returns {void} + */ updateHash(hash) { hash.update(JSON.stringify(this.groupOptions)); hash.update( @@ -50,16 +99,25 @@ module.exports = class AsyncDependenciesBlock extends DependenciesBlock { super.updateHash(hash); } + /** + * @returns {void} + */ disconnect() { this.chunkGroup = undefined; super.disconnect(); } + /** + * @returns {void} + */ unseal() { this.chunkGroup = undefined; super.unseal(); } + /** + * @returns {void} + */ sortItems() { super.sortItems(); } diff --git a/lib/Chunk.js b/lib/Chunk.js index f0c6f3902..a0ea24a74 100644 --- a/lib/Chunk.js +++ b/lib/Chunk.js @@ -17,6 +17,7 @@ const ERR_CHUNK_INITIAL = /** @typedef {import("./ChunkGroup")} ChunkGroup */ /** @typedef {import("./ModuleReason.js")} ModuleReason */ /** @typedef {import("webpack-sources").Source} Source */ +/** @typedef {import("crypto").Hash} Hash */ /** * @typedef {Object} Identifiable an object who contains an identifier function property @@ -471,6 +472,11 @@ class Chunk { return this.addMultiplierAndOverhead(this.modulesSize(), options); } + /** + * @param {Chunk} otherChunk the other chunk + * @param {TODO} options the options for this function + * @returns {number | false} the size, or false if it can't be integrated + */ integratedSize(otherChunk, options) { // Chunk if it's possible to integrate this chunk if (!this.canBeIntegrated(otherChunk)) { @@ -500,6 +506,9 @@ class Chunk { this.sortModules(); } + /** + * @returns {Set} a set of all the async chunks + */ getAllAsyncChunks() { const queue = new Set(); const chunks = new Set(); @@ -522,6 +531,10 @@ class Chunk { return chunks; } + /** + * @param {Hash} realHash the hash for the chunk maps + * @returns {{ hash: TODO, contentHash: TODO, name: TODO }} the chunk map information + */ getChunkMaps(realHash) { const chunkHashMap = Object.create(null); const chunkContentHashMap = Object.create(null); @@ -544,6 +557,9 @@ class Chunk { }; } + /** + * @returns {Record>>} a record object of names to lists of child ids(?) + */ getChildIdsByOrders() { const lists = new Map(); for (const group of this.groupsIterable) { @@ -600,6 +616,12 @@ class Chunk { return chunkMaps; } + /** @typedef {(module: Module) => true} FilterFn */ + + /** + * @param {FilterFn} filterFn function used to filter modules + * @returns {TODO} module map information + */ getChunkModuleMaps(filterFn) { const chunkModuleIdMap = Object.create(null); const chunkModuleHashMap = Object.create(null); diff --git a/lib/Compilation.js b/lib/Compilation.js index 5f482ba3e..2755c6f82 100644 --- a/lib/Compilation.js +++ b/lib/Compilation.js @@ -35,14 +35,93 @@ const createHash = require("./util/createHash"); const Queue = require("./util/Queue"); const SortableSet = require("./util/SortableSet"); const GraphHelpers = require("./GraphHelpers"); +const SingleEntryDependency = require("./dependencies/SingleEntryDependency"); -const byId = (a, b) => { - if (a.id < b.id) return -1; - if (a.id > b.id) return 1; +/** @typedef {import("./Module")} Module */ +/** @typedef {import("./Compiler")} Compiler */ +/** @typedef {import("webpack-sources").Source} Source */ +/** @typedef {import("./WebpackError")} WebpackError */ +/** @typedef {import("./DependenciesBlockVariable")} DependenciesBlockVariable */ +/** @typedef {import("./dependencies/SingleEntryDependency")} SingleEntryDependency */ +/** @typedef {import("./dependencies/MultiEntryDependency")} MultiEntryDependency */ +/** @typedef {import("./dependencies/DllEntryDependency")} DllEntryDependency */ +/** @typedef {import("./DependenciesBlock")} DependenciesBlock */ +/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */ + +/** @typedef {SingleEntryDependency|MultiEntryDependency|DllEntryDependency} PossibleEntryDependencies */ +/** @typedef {{[assetName: string]: Source}} CompilationAssets */ +/** @typedef {(err: Error|null, result?: Module) => void } ModuleCallback */ +/** @typedef {(err?: Error|null, result?: Module) => void } ModuleChainCallback */ +/** @typedef {(module: Module) => void} OnModuleCallback */ +/** @typedef {(err?: Error|null) => void} CompilationSealCallback */ +/** @typedef {{apply: (dep: Dependency, source: Source, runtime: RuntimeTemplate) => void}} DependencyTemplate */ +/** @typedef {(d: Dependency) => any} DepBlockVarDependenciesCallback */ +/** @typedef {new (...args: any[]) => Dependency} DepConstructor */ +/** @typedef {{apply: () => void}} Plugin */ + +/** + * @typedef {Object} ModuleFactoryCreateDataContextInfo + * @property {string} issuer + * @property {string} compiler + */ + +/** + * @typedef {Object} ModuleFactoryCreateData + * @property {ModuleFactoryCreateDataContextInfo} contextInfo + * @property {any=} resolveOptions + * @property {string} context + * @property {Dependency[]} dependencies + */ + +/** + * @typedef {Object} ModuleFactory + * @property {(data: ModuleFactoryCreateData, callback: ModuleCallback) => any} create + */ + +/** + * @typedef {Object} SortedDependency + * @property {ModuleFactory} factory + * @property {Dependency[]} dependencies + */ + +/** + * @typedef {Object} SourcePosition + * @property {number} line + * @property {number} column + */ + +/** + * @typedef {Object} SourceLocation + * @property {number} index + * @property {SourcePosition} start + * @property {SourcePosition} end + */ + +/** + * @typedef {Object} AvailableModulesChunkGroupMapping + * @property {ChunkGroup} chunkGroup + * @property {Set} availableModules + */ + +/** + * @param {Chunk} a first chunk to sort by id + * @param {Chunk} b second chunk to sort by id + * @returns {-1|0|1} sort value + */ +function byId(a, b) { + if (a.id && b.id) { + if (a.id < b.id) return -1; + if (a.id > b.id) return 1; + } return 0; -}; +} -const byIdOrIdentifier = (a, b) => { +/** + * @param {Module} a first module to sort by + * @param {Module} b second module to sort by + * @returns {-1|0|1} sort value + */ +function byIdOrIdentifier(a, b) { if (a.id < b.id) return -1; if (a.id > b.id) return 1; const identA = a.identifier(); @@ -50,9 +129,14 @@ const byIdOrIdentifier = (a, b) => { if (identA < identB) return -1; if (identA > identB) return 1; return 0; -}; +} -const byIndexOrIdentifier = (a, b) => { +/** + * @param {Module} a first module to sort by + * @param {Module} b second module to sort by + * @returns {-1|0|1} sort value + */ +function byIndexOrIdentifier(a, b) { if (a.index < b.index) return -1; if (a.index > b.index) return 1; const identA = a.identifier(); @@ -60,35 +144,59 @@ const byIndexOrIdentifier = (a, b) => { if (identA < identB) return -1; if (identA > identB) return 1; return 0; -}; +} -const byNameOrHash = (a, b) => { +/** + * @param {Compilation} a first compilation to sort by + * @param {Compilation} b second compilation to sort by + * @returns {-1|0|1} sort value + */ +function byNameOrHash(a, b) { if (a.name < b.name) return -1; if (a.name > b.name) return 1; if (a.fullHash < b.fullHash) return -1; - if (a.fullhash > b.fullHash) return 1; + if (a.fullHash > b.fullHash) return 1; return 0; -}; +} -const iterationBlockVariable = (variables, fn) => { +/** + * @param {DependenciesBlockVariable[]} variables DepBlock Variables to iterate over + * @param {DepBlockVarDependenciesCallback} fn callback to apply on iterated elements + * @returns {void} + */ +function iterationBlockVariable(variables, fn) { for ( let indexVariable = 0; indexVariable < variables.length; indexVariable++ ) { + // TODO: Remove when Dependency + DependenciesBlockVariable is typed + /** @type {Dependency[]} */ const varDep = variables[indexVariable].dependencies; for (let indexVDep = 0; indexVDep < varDep.length; indexVDep++) { fn(varDep[indexVDep]); } } -}; +} -const iterationOfArrayCallback = (arr, fn) => { +/** + * @template {T} + * @param {T[]} arr array of elements to iterate over + * @param {function(T): void} fn callback applied to each element + * @returns {void} + */ +function iterationOfArrayCallback(arr, fn) { for (let index = 0; index < arr.length; index++) { fn(arr[index]); } -}; +} +/** + * @template {T} + * @param {Set} set set to add items to + * @param {Set} otherSet set to add items from + * @returns {void} + */ function addAllToSet(set, otherSet) { for (const item of otherSet) { set.add(item); @@ -96,92 +204,156 @@ function addAllToSet(set, otherSet) { } class Compilation extends Tapable { + /** + * Creates an instance of Compilation. + * @param {Compiler} compiler the compiler which created the compilation + */ constructor(compiler) { super(); this.hooks = { + /** @type {SyncHook} */ buildModule: new SyncHook(["module"]), + /** @type {SyncHook} */ rebuildModule: new SyncHook(["module"]), + /** @type {SyncHook} */ failedModule: new SyncHook(["module", "error"]), + /** @type {SyncHook} */ succeedModule: new SyncHook(["module"]), - + /** @type {SyncHook} */ finishModules: new SyncHook(["modules"]), + /** @type {SyncHook} */ finishRebuildingModule: new SyncHook(["module"]), - + /** @type {SyncHook} */ unseal: new SyncHook([]), + /** @type {SyncHook} */ seal: new SyncHook([]), + /** @type {SyncBailHook} */ optimizeDependenciesBasic: new SyncBailHook(["modules"]), + /** @type {SyncBailHook} */ optimizeDependencies: new SyncBailHook(["modules"]), + /** @type {SyncBailHook} */ optimizeDependenciesAdvanced: new SyncBailHook(["modules"]), + /** @type {SyncBailHook} */ afterOptimizeDependencies: new SyncHook(["modules"]), + /** @type {SyncHook} */ optimize: new SyncHook([]), - + /** @type {SyncBailHook} */ optimizeModulesBasic: new SyncBailHook(["modules"]), + /** @type {SyncBailHook} */ optimizeModules: new SyncBailHook(["modules"]), + /** @type {SyncBailHook} */ optimizeModulesAdvanced: new SyncBailHook(["modules"]), + /** @type {SyncHook} */ afterOptimizeModules: new SyncHook(["modules"]), + /** @type {SyncBailHook} */ optimizeChunksBasic: new SyncBailHook(["chunks", "chunkGroups"]), + /** @type {SyncBailHook} */ optimizeChunks: new SyncBailHook(["chunks", "chunkGroups"]), + /** @type {SyncBailHook} */ optimizeChunksAdvanced: new SyncBailHook(["chunks", "chunkGroups"]), + /** @type {SyncHook} */ afterOptimizeChunks: new SyncHook(["chunks", "chunkGroups"]), + /** @type {AsyncSeriesHook} */ optimizeTree: new AsyncSeriesHook(["chunks", "modules"]), + /** @type {SyncHook} */ afterOptimizeTree: new SyncHook(["chunks", "modules"]), + /** @type {SyncBailHook} */ optimizeChunkModulesBasic: new SyncBailHook(["chunks", "modules"]), + /** @type {SyncBailHook} */ optimizeChunkModules: new SyncBailHook(["chunks", "modules"]), + /** @type {SyncBailHook} */ optimizeChunkModulesAdvanced: new SyncBailHook(["chunks", "modules"]), + /** @type {SyncHook} */ afterOptimizeChunkModules: new SyncHook(["chunks", "modules"]), + /** @type {SyncBailHook} */ shouldRecord: new SyncBailHook([]), + /** @type {SyncHook} */ reviveModules: new SyncHook(["modules", "records"]), + /** @type {SyncHook} */ optimizeModuleOrder: new SyncHook(["modules"]), + /** @type {SyncHook} */ advancedOptimizeModuleOrder: new SyncHook(["modules"]), + /** @type {SyncHook} */ beforeModuleIds: new SyncHook(["modules"]), + /** @type {SyncHook} */ moduleIds: new SyncHook(["modules"]), + /** @type {SyncHook} */ optimizeModuleIds: new SyncHook(["modules"]), + /** @type {SyncHook} */ afterOptimizeModuleIds: new SyncHook(["modules"]), + /** @type {SyncHook} */ reviveChunks: new SyncHook(["chunks", "records"]), + /** @type {SyncHook} */ optimizeChunkOrder: new SyncHook(["chunks"]), + /** @type {SyncHook} */ beforeChunkIds: new SyncHook(["chunks"]), + /** @type {SyncHook} */ optimizeChunkIds: new SyncHook(["chunks"]), + /** @type {SyncHook} */ afterOptimizeChunkIds: new SyncHook(["chunks"]), + /** @type {SyncHook} */ recordModules: new SyncHook(["modules", "records"]), + /** @type {SyncHook} */ recordChunks: new SyncHook(["chunks", "records"]), + /** @type {SyncHook} */ beforeHash: new SyncHook([]), + /** @type {SyncHook} */ contentHash: new SyncHook(["chunk"]), + /** @type {SyncHook} */ afterHash: new SyncHook([]), - + /** @type {SyncHook} */ recordHash: new SyncHook(["records"]), - + /** @type {SyncHook} */ record: new SyncHook(["compilation", "records"]), + /** @type {SyncHook} */ beforeModuleAssets: new SyncHook([]), + /** @type {SyncBailHook} */ shouldGenerateChunkAssets: new SyncBailHook([]), + /** @type {SyncHook} */ beforeChunkAssets: new SyncHook([]), + /** @type {SyncHook} */ additionalChunkAssets: new SyncHook(["chunks"]), + /** @type {AsyncSeriesHook} */ additionalAssets: new AsyncSeriesHook([]), + /** @type {AsyncSeriesHook} */ optimizeChunkAssets: new AsyncSeriesHook(["chunks"]), + /** @type {SyncHook} */ afterOptimizeChunkAssets: new SyncHook(["chunks"]), + /** @type {AsyncSeriesHook} */ optimizeAssets: new AsyncSeriesHook(["assets"]), + /** @type {SyncHook} */ afterOptimizeAssets: new SyncHook(["assets"]), + /** @type {SyncBailHook} */ needAdditionalSeal: new SyncBailHook([]), + /** @type {AsyncSeriesHook} */ afterSeal: new AsyncSeriesHook([]), + /** @type {SyncHook} */ chunkHash: new SyncHook(["chunk", "chunkHash"]), + /** @type {SyncHook} */ moduleAsset: new SyncHook(["module", "filename"]), + /** @type {SyncHook} */ chunkAsset: new SyncHook(["chunk", "filename"]), + /** @type {SyncWaterfallHook} */ assetPath: new SyncWaterfallHook(["filename", "data"]), // TODO MainTemplate + /** @type {SyncBailHook} */ needAdditionalPass: new SyncBailHook([]), + + /** @type {SyncHook} */ childCompiler: new SyncHook([ "childCompiler", "compilerName", @@ -190,11 +362,16 @@ class Compilation extends Tapable { // TODO the following hooks are weirdly located here // TODO move them for webpack 5 + /** @type {SyncHook} */ normalModuleLoader: new SyncHook(["loaderContext", "module"]), + /** @type {SyncBailHook} */ optimizeExtractedChunksBasic: new SyncBailHook(["chunks"]), + /** @type {SyncBailHook} */ optimizeExtractedChunks: new SyncBailHook(["chunks"]), + /** @type {SyncBailHook} */ optimizeExtractedChunksAdvanced: new SyncBailHook(["chunks"]), + /** @type {SyncHook} */ afterOptimizeExtractedChunks: new SyncHook(["chunks"]) }; this._pluginCompat.tap("Compilation", options => { @@ -208,7 +385,9 @@ class Compilation extends Tapable { break; } }); + /** @type {string=} */ this.name = undefined; + /** @type {Compiler} */ this.compiler = compiler; this.resolverFactory = compiler.resolverFactory; this.inputFileSystem = compiler.inputFileSystem; @@ -216,6 +395,7 @@ class Compilation extends Tapable { const options = (this.options = compiler.options); this.outputOptions = options && options.output; + /** @type {boolean=} */ this.bail = options && options.bail; this.profile = options && options.profile; this.performance = options && options.performance; @@ -237,34 +417,56 @@ class Compilation extends Tapable { this.semaphore = new Semaphore(options.parallelism || 100); this.entries = []; + /** @private @type {{name: string, request: string, module: Module}[]} */ this._preparedEntrypoints = []; this.entrypoints = new Map(); + /** @type {Chunk[]} */ this.chunks = []; + /** @type {ChunkGroup[]} */ this.chunkGroups = []; + /** @type {Map} */ this.namedChunkGroups = new Map(); + /** @type {Map} */ this.namedChunks = new Map(); + /** @type {Module[]} */ this.modules = []; + /** @private @type {Map} */ this._modules = new Map(); this.cache = null; this.records = null; + /** @type {number=} */ this.nextFreeModuleIndex = undefined; + /** @type {number=} */ this.nextFreeModuleIndex2 = undefined; + /** @type {string[]} */ this.additionalChunkAssets = []; + /** @type {CompilationAssets} */ this.assets = {}; + /** @type {WebpackError[]} */ this.errors = []; + /** @type {WebpackError[]} */ this.warnings = []; + /** @type {Compilation[]} */ this.children = []; + /** @type {Map} */ this.dependencyFactories = new Map(); + /** @type {Map} */ this.dependencyTemplates = new Map(); this.dependencyTemplates.set("hash", ""); this.childrenCounters = {}; + /** @type {Set} */ this.usedChunkIds = null; + /** @type {Set} */ this.usedModuleIds = null; + /** @type {Map=} */ this.fileTimestamps = undefined; + /** @type {Map=} */ this.contextTimestamps = undefined; + /** @type {Set} */ this.compilationDependencies = undefined; - + /** @private @type {Map} */ this._buildingModules = new Map(); + /** @private @type {Map} */ this._rebuildingModules = new Map(); } @@ -272,6 +474,12 @@ class Compilation extends Tapable { return new Stats(this); } + /** + * @param {Module} module module to be added that was created + * @param {any=} cacheGroup cacheGroup it is apart of + * @returns {{module: Module, issuer: boolean, build: boolean, dependencies: boolean}} returns meta about whether or not the module had built + * had an issuer, or any dependnecies + */ addModule(module, cacheGroup) { const identifier = module.identifier(); const alreadyAddedModule = this._modules.get(identifier); @@ -327,15 +535,30 @@ class Compilation extends Tapable { }; } + /** + * Fetches a module from a compilation by its identifier + * @param {Module} module the module provided + * @returns {Module} the module requested + */ getModule(module) { const identifier = module.identifier(); return this._modules.get(identifier); } + /** + * Attempts to search for a module by its identifier + * @param {string} identifier identifier (usually path) for module + * @returns {Module|undefined} attempt to search for module and return it, else undefined + */ findModule(identifier) { return this._modules.get(identifier); } + /** + * @param {Module} module module with its callback list + * @param {any} callback the callback function + * @returns {void} + */ waitForBuildingFinished(module, callback) { let callbackList = this._buildingModules.get(module); if (callbackList) { @@ -345,6 +568,16 @@ class Compilation extends Tapable { } } + /** + * Builds the module object + * + * @param {Module} module module to be built + * @param {boolean} optional optional flag + * @param {Module=} origin origin module this module build was requested from + * @param {Dependency[]=} dependencies optional dependencies from the module to be built + * @param {any} thisCallback the callback + * @returns {any} returns the callback function with results + */ buildModule(module, optional, origin, dependencies, thisCallback) { let callbackList = this._buildingModules.get(module); if (callbackList) { @@ -396,6 +629,11 @@ class Compilation extends Tapable { ); } + /** + * @param {Module} module to be processed for deps + * @param {*} callback callback to be triggered + * @returns {void} + */ processModuleDependencies(module, callback) { const dependencies = new Map(); @@ -457,6 +695,15 @@ class Compilation extends Tapable { ); } + /** + * @param {Module} module module to add deps to + * @param {SortedDependency[]} dependencies set of sorted dependencies to iterate through + * @param {(boolean|null)=} bail whether to bail or not + * @param {any} cacheGroup optional cacheGroup + * @param {boolean} recursive whether it is recursive traversal + * @param {function} callback callback for when dependencies are finished being added + * @returns {void} + */ addModuleDependencies( module, dependencies, @@ -623,6 +870,14 @@ class Compilation extends Tapable { ); } + /** + * + * @param {string} context context string path + * @param {Dependency} dependency dependency used to create Module chain + * @param {OnModuleCallback} onModule function invoked on modules creation + * @param {ModuleChainCallback} callback callback for when module chain is complete + * @returns {void|never} will throw if dependency instance is not a valid Dependency + */ _addModuleChain(context, dependency, onModule, callback) { const start = this.profile && Date.now(); const currentProfile = this.profile && {}; @@ -644,7 +899,10 @@ class Compilation extends Tapable { ) { throw new Error("Parameter 'dependency' must be a Dependency"); } - + // @ts-ignore + // TODO: Not sure how to handle the + // dependency.constructor error, + // maybe I typed it wrong const moduleFactory = this.dependencyFactories.get(dependency.constructor); if (!moduleFactory) { throw new Error( @@ -655,6 +913,7 @@ class Compilation extends Tapable { } this.semaphore.acquire(() => { + /** @type {ModuleFactory} */ moduleFactory.create( { contextInfo: { @@ -731,12 +990,25 @@ class Compilation extends Tapable { }); } + /** + * + * @param {string} context context path for entry + * @param {PossibleEntryDependencies} entry entry dependency being created + * @param {string} name name of entry + * @param {ModuleCallback} callback callback function + * @returns {void} returns + */ addEntry(context, entry, name, callback) { const slot = { name: name, - request: entry.request, + request: null, module: null }; + + if (entry instanceof SingleEntryDependency) { + slot.request = entry.request; + } + this._preparedEntrypoints.push(slot); this._addModuleChain( context, @@ -760,6 +1032,12 @@ class Compilation extends Tapable { ); } + /** + * @param {string} context context path string + * @param {PossibleEntryDependencies} dependency dep used to create module + * @param {ModuleCallback} callback module callback sending module up a level + * @returns {void} + */ prefetch(context, dependency, callback) { this._addModuleChain( context, @@ -831,6 +1109,10 @@ class Compilation extends Tapable { } } + /** + * @param {CompilationSealCallback} callback signals when the seal method is finishes + * @returns {void} + */ seal(callback) { this.hooks.seal.call(); @@ -970,10 +1252,19 @@ class Compilation extends Tapable { }); } + /** + * @param {Module[]} modules the modules array on compilation to perform the sort for + * @returns {void} + */ sortModules(modules) { modules.sort(byIndexOrIdentifier); } + /** + * @param {Module} module moulde to report from + * @param {DependenciesBlock[]} blocks blocks to report from + * @returns {void} + */ reportDependencyErrorsAndWarnings(module, blocks) { for (let indexBlock = 0; indexBlock < blocks.length; indexBlock++) { const block = blocks[indexBlock]; @@ -1006,6 +1297,13 @@ class Compilation extends Tapable { } } + /** + * @param {any} groupOptions options provided for group + * @param {Module} module module in question + * @param {SourceLocation} loc source location reference + * @param {string} request request string + * @returns {ChunkGroup} the chunk group added inside + */ addChunkInGroup(groupOptions, module, loc, request) { if (typeof groupOptions === "string") { groupOptions = { name: groupOptions }; @@ -1034,6 +1332,13 @@ class Compilation extends Tapable { return chunkGroup; } + /** + * This method first looks to see if a name is provided for a new chunk, + * and first looks to see if any named chunks already exist and reuse that chunk instead. + * + * @param {string=} name optional chunk name to be provided + * @returns {Chunk} create a chunk (invoked during seal event) + */ addChunk(name) { if (name) { const chunk = this.namedChunks.get(name); @@ -1049,7 +1354,15 @@ class Compilation extends Tapable { return chunk; } + /** + * @param {Module} module index will be assigned to this module + * @returns {void} + */ assignIndex(module) { + /** + * @param {Module} module assign index to the module + * @returns {void} + */ const assignIndexToModule = module => { // enter module if (typeof module.index !== "number") { @@ -1069,11 +1382,23 @@ class Compilation extends Tapable { } }; + /** + * @param {DependenciesBlock} block to assign index to + * @returns {void} + */ const assignIndexToDependencyBlock = block => { let allDependencies = []; + /** + * @param {Dependency} d iterator over dependencies + * @returns {number} returned push function value (side-effect) + */ const iteratorDependency = d => allDependencies.push(d); + /** + * @param {DependenciesBlock} b blocks to iterate + * @returns {number} returned push value from queue (side-effect) + */ const iteratorBlock = b => queue.push(() => assignIndexToDependencyBlock(b)); @@ -1104,6 +1429,10 @@ class Compilation extends Tapable { } ]; + /** + * @param {(Dependency|DependenciesBlockVariable)[]} d all dependencies of a block being added to queue + * @returns {void} + */ const iteratorAllDependencies = d => { queue.push(() => assignIndexToDependency(d)); }; @@ -1113,12 +1442,20 @@ class Compilation extends Tapable { } } + /** + * @param {Module} module module to assign depth + * @returns {void} + */ assignDepth(module) { const queue = new Set([module]); let depth; module.depth = 0; + /** + * @param {Module} module module for processeing + * @returns {void} + */ const enqueueJob = module => { const d = module.depth; if (typeof d === "number" && d <= depth) return; @@ -1126,12 +1463,20 @@ class Compilation extends Tapable { module.depth = depth; }; - const assignDepthToDependency = (dependency, depth) => { + /** + * @param {Dependency} dependency dependency to assign depth to + * @returns {void} + */ + const assignDepthToDependency = dependency => { if (dependency.module) { enqueueJob(dependency.module); } }; + /** + * @param {DependenciesBlock} block block to assign depth to + * @returns {void} + */ const assignDepthToDependencyBlock = block => { if (block.variables) { iterationBlockVariable(block.variables, assignDepthToDependency); @@ -1156,6 +1501,10 @@ class Compilation extends Tapable { } // This method creates the Chunk graph from the Module graph + /** + * @param {TODO} inputChunkGroups input chunkGroups to be processed + * @returns {void} + */ processDependenciesBlocksForChunkGroups(inputChunkGroups) { // Process is splitting into two parts: // Part one traverse the module graph and builds a very basic chunks graph @@ -1169,8 +1518,13 @@ class Compilation extends Tapable { const allCreatedChunkGroups = new Set(); // PREPARE + /** @type {Map, blocks: AsyncDependenciesBlock[]}>} */ const blockInfoMap = new Map(); + /** + * @param {Dependency} d dependency to iterate over + * @returns {void} + */ const iteratorDependency = d => { // We skip Dependencies without Reference const ref = d.getReference(); @@ -1190,12 +1544,23 @@ class Compilation extends Tapable { blockInfoModules.add(refModule); }; + /** + * @param {AsyncDependenciesBlock} b blocks to prepare + * @returns {void} + */ const iteratorBlockPrepare = b => { blockInfoBlocks.push(b); blockQueue.push(b); }; - let block, blockQueue, blockInfoModules, blockInfoBlocks; + /** @type {DependenciesBlock} */ + let block; + /** @type {DependenciesBlock[]} */ + let blockQueue; + /** @type {Set} */ + let blockInfoModules; + /** @type {AsyncDependenciesBlock[]} */ + let blockInfoBlocks; for (const module of this.modules) { blockQueue = [module]; while (blockQueue.length > 0) { @@ -1224,10 +1589,12 @@ class Compilation extends Tapable { } // PART ONE - + /** @type {Map} */ const blockChunkGroups = new Map(); // Start with the provided modules/chunks + /** @type {{block: DependenciesBlock, module: Module, chunk: Chunk, chunkGroup: ChunkGroup}[]} */ + const queue = inputChunkGroups.map(chunkGroup => ({ block: chunkGroup.chunks[0].entryModule, module: chunkGroup.chunks[0].entryModule, @@ -1235,9 +1602,18 @@ class Compilation extends Tapable { chunkGroup })); - let module, chunk, chunkGroup; + /** @type {Module} */ + let module; + /** @type {Chunk} */ + let chunk; + /** @type {ChunkGroup} */ + let chunkGroup; // For each async Block in graph + /** + * @param {AsyncDependenciesBlock} b iterating over each Async DepBlock + * @returns {void} + */ const iteratorBlock = b => { // 1. We create a chunk for this Block // but only once (blockChunkGroups map) @@ -1315,9 +1691,10 @@ class Compilation extends Tapable { } // PART TWO - + /** @type {Set} */ let availableModules; let newAvailableModules; + /** @type {Queue} */ const queue2 = new Queue( inputChunkGroups.map(chunkGroup => ({ chunkGroup, @@ -1325,7 +1702,13 @@ class Compilation extends Tapable { })) ); - // Helper function to check if all modules of a chunk are available + /** + * Helper function to check if all modules of a chunk are available + * + * @param {ChunkGroup} chunkGroup the chunkGroup to scan + * @param {Set} availableModules the comparitor set + * @returns {boolean} return true if all modules of a chunk are available + */ const areModulesAvailable = (chunkGroup, availableModules) => { for (const chunk of chunkGroup.chunks) { for (const module of chunk.modulesIterable) { @@ -1336,14 +1719,18 @@ class Compilation extends Tapable { }; // For each edge in the basic chunk graph + /** + * @param {TODO} dep the dependency used for filtering + * @returns {boolean} used to filter "edges" (aka Dependencies) that were pointing + * to modules that are already available. Also filters circular dependencies in the chunks graph + */ const filterFn = dep => { - // Filter egdes that are not needed because all modules are already available - // This also filters circular dependencies in the chunks graph const depChunkGroup = dep.chunkGroup; if (areModulesAvailable(depChunkGroup, newAvailableModules)) return false; // break all modules are already available return true; }; + /** @type {Map>} */ const minAvailableModulesMap = new Map(); // Iterative traversing of the basic chunk graph @@ -1425,6 +1812,12 @@ class Compilation extends Tapable { } } + /** + * + * @param {Module} module module relationship for removal + * @param {DependenciesBlock} block //TODO: good description + * @returns {void} + */ removeReasonsOfDependencyBlock(module, block) { const iteratorDependency = d => { if (!d.module) { @@ -1452,6 +1845,11 @@ class Compilation extends Tapable { } } + /** + * @param {Module} module module to patch tie + * @param {Chunk} chunk chunk to patch tie + * @returns {void} + */ patchChunksAfterReasonRemoval(module, chunk) { if (!module.hasReasons()) { this.removeReasonsOfDependencyBlock(module, module); @@ -1463,6 +1861,12 @@ class Compilation extends Tapable { } } + /** + * + * @param {DependenciesBlock} block block tie for Chunk + * @param {Chunk} chunk chunk to remove from dep + * @returns {void} + */ removeChunkFromDependencies(block, chunk) { const iteratorDependency = d => { if (!d.module) { @@ -1473,12 +1877,15 @@ class Compilation extends Tapable { const blocks = block.blocks; for (let indexBlock = 0; indexBlock < blocks.length; indexBlock++) { - const chunks = blocks[indexBlock].chunks; + // Grab all chunks from the first Block's AsyncDepBlock + const chunks = blocks[indexBlock].chunkGroup.chunks; + // For each chunk in chunkGroup for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) { - const blockChunk = chunks[indexChunk]; - chunk.removeChunk(blockChunk); - blockChunk.removeParent(chunk); - this.removeChunkFromDependencies(chunks, blockChunk); + const iteratedChunk = chunks[indexChunk]; + block.chunkGroup.removeChunk(iteratedChunk); + block.chunkGroup.removeParent(iteratedChunk); + // Recurse + this.removeChunkFromDependencies(block, iteratedChunk); } } @@ -1539,6 +1946,7 @@ class Compilation extends Tapable { } applyChunkIds() { + /** @type {Set} */ const usedIds = new Set(); // Get used ids from usedChunkIds property (i. e. from records) @@ -1568,11 +1976,15 @@ class Compilation extends Tapable { // Calculate maximum assigned chunk id let nextFreeChunkId = -1; for (const id of usedIds) { + if (typeof id !== "number") { + continue; + } nextFreeChunkId = Math.max(nextFreeChunkId, id); } nextFreeChunkId++; // Determine free chunk ids from 0 to maximum + /** @type {number[]} */ const unusedIds = []; if (nextFreeChunkId > 0) { let index = nextFreeChunkId; @@ -1630,6 +2042,16 @@ class Compilation extends Tapable { chunks[indexChunk].sortItems(true); } + /** + * Used to sort errors and warnings in compilation. this.warnings, and + * this.errors contribute to the compilation hash and therefore shoudl be + * updated whenever other references (having a chunk id) are sorted. This preserves the hash + * integrity + * + * @param {WebpackError} a first WebpackError instance (including subclasses) + * @param {WebpackError} b second WebpackError instance (including subclasses) + * @returns {-1|0|1} sort order index + */ const byMessage = (a, b) => { const ma = `${a.message}`; const mb = `${b.message}`; @@ -1746,6 +2168,10 @@ class Compilation extends Tapable { this.hash = this.fullHash.substr(0, hashDigestLength); } + /** + * @param {TODO} update //TODO (update hash function?) + * @returns {void} + */ modifyHash(update) { const outputOptions = this.outputOptions; const hashFunction = outputOptions.hashFunction; @@ -1839,12 +2265,27 @@ class Compilation extends Tapable { } } + /** + * @param {string} filename used to get asset path with hash + * @param {TODO=} data // TODO: figure out this param type + * @returns {TODO} figure out this return type + */ getPath(filename, data) { data = data || {}; data.hash = data.hash || this.hash; return this.mainTemplate.getAssetPath(filename, data); } + /** + * This function allows you to run another instance of webpack inside of webpack however as + * a child with different settings and configurations (if desired) applied. It copies all hooks, plugins + * from parent (or top level compiler) and creates a child Compilation + * + * @param {string} name name of the child compiler + * @param {TODO} outputOptions // Need to convert config schema to types for this + * @param {Plugin[]} plugins webpack plugins that will be applied + * @returns {Compiler} creates a child Compiler instance + */ createChildCompiler(name, outputOptions, plugins) { const idx = this.childrenCounters[name] || 0; this.childrenCounters[name] = idx + 1; @@ -1858,6 +2299,7 @@ class Compilation extends Tapable { } checkConstraints() { + /** @type {Set} */ const usedIds = new Set(); const modules = this.modules; diff --git a/lib/Compiler.js b/lib/Compiler.js index e7805c4b3..3066d22ce 100644 --- a/lib/Compiler.js +++ b/lib/Compiler.js @@ -26,38 +26,92 @@ const RequestShortener = require("./RequestShortener"); const { makePathsRelative } = require("./util/identifier"); const ConcurrentCompilationError = require("./ConcurrentCompilationError"); +/** + * @typedef {Object} CompilationParams + * @property {NormalModuleFactory} normalModuleFactory + * @property {ContextModuleFactory} contextModuleFactory + * @property {Set} compilationDependencies + */ + +/** @typedef {string|string[]} EntryValues */ +/** @typedef {{[entryKey: string]: EntryValues}} EntryOptionValues */ +/** @typedef {(() => EntryOptionValues) | EntryOptionValues | EntryValues} EntryOptions */ + class Compiler extends Tapable { constructor(context) { super(); this.hooks = { + /** @type {SyncBailHook} */ shouldEmit: new SyncBailHook(["compilation"]), + + /** @type {AsyncSeriesHook} */ done: new AsyncSeriesHook(["stats"]), + + /** @type {AsyncSeriesHook<>} */ additionalPass: new AsyncSeriesHook([]), - beforeRun: new AsyncSeriesHook(["compilation"]), - run: new AsyncSeriesHook(["compilation"]), + + /** @type {AsyncSeriesHook} */ + beforeRun: new AsyncSeriesHook(["compiler"]), + + /** @type {AsyncSeriesHook} */ + run: new AsyncSeriesHook(["compiler"]), + + /** @type {AsyncSeriesHook} */ emit: new AsyncSeriesHook(["compilation"]), + + /** @type {AsyncSeriesHook} */ afterEmit: new AsyncSeriesHook(["compilation"]), + + /** @type {SyncHook} */ thisCompilation: new SyncHook(["compilation", "params"]), + + /** @type {SyncHook} */ compilation: new SyncHook(["compilation", "params"]), + + /** @type {SyncHook} */ normalModuleFactory: new SyncHook(["normalModuleFactory"]), + + /** @type {SyncHook} */ contextModuleFactory: new SyncHook(["contextModulefactory"]), + + /** @type {AsyncSeriesHook} */ beforeCompile: new AsyncSeriesHook(["params"]), + + /** @type {SyncHook} */ compile: new SyncHook(["params"]), + + /** @type {AsyncParallelHook} */ make: new AsyncParallelHook(["compilation"]), + + /** @type {AsyncSeriesHook} */ afterCompile: new AsyncSeriesHook(["compilation"]), + + /** @type {AsyncSeriesHook} */ watchRun: new AsyncSeriesHook(["compiler"]), + + /** @type {SyncHook} */ failed: new SyncHook(["error"]), + + /** @type {SyncHook} */ invalid: new SyncHook(["filename", "changeTime"]), + + /** @type {SyncHook} */ watchClose: new SyncHook([]), // TODO the following hooks are weirdly located here // TODO move them for webpack 5 + /** @type {SyncHook} */ environment: new SyncHook([]), + /** @type {SyncHook} */ afterEnvironment: new SyncHook([]), + /** @type {SyncHook} */ afterPlugins: new SyncHook(["compiler"]), + /** @type {SyncHook} */ afterResolvers: new SyncHook(["compiler"]), + /** @type {SyncBailHook} */ entryOption: new SyncBailHook(["context", "entry"]) }; + this._pluginCompat.tap("Compiler", options => { switch (options.name) { case "additional-pass": @@ -74,19 +128,26 @@ class Compiler extends Tapable { } }); + /** @type {string=} */ this.name = undefined; + /** @type {Compilation=} */ this.parentCompilation = undefined; + /** @type {string} */ this.outputPath = ""; + this.outputFileSystem = null; this.inputFileSystem = null; + /** @type {string|null} */ this.recordsInputPath = null; + /** @type {string|null} */ this.recordsOutputPath = null; this.records = {}; - + /** @type {Map} */ this.fileTimestamps = new Map(); + /** @type {Map} */ this.contextTimestamps = new Map(); - + /** @type {ResolverFactory} */ this.resolverFactory = new ResolverFactory(); // TODO remove in webpack 5 @@ -135,6 +196,7 @@ class Compiler extends Tapable { this.requestShortener = new RequestShortener(context); + /** @type {boolean} */ this.running = false; } diff --git a/lib/ContextModule.js b/lib/ContextModule.js index fd186bc90..2b201fdc8 100644 --- a/lib/ContextModule.js +++ b/lib/ContextModule.js @@ -8,6 +8,7 @@ const util = require("util"); const { OriginalSource, RawSource } = require("webpack-sources"); const Module = require("./Module"); const AsyncDependenciesBlock = require("./AsyncDependenciesBlock"); +const ModuleDependency = require("./dependencies/ModuleDependency"); const Template = require("./Template"); class ContextModule extends Module { @@ -645,10 +646,10 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`; const initialSize = 160; // if we dont have dependencies we stop here. - return this.dependencies.reduce( - (size, dependency) => size + 5 + dependency.userRequest.length, - initialSize - ); + return this.dependencies.reduce((size, dependency) => { + if (dependency instanceof ModuleDependency) + return size + 5 + dependency.userRequest.length; + }, initialSize); } } diff --git a/lib/DelegatedModule.js b/lib/DelegatedModule.js index c25605424..3abe062c1 100644 --- a/lib/DelegatedModule.js +++ b/lib/DelegatedModule.js @@ -11,6 +11,8 @@ const WebpackMissingModule = require("./dependencies/WebpackMissingModule"); const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency"); const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency"); +/** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */ + class DelegatedModule extends Module { constructor(sourceRequest, data, type, userRequest, originalRequest) { super("javascript/dynamic", null); @@ -48,6 +50,8 @@ class DelegatedModule extends Module { this.built = true; this.buildMeta = Object.assign({}, this.delegateData.buildMeta); this.buildInfo = {}; + /** @type {ModuleDependency[]=} */ + this.dependencies = []; this.addDependency(new DelegatedSourceDependency(this.sourceRequest)); this.addDependency( new DelegatedExportsDependency(this, this.delegateData.exports || true) diff --git a/lib/DependenciesBlock.js b/lib/DependenciesBlock.js index 037118f57..cd25f2621 100644 --- a/lib/DependenciesBlock.js +++ b/lib/DependenciesBlock.js @@ -6,23 +6,46 @@ const DependenciesBlockVariable = require("./DependenciesBlockVariable"); -/** @typedef {import("./ChunkGroup")} ChunkGroup */ +/** + * @typedef {import("./ChunkGroup")} ChunkGroup + * @typedef {import("./Dependency")} Dependency + * @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock + * @typedef {import("./DependenciesBlockVariable")} DependenciesBlockVariable + * @typedef {(d: Dependency) => boolean} DependencyFilterFunction + * @typedef {import("crypto").Hash} Hash + */ class DependenciesBlock { constructor() { + /** @type {Dependency[]} */ this.dependencies = []; + /** @type {AsyncDependenciesBlock[]} */ this.blocks = []; + /** @type {DependenciesBlockVariable[]} */ this.variables = []; // TODO remove this line, it's wrong /** @type {ChunkGroup=} */ this.chunkGroup = undefined; } + /** + * Adds a DependencyBlock to DependencyBlock relationship. + * This is used for when a Module has a AsyncDependencyBlock tie (for code-splitting) + * + * @param {AsyncDependenciesBlock} block block being added + * @returns {void} + */ addBlock(block) { this.blocks.push(block); block.parent = this; } + /** + * @param {string} name name of dependency + * @param {string} expression expression string for variable + * @param {Dependency[]} dependencies dependency instances tied to variable + * @returns {void} + */ addVariable(name, expression, dependencies) { for (let v of this.variables) { if (v.name === name && v.expression === expression) { @@ -34,15 +57,28 @@ class DependenciesBlock { ); } + /** + * @param {Dependency} dependency dependency being tied to block. + * This is an "edge" pointing to another "node" on module graph. + * @returns {void} + */ addDependency(dependency) { this.dependencies.push(dependency); } + /** + * @param {Dependency} dependency dependency being removed + * @returns {void} + */ removeDependency(dependency) { const idx = this.dependencies.indexOf(dependency); if (idx >= 0) this.dependencies.splice(idx, 1); } + /** + * @param {Hash} hash the hash used to track dependencies, from "crypto" module + * @returns {void} + */ updateHash(hash) { for (const dep of this.dependencies) dep.updateHash(hash); for (const block of this.blocks) block.updateHash(hash); @@ -59,6 +95,10 @@ class DependenciesBlock { for (const block of this.blocks) block.unseal(); } + /** + * @param {DependencyFilterFunction} filter filter function for dependencies, gets passed all dependency ties from current instance + * @returns {boolean} returns boolean for filter + */ hasDependencies(filter) { if (filter) { for (const dep of this.dependencies) { diff --git a/lib/DependenciesBlockVariable.js b/lib/DependenciesBlockVariable.js index abb990b44..0573502c1 100644 --- a/lib/DependenciesBlockVariable.js +++ b/lib/DependenciesBlockVariable.js @@ -6,13 +6,29 @@ const { RawSource, ReplaceSource } = require("webpack-sources"); +/** @typedef {import("./Dependency")} Dependency */ +/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ +/** @typedef {import("crypto").Hash} Hash */ +/** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */ +/** @typedef {Map} DependencyFactoryConstruction */ + class DependenciesBlockVariable { + /** + * Creates an instance of DependenciesBlockVariable. + * @param {string} name name of DependenciesBlockVariable + * @param {string} expression expression string + * @param {Dependency[]=} dependencies dependencies tied to this varaiable + */ constructor(name, expression, dependencies) { this.name = name; this.expression = expression; this.dependencies = dependencies || []; } + /** + * @param {Hash} hash hash for instance to update + * @returns {void} + */ updateHash(hash) { hash.update(this.name); hash.update(this.expression); @@ -21,8 +37,13 @@ class DependenciesBlockVariable { } } + /** + * @param {DependencyFactoryConstruction} dependencyTemplates Dependency constructors and templates Map. + * @param {RuntimeTemplate} runtimeTemplate runtimeTemplate to generate expression souce + * @returns {ReplaceSource} returns constructed source for expression via templates + */ expressionSource(dependencyTemplates, runtimeTemplate) { - const source = new ReplaceSource(new RawSource(this.expression)); + const source = new ReplaceSource(new RawSource(this.expression), null); for (const dep of this.dependencies) { const template = dependencyTemplates.get(dep.constructor); if (!template) diff --git a/lib/Dependency.js b/lib/Dependency.js index a5a5c23e2..f031f13b0 100644 --- a/lib/Dependency.js +++ b/lib/Dependency.js @@ -7,8 +7,11 @@ const compareLocations = require("./compareLocations"); const DependencyReference = require("./dependencies/DependencyReference"); +/** @typedef {import("./Module")} Module */ + class Dependency { constructor() { + /** @type {Module|null} */ this.module = null; this.weak = false; this.optional = false; diff --git a/lib/DynamicEntryPlugin.js b/lib/DynamicEntryPlugin.js index 38a5dbb3f..ec8633f5d 100644 --- a/lib/DynamicEntryPlugin.js +++ b/lib/DynamicEntryPlugin.js @@ -10,12 +10,25 @@ const MultiModuleFactory = require("./MultiModuleFactory"); const MultiEntryPlugin = require("./MultiEntryPlugin"); const SingleEntryPlugin = require("./SingleEntryPlugin"); +/** @typedef {import("./Compiler")} Compiler */ +/** @typedef {string|string[]} EntryValues */ +/** @typedef {{[entryKey: string]: EntryValues | EntryValues}} EntryOptionValues */ +/** @typedef {(() => (EntryOptionValues|EntryValues))} EntryOptionValuesFunction */ + class DynamicEntryPlugin { + /** + * @param {string} context the context path + * @param {EntryOptionValuesFunction} entry the entry value + */ constructor(context, entry) { this.context = context; this.entry = entry; } + /** + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ apply(compiler) { compiler.hooks.compilation.tap( "DynamicEntryPlugin", @@ -36,6 +49,11 @@ class DynamicEntryPlugin { compiler.hooks.make.tapAsync( "DynamicEntryPlugin", (compilation, callback) => { + /** + * @param {string|string[]} entry entry value or array of entry values + * @param {string} name name of entry + * @returns {Promise} returns the promise resolving the Compilation#addEntry function + */ const addEntry = (entry, name) => { const dep = DynamicEntryPlugin.createDependency(entry, name); return new Promise((resolve, reject) => { @@ -63,7 +81,11 @@ class DynamicEntryPlugin { } module.exports = DynamicEntryPlugin; - +/** + * @param {string|string[]} entry entry value or array of entry paths + * @param {string} name name of entry + * @returns {SingleEntryDependency|MultiEntryDependency} returns dep + */ DynamicEntryPlugin.createDependency = (entry, name) => { if (Array.isArray(entry)) return MultiEntryPlugin.createDependency(entry, name); diff --git a/lib/EntryOptionPlugin.js b/lib/EntryOptionPlugin.js index c8c3ce755..e992bc2c9 100644 --- a/lib/EntryOptionPlugin.js +++ b/lib/EntryOptionPlugin.js @@ -8,6 +8,14 @@ const SingleEntryPlugin = require("./SingleEntryPlugin"); const MultiEntryPlugin = require("./MultiEntryPlugin"); const DynamicEntryPlugin = require("./DynamicEntryPlugin"); +/** @typedef {import("./Compiler")} Compiler */ + +/** + * @param {string} context context path + * @param {string | string[]} item entry array or single path + * @param {string} name entry key name + * @returns {SingleEntryPlugin | MultiEntryPlugin} returns either a single or multi entry plugin + */ const itemToPlugin = (context, item, name) => { if (Array.isArray(item)) { return new MultiEntryPlugin(context, item, name); @@ -16,6 +24,10 @@ const itemToPlugin = (context, item, name) => { }; module.exports = class EntryOptionPlugin { + /** + * @param {Compiler} compiler the compiler instance one is tapping into + * @returns {void} + */ apply(compiler) { compiler.hooks.entryOption.tap("EntryOptionPlugin", (context, entry) => { if (typeof entry === "string" || Array.isArray(entry)) { diff --git a/lib/JavascriptGenerator.js b/lib/JavascriptGenerator.js index 167a628c7..b233c93cb 100644 --- a/lib/JavascriptGenerator.js +++ b/lib/JavascriptGenerator.js @@ -18,7 +18,7 @@ class JavascriptGenerator { return new RawSource("throw new Error('No source available');"); } - const source = new ReplaceSource(originalSource); + const source = new ReplaceSource(originalSource, null); this.sourceBlock( module, diff --git a/lib/Module.js b/lib/Module.js index 72f258572..b42ef3835 100644 --- a/lib/Module.js +++ b/lib/Module.js @@ -11,8 +11,14 @@ const ModuleReason = require("./ModuleReason"); const SortableSet = require("./util/SortableSet"); const Template = require("./Template"); +<<<<<<< HEAD /** @typedef {import("./Chunk")} Chunk */ /** @typedef {import("./RequestShortener")} RequestShortener */ +======= +/** @typedef {typeof import("./Chunk")} Chunk */ +/** @typedef {typeof import("./RequestShortener")} RequestShortener */ +/** @typedef {import("./WebpackError")} WebpackError */ +>>>>>>> 206d1a6... chore(types): add Compiler and Compilation type support const EMPTY_RESOLVE_OPTIONS = {}; @@ -47,15 +53,15 @@ class Module extends DependenciesBlock { this.renderedHash = undefined; // Info from Factory - /** @type {object} */ + /** @type {any} */ this.resolveOptions = EMPTY_RESOLVE_OPTIONS; /** @type {object} */ this.factoryMeta = {}; // Info from Build - /** @type {Error[]} */ + /** @type {WebpackError[]} */ this.warnings = []; - /** @type {Error[]} */ + /** @type {WebpackError[]} */ this.errors = []; /** @type {object} */ this.buildMeta = undefined; diff --git a/lib/MultiEntryPlugin.js b/lib/MultiEntryPlugin.js index 29e806429..853ee399d 100644 --- a/lib/MultiEntryPlugin.js +++ b/lib/MultiEntryPlugin.js @@ -8,13 +8,25 @@ const MultiEntryDependency = require("./dependencies/MultiEntryDependency"); const SingleEntryDependency = require("./dependencies/SingleEntryDependency"); const MultiModuleFactory = require("./MultiModuleFactory"); -module.exports = class MultiEntryPlugin { +/** @typedef {import("./Compiler")} Compiler */ + +class MultiEntryPlugin { + /** + * The MultiEntryPlugin is invoked whenever this.options.entry value is an array of paths + * @param {string} context context path + * @param {string[]} entries array of entry paths + * @param {string} name entry key name + */ constructor(context, entries, name) { this.context = context; this.entries = entries; this.name = name; } + /** + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ apply(compiler) { compiler.hooks.compilation.tap( "MultiEntryPlugin", @@ -43,6 +55,11 @@ module.exports = class MultiEntryPlugin { ); } + /** + * @param {string[]} entries each entry path string + * @param {string} name name of the entry + * @return {MultiEntryDependency} returns a constructed Dependency + */ static createDependency(entries, name) { return new MultiEntryDependency( entries.map((e, idx) => { @@ -55,4 +72,6 @@ module.exports = class MultiEntryPlugin { name ); } -}; +} + +module.exports = MultiEntryPlugin; diff --git a/lib/NormalModule.js b/lib/NormalModule.js index 125c21c2b..0d2712bcd 100644 --- a/lib/NormalModule.js +++ b/lib/NormalModule.js @@ -218,6 +218,8 @@ class NormalModule extends Module { } if (Buffer.isBuffer(source)) { + // @ts-ignore + // TODO We need to fix @types/webpack-sources to allow RawSource to take a Buffer | string return new RawSource(source); } diff --git a/lib/SingleEntryPlugin.js b/lib/SingleEntryPlugin.js index 755a6b597..e049abc2a 100644 --- a/lib/SingleEntryPlugin.js +++ b/lib/SingleEntryPlugin.js @@ -5,13 +5,27 @@ "use strict"; const SingleEntryDependency = require("./dependencies/SingleEntryDependency"); +/** @typedef {import("./Compiler")} Compiler */ + class SingleEntryPlugin { + /** + * An entry plugin which will handle + * creation of the SingleEntryDependency + * + * @param {string} context context path + * @param {string} entry entry path + * @param {string} name entry key name + */ constructor(context, entry, name) { this.context = context; this.entry = entry; this.name = name; } + /** + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ apply(compiler) { compiler.hooks.compilation.tap( "SingleEntryPlugin", diff --git a/lib/WebpackError.js b/lib/WebpackError.js index 4fd233881..adc3671c0 100644 --- a/lib/WebpackError.js +++ b/lib/WebpackError.js @@ -4,11 +4,16 @@ */ "use strict"; -module.exports = class WebpackError extends Error { +class WebpackError extends Error { constructor(message) { super(message); this.details = undefined; + this.missing = undefined; + this.origin = undefined; + this.dependencies = undefined; + this.module = undefined; + this.message = undefined; Error.captureStackTrace(this, this.constructor); } @@ -16,4 +21,6 @@ module.exports = class WebpackError extends Error { inspect() { return this.stack + (this.details ? `\n${this.details}` : ""); } -}; +} + +module.exports = WebpackError; diff --git a/lib/dependencies/DependencyReference.js b/lib/dependencies/DependencyReference.js index 656b64218..6334d7937 100644 --- a/lib/dependencies/DependencyReference.js +++ b/lib/dependencies/DependencyReference.js @@ -4,7 +4,16 @@ */ "use strict"; +/** @typedef {import('../Module')} Module */ + class DependencyReference { + /** + * Creates an instance of DependencyReference. + * @param {Module} module module there reference comes from + * @param {string[]|boolean} importedNames imported names or boolean + * @param {boolean} weak is weak reference or not + * @memberof DependencyReference + */ constructor(module, importedNames, weak) { this.module = module; // true: full object diff --git a/lib/dependencies/LoaderPlugin.js b/lib/dependencies/LoaderPlugin.js index efce35e6a..8c49a6d44 100644 --- a/lib/dependencies/LoaderPlugin.js +++ b/lib/dependencies/LoaderPlugin.js @@ -5,6 +5,7 @@ "use strict"; const LoaderDependency = require("./LoaderDependency"); +const NormalModule = require("../NormalModule"); class LoaderPlugin { apply(compiler) { @@ -51,11 +52,10 @@ class LoaderPlugin { err => { compilation.semaphore.acquire(() => { if (err) return callback(err); - if (!dep.module) return callback(new Error("Cannot load the module")); - - if (dep.module.error) return callback(dep.module.error); + if (dep.module instanceof NormalModule && dep.module.error) + return callback(dep.module.error); if (!dep.module._source) throw new Error( "The module created for a LoaderDependency must have a property _source" diff --git a/lib/dependencies/ModuleDependency.js b/lib/dependencies/ModuleDependency.js index 992d86534..f325e7a98 100644 --- a/lib/dependencies/ModuleDependency.js +++ b/lib/dependencies/ModuleDependency.js @@ -6,6 +6,9 @@ const Dependency = require("../Dependency"); class ModuleDependency extends Dependency { + /** + * @param {string} request request path which needs resolving + */ constructor(request) { super(); this.request = request; diff --git a/lib/dependencies/MultiEntryDependency.js b/lib/dependencies/MultiEntryDependency.js index a075eb318..712d3ff1f 100644 --- a/lib/dependencies/MultiEntryDependency.js +++ b/lib/dependencies/MultiEntryDependency.js @@ -3,9 +3,14 @@ Author Tobias Koppers @sokra */ "use strict"; +/** @typedef {import("./SingleEntryDependency")} SingleEntryDependency */ const Dependency = require("../Dependency"); class MultiEntryDependency extends Dependency { + /** + * @param {SingleEntryDependency[]} dependencies an array of SingleEntryDependencies + * @param {string} name entry name + */ constructor(dependencies, name) { super(); this.dependencies = dependencies; diff --git a/lib/dependencies/SingleEntryDependency.js b/lib/dependencies/SingleEntryDependency.js index 387975dc8..b269fb60f 100644 --- a/lib/dependencies/SingleEntryDependency.js +++ b/lib/dependencies/SingleEntryDependency.js @@ -6,8 +6,12 @@ const ModuleDependency = require("./ModuleDependency"); class SingleEntryDependency extends ModuleDependency { + /** + * @param {string} request request path for entry + */ constructor(request) { super(request); + this.request = request; } get type() { diff --git a/lib/optimize/ConcatenatedModule.js b/lib/optimize/ConcatenatedModule.js index 5b744261a..6a002ab0b 100644 --- a/lib/optimize/ConcatenatedModule.js +++ b/lib/optimize/ConcatenatedModule.js @@ -621,7 +621,7 @@ class ConcatenatedModule extends Module { }); const globalScope = scopeManager.acquire(ast); const moduleScope = globalScope.childScopes[0]; - const resultSource = new ReplaceSource(source); + const resultSource = new ReplaceSource(source, null); info.ast = ast; info.internalSource = source; info.source = resultSource; diff --git a/lib/util/Semaphore.js b/lib/util/Semaphore.js index 359378056..b75bc2c92 100644 --- a/lib/util/Semaphore.js +++ b/lib/util/Semaphore.js @@ -5,12 +5,24 @@ "use strict"; class Semaphore { + /** + * Creates an instance of Semaphore. + * + * @param {number} available the amount available number of "tasks" + * in the Semaphore + */ constructor(available) { this.available = available; + /** @type {(() => void)[]} */ this.waiters = []; + /** @private */ this._continue = this._continue.bind(this); } + /** + * @param {function(): void} callback function block to capture and run + * @returns {void} + */ acquire(callback) { if (this.available > 0) { this.available--; diff --git a/package.json b/package.json index f67472e72..ffd6b4f43 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "devDependencies": { "@types/node": "^9.6.4", "@types/tapable": "^1.0.1", + "@types/webpack-sources": "^0.1.4", "benchmark": "^2.1.1", "bundle-loader": "~0.5.0", "codacy-coverage": "^2.0.1", diff --git a/tsconfig.json b/tsconfig.json index c55aa8145..c8dfaaada 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,62 +1,65 @@ { - "compilerOptions": { - /* Basic Options */ - "target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - "lib": ["es2017", "dom"], /* Specify library files to be included in the compilation. */ - "allowJs": true, /* Allow javascript files to be compiled. */ - "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "removeComments": true, /* Do not emit comments to output. */ - "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + "compilerOptions": { + /* Basic Options */ + "target": + "ES2017" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, + "module": + "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + "lib": [ + "es2017", + "dom" + ] /* Specify library files to be included in the compilation. */, + "allowJs": true /* Allow javascript files to be compiled. */, + "checkJs": true /* Report errors in .js files. */, + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "removeComments": true, /* Do not emit comments to output. */ + "noEmit": true /* Do not emit outputs. */, + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": false, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + /* Strict Type-Checking Options */ + "strict": false /* Enable all strict type-checking options. */, + // "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true /* Enable strict null checks. */, + // "strictFunctionTypes": true /* Enable strict checking of function types. */, + // "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": ["node"], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": [ + "node" + ] /* Type declaration files to be included in compilation. */, + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + /* Source Map Options */ + // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - }, - "include": [ - "declarations.d.ts", - "bin/*.js", - "lib/**/*.js" - ] + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + }, + "include": ["declarations.d.ts", "bin/*.js", "lib/**/*.js"] } diff --git a/yarn.lock b/yarn.lock index 56a5a9bb5..9060b0dcf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,8 +3,14 @@ "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.38" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2" + version "7.0.0-beta.46" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz#e0d002100805daab1461c0fcb32a07e304f3a4f4" + dependencies: + "@babel/highlight" "7.0.0-beta.46" + +"@babel/highlight@7.0.0-beta.46": + version "7.0.0-beta.46" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.46.tgz#c553c51e65f572bdedd6eff66fc0bb563016645e" dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -20,14 +26,30 @@ dependencies: "@types/babel-types" "*" +"@types/node@*": + version "10.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.0.8.tgz#37b4d91d4e958e4c2ba0be2b86e7ed4ff19b0858" + "@types/node@^9.6.4": - version "9.6.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.6.tgz#439b91f9caf3983cad2eef1e11f6bedcbf9431d2" + version "9.6.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.15.tgz#8a5a313ea0a43a95277235841be5d3f5fb3dfeda" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" "@types/tapable@^1.0.1": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd" +"@types/webpack-sources@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.4.tgz#a52f1cec41e4d24b3df0bf87e8a538945f6d493f" + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + "@webassemblyjs/ast@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.4.3.tgz#3b3f6fced944d8660273347533e6d4d315b5934a" @@ -209,21 +231,17 @@ acorn@^4.0.4, acorn@~4.0.2: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.5.0: +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" -acorn@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" - ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" ajv-keywords@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" ajv@^4.9.1: version "4.11.8" @@ -242,13 +260,13 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: json-schema-traverse "^0.3.0" ajv@^6.1.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" + version "6.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" dependencies: - fast-deep-equal "^1.0.0" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" - uri-js "^3.0.2" + uri-js "^4.2.1" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" @@ -282,25 +300,12 @@ 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, ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" -ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -443,9 +448,9 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -atob@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" +atob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" autoprefixer@^6.3.1: version "6.7.7" @@ -479,8 +484,8 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: js-tokens "^3.0.2" babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -492,19 +497,19 @@ babel-core@^6.0.0, babel-core@^6.26.0: babel-traverse "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" + convert-source-map "^1.5.1" + debug "^2.6.9" json5 "^0.5.1" lodash "^4.17.4" minimatch "^3.0.4" path-is-absolute "^1.0.1" - private "^0.1.7" + private "^0.1.8" slash "^1.0.0" - source-map "^0.5.6" + source-map "^0.5.7" babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -512,7 +517,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.17.4" - source-map "^0.5.6" + source-map "^0.5.7" trim-right "^1.0.1" babel-helpers@^6.24.1: @@ -522,12 +527,12 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.0.0-alpha.5.tgz#acf85d6e69b96755fb8f89542251349718620615" +babel-jest@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.0.0-charlie.1.tgz#275dc7da10420b0da7df54e11e5b21a3daa3581a" dependencies: babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.0.0-alpha.5" + babel-preset-jest "^23.0.0-charlie.1" babel-messages@^6.23.0: version "6.23.0" @@ -535,14 +540,6 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" - dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" - babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -552,19 +549,19 @@ babel-plugin-istanbul@^4.1.6: istanbul-lib-instrument "^1.10.1" test-exclude "^4.2.1" -babel-plugin-jest-hoist@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.0.0-alpha.5.tgz#d3ac1b55cfcf78d1418629b5cbd8f82d97f1545e" +babel-plugin-jest-hoist@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.0.0-charlie.1.tgz#2a6d15cb609443158d61eb01ca63ed08edd2c46b" babel-plugin-syntax-object-rest-spread@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" -babel-preset-jest@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.0.0-alpha.5.tgz#2acb14805bfcb73b4884e8fadc776bae26e30a50" +babel-preset-jest@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.0.0-charlie.1.tgz#188ac3695737c1f8e76b1737e3064d2d8c783141" dependencies: - babel-plugin-jest-hoist "^23.0.0-alpha.5" + babel-plugin-jest-hoist "^23.0.0-charlie.1" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-register@^6.26.0: @@ -668,12 +665,6 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.x: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -903,8 +894,14 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000830" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000830.tgz#6e45255b345649fd15ff59072da1e12bb3de2f13" + version "1.0.30000840" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000840.tgz#68d5a0f0694c92180b0d82e720d70f8e61366604" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" caseless@~0.11.0: version "0.11.0" @@ -931,7 +928,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -939,22 +936,6 @@ chalk@^2.0.0, chalk@^2.3.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - character-parser@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-1.2.1.tgz#c0dde4ab182713b919b970959a123ecc1a30fcd6" @@ -996,8 +977,8 @@ chrome-trace-event@^0.1.1: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz#d395af2d31c87b90a716c831fe326f69768ec084" ci-info@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1057,8 +1038,8 @@ cliui@^2.1.0: wordwrap "0.0.2" cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -1168,9 +1149,9 @@ commander@^2.9.0, commander@^2.x: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" commander@~2.6.0: version "2.6.0" @@ -1181,8 +1162,8 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" compare-versions@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" + version "3.2.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.2.0.tgz#f36f23aacc539da0e3e0f71af46ce5b953a6ae76" component-emitter@^1.2.1: version "1.2.1" @@ -1234,15 +1215,11 @@ content-disposition@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" -content-type-parser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - content-type@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.4.0, convert-source-map@^1.5.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -1274,8 +1251,8 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0, core-js@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + version "2.5.6" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1292,8 +1269,8 @@ coveralls@^2.11.2: request "2.79.0" create-ecdh@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.1.tgz#44223dfed533193ba5ba54e0df5709b89acf1f82" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" dependencies: bn.js "^4.1.0" elliptic "^6.0.0" @@ -1481,11 +1458,19 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" + dependencies: + abab "^1.0.4" + whatwg-mimetype "^2.0.0" + whatwg-url "^6.4.0" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@^2.1.2, 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" dependencies: @@ -1605,8 +1590,8 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" diffie-hellman@^5.0.0: version "5.0.3" @@ -1636,9 +1621,9 @@ domexception@^1.0.0: dependencies: webidl-conversions "^4.0.2" -duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -1656,8 +1641,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.2.7: - version "1.3.42" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz#95c33bf01d0cc405556aec899fe61fd4d76ea0f9" + version "1.3.45" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz#458ac1b1c5c760ce8811a16d2bfbd97ec30bafb8" elliptic@^6.0.0: version "6.4.0" @@ -1708,8 +1693,8 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" es-abstract@^1.5.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -1749,15 +1734,15 @@ escodegen@1.8.x: source-map "~0.2.0" escodegen@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.5.6" + source-map "~0.6.1" eslint-config-prettier@^2.9.0: version "2.9.0" @@ -1943,16 +1928,16 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.0.0-alpha.5.tgz#514d9f37b77c86f7d4386c2116de2abce795284c" +expect@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.0.0-charlie.1.tgz#c6c40f6c0a12c49d1830f5d2315b2a2c937cd206" dependencies: ansi-styles "^3.2.0" - jest-diff "^23.0.0-alpha.5" + jest-diff "^23.0.0-charlie.1" jest-get-type "^22.1.0" - jest-matcher-utils "^23.0.0-alpha.5" - jest-message-util "^23.0.0-alpha.5" - jest-regex-util "^23.0.0-alpha.5" + jest-matcher-utils "^23.0.0-charlie.1" + jest-message-util "^23.0.0-charlie.1" + jest-regex-util "^23.0.0-charlie.1" express@~4.13.1: version "4.13.4" @@ -2040,6 +2025,10 @@ fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + fast-diff@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" @@ -2106,12 +2095,12 @@ fileset@^2.0.2: minimatch "^3.0.3" fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -2248,37 +2237,13 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fsevents@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.2.tgz#4f598f0f69b273188ef4a62ca4e9e08ace314bbf" +fsevents@^1.1.2, fsevents@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" dependencies: nan "^2.9.2" node-pre-gyp "^0.9.0" -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2374,8 +2339,8 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: path-is-absolute "^1.0.0" globals@^11.0.1: - version "11.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc" + version "11.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" globals@^9.18.0: version "9.18.0" @@ -2455,10 +2420,6 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2514,7 +2475,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hawk@3.1.3, hawk@~3.1.3: +hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -2556,8 +2517,8 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" 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" + version "2.6.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" html-comment-regex@^1.1.0: version "1.1.1" @@ -2605,10 +2566,10 @@ iconv-lite@0.4.19: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: - safer-buffer "^2.1.0" + safer-buffer ">= 2.1.2 < 3" icss-replace-symbols@^1.1.0: version "1.1.0" @@ -2668,7 +2629,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, 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" @@ -2700,8 +2661,8 @@ inquirer@^3.0.6: through "^2.3.6" invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: loose-envify "^1.0.0" @@ -3018,8 +2979,8 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + version "1.3.2" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.2.tgz#b2cfe6d15ae6a28ee282e7a823b8e9faa235e6cf" dependencies: async "^2.1.4" compare-versions "^3.1.0" @@ -3029,15 +2990,11 @@ istanbul-api@^1.3.1: istanbul-lib-instrument "^1.10.1" istanbul-lib-report "^1.1.4" istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" + istanbul-reports "^1.4.0" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" - istanbul-lib-coverage@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" @@ -3060,18 +3017,6 @@ istanbul-lib-instrument@^1.10.1: istanbul-lib-coverage "^1.2.0" semver "^5.3.0" -istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" - istanbul-lib-report@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" @@ -3081,16 +3026,6 @@ istanbul-lib-report@^1.1.4: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - istanbul-lib-source-maps@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" @@ -3101,9 +3036,9 @@ istanbul-lib-source-maps@^1.2.4: rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" +istanbul-reports@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.4.0.tgz#3d7b44b912ecbe7652a603662b962120739646a1" dependencies: handlebars "^4.0.3" @@ -3148,14 +3083,14 @@ jade@^1.11.0: with "~4.0.0" jest-changed-files@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" dependencies: throat "^4.0.0" jest-cli@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.0.0-alpha.5.tgz#713d38a20f046a595e4411ff9c3c26f7cc05b202" + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.0.0-charlie.1.tgz#71b797f31079d1b9717d1b0800cf14d219a0b1b4" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" @@ -3165,23 +3100,23 @@ jest-cli@^23.0.0-alpha.5: import-local "^1.0.0" is-ci "^1.0.10" istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" jest-changed-files "^22.2.0" - jest-config "^23.0.0-alpha.5" - jest-environment-jsdom "^23.0.0-alpha.5" + jest-config "^23.0.0-charlie.1" + jest-environment-jsdom "^23.0.0-charlie.1" jest-get-type "^22.1.0" - jest-haste-map "^23.0.0-alpha.5" - jest-message-util "^23.0.0-alpha.5" - jest-regex-util "^23.0.0-alpha.5" - jest-resolve-dependencies "^23.0.0-alpha.5" - jest-runner "^23.0.0-alpha.5" - jest-runtime "^23.0.0-alpha.5" - jest-snapshot "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" - jest-validate "^23.0.0-alpha.5" - jest-worker "^23.0.0-alpha.5" + jest-haste-map "^23.0.0-charlie.1" + jest-message-util "^23.0.0-charlie.1" + jest-regex-util "^23.0.0-charlie.1" + jest-resolve-dependencies "^23.0.0-charlie.1" + jest-runner "^23.0.0-charlie.1" + jest-runtime "^23.0.0-charlie.1" + jest-snapshot "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" + jest-validate "^23.0.0-charlie.1" + jest-worker "^23.0.0-charlie.1" micromatch "^2.3.11" node-notifier "^5.2.1" realpath-native "^1.0.0" @@ -3192,103 +3127,104 @@ jest-cli@^23.0.0-alpha.5: which "^1.2.12" yargs "^11.0.0" -jest-config@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.0.0-alpha.5.tgz#8e3aab4fdd36dedcc17b4462e74313b201740e8a" +jest-config@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.0.0-charlie.1.tgz#848c809bca16492d7648012508e8fdfa54330e2a" dependencies: babel-core "^6.0.0" - babel-jest "^23.0.0-alpha.5" + babel-jest "^23.0.0-charlie.1" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^23.0.0-alpha.5" - jest-environment-node "^23.0.0-alpha.5" + jest-environment-jsdom "^23.0.0-charlie.1" + jest-environment-node "^23.0.0-charlie.1" jest-get-type "^22.1.0" - jest-jasmine2 "^23.0.0-alpha.5" - jest-regex-util "^23.0.0-alpha.5" - jest-resolve "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" - jest-validate "^23.0.0-alpha.5" - pretty-format "^23.0.0-alpha.5" + jest-jasmine2 "^23.0.0-charlie.1" + jest-regex-util "^23.0.0-charlie.1" + jest-resolve "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" + jest-validate "^23.0.0-charlie.1" + pretty-format "^23.0.0-charlie.1" -jest-diff@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.0.0-alpha.5.tgz#65c40a2f83ae763167f3b22cbe546d11e879fd21" +jest-diff@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.0.0-charlie.1.tgz#d5a9c4c38c9b6fb33e6d8b88d1fb77b62d67382e" dependencies: chalk "^2.0.1" diff "^3.2.0" jest-get-type "^22.1.0" - pretty-format "^23.0.0-alpha.5" + pretty-format "^23.0.0-charlie.1" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" jest-docblock@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.0.0-alpha.5.tgz#5703be9552c971eb21a6d127ba61a0aef00376e4" +jest-environment-jsdom@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.0.0-charlie.1.tgz#c32276008d476522fd3dfba0b380077aa7cbd067" dependencies: - jest-mock "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" + jest-mock "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" jsdom "^11.5.1" -jest-environment-node@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.0.0-alpha.5.tgz#a843ff68af484289493366923ed9c3fb13df38bd" +jest-environment-node@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.0.0-charlie.1.tgz#51b2473cd60bad82541afafbcfdd8b1847f2b79f" dependencies: - jest-mock "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" + jest-mock "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" jest-get-type@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-haste-map@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.0.0-alpha.5.tgz#6602742b99a4a90f40775560b44294455acd55cd" +jest-haste-map@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.0.0-charlie.1.tgz#1194d9707201947d563d39aa6e33a18ce40f29b9" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" jest-docblock "^22.4.0" - jest-serializer "^22.4.0" - jest-worker "^23.0.0-alpha.5" + jest-serializer "^23.0.0-charlie.1" + jest-worker "^23.0.0-charlie.1" micromatch "^2.3.11" sane "^2.0.0" -jest-jasmine2@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.0.0-alpha.5.tgz#99757191bdadd54885217b239a9d2dc3045cd4c8" +jest-jasmine2@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.0.0-charlie.1.tgz#db47ca9e697434990bc21d710bfbfb5047fcd4a6" dependencies: chalk "^2.0.1" co "^4.6.0" - expect "^23.0.0-alpha.5" + expect "^23.0.0-charlie.1" graceful-fs "^4.1.11" is-generator-fn "^1.0.0" - jest-diff "^23.0.0-alpha.5" - jest-matcher-utils "^23.0.0-alpha.5" - jest-message-util "^23.0.0-alpha.5" - jest-snapshot "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" + jest-diff "^23.0.0-charlie.1" + jest-matcher-utils "^23.0.0-charlie.1" + jest-message-util "^23.0.0-charlie.1" + jest-snapshot "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" + pretty-format "^23.0.0-charlie.1" source-map-support "^0.5.0" -jest-leak-detector@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.0.0-alpha.5.tgz#0f35047e4734671c676e7e95661cd0e8a6c4fdfb" +jest-leak-detector@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.0.0-charlie.1.tgz#1a89f816da34f422014bf59ae02bc87f17a34d53" dependencies: - pretty-format "^23.0.0-alpha.5" + pretty-format "^23.0.0-charlie.1" -jest-matcher-utils@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.0.0-alpha.5.tgz#300c31dde2fa3402f0b217add320cb7f101fa627" +jest-matcher-utils@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.0.0-charlie.1.tgz#6f568348689a67c86fc9232975fcc98658d47e8a" dependencies: chalk "^2.0.1" jest-get-type "^22.1.0" - pretty-format "^23.0.0-alpha.5" + pretty-format "^23.0.0-charlie.1" jest-message-util@^22.4.3: version "22.4.3" @@ -3300,9 +3236,9 @@ jest-message-util@^22.4.3: slash "^1.0.0" stack-utils "^1.0.1" -jest-message-util@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.0.0-alpha.5.tgz#72e56d5ffb196c1fc018a6c7ac49b94ddc5bf974" +jest-message-util@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.0.0-charlie.1.tgz#22ad4999659015443bf27ec6c4c50f560a0a1900" dependencies: "@babel/code-frame" "^7.0.0-beta.35" chalk "^2.0.1" @@ -3310,62 +3246,63 @@ jest-message-util@^23.0.0-alpha.5: slash "^1.0.0" stack-utils "^1.0.1" -jest-mock@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.0.0-alpha.5.tgz#3c3ad13f69019ed3002ad84a8fded5676fc2ab4a" +jest-mock@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.0.0-charlie.1.tgz#0729d27217b3c96a03687f67e508816b42b9e07b" -jest-regex-util@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.0.0-alpha.5.tgz#6dbe0dcb23c9389a2f979c7e293ead3e91052e14" +jest-regex-util@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.0.0-charlie.1.tgz#b85c25e0e879e4c5c11bd66996a820a487b08b23" -jest-resolve-dependencies@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.0.0-alpha.5.tgz#5f371c22d35e3fb3d5e2ed0f580bff60b8f0f144" +jest-resolve-dependencies@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.0.0-charlie.1.tgz#d37ef78c397af73103cf66b73a58872d693fd394" dependencies: - jest-regex-util "^23.0.0-alpha.5" - jest-snapshot "^23.0.0-alpha.5" + jest-regex-util "^23.0.0-charlie.1" + jest-snapshot "^23.0.0-charlie.1" -jest-resolve@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.0.0-alpha.5.tgz#31f484b3c6fa2c2be112092e0da4d898e482b95a" +jest-resolve@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.0.0-charlie.1.tgz#8ec756ee559da2c0c99fd2fda8ac796b245542c8" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" realpath-native "^1.0.0" -jest-runner@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.0.0-alpha.5.tgz#bc18404f0ad7016c2b641908240face3ca16c117" +jest-runner@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.0.0-charlie.1.tgz#6a20b50ded3e6aadc19b4c45d0bbb962ec37dfaa" dependencies: exit "^0.1.2" - jest-config "^23.0.0-alpha.5" + jest-config "^23.0.0-charlie.1" jest-docblock "^22.4.0" - jest-haste-map "^23.0.0-alpha.5" - jest-jasmine2 "^23.0.0-alpha.5" - jest-leak-detector "^23.0.0-alpha.5" - jest-message-util "^23.0.0-alpha.5" - jest-runtime "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" - jest-worker "^23.0.0-alpha.5" + jest-haste-map "^23.0.0-charlie.1" + jest-jasmine2 "^23.0.0-charlie.1" + jest-leak-detector "^23.0.0-charlie.1" + jest-message-util "^23.0.0-charlie.1" + jest-runtime "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" + jest-worker "^23.0.0-charlie.1" throat "^4.0.0" -jest-runtime@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.0.0-alpha.5.tgz#8a8def856cf9be87d154f13b47d6e2551e0a55ac" +jest-runtime@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.0.0-charlie.1.tgz#322bc1e28d21af7528ca9ab9b74d93eccf7f6af8" dependencies: babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.5" + babel-plugin-istanbul "^4.1.6" chalk "^2.0.1" convert-source-map "^1.4.0" exit "^0.1.2" graceful-fs "^4.1.11" - jest-config "^23.0.0-alpha.5" - jest-haste-map "^23.0.0-alpha.5" - jest-regex-util "^23.0.0-alpha.5" - jest-resolve "^23.0.0-alpha.5" - jest-snapshot "^23.0.0-alpha.5" - jest-util "^23.0.0-alpha.5" - jest-validate "^23.0.0-alpha.5" + jest-config "^23.0.0-charlie.1" + jest-haste-map "^23.0.0-charlie.1" + jest-message-util "^23.0.0-charlie.1" + jest-regex-util "^23.0.0-charlie.1" + jest-resolve "^23.0.0-charlie.1" + jest-snapshot "^23.0.0-charlie.1" + jest-util "^23.0.0-charlie.1" + jest-validate "^23.0.0-charlie.1" json-stable-stringify "^1.0.1" micromatch "^2.3.11" realpath-native "^1.0.0" @@ -3374,9 +3311,9 @@ jest-runtime@^23.0.0-alpha.5: write-file-atomic "^2.1.0" yargs "^11.0.0" -jest-serializer@^22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566" +jest-serializer@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.0-charlie.1.tgz#c73288c67ed332bc9b80743f0ffe98baa665de08" jest-silent-reporter@0.0.4: version "0.0.4" @@ -3385,16 +3322,16 @@ jest-silent-reporter@0.0.4: chalk "^2.3.1" jest-util "^22.3.0" -jest-snapshot@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.0.0-alpha.5.tgz#98ba2e55c2dca0837782a83bcfd880d125f7d849" +jest-snapshot@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.0.0-charlie.1.tgz#ecccf8fd657ed3b1107e0cf6df5f5bf05cb84dca" dependencies: chalk "^2.0.1" - jest-diff "^23.0.0-alpha.5" - jest-matcher-utils "^23.0.0-alpha.5" + jest-diff "^23.0.0-charlie.1" + jest-matcher-utils "^23.0.0-charlie.1" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^23.0.0-alpha.5" + pretty-format "^23.0.0-charlie.1" jest-util@^22.3.0: version "22.4.3" @@ -3408,31 +3345,30 @@ jest-util@^22.3.0: mkdirp "^0.5.1" source-map "^0.6.0" -jest-util@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.0.0-alpha.5.tgz#2ac78c3d6c9e459cae7c100e028f271f954b4b15" +jest-util@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.0.0-charlie.1.tgz#e7efe9bbd1fd3647ce5699df7b2e8c2091968f6a" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" is-ci "^1.0.10" - jest-message-util "^23.0.0-alpha.5" + jest-message-util "^23.0.0-charlie.1" mkdirp "^0.5.1" source-map "^0.6.0" -jest-validate@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.0.0-alpha.5.tgz#c95ec2032b0971af8baa0978de67598ccffdaa8d" +jest-validate@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.0.0-charlie.1.tgz#6895138a0a22366ad5624691631a8ae2896a3fae" dependencies: chalk "^2.0.1" - jest-config "^23.0.0-alpha.5" jest-get-type "^22.1.0" leven "^2.1.0" - pretty-format "^23.0.0-alpha.5" + pretty-format "^23.0.0-charlie.1" -jest-worker@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.0.0-alpha.5.tgz#003d3b106b126070c5c563b20d48cf2141df0f44" +jest-worker@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.0.0-charlie.1.tgz#ac8212ee454808a21b617a72a3c7678a3b29b0e6" dependencies: merge-stream "^1.0.1" @@ -3470,20 +3406,13 @@ js-yaml@3.6.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@3.x, js-yaml@^3.9.1: +js-yaml@3.x, js-yaml@^3.7.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.7.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -3496,23 +3425,22 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsdom@^11.5.1: - version "11.6.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.0.tgz#7334781595ee8bdeea9742fc33fab5cdad6d195f" + version "11.10.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.10.0.tgz#a42cd54e88895dc765f03f15b807a474962ac3b5" dependencies: abab "^1.0.4" acorn "^5.3.0" acorn-globals "^4.1.0" array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.2" cssom ">= 0.3.2 < 0.4.0" cssstyle ">= 0.2.37 < 0.3.0" + data-urls "^1.0.0" domexception "^1.0.0" escodegen "^1.9.0" html-encoding-sniffer "^1.0.2" left-pad "^1.2.0" nwmatcher "^1.4.3" - parse5 "^4.0.0" + parse5 "4.0.0" pn "^1.1.0" request "^2.83.0" request-promise-native "^1.0.5" @@ -3522,6 +3450,7 @@ jsdom@^11.5.1: w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" whatwg-url "^6.4.0" ws "^4.0.0" xml-name-validator "^3.0.0" @@ -3638,8 +3567,8 @@ leb@^0.3.0: resolved "https://registry.yarnpkg.com/leb/-/leb-0.3.0.tgz#32bee9fad168328d6aea8522d833f4180eed1da3" left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" less-loader@^4.0.3: version "4.1.0" @@ -3727,14 +3656,10 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.13.1, lodash@^4.17.4, lodash@^4.3.0: +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" -lodash@^4.14.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -3758,8 +3683,8 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: js-tokens "^3.0.0" lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -3769,8 +3694,8 @@ macaddress@^0.2.8: resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" make-dir@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: pify "^3.0.0" @@ -3794,6 +3719,10 @@ math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -3836,7 +3765,7 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.1.5, micromatch@^2.3.11: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -3909,7 +3838,7 @@ 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" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", 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" dependencies: @@ -3928,8 +3857,8 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" minipass@^2.2.1, minipass@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.4.tgz#03c824d84551ec38a8d1bb5bc350a5a30a354a40" + version "2.3.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.0.tgz#2e11b1c46df7fe7f1afbe9a490280add21ffe384" dependencies: safe-buffer "^5.1.1" yallist "^3.0.0" @@ -3962,7 +3891,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3991,7 +3920,7 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0, nan@^2.9.2: +nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" @@ -4017,8 +3946,8 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" needle@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.0.tgz#f14efc69cee1024b72c8b21c7bdf94a731dc12fa" + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" dependencies: debug "^2.1.2" iconv-lite "^0.4.4" @@ -4080,22 +4009,6 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - node-pre-gyp@^0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" @@ -4133,7 +4046,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -4187,8 +4100,8 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" nwmatcher@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" @@ -4242,7 +4155,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -4362,7 +4275,7 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse5@^4.0.0: +parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -4717,12 +4630,12 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 supports-color "^3.2.3" postcss@^6.0.1: - version "6.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d" + version "6.0.22" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" dependencies: - chalk "^2.3.2" + chalk "^2.4.1" source-map "^0.6.1" - supports-color "^5.3.0" + supports-color "^5.4.0" prelude-ls@~1.1.2: version "1.1.2" @@ -4740,14 +4653,14 @@ prettier@^1.11.1: version "1.12.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" -pretty-format@^23.0.0-alpha.5: - version "23.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.0-alpha.5.tgz#49441032994ce2b1cfa74531c1c9d9a36fe59e90" +pretty-format@^23.0.0-charlie.1: + version "23.0.0-charlie.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.0-charlie.1.tgz#cb5fde20ad5f5d2e38197c5f07340e694233e986" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -private@^0.1.7: +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -4927,10 +4840,10 @@ pump@^2.0.0, pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + version "1.5.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.0.tgz#30c905a26c88fa0074927af07256672b474b1c15" dependencies: - duplexify "^3.5.3" + duplexify "^3.6.0" inherits "^2.0.3" pump "^2.0.0" @@ -4963,8 +4876,8 @@ qs@~6.4.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" query-string@^4.1.0: version "4.3.4" @@ -4981,12 +4894,13 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + 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.0.6" @@ -5056,7 +4970,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, 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: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -5098,8 +5012,8 @@ reduce-function-call@^1.0.1: balanced-match "^0.4.2" regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" regenerator-runtime@^0.11.0: version "0.11.1" @@ -5320,7 +5234,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -5333,6 +5247,10 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -5355,7 +5273,7 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, 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" @@ -5365,23 +5283,24 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" sane@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.3.0.tgz#3f3df584abf69e63d4bb74f0f8c42468e4d7d46b" + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" dependencies: - anymatch "^1.3.0" + anymatch "^2.0.0" + capture-exit "^1.2.0" exec-sh "^0.2.0" fb-watchman "^2.0.0" - minimatch "^3.0.2" + micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" watch "~0.18.0" optionalDependencies: - fsevents "^1.1.1" + fsevents "^1.2.3" sax@^1.2.4, sax@~1.2.1: version "1.2.4" @@ -5577,10 +5496,10 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -5593,9 +5512,10 @@ source-map-support@^0.4.15: source-map "^0.5.6" source-map-support@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5" + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" dependencies: + buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: @@ -5608,7 +5528,7 @@ source-map@0.4.x, source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -5628,19 +5548,27 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -5710,12 +5638,12 @@ stream-each@^1.1.0: stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" + version "2.8.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.3.3" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -5806,15 +5734,9 @@ supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -supports-color@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: has-flag "^3.0.0" @@ -5849,49 +5771,18 @@ tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - tar@^4: - version "4.4.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.1.tgz#b25d5a8470c976fd7a9a8a350f42c59e9fa81749" + version "4.4.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" minipass "^2.2.4" minizlib "^1.1.0" mkdirp "^0.5.0" - safe-buffer "^5.1.1" + safe-buffer "^5.1.2" yallist "^3.0.2" -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - test-exclude@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" @@ -5981,19 +5872,13 @@ topo@2.x.x: dependencies: hoek "4.x.x" -tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" -tough-cookie@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.0: +tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" dependencies: @@ -6047,18 +5932,18 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" typescript@^2.9.0-dev.20180511: - version "2.9.0-dev.20180511" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.0-dev.20180511.tgz#e864f6b9bf9e7f654d26f5401e74b76871f5a8e2" + version "2.9.0-insiders.20180510" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.0-insiders.20180510.tgz#2f9c37b904ddd8f8151e5eb25be11a3c4744b13f" ua-parser-js@^0.7.9: - version "0.7.17" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + version "0.7.18" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + version "3.3.10" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" dependencies: - commander "~2.13.0" + commander "~2.14.1" source-map "~0.6.1" uglify-js@^2.4.19, uglify-js@^2.6, uglify-js@^2.6.1: @@ -6082,8 +5967,8 @@ uglify-to-browserify@~1.0.0: resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" uglifyjs-webpack-plugin@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" + version "1.2.5" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -6094,14 +5979,6 @@ uglifyjs-webpack-plugin@^1.2.4: webpack-sources "^1.1.0" worker-farm "^1.5.2" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -6152,9 +6029,9 @@ upath@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.5.tgz#02cab9ecebe95bbec6d5fc2566325725ab6d1a73" -uri-js@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" +uri-js@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" dependencies: punycode "^2.1.0" @@ -6215,11 +6092,11 @@ val-loader@^1.0.2: loader-utils "^1.0.0" 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" + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" vary@~1.0.1: version "1.0.1" @@ -6284,7 +6161,7 @@ webassemblyjs@1.4.3: "@webassemblyjs/wast-parser" "1.4.3" long "^3.2.0" -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -6315,13 +6192,17 @@ whatwg-fetch@>=0.10.0: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" +whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + version "6.4.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.1.tgz#fdb94b440fd4ad836202c16e9737d511f012fd67" dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" whet.extend@~0.9.9: version "0.9.9" @@ -6412,12 +6293,11 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f" + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" - ultron "~1.1.0" xml-name-validator@^3.0.0: version "3.0.0" @@ -6456,8 +6336,8 @@ yargs-parser@^9.0.2: camelcase "^4.1.0" yargs@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" dependencies: cliui "^4.0.0" decamelize "^1.1.1"