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
@@ -38,17 +38,23 @@ const { intersectRuntime } = require("../util/runtime");
|
|
38
38
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
39
39
|
const JavascriptParser = require("./JavascriptParser");
|
40
40
|
|
41
|
+
/** @typedef {import("eslint-scope").Scope} Scope */
|
41
42
|
/** @typedef {import("eslint-scope").Variable} Variable */
|
42
43
|
/** @typedef {import("webpack-sources").Source} Source */
|
44
|
+
/** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
|
43
45
|
/** @typedef {import("../Chunk")} Chunk */
|
44
46
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
45
47
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
46
48
|
/** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
|
47
49
|
/** @typedef {import("../Compiler")} Compiler */
|
48
50
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
51
|
+
/** @typedef {import("../Entrypoint")} Entrypoint */
|
49
52
|
/** @typedef {import("../Module")} Module */
|
53
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
50
54
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
51
55
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
56
|
+
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
57
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
52
58
|
/** @typedef {import("../util/Hash")} Hash */
|
53
59
|
|
54
60
|
/**
|
@@ -59,9 +65,9 @@ const JavascriptParser = require("./JavascriptParser");
|
|
59
65
|
const chunkHasJs = (chunk, chunkGraph) => {
|
60
66
|
if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true;
|
61
67
|
|
62
|
-
return
|
63
|
-
|
64
|
-
|
68
|
+
return Boolean(
|
69
|
+
chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
|
70
|
+
);
|
65
71
|
};
|
66
72
|
|
67
73
|
/**
|
@@ -96,7 +102,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
96
102
|
* @property {ModuleGraph} moduleGraph the module graph
|
97
103
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
98
104
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
99
|
-
* @property {boolean} strictMode rendering in strict context
|
105
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
100
106
|
*/
|
101
107
|
|
102
108
|
/**
|
@@ -108,7 +114,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
108
114
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
109
115
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
110
116
|
* @property {string} hash hash to be used for render call
|
111
|
-
* @property {boolean} strictMode rendering in strict context
|
117
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
112
118
|
*/
|
113
119
|
|
114
120
|
/**
|
@@ -120,7 +126,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
120
126
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
121
127
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
122
128
|
* @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
|
123
|
-
* @property {boolean} strictMode rendering in strict context
|
129
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
124
130
|
*/
|
125
131
|
|
126
132
|
/**
|
@@ -158,6 +164,8 @@ const compilationHooksMap = new WeakMap();
|
|
158
164
|
|
159
165
|
const PLUGIN_NAME = "JavascriptModulesPlugin";
|
160
166
|
|
167
|
+
/** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
|
168
|
+
|
161
169
|
class JavascriptModulesPlugin {
|
162
170
|
/**
|
163
171
|
* @param {Compilation} compilation the compilation
|
@@ -226,34 +234,22 @@ class JavascriptModulesPlugin {
|
|
226
234
|
const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
|
227
235
|
normalModuleFactory.hooks.createParser
|
228
236
|
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
229
|
-
.tap(PLUGIN_NAME, options =>
|
230
|
-
return new JavascriptParser("auto");
|
231
|
-
});
|
237
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("auto"));
|
232
238
|
normalModuleFactory.hooks.createParser
|
233
239
|
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
234
|
-
.tap(PLUGIN_NAME, options =>
|
235
|
-
return new JavascriptParser("script");
|
236
|
-
});
|
240
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("script"));
|
237
241
|
normalModuleFactory.hooks.createParser
|
238
242
|
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
239
|
-
.tap(PLUGIN_NAME, options =>
|
240
|
-
return new JavascriptParser("module");
|
241
|
-
});
|
243
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("module"));
|
242
244
|
normalModuleFactory.hooks.createGenerator
|
243
245
|
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
244
|
-
.tap(PLUGIN_NAME, () =>
|
245
|
-
return new JavascriptGenerator();
|
246
|
-
});
|
246
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
247
247
|
normalModuleFactory.hooks.createGenerator
|
248
248
|
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
249
|
-
.tap(PLUGIN_NAME, () =>
|
250
|
-
return new JavascriptGenerator();
|
251
|
-
});
|
249
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
252
250
|
normalModuleFactory.hooks.createGenerator
|
253
251
|
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
254
|
-
.tap(PLUGIN_NAME, () =>
|
255
|
-
return new JavascriptGenerator();
|
256
|
-
});
|
252
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
257
253
|
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
258
254
|
const {
|
259
255
|
hash,
|
@@ -435,6 +431,7 @@ class JavascriptModulesPlugin {
|
|
435
431
|
chunkGraph.hasChunkEntryDependentChunks(chunk)
|
436
432
|
) {
|
437
433
|
set.add(RuntimeGlobals.onChunksLoaded);
|
434
|
+
set.add(RuntimeGlobals.exports);
|
438
435
|
set.add(RuntimeGlobals.require);
|
439
436
|
}
|
440
437
|
}
|
@@ -459,12 +456,13 @@ class JavascriptModulesPlugin {
|
|
459
456
|
moduleObject.exports,
|
460
457
|
context.__webpack_require__
|
461
458
|
);
|
462
|
-
} catch (
|
463
|
-
|
459
|
+
} catch (err) {
|
460
|
+
/** @type {Error} */
|
461
|
+
(err).stack += printGeneratedCodeForStack(
|
464
462
|
options.module,
|
465
463
|
/** @type {string} */ (code)
|
466
464
|
);
|
467
|
-
throw
|
465
|
+
throw err;
|
468
466
|
}
|
469
467
|
});
|
470
468
|
compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
|
@@ -481,26 +479,32 @@ class JavascriptModulesPlugin {
|
|
481
479
|
}
|
482
480
|
);
|
483
481
|
try {
|
482
|
+
// eslint-disable-next-line no-useless-call
|
484
483
|
fn.call(null, context.__webpack_require__);
|
485
|
-
} catch (
|
486
|
-
|
487
|
-
|
484
|
+
} catch (err) {
|
485
|
+
/** @type {Error} */
|
486
|
+
(err).stack += printGeneratedCodeForStack(options.module, code);
|
487
|
+
throw err;
|
488
488
|
}
|
489
489
|
});
|
490
490
|
}
|
491
491
|
);
|
492
492
|
}
|
493
493
|
|
494
|
+
/**
|
495
|
+
* @param {Chunk} chunk chunk
|
496
|
+
* @param {OutputOptions} outputOptions output options
|
497
|
+
* @returns {TemplatePath} used filename template
|
498
|
+
*/
|
494
499
|
static getChunkFilenameTemplate(chunk, outputOptions) {
|
495
500
|
if (chunk.filenameTemplate) {
|
496
501
|
return chunk.filenameTemplate;
|
497
502
|
} else if (chunk instanceof HotUpdateChunk) {
|
498
|
-
return outputOptions.hotUpdateChunkFilename;
|
503
|
+
return /** @type {TemplatePath} */ (outputOptions.hotUpdateChunkFilename);
|
499
504
|
} else if (chunk.canBeInitial()) {
|
500
|
-
return outputOptions.filename;
|
501
|
-
} else {
|
502
|
-
return outputOptions.chunkFilename;
|
505
|
+
return /** @type {TemplatePath} */ (outputOptions.filename);
|
503
506
|
}
|
507
|
+
return /** @type {TemplatePath} */ (outputOptions.chunkFilename);
|
504
508
|
}
|
505
509
|
|
506
510
|
/**
|
@@ -508,7 +512,7 @@ class JavascriptModulesPlugin {
|
|
508
512
|
* @param {ChunkRenderContext} renderContext options object
|
509
513
|
* @param {CompilationHooks} hooks hooks
|
510
514
|
* @param {boolean} factory true: renders as factory method, false: pure module content
|
511
|
-
* @returns {Source} the newly generated source from rendering
|
515
|
+
* @returns {Source | null} the newly generated source from rendering
|
512
516
|
*/
|
513
517
|
renderModule(module, renderContext, hooks, factory) {
|
514
518
|
const {
|
@@ -548,7 +552,9 @@ class JavascriptModulesPlugin {
|
|
548
552
|
const needThisAsExports = runtimeRequirements.has(
|
549
553
|
RuntimeGlobals.thisAsExports
|
550
554
|
);
|
551
|
-
const needStrict =
|
555
|
+
const needStrict =
|
556
|
+
/** @type {BuildInfo} */
|
557
|
+
(module.buildInfo).strict && !strictMode;
|
552
558
|
const cacheEntry = this._moduleFactoryCache.get(
|
553
559
|
moduleSourcePostContent
|
554
560
|
);
|
@@ -569,19 +575,19 @@ class JavascriptModulesPlugin {
|
|
569
575
|
args.push(
|
570
576
|
needModule
|
571
577
|
? module.moduleArgument
|
572
|
-
:
|
578
|
+
: `__unused_webpack_${module.moduleArgument}`
|
573
579
|
);
|
574
580
|
if (needExports || needRequire)
|
575
581
|
args.push(
|
576
582
|
needExports
|
577
583
|
? module.exportsArgument
|
578
|
-
:
|
584
|
+
: `__unused_webpack_${module.exportsArgument}`
|
579
585
|
);
|
580
586
|
if (needRequire) args.push(RuntimeGlobals.require);
|
581
587
|
if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
|
582
|
-
factorySource.add(
|
588
|
+
factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
|
583
589
|
} else {
|
584
|
-
factorySource.add(
|
590
|
+
factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
|
585
591
|
}
|
586
592
|
if (needStrict) {
|
587
593
|
factorySource.add('"use strict";\n');
|
@@ -614,9 +620,9 @@ class JavascriptModulesPlugin {
|
|
614
620
|
),
|
615
621
|
"JavascriptModulesPlugin.getCompilationHooks().renderModulePackage"
|
616
622
|
);
|
617
|
-
} catch (
|
618
|
-
|
619
|
-
throw
|
623
|
+
} catch (err) {
|
624
|
+
err.module = module;
|
625
|
+
throw err;
|
620
626
|
}
|
621
627
|
}
|
622
628
|
|
@@ -635,7 +641,10 @@ class JavascriptModulesPlugin {
|
|
635
641
|
const allModules = modules ? Array.from(modules) : [];
|
636
642
|
let strictHeader;
|
637
643
|
let allStrict = renderContext.strictMode;
|
638
|
-
if (
|
644
|
+
if (
|
645
|
+
!allStrict &&
|
646
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
647
|
+
) {
|
639
648
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
640
649
|
strictHeader = strictBailout
|
641
650
|
? `// runtime can't be in strict mode because ${strictBailout}.\n`
|
@@ -717,7 +726,7 @@ class JavascriptModulesPlugin {
|
|
717
726
|
inlinedModules = new Set(chunkGraph.getChunkEntryModulesIterable(chunk));
|
718
727
|
}
|
719
728
|
|
720
|
-
|
729
|
+
const source = new ConcatSource();
|
721
730
|
let prefix;
|
722
731
|
if (iife) {
|
723
732
|
if (runtimeTemplate.supportsArrowFunction()) {
|
@@ -730,16 +739,20 @@ class JavascriptModulesPlugin {
|
|
730
739
|
prefix = "/******/ ";
|
731
740
|
}
|
732
741
|
let allStrict = renderContext.strictMode;
|
733
|
-
if (
|
742
|
+
if (
|
743
|
+
!allStrict &&
|
744
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
745
|
+
) {
|
734
746
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
735
747
|
if (strictBailout) {
|
736
748
|
source.add(
|
737
|
-
|
738
|
-
|
749
|
+
`${
|
750
|
+
prefix
|
751
|
+
}// runtime can't be in strict mode because ${strictBailout}.\n`
|
739
752
|
);
|
740
753
|
} else {
|
741
754
|
allStrict = true;
|
742
|
-
source.add(prefix
|
755
|
+
source.add(`${prefix}"use strict";\n`);
|
743
756
|
}
|
744
757
|
}
|
745
758
|
|
@@ -766,7 +779,7 @@ class JavascriptModulesPlugin {
|
|
766
779
|
runtimeRequirements.has(RuntimeGlobals.moduleFactoriesAddOnly) ||
|
767
780
|
runtimeRequirements.has(RuntimeGlobals.require)
|
768
781
|
) {
|
769
|
-
source.add(prefix
|
782
|
+
source.add(`${prefix}var __webpack_modules__ = (`);
|
770
783
|
source.add(chunkModules || "{}");
|
771
784
|
source.add(");\n");
|
772
785
|
source.add(
|
@@ -775,7 +788,7 @@ class JavascriptModulesPlugin {
|
|
775
788
|
}
|
776
789
|
|
777
790
|
if (bootstrap.header.length > 0) {
|
778
|
-
const header = Template.asString(bootstrap.header)
|
791
|
+
const header = `${Template.asString(bootstrap.header)}\n`;
|
779
792
|
source.add(
|
780
793
|
new PrefixSource(
|
781
794
|
prefix,
|
@@ -809,7 +822,7 @@ class JavascriptModulesPlugin {
|
|
809
822
|
}
|
810
823
|
if (inlinedModules) {
|
811
824
|
if (bootstrap.beforeStartup.length > 0) {
|
812
|
-
const beforeStartup = Template.asString(bootstrap.beforeStartup)
|
825
|
+
const beforeStartup = `${Template.asString(bootstrap.beforeStartup)}\n`;
|
813
826
|
source.add(
|
814
827
|
new PrefixSource(
|
815
828
|
prefix,
|
@@ -819,9 +832,13 @@ class JavascriptModulesPlugin {
|
|
819
832
|
)
|
820
833
|
);
|
821
834
|
}
|
822
|
-
const lastInlinedModule = last(inlinedModules);
|
835
|
+
const lastInlinedModule = /** @type {Module} */ (last(inlinedModules));
|
823
836
|
const startupSource = new ConcatSource();
|
824
|
-
|
837
|
+
|
838
|
+
if (runtimeRequirements.has(RuntimeGlobals.exports)) {
|
839
|
+
startupSource.add(`var ${RuntimeGlobals.exports} = {};\n`);
|
840
|
+
}
|
841
|
+
|
825
842
|
const renamedInlinedModule = this.renameInlineModule(
|
826
843
|
allModules,
|
827
844
|
renderContext,
|
@@ -836,7 +853,8 @@ class JavascriptModulesPlugin {
|
|
836
853
|
this.renderModule(m, chunkRenderContext, hooks, false);
|
837
854
|
|
838
855
|
if (renderedModule) {
|
839
|
-
const innerStrict =
|
856
|
+
const innerStrict =
|
857
|
+
!allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
|
840
858
|
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
841
859
|
m,
|
842
860
|
chunk.runtime
|
@@ -844,7 +862,7 @@ class JavascriptModulesPlugin {
|
|
844
862
|
const exports = runtimeRequirements.has(RuntimeGlobals.exports);
|
845
863
|
const webpackExports =
|
846
864
|
exports && m.exportsArgument === RuntimeGlobals.exports;
|
847
|
-
|
865
|
+
const iife = innerStrict
|
848
866
|
? "it need to be in strict mode."
|
849
867
|
: inlinedModules.size > 1
|
850
868
|
? // TODO check globals and top-level declarations of other entries and chunk modules
|
@@ -894,7 +912,7 @@ class JavascriptModulesPlugin {
|
|
894
912
|
})
|
895
913
|
);
|
896
914
|
if (bootstrap.afterStartup.length > 0) {
|
897
|
-
const afterStartup = Template.asString(bootstrap.afterStartup)
|
915
|
+
const afterStartup = `${Template.asString(bootstrap.afterStartup)}\n`;
|
898
916
|
source.add(
|
899
917
|
new PrefixSource(
|
900
918
|
prefix,
|
@@ -905,9 +923,10 @@ class JavascriptModulesPlugin {
|
|
905
923
|
);
|
906
924
|
}
|
907
925
|
} else {
|
908
|
-
const lastEntryModule =
|
909
|
-
|
910
|
-
|
926
|
+
const lastEntryModule =
|
927
|
+
/** @type {Module} */
|
928
|
+
(last(chunkGraph.getChunkEntryModulesIterable(chunk)));
|
929
|
+
/** @type {function(string[], string): Source} */
|
911
930
|
const toSource = useSourceMap
|
912
931
|
? (content, name) =>
|
913
932
|
new OriginalSource(Template.asString(content), name)
|
@@ -987,7 +1006,8 @@ class JavascriptModulesPlugin {
|
|
987
1006
|
*/
|
988
1007
|
updateHashWithBootstrap(hash, renderContext, hooks) {
|
989
1008
|
const bootstrap = this.renderBootstrap(renderContext, hooks);
|
990
|
-
for (const
|
1009
|
+
for (const _k of Object.keys(bootstrap)) {
|
1010
|
+
const key = /** @type {keyof Bootstrap} */ (_k);
|
991
1011
|
hash.update(key);
|
992
1012
|
if (Array.isArray(bootstrap[key])) {
|
993
1013
|
for (const line of bootstrap[key]) {
|
@@ -1002,7 +1022,7 @@ class JavascriptModulesPlugin {
|
|
1002
1022
|
/**
|
1003
1023
|
* @param {RenderBootstrapContext} renderContext options object
|
1004
1024
|
* @param {CompilationHooks} hooks hooks
|
1005
|
-
* @returns {
|
1025
|
+
* @returns {Bootstrap} the generated source of the bootstrap code
|
1006
1026
|
*/
|
1007
1027
|
renderBootstrap(renderContext, hooks) {
|
1008
1028
|
const {
|
@@ -1042,7 +1062,7 @@ class JavascriptModulesPlugin {
|
|
1042
1062
|
allowInlineStartup: true
|
1043
1063
|
};
|
1044
1064
|
|
1045
|
-
|
1065
|
+
const { header: buf, startup, beforeStartup, afterStartup } = result;
|
1046
1066
|
|
1047
1067
|
if (result.allowInlineStartup && moduleFactories) {
|
1048
1068
|
startup.push(
|
@@ -1112,7 +1132,9 @@ class JavascriptModulesPlugin {
|
|
1112
1132
|
entryModule,
|
1113
1133
|
entrypoint
|
1114
1134
|
] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
|
1115
|
-
const chunks =
|
1135
|
+
const chunks =
|
1136
|
+
/** @type {Entrypoint} */
|
1137
|
+
(entrypoint).chunks.filter(c => c !== chunk);
|
1116
1138
|
if (result.allowInlineStartup && chunks.length > 0) {
|
1117
1139
|
buf2.push(
|
1118
1140
|
"// This entry module depends on other loaded chunks and execution need to be delayed"
|
@@ -1409,7 +1431,9 @@ class JavascriptModulesPlugin {
|
|
1409
1431
|
) {
|
1410
1432
|
const { runtimeTemplate } = renderContext;
|
1411
1433
|
|
1412
|
-
/** @
|
1434
|
+
/** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}} InlinedModulesInfo */
|
1435
|
+
|
1436
|
+
/** @type {Map<Module, InlinedModulesInfo>} */
|
1413
1437
|
const inlinedModulesToInfo = new Map();
|
1414
1438
|
/** @type {Set<string>} */
|
1415
1439
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
@@ -1422,7 +1446,7 @@ class JavascriptModulesPlugin {
|
|
1422
1446
|
m,
|
1423
1447
|
chunkRenderContext,
|
1424
1448
|
hooks,
|
1425
|
-
isInlinedModule
|
1449
|
+
!isInlinedModule
|
1426
1450
|
);
|
1427
1451
|
|
1428
1452
|
if (!moduleSource) continue;
|
@@ -1438,7 +1462,7 @@ class JavascriptModulesPlugin {
|
|
1438
1462
|
ignoreEval: true
|
1439
1463
|
});
|
1440
1464
|
|
1441
|
-
const globalScope = scopeManager.acquire(ast);
|
1465
|
+
const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
|
1442
1466
|
if (inlinedModules && inlinedModules.has(m)) {
|
1443
1467
|
const moduleScope = globalScope.childScopes[0];
|
1444
1468
|
inlinedModulesToInfo.set(m, {
|
@@ -1471,7 +1495,10 @@ class JavascriptModulesPlugin {
|
|
1471
1495
|
}
|
1472
1496
|
|
1473
1497
|
const usedNames = new Set(
|
1474
|
-
Array.from(
|
1498
|
+
Array.from(
|
1499
|
+
/** @type {InlinedModulesInfo} */
|
1500
|
+
(inlinedModulesToInfo.get(m)).variables
|
1501
|
+
).map(v => v.name)
|
1475
1502
|
);
|
1476
1503
|
|
1477
1504
|
for (const variable of usedInNonInlined) {
|
@@ -1487,7 +1514,7 @@ class JavascriptModulesPlugin {
|
|
1487
1514
|
);
|
1488
1515
|
usedNames.add(newName);
|
1489
1516
|
for (const identifier of allIdentifiers) {
|
1490
|
-
const r = identifier.range;
|
1517
|
+
const r = /** @type {Range} */ (identifier.range);
|
1491
1518
|
const path = getPathInAst(ast, identifier);
|
1492
1519
|
if (path && path.length > 1) {
|
1493
1520
|
const maybeProperty =
|
@@ -1525,7 +1552,7 @@ class JavascriptModulesPlugin {
|
|
1525
1552
|
);
|
1526
1553
|
const splittedInfo = extraInfo.split("/");
|
1527
1554
|
while (splittedInfo.length) {
|
1528
|
-
name = splittedInfo.pop() + (name ?
|
1555
|
+
name = splittedInfo.pop() + (name ? `_${name}` : "");
|
1529
1556
|
const nameIdent = Template.toIdentifier(name);
|
1530
1557
|
if (!usedName.has(nameIdent)) {
|
1531
1558
|
return nameIdent;
|