webpack 5.93.0 → 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 +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 +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 +126 -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 +12 -10
- 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 +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 +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 +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 +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 +91 -69
- 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 +80 -48
- 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 +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 +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 +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 +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 +15 -14
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1 -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 +667 -347
@@ -14,6 +14,8 @@ const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibi
|
|
14
14
|
/** @typedef {import("webpack-sources").Source} Source */
|
15
15
|
/** @typedef {import("../DependenciesBlock")} DependenciesBlock */
|
16
16
|
/** @typedef {import("../Dependency")} Dependency */
|
17
|
+
/** @typedef {import("../DependencyTemplate")} DependencyTemplate */
|
18
|
+
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
17
19
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
18
20
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
19
21
|
/** @typedef {import("../Module")} Module */
|
@@ -25,8 +27,15 @@ const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibi
|
|
25
27
|
// replace with newer constructs
|
26
28
|
|
27
29
|
const deprecatedGetInitFragments = util.deprecate(
|
30
|
+
/**
|
31
|
+
* @param {DependencyTemplate} template template
|
32
|
+
* @param {Dependency} dependency dependency
|
33
|
+
* @param {DependencyTemplateContext} templateContext template context
|
34
|
+
* @returns {InitFragment<GenerateContext>[]} init fragments
|
35
|
+
*/
|
28
36
|
(template, dependency, templateContext) =>
|
29
|
-
|
37
|
+
/** @type {DependencyTemplate & { getInitFragments: function(Dependency, DependencyTemplateContext): InitFragment<GenerateContext>[] }} */
|
38
|
+
(template).getInitFragments(dependency, templateContext),
|
30
39
|
"DependencyTemplate.getInitFragment is deprecated (use apply(dep, source, { initFragments }) instead)",
|
31
40
|
"DEP_WEBPACK_JAVASCRIPT_GENERATOR_GET_INIT_FRAGMENTS"
|
32
41
|
);
|
@@ -93,6 +102,7 @@ class JavascriptGenerator extends Generator {
|
|
93
102
|
}
|
94
103
|
|
95
104
|
const source = new ReplaceSource(originalSource);
|
105
|
+
/** @type {InitFragment<GenerateContext>[]} */
|
96
106
|
const initFragments = [];
|
97
107
|
|
98
108
|
this.sourceModule(module, initFragments, source, generateContext);
|
@@ -102,7 +112,7 @@ class JavascriptGenerator extends Generator {
|
|
102
112
|
|
103
113
|
/**
|
104
114
|
* @param {Module} module the module to generate
|
105
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
115
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
106
116
|
* @param {ReplaceSource} source the current replace source which can be modified
|
107
117
|
* @param {GenerateContext} generateContext the generateContext
|
108
118
|
* @returns {void}
|
@@ -144,7 +154,7 @@ class JavascriptGenerator extends Generator {
|
|
144
154
|
/**
|
145
155
|
* @param {Module} module the module to generate
|
146
156
|
* @param {DependenciesBlock} block the dependencies block which will be processed
|
147
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
157
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
148
158
|
* @param {ReplaceSource} source the current replace source which can be modified
|
149
159
|
* @param {GenerateContext} generateContext the generateContext
|
150
160
|
* @returns {void}
|
@@ -174,7 +184,7 @@ class JavascriptGenerator extends Generator {
|
|
174
184
|
/**
|
175
185
|
* @param {Module} module the current module
|
176
186
|
* @param {Dependency} dependency the dependency to generate
|
177
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
187
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
178
188
|
* @param {ReplaceSource} source the current replace source which can be modified
|
179
189
|
* @param {GenerateContext} generateContext the render context
|
180
190
|
* @returns {void}
|
@@ -186,12 +196,14 @@ class JavascriptGenerator extends Generator {
|
|
186
196
|
const template = generateContext.dependencyTemplates.get(constructor);
|
187
197
|
if (!template) {
|
188
198
|
throw new Error(
|
189
|
-
|
199
|
+
`No template for dependency: ${dependency.constructor.name}`
|
190
200
|
);
|
191
201
|
}
|
192
202
|
|
203
|
+
/** @type {InitFragment<GenerateContext>[] | undefined} */
|
193
204
|
let chunkInitFragments;
|
194
205
|
|
206
|
+
/** @type {DependencyTemplateContext} */
|
195
207
|
const templateContext = {
|
196
208
|
runtimeTemplate: generateContext.runtimeTemplate,
|
197
209
|
dependencyTemplates: generateContext.dependencyTemplates,
|
@@ -201,11 +213,15 @@ class JavascriptGenerator extends Generator {
|
|
201
213
|
runtime: generateContext.runtime,
|
202
214
|
runtimeRequirements: generateContext.runtimeRequirements,
|
203
215
|
concatenationScope: generateContext.concatenationScope,
|
204
|
-
codeGenerationResults:
|
216
|
+
codeGenerationResults:
|
217
|
+
/** @type {NonNullable<GenerateContext["codeGenerationResults"]>} */
|
218
|
+
(generateContext.codeGenerationResults),
|
205
219
|
initFragments,
|
206
220
|
get chunkInitFragments() {
|
207
221
|
if (!chunkInitFragments) {
|
208
|
-
const data =
|
222
|
+
const data =
|
223
|
+
/** @type {NonNullable<GenerateContext["getData"]>} */
|
224
|
+
(generateContext.getData)();
|
209
225
|
chunkInitFragments = data.get("chunkInitFragments");
|
210
226
|
if (!chunkInitFragments) {
|
211
227
|
chunkInitFragments = [];
|
@@ -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,
|
@@ -460,12 +456,13 @@ class JavascriptModulesPlugin {
|
|
460
456
|
moduleObject.exports,
|
461
457
|
context.__webpack_require__
|
462
458
|
);
|
463
|
-
} catch (
|
464
|
-
|
459
|
+
} catch (err) {
|
460
|
+
/** @type {Error} */
|
461
|
+
(err).stack += printGeneratedCodeForStack(
|
465
462
|
options.module,
|
466
463
|
/** @type {string} */ (code)
|
467
464
|
);
|
468
|
-
throw
|
465
|
+
throw err;
|
469
466
|
}
|
470
467
|
});
|
471
468
|
compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
|
@@ -482,26 +479,32 @@ class JavascriptModulesPlugin {
|
|
482
479
|
}
|
483
480
|
);
|
484
481
|
try {
|
482
|
+
// eslint-disable-next-line no-useless-call
|
485
483
|
fn.call(null, context.__webpack_require__);
|
486
|
-
} catch (
|
487
|
-
|
488
|
-
|
484
|
+
} catch (err) {
|
485
|
+
/** @type {Error} */
|
486
|
+
(err).stack += printGeneratedCodeForStack(options.module, code);
|
487
|
+
throw err;
|
489
488
|
}
|
490
489
|
});
|
491
490
|
}
|
492
491
|
);
|
493
492
|
}
|
494
493
|
|
494
|
+
/**
|
495
|
+
* @param {Chunk} chunk chunk
|
496
|
+
* @param {OutputOptions} outputOptions output options
|
497
|
+
* @returns {TemplatePath} used filename template
|
498
|
+
*/
|
495
499
|
static getChunkFilenameTemplate(chunk, outputOptions) {
|
496
500
|
if (chunk.filenameTemplate) {
|
497
501
|
return chunk.filenameTemplate;
|
498
502
|
} else if (chunk instanceof HotUpdateChunk) {
|
499
|
-
return outputOptions.hotUpdateChunkFilename;
|
503
|
+
return /** @type {TemplatePath} */ (outputOptions.hotUpdateChunkFilename);
|
500
504
|
} else if (chunk.canBeInitial()) {
|
501
|
-
return outputOptions.filename;
|
502
|
-
} else {
|
503
|
-
return outputOptions.chunkFilename;
|
505
|
+
return /** @type {TemplatePath} */ (outputOptions.filename);
|
504
506
|
}
|
507
|
+
return /** @type {TemplatePath} */ (outputOptions.chunkFilename);
|
505
508
|
}
|
506
509
|
|
507
510
|
/**
|
@@ -509,7 +512,7 @@ class JavascriptModulesPlugin {
|
|
509
512
|
* @param {ChunkRenderContext} renderContext options object
|
510
513
|
* @param {CompilationHooks} hooks hooks
|
511
514
|
* @param {boolean} factory true: renders as factory method, false: pure module content
|
512
|
-
* @returns {Source} the newly generated source from rendering
|
515
|
+
* @returns {Source | null} the newly generated source from rendering
|
513
516
|
*/
|
514
517
|
renderModule(module, renderContext, hooks, factory) {
|
515
518
|
const {
|
@@ -549,7 +552,9 @@ class JavascriptModulesPlugin {
|
|
549
552
|
const needThisAsExports = runtimeRequirements.has(
|
550
553
|
RuntimeGlobals.thisAsExports
|
551
554
|
);
|
552
|
-
const needStrict =
|
555
|
+
const needStrict =
|
556
|
+
/** @type {BuildInfo} */
|
557
|
+
(module.buildInfo).strict && !strictMode;
|
553
558
|
const cacheEntry = this._moduleFactoryCache.get(
|
554
559
|
moduleSourcePostContent
|
555
560
|
);
|
@@ -570,19 +575,19 @@ class JavascriptModulesPlugin {
|
|
570
575
|
args.push(
|
571
576
|
needModule
|
572
577
|
? module.moduleArgument
|
573
|
-
:
|
578
|
+
: `__unused_webpack_${module.moduleArgument}`
|
574
579
|
);
|
575
580
|
if (needExports || needRequire)
|
576
581
|
args.push(
|
577
582
|
needExports
|
578
583
|
? module.exportsArgument
|
579
|
-
:
|
584
|
+
: `__unused_webpack_${module.exportsArgument}`
|
580
585
|
);
|
581
586
|
if (needRequire) args.push(RuntimeGlobals.require);
|
582
587
|
if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
|
583
|
-
factorySource.add(
|
588
|
+
factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
|
584
589
|
} else {
|
585
|
-
factorySource.add(
|
590
|
+
factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
|
586
591
|
}
|
587
592
|
if (needStrict) {
|
588
593
|
factorySource.add('"use strict";\n');
|
@@ -615,9 +620,9 @@ class JavascriptModulesPlugin {
|
|
615
620
|
),
|
616
621
|
"JavascriptModulesPlugin.getCompilationHooks().renderModulePackage"
|
617
622
|
);
|
618
|
-
} catch (
|
619
|
-
|
620
|
-
throw
|
623
|
+
} catch (err) {
|
624
|
+
err.module = module;
|
625
|
+
throw err;
|
621
626
|
}
|
622
627
|
}
|
623
628
|
|
@@ -636,7 +641,10 @@ class JavascriptModulesPlugin {
|
|
636
641
|
const allModules = modules ? Array.from(modules) : [];
|
637
642
|
let strictHeader;
|
638
643
|
let allStrict = renderContext.strictMode;
|
639
|
-
if (
|
644
|
+
if (
|
645
|
+
!allStrict &&
|
646
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
647
|
+
) {
|
640
648
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
641
649
|
strictHeader = strictBailout
|
642
650
|
? `// runtime can't be in strict mode because ${strictBailout}.\n`
|
@@ -718,7 +726,7 @@ class JavascriptModulesPlugin {
|
|
718
726
|
inlinedModules = new Set(chunkGraph.getChunkEntryModulesIterable(chunk));
|
719
727
|
}
|
720
728
|
|
721
|
-
|
729
|
+
const source = new ConcatSource();
|
722
730
|
let prefix;
|
723
731
|
if (iife) {
|
724
732
|
if (runtimeTemplate.supportsArrowFunction()) {
|
@@ -731,16 +739,20 @@ class JavascriptModulesPlugin {
|
|
731
739
|
prefix = "/******/ ";
|
732
740
|
}
|
733
741
|
let allStrict = renderContext.strictMode;
|
734
|
-
if (
|
742
|
+
if (
|
743
|
+
!allStrict &&
|
744
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
745
|
+
) {
|
735
746
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
736
747
|
if (strictBailout) {
|
737
748
|
source.add(
|
738
|
-
|
739
|
-
|
749
|
+
`${
|
750
|
+
prefix
|
751
|
+
}// runtime can't be in strict mode because ${strictBailout}.\n`
|
740
752
|
);
|
741
753
|
} else {
|
742
754
|
allStrict = true;
|
743
|
-
source.add(prefix
|
755
|
+
source.add(`${prefix}"use strict";\n`);
|
744
756
|
}
|
745
757
|
}
|
746
758
|
|
@@ -767,7 +779,7 @@ class JavascriptModulesPlugin {
|
|
767
779
|
runtimeRequirements.has(RuntimeGlobals.moduleFactoriesAddOnly) ||
|
768
780
|
runtimeRequirements.has(RuntimeGlobals.require)
|
769
781
|
) {
|
770
|
-
source.add(prefix
|
782
|
+
source.add(`${prefix}var __webpack_modules__ = (`);
|
771
783
|
source.add(chunkModules || "{}");
|
772
784
|
source.add(");\n");
|
773
785
|
source.add(
|
@@ -776,7 +788,7 @@ class JavascriptModulesPlugin {
|
|
776
788
|
}
|
777
789
|
|
778
790
|
if (bootstrap.header.length > 0) {
|
779
|
-
const header = Template.asString(bootstrap.header)
|
791
|
+
const header = `${Template.asString(bootstrap.header)}\n`;
|
780
792
|
source.add(
|
781
793
|
new PrefixSource(
|
782
794
|
prefix,
|
@@ -810,7 +822,7 @@ class JavascriptModulesPlugin {
|
|
810
822
|
}
|
811
823
|
if (inlinedModules) {
|
812
824
|
if (bootstrap.beforeStartup.length > 0) {
|
813
|
-
const beforeStartup = Template.asString(bootstrap.beforeStartup)
|
825
|
+
const beforeStartup = `${Template.asString(bootstrap.beforeStartup)}\n`;
|
814
826
|
source.add(
|
815
827
|
new PrefixSource(
|
816
828
|
prefix,
|
@@ -820,7 +832,7 @@ class JavascriptModulesPlugin {
|
|
820
832
|
)
|
821
833
|
);
|
822
834
|
}
|
823
|
-
const lastInlinedModule = last(inlinedModules);
|
835
|
+
const lastInlinedModule = /** @type {Module} */ (last(inlinedModules));
|
824
836
|
const startupSource = new ConcatSource();
|
825
837
|
|
826
838
|
if (runtimeRequirements.has(RuntimeGlobals.exports)) {
|
@@ -841,7 +853,8 @@ class JavascriptModulesPlugin {
|
|
841
853
|
this.renderModule(m, chunkRenderContext, hooks, false);
|
842
854
|
|
843
855
|
if (renderedModule) {
|
844
|
-
const innerStrict =
|
856
|
+
const innerStrict =
|
857
|
+
!allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
|
845
858
|
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
846
859
|
m,
|
847
860
|
chunk.runtime
|
@@ -849,7 +862,7 @@ class JavascriptModulesPlugin {
|
|
849
862
|
const exports = runtimeRequirements.has(RuntimeGlobals.exports);
|
850
863
|
const webpackExports =
|
851
864
|
exports && m.exportsArgument === RuntimeGlobals.exports;
|
852
|
-
|
865
|
+
const iife = innerStrict
|
853
866
|
? "it need to be in strict mode."
|
854
867
|
: inlinedModules.size > 1
|
855
868
|
? // TODO check globals and top-level declarations of other entries and chunk modules
|
@@ -899,7 +912,7 @@ class JavascriptModulesPlugin {
|
|
899
912
|
})
|
900
913
|
);
|
901
914
|
if (bootstrap.afterStartup.length > 0) {
|
902
|
-
const afterStartup = Template.asString(bootstrap.afterStartup)
|
915
|
+
const afterStartup = `${Template.asString(bootstrap.afterStartup)}\n`;
|
903
916
|
source.add(
|
904
917
|
new PrefixSource(
|
905
918
|
prefix,
|
@@ -910,9 +923,10 @@ class JavascriptModulesPlugin {
|
|
910
923
|
);
|
911
924
|
}
|
912
925
|
} else {
|
913
|
-
const lastEntryModule =
|
914
|
-
|
915
|
-
|
926
|
+
const lastEntryModule =
|
927
|
+
/** @type {Module} */
|
928
|
+
(last(chunkGraph.getChunkEntryModulesIterable(chunk)));
|
929
|
+
/** @type {function(string[], string): Source} */
|
916
930
|
const toSource = useSourceMap
|
917
931
|
? (content, name) =>
|
918
932
|
new OriginalSource(Template.asString(content), name)
|
@@ -992,7 +1006,8 @@ class JavascriptModulesPlugin {
|
|
992
1006
|
*/
|
993
1007
|
updateHashWithBootstrap(hash, renderContext, hooks) {
|
994
1008
|
const bootstrap = this.renderBootstrap(renderContext, hooks);
|
995
|
-
for (const
|
1009
|
+
for (const _k of Object.keys(bootstrap)) {
|
1010
|
+
const key = /** @type {keyof Bootstrap} */ (_k);
|
996
1011
|
hash.update(key);
|
997
1012
|
if (Array.isArray(bootstrap[key])) {
|
998
1013
|
for (const line of bootstrap[key]) {
|
@@ -1007,7 +1022,7 @@ class JavascriptModulesPlugin {
|
|
1007
1022
|
/**
|
1008
1023
|
* @param {RenderBootstrapContext} renderContext options object
|
1009
1024
|
* @param {CompilationHooks} hooks hooks
|
1010
|
-
* @returns {
|
1025
|
+
* @returns {Bootstrap} the generated source of the bootstrap code
|
1011
1026
|
*/
|
1012
1027
|
renderBootstrap(renderContext, hooks) {
|
1013
1028
|
const {
|
@@ -1047,7 +1062,7 @@ class JavascriptModulesPlugin {
|
|
1047
1062
|
allowInlineStartup: true
|
1048
1063
|
};
|
1049
1064
|
|
1050
|
-
|
1065
|
+
const { header: buf, startup, beforeStartup, afterStartup } = result;
|
1051
1066
|
|
1052
1067
|
if (result.allowInlineStartup && moduleFactories) {
|
1053
1068
|
startup.push(
|
@@ -1117,7 +1132,9 @@ class JavascriptModulesPlugin {
|
|
1117
1132
|
entryModule,
|
1118
1133
|
entrypoint
|
1119
1134
|
] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
|
1120
|
-
const chunks =
|
1135
|
+
const chunks =
|
1136
|
+
/** @type {Entrypoint} */
|
1137
|
+
(entrypoint).chunks.filter(c => c !== chunk);
|
1121
1138
|
if (result.allowInlineStartup && chunks.length > 0) {
|
1122
1139
|
buf2.push(
|
1123
1140
|
"// This entry module depends on other loaded chunks and execution need to be delayed"
|
@@ -1414,7 +1431,9 @@ class JavascriptModulesPlugin {
|
|
1414
1431
|
) {
|
1415
1432
|
const { runtimeTemplate } = renderContext;
|
1416
1433
|
|
1417
|
-
/** @
|
1434
|
+
/** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}} InlinedModulesInfo */
|
1435
|
+
|
1436
|
+
/** @type {Map<Module, InlinedModulesInfo>} */
|
1418
1437
|
const inlinedModulesToInfo = new Map();
|
1419
1438
|
/** @type {Set<string>} */
|
1420
1439
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
@@ -1427,7 +1446,7 @@ class JavascriptModulesPlugin {
|
|
1427
1446
|
m,
|
1428
1447
|
chunkRenderContext,
|
1429
1448
|
hooks,
|
1430
|
-
isInlinedModule
|
1449
|
+
!isInlinedModule
|
1431
1450
|
);
|
1432
1451
|
|
1433
1452
|
if (!moduleSource) continue;
|
@@ -1443,7 +1462,7 @@ class JavascriptModulesPlugin {
|
|
1443
1462
|
ignoreEval: true
|
1444
1463
|
});
|
1445
1464
|
|
1446
|
-
const globalScope = scopeManager.acquire(ast);
|
1465
|
+
const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
|
1447
1466
|
if (inlinedModules && inlinedModules.has(m)) {
|
1448
1467
|
const moduleScope = globalScope.childScopes[0];
|
1449
1468
|
inlinedModulesToInfo.set(m, {
|
@@ -1476,7 +1495,10 @@ class JavascriptModulesPlugin {
|
|
1476
1495
|
}
|
1477
1496
|
|
1478
1497
|
const usedNames = new Set(
|
1479
|
-
Array.from(
|
1498
|
+
Array.from(
|
1499
|
+
/** @type {InlinedModulesInfo} */
|
1500
|
+
(inlinedModulesToInfo.get(m)).variables
|
1501
|
+
).map(v => v.name)
|
1480
1502
|
);
|
1481
1503
|
|
1482
1504
|
for (const variable of usedInNonInlined) {
|
@@ -1492,7 +1514,7 @@ class JavascriptModulesPlugin {
|
|
1492
1514
|
);
|
1493
1515
|
usedNames.add(newName);
|
1494
1516
|
for (const identifier of allIdentifiers) {
|
1495
|
-
const r = identifier.range;
|
1517
|
+
const r = /** @type {Range} */ (identifier.range);
|
1496
1518
|
const path = getPathInAst(ast, identifier);
|
1497
1519
|
if (path && path.length > 1) {
|
1498
1520
|
const maybeProperty =
|
@@ -1530,7 +1552,7 @@ class JavascriptModulesPlugin {
|
|
1530
1552
|
);
|
1531
1553
|
const splittedInfo = extraInfo.split("/");
|
1532
1554
|
while (splittedInfo.length) {
|
1533
|
-
name = splittedInfo.pop() + (name ?
|
1555
|
+
name = splittedInfo.pop() + (name ? `_${name}` : "");
|
1534
1556
|
const nameIdent = Template.toIdentifier(name);
|
1535
1557
|
if (!usedName.has(nameIdent)) {
|
1536
1558
|
return nameIdent;
|