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/identifier.js
CHANGED
@@ -85,24 +85,48 @@ const requestToAbsolute = (context, relativePath) => {
|
|
85
85
|
return relativePath;
|
86
86
|
};
|
87
87
|
|
88
|
+
/**
|
89
|
+
* @template T
|
90
|
+
* @typedef {function(string, object=): T} MakeCacheableResult
|
91
|
+
*/
|
92
|
+
|
93
|
+
/**
|
94
|
+
* @template T
|
95
|
+
* @typedef {function(string): T} BindCacheResultFn
|
96
|
+
*/
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @template T
|
100
|
+
* @typedef {function(object): BindCacheResultFn<T>} BindCache
|
101
|
+
*/
|
102
|
+
|
103
|
+
/**
|
104
|
+
* @template T
|
105
|
+
* @param {(function(string): T)} realFn real function
|
106
|
+
* @returns {MakeCacheableResult<T> & { bindCache: BindCache<T> }} cacheable function
|
107
|
+
*/
|
88
108
|
const makeCacheable = realFn => {
|
89
|
-
/**
|
109
|
+
/**
|
110
|
+
* @template T
|
111
|
+
* @typedef {Map<string, T>} CacheItem
|
112
|
+
*/
|
113
|
+
/** @type {WeakMap<object, CacheItem<T>>} */
|
90
114
|
const cache = new WeakMap();
|
91
115
|
|
116
|
+
/**
|
117
|
+
* @param {object} associatedObjectForCache an object to which the cache will be attached
|
118
|
+
* @returns {CacheItem<T>} cache item
|
119
|
+
*/
|
92
120
|
const getCache = associatedObjectForCache => {
|
93
121
|
const entry = cache.get(associatedObjectForCache);
|
94
122
|
if (entry !== undefined) return entry;
|
95
|
-
/** @type {Map<string,
|
123
|
+
/** @type {Map<string, T>} */
|
96
124
|
const map = new Map();
|
97
125
|
cache.set(associatedObjectForCache, map);
|
98
126
|
return map;
|
99
127
|
};
|
100
128
|
|
101
|
-
/**
|
102
|
-
* @param {string} str the path with query and fragment
|
103
|
-
* @param {object=} associatedObjectForCache an object to which the cache will be attached
|
104
|
-
* @returns {ParsedResource} parsed parts
|
105
|
-
*/
|
129
|
+
/** @type {MakeCacheableResult<T> & { bindCache: BindCache<T> }} */
|
106
130
|
const fn = (str, associatedObjectForCache) => {
|
107
131
|
if (!associatedObjectForCache) return realFn(str);
|
108
132
|
const cache = getCache(associatedObjectForCache);
|
@@ -113,8 +137,13 @@ const makeCacheable = realFn => {
|
|
113
137
|
return result;
|
114
138
|
};
|
115
139
|
|
140
|
+
/** @type {BindCache<T>} */
|
116
141
|
fn.bindCache = associatedObjectForCache => {
|
117
142
|
const cache = getCache(associatedObjectForCache);
|
143
|
+
/**
|
144
|
+
* @param {string} str string
|
145
|
+
* @returns {T} value
|
146
|
+
*/
|
118
147
|
return str => {
|
119
148
|
const entry = cache.get(str);
|
120
149
|
if (entry !== undefined) return entry;
|
@@ -127,16 +156,21 @@ const makeCacheable = realFn => {
|
|
127
156
|
return fn;
|
128
157
|
};
|
129
158
|
|
159
|
+
/** @typedef {function(string, string, object=): string} MakeCacheableWithContextResult */
|
160
|
+
/** @typedef {function(string, string): string} BindCacheForContextResultFn */
|
161
|
+
/** @typedef {function(string): string} BindContextCacheForContextResultFn */
|
162
|
+
/** @typedef {function(object=): BindCacheForContextResultFn} BindCacheForContext */
|
163
|
+
/** @typedef {function(string, object=): BindContextCacheForContextResultFn} BindContextCacheForContext */
|
164
|
+
|
165
|
+
/**
|
166
|
+
* @param {function(string, string): string} fn function
|
167
|
+
* @returns {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} cacheable function with context
|
168
|
+
*/
|
130
169
|
const makeCacheableWithContext = fn => {
|
131
170
|
/** @type {WeakMap<object, Map<string, Map<string, string>>>} */
|
132
171
|
const cache = new WeakMap();
|
133
172
|
|
134
|
-
/**
|
135
|
-
* @param {string} context context used to create relative path
|
136
|
-
* @param {string} identifier identifier used to create relative path
|
137
|
-
* @param {object=} associatedObjectForCache an object to which the cache will be attached
|
138
|
-
* @returns {string} the returned relative path
|
139
|
-
*/
|
173
|
+
/** @type {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} */
|
140
174
|
const cachedFn = (context, identifier, associatedObjectForCache) => {
|
141
175
|
if (!associatedObjectForCache) return fn(context, identifier);
|
142
176
|
|
@@ -156,17 +190,13 @@ const makeCacheableWithContext = fn => {
|
|
156
190
|
|
157
191
|
if (cachedResult !== undefined) {
|
158
192
|
return cachedResult;
|
159
|
-
} else {
|
160
|
-
const result = fn(context, identifier);
|
161
|
-
innerSubCache.set(identifier, result);
|
162
|
-
return result;
|
163
193
|
}
|
194
|
+
const result = fn(context, identifier);
|
195
|
+
innerSubCache.set(identifier, result);
|
196
|
+
return result;
|
164
197
|
};
|
165
198
|
|
166
|
-
/**
|
167
|
-
* @param {object=} associatedObjectForCache an object to which the cache will be attached
|
168
|
-
* @returns {function(string, string): string} cached function
|
169
|
-
*/
|
199
|
+
/** @type {BindCacheForContext} */
|
170
200
|
cachedFn.bindCache = associatedObjectForCache => {
|
171
201
|
let innerCache;
|
172
202
|
if (associatedObjectForCache) {
|
@@ -195,21 +225,16 @@ const makeCacheableWithContext = fn => {
|
|
195
225
|
|
196
226
|
if (cachedResult !== undefined) {
|
197
227
|
return cachedResult;
|
198
|
-
} else {
|
199
|
-
const result = fn(context, identifier);
|
200
|
-
innerSubCache.set(identifier, result);
|
201
|
-
return result;
|
202
228
|
}
|
229
|
+
const result = fn(context, identifier);
|
230
|
+
innerSubCache.set(identifier, result);
|
231
|
+
return result;
|
203
232
|
};
|
204
233
|
|
205
234
|
return boundFn;
|
206
235
|
};
|
207
236
|
|
208
|
-
/**
|
209
|
-
* @param {string} context context used to create relative path
|
210
|
-
* @param {object=} associatedObjectForCache an object to which the cache will be attached
|
211
|
-
* @returns {function(string): string} cached function
|
212
|
-
*/
|
237
|
+
/** @type {BindContextCacheForContext} */
|
213
238
|
cachedFn.bindContextCache = (context, associatedObjectForCache) => {
|
214
239
|
let innerSubCache;
|
215
240
|
if (associatedObjectForCache) {
|
@@ -235,11 +260,10 @@ const makeCacheableWithContext = fn => {
|
|
235
260
|
const cachedResult = innerSubCache.get(identifier);
|
236
261
|
if (cachedResult !== undefined) {
|
237
262
|
return cachedResult;
|
238
|
-
} else {
|
239
|
-
const result = fn(context, identifier);
|
240
|
-
innerSubCache.set(identifier, result);
|
241
|
-
return result;
|
242
263
|
}
|
264
|
+
const result = fn(context, identifier);
|
265
|
+
innerSubCache.set(identifier, result);
|
266
|
+
return result;
|
243
267
|
};
|
244
268
|
|
245
269
|
return boundFn;
|
@@ -249,64 +273,58 @@ const makeCacheableWithContext = fn => {
|
|
249
273
|
};
|
250
274
|
|
251
275
|
/**
|
252
|
-
*
|
253
276
|
* @param {string} context context for relative path
|
254
277
|
* @param {string} identifier identifier for path
|
255
278
|
* @returns {string} a converted relative path
|
256
279
|
*/
|
257
|
-
const _makePathsRelative = (context, identifier) =>
|
258
|
-
|
280
|
+
const _makePathsRelative = (context, identifier) =>
|
281
|
+
identifier
|
259
282
|
.split(SEGMENTS_SPLIT_REGEXP)
|
260
283
|
.map(str => absoluteToRequest(context, str))
|
261
284
|
.join("");
|
262
|
-
};
|
263
285
|
|
264
|
-
exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
|
286
|
+
module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
|
265
287
|
|
266
288
|
/**
|
267
|
-
*
|
268
289
|
* @param {string} context context for relative path
|
269
290
|
* @param {string} identifier identifier for path
|
270
291
|
* @returns {string} a converted relative path
|
271
292
|
*/
|
272
|
-
const _makePathsAbsolute = (context, identifier) =>
|
273
|
-
|
293
|
+
const _makePathsAbsolute = (context, identifier) =>
|
294
|
+
identifier
|
274
295
|
.split(SEGMENTS_SPLIT_REGEXP)
|
275
296
|
.map(str => requestToAbsolute(context, str))
|
276
297
|
.join("");
|
277
|
-
};
|
278
298
|
|
279
|
-
exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
|
299
|
+
module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
|
280
300
|
|
281
301
|
/**
|
282
302
|
* @param {string} context absolute context path
|
283
303
|
* @param {string} request any request string may containing absolute paths, query string, etc.
|
284
304
|
* @returns {string} a new request string avoiding absolute paths when possible
|
285
305
|
*/
|
286
|
-
const _contextify = (context, request) =>
|
287
|
-
|
306
|
+
const _contextify = (context, request) =>
|
307
|
+
request
|
288
308
|
.split("!")
|
289
309
|
.map(r => absoluteToRequest(context, r))
|
290
310
|
.join("!");
|
291
|
-
};
|
292
311
|
|
293
312
|
const contextify = makeCacheableWithContext(_contextify);
|
294
|
-
exports.contextify = contextify;
|
313
|
+
module.exports.contextify = contextify;
|
295
314
|
|
296
315
|
/**
|
297
316
|
* @param {string} context absolute context path
|
298
317
|
* @param {string} request any request string
|
299
318
|
* @returns {string} a new request string using absolute paths when possible
|
300
319
|
*/
|
301
|
-
const _absolutify = (context, request) =>
|
302
|
-
|
320
|
+
const _absolutify = (context, request) =>
|
321
|
+
request
|
303
322
|
.split("!")
|
304
323
|
.map(r => requestToAbsolute(context, r))
|
305
324
|
.join("!");
|
306
|
-
};
|
307
325
|
|
308
326
|
const absolutify = makeCacheableWithContext(_absolutify);
|
309
|
-
exports.absolutify = absolutify;
|
327
|
+
module.exports.absolutify = absolutify;
|
310
328
|
|
311
329
|
const PATH_QUERY_FRAGMENT_REGEXP =
|
312
330
|
/^((?:\0.|[^?#\0])*)(\?(?:\0.|[^#\0])*)?(#.*)?$/;
|
@@ -320,7 +338,9 @@ const PATH_QUERY_REGEXP = /^((?:\0.|[^?\0])*)(\?.*)?$/;
|
|
320
338
|
* @returns {ParsedResource} parsed parts
|
321
339
|
*/
|
322
340
|
const _parseResource = str => {
|
323
|
-
const match =
|
341
|
+
const match =
|
342
|
+
/** @type {[string, string, string | undefined, string | undefined]} */
|
343
|
+
(/** @type {unknown} */ (PATH_QUERY_FRAGMENT_REGEXP.exec(str)));
|
324
344
|
return {
|
325
345
|
resource: str,
|
326
346
|
path: match[1].replace(/\0(.)/g, "$1"),
|
@@ -328,7 +348,7 @@ const _parseResource = str => {
|
|
328
348
|
fragment: match[3] || ""
|
329
349
|
};
|
330
350
|
};
|
331
|
-
exports.parseResource = makeCacheable(_parseResource);
|
351
|
+
module.exports.parseResource = makeCacheable(_parseResource);
|
332
352
|
|
333
353
|
/**
|
334
354
|
* Parse resource, skips fragment part
|
@@ -336,14 +356,16 @@ exports.parseResource = makeCacheable(_parseResource);
|
|
336
356
|
* @returns {ParsedResourceWithoutFragment} parsed parts
|
337
357
|
*/
|
338
358
|
const _parseResourceWithoutFragment = str => {
|
339
|
-
const match =
|
359
|
+
const match =
|
360
|
+
/** @type {[string, string, string | undefined]} */
|
361
|
+
(/** @type {unknown} */ (PATH_QUERY_REGEXP.exec(str)));
|
340
362
|
return {
|
341
363
|
resource: str,
|
342
364
|
path: match[1].replace(/\0(.)/g, "$1"),
|
343
365
|
query: match[2] ? match[2].replace(/\0(.)/g, "$1") : ""
|
344
366
|
};
|
345
367
|
};
|
346
|
-
exports.parseResourceWithoutFragment = makeCacheable(
|
368
|
+
module.exports.parseResourceWithoutFragment = makeCacheable(
|
347
369
|
_parseResourceWithoutFragment
|
348
370
|
);
|
349
371
|
|
@@ -353,7 +375,7 @@ exports.parseResourceWithoutFragment = makeCacheable(
|
|
353
375
|
* @param {boolean} enforceRelative true returns ./ for empty paths
|
354
376
|
* @returns {string} repeated ../ to leave the directory of the provided filename to be back on output dir
|
355
377
|
*/
|
356
|
-
exports.getUndoPath = (filename, outputPath, enforceRelative) => {
|
378
|
+
module.exports.getUndoPath = (filename, outputPath, enforceRelative) => {
|
357
379
|
let depth = -1;
|
358
380
|
let append = "";
|
359
381
|
outputPath = outputPath.replace(/[\\/]$/, "");
|
@@ -365,8 +387,8 @@ exports.getUndoPath = (filename, outputPath, enforceRelative) => {
|
|
365
387
|
const i = outputPath.lastIndexOf("/");
|
366
388
|
const j = outputPath.lastIndexOf("\\");
|
367
389
|
const pos = i < 0 ? j : j < 0 ? i : Math.max(i, j);
|
368
|
-
if (pos < 0) return outputPath
|
369
|
-
append = outputPath.slice(pos + 1)
|
390
|
+
if (pos < 0) return `${outputPath}/`;
|
391
|
+
append = `${outputPath.slice(pos + 1)}/${append}`;
|
370
392
|
outputPath = outputPath.slice(0, pos);
|
371
393
|
}
|
372
394
|
} else if (part !== ".") {
|
package/lib/util/memoize.js
CHANGED
@@ -14,20 +14,18 @@
|
|
14
14
|
const memoize = fn => {
|
15
15
|
let cache = false;
|
16
16
|
/** @type {T | undefined} */
|
17
|
-
let result
|
17
|
+
let result;
|
18
18
|
return () => {
|
19
19
|
if (cache) {
|
20
20
|
return /** @type {T} */ (result);
|
21
|
-
} else {
|
22
|
-
result = fn();
|
23
|
-
cache = true;
|
24
|
-
// Allow to clean up memory for fn
|
25
|
-
// and all dependent resources
|
26
|
-
// eslint-disable-next-line no-warning-comments
|
27
|
-
// @ts-ignore
|
28
|
-
fn = undefined;
|
29
|
-
return /** @type {T} */ (result);
|
30
21
|
}
|
22
|
+
|
23
|
+
result = fn();
|
24
|
+
cache = true;
|
25
|
+
// Allow to clean up memory for fn
|
26
|
+
// and all dependent resources
|
27
|
+
fn = undefined;
|
28
|
+
return /** @type {T} */ (result);
|
31
29
|
};
|
32
30
|
};
|
33
31
|
|
package/lib/util/mergeScope.js
CHANGED
@@ -42,18 +42,15 @@ const getPathInAst = (ast, node) => {
|
|
42
42
|
const nr = node.range;
|
43
43
|
|
44
44
|
const enterNode = n => {
|
45
|
-
if (!n) return
|
45
|
+
if (!n) return;
|
46
46
|
const r = n.range;
|
47
|
-
if (r) {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
return path;
|
53
|
-
}
|
47
|
+
if (r && r[0] <= nr[0] && r[1] >= nr[1]) {
|
48
|
+
const path = getPathInAst(n, node);
|
49
|
+
if (path) {
|
50
|
+
path.push(n);
|
51
|
+
return path;
|
54
52
|
}
|
55
53
|
}
|
56
|
-
return undefined;
|
57
54
|
};
|
58
55
|
|
59
56
|
if (Array.isArray(ast)) {
|
@@ -15,8 +15,8 @@ const A_CODE = "a".charCodeAt(0);
|
|
15
15
|
module.exports = (hash, hashLength) => {
|
16
16
|
if (hashLength < 1) return "";
|
17
17
|
const slice = hash.slice(0, hashLength);
|
18
|
-
if (
|
18
|
+
if (/[^\d]/.test(slice)) return slice;
|
19
19
|
return `${String.fromCharCode(
|
20
|
-
A_CODE + (parseInt(hash[0], 10) % 6)
|
20
|
+
A_CODE + (Number.parseInt(hash[0], 10) % 6)
|
21
21
|
)}${slice.slice(1)}`;
|
22
22
|
};
|
package/lib/util/numberHash.js
CHANGED
@@ -77,24 +77,19 @@ function fnv1a64(str) {
|
|
77
77
|
*
|
78
78
|
* We use `numberHash` in `lib/ids/IdHelpers.js` to generate hash values for the module identifier. The generated
|
79
79
|
* hash is used as a prefix for the module id's to avoid collisions with other modules.
|
80
|
-
*
|
81
80
|
* @param {string} str The input string to hash.
|
82
81
|
* @param {number} range The range of the hash value (0 to range-1).
|
83
82
|
* @returns {number} - The computed hash value.
|
84
|
-
*
|
85
83
|
* @example
|
86
|
-
*
|
87
84
|
* ```js
|
88
85
|
* const numberHash = require("webpack/lib/util/numberHash");
|
89
86
|
* numberHash("hello", 1000); // 73
|
90
87
|
* numberHash("hello world"); // 72
|
91
88
|
* ```
|
92
|
-
*
|
93
89
|
*/
|
94
90
|
module.exports = (str, range) => {
|
95
91
|
if (range < FNV_64_THRESHOLD) {
|
96
92
|
return fnv1a32(str) % range;
|
97
|
-
} else {
|
98
|
-
return Number(fnv1a64(str) % BigInt(range));
|
99
93
|
}
|
94
|
+
return Number(fnv1a64(str) % BigInt(range));
|
100
95
|
};
|
package/lib/util/objectToMap.js
CHANGED
@@ -5,10 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
-
const {
|
9
|
-
SAFE_IDENTIFIER,
|
10
|
-
RESERVED_IDENTIFIER
|
11
|
-
} = require("../util/propertyName");
|
8
|
+
const { SAFE_IDENTIFIER, RESERVED_IDENTIFIER } = require("./propertyName");
|
12
9
|
|
13
10
|
/**
|
14
11
|
* @param {ArrayLike<string>} properties properties
|
@@ -19,7 +16,7 @@ const propertyAccess = (properties, start = 0) => {
|
|
19
16
|
let str = "";
|
20
17
|
for (let i = start; i < properties.length; i++) {
|
21
18
|
const p = properties[i];
|
22
|
-
if (`${
|
19
|
+
if (`${Number(p)}` === p) {
|
23
20
|
str += `[${p}]`;
|
24
21
|
} else if (SAFE_IDENTIFIER.test(p) && !RESERVED_IDENTIFIER.has(p)) {
|
25
22
|
str += `.${p}`;
|
package/lib/util/propertyName.js
CHANGED
@@ -64,16 +64,14 @@ const RESERVED_IDENTIFIER = new Set([
|
|
64
64
|
* @summary Returns a valid JS property name for the given property.
|
65
65
|
* Certain strings like "default", "null", and names with whitespace are not
|
66
66
|
* valid JS property names, so they are returned as strings.
|
67
|
-
*
|
68
67
|
* @param {string} prop property name to analyze
|
69
68
|
* @returns {string} valid JS property name
|
70
69
|
*/
|
71
70
|
const propertyName = prop => {
|
72
71
|
if (SAFE_IDENTIFIER.test(prop) && !RESERVED_IDENTIFIER.has(prop)) {
|
73
72
|
return prop;
|
74
|
-
} else {
|
75
|
-
return JSON.stringify(prop);
|
76
73
|
}
|
74
|
+
return JSON.stringify(prop);
|
77
75
|
};
|
78
76
|
|
79
77
|
module.exports = { SAFE_IDENTIFIER, RESERVED_IDENTIFIER, propertyName };
|
@@ -9,7 +9,7 @@ const { register } = require("./serialization");
|
|
9
9
|
|
10
10
|
const Position = /** @type {TODO} */ (require("acorn")).Position;
|
11
11
|
const SourceLocation = require("acorn").SourceLocation;
|
12
|
-
const ValidationError = require("schema-utils
|
12
|
+
const ValidationError = require("schema-utils").ValidationError;
|
13
13
|
const {
|
14
14
|
CachedSource,
|
15
15
|
ConcatSource,
|