webpack 5.93.0 → 5.95.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 +33 -20
- package/lib/ContextModuleFactory.js +89 -44
- package/lib/ContextReplacementPlugin.js +10 -9
- package/lib/DefinePlugin.js +75 -68
- 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 +6 -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 +41 -15
- 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 +130 -69
- 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 +21 -13
- package/lib/WarnDeprecatedOptionPlugin.js +0 -1
- package/lib/WatchIgnorePlugin.js +26 -9
- package/lib/Watching.js +10 -5
- package/lib/WebpackOptionsApply.js +84 -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 +93 -81
- 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 +32 -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 +26 -24
- package/lib/css/CssGenerator.js +9 -4
- 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 +7 -2
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +35 -8
- package/lib/dependencies/CriticalDependencyWarning.js +1 -1
- package/lib/dependencies/CssExportDependency.js +7 -7
- package/lib/dependencies/CssImportDependency.js +0 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
- 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 +40 -15
- 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 +3 -3
- 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 +5 -4
- package/lib/javascript/BasicEvaluatedExpression.js +4 -19
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
- package/lib/javascript/JavascriptGenerator.js +23 -7
- package/lib/javascript/JavascriptModulesPlugin.js +133 -86
- 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 +8 -10
- package/lib/library/EnableLibraryPlugin.js +15 -14
- package/lib/library/JsonpLibraryPlugin.js +2 -1
- package/lib/library/ModernModuleLibraryPlugin.js +8 -6
- 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 +81 -51
- 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/MergeDuplicateChunksPlugin.js +2 -2
- package/lib/optimize/MinMaxSizeWarning.js +1 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +54 -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/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/ConsumeSharedPlugin.js +116 -97
- package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
- 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 +13 -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 +8 -11
- 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 +32 -32
- 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 +109 -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 +18 -17
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +5 -0
- 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 +681 -355
@@ -22,8 +22,14 @@ const { join } = require("./util/fs");
|
|
22
22
|
/** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
|
23
23
|
/** @typedef {import("./ResolverFactory")} ResolverFactory */
|
24
24
|
/** @typedef {import("./dependencies/ContextDependency")} ContextDependency */
|
25
|
-
/** @
|
25
|
+
/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
|
26
|
+
/**
|
27
|
+
* @template T
|
28
|
+
* @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T>
|
29
|
+
*/
|
30
|
+
/** @typedef {import("./util/fs").IStats} IStats */
|
26
31
|
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
|
32
|
+
/** @typedef {{ context: string, request: string }} ContextAlternativeRequest */
|
27
33
|
|
28
34
|
const EMPTY_RESOLVE_OPTIONS = {};
|
29
35
|
|
@@ -33,7 +39,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
33
39
|
*/
|
34
40
|
constructor(resolverFactory) {
|
35
41
|
super();
|
36
|
-
/** @type {AsyncSeriesWaterfallHook<[
|
42
|
+
/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[], ContextModuleOptions]>} */
|
37
43
|
const alternativeRequests = new AsyncSeriesWaterfallHook([
|
38
44
|
"modules",
|
39
45
|
"options"
|
@@ -45,27 +51,27 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
45
51
|
afterResolve: new AsyncSeriesWaterfallHook(["data"]),
|
46
52
|
/** @type {SyncWaterfallHook<[string[]]>} */
|
47
53
|
contextModuleFiles: new SyncWaterfallHook(["files"]),
|
48
|
-
/** @type {FakeHook<Pick<AsyncSeriesWaterfallHook<[
|
54
|
+
/** @type {FakeHook<Pick<AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>, "tap" | "tapAsync" | "tapPromise" | "name">>} */
|
49
55
|
alternatives: createFakeHook(
|
50
56
|
{
|
51
57
|
name: "alternatives",
|
52
|
-
/** @type {AsyncSeriesWaterfallHook<[
|
58
|
+
/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["intercept"]} */
|
53
59
|
intercept: interceptor => {
|
54
60
|
throw new Error(
|
55
61
|
"Intercepting fake hook ContextModuleFactory.hooks.alternatives is not possible, use ContextModuleFactory.hooks.alternativeRequests instead"
|
56
62
|
);
|
57
63
|
},
|
58
|
-
/** @type {AsyncSeriesWaterfallHook<[
|
64
|
+
/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tap"]} */
|
59
65
|
tap: (options, fn) => {
|
60
66
|
alternativeRequests.tap(options, fn);
|
61
67
|
},
|
62
|
-
/** @type {AsyncSeriesWaterfallHook<[
|
68
|
+
/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapAsync"]} */
|
63
69
|
tapAsync: (options, fn) => {
|
64
70
|
alternativeRequests.tapAsync(options, (items, _options, callback) =>
|
65
71
|
fn(items, callback)
|
66
72
|
);
|
67
73
|
},
|
68
|
-
/** @type {AsyncSeriesWaterfallHook<[
|
74
|
+
/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapPromise"]} */
|
69
75
|
tapPromise: (options, fn) => {
|
70
76
|
alternativeRequests.tapPromise(options, fn);
|
71
77
|
}
|
@@ -93,8 +99,8 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
93
99
|
const contextDependencies = new LazySet();
|
94
100
|
this.hooks.beforeResolve.callAsync(
|
95
101
|
{
|
96
|
-
context
|
97
|
-
dependencies
|
102
|
+
context,
|
103
|
+
dependencies,
|
98
104
|
layer: data.contextInfo.issuerLayer,
|
99
105
|
resolveOptions,
|
100
106
|
fileDependencies,
|
@@ -124,9 +130,9 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
124
130
|
const request = beforeResolveResult.request;
|
125
131
|
const resolveOptions = beforeResolveResult.resolveOptions;
|
126
132
|
|
127
|
-
let loaders
|
128
|
-
|
129
|
-
|
133
|
+
let loaders;
|
134
|
+
let resource;
|
135
|
+
let loadersPrefix = "";
|
130
136
|
const idx = request.lastIndexOf("!");
|
131
137
|
if (idx >= 0) {
|
132
138
|
let loadersRequest = request.slice(0, idx + 1);
|
@@ -142,11 +148,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
142
148
|
.slice(i)
|
143
149
|
.replace(/!+$/, "")
|
144
150
|
.replace(/!!+/g, "!");
|
145
|
-
|
146
|
-
loaders = [];
|
147
|
-
} else {
|
148
|
-
loaders = loadersRequest.split("!");
|
149
|
-
}
|
151
|
+
loaders = loadersRequest === "" ? [] : loadersRequest.split("!");
|
150
152
|
resource = request.slice(idx + 1);
|
151
153
|
} else {
|
152
154
|
loaders = [];
|
@@ -168,8 +170,14 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
168
170
|
asyncLib.parallel(
|
169
171
|
[
|
170
172
|
callback => {
|
171
|
-
const results = [];
|
172
|
-
|
173
|
+
const results = /** @type ResolveRequest[] */ ([]);
|
174
|
+
/**
|
175
|
+
* @param {ResolveRequest} obj obj
|
176
|
+
* @returns {void}
|
177
|
+
*/
|
178
|
+
const yield_ = obj => {
|
179
|
+
results.push(obj);
|
180
|
+
};
|
173
181
|
|
174
182
|
contextResolver.resolve(
|
175
183
|
{},
|
@@ -202,7 +210,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
202
210
|
},
|
203
211
|
(err, result) => {
|
204
212
|
if (err) return callback(err);
|
205
|
-
callback(null, result);
|
213
|
+
callback(null, /** @type {string} */ (result));
|
206
214
|
}
|
207
215
|
);
|
208
216
|
},
|
@@ -218,7 +226,8 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
218
226
|
contextDependencies
|
219
227
|
});
|
220
228
|
}
|
221
|
-
let [contextResult, loaderResult] =
|
229
|
+
let [contextResult, loaderResult] =
|
230
|
+
/** @type {[ResolveRequest[], string[]]} */ (result);
|
222
231
|
if (contextResult.length > 1) {
|
223
232
|
const first = contextResult[0];
|
224
233
|
contextResult = contextResult.filter(r => r.path);
|
@@ -294,10 +303,19 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
294
303
|
} = options;
|
295
304
|
if (!regExp || !resource) return callback(null, []);
|
296
305
|
|
306
|
+
/**
|
307
|
+
* @param {string} ctx context
|
308
|
+
* @param {string} directory directory
|
309
|
+
* @param {Set<string>} visited visited
|
310
|
+
* @param {ResolveDependenciesCallback} callback callback
|
311
|
+
*/
|
297
312
|
const addDirectoryChecked = (ctx, directory, visited, callback) => {
|
298
|
-
|
313
|
+
/** @type {NonNullable<InputFileSystem["realpath"]>} */
|
314
|
+
(fs.realpath)(directory, (err, _realPath) => {
|
299
315
|
if (err) return callback(err);
|
316
|
+
const realPath = /** @type {string} */ (_realPath);
|
300
317
|
if (visited.has(realPath)) return callback(null, []);
|
318
|
+
/** @type {Set<string> | undefined} */
|
301
319
|
let recursionStack;
|
302
320
|
addDirectory(
|
303
321
|
ctx,
|
@@ -314,6 +332,12 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
314
332
|
});
|
315
333
|
};
|
316
334
|
|
335
|
+
/**
|
336
|
+
* @param {string} ctx context
|
337
|
+
* @param {string} directory directory
|
338
|
+
* @param {function(string, string, function(): void): void} addSubDirectory addSubDirectoryFn
|
339
|
+
* @param {ResolveDependenciesCallback} callback callback
|
340
|
+
*/
|
317
341
|
const addDirectory = (ctx, directory, addSubDirectory, callback) => {
|
318
342
|
fs.readdir(directory, (err, files) => {
|
319
343
|
if (err) return callback(err);
|
@@ -328,17 +352,18 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
328
352
|
const subResource = join(fs, directory, segment);
|
329
353
|
|
330
354
|
if (!exclude || !subResource.match(exclude)) {
|
331
|
-
fs.stat(subResource, (err,
|
355
|
+
fs.stat(subResource, (err, _stat) => {
|
332
356
|
if (err) {
|
333
357
|
if (err.code === "ENOENT") {
|
334
358
|
// ENOENT is ok here because the file may have been deleted between
|
335
359
|
// the readdir and stat calls.
|
336
360
|
return callback();
|
337
|
-
} else {
|
338
|
-
return callback(err);
|
339
361
|
}
|
362
|
+
return callback(err);
|
340
363
|
}
|
341
364
|
|
365
|
+
const stat = /** @type {IStats} */ (_stat);
|
366
|
+
|
342
367
|
if (stat.isDirectory()) {
|
343
368
|
if (!recursive) return callback();
|
344
369
|
addSubDirectory(ctx, subResource, callback);
|
@@ -346,10 +371,10 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
346
371
|
stat.isFile() &&
|
347
372
|
(!include || subResource.match(include))
|
348
373
|
) {
|
374
|
+
/** @type {{ context: string, request: string }} */
|
349
375
|
const obj = {
|
350
376
|
context: ctx,
|
351
|
-
request:
|
352
|
-
"." + subResource.slice(ctx.length).replace(/\\/g, "/")
|
377
|
+
request: `.${subResource.slice(ctx.length).replace(/\\/g, "/")}`
|
353
378
|
};
|
354
379
|
|
355
380
|
this.hooks.alternativeRequests.callAsync(
|
@@ -357,22 +382,29 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
357
382
|
options,
|
358
383
|
(err, alternatives) => {
|
359
384
|
if (err) return callback(err);
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
obj.request
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
385
|
+
callback(
|
386
|
+
null,
|
387
|
+
/** @type {ContextAlternativeRequest[]} */
|
388
|
+
(alternatives)
|
389
|
+
.filter(obj =>
|
390
|
+
regExp.test(/** @type {string} */ (obj.request))
|
391
|
+
)
|
392
|
+
.map(obj => {
|
393
|
+
const dep = new ContextElementDependency(
|
394
|
+
`${obj.request}${resourceQuery}${resourceFragment}`,
|
395
|
+
obj.request,
|
396
|
+
typePrefix,
|
397
|
+
/** @type {string} */
|
398
|
+
(category),
|
399
|
+
referencedExports,
|
400
|
+
/** @type {TODO} */
|
401
|
+
(obj.context),
|
402
|
+
attributes
|
403
|
+
);
|
404
|
+
dep.optional = true;
|
405
|
+
return dep;
|
406
|
+
})
|
407
|
+
);
|
376
408
|
}
|
377
409
|
);
|
378
410
|
} else {
|
@@ -400,9 +432,19 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
400
432
|
});
|
401
433
|
};
|
402
434
|
|
435
|
+
/**
|
436
|
+
* @param {string} ctx context
|
437
|
+
* @param {string} dir dir
|
438
|
+
* @param {ResolveDependenciesCallback} callback callback
|
439
|
+
* @returns {void}
|
440
|
+
*/
|
403
441
|
const addSubDirectory = (ctx, dir, callback) =>
|
404
442
|
addDirectory(ctx, dir, addSubDirectory, callback);
|
405
443
|
|
444
|
+
/**
|
445
|
+
* @param {string} resource resource
|
446
|
+
* @param {ResolveDependenciesCallback} callback callback
|
447
|
+
*/
|
406
448
|
const visitResource = (resource, callback) => {
|
407
449
|
if (typeof fs.realpath === "function") {
|
408
450
|
addDirectoryChecked(resource, resource, new Set(), callback);
|
@@ -414,12 +456,15 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
414
456
|
if (typeof resource === "string") {
|
415
457
|
visitResource(resource, callback);
|
416
458
|
} else {
|
417
|
-
asyncLib.map(resource, visitResource, (err,
|
459
|
+
asyncLib.map(resource, visitResource, (err, _result) => {
|
418
460
|
if (err) return callback(err);
|
461
|
+
const result = /** @type {ContextElementDependency[][]} */ (_result);
|
419
462
|
|
420
463
|
// result dependencies should have unique userRequest
|
421
464
|
// ordered by resolve result
|
465
|
+
/** @type {Set<string>} */
|
422
466
|
const temp = new Set();
|
467
|
+
/** @type {ContextElementDependency[]} */
|
423
468
|
const res = [];
|
424
469
|
for (let i = 0; i < result.length; i++) {
|
425
470
|
const inner = result[i];
|
@@ -16,7 +16,7 @@ class ContextReplacementPlugin {
|
|
16
16
|
* @param {RegExp} resourceRegExp A regular expression that determines which files will be selected
|
17
17
|
* @param {TODO=} newContentResource A new resource to replace the match
|
18
18
|
* @param {TODO=} newContentRecursive If true, all subdirectories are searched for matches
|
19
|
-
* @param {
|
19
|
+
* @param {RegExp=} newContentRegExp A regular expression that determines which files will be selected
|
20
20
|
*/
|
21
21
|
constructor(
|
22
22
|
resourceRegExp,
|
@@ -154,14 +154,15 @@ const createResolveDependenciesFromContextMap = createContextMap => {
|
|
154
154
|
const resolveDependenciesFromContextMap = (fs, options, callback) => {
|
155
155
|
createContextMap(fs, (err, map) => {
|
156
156
|
if (err) return callback(err);
|
157
|
-
const dependencies = Object.keys(map).map(
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
157
|
+
const dependencies = Object.keys(map).map(
|
158
|
+
key =>
|
159
|
+
new ContextElementDependency(
|
160
|
+
map[key] + options.resourceQuery + options.resourceFragment,
|
161
|
+
key,
|
162
|
+
options.category,
|
163
|
+
options.referencedExports
|
164
|
+
)
|
165
|
+
);
|
165
166
|
callback(null, dependencies);
|
166
167
|
});
|
167
168
|
};
|