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.
Files changed (344) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +33 -20
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +75 -68
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +6 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +41 -15
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +130 -69
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +21 -13
  94. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  95. package/lib/WatchIgnorePlugin.js +26 -9
  96. package/lib/Watching.js +10 -5
  97. package/lib/WebpackOptionsApply.js +84 -62
  98. package/lib/asset/AssetGenerator.js +107 -42
  99. package/lib/asset/AssetModulesPlugin.js +29 -23
  100. package/lib/asset/AssetSourceGenerator.js +2 -7
  101. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  102. package/lib/buildChunkGraph.js +93 -81
  103. package/lib/cache/IdleFileCachePlugin.js +4 -4
  104. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  105. package/lib/cache/PackFileCacheStrategy.js +51 -50
  106. package/lib/cache/ResolverCachePlugin.js +6 -6
  107. package/lib/cache/mergeEtags.js +16 -21
  108. package/lib/cli.js +148 -104
  109. package/lib/config/browserslistTargetHandler.js +16 -13
  110. package/lib/config/defaults.js +32 -28
  111. package/lib/config/normalization.js +335 -344
  112. package/lib/config/target.js +42 -52
  113. package/lib/container/ContainerEntryModule.js +2 -2
  114. package/lib/container/ContainerPlugin.js +1 -1
  115. package/lib/container/RemoteRuntimeModule.js +11 -8
  116. package/lib/container/options.js +18 -4
  117. package/lib/css/CssExportsGenerator.js +26 -24
  118. package/lib/css/CssGenerator.js +9 -4
  119. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  120. package/lib/css/CssModulesPlugin.js +127 -47
  121. package/lib/css/CssParser.js +20 -18
  122. package/lib/css/walkCssTokens.js +80 -95
  123. package/lib/debug/ProfilingPlugin.js +19 -20
  124. package/lib/dependencies/AMDDefineDependency.js +1 -1
  125. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  126. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  127. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  128. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  129. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  130. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  131. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  132. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  133. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  134. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  135. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  136. package/lib/dependencies/ConstDependency.js +1 -1
  137. package/lib/dependencies/ContextDependency.js +7 -2
  138. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  139. package/lib/dependencies/ContextElementDependency.js +35 -8
  140. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  141. package/lib/dependencies/CssExportDependency.js +7 -7
  142. package/lib/dependencies/CssImportDependency.js +0 -2
  143. package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
  144. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  145. package/lib/dependencies/CssUrlDependency.js +4 -5
  146. package/lib/dependencies/DynamicExports.js +5 -5
  147. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  148. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  149. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  151. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  153. package/lib/dependencies/HarmonyExports.js +2 -2
  154. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  155. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
  157. package/lib/dependencies/ImportDependency.js +1 -1
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  159. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  160. package/lib/dependencies/ImportParserPlugin.js +39 -44
  161. package/lib/dependencies/JsonExportsDependency.js +22 -18
  162. package/lib/dependencies/LoaderPlugin.js +47 -36
  163. package/lib/dependencies/LocalModule.js +1 -1
  164. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  165. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  166. package/lib/dependencies/ProvidedDependency.js +1 -1
  167. package/lib/dependencies/PureExpressionDependency.js +6 -6
  168. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  169. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  170. package/lib/dependencies/SystemPlugin.js +1 -1
  171. package/lib/dependencies/URLDependency.js +3 -3
  172. package/lib/dependencies/URLPlugin.js +66 -12
  173. package/lib/dependencies/WorkerPlugin.js +25 -24
  174. package/lib/dependencies/processExportInfo.js +3 -1
  175. package/lib/electron/ElectronTargetPlugin.js +1 -0
  176. package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
  177. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  178. package/lib/formatLocation.js +1 -2
  179. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  180. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  181. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  182. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  183. package/lib/hmr/lazyCompilationBackend.js +64 -40
  184. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  185. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  186. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  187. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  188. package/lib/ids/IdHelpers.js +29 -39
  189. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  190. package/lib/index.js +1 -5
  191. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
  192. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  193. package/lib/javascript/ChunkHelpers.js +1 -1
  194. package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
  195. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  196. package/lib/javascript/JavascriptGenerator.js +23 -7
  197. package/lib/javascript/JavascriptModulesPlugin.js +133 -86
  198. package/lib/javascript/JavascriptParser.js +179 -200
  199. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  200. package/lib/javascript/StartupHelpers.js +41 -13
  201. package/lib/json/JsonGenerator.js +7 -13
  202. package/lib/json/JsonModulesPlugin.js +1 -4
  203. package/lib/json/JsonParser.js +5 -3
  204. package/lib/library/AmdLibraryPlugin.js +12 -16
  205. package/lib/library/AssignLibraryPlugin.js +8 -10
  206. package/lib/library/EnableLibraryPlugin.js +15 -14
  207. package/lib/library/JsonpLibraryPlugin.js +2 -1
  208. package/lib/library/ModernModuleLibraryPlugin.js +8 -6
  209. package/lib/library/ModuleLibraryPlugin.js +2 -1
  210. package/lib/library/SystemLibraryPlugin.js +2 -1
  211. package/lib/library/UmdLibraryPlugin.js +66 -92
  212. package/lib/logging/Logger.js +32 -4
  213. package/lib/logging/createConsoleLogger.js +12 -13
  214. package/lib/logging/runtime.js +7 -8
  215. package/lib/logging/truncateArgs.js +5 -8
  216. package/lib/node/NodeWatchFileSystem.js +3 -18
  217. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  218. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  219. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/nodeConsole.js +22 -22
  221. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  222. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  223. package/lib/optimize/ConcatenatedModule.js +81 -51
  224. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  225. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  226. package/lib/optimize/InnerGraph.js +17 -17
  227. package/lib/optimize/InnerGraphPlugin.js +8 -7
  228. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  229. package/lib/optimize/MangleExportsPlugin.js +1 -0
  230. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
  231. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  232. package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
  233. package/lib/optimize/RealContentHashPlugin.js +7 -10
  234. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  235. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  236. package/lib/optimize/SplitChunksPlugin.js +34 -30
  237. package/lib/performance/SizeLimitsPlugin.js +2 -2
  238. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  239. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  240. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  241. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  242. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  243. package/lib/rules/RuleSetCompiler.js +41 -22
  244. package/lib/rules/UseEffectRulePlugin.js +36 -32
  245. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  246. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  247. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  248. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  249. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  250. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  251. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  252. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  253. package/lib/schemes/DataUriPlugin.js +1 -1
  254. package/lib/schemes/HttpUriPlugin.js +241 -126
  255. package/lib/serialization/BinaryMiddleware.js +44 -28
  256. package/lib/serialization/DateObjectSerializer.js +1 -0
  257. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  258. package/lib/serialization/FileMiddleware.js +154 -106
  259. package/lib/serialization/MapObjectSerializer.js +2 -1
  260. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  261. package/lib/serialization/ObjectMiddleware.js +52 -56
  262. package/lib/serialization/PlainObjectSerializer.js +32 -6
  263. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  264. package/lib/serialization/Serializer.js +4 -5
  265. package/lib/serialization/SerializerMiddleware.js +6 -6
  266. package/lib/serialization/SetObjectSerializer.js +2 -1
  267. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  268. package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
  269. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  270. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  271. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  272. package/lib/sharing/utils.js +15 -27
  273. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  274. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  275. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  276. package/lib/stats/StatsFactory.js +127 -56
  277. package/lib/stats/StatsPrinter.js +75 -44
  278. package/lib/util/ArrayHelpers.js +8 -4
  279. package/lib/util/ArrayQueue.js +1 -1
  280. package/lib/util/AsyncQueue.js +31 -12
  281. package/lib/util/IterableHelpers.js +3 -4
  282. package/lib/util/LazyBucketSortedSet.js +60 -44
  283. package/lib/util/LazySet.js +13 -0
  284. package/lib/util/MapHelpers.js +1 -3
  285. package/lib/util/ParallelismFactorCalculator.js +1 -1
  286. package/lib/util/Queue.js +1 -1
  287. package/lib/util/Semaphore.js +4 -7
  288. package/lib/util/SetHelpers.js +5 -5
  289. package/lib/util/SortableSet.js +4 -3
  290. package/lib/util/StackedCacheMap.js +4 -6
  291. package/lib/util/StackedMap.js +1 -3
  292. package/lib/util/StringXor.js +0 -5
  293. package/lib/util/TupleQueue.js +1 -1
  294. package/lib/util/TupleSet.js +15 -5
  295. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  296. package/lib/util/WeakTupleMap.js +19 -21
  297. package/lib/util/binarySearchBounds.js +5 -12
  298. package/lib/util/chainedImports.js +1 -1
  299. package/lib/util/cleverMerge.js +21 -19
  300. package/lib/util/comparators.js +57 -52
  301. package/lib/util/compileBooleanMatcher.js +3 -6
  302. package/lib/util/conventions.js +8 -11
  303. package/lib/util/createHash.js +9 -6
  304. package/lib/util/deprecation.js +22 -12
  305. package/lib/util/deterministicGrouping.js +19 -26
  306. package/lib/util/findGraphRoots.js +2 -2
  307. package/lib/util/fs.js +32 -32
  308. package/lib/util/hash/md4.js +2 -2
  309. package/lib/util/hash/wasm-hash.js +7 -7
  310. package/lib/util/hash/xxhash64.js +2 -2
  311. package/lib/util/identifier.js +81 -59
  312. package/lib/util/memoize.js +8 -10
  313. package/lib/util/mergeScope.js +6 -9
  314. package/lib/util/nonNumericOnlyHash.js +2 -2
  315. package/lib/util/numberHash.js +1 -6
  316. package/lib/util/objectToMap.js +0 -1
  317. package/lib/util/propertyAccess.js +2 -5
  318. package/lib/util/propertyName.js +1 -3
  319. package/lib/util/registerExternalSerializer.js +1 -1
  320. package/lib/util/runtime.js +109 -113
  321. package/lib/util/semver.js +29 -27
  322. package/lib/util/serialization.js +16 -1
  323. package/lib/util/smartGrouping.js +5 -5
  324. package/lib/util/source.js +1 -1
  325. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  326. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  327. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  328. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  329. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  330. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  331. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  333. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  334. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  335. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  336. package/package.json +18 -17
  337. package/schemas/WebpackOptions.check.js +1 -1
  338. package/schemas/WebpackOptions.json +5 -0
  339. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  340. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  341. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  342. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  343. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  344. package/types.d.ts +681 -355
@@ -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
- template.getInitFragments(dependency, templateContext),
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
- "No template for dependency: " + dependency.constructor.name
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: generateContext.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 = generateContext.getData();
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 chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
63
- ? true
64
- : false;
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 (e) {
464
- e.stack += printGeneratedCodeForStack(
459
+ } catch (err) {
460
+ /** @type {Error} */
461
+ (err).stack += printGeneratedCodeForStack(
465
462
  options.module,
466
463
  /** @type {string} */ (code)
467
464
  );
468
- throw e;
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 (e) {
487
- e.stack += printGeneratedCodeForStack(options.module, code);
488
- throw e;
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 = module.buildInfo.strict && !strictMode;
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
- : "__unused_webpack_" + module.moduleArgument
578
+ : `__unused_webpack_${module.moduleArgument}`
574
579
  );
575
580
  if (needExports || needRequire)
576
581
  args.push(
577
582
  needExports
578
583
  ? module.exportsArgument
579
- : "__unused_webpack_" + module.exportsArgument
584
+ : `__unused_webpack_${module.exportsArgument}`
580
585
  );
581
586
  if (needRequire) args.push(RuntimeGlobals.require);
582
587
  if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
583
- factorySource.add("/***/ ((" + args.join(", ") + ") => {\n\n");
588
+ factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
584
589
  } else {
585
- factorySource.add("/***/ (function(" + args.join(", ") + ") {\n\n");
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 (e) {
619
- e.module = module;
620
- throw e;
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 (!allStrict && allModules.every(m => m.buildInfo.strict)) {
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
- let source = new ConcatSource();
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 (!allStrict && allModules.every(m => m.buildInfo.strict)) {
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
- prefix +
739
- `// runtime can't be in strict mode because ${strictBailout}.\n`
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 + '"use strict";\n');
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 + "var __webpack_modules__ = (");
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) + "\n";
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) + "\n";
825
+ const beforeStartup = `${Template.asString(bootstrap.beforeStartup)}\n`;
814
826
  source.add(
815
827
  new PrefixSource(
816
828
  prefix,
@@ -820,28 +832,36 @@ 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)) {
827
839
  startupSource.add(`var ${RuntimeGlobals.exports} = {};\n`);
828
840
  }
829
841
 
830
- const renamedInlinedModule = this.renameInlineModule(
831
- allModules,
832
- renderContext,
833
- inlinedModules,
834
- chunkRenderContext,
835
- hooks
836
- );
842
+ const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
843
+ /** @type {Map<Module, Source> | false} */
844
+ let renamedInlinedModule = false;
845
+ if (avoidEntryIife) {
846
+ renamedInlinedModule = this.getRenamedInlineModule(
847
+ allModules,
848
+ renderContext,
849
+ inlinedModules,
850
+ chunkRenderContext,
851
+ hooks,
852
+ allStrict,
853
+ Boolean(chunkModules)
854
+ );
855
+ }
837
856
 
838
857
  for (const m of inlinedModules) {
839
- const renderedModule =
840
- renamedInlinedModule.get(m) ||
841
- this.renderModule(m, chunkRenderContext, hooks, false);
858
+ const renderedModule = renamedInlinedModule
859
+ ? renamedInlinedModule.get(m)
860
+ : this.renderModule(m, chunkRenderContext, hooks, false);
842
861
 
843
862
  if (renderedModule) {
844
- const innerStrict = !allStrict && m.buildInfo.strict;
863
+ const innerStrict =
864
+ !allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
845
865
  const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
846
866
  m,
847
867
  chunk.runtime
@@ -849,15 +869,17 @@ class JavascriptModulesPlugin {
849
869
  const exports = runtimeRequirements.has(RuntimeGlobals.exports);
850
870
  const webpackExports =
851
871
  exports && m.exportsArgument === RuntimeGlobals.exports;
852
- let iife = innerStrict
872
+ const iife = innerStrict
853
873
  ? "it need to be in strict mode."
854
874
  : inlinedModules.size > 1
855
875
  ? // TODO check globals and top-level declarations of other entries and chunk modules
856
876
  // to make a better decision
857
877
  "it need to be isolated against other entry modules."
858
- : exports && !webpackExports
859
- ? `it uses a non-standard name for the exports (${m.exportsArgument}).`
860
- : hooks.embedInRuntimeBailout.call(m, renderContext);
878
+ : chunkModules && !renamedInlinedModule
879
+ ? "it need to be isolated against other modules in the chunk."
880
+ : exports && !webpackExports
881
+ ? `it uses a non-standard name for the exports (${m.exportsArgument}).`
882
+ : hooks.embedInRuntimeBailout.call(m, renderContext);
861
883
  let footer;
862
884
  if (iife !== undefined) {
863
885
  startupSource.add(
@@ -899,7 +921,7 @@ class JavascriptModulesPlugin {
899
921
  })
900
922
  );
901
923
  if (bootstrap.afterStartup.length > 0) {
902
- const afterStartup = Template.asString(bootstrap.afterStartup) + "\n";
924
+ const afterStartup = `${Template.asString(bootstrap.afterStartup)}\n`;
903
925
  source.add(
904
926
  new PrefixSource(
905
927
  prefix,
@@ -910,9 +932,10 @@ class JavascriptModulesPlugin {
910
932
  );
911
933
  }
912
934
  } else {
913
- const lastEntryModule = last(
914
- chunkGraph.getChunkEntryModulesIterable(chunk)
915
- );
935
+ const lastEntryModule =
936
+ /** @type {Module} */
937
+ (last(chunkGraph.getChunkEntryModulesIterable(chunk)));
938
+ /** @type {function(string[], string): Source} */
916
939
  const toSource = useSourceMap
917
940
  ? (content, name) =>
918
941
  new OriginalSource(Template.asString(content), name)
@@ -992,7 +1015,8 @@ class JavascriptModulesPlugin {
992
1015
  */
993
1016
  updateHashWithBootstrap(hash, renderContext, hooks) {
994
1017
  const bootstrap = this.renderBootstrap(renderContext, hooks);
995
- for (const key of Object.keys(bootstrap)) {
1018
+ for (const _k of Object.keys(bootstrap)) {
1019
+ const key = /** @type {keyof Bootstrap} */ (_k);
996
1020
  hash.update(key);
997
1021
  if (Array.isArray(bootstrap[key])) {
998
1022
  for (const line of bootstrap[key]) {
@@ -1007,7 +1031,7 @@ class JavascriptModulesPlugin {
1007
1031
  /**
1008
1032
  * @param {RenderBootstrapContext} renderContext options object
1009
1033
  * @param {CompilationHooks} hooks hooks
1010
- * @returns {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} the generated source of the bootstrap code
1034
+ * @returns {Bootstrap} the generated source of the bootstrap code
1011
1035
  */
1012
1036
  renderBootstrap(renderContext, hooks) {
1013
1037
  const {
@@ -1047,7 +1071,7 @@ class JavascriptModulesPlugin {
1047
1071
  allowInlineStartup: true
1048
1072
  };
1049
1073
 
1050
- let { header: buf, startup, beforeStartup, afterStartup } = result;
1074
+ const { header: buf, startup, beforeStartup, afterStartup } = result;
1051
1075
 
1052
1076
  if (result.allowInlineStartup && moduleFactories) {
1053
1077
  startup.push(
@@ -1117,7 +1141,9 @@ class JavascriptModulesPlugin {
1117
1141
  entryModule,
1118
1142
  entrypoint
1119
1143
  ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
1120
- const chunks = entrypoint.chunks.filter(c => c !== chunk);
1144
+ const chunks =
1145
+ /** @type {Entrypoint} */
1146
+ (entrypoint).chunks.filter(c => c !== chunk);
1121
1147
  if (result.allowInlineStartup && chunks.length > 0) {
1122
1148
  buf2.push(
1123
1149
  "// This entry module depends on other loaded chunks and execution need to be delayed"
@@ -1403,23 +1429,41 @@ class JavascriptModulesPlugin {
1403
1429
  * @param {Set<Module>} inlinedModules inlinedModules
1404
1430
  * @param {ChunkRenderContext} chunkRenderContext chunkRenderContext
1405
1431
  * @param {CompilationHooks} hooks hooks
1406
- * @returns {Map<Module, Source>} renamed inlined modules
1432
+ * @param {boolean} allStrict allStrict
1433
+ * @param {boolean} hasChunkModules hasChunkModules
1434
+ * @returns {Map<Module, Source> | false} renamed inlined modules
1407
1435
  */
1408
- renameInlineModule(
1436
+ getRenamedInlineModule(
1409
1437
  allModules,
1410
1438
  renderContext,
1411
1439
  inlinedModules,
1412
1440
  chunkRenderContext,
1413
- hooks
1441
+ hooks,
1442
+ allStrict,
1443
+ hasChunkModules
1414
1444
  ) {
1445
+ const innerStrict = !allStrict && allModules.every(m => m.buildInfo.strict);
1446
+ const isMultipleEntries = inlinedModules.size > 1;
1447
+ const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
1448
+
1449
+ // TODO:
1450
+ // This step is before the IIFE reason calculation. Ideally, it should only be executed when this function can optimize the
1451
+ // IIFE reason. Otherwise, it should directly return false. There are four reasons now, we have skipped two already, the left
1452
+ // one is 'it uses a non-standard name for the exports'.
1453
+ if (isMultipleEntries || innerStrict || !singleEntryWithModules) {
1454
+ return false;
1455
+ }
1456
+
1457
+ /** @type {Map<Module, Source>} */
1458
+ const renamedInlinedModules = new Map();
1415
1459
  const { runtimeTemplate } = renderContext;
1416
1460
 
1417
- /** @type {Map<Module, { source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}>} */
1461
+ /** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}} InlinedModulesInfo */
1462
+ /** @type {Map<Module, InlinedModulesInfo>} */
1418
1463
  const inlinedModulesToInfo = new Map();
1419
1464
  /** @type {Set<string>} */
1420
1465
  const nonInlinedModuleThroughIdentifiers = new Set();
1421
1466
  /** @type {Map<Module, Source>} */
1422
- const renamedInlinedModules = new Map();
1423
1467
 
1424
1468
  for (const m of allModules) {
1425
1469
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
@@ -1427,7 +1471,7 @@ class JavascriptModulesPlugin {
1427
1471
  m,
1428
1472
  chunkRenderContext,
1429
1473
  hooks,
1430
- isInlinedModule ? false : true
1474
+ !isInlinedModule
1431
1475
  );
1432
1476
 
1433
1477
  if (!moduleSource) continue;
@@ -1443,7 +1487,7 @@ class JavascriptModulesPlugin {
1443
1487
  ignoreEval: true
1444
1488
  });
1445
1489
 
1446
- const globalScope = scopeManager.acquire(ast);
1490
+ const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
1447
1491
  if (inlinedModules && inlinedModules.has(m)) {
1448
1492
  const moduleScope = globalScope.childScopes[0];
1449
1493
  inlinedModulesToInfo.set(m, {
@@ -1476,7 +1520,10 @@ class JavascriptModulesPlugin {
1476
1520
  }
1477
1521
 
1478
1522
  const usedNames = new Set(
1479
- Array.from(inlinedModulesToInfo.get(m).variables).map(v => v.name)
1523
+ Array.from(
1524
+ /** @type {InlinedModulesInfo} */
1525
+ (inlinedModulesToInfo.get(m)).variables
1526
+ ).map(v => v.name)
1480
1527
  );
1481
1528
 
1482
1529
  for (const variable of usedInNonInlined) {
@@ -1492,7 +1539,7 @@ class JavascriptModulesPlugin {
1492
1539
  );
1493
1540
  usedNames.add(newName);
1494
1541
  for (const identifier of allIdentifiers) {
1495
- const r = identifier.range;
1542
+ const r = /** @type {Range} */ (identifier.range);
1496
1543
  const path = getPathInAst(ast, identifier);
1497
1544
  if (path && path.length > 1) {
1498
1545
  const maybeProperty =
@@ -1530,7 +1577,7 @@ class JavascriptModulesPlugin {
1530
1577
  );
1531
1578
  const splittedInfo = extraInfo.split("/");
1532
1579
  while (splittedInfo.length) {
1533
- name = splittedInfo.pop() + (name ? "_" + name : "");
1580
+ name = splittedInfo.pop() + (name ? `_${name}` : "");
1534
1581
  const nameIdent = Template.toIdentifier(name);
1535
1582
  if (!usedName.has(nameIdent)) {
1536
1583
  return nameIdent;