webpack 5.92.1 → 5.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/bin/webpack.js +6 -7
- package/hot/log.js +1 -2
- package/hot/only-dev-server.js +1 -1
- package/hot/poll.js +1 -1
- package/hot/signal.js +1 -1
- package/lib/APIPlugin.js +4 -3
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +12 -6
- package/lib/Cache.js +8 -10
- package/lib/CacheFacade.js +3 -3
- package/lib/CaseSensitiveModulesWarning.js +5 -7
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +58 -36
- package/lib/ChunkGroup.js +2 -3
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +10 -11
- package/lib/CodeGenerationResults.js +6 -5
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/Compilation.js +223 -191
- package/lib/Compiler.js +81 -82
- package/lib/ConcatenationScope.js +3 -6
- package/lib/ConditionalInitFragment.js +6 -7
- package/lib/ConstPlugin.js +7 -15
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +36 -21
- package/lib/ContextModuleFactory.js +89 -44
- package/lib/ContextReplacementPlugin.js +10 -9
- package/lib/DefinePlugin.js +76 -69
- package/lib/DelegatedModule.js +7 -3
- package/lib/DelegatedModuleFactoryPlugin.js +36 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +0 -1
- package/lib/Dependency.js +10 -14
- package/lib/DllEntryPlugin.js +4 -2
- package/lib/DllModuleFactory.js +1 -0
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +30 -15
- package/lib/EntryPlugin.js +1 -3
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +11 -12
- package/lib/EvalDevToolModulePlugin.js +10 -12
- package/lib/EvalSourceMapDevToolPlugin.js +15 -13
- package/lib/ExportsInfo.js +185 -120
- package/lib/ExternalModule.js +104 -64
- package/lib/ExternalModuleFactoryPlugin.js +23 -10
- package/lib/FileSystemInfo.js +791 -422
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
- package/lib/FlagDependencyExportsPlugin.js +12 -11
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +2 -5
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +8 -10
- package/lib/HotModuleReplacementPlugin.js +78 -64
- package/lib/IgnoreErrorModuleFactory.js +3 -3
- package/lib/IgnorePlugin.js +1 -3
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +2 -3
- package/lib/LibManifestPlugin.js +4 -3
- package/lib/MainTemplate.js +72 -19
- package/lib/Module.js +25 -9
- package/lib/ModuleBuildError.js +4 -11
- package/lib/ModuleDependencyError.js +5 -5
- package/lib/ModuleDependencyWarning.js +5 -5
- package/lib/ModuleError.js +1 -5
- package/lib/ModuleFilenameHelpers.js +29 -46
- package/lib/ModuleGraph.js +7 -6
- package/lib/ModuleGraphConnection.js +6 -6
- package/lib/ModuleInfoHeaderPlugin.js +82 -30
- package/lib/ModuleParseError.js +8 -9
- package/lib/ModuleRestoreError.js +1 -1
- package/lib/ModuleStoreError.js +1 -1
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +21 -22
- package/lib/ModuleWarning.js +1 -5
- package/lib/MultiCompiler.js +24 -26
- package/lib/MultiStats.js +73 -31
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +132 -70
- package/lib/NormalModuleFactory.js +53 -49
- package/lib/OptimizationStages.js +3 -3
- package/lib/ProgressPlugin.js +9 -9
- package/lib/ProvidePlugin.js +4 -4
- package/lib/RuntimeGlobals.js +71 -70
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +24 -12
- package/lib/RuntimeTemplate.js +40 -44
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolPlugin.js +42 -34
- package/lib/Stats.js +5 -11
- package/lib/Template.js +18 -24
- package/lib/TemplatedPathPlugin.js +12 -10
- package/lib/UseStrictPlugin.js +8 -1
- package/lib/WarnDeprecatedOptionPlugin.js +0 -1
- package/lib/WatchIgnorePlugin.js +26 -9
- package/lib/Watching.js +10 -5
- package/lib/WebpackOptionsApply.js +89 -62
- package/lib/asset/AssetGenerator.js +107 -42
- package/lib/asset/AssetModulesPlugin.js +29 -23
- package/lib/asset/AssetSourceGenerator.js +2 -7
- package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
- package/lib/buildChunkGraph.js +14 -19
- package/lib/cache/IdleFileCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
- package/lib/cache/PackFileCacheStrategy.js +51 -50
- package/lib/cache/ResolverCachePlugin.js +6 -6
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +148 -104
- package/lib/config/browserslistTargetHandler.js +16 -13
- package/lib/config/defaults.js +31 -28
- package/lib/config/normalization.js +335 -344
- package/lib/config/target.js +42 -52
- package/lib/container/ContainerEntryModule.js +2 -2
- package/lib/container/ContainerPlugin.js +1 -1
- package/lib/container/RemoteRuntimeModule.js +11 -8
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +39 -40
- package/lib/css/CssGenerator.js +11 -14
- package/lib/css/CssLoadingRuntimeModule.js +10 -10
- package/lib/css/CssModulesPlugin.js +127 -47
- package/lib/css/CssParser.js +20 -18
- package/lib/css/walkCssTokens.js +80 -95
- package/lib/debug/ProfilingPlugin.js +19 -20
- package/lib/dependencies/AMDDefineDependency.js +1 -1
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
- package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
- package/lib/dependencies/CommonJsExportsDependency.js +0 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
- package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
- package/lib/dependencies/ConstDependency.js +1 -1
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +2 -2
- package/lib/dependencies/CriticalDependencyWarning.js +1 -1
- package/lib/dependencies/CssExportDependency.js +72 -9
- package/lib/dependencies/CssImportDependency.js +0 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
- package/lib/dependencies/CssUrlDependency.js +4 -5
- package/lib/dependencies/DynamicExports.js +5 -5
- package/lib/dependencies/ExportsInfoDependency.js +1 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
- package/lib/dependencies/HarmonyExports.js +2 -2
- package/lib/dependencies/HarmonyImportDependency.js +2 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
- package/lib/dependencies/ImportDependency.js +1 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
- package/lib/dependencies/ImportMetaPlugin.js +11 -13
- package/lib/dependencies/ImportParserPlugin.js +39 -44
- package/lib/dependencies/JsonExportsDependency.js +22 -18
- package/lib/dependencies/LoaderPlugin.js +47 -36
- package/lib/dependencies/LocalModule.js +1 -1
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
- package/lib/dependencies/ProvidedDependency.js +1 -1
- package/lib/dependencies/PureExpressionDependency.js +6 -6
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
- package/lib/dependencies/SystemPlugin.js +1 -1
- package/lib/dependencies/URLDependency.js +3 -3
- package/lib/dependencies/URLPlugin.js +66 -12
- package/lib/dependencies/WorkerPlugin.js +25 -24
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
- package/lib/hmr/LazyCompilationPlugin.js +27 -12
- package/lib/hmr/lazyCompilationBackend.js +64 -40
- package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +5 -1
- package/lib/ids/IdHelpers.js +29 -39
- package/lib/ids/SyncModuleIdsPlugin.js +7 -2
- package/lib/index.js +1 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
- package/lib/javascript/BasicEvaluatedExpression.js +4 -19
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
- package/lib/javascript/JavascriptGenerator.js +23 -7
- package/lib/javascript/JavascriptModulesPlugin.js +97 -70
- package/lib/javascript/JavascriptParser.js +179 -200
- package/lib/javascript/JavascriptParserHelpers.js +20 -21
- package/lib/javascript/StartupHelpers.js +41 -13
- package/lib/json/JsonGenerator.js +7 -13
- package/lib/json/JsonModulesPlugin.js +1 -4
- package/lib/json/JsonParser.js +5 -3
- package/lib/library/AmdLibraryPlugin.js +12 -16
- package/lib/library/AssignLibraryPlugin.js +9 -11
- package/lib/library/EnableLibraryPlugin.js +25 -15
- package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
- package/lib/library/JsonpLibraryPlugin.js +2 -1
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +2 -1
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +66 -92
- package/lib/logging/Logger.js +32 -4
- package/lib/logging/createConsoleLogger.js +12 -13
- package/lib/logging/runtime.js +7 -8
- package/lib/logging/truncateArgs.js +5 -8
- package/lib/node/NodeWatchFileSystem.js +3 -18
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/nodeConsole.js +22 -22
- package/lib/optimize/AggressiveMergingPlugin.js +2 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
- package/lib/optimize/ConcatenatedModule.js +144 -61
- package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
- package/lib/optimize/InnerGraph.js +17 -17
- package/lib/optimize/InnerGraphPlugin.js +8 -7
- package/lib/optimize/LimitChunkCountPlugin.js +2 -3
- package/lib/optimize/MangleExportsPlugin.js +1 -0
- package/lib/optimize/MinMaxSizeWarning.js +1 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
- package/lib/optimize/RealContentHashPlugin.js +7 -10
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
- package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
- package/lib/optimize/SplitChunksPlugin.js +34 -30
- package/lib/performance/SizeLimitsPlugin.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
- package/lib/rules/BasicEffectRulePlugin.js +3 -1
- package/lib/rules/BasicMatcherRulePlugin.js +3 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
- package/lib/rules/RuleSetCompiler.js +41 -22
- package/lib/rules/UseEffectRulePlugin.js +36 -32
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
- package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
- package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +241 -126
- package/lib/serialization/BinaryMiddleware.js +44 -28
- package/lib/serialization/DateObjectSerializer.js +1 -0
- package/lib/serialization/ErrorObjectSerializer.js +2 -0
- package/lib/serialization/FileMiddleware.js +154 -106
- package/lib/serialization/MapObjectSerializer.js +2 -1
- package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
- package/lib/serialization/ObjectMiddleware.js +52 -56
- package/lib/serialization/PlainObjectSerializer.js +32 -6
- package/lib/serialization/RegExpObjectSerializer.js +1 -0
- package/lib/serialization/Serializer.js +4 -5
- package/lib/serialization/SerializerMiddleware.js +6 -6
- package/lib/serialization/SetObjectSerializer.js +2 -1
- package/lib/sharing/ConsumeSharedModule.js +19 -14
- package/lib/sharing/ConsumeSharedPlugin.js +116 -97
- package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedPlugin.js +2 -2
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +15 -27
- package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
- package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
- package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
- package/lib/stats/StatsFactory.js +127 -56
- package/lib/stats/StatsPrinter.js +75 -44
- package/lib/util/ArrayHelpers.js +8 -4
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +31 -12
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +1 -0
- package/lib/util/MapHelpers.js +1 -3
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/Queue.js +1 -1
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +4 -3
- package/lib/util/StackedCacheMap.js +4 -6
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +0 -5
- package/lib/util/TupleQueue.js +1 -1
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +7 -7
- package/lib/util/WeakTupleMap.js +19 -21
- package/lib/util/binarySearchBounds.js +5 -12
- package/lib/util/chainedImports.js +1 -1
- package/lib/util/cleverMerge.js +21 -19
- package/lib/util/comparators.js +57 -52
- package/lib/util/compileBooleanMatcher.js +3 -6
- package/lib/util/conventions.js +10 -13
- package/lib/util/createHash.js +9 -6
- package/lib/util/deprecation.js +22 -12
- package/lib/util/deterministicGrouping.js +19 -26
- package/lib/util/findGraphRoots.js +2 -2
- package/lib/util/fs.js +31 -31
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +7 -7
- package/lib/util/hash/xxhash64.js +2 -2
- package/lib/util/identifier.js +81 -59
- package/lib/util/memoize.js +8 -10
- package/lib/util/mergeScope.js +6 -9
- package/lib/util/nonNumericOnlyHash.js +2 -2
- package/lib/util/numberHash.js +1 -6
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/propertyAccess.js +2 -5
- package/lib/util/propertyName.js +1 -3
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +103 -113
- package/lib/util/semver.js +29 -27
- package/lib/util/serialization.js +16 -1
- package/lib/util/smartGrouping.js +5 -5
- package/lib/util/source.js +1 -1
- package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
- package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +17 -16
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +17 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
- package/types.d.ts +682 -347
package/lib/util/AsyncQueue.js
CHANGED
@@ -20,7 +20,7 @@ let inHandleResult = 0;
|
|
20
20
|
* @template T
|
21
21
|
* @callback Callback
|
22
22
|
* @param {(WebpackError | null)=} err
|
23
|
-
* @param {T=} result
|
23
|
+
* @param {(T | null)=} result
|
24
24
|
*/
|
25
25
|
|
26
26
|
/**
|
@@ -37,15 +37,27 @@ class AsyncQueueEntry {
|
|
37
37
|
this.item = item;
|
38
38
|
/** @type {typeof QUEUED_STATE | typeof PROCESSING_STATE | typeof DONE_STATE} */
|
39
39
|
this.state = QUEUED_STATE;
|
40
|
+
/** @type {Callback<R> | undefined} */
|
40
41
|
this.callback = callback;
|
41
42
|
/** @type {Callback<R>[] | undefined} */
|
42
43
|
this.callbacks = undefined;
|
44
|
+
/** @type {R | null | undefined} */
|
43
45
|
this.result = undefined;
|
44
|
-
/** @type {WebpackError | undefined} */
|
46
|
+
/** @type {WebpackError | null | undefined} */
|
45
47
|
this.error = undefined;
|
46
48
|
}
|
47
49
|
}
|
48
50
|
|
51
|
+
/**
|
52
|
+
* @template T, K
|
53
|
+
* @typedef {function(T): K} getKey
|
54
|
+
*/
|
55
|
+
|
56
|
+
/**
|
57
|
+
* @template T, R
|
58
|
+
* @typedef {function(T, Callback<R>): void} Processor
|
59
|
+
*/
|
60
|
+
|
49
61
|
/**
|
50
62
|
* @template T
|
51
63
|
* @template K
|
@@ -57,15 +69,16 @@ class AsyncQueue {
|
|
57
69
|
* @param {string=} options.name name of the queue
|
58
70
|
* @param {number=} options.parallelism how many items should be processed at once
|
59
71
|
* @param {AsyncQueue<any, any, any>=} options.parent parent queue, which will have priority over this queue and with shared parallelism
|
60
|
-
* @param {
|
61
|
-
* @param {
|
72
|
+
* @param {getKey<T, K>=} options.getKey extract key from item
|
73
|
+
* @param {Processor<T, R>} options.processor async function to process items
|
62
74
|
*/
|
63
75
|
constructor({ name, parallelism, parent, processor, getKey }) {
|
64
76
|
this._name = name;
|
65
77
|
this._parallelism = parallelism || 1;
|
66
78
|
this._processor = processor;
|
67
79
|
this._getKey =
|
68
|
-
getKey ||
|
80
|
+
getKey ||
|
81
|
+
/** @type {getKey<T, K>} */ (item => /** @type {T & K} */ (item));
|
69
82
|
/** @type {Map<K, AsyncQueueEntry<T, K, R>>} */
|
70
83
|
this._entries = new Map();
|
71
84
|
/** @type {ArrayQueue<AsyncQueueEntry<T, K, R>>} */
|
@@ -76,6 +89,7 @@ class AsyncQueue {
|
|
76
89
|
this._willEnsureProcessing = false;
|
77
90
|
this._needProcessing = false;
|
78
91
|
this._stopped = false;
|
92
|
+
/** @type {AsyncQueue<any, any, any>} */
|
79
93
|
this._root = parent ? parent._root : this;
|
80
94
|
if (parent) {
|
81
95
|
if (this._root._children === undefined) {
|
@@ -94,7 +108,7 @@ class AsyncQueue {
|
|
94
108
|
beforeStart: new AsyncSeriesHook(["item"]),
|
95
109
|
/** @type {SyncHook<[T]>} */
|
96
110
|
started: new SyncHook(["item"]),
|
97
|
-
/** @type {SyncHook<[T,
|
111
|
+
/** @type {SyncHook<[T, WebpackError | null | undefined, R | null | undefined]>} */
|
98
112
|
result: new SyncHook(["item", "error", "result"])
|
99
113
|
};
|
100
114
|
|
@@ -202,9 +216,14 @@ class AsyncQueue {
|
|
202
216
|
this._queued = new ArrayQueue();
|
203
217
|
const root = this._root;
|
204
218
|
for (const entry of queue) {
|
205
|
-
this._entries.delete(
|
219
|
+
this._entries.delete(
|
220
|
+
this._getKey(/** @type {AsyncQueueEntry<T, K, R>} */ (entry).item)
|
221
|
+
);
|
206
222
|
root._activeTasks++;
|
207
|
-
this._handleResult(
|
223
|
+
this._handleResult(
|
224
|
+
/** @type {AsyncQueueEntry<T, K, R>} */ (entry),
|
225
|
+
new WebpackError("Queue was stopped")
|
226
|
+
);
|
208
227
|
}
|
209
228
|
}
|
210
229
|
|
@@ -308,7 +327,7 @@ class AsyncQueue {
|
|
308
327
|
});
|
309
328
|
} catch (err) {
|
310
329
|
if (inCallback) throw err;
|
311
|
-
this._handleResult(entry, err, null);
|
330
|
+
this._handleResult(entry, /** @type {WebpackError} */ (err), null);
|
312
331
|
}
|
313
332
|
this.hooks.started.call(entry.item);
|
314
333
|
});
|
@@ -316,8 +335,8 @@ class AsyncQueue {
|
|
316
335
|
|
317
336
|
/**
|
318
337
|
* @param {AsyncQueueEntry<T, K, R>} entry the entry
|
319
|
-
* @param {WebpackError=} err error, if any
|
320
|
-
* @param {R=} result result, if any
|
338
|
+
* @param {(WebpackError | null)=} err error, if any
|
339
|
+
* @param {(R | null)=} result result, if any
|
321
340
|
* @returns {void}
|
322
341
|
*/
|
323
342
|
_handleResult(entry, err, result) {
|
@@ -326,7 +345,7 @@ class AsyncQueue {
|
|
326
345
|
? makeWebpackError(hookError, `AsyncQueue(${this._name}).hooks.result`)
|
327
346
|
: err;
|
328
347
|
|
329
|
-
const callback = entry.callback;
|
348
|
+
const callback = /** @type {Callback<R>} */ (entry.callback);
|
330
349
|
const callbacks = entry.callbacks;
|
331
350
|
entry.state = DONE_STATE;
|
332
351
|
entry.callback = undefined;
|
@@ -36,11 +36,10 @@ const someInIterable = (iterable, filter) => {
|
|
36
36
|
*/
|
37
37
|
const countIterable = iterable => {
|
38
38
|
let i = 0;
|
39
|
-
// eslint-disable-next-line no-unused-vars
|
40
39
|
for (const _ of iterable) i++;
|
41
40
|
return i;
|
42
41
|
};
|
43
42
|
|
44
|
-
exports.last = last;
|
45
|
-
exports.someInIterable = someInIterable;
|
46
|
-
exports.countIterable = countIterable;
|
43
|
+
module.exports.last = last;
|
44
|
+
module.exports.someInIterable = someInIterable;
|
45
|
+
module.exports.countIterable = countIterable;
|
@@ -8,6 +8,16 @@
|
|
8
8
|
const { first } = require("./SetHelpers");
|
9
9
|
const SortableSet = require("./SortableSet");
|
10
10
|
|
11
|
+
/**
|
12
|
+
* @template T
|
13
|
+
* @typedef {LazyBucketSortedSet<T, any> | SortableSet<T>} Entry
|
14
|
+
*/
|
15
|
+
|
16
|
+
/**
|
17
|
+
* @template T
|
18
|
+
* @typedef {(function(T): any) | (function(any, any): number)} Arg
|
19
|
+
*/
|
20
|
+
|
11
21
|
/**
|
12
22
|
* Multi layer bucket sorted set:
|
13
23
|
* Supports adding non-existing items (DO NOT ADD ITEM TWICE),
|
@@ -24,14 +34,15 @@ class LazyBucketSortedSet {
|
|
24
34
|
/**
|
25
35
|
* @param {function(T): K} getKey function to get key from item
|
26
36
|
* @param {function(K, K): number} comparator comparator to sort keys
|
27
|
-
* @param {...
|
37
|
+
* @param {...Arg<T>} args more pairs of getKey and comparator plus optional final comparator for the last layer
|
28
38
|
*/
|
29
39
|
constructor(getKey, comparator, ...args) {
|
30
40
|
this._getKey = getKey;
|
41
|
+
/** @type {Arg<T>[]} */
|
31
42
|
this._innerArgs = args;
|
32
43
|
this._leaf = args.length <= 1;
|
33
44
|
this._keys = new SortableSet(undefined, comparator);
|
34
|
-
/** @type {Map<K,
|
45
|
+
/** @type {Map<K, Entry<T>>} */
|
35
46
|
this._map = new Map();
|
36
47
|
this._unsortedItems = new Set();
|
37
48
|
this.size = 0;
|
@@ -54,13 +65,18 @@ class LazyBucketSortedSet {
|
|
54
65
|
_addInternal(key, item) {
|
55
66
|
let entry = this._map.get(key);
|
56
67
|
if (entry === undefined) {
|
57
|
-
entry =
|
58
|
-
|
59
|
-
|
68
|
+
entry =
|
69
|
+
/** @type {Entry<T>} */
|
70
|
+
(
|
71
|
+
this._leaf
|
72
|
+
? new SortableSet(undefined, this._innerArgs[0])
|
73
|
+
: new /** @type {TODO} */ (LazyBucketSortedSet)(...this._innerArgs)
|
74
|
+
);
|
60
75
|
this._keys.add(key);
|
61
76
|
this._map.set(key, entry);
|
62
77
|
}
|
63
|
-
|
78
|
+
/** @type {Entry<T>} */
|
79
|
+
(entry).add(item);
|
64
80
|
}
|
65
81
|
|
66
82
|
/**
|
@@ -74,7 +90,7 @@ class LazyBucketSortedSet {
|
|
74
90
|
return;
|
75
91
|
}
|
76
92
|
const key = this._getKey(item);
|
77
|
-
const entry = this._map.get(key);
|
93
|
+
const entry = /** @type {Entry<T>} */ (this._map.get(key));
|
78
94
|
entry.delete(item);
|
79
95
|
if (entry.size === 0) {
|
80
96
|
this._deleteKey(key);
|
@@ -94,7 +110,7 @@ class LazyBucketSortedSet {
|
|
94
110
|
* @returns {T | undefined} an item
|
95
111
|
*/
|
96
112
|
popFirst() {
|
97
|
-
if (this.size === 0) return
|
113
|
+
if (this.size === 0) return;
|
98
114
|
this.size--;
|
99
115
|
if (this._unsortedItems.size > 0) {
|
100
116
|
for (const item of this._unsortedItems) {
|
@@ -104,25 +120,24 @@ class LazyBucketSortedSet {
|
|
104
120
|
this._unsortedItems.clear();
|
105
121
|
}
|
106
122
|
this._keys.sort();
|
107
|
-
const key = first(this._keys);
|
123
|
+
const key = /** @type {K} */ (first(this._keys));
|
108
124
|
const entry = this._map.get(key);
|
109
125
|
if (this._leaf) {
|
110
126
|
const leafEntry = /** @type {SortableSet<T>} */ (entry);
|
111
127
|
leafEntry.sort();
|
112
|
-
const item = first(leafEntry);
|
128
|
+
const item = /** @type {T} */ (first(leafEntry));
|
113
129
|
leafEntry.delete(item);
|
114
130
|
if (leafEntry.size === 0) {
|
115
131
|
this._deleteKey(key);
|
116
132
|
}
|
117
133
|
return item;
|
118
|
-
} else {
|
119
|
-
const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
|
120
|
-
const item = nodeEntry.popFirst();
|
121
|
-
if (nodeEntry.size === 0) {
|
122
|
-
this._deleteKey(key);
|
123
|
-
}
|
124
|
-
return item;
|
125
134
|
}
|
135
|
+
const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
|
136
|
+
const item = nodeEntry.popFirst();
|
137
|
+
if (nodeEntry.size === 0) {
|
138
|
+
this._deleteKey(key);
|
139
|
+
}
|
140
|
+
return item;
|
126
141
|
}
|
127
142
|
|
128
143
|
/**
|
@@ -135,7 +150,6 @@ class LazyBucketSortedSet {
|
|
135
150
|
if (remove) {
|
136
151
|
this._unsortedItems.delete(item);
|
137
152
|
this.size--;
|
138
|
-
return;
|
139
153
|
}
|
140
154
|
};
|
141
155
|
}
|
@@ -163,32 +177,31 @@ class LazyBucketSortedSet {
|
|
163
177
|
this._addInternal(newKey, item);
|
164
178
|
}
|
165
179
|
};
|
166
|
-
}
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
}
|
178
|
-
return;
|
180
|
+
}
|
181
|
+
const oldEntry = /** @type {LazyBucketSortedSet<T, any>} */ (
|
182
|
+
this._map.get(key)
|
183
|
+
);
|
184
|
+
const finishUpdate = oldEntry.startUpdate(item);
|
185
|
+
return remove => {
|
186
|
+
if (remove) {
|
187
|
+
this.size--;
|
188
|
+
finishUpdate(true);
|
189
|
+
if (oldEntry.size === 0) {
|
190
|
+
this._deleteKey(key);
|
179
191
|
}
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
this.
|
192
|
+
return;
|
193
|
+
}
|
194
|
+
const newKey = this._getKey(item);
|
195
|
+
if (key === newKey) {
|
196
|
+
finishUpdate();
|
197
|
+
} else {
|
198
|
+
finishUpdate(true);
|
199
|
+
if (oldEntry.size === 0) {
|
200
|
+
this._deleteKey(key);
|
189
201
|
}
|
190
|
-
|
191
|
-
|
202
|
+
this._addInternal(newKey, item);
|
203
|
+
}
|
204
|
+
};
|
192
205
|
}
|
193
206
|
|
194
207
|
/**
|
@@ -215,16 +228,19 @@ class LazyBucketSortedSet {
|
|
215
228
|
* @returns {Iterator<T>} the iterator
|
216
229
|
*/
|
217
230
|
[Symbol.iterator]() {
|
231
|
+
/** @type {Iterator<T>[]} */
|
218
232
|
const iterators = [];
|
219
233
|
this._appendIterators(iterators);
|
220
234
|
iterators.reverse();
|
221
|
-
let currentIterator =
|
235
|
+
let currentIterator =
|
236
|
+
/** @type {Iterator<T>} */
|
237
|
+
(iterators.pop());
|
222
238
|
return {
|
223
239
|
next: () => {
|
224
240
|
const res = currentIterator.next();
|
225
241
|
if (res.done) {
|
226
242
|
if (iterators.length === 0) return res;
|
227
|
-
currentIterator = iterators.pop();
|
243
|
+
currentIterator = /** @type {Iterator<T>} */ (iterators.pop());
|
228
244
|
return currentIterator.next();
|
229
245
|
}
|
230
246
|
return res;
|
package/lib/util/LazySet.js
CHANGED
package/lib/util/MapHelpers.js
CHANGED
@@ -9,14 +9,12 @@
|
|
9
9
|
* getOrInsert is a helper function for maps that allows you to get a value
|
10
10
|
* from a map if it exists, or insert a new value if it doesn't. If it value doesn't
|
11
11
|
* exist, it will be computed by the provided function.
|
12
|
-
*
|
13
12
|
* @template K
|
14
13
|
* @template V
|
15
14
|
* @param {Map<K, V>} map The map object to check
|
16
15
|
* @param {K} key The key to check
|
17
16
|
* @param {function(): V} computer function which will compute the value if it doesn't exist
|
18
17
|
* @returns {V} The value from the map, or the computed value
|
19
|
-
*
|
20
18
|
* @example
|
21
19
|
* ```js
|
22
20
|
* const map = new Map();
|
@@ -24,7 +22,7 @@
|
|
24
22
|
* console.log(value); // "value"
|
25
23
|
* ```
|
26
24
|
*/
|
27
|
-
exports.getOrInsert = (map, key, computer) => {
|
25
|
+
module.exports.getOrInsert = (map, key, computer) => {
|
28
26
|
// Grab key from map
|
29
27
|
const value = map.get(key);
|
30
28
|
// If the value already exists, return it
|
package/lib/util/Queue.js
CHANGED
package/lib/util/Semaphore.js
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
class Semaphore {
|
9
9
|
/**
|
10
10
|
* Creates an instance of Semaphore.
|
11
|
-
*
|
12
11
|
* @param {number} available the amount available number of "tasks"
|
13
12
|
* in the Semaphore
|
14
13
|
*/
|
@@ -41,12 +40,10 @@ class Semaphore {
|
|
41
40
|
}
|
42
41
|
|
43
42
|
_continue() {
|
44
|
-
if (this.available > 0) {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
callback();
|
49
|
-
}
|
43
|
+
if (this.available > 0 && this.waiters.length > 0) {
|
44
|
+
this.available--;
|
45
|
+
const callback = /** @type {(function(): void)} */ (this.waiters.pop());
|
46
|
+
callback();
|
50
47
|
}
|
51
48
|
}
|
52
49
|
}
|
package/lib/util/SetHelpers.js
CHANGED
@@ -87,8 +87,8 @@ const combine = (a, b) => {
|
|
87
87
|
return set;
|
88
88
|
};
|
89
89
|
|
90
|
-
exports.intersect = intersect;
|
91
|
-
exports.isSubset = isSubset;
|
92
|
-
exports.find = find;
|
93
|
-
exports.first = first;
|
94
|
-
exports.combine = combine;
|
90
|
+
module.exports.intersect = intersect;
|
91
|
+
module.exports.isSubset = isSubset;
|
92
|
+
module.exports.find = find;
|
93
|
+
module.exports.first = first;
|
94
|
+
module.exports.combine = combine;
|
package/lib/util/SortableSet.js
CHANGED
@@ -15,15 +15,16 @@ const NONE = Symbol("not sorted");
|
|
15
15
|
class SortableSet extends Set {
|
16
16
|
/**
|
17
17
|
* Create a new sortable set
|
18
|
+
* @template T
|
18
19
|
* @param {Iterable<T>=} initialIterable The initial iterable value
|
19
20
|
* @typedef {function(T, T): number} SortFunction
|
20
|
-
* @param {SortFunction
|
21
|
+
* @param {SortFunction<T>=} defaultSort Default sorting function
|
21
22
|
*/
|
22
23
|
constructor(initialIterable, defaultSort) {
|
23
24
|
super(initialIterable);
|
24
25
|
/**
|
25
26
|
* @private
|
26
|
-
* @type {undefined |
|
27
|
+
* @type {undefined | SortFunction<T>}
|
27
28
|
*/
|
28
29
|
this._sortFn = defaultSort;
|
29
30
|
/**
|
@@ -76,7 +77,7 @@ class SortableSet extends Set {
|
|
76
77
|
|
77
78
|
/**
|
78
79
|
* Sort with a comparer function
|
79
|
-
* @param {SortFunction} sortFn Sorting comparer function
|
80
|
+
* @param {SortFunction<T> | undefined} sortFn Sorting comparer function
|
80
81
|
* @returns {void}
|
81
82
|
*/
|
82
83
|
sortWith(sortFn) {
|
@@ -6,9 +6,6 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
/**
|
9
|
-
* @template K
|
10
|
-
* @template V
|
11
|
-
*
|
12
9
|
* The StackedCacheMap is a data structure designed as an alternative to a Map
|
13
10
|
* in situations where you need to handle multiple item additions and
|
14
11
|
* frequently access the largest map.
|
@@ -19,7 +16,6 @@
|
|
19
16
|
* It has a fallback Map that is used when the map to be added is mutable.
|
20
17
|
*
|
21
18
|
* Note: `delete` and `has` are not supported for performance reasons.
|
22
|
-
*
|
23
19
|
* @example
|
24
20
|
* ```js
|
25
21
|
* const map = new StackedCacheMap();
|
@@ -31,6 +27,8 @@
|
|
31
27
|
* console.log(key, value);
|
32
28
|
* }
|
33
29
|
* ```
|
30
|
+
* @template K
|
31
|
+
* @template V
|
34
32
|
*/
|
35
33
|
class StackedCacheMap {
|
36
34
|
constructor() {
|
@@ -94,7 +92,7 @@ class StackedCacheMap {
|
|
94
92
|
|
95
93
|
/**
|
96
94
|
* @param {K} item the key of the element to return
|
97
|
-
* @returns {V} the value of the element
|
95
|
+
* @returns {V | undefined} the value of the element
|
98
96
|
*/
|
99
97
|
get(item) {
|
100
98
|
for (const map of this.stack) {
|
@@ -130,7 +128,7 @@ class StackedCacheMap {
|
|
130
128
|
next() {
|
131
129
|
let result = current.next();
|
132
130
|
while (result.done && iterators.length > 0) {
|
133
|
-
current = iterators.pop();
|
131
|
+
current = /** @type {IterableIterator<[K, V]>} */ (iterators.pop());
|
134
132
|
result = current.next();
|
135
133
|
}
|
136
134
|
return result;
|
package/lib/util/StackedMap.js
CHANGED
@@ -29,9 +29,8 @@ const extractPair = pair => {
|
|
29
29
|
const val = pair[1];
|
30
30
|
if (val === UNDEFINED_MARKER || val === TOMBSTONE) {
|
31
31
|
return [key, undefined];
|
32
|
-
} else {
|
33
|
-
return /** @type {[K, Cell<V>]} */ (pair);
|
34
32
|
}
|
33
|
+
return /** @type {[K, Cell<V>]} */ (pair);
|
35
34
|
};
|
36
35
|
|
37
36
|
/**
|
@@ -116,7 +115,6 @@ class StackedMap {
|
|
116
115
|
}
|
117
116
|
this.map.set(item, TOMBSTONE);
|
118
117
|
}
|
119
|
-
return undefined;
|
120
118
|
}
|
121
119
|
|
122
120
|
_compress() {
|
package/lib/util/StringXor.js
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
* to create a hash of the current state of the compilation. By XOR'ing the Module hashes, it
|
18
18
|
* doesn't matter if the Module hashes are sorted or not. This is useful because it allows us to avoid sorting the
|
19
19
|
* Module hashes.
|
20
|
-
*
|
21
20
|
* @example
|
22
21
|
* ```js
|
23
22
|
* const xor = new StringXor();
|
@@ -25,7 +24,6 @@
|
|
25
24
|
* xor.add('world');
|
26
25
|
* console.log(xor.toString());
|
27
26
|
* ```
|
28
|
-
*
|
29
27
|
* @example
|
30
28
|
* ```js
|
31
29
|
* const xor = new StringXor();
|
@@ -44,7 +42,6 @@ class StringXor {
|
|
44
42
|
|
45
43
|
/**
|
46
44
|
* Adds a string to the current StringXor object.
|
47
|
-
*
|
48
45
|
* @param {string} str string
|
49
46
|
* @returns {void}
|
50
47
|
*/
|
@@ -84,7 +81,6 @@ class StringXor {
|
|
84
81
|
* here because "latin1" encoding is a single-byte encoding that can represent all characters in the
|
85
82
|
* [ISO-8859-1 character set](https://en.wikipedia.org/wiki/ISO/IEC_8859-1). This is useful when working
|
86
83
|
* with binary data that needs to be represented as a string.
|
87
|
-
*
|
88
84
|
* @returns {string} Returns a string that represents the current state of the StringXor object.
|
89
85
|
*/
|
90
86
|
toString() {
|
@@ -94,7 +90,6 @@ class StringXor {
|
|
94
90
|
|
95
91
|
/**
|
96
92
|
* Updates the hash with the current state of the StringXor object.
|
97
|
-
*
|
98
93
|
* @param {Hash} hash Hash instance
|
99
94
|
*/
|
100
95
|
updateHash(hash) {
|
package/lib/util/TupleQueue.js
CHANGED
package/lib/util/TupleSet.js
CHANGED
@@ -9,7 +9,11 @@
|
|
9
9
|
* @template {any[]} T
|
10
10
|
*/
|
11
11
|
class TupleSet {
|
12
|
+
/**
|
13
|
+
* @param {Iterable<T>=} init init
|
14
|
+
*/
|
12
15
|
constructor(init) {
|
16
|
+
/** @type {Map<T, TODO>} */
|
13
17
|
this._map = new Map();
|
14
18
|
this.size = 0;
|
15
19
|
if (init) {
|
@@ -62,7 +66,7 @@ class TupleSet {
|
|
62
66
|
}
|
63
67
|
|
64
68
|
const beforeLast = args[args.length - 2];
|
65
|
-
|
69
|
+
const set = map.get(beforeLast);
|
66
70
|
if (set === undefined) {
|
67
71
|
return false;
|
68
72
|
}
|
@@ -86,7 +90,7 @@ class TupleSet {
|
|
86
90
|
}
|
87
91
|
|
88
92
|
const beforeLast = args[args.length - 2];
|
89
|
-
|
93
|
+
const set = map.get(beforeLast);
|
90
94
|
if (set === undefined) {
|
91
95
|
return;
|
92
96
|
}
|
@@ -101,10 +105,17 @@ class TupleSet {
|
|
101
105
|
* @returns {Iterator<T>} iterator
|
102
106
|
*/
|
103
107
|
[Symbol.iterator]() {
|
108
|
+
/** @type {TODO[]} */
|
104
109
|
const iteratorStack = [];
|
110
|
+
/** @type {T[]} */
|
105
111
|
const tuple = [];
|
106
|
-
|
112
|
+
/** @type {Iterator<T> | undefined} */
|
113
|
+
let currentSetIterator;
|
107
114
|
|
115
|
+
/**
|
116
|
+
* @param {TODO} it iterator
|
117
|
+
* @returns {boolean} result
|
118
|
+
*/
|
108
119
|
const next = it => {
|
109
120
|
const result = it.next();
|
110
121
|
if (result.done) {
|
@@ -118,9 +129,8 @@ class TupleSet {
|
|
118
129
|
if (value instanceof Set) {
|
119
130
|
currentSetIterator = value[Symbol.iterator]();
|
120
131
|
return true;
|
121
|
-
} else {
|
122
|
-
return next(value[Symbol.iterator]());
|
123
132
|
}
|
133
|
+
return next(value[Symbol.iterator]());
|
124
134
|
};
|
125
135
|
|
126
136
|
next(this._map[Symbol.iterator]());
|
@@ -36,7 +36,7 @@ function getScheme(specifier) {
|
|
36
36
|
(start < aLowerCaseCharCode || start > zLowerCaseCharCode) &&
|
37
37
|
(start < aUpperCaseCharCode || start > zUpperCaseCharCode)
|
38
38
|
) {
|
39
|
-
return
|
39
|
+
return;
|
40
40
|
}
|
41
41
|
|
42
42
|
let i = 1;
|
@@ -49,12 +49,12 @@ function getScheme(specifier) {
|
|
49
49
|
ch === plusCharCode ||
|
50
50
|
ch === hyphenCharCode
|
51
51
|
) {
|
52
|
-
if (++i === specifier.length) return
|
52
|
+
if (++i === specifier.length) return;
|
53
53
|
ch = specifier.charCodeAt(i);
|
54
54
|
}
|
55
55
|
|
56
56
|
// Scheme must end with colon
|
57
|
-
if (ch !== colonCharCode) return
|
57
|
+
if (ch !== colonCharCode) return;
|
58
58
|
|
59
59
|
// Check for Windows absolute path
|
60
60
|
// https://url.spec.whatwg.org/#url-miscellaneous
|
@@ -67,7 +67,7 @@ function getScheme(specifier) {
|
|
67
67
|
nextChar === hashCharCode ||
|
68
68
|
nextChar === queryCharCode
|
69
69
|
) {
|
70
|
-
return
|
70
|
+
return;
|
71
71
|
}
|
72
72
|
}
|
73
73
|
|
@@ -80,8 +80,8 @@ function getScheme(specifier) {
|
|
80
80
|
*/
|
81
81
|
function getProtocol(specifier) {
|
82
82
|
const scheme = getScheme(specifier);
|
83
|
-
return scheme === undefined ? undefined : scheme
|
83
|
+
return scheme === undefined ? undefined : `${scheme}:`;
|
84
84
|
}
|
85
85
|
|
86
|
-
exports.getScheme = getScheme;
|
87
|
-
exports.getProtocol = getProtocol;
|
86
|
+
module.exports.getScheme = getScheme;
|
87
|
+
module.exports.getProtocol = getProtocol;
|