webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -10,9 +10,10 @@ const Template = require("../Template");
10
10
  const { first } = require("../util/SetHelpers");
11
11
 
12
12
  /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Chunk").ChunkId} ChunkId */
13
14
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
14
15
  /** @typedef {import("../Compilation")} Compilation */
15
- /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
16
+ /** @typedef {import("../Compilation").HashWithLengthFunction} HashWithLengthFunction */
16
17
  /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
17
18
 
18
19
  class GetChunkFilenameRuntimeModule extends RuntimeModule {
@@ -20,7 +21,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
20
21
  * @param {string} contentType the contentType to use the content hash for
21
22
  * @param {string} name kind of filename
22
23
  * @param {string} global function name to be assigned
23
- * @param {function(Chunk): TemplatePath | false} getFilenameForChunk functor to get the filename or function
24
+ * @param {(chunk: Chunk) => TemplatePath | false} getFilenameForChunk functor to get the filename or function
24
25
  * @param {boolean} allChunks when false, only async chunks are included
25
26
  */
26
27
  constructor(contentType, name, global, getFilenameForChunk, allChunks) {
@@ -52,7 +53,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
52
53
  * @param {Chunk} c the chunk
53
54
  * @returns {void}
54
55
  */
55
- const addChunk = c => {
56
+ const addChunk = (c) => {
56
57
  const chunkFilename = getFilenameForChunk(c);
57
58
  if (chunkFilename) {
58
59
  let set = chunkFilenames.get(chunkFilename);
@@ -100,8 +101,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
100
101
  .getTreeRuntimeRequirements(chunk)
101
102
  .has(RuntimeGlobals.ensureChunkIncludeEntries);
102
103
  if (includeEntries) {
103
- includedChunksMessages.push("sibling chunks for the entrypoint");
104
- for (const c of chunkGraph.getChunkEntryDependentChunksIterable(
104
+ includedChunksMessages.push("chunks that the entrypoint depends on");
105
+ for (const c of chunkGraph.getRuntimeChunkDependentChunksIterable(
105
106
  chunk
106
107
  )) {
107
108
  addChunk(c);
@@ -124,10 +125,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
124
125
  */
125
126
  const addStaticUrl = (c, chunkFilename) => {
126
127
  /**
127
- * @param {string | number} value a value
128
+ * @param {ChunkId} value a value
128
129
  * @returns {string} string to put in quotes
129
130
  */
130
- const unquotedStringify = value => {
131
+ const unquotedStringify = (value) => {
131
132
  const str = `${value}`;
132
133
  if (str.length >= 5 && str === `${c.id}`) {
133
134
  // This is shorter and generates the same result
@@ -138,9 +139,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
138
139
  };
139
140
  /**
140
141
  * @param {string} value string
141
- * @returns {function(number): string} string to put in quotes with length
142
+ * @returns {HashWithLengthFunction} string to put in quotes with length
142
143
  */
143
- const unquotedStringifyWithLength = value => length =>
144
+ const unquotedStringifyWithLength = (value) => (length) =>
144
145
  unquotedStringify(`${value}`.slice(0, length));
145
146
  const chunkFilenameValue =
146
147
  typeof chunkFilename === "function"
@@ -153,17 +154,15 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
153
154
  : JSON.stringify(chunkFilename);
154
155
  const staticChunkFilename = compilation.getPath(chunkFilenameValue, {
155
156
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
156
- hashWithLength: length =>
157
+ hashWithLength: (length) =>
157
158
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
158
159
  chunk: {
159
- id: unquotedStringify(/** @type {number | string} */ (c.id)),
160
+ id: unquotedStringify(/** @type {ChunkId} */ (c.id)),
160
161
  hash: unquotedStringify(/** @type {string} */ (c.renderedHash)),
161
162
  hashWithLength: unquotedStringifyWithLength(
162
163
  /** @type {string} */ (c.renderedHash)
163
164
  ),
164
- name: unquotedStringify(
165
- c.name || /** @type {number | string} */ (c.id)
166
- ),
165
+ name: unquotedStringify(c.name || /** @type {ChunkId} */ (c.id)),
167
166
  contentHash: {
168
167
  [contentType]: unquotedStringify(c.contentHash[contentType])
169
168
  },
@@ -191,14 +190,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
191
190
  }
192
191
 
193
192
  /**
194
- * @param {function(Chunk): string | number} fn function from chunk to value
193
+ * @param {(chunk: Chunk) => string | number} fn function from chunk to value
195
194
  * @returns {string} code with static mapping of results of fn
196
195
  */
197
- const createMap = fn => {
198
- /** @type {Record<number | string, number | string>} */
196
+ const createMap = (fn) => {
197
+ /** @type {Record<ChunkId, ChunkId>} */
199
198
  const obj = {};
200
199
  let useId = false;
201
- /** @type {number | string | undefined} */
200
+ /** @type {ChunkId | undefined} */
202
201
  let lastKey;
203
202
  let entries = 0;
204
203
  for (const c of dynamicUrlChunks) {
@@ -206,8 +205,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
206
205
  if (value === c.id) {
207
206
  useId = true;
208
207
  } else {
209
- obj[/** @type {number | string} */ (c.id)] = value;
210
- lastKey = /** @type {number | string} */ (c.id);
208
+ obj[/** @type {ChunkId} */ (c.id)] = value;
209
+ lastKey = /** @type {ChunkId} */ (c.id);
211
210
  entries++;
212
211
  }
213
212
  }
@@ -215,9 +214,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
215
214
  if (entries === 1) {
216
215
  return useId
217
216
  ? `(chunkId === ${JSON.stringify(lastKey)} ? ${JSON.stringify(
218
- obj[/** @type {number | string} */ (lastKey)]
217
+ obj[/** @type {ChunkId} */ (lastKey)]
219
218
  )} : chunkId)`
220
- : JSON.stringify(obj[/** @type {number | string} */ (lastKey)]);
219
+ : JSON.stringify(obj[/** @type {ChunkId} */ (lastKey)]);
221
220
  }
222
221
  return useId
223
222
  ? `(${JSON.stringify(obj)}[chunkId] || chunkId)`
@@ -225,36 +224,36 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
225
224
  };
226
225
 
227
226
  /**
228
- * @param {function(Chunk): string | number} fn function from chunk to value
227
+ * @param {(chunk: Chunk) => string | number} fn function from chunk to value
229
228
  * @returns {string} code with static mapping of results of fn for including in quoted string
230
229
  */
231
- const mapExpr = fn => `" + ${createMap(fn)} + "`;
230
+ const mapExpr = (fn) => `" + ${createMap(fn)} + "`;
232
231
 
233
232
  /**
234
- * @param {function(Chunk): string | number} fn function from chunk to value
235
- * @returns {function(number): string} function which generates code with static mapping of results of fn for including in quoted string for specific length
233
+ * @param {(chunk: Chunk) => string | number} fn function from chunk to value
234
+ * @returns {HashWithLengthFunction} function which generates code with static mapping of results of fn for including in quoted string for specific length
236
235
  */
237
- const mapExprWithLength = fn => length =>
238
- `" + ${createMap(c => `${fn(c)}`.slice(0, length))} + "`;
236
+ const mapExprWithLength = (fn) => (length) =>
237
+ `" + ${createMap((c) => `${fn(c)}`.slice(0, length))} + "`;
239
238
 
240
239
  const url =
241
240
  dynamicFilename &&
242
241
  compilation.getPath(JSON.stringify(dynamicFilename), {
243
242
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
244
- hashWithLength: length =>
243
+ hashWithLength: (length) =>
245
244
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
246
245
  chunk: {
247
246
  id: '" + chunkId + "',
248
- hash: mapExpr(c => /** @type {string} */ (c.renderedHash)),
247
+ hash: mapExpr((c) => /** @type {string} */ (c.renderedHash)),
249
248
  hashWithLength: mapExprWithLength(
250
- c => /** @type {string} */ (c.renderedHash)
249
+ (c) => /** @type {string} */ (c.renderedHash)
251
250
  ),
252
- name: mapExpr(c => c.name || /** @type {number | string} */ (c.id)),
251
+ name: mapExpr((c) => c.name || /** @type {ChunkId} */ (c.id)),
253
252
  contentHash: {
254
- [contentType]: mapExpr(c => c.contentHash[contentType])
253
+ [contentType]: mapExpr((c) => c.contentHash[contentType])
255
254
  },
256
255
  contentHashWithLength: {
257
- [contentType]: mapExprWithLength(c => c.contentHash[contentType])
256
+ [contentType]: mapExprWithLength((c) => c.contentHash[contentType])
258
257
  }
259
258
  },
260
259
  contentHashType: contentType
@@ -278,7 +277,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
278
277
  ? `chunkId === ${JSON.stringify(first(ids))}`
279
278
  : `{${Array.from(
280
279
  ids,
281
- id => `${JSON.stringify(id)}:1`
280
+ (id) => `${JSON.stringify(id)}:1`
282
281
  ).join(",")}}[chunkId]`;
283
282
  return `if (${condition}) return ${url};`;
284
283
  })
@@ -33,7 +33,7 @@ class GetMainFilenameRuntimeModule extends RuntimeModule {
33
33
  const { runtimeTemplate } = compilation;
34
34
  const url = compilation.getPath(JSON.stringify(filename), {
35
35
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
36
- hashWithLength: length =>
36
+ hashWithLength: (length) =>
37
37
  `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
38
38
  chunk,
39
39
  runtime: chunk.runtime
@@ -69,7 +69,7 @@ class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
69
69
  `policy = trustedTypes.createPolicy(${JSON.stringify(
70
70
  trustedTypes.policyName
71
71
  )}, policy);`
72
- ].map(line =>
72
+ ].map((line) =>
73
73
  wrapPolicyCreationInTryCatch ? Template.indent(line) : line
74
74
  ),
75
75
  ...(wrapPolicyCreationInTryCatch
@@ -11,7 +11,6 @@ const Template = require("../Template");
11
11
  const HelperRuntimeModule = require("./HelperRuntimeModule");
12
12
 
13
13
  /** @typedef {import("../Chunk")} Chunk */
14
- /** @typedef {import("../Compiler")} Compiler */
15
14
 
16
15
  /**
17
16
  * @typedef {object} LoadScriptCompilationHooks
@@ -74,7 +73,6 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
74
73
  "script = document.createElement('script');",
75
74
  scriptType ? `script.type = ${JSON.stringify(scriptType)};` : "",
76
75
  charset ? "script.charset = 'utf-8';" : "",
77
- `script.timeout = ${/** @type {number} */ (loadTimeout) / 1000};`,
78
76
  `if (${RuntimeGlobals.scriptNonce}) {`,
79
77
  Template.indent(
80
78
  `script.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
@@ -0,0 +1,248 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const RuntimeGlobals = require("../RuntimeGlobals");
8
+ const Template = require("../Template");
9
+ const HelperRuntimeModule = require("./HelperRuntimeModule");
10
+
11
+ /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
12
+ /** @typedef {import("../Module").ExportsType} ExportsType */
13
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
14
+
15
+ /**
16
+ * @param {ExportsType} exportsType exports type
17
+ * @returns {string} mode
18
+ */
19
+ function getMakeDeferredNamespaceModeFromExportsType(exportsType) {
20
+ if (exportsType === "namespace") return `/* ${exportsType} */ 0`;
21
+ if (exportsType === "default-only") return `/* ${exportsType} */ 1`;
22
+ if (exportsType === "default-with-named") return `/* ${exportsType} */ 2`;
23
+ if (exportsType === "dynamic") return `/* ${exportsType} */ 3`;
24
+ return "";
25
+ }
26
+
27
+ /**
28
+ * @param {string} moduleId moduleId
29
+ * @param {ExportsType} exportsType exportsType
30
+ * @param {(ModuleId | null)[]} asyncDepsIds asyncDepsIds
31
+ * @param {RuntimeRequirements} runtimeRequirements runtime requirements
32
+ * @returns {string} call make optimized deferred namespace object
33
+ */
34
+ function getOptimizedDeferredModule(
35
+ moduleId,
36
+ exportsType,
37
+ asyncDepsIds,
38
+ runtimeRequirements
39
+ ) {
40
+ runtimeRequirements.add(RuntimeGlobals.makeOptimizedDeferredNamespaceObject);
41
+ const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
42
+ return `${RuntimeGlobals.makeOptimizedDeferredNamespaceObject}(${moduleId}, ${mode}${
43
+ asyncDepsIds.length > 0
44
+ ? `, ${JSON.stringify(asyncDepsIds.filter((x) => x !== null))}`
45
+ : ""
46
+ })`;
47
+ }
48
+
49
+ class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
50
+ /**
51
+ * @param {boolean} hasAsyncRuntime if async module is used.
52
+ */
53
+ constructor(hasAsyncRuntime) {
54
+ super("make optimized deferred namespace object");
55
+ this.hasAsyncRuntime = hasAsyncRuntime;
56
+ }
57
+
58
+ /**
59
+ * @returns {string | null} runtime code
60
+ */
61
+ generate() {
62
+ if (!this.compilation) return null;
63
+ const fn = RuntimeGlobals.makeOptimizedDeferredNamespaceObject;
64
+ const hasAsync = this.hasAsyncRuntime;
65
+ return Template.asString([
66
+ // Note: must be a function (not arrow), because this is used in body!
67
+ `${fn} = function(moduleId, mode${hasAsync ? ", asyncDeps" : ""}) {`,
68
+ Template.indent([
69
+ "// mode: 0 => namespace (esm)",
70
+ "// mode: 1 => default-only (esm strict cjs)",
71
+ "// mode: 2 => default-with-named (esm-cjs compat)",
72
+ "// mode: 3 => dynamic (if exports has __esModule, then esm, otherwise default-with-named)",
73
+ "var r = this;",
74
+ hasAsync ? "var isAsync = asyncDeps && asyncDeps.length;" : "",
75
+ "var obj = {",
76
+ Template.indent([
77
+ "get a() {",
78
+ Template.indent([
79
+ "var exports = r(moduleId);",
80
+ hasAsync
81
+ ? `if(isAsync) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
82
+ : "",
83
+ // if exportsType is "namespace" we can generate the most optimized code,
84
+ // on the second access, we can avoid trigger the getter.
85
+ // we can also do this if exportsType is "dynamic" and there is a "__esModule" property on it.
86
+ 'if(mode == 0 || (mode == 3 && exports.__esModule)) Object.defineProperty(this, "a", { value: exports });',
87
+ "return exports;"
88
+ ]),
89
+ "}"
90
+ ]),
91
+ "};",
92
+ hasAsync
93
+ ? `if(isAsync) obj[${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol}] = asyncDeps;`
94
+ : "",
95
+ "return obj;"
96
+ ]),
97
+ "};"
98
+ ]);
99
+ }
100
+ }
101
+
102
+ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
103
+ /**
104
+ * @param {boolean} hasAsyncRuntime if async module is used.
105
+ */
106
+ constructor(hasAsyncRuntime) {
107
+ super("make deferred namespace object");
108
+ this.hasAsyncRuntime = hasAsyncRuntime;
109
+ }
110
+
111
+ /**
112
+ * @returns {string | null} runtime code
113
+ */
114
+ generate() {
115
+ if (!this.compilation) return null;
116
+ const { runtimeTemplate } = this.compilation;
117
+ const fn = RuntimeGlobals.makeDeferredNamespaceObject;
118
+ const hasAsync = this.hasAsyncRuntime;
119
+ const init = runtimeTemplate.supportsOptionalChaining()
120
+ ? "init?.();"
121
+ : "if (init) init();";
122
+ return `${fn} = ${runtimeTemplate.basicFunction("moduleId, mode", [
123
+ "// mode: 0 => namespace (esm)",
124
+ "// mode: 1 => default-only (esm strict cjs)",
125
+ "// mode: 2 => default-with-named (esm-cjs compat)",
126
+ "// mode: 3 => dynamic (if exports has __esModule, then esm, otherwise default-with-named)",
127
+ "",
128
+ "var cachedModule = __webpack_module_cache__[moduleId];",
129
+ "if (cachedModule && cachedModule.error === undefined) {",
130
+ Template.indent([
131
+ "var exports = cachedModule.exports;",
132
+ hasAsync
133
+ ? `if (${RuntimeGlobals.asyncModuleExportSymbol} in exports) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
134
+ : "",
135
+ "if (mode == 0) return exports;",
136
+ `if (mode == 1) return ${RuntimeGlobals.createFakeNamespaceObject}(exports);`,
137
+ `if (mode == 2) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 2);`,
138
+ `if (mode == 3) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 6);` // 2 | 4
139
+ ]),
140
+ "}",
141
+ "",
142
+ `var init = ${runtimeTemplate.basicFunction("", [
143
+ `ns = ${RuntimeGlobals.require}(moduleId);`,
144
+ hasAsync
145
+ ? `if (${RuntimeGlobals.asyncModuleExportSymbol} in ns) ns = ns[${RuntimeGlobals.asyncModuleExportSymbol}];`
146
+ : "",
147
+ "init = null;",
148
+ "if (mode == 0 || mode == 3 && ns.__esModule && typeof ns === 'object') {",
149
+ Template.indent([
150
+ "delete handler.defineProperty;",
151
+ "delete handler.deleteProperty;",
152
+ "delete handler.set;",
153
+ "delete handler.get;",
154
+ "delete handler.has;",
155
+ "delete handler.ownKeys;",
156
+ "delete handler.getOwnPropertyDescriptor;"
157
+ ]),
158
+ "} else if (mode == 1) {",
159
+ Template.indent([
160
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns);`
161
+ ]),
162
+ "} else if (mode == 2) {",
163
+ Template.indent([
164
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 2);`
165
+ ]),
166
+ "} else if (mode == 3) {",
167
+ Template.indent([
168
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 6);`
169
+ ]),
170
+ "}"
171
+ ])};`,
172
+ "",
173
+ "var ns = __webpack_module_deferred_exports__[moduleId] || (__webpack_module_deferred_exports__[moduleId] = { __proto__: null });",
174
+ "var handler = {",
175
+ Template.indent([
176
+ "__proto__: null,",
177
+ `get: ${runtimeTemplate.basicFunction("_, name", [
178
+ "switch (name) {",
179
+ Template.indent([
180
+ 'case "__esModule": return true;',
181
+ 'case Symbol.toStringTag: return "Deferred Module";',
182
+ 'case "then": return undefined;'
183
+ ]),
184
+ "}",
185
+ init,
186
+ "return ns[name];"
187
+ ])},`,
188
+ `has: ${runtimeTemplate.basicFunction("_, name", [
189
+ "switch (name) {",
190
+ Template.indent(
191
+ [
192
+ 'case "__esModule":',
193
+ "case Symbol.toStringTag:",
194
+ hasAsync
195
+ ? `case ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol}:`
196
+ : "",
197
+ Template.indent("return true;"),
198
+ 'case "then":',
199
+ Template.indent("return false;")
200
+ ].filter(Boolean)
201
+ ),
202
+ "}",
203
+ init,
204
+ "return name in ns;"
205
+ ])},`,
206
+ `ownKeys: ${runtimeTemplate.basicFunction("", [
207
+ init,
208
+ `var keys = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction('x !== "then" && x !== Symbol.toStringTag', "x")}).concat([Symbol.toStringTag]);`,
209
+ "return keys;"
210
+ ])},`,
211
+ `getOwnPropertyDescriptor: ${runtimeTemplate.basicFunction("_, name", [
212
+ "switch (name) {",
213
+ Template.indent([
214
+ 'case "__esModule": return { value: true, configurable: !!mode };',
215
+ 'case Symbol.toStringTag: return { value: "Deferred Module", configurable: !!mode };',
216
+ 'case "then": return undefined;'
217
+ ]),
218
+ "}",
219
+ init,
220
+ "var desc = Reflect.getOwnPropertyDescriptor(ns, name);",
221
+ 'if (mode == 2 && name == "default" && !desc) {',
222
+ Template.indent("desc = { value: ns, configurable: true };"),
223
+ "}",
224
+ "return desc;"
225
+ ])},`,
226
+ `defineProperty: ${runtimeTemplate.basicFunction("_, name", [
227
+ init,
228
+ // Note: This behavior does not match the spec one, but since webpack does not do it either
229
+ // for a normal Module Namespace object (in MakeNamespaceObjectRuntimeModule), let's keep it simple.
230
+ "return false;"
231
+ ])},`,
232
+ `deleteProperty: ${runtimeTemplate.returningFunction("false")},`,
233
+ `set: ${runtimeTemplate.returningFunction("false")},`
234
+ ]),
235
+ "}",
236
+ // we don't fully emulate ES Module semantics in this Proxy to align with normal webpack esm namespace object.
237
+ "return new Proxy(ns, handler);"
238
+ ])};`;
239
+ }
240
+ }
241
+
242
+ module.exports.MakeDeferredNamespaceObjectRuntimeModule =
243
+ MakeDeferredNamespaceObjectRuntimeModule;
244
+ module.exports.MakeOptimizedDeferredNamespaceObjectRuntimeModule =
245
+ MakeOptimizedDeferredNamespaceObjectRuntimeModule;
246
+ module.exports.getMakeDeferredNamespaceModeFromExportsType =
247
+ getMakeDeferredNamespaceModeFromExportsType;
248
+ module.exports.getOptimizedDeferredModule = getOptimizedDeferredModule;
@@ -7,12 +7,12 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
- /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
10
+ /** @typedef {import("../../declarations/WebpackOptions").PublicPath} PublicPath */
11
11
  /** @typedef {import("../Compilation")} Compilation */
12
12
 
13
13
  class PublicPathRuntimeModule extends RuntimeModule {
14
14
  /**
15
- * @param {OutputOptions["publicPath"]} publicPath public path
15
+ * @param {PublicPath} publicPath public path
16
16
  */
17
17
  constructor(publicPath) {
18
18
  super("publicPath", RuntimeModule.STAGE_BASIC);
@@ -22,8 +22,9 @@ class RuntimeIdRuntimeModule extends RuntimeModule {
22
22
  const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
23
23
  const chunk = /** @type {Chunk} */ (this.chunk);
24
24
  const runtime = chunk.runtime;
25
- if (typeof runtime !== "string")
25
+ if (typeof runtime !== "string") {
26
26
  throw new Error("RuntimeIdRuntimeModule must be in a single runtime");
27
+ }
27
28
  const id = chunkGraph.getRuntimeId(runtime);
28
29
  return `${RuntimeGlobals.runtimeId} = ${JSON.stringify(id)};`;
29
30
  }
@@ -18,6 +18,8 @@ const StartupEntrypointRuntimeModule = require("./StartupEntrypointRuntimeModule
18
18
  * @property {boolean=} asyncChunkLoading
19
19
  */
20
20
 
21
+ const PLUGIN_NAME = "StartupChunkDependenciesPlugin";
22
+
21
23
  class StartupChunkDependenciesPlugin {
22
24
  /**
23
25
  * @param {Options} options options
@@ -36,53 +38,48 @@ class StartupChunkDependenciesPlugin {
36
38
  * @returns {void}
37
39
  */
38
40
  apply(compiler) {
39
- compiler.hooks.thisCompilation.tap(
40
- "StartupChunkDependenciesPlugin",
41
- compilation => {
42
- const globalChunkLoading = compilation.outputOptions.chunkLoading;
43
- /**
44
- * @param {Chunk} chunk chunk to check
45
- * @returns {boolean} true, when the plugin is enabled for the chunk
46
- */
47
- const isEnabledForChunk = chunk => {
48
- const options = chunk.getEntryOptions();
49
- const chunkLoading =
50
- options && options.chunkLoading !== undefined
51
- ? options.chunkLoading
52
- : globalChunkLoading;
53
- return chunkLoading === this.chunkLoading;
54
- };
55
- compilation.hooks.additionalTreeRuntimeRequirements.tap(
56
- "StartupChunkDependenciesPlugin",
57
- (chunk, set, { chunkGraph }) => {
58
- if (!isEnabledForChunk(chunk)) return;
59
- if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
60
- set.add(RuntimeGlobals.startup);
61
- set.add(RuntimeGlobals.ensureChunk);
62
- set.add(RuntimeGlobals.ensureChunkIncludeEntries);
63
- compilation.addRuntimeModule(
64
- chunk,
65
- new StartupChunkDependenciesRuntimeModule(
66
- this.asyncChunkLoading
67
- )
68
- );
69
- }
70
- }
71
- );
72
- compilation.hooks.runtimeRequirementInTree
73
- .for(RuntimeGlobals.startupEntrypoint)
74
- .tap("StartupChunkDependenciesPlugin", (chunk, set) => {
75
- if (!isEnabledForChunk(chunk)) return;
76
- set.add(RuntimeGlobals.require);
41
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
42
+ const globalChunkLoading = compilation.outputOptions.chunkLoading;
43
+ /**
44
+ * @param {Chunk} chunk chunk to check
45
+ * @returns {boolean} true, when the plugin is enabled for the chunk
46
+ */
47
+ const isEnabledForChunk = (chunk) => {
48
+ const options = chunk.getEntryOptions();
49
+ const chunkLoading =
50
+ options && options.chunkLoading !== undefined
51
+ ? options.chunkLoading
52
+ : globalChunkLoading;
53
+ return chunkLoading === this.chunkLoading;
54
+ };
55
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(
56
+ PLUGIN_NAME,
57
+ (chunk, set, { chunkGraph }) => {
58
+ if (!isEnabledForChunk(chunk)) return;
59
+ if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
60
+ set.add(RuntimeGlobals.startup);
77
61
  set.add(RuntimeGlobals.ensureChunk);
78
62
  set.add(RuntimeGlobals.ensureChunkIncludeEntries);
79
63
  compilation.addRuntimeModule(
80
64
  chunk,
81
- new StartupEntrypointRuntimeModule(this.asyncChunkLoading)
65
+ new StartupChunkDependenciesRuntimeModule(this.asyncChunkLoading)
82
66
  );
83
- });
84
- }
85
- );
67
+ }
68
+ }
69
+ );
70
+ compilation.hooks.runtimeRequirementInTree
71
+ .for(RuntimeGlobals.startupEntrypoint)
72
+ .tap(PLUGIN_NAME, (chunk, set) => {
73
+ if (!isEnabledForChunk(chunk)) return;
74
+ set.add(RuntimeGlobals.require);
75
+ set.add(RuntimeGlobals.ensureChunk);
76
+ set.add(RuntimeGlobals.ensureChunkIncludeEntries);
77
+ compilation.addRuntimeModule(
78
+ chunk,
79
+ new StartupEntrypointRuntimeModule(this.asyncChunkLoading)
80
+ );
81
+ });
82
+ });
86
83
  }
87
84
  }
88
85
 
@@ -28,9 +28,9 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
28
28
  generate() {
29
29
  const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
30
30
  const chunk = /** @type {Chunk} */ (this.chunk);
31
- const chunkIds = Array.from(
32
- chunkGraph.getChunkEntryDependentChunksIterable(chunk)
33
- ).map(chunk => chunk.id);
31
+ const chunkIds = [
32
+ ...chunkGraph.getChunkEntryDependentChunksIterable(chunk)
33
+ ].map((chunk) => chunk.id);
34
34
  const compilation = /** @type {Compilation} */ (this.compilation);
35
35
  const { runtimeTemplate } = compilation;
36
36
  return Template.asString([
@@ -38,11 +38,12 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
38
38
  `${RuntimeGlobals.startup} = ${runtimeTemplate.basicFunction(
39
39
  "",
40
40
  !this.asyncChunkLoading
41
- ? chunkIds
42
- .map(
43
- id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
44
- )
45
- .concat("return next();")
41
+ ? [
42
+ ...chunkIds.map(
43
+ (id) => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
44
+ ),
45
+ "return next();"
46
+ ]
46
47
  : chunkIds.length === 1
47
48
  ? `return ${RuntimeGlobals.ensureChunk}(${JSON.stringify(
48
49
  chunkIds[0]
@@ -60,7 +61,7 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
60
61
  Template.indent(
61
62
  chunkIds
62
63
  .map(
63
- id =>
64
+ (id) =>
64
65
  `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)})`
65
66
  )
66
67
  .join(",\n")
@@ -8,7 +8,6 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
10
  /** @typedef {import("../Compilation")} Compilation */
11
- /** @typedef {import("../MainTemplate")} MainTemplate */
12
11
 
13
12
  class StartupEntrypointRuntimeModule extends RuntimeModule {
14
13
  /**
@@ -7,8 +7,6 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
- /** @typedef {import("../Compilation")} Compilation */
11
-
12
10
  class SystemContextRuntimeModule extends RuntimeModule {
13
11
  constructor() {
14
12
  super("__system_context__");