diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0223101a0..fd2d2a126 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v1 with: - node-version: 14.x + node-version: 16.x - id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 @@ -43,7 +43,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v1 with: - node-version: 14.x + node-version: 16.x - id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 @@ -66,7 +66,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v1 with: - node-version: 14.x + node-version: 16.x - id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 @@ -93,10 +93,10 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [10.x, 14.x] + node-version: [10.x, 16.x] include: - os: ubuntu-latest - node-version: 15.x + node-version: 14.x - os: ubuntu-latest node-version: 12.x runs-on: ${{ matrix.os }} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ec5901b8d..ba7955bed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,7 +8,7 @@ jobs: steps: - task: NodeTool@0 inputs: - versionSpec: "^14.0.0" + versionSpec: "^16.0.0" displayName: "Install Node.js" - script: | curl -o- -L https://yarnpkg.com/install.sh | bash @@ -111,8 +111,8 @@ jobs: node_version: ^10.13.0 node-12: node_version: ^12.4.0 - node-14: - node_version: ^14.0.0 + node-16: + node_version: ^16.0.0 steps: - task: NodeTool@0 inputs: @@ -161,8 +161,8 @@ jobs: node_version: ^12.4.0 node-14: node_version: ^14.0.0 - node-15: - node_version: ^15.0.0 + node-16: + node_version: ^16.0.0 steps: - task: NodeTool@0 inputs: @@ -212,8 +212,8 @@ jobs: matrix: node-12: node_version: ^12.4.0 - node-14: - node_version: ^14.0.0 + node-16: + node_version: ^16.0.0 steps: - task: NodeTool@0 inputs: diff --git a/declarations.d.ts b/declarations.d.ts index 93ef79424..4e5d72a50 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -373,6 +373,23 @@ declare module "browserslist" { export = browserslist; } +// TODO remove that when @types/estree is updated +declare type PrivateIdentifierNode = { + type: "PrivateIdentifier"; + name: string; + loc?: import("estree").SourceLocation | null; + range?: [number, number]; +}; +declare type PropertyDefinitionNode = { + type: "PropertyDefinition"; + key: import("estree").Expression | PrivateIdentifierNode; + value: import("estree").Expression | null; + computed: boolean; + static: boolean; + loc?: import("estree").SourceLocation | null; + range?: [number, number]; +}; + type TODO = any; type RecursiveArrayOrRecord = diff --git a/declarations/WebpackOptions.d.ts b/declarations/WebpackOptions.d.ts index 672b49978..194ad7704 100644 --- a/declarations/WebpackOptions.d.ts +++ b/declarations/WebpackOptions.d.ts @@ -969,6 +969,10 @@ export interface FileCacheOptions { * Name for the cache. Different names will lead to different coexisting caches. */ name?: string; + /** + * Track and log detailed timing information for individual cache items. + */ + profile?: boolean; /** * When to store data to the filesystem. (pack: Store data when compiler is idle in a single file). */ diff --git a/lib/ChunkGraph.js b/lib/ChunkGraph.js index c9dbc8e5d..2ab52c3ec 100644 --- a/lib/ChunkGraph.js +++ b/lib/ChunkGraph.js @@ -10,7 +10,6 @@ const Entrypoint = require("./Entrypoint"); const ModuleGraphConnection = require("./ModuleGraphConnection"); const { first } = require("./util/SetHelpers"); const SortableSet = require("./util/SortableSet"); -const StringXor = require("./util/StringXor"); const { compareModulesById, compareIterables, @@ -40,6 +39,8 @@ const { /** @type {ReadonlySet} */ const EMPTY_SET = new Set(); +const ZERO_BIG_INT = BigInt(0); + const compareModuleIterables = compareIterables(compareModulesByIdentifier); /** @typedef {(c: Chunk, chunkGraph: ChunkGraph) => boolean} ChunkFilterPredicate */ @@ -1373,8 +1374,41 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza return runtimeRequirements === undefined ? EMPTY_SET : runtimeRequirements; } + /** + * @param {Module} module the module + * @param {RuntimeSpec} runtime the runtime + * @param {boolean} withConnections include connections + * @returns {string} hash + */ getModuleGraphHash(module, runtime, withConnections = true) { const cgm = this._getChunkGraphModule(module); + return withConnections + ? this._getModuleGraphHashWithConnections(cgm, module, runtime) + : this._getModuleGraphHashBigInt(cgm, module, runtime).toString(16); + } + + /** + * @param {Module} module the module + * @param {RuntimeSpec} runtime the runtime + * @param {boolean} withConnections include connections + * @returns {bigint} hash + */ + getModuleGraphHashBigInt(module, runtime, withConnections = true) { + const cgm = this._getChunkGraphModule(module); + return withConnections + ? BigInt( + `0x${this._getModuleGraphHashWithConnections(cgm, module, runtime)}` + ) + : this._getModuleGraphHashBigInt(cgm, module, runtime); + } + + /** + * @param {ChunkGraphModule} cgm the ChunkGraphModule + * @param {Module} module the module + * @param {RuntimeSpec} runtime the runtime + * @returns {bigint} hash as big int + */ + _getModuleGraphHashBigInt(cgm, module, runtime) { if (cgm.graphHashes === undefined) { cgm.graphHashes = new RuntimeSpecMap(); } @@ -1383,38 +1417,72 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza hash.update(`${cgm.id}`); hash.update(`${this.moduleGraph.isAsync(module)}`); this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime); - return /** @type {string} */ (hash.digest("hex")); + return BigInt(`0x${/** @type {string} */ (hash.digest("hex"))}`); }); - if (!withConnections) return graphHash; + return graphHash; + } + + /** + * @param {ChunkGraphModule} cgm the ChunkGraphModule + * @param {Module} module the module + * @param {RuntimeSpec} runtime the runtime + * @returns {string} hash + */ + _getModuleGraphHashWithConnections(cgm, module, runtime) { if (cgm.graphHashesWithConnections === undefined) { cgm.graphHashesWithConnections = new RuntimeSpecMap(); } const activeStateToString = state => { - if (state === false) return "false"; - if (state === true) return "true"; - if (state === ModuleGraphConnection.TRANSITIVE_ONLY) return "transitive"; + if (state === false) return "F"; + if (state === true) return "T"; + if (state === ModuleGraphConnection.TRANSITIVE_ONLY) return "O"; throw new Error("Not implemented active state"); }; const strict = module.buildMeta && module.buildMeta.strictHarmonyModule; return cgm.graphHashesWithConnections.provide(runtime, () => { + const graphHash = this._getModuleGraphHashBigInt( + cgm, + module, + runtime + ).toString(16); const connections = this.moduleGraph.getOutgoingConnections(module); + /** @type {Set} */ + const activeNamespaceModules = new Set(); /** @type {Map>} */ const connectedModules = new Map(); - for (const connection of connections) { - let stateInfo; - if (typeof runtime === "string") { + const processConnection = (connection, stateInfo) => { + const module = connection.module; + stateInfo += module.getExportsType(this.moduleGraph, strict); + // cspell:word Tnamespace + if (stateInfo === "Tnamespace") activeNamespaceModules.add(module); + else { + const oldModule = connectedModules.get(stateInfo); + if (oldModule === undefined) { + connectedModules.set(stateInfo, module); + } else if (oldModule instanceof Set) { + oldModule.add(module); + } else if (oldModule !== module) { + connectedModules.set(stateInfo, new Set([oldModule, module])); + } + } + }; + if (runtime === undefined || typeof runtime === "string") { + for (const connection of connections) { const state = connection.getActiveState(runtime); if (state === false) continue; - stateInfo = activeStateToString(state); - } else { + processConnection(connection, state === true ? "T" : "O"); + } + } else { + // cspell:word Tnamespace + for (const connection of connections) { const states = new Set(); - stateInfo = ""; + let stateInfo = ""; forEachRuntime( runtime, runtime => { const state = connection.getActiveState(runtime); states.add(state); - stateInfo += runtime + activeStateToString(state); + stateInfo += activeStateToString(state) + runtime; }, true ); @@ -1423,34 +1491,49 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza if (state === false) continue; stateInfo = activeStateToString(state); } - } - const module = connection.module; - stateInfo += module.getExportsType(this.moduleGraph, strict); - const oldModule = connectedModules.get(stateInfo); - if (oldModule === undefined) { - connectedModules.set(stateInfo, module); - } else if (oldModule instanceof Set) { - oldModule.add(module); - } else if (oldModule !== module) { - connectedModules.set(stateInfo, new Set([oldModule, module])); + processConnection(connection, stateInfo); } } - if (connectedModules.size === 0) return graphHash; + // cspell:word Tnamespace + if (activeNamespaceModules.size === 0 && connectedModules.size === 0) + return graphHash; const connectedModulesInOrder = connectedModules.size > 1 ? Array.from(connectedModules).sort(([a], [b]) => (a < b ? -1 : 1)) : connectedModules; const hash = createHash("md4"); + const addModuleToHash = module => { + hash.update( + this._getModuleGraphHashBigInt( + this._getChunkGraphModule(module), + module, + runtime + ).toString(16) + ); + }; + const addModulesToHash = modules => { + let xor = ZERO_BIG_INT; + for (const m of modules) { + xor = + xor ^ + this._getModuleGraphHashBigInt( + this._getChunkGraphModule(m), + m, + runtime + ); + } + hash.update(xor.toString(16)); + }; + if (activeNamespaceModules.size === 1) + addModuleToHash(activeNamespaceModules.values().next().value); + else if (activeNamespaceModules.size > 1) + addModulesToHash(activeNamespaceModules); for (const [stateInfo, modules] of connectedModulesInOrder) { hash.update(stateInfo); if (modules instanceof Set) { - const xor = new StringXor(); - for (const m of modules) { - xor.add(this.getModuleGraphHash(m, runtime, false)); - } - xor.updateHash(hash); + addModulesToHash(modules); } else { - hash.update(this.getModuleGraphHash(modules, runtime, false)); + addModuleToHash(modules); } } hash.update(graphHash); diff --git a/lib/Compilation.js b/lib/Compilation.js index 85ca0907c..4518c1124 100644 --- a/lib/Compilation.js +++ b/lib/Compilation.js @@ -1375,84 +1375,114 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si * @returns {void} */ _processModuleDependencies(module, callback) { - const dependencies = new Map(); - /** * @type {Array<{factory: ModuleFactory, dependencies: Dependency[], originModule: Module|null}>} */ const sortedDependencies = []; - let currentBlock = module; + /** @type {DependenciesBlock} */ + let currentBlock; + /** @type {Map>} */ + let dependencies; + /** @type {DepConstructor} */ let factoryCacheKey; + /** @type {ModuleFactory} */ + let factoryCacheKey2; + /** @type {Map} */ let factoryCacheValue; - let factoryCacheValue2; - let listCacheKey; + /** @type {string} */ + let listCacheKey1; + /** @type {string} */ + let listCacheKey2; + /** @type {Dependency[]} */ let listCacheValue; + /** + * @param {Dependency} dep dependency + * @returns {void} + */ const processDependency = dep => { this.moduleGraph.setParents(dep, currentBlock, module); const resourceIdent = dep.getResourceIdentifier(); - if (resourceIdent) { - // Here webpack is using heuristic that assumes - // mostly esm dependencies would be used - // so we don't allocate extra string for them + if (resourceIdent !== undefined && resourceIdent !== null) { const category = dep.category; - const cacheKey = - category === esmDependencyCategory - ? resourceIdent - : `${category}${resourceIdent}`; - const constructor = dep.constructor; - let innerMap; - let factory; + const constructor = /** @type {DepConstructor} */ (dep.constructor); if (factoryCacheKey === constructor) { - innerMap = factoryCacheValue; - if (listCacheKey === cacheKey) { + // Fast path 1: same constructor as prev item + if (listCacheKey1 === category && listCacheKey2 === resourceIdent) { + // Super fast path 1: also same resource listCacheValue.push(dep); return; } } else { - factory = this.dependencyFactories.get(dep.constructor); + const factory = this.dependencyFactories.get(constructor); if (factory === undefined) { throw new Error( - `No module factory available for dependency type: ${dep.constructor.name}` + `No module factory available for dependency type: ${constructor.name}` ); } - innerMap = dependencies.get(factory); - if (innerMap === undefined) { - dependencies.set(factory, (innerMap = new Map())); + if (factoryCacheKey2 === factory) { + // Fast path 2: same factory as prev item + factoryCacheKey = constructor; + if (listCacheKey1 === category && listCacheKey2 === resourceIdent) { + // Super fast path 2: also same resource + listCacheValue.push(dep); + return; + } + } else { + // Slow path + if (factoryCacheKey2 !== undefined) { + // Archive last cache entry + if (dependencies === undefined) dependencies = new Map(); + dependencies.set(factoryCacheKey2, factoryCacheValue); + factoryCacheValue = dependencies.get(factory); + if (factoryCacheValue === undefined) { + factoryCacheValue = new Map(); + } + } else { + factoryCacheValue = new Map(); + } + factoryCacheKey = constructor; + factoryCacheKey2 = factory; } - factoryCacheKey = constructor; - factoryCacheValue = innerMap; - factoryCacheValue2 = factory; } - let list = innerMap.get(cacheKey); + // Here webpack is using heuristic that assumes + // mostly esm dependencies would be used + // so we don't allocate extra string for them + const cacheKey = + category === esmDependencyCategory + ? resourceIdent + : `${category}${resourceIdent}`; + let list = factoryCacheValue.get(cacheKey); if (list === undefined) { - innerMap.set(cacheKey, (list = [])); + factoryCacheValue.set(cacheKey, (list = [])); sortedDependencies.push({ - factory: factoryCacheValue2, + factory: factoryCacheKey2, dependencies: list, originModule: module }); } list.push(dep); - listCacheKey = cacheKey; + listCacheKey1 = category; + listCacheKey2 = resourceIdent; listCacheValue = list; } }; - const processDependenciesBlock = block => { - if (block.dependencies) { - currentBlock = block; - for (const dep of block.dependencies) processDependency(dep); - } - if (block.blocks) { - for (const b of block.blocks) processDependenciesBlock(b); - } - }; - try { - processDependenciesBlock(module); + /** @type {DependenciesBlock[]} */ + const queue = [module]; + do { + const block = queue.pop(); + if (block.dependencies) { + currentBlock = block; + for (const dep of block.dependencies) processDependency(dep); + } + if (block.blocks) { + for (const b of block.blocks) queue.push(b); + } + } while (queue.length !== 0); } catch (e) { return callback(e); } diff --git a/lib/Compiler.js b/lib/Compiler.js index 09e1f995b..f97615ded 100644 --- a/lib/Compiler.js +++ b/lib/Compiler.js @@ -263,6 +263,8 @@ class Compiler { this._assetEmittingSourceCache = new WeakMap(); /** @private @type {Map} */ this._assetEmittingWrittenFiles = new Map(); + /** @private @type {Set} */ + this._assetEmittingPreviousFiles = new Set(); } /** @@ -556,6 +558,8 @@ class Compiler { compilation.assets = { ...compilation.assets }; /** @type {Map} */ const caseInsensitiveMap = new Map(); + /** @type {Set} */ + const allTargetPaths = new Set(); asyncLib.forEachLimit( assets, 15, @@ -583,6 +587,7 @@ class Compiler { outputPath, targetFile ); + allTargetPaths.add(targetPath); // check if the target file has already been written by this Compiler const targetFileGeneration = this._assetEmittingWrittenFiles.get( @@ -775,18 +780,22 @@ ${other}`); // check if the Source has been written to this target file const writtenGeneration = cacheEntry.writtenTo.get(targetPath); if (writtenGeneration === targetFileGeneration) { - // if yes, we skip writing the file - // as it's already there - // (we assume one doesn't remove files while the Compiler is running) + // if yes, we may skip writing the file + // if it's already there + // (we assume one doesn't modify files while the Compiler is running, other then removing them) - compilation.updateAsset(file, cacheEntry.sizeOnlySource, { - size: cacheEntry.sizeOnlySource.size() - }); + if (this._assetEmittingPreviousFiles.has(targetPath)) { + // We assume that assets from the last compilation say intact on disk (they are not removed) + compilation.updateAsset(file, cacheEntry.sizeOnlySource, { + size: cacheEntry.sizeOnlySource.size() + }); - return callback(); - } - - if (!immutable) { + return callback(); + } else { + // Settings immutable will make it accept file content without comparing when file exist + immutable = true; + } + } else if (!immutable) { if (checkSimilarFile()) return; // We wrote to this file before which has very likely a different content // skip comparing and assume content is different for performance @@ -822,7 +831,12 @@ ${other}`); err => { // Clear map to free up memory caseInsensitiveMap.clear(); - if (err) return callback(err); + if (err) { + this._assetEmittingPreviousFiles.clear(); + return callback(err); + } + + this._assetEmittingPreviousFiles = allTargetPaths; this.hooks.afterEmit.callAsync(compilation, err => { if (err) return callback(err); diff --git a/lib/ContextModuleFactory.js b/lib/ContextModuleFactory.js index 24c99d87c..6c284c01c 100644 --- a/lib/ContextModuleFactory.js +++ b/lib/ContextModuleFactory.js @@ -10,6 +10,7 @@ const { AsyncSeriesWaterfallHook, SyncWaterfallHook } = require("tapable"); const ContextModule = require("./ContextModule"); const ModuleFactory = require("./ModuleFactory"); const ContextElementDependency = require("./dependencies/ContextElementDependency"); +const LazySet = require("./util/LazySet"); const { cachedSetProperty } = require("./util/cleverMerge"); const { createFakeHook } = require("./util/deprecation"); const { join } = require("./util/fs"); @@ -87,9 +88,9 @@ module.exports = class ContextModuleFactory extends ModuleFactory { const dependencies = data.dependencies; const resolveOptions = data.resolveOptions; const dependency = /** @type {ContextDependency} */ (dependencies[0]); - const fileDependencies = new Set(); - const missingDependencies = new Set(); - const contextDependencies = new Set(); + const fileDependencies = new LazySet(); + const missingDependencies = new LazySet(); + const contextDependencies = new LazySet(); this.hooks.beforeResolve.callAsync( { context: context, diff --git a/lib/Dependency.js b/lib/Dependency.js index 390495314..9f87a0adb 100644 --- a/lib/Dependency.js +++ b/lib/Dependency.js @@ -9,6 +9,7 @@ const memoize = require("./util/memoize"); /** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("./ChunkGraph")} ChunkGraph */ +/** @typedef {import("./DependenciesBlock")} DependenciesBlock */ /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ /** @typedef {import("./Module")} Module */ /** @typedef {import("./ModuleGraph")} ModuleGraph */ @@ -84,14 +85,23 @@ const getIgnoredModule = memoize(() => { class Dependency { constructor() { + /** @type {Module} */ + this._parentModule = undefined; + /** @type {DependenciesBlock} */ + this._parentDependenciesBlock = undefined; // TODO check if this can be moved into ModuleDependency /** @type {boolean} */ this.weak = false; // TODO check if this can be moved into ModuleDependency /** @type {boolean} */ this.optional = false; - /** @type {DependencyLocation} */ - this.loc = undefined; + this._locSL = 0; + this._locSC = 0; + this._locEL = 0; + this._locEC = 0; + this._locI = undefined; + this._locN = undefined; + this._loc = undefined; } /** @@ -108,6 +118,56 @@ class Dependency { return "unknown"; } + /** + * @returns {DependencyLocation} location + */ + get loc() { + if (this._loc !== undefined) return this._loc; + /** @type {SyntheticDependencyLocation & RealDependencyLocation} */ + const loc = {}; + if (this._locSL > 0) { + loc.start = { line: this._locSL, column: this._locSC }; + } + if (this._locEL > 0) { + loc.end = { line: this._locEL, column: this._locEC }; + } + if (this._locN !== undefined) { + loc.name = this._locN; + } + if (this._locI !== undefined) { + loc.index = this._locI; + } + return (this._loc = loc); + } + + set loc(loc) { + if ("start" in loc && typeof loc.start === "object") { + this._locSL = loc.start.line || 0; + this._locSC = loc.start.column || 0; + } else { + this._locSL = 0; + this._locSC = 0; + } + if ("end" in loc && typeof loc.end === "object") { + this._locEL = loc.end.line || 0; + this._locEC = loc.end.column || 0; + } else { + this._locEL = 0; + this._locEC = 0; + } + if ("index" in loc) { + this._locI = loc.index; + } else { + this._locI = undefined; + } + if ("name" in loc) { + this._locN = loc.name; + } else { + this._locN = undefined; + } + this._loc = loc; + } + /** * @returns {string | null} an identifier to merge equal requests */ @@ -207,13 +267,23 @@ class Dependency { serialize({ write }) { write(this.weak); write(this.optional); - write(this.loc); + write(this._locSL); + write(this._locSC); + write(this._locEL); + write(this._locEC); + write(this._locI); + write(this._locN); } deserialize({ read }) { this.weak = read(); this.optional = read(); - this.loc = read(); + this._locSL = read(); + this._locSC = read(); + this._locEL = read(); + this._locEC = read(); + this._locI = read(); + this._locN = read(); } } diff --git a/lib/FileSystemInfo.js b/lib/FileSystemInfo.js index bef2f993e..62fcf9d7b 100644 --- a/lib/FileSystemInfo.js +++ b/lib/FileSystemInfo.js @@ -1472,7 +1472,7 @@ class FileSystemInfo { } } else if (supportsEsm && /\.m?js$/.test(path)) { if (!this._warnAboutExperimentalEsmTracking) { - this.logger.info( + this.logger.log( "Node.js doesn't offer a (nice) way to introspect the ESM dependency graph yet.\n" + "Until a full solution is available webpack uses an experimental ESM tracking based on parsing.\n" + "As best effort webpack parses the ESM files to guess dependencies. But this can lead to expensive and incorrect tracking." diff --git a/lib/FlagDependencyExportsPlugin.js b/lib/FlagDependencyExportsPlugin.js index 2875d781b..4509392de 100644 --- a/lib/FlagDependencyExportsPlugin.js +++ b/lib/FlagDependencyExportsPlugin.js @@ -35,6 +35,7 @@ class FlagDependencyExportsPlugin { "webpack.FlagDependencyExportsPlugin" ); let statRestoredFromCache = 0; + let statNoExports = 0; let statFlaggedUncached = 0; let statNotCached = 0; let statQueueItemsProcessed = 0; @@ -47,6 +48,16 @@ class FlagDependencyExportsPlugin { asyncLib.each( modules, (module, callback) => { + const exportsInfo = moduleGraph.getExportsInfo(module); + if (!module.buildMeta || !module.buildMeta.exportsType) { + if (exportsInfo.otherExportsInfo.provided !== null) { + // It's a module without declared exports + statNoExports++; + exportsInfo.setHasProvideInfo(); + exportsInfo.setUnknownExportsProvided(); + return callback(); + } + } if ( module.buildInfo.cacheable !== true || typeof module.buildInfo.hash !== "string" @@ -54,7 +65,7 @@ class FlagDependencyExportsPlugin { statFlaggedUncached++; // Enqueue uncacheable module for determining the exports queue.enqueue(module); - moduleGraph.getExportsInfo(module).setHasProvideInfo(); + exportsInfo.setHasProvideInfo(); return callback(); } cache.get( @@ -72,7 +83,7 @@ class FlagDependencyExportsPlugin { statNotCached++; // Without cached info enqueue module for determining the exports queue.enqueue(module); - moduleGraph.getExportsInfo(module).setHasProvideInfo(); + exportsInfo.setHasProvideInfo(); } callback(); } @@ -300,49 +311,39 @@ class FlagDependencyExportsPlugin { statQueueItemsProcessed++; exportsInfo = moduleGraph.getExportsInfo(module); - if (!module.buildMeta || !module.buildMeta.exportsType) { - if (exportsInfo.otherExportsInfo.provided !== null) { - // It's a module without declared exports - exportsInfo.setUnknownExportsProvided(); - modulesToStore.add(module); - notifyDependencies(); - } - } else { - // It's a module with declared exports - cacheable = true; - changed = false; + cacheable = true; + changed = false; - exportsSpecsFromDependencies.clear(); - moduleGraph.freeze(); - processDependenciesBlock(module); - moduleGraph.unfreeze(); - for (const [ - dep, - exportsSpec - ] of exportsSpecsFromDependencies) { - processExportsSpec(dep, exportsSpec); - } + exportsSpecsFromDependencies.clear(); + moduleGraph.freeze(); + processDependenciesBlock(module); + moduleGraph.unfreeze(); + for (const [ + dep, + exportsSpec + ] of exportsSpecsFromDependencies) { + processExportsSpec(dep, exportsSpec); + } - if (cacheable) { - modulesToStore.add(module); - } + if (cacheable) { + modulesToStore.add(module); + } - if (changed) { - notifyDependencies(); - } + if (changed) { + notifyDependencies(); } } logger.timeEnd("figure out provided exports"); logger.log( `${Math.round( - 100 - - (100 * statRestoredFromCache) / - (statRestoredFromCache + - statNotCached + - statFlaggedUncached) - )}% of exports of modules have been determined (${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${ + (100 * (statFlaggedUncached + statNotCached)) / + (statRestoredFromCache + + statNotCached + + statFlaggedUncached + + statNoExports) + )}% of exports of modules have been determined (${statNoExports} no declared exports, ${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${ statQueueItemsProcessed - statNotCached - statFlaggedUncached diff --git a/lib/InitFragment.js b/lib/InitFragment.js index ea97de437..086631dff 100644 --- a/lib/InitFragment.js +++ b/lib/InitFragment.js @@ -73,13 +73,25 @@ class InitFragment { // Deduplicate fragments. If a fragment has no key, it is always included. const keyedFragments = new Map(); for (const [fragment] of sortedFragments) { - if (typeof fragment.merge === "function") { + if (typeof fragment.mergeAll === "function") { + if (!fragment.key) { + throw new Error( + `InitFragment with mergeAll function must have a valid key: ${fragment.constructor.name}` + ); + } + const oldValue = keyedFragments.get(fragment.key); + if (oldValue === undefined) { + keyedFragments.set(fragment.key, fragment); + } else if (Array.isArray(oldValue)) { + oldValue.push(fragment); + } else { + keyedFragments.set(fragment.key, [oldValue, fragment]); + } + continue; + } else if (typeof fragment.merge === "function") { const oldValue = keyedFragments.get(fragment.key); if (oldValue !== undefined) { - keyedFragments.set( - fragment.key || Symbol(), - fragment.merge(oldValue) - ); + keyedFragments.set(fragment.key, fragment.merge(oldValue)); continue; } } @@ -88,7 +100,10 @@ class InitFragment { const concatSource = new ConcatSource(); const endContents = []; - for (const fragment of keyedFragments.values()) { + for (let fragment of keyedFragments.values()) { + if (Array.isArray(fragment)) { + fragment = fragment[0].mergeAll(fragment); + } concatSource.add(fragment.getContent(generateContext)); const endContent = fragment.getEndContent(generateContext); if (endContent) { diff --git a/lib/ModuleGraph.js b/lib/ModuleGraph.js index 409bd7300..8e9fc3ba6 100644 --- a/lib/ModuleGraph.js +++ b/lib/ModuleGraph.js @@ -25,7 +25,7 @@ const WeakTupleMap = require("./util/WeakTupleMap"); * @returns {string} */ -const EMPTY_ARRAY = []; +const EMPTY_SET = new Set(); /** * @param {SortableSet} set input @@ -82,20 +82,9 @@ class ModuleGraphModule { } } -class ModuleGraphDependency { - constructor() { - /** @type {ModuleGraphConnection} */ - this.connection = undefined; - /** @type {Module} */ - this.parentModule = undefined; - /** @type {DependenciesBlock} */ - this.parentBlock = undefined; - } -} - class ModuleGraph { constructor() { - /** @type {Map} */ + /** @type {Map} */ this._dependencyMap = new Map(); /** @type {Map} */ this._moduleMap = new Map(); @@ -137,23 +126,6 @@ class ModuleGraph { return mgm; } - /** - * @param {Dependency} dependency the dependency - * @returns {ModuleGraphDependency} the internal dependency - */ - _getModuleGraphDependency(dependency) { - if (this._cacheModuleGraphDependencyKey === dependency) - return this._cacheModuleGraphDependencyValue; - let mgd = this._dependencyMap.get(dependency); - if (mgd === undefined) { - mgd = new ModuleGraphDependency(); - this._dependencyMap.set(dependency, mgd); - } - this._cacheModuleGraphDependencyKey = dependency; - this._cacheModuleGraphDependencyValue = mgd; - return mgd; - } - /** * @param {Dependency} dependency the dependency * @param {DependenciesBlock} block parent block @@ -161,9 +133,8 @@ class ModuleGraph { * @returns {void} */ setParents(dependency, block, module) { - const mgd = this._getModuleGraphDependency(dependency); - mgd.parentBlock = block; - mgd.parentModule = module; + dependency._parentDependenciesBlock = block; + dependency._parentModule = module; } /** @@ -171,8 +142,7 @@ class ModuleGraph { * @returns {Module} parent module */ getParentModule(dependency) { - const mgd = this._getModuleGraphDependency(dependency); - return mgd.parentModule; + return dependency._parentModule; } /** @@ -180,8 +150,7 @@ class ModuleGraph { * @returns {DependenciesBlock} parent block */ getParentBlock(dependency) { - const mgd = this._getModuleGraphDependency(dependency); - return mgd.parentBlock; + return dependency._parentDependenciesBlock; } /** @@ -199,8 +168,7 @@ class ModuleGraph { dependency.weak, dependency.getCondition(this) ); - const mgd = this._getModuleGraphDependency(dependency); - mgd.connection = connection; + this._dependencyMap.set(dependency, connection); const connections = this._getModuleGraphModule(module).incomingConnections; connections.add(connection); const mgm = this._getModuleGraphModule(originModule); @@ -216,12 +184,11 @@ class ModuleGraph { * @returns {void} */ updateModule(dependency, module) { - const mgd = this._getModuleGraphDependency(dependency); - if (mgd.connection.module === module) return; - const { connection } = mgd; + const connection = this._dependencyMap.get(dependency); + if (connection.module === module) return; const newConnection = connection.clone(); newConnection.module = module; - mgd.connection = newConnection; + this._dependencyMap.set(dependency, newConnection); connection.setActive(false); const originMgm = this._getModuleGraphModule(connection.originModule); originMgm.outgoingConnections.add(newConnection); @@ -234,13 +201,12 @@ class ModuleGraph { * @returns {void} */ removeConnection(dependency) { - const mgd = this._getModuleGraphDependency(dependency); - const { connection } = mgd; + const connection = this._dependencyMap.get(dependency); const targetMgm = this._getModuleGraphModule(connection.module); targetMgm.incomingConnections.delete(connection); const originMgm = this._getModuleGraphModule(connection.originModule); originMgm.outgoingConnections.delete(connection); - mgd.connection = undefined; + this._dependencyMap.delete(dependency); } /** @@ -249,7 +215,7 @@ class ModuleGraph { * @returns {void} */ addExplanation(dependency, explanation) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); connection.addExplanation(explanation); } @@ -375,7 +341,7 @@ class ModuleGraph { * @returns {Module} the referenced module */ getResolvedModule(dependency) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); return connection !== undefined ? connection.resolvedModule : null; } @@ -384,7 +350,7 @@ class ModuleGraph { * @returns {ModuleGraphConnection | undefined} the connection */ getConnection(dependency) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); return connection; } @@ -393,7 +359,7 @@ class ModuleGraph { * @returns {Module} the referenced module */ getModule(dependency) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); return connection !== undefined ? connection.module : null; } @@ -402,7 +368,7 @@ class ModuleGraph { * @returns {Module} the referencing module */ getOrigin(dependency) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); return connection !== undefined ? connection.originModule : null; } @@ -411,7 +377,7 @@ class ModuleGraph { * @returns {Module} the original referencing module */ getResolvedOrigin(dependency) { - const { connection } = this._getModuleGraphDependency(dependency); + const connection = this._dependencyMap.get(dependency); return connection !== undefined ? connection.resolvedOriginModule : null; } @@ -430,7 +396,7 @@ class ModuleGraph { */ getOutgoingConnections(module) { const connections = this._getModuleGraphModule(module).outgoingConnections; - return connections === undefined ? EMPTY_ARRAY : connections; + return connections === undefined ? EMPTY_SET : connections; } /** diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index 989bca401..96dcdd6fb 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -520,29 +520,33 @@ class NormalModuleFactory extends ModuleFactory { ) ); } - Object.assign(data.createData, { - layer: - layer === undefined ? contextInfo.issuerLayer || null : layer, - request: stringifyLoadersAndResource( - allLoaders, - resourceData.resource - ), - userRequest, - rawRequest: request, - loaders: allLoaders, - resource: resourceData.resource, - matchResource: matchResourceData - ? matchResourceData.resource - : undefined, - resourceResolveData: resourceData.data, - settings, - type, - parser: this.getParser(type, settings.parser), - parserOptions: settings.parser, - generator: this.getGenerator(type, settings.generator), - generatorOptions: settings.generator, - resolveOptions - }); + try { + Object.assign(data.createData, { + layer: + layer === undefined ? contextInfo.issuerLayer || null : layer, + request: stringifyLoadersAndResource( + allLoaders, + resourceData.resource + ), + userRequest, + rawRequest: request, + loaders: allLoaders, + resource: resourceData.resource, + matchResource: matchResourceData + ? matchResourceData.resource + : undefined, + resourceResolveData: resourceData.data, + settings, + type, + parser: this.getParser(type, settings.parser), + parserOptions: settings.parser, + generator: this.getGenerator(type, settings.generator), + generatorOptions: settings.generator, + resolveOptions + }); + } catch (e) { + return callback(e); + } callback(); }); this.resolveRequestArray( diff --git a/lib/WebpackOptionsApply.js b/lib/WebpackOptionsApply.js index 7dcadcc71..e3822f05b 100644 --- a/lib/WebpackOptionsApply.js +++ b/lib/WebpackOptionsApply.js @@ -569,6 +569,7 @@ class WebpackOptionsApply extends OptionsApply { ), snapshot: options.snapshot, maxAge: cacheOptions.maxAge, + profile: cacheOptions.profile, allowCollectingMemory: cacheOptions.allowCollectingMemory }), cacheOptions.idleTimeout, diff --git a/lib/buildChunkGraph.js b/lib/buildChunkGraph.js index 768605010..6bbece751 100644 --- a/lib/buildChunkGraph.js +++ b/lib/buildChunkGraph.js @@ -997,10 +997,15 @@ const visitModules = ( }; const processChunkGroupsForCombining = () => { - loop: for (const info of chunkGroupsForCombining) { + for (const info of chunkGroupsForCombining) { for (const source of info.availableSources) { - if (!source.minAvailableModules) continue loop; + if (!source.minAvailableModules) { + chunkGroupsForCombining.delete(info); + break; + } } + } + for (const info of chunkGroupsForCombining) { const availableModules = /** @type {ModuleSetPlus} */ (new Set()); availableModules.plus = EMPTY_SET; const mergeSet = set => { diff --git a/lib/cache/PackFileCacheStrategy.js b/lib/cache/PackFileCacheStrategy.js index d487b6384..7d22e130c 100644 --- a/lib/cache/PackFileCacheStrategy.js +++ b/lib/cache/PackFileCacheStrategy.js @@ -561,7 +561,40 @@ class PackContentItems { this.map = map; } - serialize({ write, snapshot, rollback, logger }) { + serialize({ write, snapshot, rollback, logger, profile }) { + if (profile) { + write(false); + for (const [key, value] of this.map) { + const s = snapshot(); + try { + write(key); + const start = process.hrtime(); + write(value); + const durationHr = process.hrtime(start); + const duration = durationHr[0] * 1000 + durationHr[1] / 1e6; + if (duration > 1) { + if (duration > 500) + logger.error(`Serialization of '${key}': ${duration} ms`); + else if (duration > 50) + logger.warn(`Serialization of '${key}': ${duration} ms`); + else if (duration > 10) + logger.info(`Serialization of '${key}': ${duration} ms`); + else if (duration > 5) + logger.log(`Serialization of '${key}': ${duration} ms`); + else logger.debug(`Serialization of '${key}': ${duration} ms`); + } + } catch (e) { + rollback(s); + if (e === NOT_SERIALIZABLE) continue; + logger.warn( + `Skipped not serializable cache item '${key}': ${e.message}` + ); + logger.debug(e.stack); + } + } + write(null); + return; + } // Try to serialize all at once const s = snapshot(); try { @@ -590,9 +623,32 @@ class PackContentItems { } } - deserialize({ read }) { + deserialize({ read, logger, profile }) { if (read()) { this.map = read(); + } else if (profile) { + const map = new Map(); + let key = read(); + while (key !== null) { + const start = process.hrtime(); + const value = read(); + const durationHr = process.hrtime(start); + const duration = durationHr[0] * 1000 + durationHr[1] / 1e6; + if (duration > 1) { + if (duration > 100) + logger.error(`Deserialization of '${key}': ${duration} ms`); + else if (duration > 20) + logger.warn(`Deserialization of '${key}': ${duration} ms`); + else if (duration > 5) + logger.info(`Deserialization of '${key}': ${duration} ms`); + else if (duration > 2) + logger.log(`Deserialization of '${key}': ${duration} ms`); + else logger.debug(`Deserialization of '${key}': ${duration} ms`); + } + map.set(key, value); + key = read(); + } + this.map = map; } else { const map = new Map(); let key = read(); @@ -787,6 +843,7 @@ class PackFileCacheStrategy { * @param {Logger} options.logger a logger * @param {SnapshotOptions} options.snapshot options regarding snapshotting * @param {number} options.maxAge max age of cache items + * @param {boolean} options.profile track and log detailed timing information for individual cache items * @param {boolean} options.allowCollectingMemory allow to collect unused memory created during deserialization */ constructor({ @@ -798,6 +855,7 @@ class PackFileCacheStrategy { logger, snapshot, maxAge, + profile, allowCollectingMemory }) { this.fileSerializer = createFileSerializer(fs); @@ -812,6 +870,7 @@ class PackFileCacheStrategy { this.version = version; this.logger = logger; this.maxAge = maxAge; + this.profile = profile; this.allowCollectingMemory = allowCollectingMemory; this.snapshot = snapshot; /** @type {Set} */ @@ -840,7 +899,7 @@ class PackFileCacheStrategy { * @returns {Promise} the pack */ _openPack() { - const { logger, cacheLocation, version } = this; + const { logger, profile, cacheLocation, version } = this; /** @type {Snapshot} */ let buildSnapshot; /** @type {Set} */ @@ -857,6 +916,7 @@ class PackFileCacheStrategy { filename: `${cacheLocation}/index.pack`, extension: ".pack", logger, + profile, retainedBuffer: this.allowCollectingMemory ? allowCollectingMemory : undefined @@ -1172,7 +1232,8 @@ class PackFileCacheStrategy { .serialize(content, { filename: `${this.cacheLocation}/index.pack`, extension: ".pack", - logger: this.logger + logger: this.logger, + profile: this.profile }) .then(() => { for (const dep of newBuildDependencies) { diff --git a/lib/config/defaults.js b/lib/config/defaults.js index 5fa717e95..c107408d2 100644 --- a/lib/config/defaults.js +++ b/lib/config/defaults.js @@ -293,6 +293,7 @@ const applyCacheDefaults = (cache, { name, mode, development }) => { ); D(cache, "hashAlgorithm", "md4"); D(cache, "store", "pack"); + D(cache, "profile", false); D(cache, "idleTimeout", 60000); D(cache, "idleTimeoutForInitialStore", 0); D(cache, "maxMemoryGenerations", development ? 5 : Infinity); @@ -948,7 +949,7 @@ const applyOptimizationDefaults = ( A(splitChunks, "defaultSizeTypes", () => ["javascript", "unknown"]); D(splitChunks, "hidePathInfo", production); D(splitChunks, "chunks", "async"); - D(splitChunks, "usedExports", true); + D(splitChunks, "usedExports", optimization.usedExports === true); D(splitChunks, "minChunks", 1); F(splitChunks, "minSize", () => (production ? 20000 : 10000)); F(splitChunks, "minRemainingSize", () => (development ? 0 : undefined)); diff --git a/lib/config/normalization.js b/lib/config/normalization.js index c69485af4..84bc73031 100644 --- a/lib/config/normalization.js +++ b/lib/config/normalization.js @@ -131,6 +131,7 @@ const getNormalizedWebpackOptions = config => { type: "filesystem", maxMemoryGenerations: cache.maxMemoryGenerations, maxAge: cache.maxAge, + profile: cache.profile, buildDependencies: cloneObject(cache.buildDependencies), cacheDirectory: cache.cacheDirectory, cacheLocation: cache.cacheLocation, diff --git a/lib/dependencies/HarmonyExportInitFragment.js b/lib/dependencies/HarmonyExportInitFragment.js index 73484d268..e14e0d691 100644 --- a/lib/dependencies/HarmonyExportInitFragment.js +++ b/lib/dependencies/HarmonyExportInitFragment.js @@ -48,6 +48,53 @@ class HarmonyExportInitFragment extends InitFragment { this.unusedExports = unusedExports; } + /** + * @param {HarmonyExportInitFragment[]} fragments all fragments to merge + * @returns {HarmonyExportInitFragment} merged fragment + */ + mergeAll(fragments) { + let exportMap; + let exportMapOwned = false; + let unusedExports; + let unusedExportsOwned = false; + + for (const fragment of fragments) { + if (fragment.exportMap.size !== 0) { + if (exportMap === undefined) { + exportMap = fragment.exportMap; + exportMapOwned = false; + } else { + if (!exportMapOwned) { + exportMap = new Map(exportMap); + exportMapOwned = true; + } + for (const [key, value] of fragment.exportMap) { + if (!exportMap.has(key)) exportMap.set(key, value); + } + } + } + if (fragment.unusedExports.size !== 0) { + if (unusedExports === undefined) { + unusedExports = fragment.unusedExports; + unusedExportsOwned = false; + } else { + if (!unusedExportsOwned) { + unusedExports = new Set(unusedExports); + unusedExportsOwned = true; + } + for (const value of fragment.unusedExports) { + unusedExports.add(value); + } + } + } + } + return new HarmonyExportInitFragment( + this.exportsArgument, + exportMap, + unusedExports + ); + } + merge(other) { let exportMap; if (this.exportMap.size === 0) { diff --git a/lib/dependencies/NullDependency.js b/lib/dependencies/NullDependency.js index a18c25d4f..c4cb31cea 100644 --- a/lib/dependencies/NullDependency.js +++ b/lib/dependencies/NullDependency.js @@ -19,14 +19,6 @@ class NullDependency extends Dependency { get type() { return "null"; } - - serialize({ write }) { - write(this.loc); - } - - deserialize({ read }) { - this.loc = read(); - } } NullDependency.Template = class NullDependencyTemplate extends ( diff --git a/lib/dependencies/WorkerPlugin.js b/lib/dependencies/WorkerPlugin.js index a52835d71..351f5e92b 100644 --- a/lib/dependencies/WorkerPlugin.js +++ b/lib/dependencies/WorkerPlugin.js @@ -9,9 +9,9 @@ const { pathToFileURL } = require("url"); const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); const CommentCompilationWarning = require("../CommentCompilationWarning"); const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning"); -const formatLocation = require("../formatLocation"); const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin"); const { equals } = require("../util/ArrayHelpers"); +const createHash = require("../util/createHash"); const { contextify } = require("../util/identifier"); const EnableWasmLoadingPlugin = require("../wasm/EnableWasmLoadingPlugin"); const ConstDependency = require("./ConstDependency"); @@ -27,6 +27,7 @@ const WorkerDependency = require("./WorkerDependency"); /** @typedef {import("estree").SpreadElement} SpreadElement */ /** @typedef {import("../Compiler")} Compiler */ /** @typedef {import("../Entrypoint").EntryOptions} EntryOptions */ +/** @typedef {import("../Parser").ParserState} ParserState */ /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */ /** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */ @@ -42,6 +43,9 @@ const DEFAULT_SYNTAX = [ "Worker from worker_threads" ]; +/** @type {WeakMap} */ +const workerIndexMap = new WeakMap(); + class WorkerPlugin { constructor(chunkLoading, wasmLoading) { this._chunkLoading = chunkLoading; @@ -264,9 +268,20 @@ class WorkerPlugin { } if (!entryOptions.runtime) { - entryOptions.runtime = `${cachedContextify( + let i = workerIndexMap.get(parser.state) || 0; + workerIndexMap.set(parser.state, i + 1); + let name = `${cachedContextify( parser.state.module.identifier() - )}|${formatLocation(expr.loc)}`; + )}|${i}`; + const hash = createHash(compilation.outputOptions.hashFunction); + hash.update(name); + const digest = /** @type {string} */ (hash.digest( + compilation.outputOptions.hashDigest + )); + entryOptions.runtime = digest.slice( + 0, + compilation.outputOptions.hashDigestLength + ); } const block = new AsyncDependenciesBlock({ diff --git a/lib/javascript/JavascriptParser.js b/lib/javascript/JavascriptParser.js index dc913bf1f..8ca1af44e 100644 --- a/lib/javascript/JavascriptParser.js +++ b/lib/javascript/JavascriptParser.js @@ -161,7 +161,7 @@ class JavascriptParser extends Parser { evaluateCallExpressionMember: new HookMap( () => new SyncBailHook(["expression", "param"]) ), - /** @type {HookMap>} */ + /** @type {HookMap>} */ isPure: new HookMap( () => new SyncBailHook(["expression", "commentsStartPosition"]) ), @@ -176,8 +176,10 @@ class JavascriptParser extends Parser { statementIf: new SyncBailHook(["statement"]), /** @type {SyncBailHook<[ExpressionNode, ClassExpressionNode | ClassDeclarationNode], boolean | void>} */ classExtendsExpression: new SyncBailHook(["expression", "statement"]), - /** @type {SyncBailHook<[MethodDefinitionNode, ClassExpressionNode | ClassDeclarationNode], boolean | void>} */ + /** @type {SyncBailHook<[MethodDefinitionNode | PropertyDefinitionNode, ClassExpressionNode | ClassDeclarationNode], boolean | void>} */ classBodyElement: new SyncBailHook(["element", "statement"]), + /** @type {SyncBailHook<[ExpressionNode, MethodDefinitionNode | PropertyDefinitionNode, ClassExpressionNode | ClassDeclarationNode], boolean | void>} */ + classBodyValue: new SyncBailHook(["expression", "element", "statement"]), /** @type {HookMap>} */ label: new HookMap(() => new SyncBailHook(["statement"])), /** @type {SyncBailHook<[StatementNode, ImportSource], boolean | void>} */ @@ -1363,29 +1365,30 @@ class JavascriptParser extends Parser { } } if (classy.body && classy.body.type === "ClassBody") { - const wasTopLevel = this.scope.topLevelScope; - for (const classElement of classy.body.body) { + for (const classElement of /** @type {TODO} */ (classy.body.body)) { if (!this.hooks.classBodyElement.call(classElement, classy)) { - if (classElement.type === "MethodDefinition") { - this.scope.topLevelScope = false; - this.walkMethodDefinition(classElement); - this.scope.topLevelScope = wasTopLevel; + if (classElement.computed && classElement.key) { + this.walkExpression(classElement.key); + } + if (classElement.value) { + if ( + !this.hooks.classBodyValue.call( + classElement.value, + classElement, + classy + ) + ) { + const wasTopLevel = this.scope.topLevelScope; + this.scope.topLevelScope = false; + this.walkExpression(classElement.value); + this.scope.topLevelScope = wasTopLevel; + } } - // TODO add support for ClassProperty here once acorn supports it } } } } - walkMethodDefinition(methodDefinition) { - if (methodDefinition.computed && methodDefinition.key) { - this.walkExpression(methodDefinition.key); - } - if (methodDefinition.value) { - this.walkExpression(methodDefinition.value); - } - } - // Pre walking iterates the scope for variable declarations preWalkStatements(statements) { for (let index = 0, len = statements.length; index < len; index++) { @@ -3316,7 +3319,7 @@ class JavascriptParser extends Parser { } /** - * @param {ExpressionNode | DeclarationNode | null | undefined} expr an expression + * @param {ExpressionNode | DeclarationNode | PrivateIdentifierNode | null | undefined} expr an expression * @param {number} commentsStartPos source position from which annotation comments are checked * @returns {boolean} true, when the expression is pure */ @@ -3328,27 +3331,32 @@ class JavascriptParser extends Parser { if (typeof result === "boolean") return result; switch (expr.type) { case "ClassDeclaration": - case "ClassExpression": + case "ClassExpression": { if (expr.body.type !== "ClassBody") return false; if (expr.superClass && !this.isPure(expr.superClass, expr.range[0])) { return false; } - return expr.body.body.every(item => { - switch (item.type) { - // @ts-expect-error not yet supported by acorn - case "ClassProperty": - // TODO add test case once acorn supports it - // Currently this is not parsable - if (item.static) return this.isPure(item.value, item.range[0]); - break; - } - return true; - }); + const items = /** @type {(MethodDefinitionNode | PropertyDefinitionNode)[]} */ (expr + .body.body); + return items.every( + item => + (!item.computed || + !item.key || + this.isPure(item.key, item.range[0])) && + (!item.static || + !item.value || + this.isPure( + item.value, + item.key ? item.key.range[1] : item.range[0] + )) + ); + } case "FunctionDeclaration": case "FunctionExpression": case "ArrowFunctionExpression": case "Literal": + case "PrivateIdentifier": return true; case "VariableDeclaration": diff --git a/lib/optimize/InnerGraphPlugin.js b/lib/optimize/InnerGraphPlugin.js index 3c50088f5..e57d50ca4 100644 --- a/lib/optimize/InnerGraphPlugin.js +++ b/lib/optimize/InnerGraphPlugin.js @@ -238,21 +238,20 @@ class InnerGraphPlugin { } ); - parser.hooks.classBodyElement.tap( + parser.hooks.classBodyValue.tap( "InnerGraphPlugin", - (element, statement) => { + (expression, element, statement) => { if (!InnerGraph.isEnabled(parser.state)) return; if (parser.scope.topLevelScope === true) { const fn = classWithTopLevelSymbol.get(statement); if (fn) { - if (element.type === "MethodDefinition") { - InnerGraph.setTopLevelSymbol(parser.state, fn); - } else if ( - element.type === "ClassProperty" && - !element.static + if ( + !element.static || + parser.isPure( + expression, + element.key ? element.key.range[1] : element.range[0] + ) ) { - // TODO add test case once acorn supports it - // Currently this is not parsable InnerGraph.setTopLevelSymbol(parser.state, fn); } else { InnerGraph.setTopLevelSymbol(parser.state, undefined); diff --git a/lib/util/AsyncQueue.js b/lib/util/AsyncQueue.js index 5072f3367..4b6f3e9bb 100644 --- a/lib/util/AsyncQueue.js +++ b/lib/util/AsyncQueue.js @@ -119,7 +119,12 @@ class AsyncQueue { const entry = this._entries.get(key); if (entry !== undefined) { if (entry.state === DONE_STATE) { - process.nextTick(() => callback(entry.error, entry.result)); + if (inHandleResult++ > 3) { + process.nextTick(() => callback(entry.error, entry.result)); + } else { + callback(entry.error, entry.result); + } + inHandleResult--; } else if (entry.callbacks === undefined) { entry.callbacks = [callback]; } else { diff --git a/lib/util/comparators.js b/lib/util/comparators.js index 8870cd459..dfb0f0bf4 100644 --- a/lib/util/comparators.js +++ b/lib/util/comparators.js @@ -433,21 +433,27 @@ exports.compareLocations = (a, b) => { if (isObjectB) return -1; return 0; } - if ("start" in a && "start" in b) { - const ap = a.start; - const bp = b.start; - if (ap.line < bp.line) return -1; - if (ap.line > bp.line) return 1; - if (ap.column < bp.column) return -1; - if (ap.column > bp.column) return 1; - } - if ("name" in a && "name" in b) { - if (a.name < b.name) return -1; - if (a.name > b.name) return 1; - } - if ("index" in a && "index" in b) { - if (a.index < b.index) return -1; - if (a.index > b.index) return 1; - } + if ("start" in a) { + if ("start" in b) { + const ap = a.start; + const bp = b.start; + if (ap.line < bp.line) return -1; + if (ap.line > bp.line) return 1; + if (ap.column < bp.column) return -1; + if (ap.column > bp.column) return 1; + } else return -1; + } else if ("start" in b) return 1; + if ("name" in a) { + if ("name" in b) { + if (a.name < b.name) return -1; + if (a.name > b.name) return 1; + } else return -1; + } else if ("name" in b) return 1; + if ("index" in a) { + if ("index" in b) { + if (a.index < b.index) return -1; + if (a.index > b.index) return 1; + } else return -1; + } else if ("index" in b) return 1; return 0; }; diff --git a/lib/util/smartGrouping.js b/lib/util/smartGrouping.js index f933a4e3a..ec348ad15 100644 --- a/lib/util/smartGrouping.js +++ b/lib/util/smartGrouping.js @@ -23,9 +23,16 @@ /** * @template T + * @template R * @typedef {Object} ItemWithGroups * @property {T} item - * @property {Set} groups + * @property {Set>} groups + */ + +/** + * @template T + * @template R + * @typedef {{ config: GroupConfig, name: string, alreadyGrouped: boolean, items: Set> | undefined }} Group */ /** @@ -36,22 +43,32 @@ * @returns {(R | T)[]} grouped items */ const smartGrouping = (items, groupConfigs) => { - /** @type {Set>} */ + /** @type {Set>} */ const itemsWithGroups = new Set(); - /** @type {Map, string]>} */ - const groupConfigMap = new Map(); + /** @type {Map>} */ + const allGroups = new Map(); for (const item of items) { + /** @type {Set>} */ const groups = new Set(); for (let i = 0; i < groupConfigs.length; i++) { const groupConfig = groupConfigs[i]; const keys = groupConfig.getKeys(item); if (keys) { - for (const group of keys) { - const fullGroup = `${i}:${group}`; - if (!groupConfigMap.has(fullGroup)) { - groupConfigMap.set(fullGroup, [groupConfig, group]); + for (const name of keys) { + const key = `${i}:${name}`; + let group = allGroups.get(key); + if (group === undefined) { + allGroups.set( + key, + (group = { + config: groupConfig, + name, + alreadyGrouped: false, + items: undefined + }) + ); } - groups.add(fullGroup); + groups.add(group); } } } @@ -60,48 +77,62 @@ const smartGrouping = (items, groupConfigs) => { groups }); } - const alreadyGrouped = new Set(); /** - * @param {Set>} itemsWithGroups input items with groups + * @param {Set>} itemsWithGroups input items with groups * @returns {(T | R)[]} groups items */ const runGrouping = itemsWithGroups => { const totalSize = itemsWithGroups.size; - /** @type {Map>>} */ - const groupMap = new Map(); for (const entry of itemsWithGroups) { for (const group of entry.groups) { - if (alreadyGrouped.has(group)) continue; - const list = groupMap.get(group); - if (list === undefined) { - groupMap.set(group, new Set([entry])); + if (group.alreadyGrouped) continue; + const items = group.items; + if (items === undefined) { + group.items = new Set([entry]); } else { - list.add(entry); + items.add(entry); } } } - /** @type {Set} */ - const usedGroups = new Set(); + /** @type {Map, { items: Set>, options: GroupOptions | false | undefined, used: boolean }>} */ + const groupMap = new Map(); + for (const group of allGroups.values()) { + if (group.items) { + const items = group.items; + group.items = undefined; + groupMap.set(group, { + items, + options: undefined, + used: false + }); + } + } /** @type {(T | R)[]} */ const results = []; for (;;) { + /** @type {Group} */ let bestGroup = undefined; let bestGroupSize = -1; let bestGroupItems = undefined; let bestGroupOptions = undefined; - for (const [group, items] of groupMap) { - if (items.size === 0) continue; - const [groupConfig, groupKey] = groupConfigMap.get(group); - const options = - groupConfig.getOptions && - groupConfig.getOptions( - groupKey, - Array.from(items, ({ item }) => item) - ); + for (const [group, state] of groupMap) { + const { items, used } = state; + let options = state.options; + if (options === undefined) { + const groupConfig = group.config; + state.options = options = + (groupConfig.getOptions && + groupConfig.getOptions( + group.name, + Array.from(items, ({ item }) => item) + )) || + false; + } + const force = options && options.force; if (!force) { if (bestGroupOptions && bestGroupOptions.force) continue; - if (usedGroups.has(group)) continue; + if (used) continue; if (items.size <= 1 || totalSize - items.size <= 1) { continue; } @@ -137,25 +168,30 @@ const smartGrouping = (items, groupConfigs) => { itemsWithGroups.delete(item); // Remove all groups that items have from the map to not select them again for (const group of item.groups) { - const list = groupMap.get(group); - if (list !== undefined) list.delete(item); - if (groupChildren) { - usedGroups.add(group); + const state = groupMap.get(group); + if (state !== undefined) { + state.items.delete(item); + if (state.items.size === 0) { + groupMap.delete(group); + } else { + state.options = undefined; + if (groupChildren) { + state.used = true; + } + } } } } groupMap.delete(bestGroup); - const idx = bestGroup.indexOf(":"); - const configKey = bestGroup.slice(0, idx); - const key = bestGroup.slice(idx + 1); - const groupConfig = groupConfigs[+configKey]; + const key = bestGroup.name; + const groupConfig = bestGroup.config; const allItems = Array.from(items, ({ item }) => item); - alreadyGrouped.add(bestGroup); + bestGroup.alreadyGrouped = true; const children = groupChildren ? runGrouping(items) : allItems; - alreadyGrouped.delete(bestGroup); + bestGroup.alreadyGrouped = false; results.push(groupConfig.createGroup(key, children, allItems)); } diff --git a/package.json b/package.json index b55796c32..5e2ecb243 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webpack", - "version": "5.35.0", + "version": "5.36.2", "author": "Tobias Koppers @sokra", "description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.", "license": "MIT", @@ -10,7 +10,7 @@ "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", @@ -39,7 +39,7 @@ "@babel/preset-react": "^7.10.4", "@types/es-module-lexer": "^0.3.0", "@types/jest": "^26.0.15", - "@types/node": "^14.14.10", + "@types/node": "^15.0.1", "babel-loader": "^8.1.0", "benchmark": "^2.1.4", "bundle-loader": "^0.5.6", @@ -55,7 +55,7 @@ "eslint": "^7.14.0", "eslint-config-prettier": "^8.1.0", "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^32.0.2", + "eslint-plugin-jsdoc": "^33.0.0", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^3.1.4", "file-loader": "^6.0.0", diff --git a/schemas/WebpackOptions.check.js b/schemas/WebpackOptions.check.js index df8a46d24..a69a83760 100644 --- a/schemas/WebpackOptions.check.js +++ b/schemas/WebpackOptions.check.js @@ -3,4 +3,4 @@ * DO NOT MODIFY BY HAND. * Run `yarn special-lint-fix` to update */ -const e=/^(?:[A-Za-z]:[\\/]|\\\\|\/)/;module.exports=ke,module.exports.default=ke;const t={amd:{$ref:"#/definitions/Amd"},bail:{$ref:"#/definitions/Bail"},cache:{$ref:"#/definitions/CacheOptions"},context:{$ref:"#/definitions/Context"},dependencies:{$ref:"#/definitions/Dependencies"},devServer:{$ref:"#/definitions/DevServer"},devtool:{$ref:"#/definitions/DevTool"},entry:{$ref:"#/definitions/Entry"},experiments:{$ref:"#/definitions/Experiments"},externals:{$ref:"#/definitions/Externals"},externalsPresets:{$ref:"#/definitions/ExternalsPresets"},externalsType:{$ref:"#/definitions/ExternalsType"},ignoreWarnings:{$ref:"#/definitions/IgnoreWarnings"},infrastructureLogging:{$ref:"#/definitions/InfrastructureLogging"},loader:{$ref:"#/definitions/Loader"},mode:{$ref:"#/definitions/Mode"},module:{$ref:"#/definitions/ModuleOptions"},name:{$ref:"#/definitions/Name"},node:{$ref:"#/definitions/Node"},optimization:{$ref:"#/definitions/Optimization"},output:{$ref:"#/definitions/Output"},parallelism:{$ref:"#/definitions/Parallelism"},performance:{$ref:"#/definitions/Performance"},plugins:{$ref:"#/definitions/Plugins"},profile:{$ref:"#/definitions/Profile"},recordsInputPath:{$ref:"#/definitions/RecordsInputPath"},recordsOutputPath:{$ref:"#/definitions/RecordsOutputPath"},recordsPath:{$ref:"#/definitions/RecordsPath"},resolve:{$ref:"#/definitions/Resolve"},resolveLoader:{$ref:"#/definitions/ResolveLoader"},snapshot:{$ref:"#/definitions/SnapshotOptions"},stats:{$ref:"#/definitions/StatsValue"},target:{$ref:"#/definitions/Target"},watch:{$ref:"#/definitions/Watch"},watchOptions:{$ref:"#/definitions/WatchOptions"}},n=Object.prototype.hasOwnProperty,r={allowCollectingMemory:{type:"boolean"},buildDependencies:{type:"object",additionalProperties:{type:"array",items:{type:"string",minLength:1}}},cacheDirectory:{type:"string",absolutePath:!0},cacheLocation:{type:"string",absolutePath:!0},hashAlgorithm:{type:"string"},idleTimeout:{type:"number",minimum:0},idleTimeoutForInitialStore:{type:"number",minimum:0},immutablePaths:{type:"array",items:{type:"string",absolutePath:!0,minLength:1}},managedPaths:{type:"array",items:{type:"string",absolutePath:!0,minLength:1}},maxAge:{type:"number",minimum:0},maxMemoryGenerations:{type:"number",minimum:0},name:{type:"string"},store:{enum:["pack"]},type:{enum:["filesystem"]},version:{type:"string"}};function s(t,{instancePath:o="",parentData:a,parentDataProperty:i,rootData:l=t}={}){let p=null,f=0;const u=f;let c=!1;const m=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var y=m===f;if(c=c||y,!c){const s=f;if(f==f)if(t&&"object"==typeof t&&!Array.isArray(t)){let e;if(void 0===t.type&&(e="type")){const t={params:{missingProperty:e}};null===p?p=[t]:p.push(t),f++}else{const e=f;for(const e in t)if("maxGenerations"!==e&&"type"!==e){const t={params:{additionalProperty:e}};null===p?p=[t]:p.push(t),f++;break}if(e===f){if(void 0!==t.maxGenerations){let e=t.maxGenerations;const n=f;if(f===n)if("number"==typeof e&&isFinite(e)){if(e<1||isNaN(e)){const e={params:{comparison:">=",limit:1}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}var h=n===f}else h=!0;if(h)if(void 0!==t.type){const e=f;if("memory"!==t.type){const e={params:{}};null===p?p=[e]:p.push(e),f++}h=e===f}else h=!0}}}else{const e={params:{type:"object"}};null===p?p=[e]:p.push(e),f++}if(y=s===f,c=c||y,!c){const s=f;if(f==f)if(t&&"object"==typeof t&&!Array.isArray(t)){let s;if(void 0===t.type&&(s="type")){const e={params:{missingProperty:s}};null===p?p=[e]:p.push(e),f++}else{const s=f;for(const e in t)if(!n.call(r,e)){const t={params:{additionalProperty:e}};null===p?p=[t]:p.push(t),f++;break}if(s===f){if(void 0!==t.allowCollectingMemory){const e=f;if("boolean"!=typeof t.allowCollectingMemory){const e={params:{type:"boolean"}};null===p?p=[e]:p.push(e),f++}var d=e===f}else d=!0;if(d){if(void 0!==t.buildDependencies){let e=t.buildDependencies;const n=f;if(f===n)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=f;if(f===r)if(Array.isArray(n)){const e=n.length;for(let t=0;t=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.idleTimeoutForInitialStore){let e=t.idleTimeoutForInitialStore;const n=f;if(f===n)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.immutablePaths){let n=t.immutablePaths;const r=f;if(f===r)if(Array.isArray(n)){const t=n.length;for(let r=0;r=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.maxMemoryGenerations){let e=t.maxMemoryGenerations;const n=f;if(f===n)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.name){const e=f;if("string"!=typeof t.name){const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d){if(void 0!==t.store){const e=f;if("pack"!==t.store){const e={params:{}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d){if(void 0!==t.type){const e=f;if("filesystem"!==t.type){const e={params:{}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d)if(void 0!==t.version){const e=f;if("string"!=typeof t.version){const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0}}}}}}}}}}}}}}}}else{const e={params:{type:"object"}};null===p?p=[e]:p.push(e),f++}y=s===f,c=c||y}}if(!c){const e={params:{}};return null===p?p=[e]:p.push(e),f++,s.errors=p,!1}return f=u,null!==p&&(u?p.length=u:p=null),s.errors=p,0===f}function o(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:a=e}={}){let i=null,l=0;const p=l;let f=!1;const u=l;if(!0!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var c=u===l;if(f=f||c,!f){const o=l;s(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:a})||(i=null===i?s.errors:i.concat(s.errors),l=i.length),c=o===l,f=f||c}if(!f){const e={params:{}};return null===i?i=[e]:i.push(e),l++,o.errors=i,!1}return l=p,null!==i&&(p?i.length=p:i=null),o.errors=i,0===l}const a={chunkLoading:{$ref:"#/definitions/ChunkLoading"},dependOn:{anyOf:[{type:"array",items:{type:"string",minLength:1},minItems:1,uniqueItems:!0},{type:"string",minLength:1}]},filename:{$ref:"#/definitions/EntryFilename"},import:{$ref:"#/definitions/EntryItem"},layer:{$ref:"#/definitions/Layer"},library:{$ref:"#/definitions/LibraryOptions"},publicPath:{$ref:"#/definitions/PublicPath"},runtime:{$ref:"#/definitions/EntryRuntime"},wasmLoading:{$ref:"#/definitions/WasmLoading"}};function i(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const l=a;let p=!1;const f=a;if(!1!==e){const e={params:{}};null===o?o=[e]:o.push(e),a++}var u=f===a;if(p=p||u,!p){const t=a,n=a;let r=!1;const s=a;if("jsonp"!==e&&"import-scripts"!==e&&"require"!==e&&"async-node"!==e){const e={params:{}};null===o?o=[e]:o.push(e),a++}var c=s===a;if(r=r||c,!r){const t=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a,r=r||c}if(r)a=n,null!==o&&(n?o.length=n:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}u=t===a,p=p||u}if(!p){const e={params:{}};return null===o?o=[e]:o.push(e),a++,i.errors=o,!1}return a=l,null!==o&&(l?o.length=l:o=null),i.errors=o,0===a}function l(t,{instancePath:n="",parentData:r,parentDataProperty:s,rootData:o=t}={}){let a=null,i=0;const p=i;let f=!1,u=null;const c=i,m=i;let y=!1;const h=i;if(i===h)if("string"==typeof t){if(t.includes("!")||!1!==e.test(t)){const e={params:{}};null===a?a=[e]:a.push(e),i++}else if(t.length<1){const e={params:{}};null===a?a=[e]:a.push(e),i++}}else{const e={params:{type:"string"}};null===a?a=[e]:a.push(e),i++}var d=h===i;if(y=y||d,!y){const e=i;if(!(t instanceof Function)){const e={params:{}};null===a?a=[e]:a.push(e),i++}d=e===i,y=y||d}if(y)i=m,null!==a&&(m?a.length=m:a=null);else{const e={params:{}};null===a?a=[e]:a.push(e),i++}if(c===i&&(f=!0,u=0),!f){const e={params:{passingSchemas:u}};return null===a?a=[e]:a.push(e),i++,l.errors=a,!1}return i=p,null!==a&&(p?a.length=p:a=null),l.errors=a,0===i}function p(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const f=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}var u=f===a;if(l=l||u,!l){const t=a;if(a==a)if(e&&"object"==typeof e&&!Array.isArray(e)){const t=a;for(const t in e)if("amd"!==t&&"commonjs"!==t&&"commonjs2"!==t&&"root"!==t){const e={params:{additionalProperty:t}};null===o?o=[e]:o.push(e),a++;break}if(t===a){if(void 0!==e.amd){const t=a;if("string"!=typeof e.amd){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}var c=t===a}else c=!0;if(c){if(void 0!==e.commonjs){const t=a;if("string"!=typeof e.commonjs){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0;if(c){if(void 0!==e.commonjs2){const t=a;if("string"!=typeof e.commonjs2){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0;if(c)if(void 0!==e.root){const t=a;if("string"!=typeof e.root){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0}}}}else{const e={params:{type:"object"}};null===o?o=[e]:o.push(e),a++}u=t===a,l=l||u}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,p.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),p.errors=o,0===a}function f(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(a===p)if(Array.isArray(e))if(e.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{const t=e.length;for(let n=0;n1){const r={};for(;n--;){let s=t[n];if("string"==typeof s){if("number"==typeof r[s]){e=r[s];const t={params:{i:n,j:e}};null===p?p=[t]:p.push(t),f++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===p?p=[e]:p.push(e),f++}var g=o===f;if(s=s||g,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}g=e===f,s=s||g}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.filename){const n=f;l(e.filename,{instancePath:t+"/filename",parentData:e,parentDataProperty:"filename",rootData:o})||(p=null===p?l.errors:p.concat(l.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.import){let t=e.import;const n=f,r=f;let s=!1;const o=f;if(f===o)if(Array.isArray(t))if(t.length<1){const e={params:{limit:1}};null===p?p=[e]:p.push(e),f++}else{var b=!0;const e=t.length;for(let n=0;n1){const r={};for(;n--;){let s=t[n];if("string"==typeof s){if("number"==typeof r[s]){e=r[s];const t={params:{i:n,j:e}};null===p?p=[t]:p.push(t),f++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===p?p=[e]:p.push(e),f++}var v=o===f;if(s=s||v,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}v=e===f,s=s||v}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.layer){let t=e.layer;const n=f,r=f;let s=!1;const o=f;if(null!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var D=o===f;if(s=s||D,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}D=e===f,s=s||D}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.library){const n=f;u(e.library,{instancePath:t+"/library",parentData:e,parentDataProperty:"library",rootData:o})||(p=null===p?u.errors:p.concat(u.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.publicPath){const n=f;c(e.publicPath,{instancePath:t+"/publicPath",parentData:e,parentDataProperty:"publicPath",rootData:o})||(p=null===p?c.errors:p.concat(c.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.runtime){let t=e.runtime;const n=f;if(f==f){if("string"!=typeof t)return y.errors=[{params:{type:"string"}}],!1;if(t.length<1)return y.errors=[{params:{}}],!1}h=n===f}else h=!0;if(h)if(void 0!==e.wasmLoading){const n=f;m(e.wasmLoading,{instancePath:t+"/wasmLoading",parentData:e,parentDataProperty:"wasmLoading",rootData:o})||(p=null===p?m.errors:p.concat(m.errors),f=p.length),h=n===f}else h=!0}}}}}}}}}}}return y.errors=p,0===f}function h(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;if(0===a){if(!e||"object"!=typeof e||Array.isArray(e))return h.errors=[{params:{type:"object"}}],!1;for(const n in e){let r=e[n];const f=a,u=a;let c=!1;const m=a,d=a;let g=!1;const b=a;if(a===b)if(Array.isArray(r))if(r.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{var i=!0;const e=r.length;for(let t=0;t1){const n={};for(;t--;){let s=r[t];if("string"==typeof s){if("number"==typeof n[s]){e=n[s];const r={params:{i:t,j:e}};null===o?o=[r]:o.push(r),a++;break}n[s]=t}}}}}else{const e={params:{type:"array"}};null===o?o=[e]:o.push(e),a++}var l=b===a;if(g=g||l,!g){const e=a;if(a===e)if("string"==typeof r){if(r.length<1){const e={params:{}};null===o?o=[e]:o.push(e),a++}}else{const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}l=e===a,g=g||l}if(g)a=d,null!==o&&(d?o.length=d:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}var p=m===a;if(c=c||p,!c){const i=a;y(r,{instancePath:t+"/"+n.replace(/~/g,"~0").replace(/\//g,"~1"),parentData:e,parentDataProperty:n,rootData:s})||(o=null===o?y.errors:o.concat(y.errors),a=o.length),p=i===a,c=c||p}if(!c){const e={params:{}};return null===o?o=[e]:o.push(e),a++,h.errors=o,!1}if(a=u,null!==o&&(u?o.length=u:o=null),f!==a)break}}return h.errors=o,0===a}function d(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1,p=null;const f=a,u=a;let c=!1;const m=a;if(a===m)if(Array.isArray(e))if(e.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{var y=!0;const t=e.length;for(let n=0;n1){const r={};for(;n--;){let s=e[n];if("string"==typeof s){if("number"==typeof r[s]){t=r[s];const e={params:{i:n,j:t}};null===o?o=[e]:o.push(e),a++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===o?o=[e]:o.push(e),a++}var h=m===a;if(c=c||h,!c){const t=a;if(a===t)if("string"==typeof e){if(e.length<1){const e={params:{}};null===o?o=[e]:o.push(e),a++}}else{const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}h=t===a,c=c||h}if(c)a=u,null!==o&&(u?o.length=u:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}if(f===a&&(l=!0,p=0),!l){const e={params:{passingSchemas:p}};return null===o?o=[e]:o.push(e),a++,d.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),d.errors=o,0===a}function g(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;h(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?h.errors:o.concat(h.errors),a=o.length);var f=p===a;if(l=l||f,!l){const i=a;d(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?d.errors:o.concat(d.errors),a=o.length),f=i===a,l=l||f}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,g.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),g.errors=o,0===a}function b(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(!(e instanceof Function)){const e={params:{}};null===o?o=[e]:o.push(e),a++}var f=p===a;if(l=l||f,!l){const i=a;g(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?g.errors:o.concat(g.errors),a=o.length),f=i===a,l=l||f}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,b.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),b.errors=o,0===a}const v={validate:D};function D(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(!(e instanceof RegExp)){const e={params:{}};null===o?o=[e]:o.push(e),a++}var f=p===a;if(l=l||f,!l){const n=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}if(f=n===a,l=l||f,!l){const n=a;if(a===n)if(e&&"object"==typeof e&&!Array.isArray(e)){const n=a;for(const t in e)if("byLayer"!==t){let n=e[t];const r=a,s=a;let i=!1;const l=a;if(a===l)if(Array.isArray(n)){const e=n.length;for(let t=0;t=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var u=m===l;if(c=c||u,!c){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}u=t===l,c=c||u}if(c)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.filename){let n=t.filename;const r=l,s=l;let o=!1;const a=l;if(l===a)if("string"==typeof n){if(n.includes("!")||!1!==e.test(n)){const e={params:{}};null===i?i=[e]:i.push(e),l++}else if(n.length<1){const e={params:{}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}var c=a===l;if(o=o||c,!o){const e=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}c=e===l,o=o||c}if(!o){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=s,null!==i&&(s?i.length=s:i=null),p=r===l}else p=!0;if(p){if(void 0!==t.idHint){const e=l;if("string"!=typeof t.idHint)return te.errors=[{params:{type:"string"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.layer){let e=t.layer;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var m=o===l;if(s=s||m,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(m=t===l,s=s||m,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}m=t===l,s=s||m}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncRequests){let e=t.maxAsyncRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncSize){let e=t.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var y=c===l;if(u=u||y,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}y=t===l,u=u||y}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialRequests){let e=t.maxInitialRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialSize){let e=t.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var h=c===l;if(u=u||h,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}h=t===l,u=u||h}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxSize){let e=t.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var d=c===l;if(u=u||d,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}d=t===l,u=u||d}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minChunks){let e=t.minChunks;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.minRemainingSize){let e=t.minRemainingSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var g=c===l;if(u=u||g,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}g=t===l,u=u||g}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minSize){let e=t.minSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var b=c===l;if(u=u||b,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}b=t===l,u=u||b}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.name){let e=t.name;const n=l,r=l;let s=!1;const o=l;if(!1!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var v=o===l;if(s=s||v,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(v=t===l,s=s||v,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}v=t===l,s=s||v}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.priority){let e=t.priority;const n=l;if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;p=n===l}else p=!0;if(p){if(void 0!==t.reuseExistingChunk){const e=l;if("boolean"!=typeof t.reuseExistingChunk)return te.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.test){let e=t.test;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var D=o===l;if(s=s||D,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(D=t===l,s=s||D,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}D=t===l,s=s||D}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.type){let e=t.type;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var P=o===l;if(s=s||P,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(P=t===l,s=s||P,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}P=t===l,s=s||P}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p)if(void 0!==t.usedExports){const e=l;if("boolean"!=typeof t.usedExports)return te.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0}}}}}}}}}}}}}}}}}}}}}}return te.errors=i,0===l}function ne(t,{instancePath:r="",parentData:s,parentDataProperty:o,rootData:a=t}={}){let i=null,l=0;if(0===l){if(!t||"object"!=typeof t||Array.isArray(t))return ne.errors=[{params:{type:"object"}}],!1;{const s=l;for(const e in t)if(!n.call(Y,e))return ne.errors=[{params:{additionalProperty:e}}],!1;if(s===l){if(void 0!==t.automaticNameDelimiter){let e=t.automaticNameDelimiter;const n=l;if(l===n){if("string"!=typeof e)return ne.errors=[{params:{type:"string"}}],!1;if(e.length<1)return ne.errors=[{params:{}}],!1}var p=n===l}else p=!0;if(p){if(void 0!==t.cacheGroups){let e=t.cacheGroups;const n=l,s=l,o=l;if(l===o)if(e&&"object"==typeof e&&!Array.isArray(e)){let t;if(void 0===e.test&&(t="test")){const e={};null===i?i=[e]:i.push(e),l++}else if(void 0!==e.test){let t=e.test;const n=l;let r=!1;const s=l;if(!(t instanceof RegExp)){const e={};null===i?i=[e]:i.push(e),l++}var f=s===l;if(r=r||f,!r){const e=l;if("string"!=typeof t){const e={};null===i?i=[e]:i.push(e),l++}if(f=e===l,r=r||f,!r){const e=l;if(!(t instanceof Function)){const e={};null===i?i=[e]:i.push(e),l++}f=e===l,r=r||f}}if(r)l=n,null!==i&&(n?i.length=n:i=null);else{const e={};null===i?i=[e]:i.push(e),l++}}}else{const e={};null===i?i=[e]:i.push(e),l++}if(o===l)return ne.errors=[{params:{}}],!1;if(l=s,null!==i&&(s?i.length=s:i=null),l===n){if(!e||"object"!=typeof e||Array.isArray(e))return ne.errors=[{params:{type:"object"}}],!1;for(const t in e){let n=e[t];const s=l,o=l;let p=!1;const f=l;if(!1!==n){const e={params:{}};null===i?i=[e]:i.push(e),l++}var u=f===l;if(p=p||u,!p){const s=l;if(!(n instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;if("string"!=typeof n){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;te(n,{instancePath:r+"/cacheGroups/"+t.replace(/~/g,"~0").replace(/\//g,"~1"),parentData:e,parentDataProperty:t,rootData:a})||(i=null===i?te.errors:i.concat(te.errors),l=i.length),u=s===l,p=p||u}}}}if(!p){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}if(l=o,null!==i&&(o?i.length=o:i=null),s!==l)break}}p=n===l}else p=!0;if(p){if(void 0!==t.chunks){let e=t.chunks;const n=l,r=l;let s=!1;const o=l;if("initial"!==e&&"async"!==e&&"all"!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var c=o===l;if(s=s||c,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}c=t===l,s=s||c}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.defaultSizeTypes){let e=t.defaultSizeTypes;const n=l;if(l===n){if(!Array.isArray(e))return ne.errors=[{params:{type:"array"}}],!1;if(e.length<1)return ne.errors=[{params:{limit:1}}],!1;{const t=e.length;for(let n=0;n=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var m=c===l;if(u=u||m,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}m=t===l,u=u||m}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.fallbackCacheGroup){let e=t.fallbackCacheGroup;const n=l;if(l===n){if(!e||"object"!=typeof e||Array.isArray(e))return ne.errors=[{params:{type:"object"}}],!1;{const t=l;for(const t in e)if("automaticNameDelimiter"!==t&&"maxAsyncSize"!==t&&"maxInitialSize"!==t&&"maxSize"!==t&&"minSize"!==t)return ne.errors=[{params:{additionalProperty:t}}],!1;if(t===l){if(void 0!==e.automaticNameDelimiter){let t=e.automaticNameDelimiter;const n=l;if(l===n){if("string"!=typeof t)return ne.errors=[{params:{type:"string"}}],!1;if(t.length<1)return ne.errors=[{params:{}}],!1}var y=n===l}else y=!0;if(y){if(void 0!==e.maxAsyncSize){let t=e.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var h=u===l;if(f=f||h,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}h=e===l,f=f||h}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y){if(void 0!==e.maxInitialSize){let t=e.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var d=u===l;if(f=f||d,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}d=e===l,f=f||d}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y){if(void 0!==e.maxSize){let t=e.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var g=u===l;if(f=f||g,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}g=e===l,f=f||g}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y)if(void 0!==e.minSize){let t=e.minSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var b=u===l;if(f=f||b,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}b=e===l,f=f||b}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0}}}}}}p=n===l}else p=!0;if(p){if(void 0!==t.filename){let n=t.filename;const r=l,s=l;let o=!1;const a=l;if(l===a)if("string"==typeof n){if(n.includes("!")||!1!==e.test(n)){const e={params:{}};null===i?i=[e]:i.push(e),l++}else if(n.length<1){const e={params:{}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}var v=a===l;if(o=o||v,!o){const e=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}v=e===l,o=o||v}if(!o){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=s,null!==i&&(s?i.length=s:i=null),p=r===l}else p=!0;if(p){if(void 0!==t.hidePathInfo){const e=l;if("boolean"!=typeof t.hidePathInfo)return ne.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.maxAsyncRequests){let e=t.maxAsyncRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncSize){let e=t.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var D=c===l;if(u=u||D,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}D=t===l,u=u||D}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialRequests){let e=t.maxInitialRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialSize){let e=t.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var P=c===l;if(u=u||P,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}P=t===l,u=u||P}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxSize){let e=t.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var A=c===l;if(u=u||A,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}A=t===l,u=u||A}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minChunks){let e=t.minChunks;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.minRemainingSize){let e=t.minRemainingSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var x=c===l;if(u=u||x,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}x=t===l,u=u||x}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minSize){let e=t.minSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var k=c===l;if(u=u||k,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}k=t===l,u=u||k}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.name){let e=t.name;const n=l,r=l;let s=!1;const o=l;if(!1!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var j=o===l;if(s=s||j,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(j=t===l,s=s||j,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}j=t===l,s=s||j}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p)if(void 0!==t.usedExports){const e=l;if("boolean"!=typeof t.usedExports)return ne.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0}}}}}}}}}}}}}}}}}}}return ne.errors=i,0===l}function re(e,{instancePath:t="",parentData:r,parentDataProperty:s,rootData:o=e}={}){let a=null,i=0;if(0===i){if(!e||"object"!=typeof e||Array.isArray(e))return re.errors=[{params:{type:"object"}}],!1;{const r=i;for(const t in e)if(!n.call(X,t))return re.errors=[{params:{additionalProperty:t}}],!1;if(r===i){if(void 0!==e.checkWasmTypes){const t=i;if("boolean"!=typeof e.checkWasmTypes)return re.errors=[{params:{type:"boolean"}}],!1;var l=t===i}else l=!0;if(l){if(void 0!==e.chunkIds){let t=e.chunkIds;const n=i;if("natural"!==t&&"named"!==t&&"deterministic"!==t&&"size"!==t&&"total-size"!==t&&!1!==t)return re.errors=[{params:{}}],!1;l=n===i}else l=!0;if(l){if(void 0!==e.concatenateModules){const t=i;if("boolean"!=typeof e.concatenateModules)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.emitOnErrors){const t=i;if("boolean"!=typeof e.emitOnErrors)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.flagIncludedChunks){const t=i;if("boolean"!=typeof e.flagIncludedChunks)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.innerGraph){const t=i;if("boolean"!=typeof e.innerGraph)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.mangleExports){let t=e.mangleExports;const n=i,r=i;let s=!1;const o=i;if("size"!==t&&"deterministic"!==t){const e={params:{}};null===a?a=[e]:a.push(e),i++}var p=o===i;if(s=s||p,!s){const e=i;if("boolean"!=typeof t){const e={params:{type:"boolean"}};null===a?a=[e]:a.push(e),i++}p=e===i,s=s||p}if(!s){const e={params:{}};return null===a?a=[e]:a.push(e),i++,re.errors=a,!1}i=r,null!==a&&(r?a.length=r:a=null),l=n===i}else l=!0;if(l){if(void 0!==e.mangleWasmImports){const t=i;if("boolean"!=typeof e.mangleWasmImports)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.mergeDuplicateChunks){const t=i;if("boolean"!=typeof e.mergeDuplicateChunks)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.minimize){const t=i;if("boolean"!=typeof e.minimize)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.minimizer){let t=e.minimizer;const n=i;if(i===n){if(!Array.isArray(t))return re.errors=[{params:{type:"array"}}],!1;{const e=t.length;for(let n=0;n=",limit:1}}],!1}y=n===f}else y=!0;if(y){if(void 0!==t.hashFunction){let e=t.hashFunction;const n=f,r=f;let s=!1;const o=f;if(f===o)if("string"==typeof e){if(e.length<1){const e={params:{}};null===l?l=[e]:l.push(e),f++}}else{const e={params:{type:"string"}};null===l?l=[e]:l.push(e),f++}var v=o===f;if(s=s||v,!s){const t=f;if(!(e instanceof Function)){const e={params:{}};null===l?l=[e]:l.push(e),f++}v=t===f,s=s||v}if(!s){const e={params:{}};return null===l?l=[e]:l.push(e),f++,ce.errors=l,!1}f=r,null!==l&&(r?l.length=r:l=null),y=n===f}else y=!0;if(y){if(void 0!==t.hashSalt){let e=t.hashSalt;const n=f;if(f==f){if("string"!=typeof e)return ce.errors=[{params:{type:"string"}}],!1;if(e.length<1)return ce.errors=[{params:{}}],!1}y=n===f}else y=!0;if(y){if(void 0!==t.hotUpdateChunkFilename){let n=t.hotUpdateChunkFilename;const r=f;if(f==f){if("string"!=typeof n)return ce.errors=[{params:{type:"string"}}],!1;if(n.includes("!")||!1!==e.test(n))return ce.errors=[{params:{}}],!1}y=r===f}else y=!0;if(y){if(void 0!==t.hotUpdateGlobal){const e=f;if("string"!=typeof t.hotUpdateGlobal)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.hotUpdateMainFilename){let n=t.hotUpdateMainFilename;const r=f;if(f==f){if("string"!=typeof n)return ce.errors=[{params:{type:"string"}}],!1;if(n.includes("!")||!1!==e.test(n))return ce.errors=[{params:{}}],!1}y=r===f}else y=!0;if(y){if(void 0!==t.iife){const e=f;if("boolean"!=typeof t.iife)return ce.errors=[{params:{type:"boolean"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.importFunctionName){const e=f;if("string"!=typeof t.importFunctionName)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.importMetaName){const e=f;if("string"!=typeof t.importMetaName)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.library){const e=f;ue(t.library,{instancePath:r+"/library",parentData:t,parentDataProperty:"library",rootData:a})||(l=null===l?ue.errors:l.concat(ue.errors),f=l.length),y=e===f}else y=!0;if(y){if(void 0!==t.libraryExport){let e=t.libraryExport;const n=f,r=f;let s=!1,o=null;const a=f,i=f;let p=!1;const u=f;if(f===u)if(Array.isArray(e)){const t=e.length;for(let n=0;n=",limit:1}}],!1}c=t===f}else c=!0;if(c){if(void 0!==r.performance){const e=f;me(r.performance,{instancePath:s+"/performance",parentData:r,parentDataProperty:"performance",rootData:l})||(p=null===p?me.errors:p.concat(me.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.plugins){const e=f;ye(r.plugins,{instancePath:s+"/plugins",parentData:r,parentDataProperty:"plugins",rootData:l})||(p=null===p?ye.errors:p.concat(ye.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.profile){const e=f;if("boolean"!=typeof r.profile)return ke.errors=[{params:{type:"boolean"}}],!1;c=e===f}else c=!0;if(c){if(void 0!==r.recordsInputPath){let t=r.recordsInputPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var k=a===f;if(o=o||k,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}k=n===f,o=o||k}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.recordsOutputPath){let t=r.recordsOutputPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var j=a===f;if(o=o||j,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}j=n===f,o=o||j}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.recordsPath){let t=r.recordsPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var S=a===f;if(o=o||S,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}S=n===f,o=o||S}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.resolve){const e=f;he(r.resolve,{instancePath:s+"/resolve",parentData:r,parentDataProperty:"resolve",rootData:l})||(p=null===p?he.errors:p.concat(he.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.resolveLoader){const e=f;de(r.resolveLoader,{instancePath:s+"/resolveLoader",parentData:r,parentDataProperty:"resolveLoader",rootData:l})||(p=null===p?de.errors:p.concat(de.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.snapshot){let t=r.snapshot;const n=f;if(f==f){if(!t||"object"!=typeof t||Array.isArray(t))return ke.errors=[{params:{type:"object"}}],!1;{const n=f;for(const e in t)if("buildDependencies"!==e&&"immutablePaths"!==e&&"managedPaths"!==e&&"module"!==e&&"resolve"!==e&&"resolveBuildDependencies"!==e)return ke.errors=[{params:{additionalProperty:e}}],!1;if(n===f){if(void 0!==t.buildDependencies){let e=t.buildDependencies;const n=f;if(f===n){if(!e||"object"!=typeof e||Array.isArray(e))return ke.errors=[{params:{type:"object"}}],!1;{const t=f;for(const t in e)if("hash"!==t&&"timestamp"!==t)return ke.errors=[{params:{additionalProperty:t}}],!1;if(t===f){if(void 0!==e.hash){const t=f;if("boolean"!=typeof e.hash)return ke.errors=[{params:{type:"boolean"}}],!1;var C=t===f}else C=!0;if(C)if(void 0!==e.timestamp){const t=f;if("boolean"!=typeof e.timestamp)return ke.errors=[{params:{type:"boolean"}}],!1;C=t===f}else C=!0}}}var F=n===f}else F=!0;if(F){if(void 0!==t.immutablePaths){let n=t.immutablePaths;const r=f;if(f===r){if(!Array.isArray(n))return ke.errors=[{params:{type:"array"}}],!1;{const t=n.length;for(let r=0;r=",limit:1}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}var h=n===f}else h=!0;if(h)if(void 0!==t.type){const e=f;if("memory"!==t.type){const e={params:{}};null===p?p=[e]:p.push(e),f++}h=e===f}else h=!0}}}else{const e={params:{type:"object"}};null===p?p=[e]:p.push(e),f++}if(y=s===f,c=c||y,!c){const s=f;if(f==f)if(t&&"object"==typeof t&&!Array.isArray(t)){let s;if(void 0===t.type&&(s="type")){const e={params:{missingProperty:s}};null===p?p=[e]:p.push(e),f++}else{const s=f;for(const e in t)if(!n.call(r,e)){const t={params:{additionalProperty:e}};null===p?p=[t]:p.push(t),f++;break}if(s===f){if(void 0!==t.allowCollectingMemory){const e=f;if("boolean"!=typeof t.allowCollectingMemory){const e={params:{type:"boolean"}};null===p?p=[e]:p.push(e),f++}var d=e===f}else d=!0;if(d){if(void 0!==t.buildDependencies){let e=t.buildDependencies;const n=f;if(f===n)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=f;if(f===r)if(Array.isArray(n)){const e=n.length;for(let t=0;t=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.idleTimeoutForInitialStore){let e=t.idleTimeoutForInitialStore;const n=f;if(f===n)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.immutablePaths){let n=t.immutablePaths;const r=f;if(f===r)if(Array.isArray(n)){const t=n.length;for(let r=0;r=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.maxMemoryGenerations){let e=t.maxMemoryGenerations;const n=f;if(f===n)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"number"}};null===p?p=[e]:p.push(e),f++}d=n===f}else d=!0;if(d){if(void 0!==t.name){const e=f;if("string"!=typeof t.name){const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d){if(void 0!==t.profile){const e=f;if("boolean"!=typeof t.profile){const e={params:{type:"boolean"}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d){if(void 0!==t.store){const e=f;if("pack"!==t.store){const e={params:{}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d){if(void 0!==t.type){const e=f;if("filesystem"!==t.type){const e={params:{}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0;if(d)if(void 0!==t.version){const e=f;if("string"!=typeof t.version){const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}d=e===f}else d=!0}}}}}}}}}}}}}}}}}else{const e={params:{type:"object"}};null===p?p=[e]:p.push(e),f++}y=s===f,c=c||y}}if(!c){const e={params:{}};return null===p?p=[e]:p.push(e),f++,s.errors=p,!1}return f=u,null!==p&&(u?p.length=u:p=null),s.errors=p,0===f}function o(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:a=e}={}){let i=null,l=0;const p=l;let f=!1;const u=l;if(!0!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var c=u===l;if(f=f||c,!f){const o=l;s(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:a})||(i=null===i?s.errors:i.concat(s.errors),l=i.length),c=o===l,f=f||c}if(!f){const e={params:{}};return null===i?i=[e]:i.push(e),l++,o.errors=i,!1}return l=p,null!==i&&(p?i.length=p:i=null),o.errors=i,0===l}const a={chunkLoading:{$ref:"#/definitions/ChunkLoading"},dependOn:{anyOf:[{type:"array",items:{type:"string",minLength:1},minItems:1,uniqueItems:!0},{type:"string",minLength:1}]},filename:{$ref:"#/definitions/EntryFilename"},import:{$ref:"#/definitions/EntryItem"},layer:{$ref:"#/definitions/Layer"},library:{$ref:"#/definitions/LibraryOptions"},publicPath:{$ref:"#/definitions/PublicPath"},runtime:{$ref:"#/definitions/EntryRuntime"},wasmLoading:{$ref:"#/definitions/WasmLoading"}};function i(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const l=a;let p=!1;const f=a;if(!1!==e){const e={params:{}};null===o?o=[e]:o.push(e),a++}var u=f===a;if(p=p||u,!p){const t=a,n=a;let r=!1;const s=a;if("jsonp"!==e&&"import-scripts"!==e&&"require"!==e&&"async-node"!==e){const e={params:{}};null===o?o=[e]:o.push(e),a++}var c=s===a;if(r=r||c,!r){const t=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a,r=r||c}if(r)a=n,null!==o&&(n?o.length=n:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}u=t===a,p=p||u}if(!p){const e={params:{}};return null===o?o=[e]:o.push(e),a++,i.errors=o,!1}return a=l,null!==o&&(l?o.length=l:o=null),i.errors=o,0===a}function l(t,{instancePath:n="",parentData:r,parentDataProperty:s,rootData:o=t}={}){let a=null,i=0;const p=i;let f=!1,u=null;const c=i,m=i;let y=!1;const h=i;if(i===h)if("string"==typeof t){if(t.includes("!")||!1!==e.test(t)){const e={params:{}};null===a?a=[e]:a.push(e),i++}else if(t.length<1){const e={params:{}};null===a?a=[e]:a.push(e),i++}}else{const e={params:{type:"string"}};null===a?a=[e]:a.push(e),i++}var d=h===i;if(y=y||d,!y){const e=i;if(!(t instanceof Function)){const e={params:{}};null===a?a=[e]:a.push(e),i++}d=e===i,y=y||d}if(y)i=m,null!==a&&(m?a.length=m:a=null);else{const e={params:{}};null===a?a=[e]:a.push(e),i++}if(c===i&&(f=!0,u=0),!f){const e={params:{passingSchemas:u}};return null===a?a=[e]:a.push(e),i++,l.errors=a,!1}return i=p,null!==a&&(p?a.length=p:a=null),l.errors=a,0===i}function p(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const f=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}var u=f===a;if(l=l||u,!l){const t=a;if(a==a)if(e&&"object"==typeof e&&!Array.isArray(e)){const t=a;for(const t in e)if("amd"!==t&&"commonjs"!==t&&"commonjs2"!==t&&"root"!==t){const e={params:{additionalProperty:t}};null===o?o=[e]:o.push(e),a++;break}if(t===a){if(void 0!==e.amd){const t=a;if("string"!=typeof e.amd){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}var c=t===a}else c=!0;if(c){if(void 0!==e.commonjs){const t=a;if("string"!=typeof e.commonjs){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0;if(c){if(void 0!==e.commonjs2){const t=a;if("string"!=typeof e.commonjs2){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0;if(c)if(void 0!==e.root){const t=a;if("string"!=typeof e.root){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}c=t===a}else c=!0}}}}else{const e={params:{type:"object"}};null===o?o=[e]:o.push(e),a++}u=t===a,l=l||u}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,p.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),p.errors=o,0===a}function f(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(a===p)if(Array.isArray(e))if(e.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{const t=e.length;for(let n=0;n1){const r={};for(;n--;){let s=t[n];if("string"==typeof s){if("number"==typeof r[s]){e=r[s];const t={params:{i:n,j:e}};null===p?p=[t]:p.push(t),f++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===p?p=[e]:p.push(e),f++}var g=o===f;if(s=s||g,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}g=e===f,s=s||g}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.filename){const n=f;l(e.filename,{instancePath:t+"/filename",parentData:e,parentDataProperty:"filename",rootData:o})||(p=null===p?l.errors:p.concat(l.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.import){let t=e.import;const n=f,r=f;let s=!1;const o=f;if(f===o)if(Array.isArray(t))if(t.length<1){const e={params:{limit:1}};null===p?p=[e]:p.push(e),f++}else{var b=!0;const e=t.length;for(let n=0;n1){const r={};for(;n--;){let s=t[n];if("string"==typeof s){if("number"==typeof r[s]){e=r[s];const t={params:{i:n,j:e}};null===p?p=[t]:p.push(t),f++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===p?p=[e]:p.push(e),f++}var v=o===f;if(s=s||v,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}v=e===f,s=s||v}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.layer){let t=e.layer;const n=f,r=f;let s=!1;const o=f;if(null!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var D=o===f;if(s=s||D,!s){const e=f;if(f===e)if("string"==typeof t){if(t.length<1){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}D=e===f,s=s||D}if(!s){const e={params:{}};return null===p?p=[e]:p.push(e),f++,y.errors=p,!1}f=r,null!==p&&(r?p.length=r:p=null),h=n===f}else h=!0;if(h){if(void 0!==e.library){const n=f;u(e.library,{instancePath:t+"/library",parentData:e,parentDataProperty:"library",rootData:o})||(p=null===p?u.errors:p.concat(u.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.publicPath){const n=f;c(e.publicPath,{instancePath:t+"/publicPath",parentData:e,parentDataProperty:"publicPath",rootData:o})||(p=null===p?c.errors:p.concat(c.errors),f=p.length),h=n===f}else h=!0;if(h){if(void 0!==e.runtime){let t=e.runtime;const n=f;if(f==f){if("string"!=typeof t)return y.errors=[{params:{type:"string"}}],!1;if(t.length<1)return y.errors=[{params:{}}],!1}h=n===f}else h=!0;if(h)if(void 0!==e.wasmLoading){const n=f;m(e.wasmLoading,{instancePath:t+"/wasmLoading",parentData:e,parentDataProperty:"wasmLoading",rootData:o})||(p=null===p?m.errors:p.concat(m.errors),f=p.length),h=n===f}else h=!0}}}}}}}}}}}return y.errors=p,0===f}function h(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;if(0===a){if(!e||"object"!=typeof e||Array.isArray(e))return h.errors=[{params:{type:"object"}}],!1;for(const n in e){let r=e[n];const f=a,u=a;let c=!1;const m=a,d=a;let g=!1;const b=a;if(a===b)if(Array.isArray(r))if(r.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{var i=!0;const e=r.length;for(let t=0;t1){const n={};for(;t--;){let s=r[t];if("string"==typeof s){if("number"==typeof n[s]){e=n[s];const r={params:{i:t,j:e}};null===o?o=[r]:o.push(r),a++;break}n[s]=t}}}}}else{const e={params:{type:"array"}};null===o?o=[e]:o.push(e),a++}var l=b===a;if(g=g||l,!g){const e=a;if(a===e)if("string"==typeof r){if(r.length<1){const e={params:{}};null===o?o=[e]:o.push(e),a++}}else{const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}l=e===a,g=g||l}if(g)a=d,null!==o&&(d?o.length=d:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}var p=m===a;if(c=c||p,!c){const i=a;y(r,{instancePath:t+"/"+n.replace(/~/g,"~0").replace(/\//g,"~1"),parentData:e,parentDataProperty:n,rootData:s})||(o=null===o?y.errors:o.concat(y.errors),a=o.length),p=i===a,c=c||p}if(!c){const e={params:{}};return null===o?o=[e]:o.push(e),a++,h.errors=o,!1}if(a=u,null!==o&&(u?o.length=u:o=null),f!==a)break}}return h.errors=o,0===a}function d(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1,p=null;const f=a,u=a;let c=!1;const m=a;if(a===m)if(Array.isArray(e))if(e.length<1){const e={params:{limit:1}};null===o?o=[e]:o.push(e),a++}else{var y=!0;const t=e.length;for(let n=0;n1){const r={};for(;n--;){let s=e[n];if("string"==typeof s){if("number"==typeof r[s]){t=r[s];const e={params:{i:n,j:t}};null===o?o=[e]:o.push(e),a++;break}r[s]=n}}}}}else{const e={params:{type:"array"}};null===o?o=[e]:o.push(e),a++}var h=m===a;if(c=c||h,!c){const t=a;if(a===t)if("string"==typeof e){if(e.length<1){const e={params:{}};null===o?o=[e]:o.push(e),a++}}else{const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}h=t===a,c=c||h}if(c)a=u,null!==o&&(u?o.length=u:o=null);else{const e={params:{}};null===o?o=[e]:o.push(e),a++}if(f===a&&(l=!0,p=0),!l){const e={params:{passingSchemas:p}};return null===o?o=[e]:o.push(e),a++,d.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),d.errors=o,0===a}function g(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;h(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?h.errors:o.concat(h.errors),a=o.length);var f=p===a;if(l=l||f,!l){const i=a;d(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?d.errors:o.concat(d.errors),a=o.length),f=i===a,l=l||f}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,g.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),g.errors=o,0===a}function b(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(!(e instanceof Function)){const e={params:{}};null===o?o=[e]:o.push(e),a++}var f=p===a;if(l=l||f,!l){const i=a;g(e,{instancePath:t,parentData:n,parentDataProperty:r,rootData:s})||(o=null===o?g.errors:o.concat(g.errors),a=o.length),f=i===a,l=l||f}if(!l){const e={params:{}};return null===o?o=[e]:o.push(e),a++,b.errors=o,!1}return a=i,null!==o&&(i?o.length=i:o=null),b.errors=o,0===a}const v={validate:D};function D(e,{instancePath:t="",parentData:n,parentDataProperty:r,rootData:s=e}={}){let o=null,a=0;const i=a;let l=!1;const p=a;if(!(e instanceof RegExp)){const e={params:{}};null===o?o=[e]:o.push(e),a++}var f=p===a;if(l=l||f,!l){const n=a;if("string"!=typeof e){const e={params:{type:"string"}};null===o?o=[e]:o.push(e),a++}if(f=n===a,l=l||f,!l){const n=a;if(a===n)if(e&&"object"==typeof e&&!Array.isArray(e)){const n=a;for(const t in e)if("byLayer"!==t){let n=e[t];const r=a,s=a;let i=!1;const l=a;if(a===l)if(Array.isArray(n)){const e=n.length;for(let t=0;t=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var u=m===l;if(c=c||u,!c){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}u=t===l,c=c||u}if(c)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.filename){let n=t.filename;const r=l,s=l;let o=!1;const a=l;if(l===a)if("string"==typeof n){if(n.includes("!")||!1!==e.test(n)){const e={params:{}};null===i?i=[e]:i.push(e),l++}else if(n.length<1){const e={params:{}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}var c=a===l;if(o=o||c,!o){const e=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}c=e===l,o=o||c}if(!o){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=s,null!==i&&(s?i.length=s:i=null),p=r===l}else p=!0;if(p){if(void 0!==t.idHint){const e=l;if("string"!=typeof t.idHint)return te.errors=[{params:{type:"string"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.layer){let e=t.layer;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var m=o===l;if(s=s||m,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(m=t===l,s=s||m,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}m=t===l,s=s||m}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncRequests){let e=t.maxAsyncRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncSize){let e=t.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var y=c===l;if(u=u||y,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}y=t===l,u=u||y}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialRequests){let e=t.maxInitialRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialSize){let e=t.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var h=c===l;if(u=u||h,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}h=t===l,u=u||h}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxSize){let e=t.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var d=c===l;if(u=u||d,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}d=t===l,u=u||d}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minChunks){let e=t.minChunks;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return te.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.minRemainingSize){let e=t.minRemainingSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var g=c===l;if(u=u||g,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}g=t===l,u=u||g}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minSize){let e=t.minSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var b=c===l;if(u=u||b,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}b=t===l,u=u||b}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.name){let e=t.name;const n=l,r=l;let s=!1;const o=l;if(!1!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var v=o===l;if(s=s||v,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(v=t===l,s=s||v,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}v=t===l,s=s||v}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.priority){let e=t.priority;const n=l;if("number"!=typeof e||!isFinite(e))return te.errors=[{params:{type:"number"}}],!1;p=n===l}else p=!0;if(p){if(void 0!==t.reuseExistingChunk){const e=l;if("boolean"!=typeof t.reuseExistingChunk)return te.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.test){let e=t.test;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var D=o===l;if(s=s||D,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(D=t===l,s=s||D,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}D=t===l,s=s||D}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.type){let e=t.type;const n=l,r=l;let s=!1;const o=l;if(!(e instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}var P=o===l;if(s=s||P,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(P=t===l,s=s||P,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}P=t===l,s=s||P}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,te.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p)if(void 0!==t.usedExports){const e=l;if("boolean"!=typeof t.usedExports)return te.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0}}}}}}}}}}}}}}}}}}}}}}return te.errors=i,0===l}function ne(t,{instancePath:r="",parentData:s,parentDataProperty:o,rootData:a=t}={}){let i=null,l=0;if(0===l){if(!t||"object"!=typeof t||Array.isArray(t))return ne.errors=[{params:{type:"object"}}],!1;{const s=l;for(const e in t)if(!n.call(Y,e))return ne.errors=[{params:{additionalProperty:e}}],!1;if(s===l){if(void 0!==t.automaticNameDelimiter){let e=t.automaticNameDelimiter;const n=l;if(l===n){if("string"!=typeof e)return ne.errors=[{params:{type:"string"}}],!1;if(e.length<1)return ne.errors=[{params:{}}],!1}var p=n===l}else p=!0;if(p){if(void 0!==t.cacheGroups){let e=t.cacheGroups;const n=l,s=l,o=l;if(l===o)if(e&&"object"==typeof e&&!Array.isArray(e)){let t;if(void 0===e.test&&(t="test")){const e={};null===i?i=[e]:i.push(e),l++}else if(void 0!==e.test){let t=e.test;const n=l;let r=!1;const s=l;if(!(t instanceof RegExp)){const e={};null===i?i=[e]:i.push(e),l++}var f=s===l;if(r=r||f,!r){const e=l;if("string"!=typeof t){const e={};null===i?i=[e]:i.push(e),l++}if(f=e===l,r=r||f,!r){const e=l;if(!(t instanceof Function)){const e={};null===i?i=[e]:i.push(e),l++}f=e===l,r=r||f}}if(r)l=n,null!==i&&(n?i.length=n:i=null);else{const e={};null===i?i=[e]:i.push(e),l++}}}else{const e={};null===i?i=[e]:i.push(e),l++}if(o===l)return ne.errors=[{params:{}}],!1;if(l=s,null!==i&&(s?i.length=s:i=null),l===n){if(!e||"object"!=typeof e||Array.isArray(e))return ne.errors=[{params:{type:"object"}}],!1;for(const t in e){let n=e[t];const s=l,o=l;let p=!1;const f=l;if(!1!==n){const e={params:{}};null===i?i=[e]:i.push(e),l++}var u=f===l;if(p=p||u,!p){const s=l;if(!(n instanceof RegExp)){const e={params:{}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;if("string"!=typeof n){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}if(u=s===l,p=p||u,!p){const s=l;te(n,{instancePath:r+"/cacheGroups/"+t.replace(/~/g,"~0").replace(/\//g,"~1"),parentData:e,parentDataProperty:t,rootData:a})||(i=null===i?te.errors:i.concat(te.errors),l=i.length),u=s===l,p=p||u}}}}if(!p){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}if(l=o,null!==i&&(o?i.length=o:i=null),s!==l)break}}p=n===l}else p=!0;if(p){if(void 0!==t.chunks){let e=t.chunks;const n=l,r=l;let s=!1;const o=l;if("initial"!==e&&"async"!==e&&"all"!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var c=o===l;if(s=s||c,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}c=t===l,s=s||c}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.defaultSizeTypes){let e=t.defaultSizeTypes;const n=l;if(l===n){if(!Array.isArray(e))return ne.errors=[{params:{type:"array"}}],!1;if(e.length<1)return ne.errors=[{params:{limit:1}}],!1;{const t=e.length;for(let n=0;n=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var m=c===l;if(u=u||m,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}m=t===l,u=u||m}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.fallbackCacheGroup){let e=t.fallbackCacheGroup;const n=l;if(l===n){if(!e||"object"!=typeof e||Array.isArray(e))return ne.errors=[{params:{type:"object"}}],!1;{const t=l;for(const t in e)if("automaticNameDelimiter"!==t&&"maxAsyncSize"!==t&&"maxInitialSize"!==t&&"maxSize"!==t&&"minSize"!==t)return ne.errors=[{params:{additionalProperty:t}}],!1;if(t===l){if(void 0!==e.automaticNameDelimiter){let t=e.automaticNameDelimiter;const n=l;if(l===n){if("string"!=typeof t)return ne.errors=[{params:{type:"string"}}],!1;if(t.length<1)return ne.errors=[{params:{}}],!1}var y=n===l}else y=!0;if(y){if(void 0!==e.maxAsyncSize){let t=e.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var h=u===l;if(f=f||h,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}h=e===l,f=f||h}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y){if(void 0!==e.maxInitialSize){let t=e.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var d=u===l;if(f=f||d,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}d=e===l,f=f||d}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y){if(void 0!==e.maxSize){let t=e.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var g=u===l;if(f=f||g,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}g=e===l,f=f||g}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0;if(y)if(void 0!==e.minSize){let t=e.minSize;const n=l,r=l;let s=!1,o=null;const a=l,p=l;let f=!1;const u=l;if(l===u)if("number"==typeof t&&isFinite(t)){if(t<0||isNaN(t)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var b=u===l;if(f=f||b,!f){const e=l;if(l===e)if(t&&"object"==typeof t&&!Array.isArray(t))for(const e in t){let n=t[e];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}b=e===l,f=f||b}if(f)l=p,null!==i&&(p?i.length=p:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),y=n===l}else y=!0}}}}}}p=n===l}else p=!0;if(p){if(void 0!==t.filename){let n=t.filename;const r=l,s=l;let o=!1;const a=l;if(l===a)if("string"==typeof n){if(n.includes("!")||!1!==e.test(n)){const e={params:{}};null===i?i=[e]:i.push(e),l++}else if(n.length<1){const e={params:{}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}var v=a===l;if(o=o||v,!o){const e=l;if(!(n instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}v=e===l,o=o||v}if(!o){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=s,null!==i&&(s?i.length=s:i=null),p=r===l}else p=!0;if(p){if(void 0!==t.hidePathInfo){const e=l;if("boolean"!=typeof t.hidePathInfo)return ne.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0;if(p){if(void 0!==t.maxAsyncRequests){let e=t.maxAsyncRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxAsyncSize){let e=t.maxAsyncSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var D=c===l;if(u=u||D,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}D=t===l,u=u||D}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialRequests){let e=t.maxInitialRequests;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.maxInitialSize){let e=t.maxInitialSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var P=c===l;if(u=u||P,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}P=t===l,u=u||P}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.maxSize){let e=t.maxSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var A=c===l;if(u=u||A,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}A=t===l,u=u||A}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minChunks){let e=t.minChunks;const n=l;if(l===n){if("number"!=typeof e||!isFinite(e))return ne.errors=[{params:{type:"number"}}],!1;if(e<1||isNaN(e))return ne.errors=[{params:{comparison:">=",limit:1}}],!1}p=n===l}else p=!0;if(p){if(void 0!==t.minRemainingSize){let e=t.minRemainingSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var x=c===l;if(u=u||x,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}x=t===l,u=u||x}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.minSize){let e=t.minSize;const n=l,r=l;let s=!1,o=null;const a=l,f=l;let u=!1;const c=l;if(l===c)if("number"==typeof e&&isFinite(e)){if(e<0||isNaN(e)){const e={params:{comparison:">=",limit:0}};null===i?i=[e]:i.push(e),l++}}else{const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}var k=c===l;if(u=u||k,!u){const t=l;if(l===t)if(e&&"object"==typeof e&&!Array.isArray(e))for(const t in e){let n=e[t];const r=l;if("number"!=typeof n||!isFinite(n)){const e={params:{type:"number"}};null===i?i=[e]:i.push(e),l++}if(r!==l)break}else{const e={params:{type:"object"}};null===i?i=[e]:i.push(e),l++}k=t===l,u=u||k}if(u)l=f,null!==i&&(f?i.length=f:i=null);else{const e={params:{}};null===i?i=[e]:i.push(e),l++}if(a===l&&(s=!0,o=0),!s){const e={params:{passingSchemas:o}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p){if(void 0!==t.name){let e=t.name;const n=l,r=l;let s=!1;const o=l;if(!1!==e){const e={params:{}};null===i?i=[e]:i.push(e),l++}var j=o===l;if(s=s||j,!s){const t=l;if("string"!=typeof e){const e={params:{type:"string"}};null===i?i=[e]:i.push(e),l++}if(j=t===l,s=s||j,!s){const t=l;if(!(e instanceof Function)){const e={params:{}};null===i?i=[e]:i.push(e),l++}j=t===l,s=s||j}}if(!s){const e={params:{}};return null===i?i=[e]:i.push(e),l++,ne.errors=i,!1}l=r,null!==i&&(r?i.length=r:i=null),p=n===l}else p=!0;if(p)if(void 0!==t.usedExports){const e=l;if("boolean"!=typeof t.usedExports)return ne.errors=[{params:{type:"boolean"}}],!1;p=e===l}else p=!0}}}}}}}}}}}}}}}}}}}return ne.errors=i,0===l}function re(e,{instancePath:t="",parentData:r,parentDataProperty:s,rootData:o=e}={}){let a=null,i=0;if(0===i){if(!e||"object"!=typeof e||Array.isArray(e))return re.errors=[{params:{type:"object"}}],!1;{const r=i;for(const t in e)if(!n.call(X,t))return re.errors=[{params:{additionalProperty:t}}],!1;if(r===i){if(void 0!==e.checkWasmTypes){const t=i;if("boolean"!=typeof e.checkWasmTypes)return re.errors=[{params:{type:"boolean"}}],!1;var l=t===i}else l=!0;if(l){if(void 0!==e.chunkIds){let t=e.chunkIds;const n=i;if("natural"!==t&&"named"!==t&&"deterministic"!==t&&"size"!==t&&"total-size"!==t&&!1!==t)return re.errors=[{params:{}}],!1;l=n===i}else l=!0;if(l){if(void 0!==e.concatenateModules){const t=i;if("boolean"!=typeof e.concatenateModules)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.emitOnErrors){const t=i;if("boolean"!=typeof e.emitOnErrors)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.flagIncludedChunks){const t=i;if("boolean"!=typeof e.flagIncludedChunks)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.innerGraph){const t=i;if("boolean"!=typeof e.innerGraph)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.mangleExports){let t=e.mangleExports;const n=i,r=i;let s=!1;const o=i;if("size"!==t&&"deterministic"!==t){const e={params:{}};null===a?a=[e]:a.push(e),i++}var p=o===i;if(s=s||p,!s){const e=i;if("boolean"!=typeof t){const e={params:{type:"boolean"}};null===a?a=[e]:a.push(e),i++}p=e===i,s=s||p}if(!s){const e={params:{}};return null===a?a=[e]:a.push(e),i++,re.errors=a,!1}i=r,null!==a&&(r?a.length=r:a=null),l=n===i}else l=!0;if(l){if(void 0!==e.mangleWasmImports){const t=i;if("boolean"!=typeof e.mangleWasmImports)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.mergeDuplicateChunks){const t=i;if("boolean"!=typeof e.mergeDuplicateChunks)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.minimize){const t=i;if("boolean"!=typeof e.minimize)return re.errors=[{params:{type:"boolean"}}],!1;l=t===i}else l=!0;if(l){if(void 0!==e.minimizer){let t=e.minimizer;const n=i;if(i===n){if(!Array.isArray(t))return re.errors=[{params:{type:"array"}}],!1;{const e=t.length;for(let n=0;n=",limit:1}}],!1}y=n===f}else y=!0;if(y){if(void 0!==t.hashFunction){let e=t.hashFunction;const n=f,r=f;let s=!1;const o=f;if(f===o)if("string"==typeof e){if(e.length<1){const e={params:{}};null===l?l=[e]:l.push(e),f++}}else{const e={params:{type:"string"}};null===l?l=[e]:l.push(e),f++}var v=o===f;if(s=s||v,!s){const t=f;if(!(e instanceof Function)){const e={params:{}};null===l?l=[e]:l.push(e),f++}v=t===f,s=s||v}if(!s){const e={params:{}};return null===l?l=[e]:l.push(e),f++,ce.errors=l,!1}f=r,null!==l&&(r?l.length=r:l=null),y=n===f}else y=!0;if(y){if(void 0!==t.hashSalt){let e=t.hashSalt;const n=f;if(f==f){if("string"!=typeof e)return ce.errors=[{params:{type:"string"}}],!1;if(e.length<1)return ce.errors=[{params:{}}],!1}y=n===f}else y=!0;if(y){if(void 0!==t.hotUpdateChunkFilename){let n=t.hotUpdateChunkFilename;const r=f;if(f==f){if("string"!=typeof n)return ce.errors=[{params:{type:"string"}}],!1;if(n.includes("!")||!1!==e.test(n))return ce.errors=[{params:{}}],!1}y=r===f}else y=!0;if(y){if(void 0!==t.hotUpdateGlobal){const e=f;if("string"!=typeof t.hotUpdateGlobal)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.hotUpdateMainFilename){let n=t.hotUpdateMainFilename;const r=f;if(f==f){if("string"!=typeof n)return ce.errors=[{params:{type:"string"}}],!1;if(n.includes("!")||!1!==e.test(n))return ce.errors=[{params:{}}],!1}y=r===f}else y=!0;if(y){if(void 0!==t.iife){const e=f;if("boolean"!=typeof t.iife)return ce.errors=[{params:{type:"boolean"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.importFunctionName){const e=f;if("string"!=typeof t.importFunctionName)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.importMetaName){const e=f;if("string"!=typeof t.importMetaName)return ce.errors=[{params:{type:"string"}}],!1;y=e===f}else y=!0;if(y){if(void 0!==t.library){const e=f;ue(t.library,{instancePath:r+"/library",parentData:t,parentDataProperty:"library",rootData:a})||(l=null===l?ue.errors:l.concat(ue.errors),f=l.length),y=e===f}else y=!0;if(y){if(void 0!==t.libraryExport){let e=t.libraryExport;const n=f,r=f;let s=!1,o=null;const a=f,i=f;let p=!1;const u=f;if(f===u)if(Array.isArray(e)){const t=e.length;for(let n=0;n=",limit:1}}],!1}c=t===f}else c=!0;if(c){if(void 0!==r.performance){const e=f;me(r.performance,{instancePath:s+"/performance",parentData:r,parentDataProperty:"performance",rootData:l})||(p=null===p?me.errors:p.concat(me.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.plugins){const e=f;ye(r.plugins,{instancePath:s+"/plugins",parentData:r,parentDataProperty:"plugins",rootData:l})||(p=null===p?ye.errors:p.concat(ye.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.profile){const e=f;if("boolean"!=typeof r.profile)return ke.errors=[{params:{type:"boolean"}}],!1;c=e===f}else c=!0;if(c){if(void 0!==r.recordsInputPath){let t=r.recordsInputPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var k=a===f;if(o=o||k,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}k=n===f,o=o||k}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.recordsOutputPath){let t=r.recordsOutputPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var j=a===f;if(o=o||j,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}j=n===f,o=o||j}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.recordsPath){let t=r.recordsPath;const n=f,s=f;let o=!1;const a=f;if(!1!==t){const e={params:{}};null===p?p=[e]:p.push(e),f++}var S=a===f;if(o=o||S,!o){const n=f;if(f===n)if("string"==typeof t){if(t.includes("!")||!0!==e.test(t)){const e={params:{}};null===p?p=[e]:p.push(e),f++}}else{const e={params:{type:"string"}};null===p?p=[e]:p.push(e),f++}S=n===f,o=o||S}if(!o){const e={params:{}};return null===p?p=[e]:p.push(e),f++,ke.errors=p,!1}f=s,null!==p&&(s?p.length=s:p=null),c=n===f}else c=!0;if(c){if(void 0!==r.resolve){const e=f;he(r.resolve,{instancePath:s+"/resolve",parentData:r,parentDataProperty:"resolve",rootData:l})||(p=null===p?he.errors:p.concat(he.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.resolveLoader){const e=f;de(r.resolveLoader,{instancePath:s+"/resolveLoader",parentData:r,parentDataProperty:"resolveLoader",rootData:l})||(p=null===p?de.errors:p.concat(de.errors),f=p.length),c=e===f}else c=!0;if(c){if(void 0!==r.snapshot){let t=r.snapshot;const n=f;if(f==f){if(!t||"object"!=typeof t||Array.isArray(t))return ke.errors=[{params:{type:"object"}}],!1;{const n=f;for(const e in t)if("buildDependencies"!==e&&"immutablePaths"!==e&&"managedPaths"!==e&&"module"!==e&&"resolve"!==e&&"resolveBuildDependencies"!==e)return ke.errors=[{params:{additionalProperty:e}}],!1;if(n===f){if(void 0!==t.buildDependencies){let e=t.buildDependencies;const n=f;if(f===n){if(!e||"object"!=typeof e||Array.isArray(e))return ke.errors=[{params:{type:"object"}}],!1;{const t=f;for(const t in e)if("hash"!==t&&"timestamp"!==t)return ke.errors=[{params:{additionalProperty:t}}],!1;if(t===f){if(void 0!==e.hash){const t=f;if("boolean"!=typeof e.hash)return ke.errors=[{params:{type:"boolean"}}],!1;var C=t===f}else C=!0;if(C)if(void 0!==e.timestamp){const t=f;if("boolean"!=typeof e.timestamp)return ke.errors=[{params:{type:"boolean"}}],!1;C=t===f}else C=!0}}}var F=n===f}else F=!0;if(F){if(void 0!==t.immutablePaths){let n=t.immutablePaths;const r=f;if(f===r){if(!Array.isArray(n))return ke.errors=[{params:{type:"array"}}],!1;{const t=n.length;for(let r=0;r { "minChunks": 1, "minRemainingSize": undefined, "minSize": 10000, - "usedExports": true, + "usedExports": false, }, "usedExports": false, }, @@ -670,7 +670,9 @@ describe("Defaults", () => { + "maxInitialRequests": 30, @@ ... @@ - "minSize": 10000, + - "usedExports": false, + "minSize": 20000, + + "usedExports": true, @@ ... @@ - "usedExports": false, + "usedExports": true, @@ -735,7 +737,9 @@ describe("Defaults", () => { + "maxInitialRequests": 30, @@ ... @@ - "minSize": 10000, + - "usedExports": false, + "minSize": 20000, + + "usedExports": true, @@ ... @@ - "usedExports": false, + "usedExports": true, @@ -1489,6 +1493,7 @@ describe("Defaults", () => { + "maxAge": 5184000000, + "maxMemoryGenerations": Infinity, + "name": "default-none", + + "profile": false, + "store": "pack", + "type": "filesystem", + "version": "", @@ -1529,6 +1534,7 @@ describe("Defaults", () => { + "maxAge": 5184000000, + "maxMemoryGenerations": 5, + "name": "default-development", + + "profile": false, + "store": "pack", + "type": "filesystem", + "version": "", @@ -1620,7 +1626,7 @@ describe("Defaults", () => { - "minChunks": 1, - "minRemainingSize": undefined, - "minSize": 10000, - - "usedExports": true, + - "usedExports": false, - }, + "splitChunks": false, `) @@ -1769,6 +1775,7 @@ describe("Defaults", () => { + "maxAge": 5184000000, + "maxMemoryGenerations": Infinity, + "name": "default-none", + + "profile": false, + "store": "pack", + "type": "filesystem", + "version": "", diff --git a/test/__snapshots__/Cli.test.js.snap b/test/__snapshots__/Cli.test.js.snap index c851254a7..4b218583d 100644 --- a/test/__snapshots__/Cli.test.js.snap +++ b/test/__snapshots__/Cli.test.js.snap @@ -238,6 +238,19 @@ Object { "multiple": false, "simpleType": "string", }, + "cache-profile": Object { + "configs": Array [ + Object { + "description": "Track and log detailed timing information for individual cache items.", + "multiple": false, + "path": "cache.profile", + "type": "boolean", + }, + ], + "description": "Track and log detailed timing information for individual cache items.", + "multiple": false, + "simpleType": "boolean", + }, "cache-store": Object { "configs": Array [ Object { diff --git a/test/__snapshots__/StatsTestCases.test.js.snap b/test/__snapshots__/StatsTestCases.test.js.snap index 7ecbc00ca..1f052ad55 100644 --- a/test/__snapshots__/StatsTestCases.test.js.snap +++ b/test/__snapshots__/StatsTestCases.test.js.snap @@ -3,12 +3,12 @@ exports[`StatsTestCases should print correct stats for aggressive-splitting-entry 1`] = ` "fitting: PublicPath: auto - asset fitting-4b375e92f92df2c92bec.js 16 KiB [emitted] [immutable] + asset fitting-f0d45b3d6edcabaf51d3.js 16 KiB [emitted] [immutable] asset fitting-1c702fff0ba9fe1126d9.js 1.9 KiB [emitted] [immutable] asset fitting-c0e0ed061413e64a66c5.js 1.9 KiB [emitted] [immutable] - asset fitting-445185754184bf780ddc.js 1.08 KiB [emitted] [immutable] - Entrypoint main 19.8 KiB = fitting-1c702fff0ba9fe1126d9.js 1.9 KiB fitting-c0e0ed061413e64a66c5.js 1.9 KiB fitting-4b375e92f92df2c92bec.js 16 KiB - chunk (runtime: main) fitting-4b375e92f92df2c92bec.js 1.87 KiB (javascript) 8.56 KiB (runtime) [entry] [rendered] + asset fitting-3fdf9ef59eba6cfd6536.js 1.08 KiB [emitted] [immutable] + Entrypoint main 19.8 KiB = fitting-1c702fff0ba9fe1126d9.js 1.9 KiB fitting-c0e0ed061413e64a66c5.js 1.9 KiB fitting-f0d45b3d6edcabaf51d3.js 16 KiB + chunk (runtime: main) fitting-f0d45b3d6edcabaf51d3.js 1.87 KiB (javascript) 8.56 KiB (runtime) [entry] [rendered] > ./index main runtime modules 8.56 KiB 11 modules cacheable modules 1.87 KiB @@ -23,19 +23,19 @@ exports[`StatsTestCases should print correct stats for aggressive-splitting-entr > ./index main ./a.js 899 bytes [built] [code generated] ./b.js 899 bytes [built] [code generated] - chunk (runtime: main) fitting-445185754184bf780ddc.js 916 bytes [rendered] + chunk (runtime: main) fitting-3fdf9ef59eba6cfd6536.js 916 bytes [rendered] > ./g ./index.js 7:0-13 ./g.js 916 bytes [built] [code generated] fitting (webpack x.x.x) compiled successfully in X ms content-change: PublicPath: auto - asset content-change-0dc17ccd46aa2757f219.js 16 KiB [emitted] [immutable] + asset content-change-14c3e81da6bb999e50c8.js 16 KiB [emitted] [immutable] asset content-change-1c702fff0ba9fe1126d9.js 1.9 KiB [emitted] [immutable] asset content-change-c0e0ed061413e64a66c5.js 1.9 KiB [emitted] [immutable] - asset content-change-445185754184bf780ddc.js 1.08 KiB [emitted] [immutable] - Entrypoint main 19.8 KiB = content-change-1c702fff0ba9fe1126d9.js 1.9 KiB content-change-c0e0ed061413e64a66c5.js 1.9 KiB content-change-0dc17ccd46aa2757f219.js 16 KiB - chunk (runtime: main) content-change-0dc17ccd46aa2757f219.js 1.87 KiB (javascript) 8.56 KiB (runtime) [entry] [rendered] + asset content-change-3fdf9ef59eba6cfd6536.js 1.08 KiB [emitted] [immutable] + Entrypoint main 19.8 KiB = content-change-1c702fff0ba9fe1126d9.js 1.9 KiB content-change-c0e0ed061413e64a66c5.js 1.9 KiB content-change-14c3e81da6bb999e50c8.js 16 KiB + chunk (runtime: main) content-change-14c3e81da6bb999e50c8.js 1.87 KiB (javascript) 8.56 KiB (runtime) [entry] [rendered] > ./index main runtime modules 8.56 KiB 11 modules cacheable modules 1.87 KiB @@ -50,7 +50,7 @@ content-change: > ./index main ./a.js 899 bytes [built] [code generated] ./b.js 899 bytes [built] [code generated] - chunk (runtime: main) content-change-445185754184bf780ddc.js 916 bytes [rendered] + chunk (runtime: main) content-change-3fdf9ef59eba6cfd6536.js 916 bytes [rendered] > ./g ./index.js 7:0-13 ./g.js 916 bytes [built] [code generated] content-change (webpack x.x.x) compiled successfully in X ms" @@ -58,7 +58,7 @@ content-change: exports[`StatsTestCases should print correct stats for aggressive-splitting-on-demand 1`] = ` "PublicPath: auto -asset 273c7faaf1c5ed87b24b.js 11.5 KiB [emitted] [immutable] (name: main) +asset a0fc232f4432610a2c68.js 11.5 KiB [emitted] [immutable] (name: main) asset b28b42175852a350ae55.js 1.91 KiB [emitted] [immutable] asset 5dc82ad1144129efc6f0.js 1.91 KiB [emitted] [immutable] asset 6861109a893ce5c56a08.js 1.9 KiB [emitted] [immutable] @@ -70,12 +70,12 @@ asset c98f03fbb3549a9685f2.js 1.9 KiB [emitted] [immutable] asset 4437b7a806fda9652d78.js 1010 bytes [emitted] [immutable] asset 9711883e11bdd4d550ff.js 1010 bytes [emitted] [immutable] asset e0332efe5dd181ffeff5.js 1010 bytes [emitted] [immutable] -Entrypoint main 11.5 KiB = 273c7faaf1c5ed87b24b.js +Entrypoint main 11.5 KiB = a0fc232f4432610a2c68.js chunk (runtime: main) c0e0ed061413e64a66c5.js 1.76 KiB [rendered] [recorded] aggressive splitted > ./c ./d ./e ./index.js 3:0-30 ./c.js 899 bytes [built] [code generated] ./d.js 899 bytes [built] [code generated] -chunk (runtime: main) 273c7faaf1c5ed87b24b.js (main) 248 bytes (javascript) 6.25 KiB (runtime) [entry] [rendered] +chunk (runtime: main) a0fc232f4432610a2c68.js (main) 248 bytes (javascript) 6.25 KiB (runtime) [entry] [rendered] > ./index main runtime modules 6.25 KiB 7 modules ./index.js 248 bytes [built] [code generated] @@ -658,9 +658,9 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for commons-plugin-issue-4980 1`] = ` -"asset app.724140013cf9a0f83f3f-1.js 6.11 KiB [emitted] [immutable] (name: app) +"asset app.20731e8c55e4789a408a-1.js 6.11 KiB [emitted] [immutable] (name: app) asset vendor.ebb9b6c7e5493f36bead-1.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.71 KiB = vendor.ebb9b6c7e5493f36bead-1.js 619 bytes app.724140013cf9a0f83f3f-1.js 6.11 KiB +Entrypoint app 6.71 KiB = vendor.ebb9b6c7e5493f36bead-1.js 619 bytes app.20731e8c55e4789a408a-1.js 6.11 KiB runtime modules 2.66 KiB 4 modules orphan modules 118 bytes [orphan] 2 modules cacheable modules 272 bytes @@ -668,9 +668,9 @@ cacheable modules 272 bytes ./constants.js 87 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset app.71ad650457023fca30e9-2.js 6.13 KiB [emitted] [immutable] (name: app) +asset app.36305eb6cd9d6aad421e-2.js 6.13 KiB [emitted] [immutable] (name: app) asset vendor.ebb9b6c7e5493f36bead-2.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.73 KiB = vendor.ebb9b6c7e5493f36bead-2.js 619 bytes app.71ad650457023fca30e9-2.js 6.13 KiB +Entrypoint app 6.73 KiB = vendor.ebb9b6c7e5493f36bead-2.js 619 bytes app.36305eb6cd9d6aad421e-2.js 6.13 KiB runtime modules 2.66 KiB 4 modules orphan modules 125 bytes [orphan] 2 modules cacheable modules 279 bytes @@ -700,10 +700,10 @@ exports[`StatsTestCases should print correct stats for concat-and-sideeffects 1` `; exports[`StatsTestCases should print correct stats for context-independence 1`] = ` -"asset main-fb79b7466e6894496440.js 10.3 KiB [emitted] [immutable] (name: main) - sourceMap main-fb79b7466e6894496440.js.map 9.21 KiB [emitted] [dev] (auxiliary name: main) -asset 664-a0b92720f0f2d9d4aaf4.js 455 bytes [emitted] [immutable] - sourceMap 664-a0b92720f0f2d9d4aaf4.js.map 344 bytes [emitted] [dev] +"asset main-4d9216d100d42b71ee29.js 10.3 KiB [emitted] [immutable] (name: main) + sourceMap main-4d9216d100d42b71ee29.js.map 9.21 KiB [emitted] [dev] (auxiliary name: main) +asset 664-bca314bd02016092cab9.js 455 bytes [emitted] [immutable] + sourceMap 664-bca314bd02016092cab9.js.map 344 bytes [emitted] [dev] runtime modules 6.23 KiB 8 modules orphan modules 19 bytes [orphan] 1 module cacheable modules 106 bytes @@ -711,10 +711,10 @@ cacheable modules 106 bytes ./a/chunk.js + 1 modules 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-fb79b7466e6894496440.js 10.3 KiB [emitted] [immutable] (name: main) - sourceMap main-fb79b7466e6894496440.js.map 9.21 KiB [emitted] [dev] (auxiliary name: main) -asset 664-a0b92720f0f2d9d4aaf4.js 455 bytes [emitted] [immutable] - sourceMap 664-a0b92720f0f2d9d4aaf4.js.map 344 bytes [emitted] [dev] +asset main-4d9216d100d42b71ee29.js 10.3 KiB [emitted] [immutable] (name: main) + sourceMap main-4d9216d100d42b71ee29.js.map 9.21 KiB [emitted] [dev] (auxiliary name: main) +asset 664-bca314bd02016092cab9.js 455 bytes [emitted] [immutable] + sourceMap 664-bca314bd02016092cab9.js.map 344 bytes [emitted] [dev] runtime modules 6.23 KiB 8 modules orphan modules 19 bytes [orphan] 1 module cacheable modules 106 bytes @@ -722,8 +722,8 @@ cacheable modules 106 bytes ./b/chunk.js + 1 modules 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-f0c18662272cb710ab14.js 11.5 KiB [emitted] [immutable] (name: main) -asset 664-3cdeef446e88ad105071.js 1.5 KiB [emitted] [immutable] +asset main-0ff438be7b9b904d38a3.js 11.5 KiB [emitted] [immutable] (name: main) +asset 664-8b8452d1081ed5563bde.js 1.5 KiB [emitted] [immutable] runtime modules 6.23 KiB 8 modules orphan modules 19 bytes [orphan] 1 module cacheable modules 106 bytes @@ -731,8 +731,8 @@ cacheable modules 106 bytes ./a/chunk.js + 1 modules 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-f0c18662272cb710ab14.js 11.5 KiB [emitted] [immutable] (name: main) -asset 664-3cdeef446e88ad105071.js 1.5 KiB [emitted] [immutable] +asset main-0ff438be7b9b904d38a3.js 11.5 KiB [emitted] [immutable] (name: main) +asset 664-8b8452d1081ed5563bde.js 1.5 KiB [emitted] [immutable] runtime modules 6.23 KiB 8 modules orphan modules 19 bytes [orphan] 1 module cacheable modules 106 bytes @@ -1060,7 +1060,7 @@ webpack x.x.x compiled with 2 warnings in X ms" `; exports[`StatsTestCases should print correct stats for immutable 1`] = ` -"asset bcfc8dd2d8d4b3af2957.js 13.3 KiB [emitted] [immutable] (name: main) +"asset 6bfadebffe6cc3d3d3a9.js 13.3 KiB [emitted] [immutable] (name: main) asset 22c24a3b26d46118dc06.js 809 bytes [emitted] [immutable]" `; @@ -1126,10 +1126,10 @@ runtime modules 2.37 KiB 3 modules webpack x.x.x compiled successfully in X ms asset b-runtime~main-9f27ae1cd47de56689fd.js 5.73 KiB [emitted] [immutable] (name: runtime~main) -asset b-all-b_js-286fe88eae15de65188e.js 475 bytes [emitted] [immutable] (id hint: all) +asset b-all-b_js-d09f99e25781be397e6c.js 475 bytes [emitted] [immutable] (id hint: all) asset b-main-132fd6da6e6e6728c990.js 457 bytes [emitted] [immutable] (name: main) asset b-vendors-node_modules_vendor_js-499179597d8c965dd5e0.js 185 bytes [emitted] [immutable] (id hint: vendors) -Entrypoint main 6.82 KiB = b-runtime~main-9f27ae1cd47de56689fd.js 5.73 KiB b-vendors-node_modules_vendor_js-499179597d8c965dd5e0.js 185 bytes b-all-b_js-286fe88eae15de65188e.js 475 bytes b-main-132fd6da6e6e6728c990.js 457 bytes +Entrypoint main 6.82 KiB = b-runtime~main-9f27ae1cd47de56689fd.js 5.73 KiB b-vendors-node_modules_vendor_js-499179597d8c965dd5e0.js 185 bytes b-all-b_js-d09f99e25781be397e6c.js 475 bytes b-main-132fd6da6e6e6728c990.js 457 bytes runtime modules 2.93 KiB 5 modules cacheable modules 40 bytes ./b.js 17 bytes [built] [code generated] @@ -1137,12 +1137,12 @@ cacheable modules 40 bytes webpack x.x.x compiled successfully in X ms assets by chunk 895 bytes (id hint: all) - asset c-all-b_js-fe3b412293f057de38c8.js 502 bytes [emitted] [immutable] (id hint: all) - asset c-all-c_js-172fc4c28be7e411e551.js 393 bytes [emitted] [immutable] (id hint: all) -asset c-runtime~main-f7949987637e4c0477d5.js 13.4 KiB [emitted] [immutable] (name: runtime~main) + asset c-all-b_js-3c3d3ae5b364fadfafb2.js 502 bytes [emitted] [immutable] (id hint: all) + asset c-all-c_js-5a3e032792662f68ffa4.js 393 bytes [emitted] [immutable] (id hint: all) +asset c-runtime~main-679cac90a0c7d3895571.js 13.4 KiB [emitted] [immutable] (name: runtime~main) asset c-main-a443d2f54b3b7aebaf75.js 664 bytes [emitted] [immutable] (name: main) asset c-vendors-node_modules_vendor_js-499179597d8c965dd5e0.js 185 bytes [emitted] [immutable] (id hint: vendors) -Entrypoint main 14.5 KiB = c-runtime~main-f7949987637e4c0477d5.js 13.4 KiB c-all-c_js-172fc4c28be7e411e551.js 393 bytes c-main-a443d2f54b3b7aebaf75.js 664 bytes +Entrypoint main 14.5 KiB = c-runtime~main-679cac90a0c7d3895571.js 13.4 KiB c-all-c_js-5a3e032792662f68ffa4.js 393 bytes c-main-a443d2f54b3b7aebaf75.js 664 bytes runtime modules 8.56 KiB 13 modules cacheable modules 101 bytes ./c.js 61 bytes [built] [code generated] @@ -1251,7 +1251,7 @@ asset main.js 84 bytes [emitted] (name: ma Message with named logger LOG from webpack.FlagDependencyExportsPlugin - 100% of exports of modules have been determined (1 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) + 0% of exports of modules have been determined (1 no declared exports, 0 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) + 3 hidden lines LOG from webpack.Compilation @@ -2040,7 +2040,7 @@ LOG from LogTestPlugin + 6 hidden lines LOG from webpack.FlagDependencyExportsPlugin - 100% of exports of modules have been determined (6 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) + 0% of exports of modules have been determined (6 no declared exports, 0 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) + 3 hidden lines LOG from webpack.Compilation @@ -2066,7 +2066,7 @@ LOG from webpack.FileSystemInfo Directory info in cache: 0 timestamps 0 hashes 0 timestamp hash combinations Managed items info in cache: 0 items -1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (4f9e9a5628f36d03dfbb)" +1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (d4736bc615b853b4617e)" `; exports[`StatsTestCases should print correct stats for preset-errors-only 1`] = `""`; @@ -2379,7 +2379,7 @@ LOG from webpack.Compilation LOG from webpack.FlagDependencyExportsPlugin restore cached provided exports: X ms figure out provided exports: X ms - 100% of exports of modules have been determined (6 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) + 0% of exports of modules have been determined (6 no declared exports, 0 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies) store provided exports into cache: X ms LOG from webpack.InnerGraphPlugin @@ -2435,7 +2435,7 @@ LOG from webpack.FileSystemInfo Directory info in cache: 0 timestamps 0 hashes 0 timestamp hash combinations Managed items info in cache: 0 items -1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (4f9e9a5628f36d03dfbb)" +1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (d4736bc615b853b4617e)" `; exports[`StatsTestCases should print correct stats for real-content-hash 1`] = ` @@ -2468,7 +2468,7 @@ exports[`StatsTestCases should print correct stats for real-content-hash 1`] = ` b-normal: assets by path *.js 3.22 KiB - asset 3ff4cb81976a33814443-3ff4cb.js 2.7 KiB [emitted] [immutable] [minimized] (name: runtime) + asset 5d9329c3b14d7be316de-5d9329.js 2.7 KiB [emitted] [immutable] [minimized] (name: runtime) asset a639a9edc4557744bf94-a639a9.js 288 bytes [emitted] [immutable] [minimized] (name: lazy) asset e00b58ce2785691cd374-e00b58.js 225 bytes [emitted] [immutable] [minimized] (name: index) asset 666f2b8847021ccc7608-666f2b.js 21 bytes [emitted] [immutable] [minimized] (name: a, b) @@ -2476,7 +2476,7 @@ b-normal: asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: file.png] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg?query 5.89 KiB [cached] [immutable] [from: file.jpg?query] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg 5.89 KiB [emitted] [immutable] [from: file.jpg] (auxiliary name: index) - Entrypoint index 2.92 KiB (5.89 KiB) = 3ff4cb81976a33814443-3ff4cb.js 2.7 KiB e00b58ce2785691cd374-e00b58.js 225 bytes 1 auxiliary asset + Entrypoint index 2.92 KiB (5.89 KiB) = 5d9329c3b14d7be316de-5d9329.js 2.7 KiB e00b58ce2785691cd374-e00b58.js 225 bytes 1 auxiliary asset Entrypoint a 21 bytes = 666f2b8847021ccc7608-666f2b.js Entrypoint b 21 bytes = 666f2b8847021ccc7608-666f2b.js runtime modules 7.19 KiB 9 modules @@ -2495,8 +2495,8 @@ b-normal: a-source-map: assets by path *.js 3.44 KiB - asset 1710932a27591ee4a94d-171093.js 2.76 KiB [emitted] [immutable] [minimized] (name: runtime) - sourceMap 1710932a27591ee4a94d-171093.js.map 14.2 KiB [emitted] [dev] (auxiliary name: runtime) + asset 15bc5e7a3cba409fc993-15bc5e.js 2.76 KiB [emitted] [immutable] [minimized] (name: runtime) + sourceMap 15bc5e7a3cba409fc993-15bc5e.js.map 14.2 KiB [emitted] [dev] (auxiliary name: runtime) asset 05c637d15dff2d0dc5fd-05c637.js 344 bytes [emitted] [immutable] [minimized] (name: lazy) sourceMap 05c637d15dff2d0dc5fd-05c637.js.map 399 bytes [emitted] [dev] (auxiliary name: lazy) asset c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes [emitted] [immutable] [minimized] (name: index) @@ -2507,7 +2507,7 @@ a-source-map: asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: file.png] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg?query 5.89 KiB [cached] [immutable] [from: file.jpg?query] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg 5.89 KiB [emitted] [immutable] [from: file.jpg] (auxiliary name: index) - Entrypoint index 3.03 KiB (20.5 KiB) = 1710932a27591ee4a94d-171093.js 2.76 KiB c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes 3 auxiliary assets + Entrypoint index 3.03 KiB (20.5 KiB) = 15bc5e7a3cba409fc993-15bc5e.js 2.76 KiB c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes 3 auxiliary assets Entrypoint a 77 bytes (254 bytes) = 222c2acc68675174e6b2-222c2a.js 1 auxiliary asset Entrypoint b 77 bytes (254 bytes) = 222c2acc68675174e6b2-222c2a.js 1 auxiliary asset runtime modules 7.19 KiB 9 modules @@ -2526,8 +2526,8 @@ a-source-map: b-source-map: assets by path *.js 3.44 KiB - asset 21d982bf196438b90b26-21d982.js 2.76 KiB [emitted] [immutable] [minimized] (name: runtime) - sourceMap 21d982bf196438b90b26-21d982.js.map 14.2 KiB [emitted] [dev] (auxiliary name: runtime) + asset 34097d095846bc2527cb-34097d.js 2.76 KiB [emitted] [immutable] [minimized] (name: runtime) + sourceMap 34097d095846bc2527cb-34097d.js.map 14.2 KiB [emitted] [dev] (auxiliary name: runtime) asset 05c637d15dff2d0dc5fd-05c637.js 344 bytes [emitted] [immutable] [minimized] (name: lazy) sourceMap 05c637d15dff2d0dc5fd-05c637.js.map 395 bytes [emitted] [dev] (auxiliary name: lazy) asset c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes [emitted] [immutable] [minimized] (name: index) @@ -2538,7 +2538,7 @@ b-source-map: asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: file.png] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg?query 5.89 KiB [cached] [immutable] [from: file.jpg?query] (auxiliary name: lazy) asset 7382fad5b015914e0811.jpg 5.89 KiB [emitted] [immutable] [from: file.jpg] (auxiliary name: index) - Entrypoint index 3.03 KiB (20.4 KiB) = 21d982bf196438b90b26-21d982.js 2.76 KiB c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes 3 auxiliary assets + Entrypoint index 3.03 KiB (20.4 KiB) = 34097d095846bc2527cb-34097d.js 2.76 KiB c41aff3dd03dbe1d8aa3-c41aff.js 281 bytes 3 auxiliary assets Entrypoint a 77 bytes (254 bytes) = 222c2acc68675174e6b2-222c2a.js 1 auxiliary asset Entrypoint b 77 bytes (254 bytes) = 222c2acc68675174e6b2-222c2a.js 1 auxiliary asset runtime modules 7.19 KiB 9 modules @@ -3177,7 +3177,7 @@ cacheable modules 1.35 KiB | [no exports used] | ./node_modules/big-module/index.js 44 bytes [built] | [only some exports used: a, huh] - | ModuleConcatenation bailout: List of module exports is dynamic (huh: maybe provided (runtime-defined) and used in main) + | ModuleConcatenation bailout: List of module exports is dynamic (a: maybe provided (runtime-defined) and used in main, huh: maybe provided (runtime-defined) and used in main) | ./node_modules/big-module/a.js 58 bytes [built] | [only some exports used: a, huh] | ModuleConcatenation bailout: List of module exports is dynamic (huh: maybe provided (runtime-defined) and used in main) @@ -4391,7 +4391,7 @@ exports[`StatsTestCases should print correct stats for wasm-explorer-examples-sy asset 99.bundle.js 241 bytes [emitted] assets by path *.wasm 1.37 KiB asset 4098dd6bcb43bd54baf6.module.wasm 531 bytes [emitted] [immutable] - asset c3c66cf69b0a4bd721a4.module.wasm 290 bytes [emitted] [immutable] + asset a0bbe50b118b7ff0648b.module.wasm 290 bytes [emitted] [immutable] asset 86fec7665231a0198df8.module.wasm 156 bytes [emitted] [immutable] asset 1da1d844c1509ed4d4c3.module.wasm 154 bytes [emitted] [immutable] asset 2be4d707a05b1f7313ca.module.wasm 154 bytes [emitted] [immutable] diff --git a/test/cases/parsing/bom/index.js b/test/cases/parsing/bom/index.js index 20d387785..7e8eead4a 100644 --- a/test/cases/parsing/bom/index.js +++ b/test/cases/parsing/bom/index.js @@ -4,7 +4,7 @@ it("should load a utf-8 file with BOM", function () { }); it("should load a css file with BOM", function () { - var css = require("!css-loader!./bomfile.css").default + ""; + var css = require("!css-loader?sourceMap=false!./bomfile.css").default + ""; expect(css).toBe("body{color:#abc}"); }); diff --git a/test/cases/parsing/es2020/index.js b/test/cases/parsing/es2020/index.js new file mode 100644 index 000000000..50e196c8d --- /dev/null +++ b/test/cases/parsing/es2020/index.js @@ -0,0 +1,38 @@ +import { a } from "./module"; + +class Class { + #field = this instanceof Class ? a : false; + field = this instanceof Class ? a : false; + #method = () => (this instanceof Class ? a : false); + method = () => (this instanceof Class ? a : false); + [`key${!this ? a : false}`] = this instanceof Class ? a : false; + + static CLASS = true; + + static #sfield = this.CLASS ? a : false; + static sfield = this.CLASS ? a : false; + static #smethod = () => (this.CLASS ? a : false); + static smethod = () => (this.CLASS ? a : false); + static [`skey${!this ? a : false}`] = this.CLASS ? a : false; + + test() { + expect(this.#field).toBe(42); + expect(this.field).toBe(42); + expect(this.#method()).toBe(42); + expect(this.method()).toBe(42); + expect(this.key42).toBe(42); + } + + static stest() { + expect(Class.#sfield).toBe(42); + expect(Class.sfield).toBe(42); + expect(Class.#smethod()).toBe(42); + expect(Class.smethod()).toBe(42); + expect(Class.skey42).toBe(42); + } +} + +it("should support class fields", () => { + Class.stest(); + new Class().test(); +}); diff --git a/test/cases/parsing/es2020/module.js b/test/cases/parsing/es2020/module.js new file mode 100644 index 000000000..71becd3a3 --- /dev/null +++ b/test/cases/parsing/es2020/module.js @@ -0,0 +1 @@ +export const a = 42; diff --git a/test/cases/parsing/es2020/test.filter.js b/test/cases/parsing/es2020/test.filter.js new file mode 100644 index 000000000..25a2a20eb --- /dev/null +++ b/test/cases/parsing/es2020/test.filter.js @@ -0,0 +1,5 @@ +var supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = function (config) { + return supportsClassFields(); +}; diff --git a/test/cases/wasm/table/index.js b/test/cases/wasm/table/index.js index 4d3d85a3b..9f77a9850 100644 --- a/test/cases/wasm/table/index.js +++ b/test/cases/wasm/table/index.js @@ -1,16 +1,16 @@ // the message is inconsistency between some nodejs versions -const UNKNOWN_FUNCTION_TABLE = /invalid index into function table|invalid function/; +const UNKNOWN_FUNCTION_TABLE = /table index is out of bounds|invalid index into function table|invalid function/; -it("should support tables", function() { - return import("./wasm-table.wat").then(function(wasm) { +it("should support tables", function () { + return import("./wasm-table.wat").then(function (wasm) { expect(wasm.callByIndex(0)).toEqual(42); expect(wasm.callByIndex(1)).toEqual(13); expect(() => wasm.callByIndex(2)).toThrow(UNKNOWN_FUNCTION_TABLE); }); }); -it("should support exported tables", function() { - return import("./wasm-table-export.wat").then(function(wasm) { +it("should support exported tables", function () { + return import("./wasm-table-export.wat").then(function (wasm) { expect(wasm.table).toBeInstanceOf(WebAssembly.Table); expect(wasm.table.length).toBe(2); const e0 = wasm.table.get(0); @@ -22,8 +22,8 @@ it("should support exported tables", function() { }); }); -it("should support imported tables", function() { - return import("./wasm-table-imported.wat").then(function(wasm) { +it("should support imported tables", function () { + return import("./wasm-table-imported.wat").then(function (wasm) { expect(wasm.callByIndex(0)).toEqual(42); expect(wasm.callByIndex(1)).toEqual(13); expect(() => wasm.callByIndex(2)).toThrow(UNKNOWN_FUNCTION_TABLE); diff --git a/test/configCases/entry/depend-on-advanced/other-vendors.js b/test/configCases/entry/depend-on-advanced/other-vendors.js index e68b8aef6..8d844056e 100644 --- a/test/configCases/entry/depend-on-advanced/other-vendors.js +++ b/test/configCases/entry/depend-on-advanced/other-vendors.js @@ -1,5 +1,4 @@ import lodash from "lodash"; -import isomorphicFetch from "isomorphic-fetch"; import { set } from "test"; set("ok"); diff --git a/test/configCases/entry/depend-on-advanced/page2.js b/test/configCases/entry/depend-on-advanced/page2.js new file mode 100644 index 000000000..32f96417b --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/page2.js @@ -0,0 +1,26 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +it("should be able to load the modules", () => { + expect(isomorphicFetch).toBe("isomorphic-fetch"); + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); +}); + +it("should have the correct modules in a lazy chunk", () => { + const promise = import(/* webpackChunkName: "lazy" */ "./lazy").then( + module => { + module.default(); + } + ); + __non_webpack_require__("./lazy.js"); + if (document.head._children[0]) document.head._children[0].onload(); + return promise; +}); + +import { value } from "test"; + +it("other-vendors should run too", () => { + expect(value).toBe("ok"); +}); diff --git a/test/configCases/entry/depend-on-advanced/page3.js b/test/configCases/entry/depend-on-advanced/page3.js new file mode 100644 index 000000000..32f96417b --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/page3.js @@ -0,0 +1,26 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +it("should be able to load the modules", () => { + expect(isomorphicFetch).toBe("isomorphic-fetch"); + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); +}); + +it("should have the correct modules in a lazy chunk", () => { + const promise = import(/* webpackChunkName: "lazy" */ "./lazy").then( + module => { + module.default(); + } + ); + __non_webpack_require__("./lazy.js"); + if (document.head._children[0]) document.head._children[0].onload(); + return promise; +}); + +import { value } from "test"; + +it("other-vendors should run too", () => { + expect(value).toBe("ok"); +}); diff --git a/test/configCases/entry/depend-on-advanced/test.config.js b/test/configCases/entry/depend-on-advanced/test.config.js index 588de636e..003c340f1 100644 --- a/test/configCases/entry/depend-on-advanced/test.config.js +++ b/test/configCases/entry/depend-on-advanced/test.config.js @@ -1,11 +1,13 @@ module.exports = { - findBundle: function() { + findBundle: function () { return [ "./app.js", "./runtime.js", "./page1.js", "./react-vendors.js", - "./other-vendors.js" + "./page2.js", + "./other-vendors.js", + "./page3.js" ]; } }; diff --git a/test/configCases/entry/depend-on-advanced/webpack.config.js b/test/configCases/entry/depend-on-advanced/webpack.config.js index 0bb6c323e..56d9e2c35 100644 --- a/test/configCases/entry/depend-on-advanced/webpack.config.js +++ b/test/configCases/entry/depend-on-advanced/webpack.config.js @@ -9,6 +9,8 @@ module.exports = { return Promise.resolve({ app: { import: "./app.js", dependOn: ["other-vendors"] }, page1: { import: "./page1.js", dependOn: ["app", "react-vendors"] }, + page2: { import: "./page2.js", dependOn: ["app", "react-vendors"] }, + page3: { import: "./page3.js", dependOn: ["app"] }, "react-vendors": ["react", "react-dom", "prop-types"], "other-vendors": "./other-vendors" }); @@ -37,21 +39,29 @@ module.exports = { chunkModules[chunk.name] = new Set(); for (const module of chunkGraph.getChunkModulesIterable(chunk)) { - chunkModules[chunk.name].add(module); + chunkModules[chunk.name].add(module.identifier()); } } - expect([...chunkModules.app]).toStrictEqual( - expect.not.arrayContaining([...chunkModules["other-vendors"]]) - ); + for (const module of chunkModules["other-vendors"]) { + expect([...chunkModules.app]).not.toContain(module); + } - expect([...chunkModules.page1]).toStrictEqual( - expect.not.arrayContaining([ - ...chunkModules["other-vendors"], - ...chunkModules["react-vendors"], - ...chunkModules["app"] - ]) - ); + for (const module of [ + ...chunkModules["other-vendors"], + ...chunkModules["react-vendors"], + ...chunkModules["app"] + ]) { + expect(chunkModules.page1).not.toContain(module); + expect(chunkModules.page2).not.toContain(module); + } + + for (const module of [ + ...chunkModules["other-vendors"], + ...chunkModules["app"] + ]) { + expect([...chunkModules.page3]).not.toContain(module); + } }); }; this.hooks.compilation.tap("testcase", handler); diff --git a/test/configCases/entry/depend-on-bug/app.js b/test/configCases/entry/depend-on-bug/app.js new file mode 100644 index 000000000..b6eb6a313 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/app.js @@ -0,0 +1 @@ +import isomorphicFetch from "isomorphic-fetch"; diff --git a/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js b/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js new file mode 100644 index 000000000..ce0c36b31 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js @@ -0,0 +1 @@ +module.exports = "isomorphic-fetch"; diff --git a/test/configCases/entry/depend-on-bug/other-vendors.js b/test/configCases/entry/depend-on-bug/other-vendors.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/configCases/entry/depend-on-bug/page1.js b/test/configCases/entry/depend-on-bug/page1.js new file mode 100644 index 000000000..36a7db85b --- /dev/null +++ b/test/configCases/entry/depend-on-bug/page1.js @@ -0,0 +1,7 @@ +import isomorphicFetch from "isomorphic-fetch"; + +it("should run", () => { + expect( + __STATS__.modules.find(m => m.name.includes("isomorphic-fetch")).chunks + ).toHaveLength(1); +}); diff --git a/test/configCases/entry/depend-on-bug/test.config.js b/test/configCases/entry/depend-on-bug/test.config.js new file mode 100644 index 000000000..8f1c48be6 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/test.config.js @@ -0,0 +1,5 @@ +module.exports = { + findBundle: function () { + return ["./other-vendors.js", "./page1.js", "./app.js"]; + } +}; diff --git a/test/configCases/entry/depend-on-bug/webpack.config.js b/test/configCases/entry/depend-on-bug/webpack.config.js new file mode 100644 index 000000000..e55145af4 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/webpack.config.js @@ -0,0 +1,19 @@ +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Configuration} Configuration */ + +/** @type {Configuration} */ +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry() { + return Promise.resolve({ + app: { import: "./app.js", dependOn: ["other-vendors"] }, + page1: { import: "./page1.js", dependOn: ["app"] }, + "other-vendors": "./other-vendors" + }); + }, + target: "web", + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/errors/asset-options-validation/errors.js b/test/configCases/errors/asset-options-validation/errors.js new file mode 100644 index 000000000..cc7b138a3 --- /dev/null +++ b/test/configCases/errors/asset-options-validation/errors.js @@ -0,0 +1,6 @@ +module.exports = [ + [ + /Invalid generator object\. Asset Modules Plugin has been initialized using a generator object that does not match the API schema/, + /generator has an unknown property 'filename'/ + ] +]; diff --git a/test/configCases/errors/asset-options-validation/index.js b/test/configCases/errors/asset-options-validation/index.js new file mode 100644 index 000000000..397651561 --- /dev/null +++ b/test/configCases/errors/asset-options-validation/index.js @@ -0,0 +1 @@ +import url from "./text.txt"; diff --git a/test/configCases/errors/asset-options-validation/text.txt b/test/configCases/errors/asset-options-validation/text.txt new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/test/configCases/errors/asset-options-validation/text.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/errors/asset-options-validation/webpack.config.js b/test/configCases/errors/asset-options-validation/webpack.config.js new file mode 100644 index 000000000..6a2069d8c --- /dev/null +++ b/test/configCases/errors/asset-options-validation/webpack.config.js @@ -0,0 +1,14 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/inline", + generator: { + filename: "[name].txt" + } + } + ] + } +}; diff --git a/test/configCases/inner-graph/class/module.js b/test/configCases/inner-graph/class/module.js index 4bc7fed26..244e9ee77 100644 --- a/test/configCases/inner-graph/class/module.js +++ b/test/configCases/inner-graph/class/module.js @@ -1,4 +1,13 @@ -import { deepEqual, equal } from "./assert"; +import { + deepEqual, + equal, + strictEqual, + notEqual, + maybeEqual, + definiteEqual, + getNameA, + getNameB +} from "./assert"; function fun1() { deepEqual(1, 1); @@ -27,3 +36,31 @@ export class ExportCls2 { this.name = equal; } } + +export class ExportCls3 { + static add = () => { + strictEqual(); + }; +} + +export class ExportCls4 { + static name = notEqual; +} + +export class ExportCls5a { + static name = getNameA(); +} + +export class ExportCls5b { + static [getNameB()] = "name"; +} + +export class ExportCls6 { + add = () => { + maybeEqual(); + }; +} + +export class ExportCls7 { + add = definiteEqual(); +} diff --git a/test/configCases/inner-graph/class/test.filter.js b/test/configCases/inner-graph/class/test.filter.js new file mode 100644 index 000000000..25a2a20eb --- /dev/null +++ b/test/configCases/inner-graph/class/test.filter.js @@ -0,0 +1,5 @@ +var supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = function (config) { + return supportsClassFields(); +}; diff --git a/test/configCases/inner-graph/class/webpack.config.js b/test/configCases/inner-graph/class/webpack.config.js index 47bbef906..31861b779 100644 --- a/test/configCases/inner-graph/class/webpack.config.js +++ b/test/configCases/inner-graph/class/webpack.config.js @@ -1,27 +1,75 @@ const createTestCases = require("../_helpers/createTestCases"); +const base = ["getNameA", "getNameB"]; module.exports = createTestCases({ nothing: { usedExports: [], expect: { - "./assert": [] + "./assert": [...base] } }, ExportCls1: { usedExports: ["ExportCls1"], expect: { - "./assert": ["deepEqual"] + "./assert": [...base, "deepEqual"] } }, ExportCls2: { usedExports: ["ExportCls2"], expect: { - "./assert": ["equal"] + "./assert": [...base, "equal"] + } + }, + ExportCls3: { + usedExports: ["ExportCls3"], + expect: { + "./assert": [...base, "strictEqual"] + } + }, + ExportCls4: { + usedExports: ["ExportCls4"], + expect: { + "./assert": [...base, "notEqual"] + } + }, + ExportCls6: { + usedExports: ["ExportCls6"], + expect: { + "./assert": [...base, "maybeEqual"] + } + }, + ExportCls7: { + usedExports: ["ExportCls7"], + expect: { + "./assert": [...base, "definiteEqual"] + } + }, + ExportCls1_2: { + usedExports: ["ExportCls1", "ExportCls2"], + expect: { + "./assert": [...base, "deepEqual", "equal"] } }, all: { - usedExports: ["ExportCls1", "ExportCls2"], + usedExports: [ + "ExportCls1", + "ExportCls2", + "ExportCls3", + "ExportCls4", + "ExportCls5a", + "ExportCls5b", + "ExportCls6", + "ExportCls7" + ], expect: { - "./assert": ["deepEqual", "equal"] + "./assert": [ + ...base, + "deepEqual", + "equal", + "strictEqual", + "notEqual", + "maybeEqual", + "definiteEqual" + ] } } }); diff --git a/test/helpers/supportsClassFields.js b/test/helpers/supportsClassFields.js new file mode 100644 index 000000000..8b3e2bbc1 --- /dev/null +++ b/test/helpers/supportsClassFields.js @@ -0,0 +1,8 @@ +module.exports = function supportsES6() { + try { + eval("class A { #field = 1 }"); + return true; + } catch (e) { + return false; + } +}; diff --git a/test/watchCases/cache/asset-modules/0/index.js b/test/watchCases/cache/asset-modules/0/index.js index 2b463bf2e..a08393ec3 100644 --- a/test/watchCases/cache/asset-modules/0/index.js +++ b/test/watchCases/cache/asset-modules/0/index.js @@ -1,11 +1,16 @@ -it("should return a valid url when cached", () => { +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { const url = new URL("file.txt", import.meta.url); expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); }); -it("should return a valid url when modified", () => { +it("should return a valid url when modified", async () => { const url = new URL("other.txt", import.meta.url); expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); }); it("should not emit undefined files", () => { diff --git a/test/watchCases/cache/asset-modules/2/index.js b/test/watchCases/cache/asset-modules/2/index.js new file mode 100644 index 000000000..12552c1b0 --- /dev/null +++ b/test/watchCases/cache/asset-modules/2/index.js @@ -0,0 +1,5 @@ +it("should not emit files", () => { + expect(STATS_JSON.assets.map(a => a.name)).not.toContainEqual( + expect.stringMatching(/\.txt$/) + ); +}); diff --git a/test/watchCases/cache/asset-modules/3/index.js b/test/watchCases/cache/asset-modules/3/index.js new file mode 100644 index 000000000..a08393ec3 --- /dev/null +++ b/test/watchCases/cache/asset-modules/3/index.js @@ -0,0 +1,19 @@ +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { + const url = new URL("file.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should return a valid url when modified", async () => { + const url = new URL("other.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should not emit undefined files", () => { + expect(STATS_JSON.assets.map(a => a.name)).not.toContain(undefined); + expect(STATS_JSON.assets.map(a => a.name)).not.toContain("undefined"); +}); diff --git a/test/watchCases/cache/emit-when-clean/0/file.txt b/test/watchCases/cache/emit-when-clean/0/file.txt new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/0/file.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/watchCases/cache/emit-when-clean/0/index.js b/test/watchCases/cache/emit-when-clean/0/index.js new file mode 100644 index 000000000..c67fe3ba4 --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/0/index.js @@ -0,0 +1,14 @@ +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { + const url = new URL("file.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should return a valid url when modified", async () => { + const url = new URL("other.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); diff --git a/test/watchCases/cache/emit-when-clean/0/other.txt b/test/watchCases/cache/emit-when-clean/0/other.txt new file mode 100644 index 000000000..3ee384936 --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/0/other.txt @@ -0,0 +1 @@ +Hello World 2 diff --git a/test/watchCases/cache/emit-when-clean/1/file.txt b/test/watchCases/cache/emit-when-clean/1/file.txt new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/1/file.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/watchCases/cache/emit-when-clean/1/other.txt b/test/watchCases/cache/emit-when-clean/1/other.txt new file mode 100644 index 000000000..22c0dee49 --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/1/other.txt @@ -0,0 +1 @@ +Hello World 3 diff --git a/test/watchCases/cache/emit-when-clean/2/index.js b/test/watchCases/cache/emit-when-clean/2/index.js new file mode 100644 index 000000000..12552c1b0 --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/2/index.js @@ -0,0 +1,5 @@ +it("should not emit files", () => { + expect(STATS_JSON.assets.map(a => a.name)).not.toContainEqual( + expect.stringMatching(/\.txt$/) + ); +}); diff --git a/test/watchCases/cache/emit-when-clean/3/index.js b/test/watchCases/cache/emit-when-clean/3/index.js new file mode 100644 index 000000000..b3584ac0a --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/3/index.js @@ -0,0 +1,22 @@ +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { + const url = new URL("file.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should return a valid url when modified", async () => { + const url = new URL("other.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should not rewrite files and only compare them", () => { + for (const asset of STATS_JSON.assets) { + if (asset.name.endsWith(".txt")) { + expect(asset).toHaveProperty("emitted", true); + } + } +}); diff --git a/test/watchCases/cache/emit-when-clean/webpack.config.js b/test/watchCases/cache/emit-when-clean/webpack.config.js new file mode 100644 index 000000000..36b900e3e --- /dev/null +++ b/test/watchCases/cache/emit-when-clean/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + output: { + clean: true + } +}; diff --git a/test/watchCases/cache/emit-without-clean/0/file.txt b/test/watchCases/cache/emit-without-clean/0/file.txt new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/0/file.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/watchCases/cache/emit-without-clean/0/index.js b/test/watchCases/cache/emit-without-clean/0/index.js new file mode 100644 index 000000000..c67fe3ba4 --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/0/index.js @@ -0,0 +1,14 @@ +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { + const url = new URL("file.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should return a valid url when modified", async () => { + const url = new URL("other.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); diff --git a/test/watchCases/cache/emit-without-clean/0/other.txt b/test/watchCases/cache/emit-without-clean/0/other.txt new file mode 100644 index 000000000..3ee384936 --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/0/other.txt @@ -0,0 +1 @@ +Hello World 2 diff --git a/test/watchCases/cache/emit-without-clean/1/file.txt b/test/watchCases/cache/emit-without-clean/1/file.txt new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/1/file.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/watchCases/cache/emit-without-clean/1/other.txt b/test/watchCases/cache/emit-without-clean/1/other.txt new file mode 100644 index 000000000..22c0dee49 --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/1/other.txt @@ -0,0 +1 @@ +Hello World 3 diff --git a/test/watchCases/cache/emit-without-clean/2/index.js b/test/watchCases/cache/emit-without-clean/2/index.js new file mode 100644 index 000000000..12552c1b0 --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/2/index.js @@ -0,0 +1,5 @@ +it("should not emit files", () => { + expect(STATS_JSON.assets.map(a => a.name)).not.toContainEqual( + expect.stringMatching(/\.txt$/) + ); +}); diff --git a/test/watchCases/cache/emit-without-clean/3/index.js b/test/watchCases/cache/emit-without-clean/3/index.js new file mode 100644 index 000000000..4e187404a --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/3/index.js @@ -0,0 +1,22 @@ +import { stat } from "fs"; +import { promisify } from "util"; + +it("should return a valid url when cached", async () => { + const url = new URL("file.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should return a valid url when modified", async () => { + const url = new URL("other.txt", import.meta.url); + expect(url.pathname).toMatch(/\.txt$/); + expect((await promisify(stat)(url)).isFile()).toBe(true); +}); + +it("should not rewrite files and only compare them", () => { + for (const asset of STATS_JSON.assets) { + if (asset.name.endsWith(".txt")) { + expect(asset).toHaveProperty("cached", true); + } + } +}); diff --git a/test/watchCases/cache/emit-without-clean/webpack.config.js b/test/watchCases/cache/emit-without-clean/webpack.config.js new file mode 100644 index 000000000..e1eaf5923 --- /dev/null +++ b/test/watchCases/cache/emit-without-clean/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + output: { + clean: false + } +}; diff --git a/types.d.ts b/types.d.ts index d304bcae7..38cbc6615 100644 --- a/types.d.ts +++ b/types.d.ts @@ -60,6 +60,7 @@ import { SequenceExpression, SimpleCallExpression, SimpleLiteral, + SourceLocation, SpreadElement, Super, SwitchCase, @@ -887,10 +888,15 @@ declare class ChunkGraph { ): ReadonlySet; getChunkRuntimeRequirements(chunk: Chunk): ReadonlySet; getModuleGraphHash( - module?: any, - runtime?: any, + module: Module, + runtime: RuntimeSpec, withConnections?: boolean - ): any; + ): string; + getModuleGraphHashBigInt( + module: Module, + runtime: RuntimeSpec, + withConnections?: boolean + ): bigint; getTreeRuntimeRequirements(chunk: Chunk): ReadonlySet; static getChunkGraphForModule( module: Module, @@ -2457,9 +2463,9 @@ declare class Dependency { constructor(); weak: boolean; optional: boolean; - loc: DependencyLocation; readonly type: string; readonly category: string; + loc: DependencyLocation; getResourceIdentifier(): null | string; /** @@ -3819,6 +3825,11 @@ declare interface FileCacheOptions { */ name?: string; + /** + * Track and log detailed timing information for individual cache items. + */ + profile?: boolean; + /** * When to store data to the filesystem. (pack: Store data when compiler is idle in a single file). */ @@ -4552,6 +4563,7 @@ declare class JavascriptParser extends Parser { | FunctionDeclaration | VariableDeclaration | ClassDeclaration + | PrivateIdentifierNode ), number ], @@ -4654,7 +4666,18 @@ declare class JavascriptParser extends Parser { boolean | void >; classBodyElement: SyncBailHook< - [MethodDefinition, ClassExpression | ClassDeclaration], + [ + MethodDefinition | PropertyDefinitionNode, + ClassExpression | ClassDeclaration + ], + boolean | void + >; + classBodyValue: SyncBailHook< + [ + Expression, + MethodDefinition | PropertyDefinitionNode, + ClassExpression | ClassDeclaration + ], boolean | void >; label: HookMap>; @@ -4783,7 +4806,6 @@ declare class JavascriptParser extends Parser { currentTagData: any; getRenameIdentifier(expr?: any): undefined | string; walkClass(classy: ClassExpression | ClassDeclaration): void; - walkMethodDefinition(methodDefinition?: any): void; preWalkStatements(statements?: any): void; blockPreWalkStatements(statements?: any): void; walkStatements(statements?: any): void; @@ -4968,7 +4990,8 @@ declare class JavascriptParser extends Parser { | ChainExpression | FunctionDeclaration | VariableDeclaration - | ClassDeclaration, + | ClassDeclaration + | PrivateIdentifierNode, commentsStartPos: number ): boolean; getComments(range?: any): any[]; @@ -8373,6 +8396,12 @@ declare interface PrintedElement { element: string; content: string; } +declare interface PrivateIdentifierNode { + type: "PrivateIdentifier"; + name: string; + loc?: null | SourceLocation; + range?: [number, number]; +} declare interface Problem { type: ProblemType; path: string; @@ -8490,6 +8519,71 @@ declare interface ProgressPluginOptions { */ profile?: null | boolean; } +declare interface PropertyDefinitionNode { + type: "PropertyDefinition"; + key: + | UnaryExpression + | ThisExpression + | ArrayExpression + | ObjectExpression + | FunctionExpression + | ArrowFunctionExpression + | YieldExpression + | SimpleLiteral + | RegExpLiteral + | BigIntLiteral + | UpdateExpression + | BinaryExpression + | AssignmentExpression + | LogicalExpression + | MemberExpression + | ConditionalExpression + | SimpleCallExpression + | NewExpression + | SequenceExpression + | TemplateLiteral + | TaggedTemplateExpression + | ClassExpression + | MetaProperty + | Identifier + | AwaitExpression + | ImportExpression + | ChainExpression + | PrivateIdentifierNode; + value: + | null + | UnaryExpression + | ThisExpression + | ArrayExpression + | ObjectExpression + | FunctionExpression + | ArrowFunctionExpression + | YieldExpression + | SimpleLiteral + | RegExpLiteral + | BigIntLiteral + | UpdateExpression + | BinaryExpression + | AssignmentExpression + | LogicalExpression + | MemberExpression + | ConditionalExpression + | SimpleCallExpression + | NewExpression + | SequenceExpression + | TemplateLiteral + | TaggedTemplateExpression + | ClassExpression + | MetaProperty + | Identifier + | AwaitExpression + | ImportExpression + | ChainExpression; + computed: boolean; + static: boolean; + loc?: null | SourceLocation; + range?: [number, number]; +} declare class ProvidePlugin { constructor(definitions: Record); definitions: Record; diff --git a/yarn.lock b/yarn.lock index 34c2820a8..c7da9f605 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,25 +25,25 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" - integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== +"@babel/compat-data@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.7.5": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.15.tgz#a6d40917df027487b54312202a06812c4f7792d0" - integrity sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ== + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" + integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.13" + "@babel/generator" "^7.13.16" + "@babel/helper-compilation-targets" "^7.13.16" "@babel/helper-module-transforms" "^7.13.14" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.15" + "@babel/helpers" "^7.13.16" + "@babel/parser" "^7.13.16" "@babel/template" "^7.12.13" "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.14" + "@babel/types" "^7.13.16" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -51,12 +51,12 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.13.9": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.13.16", "@babel/generator@^7.13.9": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.13.16" jsesc "^2.5.1" source-map "^0.5.0" @@ -67,12 +67,12 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.13.13": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" - integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== +"@babel/helper-compilation-targets@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== dependencies: - "@babel/compat-data" "^7.13.12" + "@babel/compat-data" "^7.13.15" "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" semver "^6.3.0" @@ -167,14 +167,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helpers@^7.13.10": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== +"@babel/helpers@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.16.tgz#08af075f786fd06a56e41bcac3e8cc87ddc4d0b3" + integrity sha512-x5otxUaLpdWHl02P4L94wBU+2BJXBkvO+6d6uzQ+xD9/h2hTSAwA5O8QV8GqKx/l8i+VYmKKQg9e2QGTa2Wu3Q== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.12.13" @@ -185,10 +185,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.15", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.15.tgz#8e66775fb523599acb6a289e12929fa5ab0954d8" - integrity sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.15", "@babel/parser@^7.13.16", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -349,13 +349,12 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.6.1", "@babel/types@^7.9.6": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" - integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.16.tgz#916120b858aa5655cfba84bd0f6021ff5bdb4e65" + integrity sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q== dependencies: "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -541,6 +540,11 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== +"@es-joy/jsdoccomment@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.1.1.tgz#23c54b8803cd10a2455385a5b2d7c27d6b55c36d" + integrity sha512-6lIx5Pjc50D7VJU9lfRZ1twfIrIwQk+aeT9Ink2C07IUu/y9pxkIpDqmhY/VN3jAW42dA5z6ioOdyhOZZU1isw== + "@eslint/eslintrc@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" @@ -896,9 +900,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^26.0.15": - version "26.0.22" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.22.tgz#8308a1debdf1b807aa47be2838acdcd91e88fbe6" - integrity sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw== + version "26.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" + integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -913,10 +917,10 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= -"@types/node@*", "@types/node@^14.14.10": - version "14.14.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.39.tgz#9ef394d4eb52953d2890e4839393c309aa25d2d1" - integrity sha512-Qipn7rfTxGEDqZiezH+wxqWYR8vcXq5LRpZrETD19Gs4o8LbklbmqotSUsMU+s5G3PJwMRDfNEYoxrcBwIxOuw== +"@types/node@*", "@types/node@^15.0.1": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1188,10 +1192,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.1.tgz#fb0026885b9ac9f48bac1e185e4af472971149ff" - integrity sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g== +acorn@^8.2.1: + version "8.2.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.2.tgz#c4574e4fea298d6e6ed4b85ab844b06dd59f26d6" + integrity sha512-VrMS8kxT0e7J1EX0p6rI/E0FbfOVcvBpbIqHThFv+f8YrZIlMfVotYcXKVPmTvPW8sW5miJzfUFrrvthUZg8VQ== aggregate-error@^3.0.0: version "3.0.1" @@ -1566,13 +1570,13 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.14.5: - version "4.16.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.4.tgz#7ebf913487f40caf4637b892b268069951c35d58" - integrity sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ== + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001208" + caniuse-lite "^1.0.30001219" colorette "^1.2.2" - electron-to-chromium "^1.3.712" + electron-to-chromium "^1.3.723" escalade "^3.1.1" node-releases "^1.1.71" @@ -1639,10 +1643,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001208: - version "1.0.30001208" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9" - integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA== +caniuse-lite@^1.0.30001219: + version "1.0.30001219" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b" + integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ== capture-exit@^2.0.0: version "2.0.0" @@ -1882,10 +1886,10 @@ comment-json@^4.0.6, comment-json@^4.1.0: has-own-prop "^2.0.0" repeat-string "^1.6.1" -comment-parser@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8" - integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ== +comment-parser@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.5.tgz#453627ef8f67dbcec44e79a9bd5baa37f0bce9b2" + integrity sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA== commondir@^1.0.1: version "1.0.1" @@ -1942,9 +1946,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^3.6.5: - version "3.10.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.1.tgz#e683963978b6806dcc6c0a4a8bd4ab0bdaf3f21a" - integrity sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA== + version "3.12.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.0.tgz#62bac86f7d7f087d40dba3e90a211c2c3c8559ea" + integrity sha512-SaMnchL//WwU2Ot1hhkPflE8gzo7uq1FGvUJ8GKmi3TOU7rGTHIU+eir1WGf6qOtTyxdfdcp10yPdGZ59sQ3hw== core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2103,22 +2107,21 @@ cspell@^4.0.63: minimatch "^3.0.4" css-loader@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.1.tgz#15fbd5b6ac4c1b170a098f804c5abd0722f2aa73" - integrity sha512-YCyRzlt/jgG1xanXZDG/DHqAueOtXFHeusP9TS478oP1J++JSKOyEgGW1GHVoCj/rkS+GWOlBwqQJBr9yajQ9w== + version "5.2.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.4.tgz#e985dcbce339812cb6104ef3670f08f9893a1536" + integrity sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw== dependencies: camelcase "^6.2.0" - cssesc "^3.0.0" icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.2.8" + postcss "^8.2.10" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" schema-utils "^3.0.0" - semver "^7.3.4" + semver "^7.3.5" cssesc@^3.0.0: version "3.0.0" @@ -2313,10 +2316,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.712: - version "1.3.712" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz#ae467ffe5f95961c6d41ceefe858fc36eb53b38f" - integrity sha512-3kRVibBeCM4vsgoHHGKHmPocLqtFAGTrebXxxtgKs87hNUzXrX2NuS3jnBys7IozCnw7viQlozxKkmty2KNfrw== +electron-to-chromium@^1.3.723: + version "1.3.723" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877" + integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg== emittery@^0.7.1: version "0.7.2" @@ -2469,9 +2472,9 @@ escodegen@^1.14.1: source-map "~0.6.1" eslint-config-prettier@^8.1.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.2.0.tgz#78de77d63bca8e9e59dae75a614b5299925bb7b3" - integrity sha512-dWV9EVeSo2qodOPi1iBYU/x6F6diHv8uujxbxr77xExs3zTAlNXvVZKiyLsQGNz7yPV2K49JY5WjPzNIuDc2Bw== + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== eslint-plugin-es@^3.0.0: version "3.0.1" @@ -2482,23 +2485,24 @@ eslint-plugin-es@^3.0.0: regexpp "^3.0.0" eslint-plugin-jest@^24.1.3: - version "24.3.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz#71f0b580f87915695c286c3f0eb88cf23664d044" - integrity sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug== + version "24.3.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173" + integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg== dependencies: "@typescript-eslint/experimental-utils" "^4.0.1" -eslint-plugin-jsdoc@^32.0.2: - version "32.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.3.0.tgz#7c9fa5da8c72bd6ad7d97bbf8dee8bc29bec3f9e" - integrity sha512-zyx7kajDK+tqS1bHuY5sapkad8P8KT0vdd/lE55j47VPG2MeenSYuIY/M/Pvmzq5g0+3JB+P3BJGUXmHxtuKPQ== +eslint-plugin-jsdoc@^33.0.0: + version "33.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-33.0.0.tgz#0aefe92706176b8c02c5a8ae721bf3b4705936a5" + integrity sha512-bkopnnuDdT04abKWPfDdD6XcAp2yX6UDpDViyvIdYmxbZYbpHXCRzQzLqCTo+SzWSTS0KFWz/V3shmmMr+x4EA== dependencies: - comment-parser "1.1.2" + "@es-joy/jsdoccomment" "^0.1.1" + comment-parser "1.1.5" debug "^4.3.1" jsdoctypeparser "^9.0.0" - lodash "^4.17.20" + lodash "^4.17.21" regextras "^0.7.1" - semver "^7.3.4" + semver "^7.3.5" spdx-expression-parse "^3.0.1" eslint-plugin-node@^11.0.0: @@ -2546,9 +2550,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.14.0: - version "7.24.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.24.0.tgz#2e44fa62d93892bfdb100521f17345ba54b8513a" - integrity sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ== + version "7.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.0" @@ -2924,9 +2928,9 @@ forever-agent@~0.6.1: integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= fork-ts-checker-webpack-plugin@^6.0.5: - version "6.2.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.1.tgz#e3a7e64c90e5490a75d43d86d47f02e538c0a13e" - integrity sha512-Pyhn2kav/Y2g6I7aInABgcph/B78jjdXc4kGHzaAUBL4UVthknxM6aMH47JwpnuTJmdOuf6p5vMbIahsBHuWGg== + version "6.2.5" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.5.tgz#09e81ad57ed862c9dd093298550e7f6966ab1a2f" + integrity sha512-EqHkTmxOotb5WJEc8kjzJh8IRuRUpHxtBh+jGyOHJcEwwZzqTmlMNAJsVF3tvALohi9yJzV8C1j215DyK8Ta8w== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -4274,9 +4278,9 @@ lcov-parse@^1.0.0: integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= less-loader@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-8.1.0.tgz#8276adc16bf6576dd80b71563685a2cfe93b0a50" - integrity sha512-IE73O5LY5WHA71EDwszM2PIEGDF30xz45GplpRhYuxMXhAvXoMudu/ItjllNR/ht7XLh5N7JegzRg11HYu+xxg== + version "8.1.1" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-8.1.1.tgz#ababe912580457ad00a4318146aac5b53e023f42" + integrity sha512-K93jJU7fi3n6rxVvzp8Cb88Uy9tcQKfHlkoezHwKILXhlNYiRQl4yowLIkQqmBXOH/5I8yoKiYeIf781HGkW9g== dependencies: klona "^2.0.4" @@ -4601,9 +4605,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.1.tgz#975e27c1d0bd8e052972415f47c79cea5ed37548" - integrity sha512-COAGbpAsU0ioFzj+/RRfO5Qv177L1Z/XAx2EmCF33b8GDDqKygMffBTws2lit8iaPdrbKEY5P+zsseBUCREZWQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz#b4db2525af2624899ed64a23b0016e0036411893" + integrity sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -5099,10 +5103,10 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.2.8: - version "8.2.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" - integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== +postcss@^8.2.10: + version "8.2.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b" + integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw== dependencies: colorette "^1.2.2" nanoid "^3.1.22" @@ -5696,10 +5700,10 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" @@ -6305,9 +6309,9 @@ trim-newlines@^3.0.0: integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== ts-loader@^8.0.2: - version "8.1.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.1.0.tgz#d6292487df279c7cc79b6d3b70bb9d31682b693e" - integrity sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A== + version "8.2.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.2.0.tgz#6a3aeaa378aecda543e2ed2c332d3123841d52e0" + integrity sha512-ebXBFrNyMSmbWgjnb3WBloUBK+VSx1xckaXsMXxlZRDqce/OPdYBVN5efB0W3V0defq0Gcy4YuzvPGqRgjj85A== dependencies: chalk "^4.1.0" enhanced-resolve "^4.0.0"