@depup/webpack 5.109.2-depup.0 → 5.110.1-depup.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 (640) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +26 -17
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +117 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +50 -13
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +101 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +32 -47
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +141 -85
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +332 -169
  89. package/lib/RuntimeTemplate.js +2792 -352
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +261 -79
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +36 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +57 -24
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +168 -88
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5324 -0
  160. package/lib/css/syntax.js +9579 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +13 -10
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +27 -19
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +2 -2
  230. package/lib/dependencies/ImportDependency.js +24 -20
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +49 -35
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  290. package/lib/dependencies/WorkerDependency.js +28 -22
  291. package/lib/dependencies/WorkletDependency.js +15 -14
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/processExportInfo.js +5 -5
  294. package/lib/dll/DelegatedModule.js +34 -22
  295. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  296. package/lib/dll/DelegatedPlugin.js +2 -2
  297. package/lib/dll/DllEntryPlugin.js +2 -2
  298. package/lib/dll/DllModule.js +22 -15
  299. package/lib/dll/DllModuleFactory.js +7 -3
  300. package/lib/dll/DllPlugin.js +7 -5
  301. package/lib/dll/DllReferencePlugin.js +10 -7
  302. package/lib/dll/LibManifestPlugin.js +5 -5
  303. package/lib/electron/ElectronTargetPlugin.js +53 -49
  304. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  305. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  306. package/lib/errors/BroadContextsWarning.js +43 -0
  307. package/lib/errors/BuildCycleError.js +1 -1
  308. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  309. package/lib/errors/ChunkRenderError.js +1 -1
  310. package/lib/errors/CircularDependenciesWarning.js +38 -0
  311. package/lib/errors/CodeGenerationError.js +1 -1
  312. package/lib/errors/CommentCompilationWarning.js +1 -1
  313. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  314. package/lib/errors/DuplicateModulesWarning.js +45 -0
  315. package/lib/errors/DynamicExportsWarning.js +30 -0
  316. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  317. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  318. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  319. package/lib/errors/EvalUsageWarning.js +28 -0
  320. package/lib/errors/HookWebpackError.js +5 -5
  321. package/lib/errors/HotspotsWarning.js +57 -0
  322. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  323. package/lib/errors/InlinedAssetsWarning.js +36 -0
  324. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  325. package/lib/errors/LargeModulesWarning.js +45 -0
  326. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  327. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  328. package/lib/errors/MixedExportsWarning.js +41 -0
  329. package/lib/errors/ModuleDependencyError.js +13 -16
  330. package/lib/errors/ModuleDependencyWarning.js +5 -15
  331. package/lib/errors/ModuleHashingError.js +1 -1
  332. package/lib/errors/ModuleNotFoundError.js +2 -2
  333. package/lib/errors/ModuleParseError.js +1 -2
  334. package/lib/errors/ModuleRestoreError.js +1 -1
  335. package/lib/errors/ModuleStoreError.js +1 -1
  336. package/lib/errors/NodeStuffInWebError.js +1 -1
  337. package/lib/errors/OsDependentRuleWarning.js +31 -0
  338. package/lib/errors/PureAnnotationsWarning.js +36 -0
  339. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  340. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  341. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  342. package/lib/errors/TinyChunksWarning.js +40 -0
  343. package/lib/errors/TopLevelThisWarning.js +34 -0
  344. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  345. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  346. package/lib/errors/UnusedAliasesWarning.js +29 -0
  347. package/lib/errors/UnusedDefinesWarning.js +29 -0
  348. package/lib/errors/UnusedExternalsWarning.js +29 -0
  349. package/lib/errors/UnusedReexportsWarning.js +42 -0
  350. package/lib/errors/UnusedRuleWarning.js +29 -0
  351. package/lib/errors/WebpackError.js +9 -5
  352. package/lib/errors/deriveStackFromNestedError.js +90 -0
  353. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  354. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  355. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  356. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +155 -62
  357. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  358. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  359. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  360. package/lib/hmr/lazyCompilationBackend.js +9 -6
  361. package/lib/hmr/parserHooks.js +56 -0
  362. package/lib/html/HtmlGenerator.js +277 -77
  363. package/lib/html/HtmlModule.js +7 -3
  364. package/lib/html/HtmlModulesPlugin.js +282 -162
  365. package/lib/html/HtmlParser.js +31 -86
  366. package/lib/html/data.js +1928 -0
  367. package/lib/html/htmlMinify.js +288 -0
  368. package/lib/html/syntax.js +5557 -1155
  369. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  370. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  371. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  372. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  373. package/lib/ids/IdHelpers.js +7 -8
  374. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  375. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  376. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  377. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  378. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  379. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  380. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  381. package/lib/index.js +10 -0
  382. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  383. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  384. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  385. package/lib/javascript/ChunkHelpers.js +1 -1
  386. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  387. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  388. package/lib/javascript/JavascriptGenerator.js +65 -165
  389. package/lib/javascript/JavascriptModule.js +9 -3
  390. package/lib/javascript/JavascriptModulesPlugin.js +98 -113
  391. package/lib/javascript/JavascriptParser.js +242 -99
  392. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  393. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  394. package/lib/javascript/StartupHelpers.js +55 -9
  395. package/lib/javascript/syntax.js +2678 -232
  396. package/lib/json/JsonData.js +8 -4
  397. package/lib/json/JsonGenerator.js +38 -16
  398. package/lib/json/JsonModule.js +7 -3
  399. package/lib/json/JsonModulesPlugin.js +1 -1
  400. package/lib/json/JsonParser.js +5 -6
  401. package/lib/library/AbstractLibraryPlugin.js +20 -14
  402. package/lib/library/AmdLibraryPlugin.js +11 -7
  403. package/lib/library/AssignLibraryPlugin.js +19 -13
  404. package/lib/library/EnableLibraryPlugin.js +2 -2
  405. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  406. package/lib/library/JsonpLibraryPlugin.js +11 -7
  407. package/lib/library/ModuleLibraryPlugin.js +256 -64
  408. package/lib/library/SystemLibraryPlugin.js +12 -8
  409. package/lib/library/UmdLibraryPlugin.js +62 -25
  410. package/lib/loaders/LoaderRunner.js +14 -1
  411. package/lib/loaders/loadLoader.js +8 -4
  412. package/lib/logging/createConsoleLogger.js +7 -4
  413. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  414. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  415. package/lib/node/NodeSourcePlugin.js +1 -1
  416. package/lib/node/NodeTargetPlugin.js +4 -3
  417. package/lib/node/NodeTemplatePlugin.js +1 -1
  418. package/lib/node/NodeWatchFileSystem.js +70 -9
  419. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  420. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
  421. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  422. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/nodeConsole.js +7 -3
  424. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  425. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  426. package/lib/optimize/ConcatenatedModule.js +985 -470
  427. package/lib/optimize/ConstExportsPlugin.js +11 -7
  428. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  429. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  430. package/lib/optimize/InlineExports.js +9 -5
  431. package/lib/optimize/InnerGraph.js +28 -12
  432. package/lib/optimize/InnerGraphPlugin.js +23 -18
  433. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  434. package/lib/optimize/MangleExportsPlugin.js +7 -8
  435. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  436. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  437. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  438. package/lib/optimize/RealContentHashPlugin.js +10 -6
  439. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  440. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  441. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  442. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  443. package/lib/optimize/SplitChunksPlugin.js +86 -24
  444. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  445. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  446. package/lib/performance/BroadContextsPlugin.js +142 -0
  447. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  448. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  449. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  450. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  451. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  452. package/lib/performance/DynamicExportsPlugin.js +120 -0
  453. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  454. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  455. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  456. package/lib/performance/EvalUsagePlugin.js +115 -0
  457. package/lib/performance/HotspotsPlugin.js +296 -0
  458. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  459. package/lib/performance/LargeModulesPlugin.js +126 -0
  460. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  461. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  462. package/lib/performance/MixedExportsPlugin.js +136 -0
  463. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  464. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  465. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  466. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  467. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  468. package/lib/performance/SizeLimitsPlugin.js +139 -7
  469. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  470. package/lib/performance/TinyChunksPlugin.js +128 -0
  471. package/lib/performance/TopLevelThisPlugin.js +208 -0
  472. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  473. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  474. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  475. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  476. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  477. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  478. package/lib/performance/getModuleSize.js +22 -0
  479. package/lib/performance/getSourceModules.js +22 -0
  480. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  481. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  482. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  483. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  484. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  485. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ResourceHintPlugin.js +295 -78
  487. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  488. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  489. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  490. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  491. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  492. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  493. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  494. package/lib/rules/RuleSetCompiler.js +146 -12
  495. package/lib/rules/UseEffectRulePlugin.js +18 -11
  496. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  497. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  498. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  499. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  500. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  501. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  502. package/lib/runtime/CompatRuntimeModule.js +5 -3
  503. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  504. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  505. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  506. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  507. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  508. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  509. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  510. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  511. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  512. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  513. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  514. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  515. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  516. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  517. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  518. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  519. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  520. package/lib/runtime/NonceRuntimeModule.js +10 -0
  521. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  522. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  523. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  524. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  525. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  526. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  527. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  528. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  529. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  530. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  531. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  532. package/lib/runtime/baseUri.js +63 -0
  533. package/lib/schemes/DataUriPlugin.js +1 -1
  534. package/lib/schemes/FileUriPlugin.js +1 -1
  535. package/lib/schemes/HttpUriPlugin.js +24 -15
  536. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  537. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  538. package/lib/serialization/BinaryMiddleware.js +4 -4
  539. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  540. package/lib/serialization/FileMiddleware.js +7 -7
  541. package/lib/serialization/ObjectMiddleware.js +139 -114
  542. package/lib/serialization/PlainObjectSerializer.js +19 -16
  543. package/lib/sharing/ConsumeSharedModule.js +30 -21
  544. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  545. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  546. package/lib/sharing/ProvideSharedModule.js +25 -16
  547. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  548. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  549. package/lib/sharing/SharePlugin.js +17 -5
  550. package/lib/sharing/ShareRuntimeModule.js +4 -4
  551. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  552. package/lib/sharing/utils.js +1 -3
  553. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  554. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  555. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  556. package/lib/stats/StatsFactory.js +25 -26
  557. package/lib/stats/StatsPrinter.js +16 -12
  558. package/lib/typescript/TypeScriptPlugin.js +12 -14
  559. package/lib/url/URLParserPlugin.js +26 -13
  560. package/lib/util/AsyncQueue.js +4 -3
  561. package/lib/util/Hash.js +5 -1
  562. package/lib/util/LazySet.js +35 -22
  563. package/lib/util/LocConverter.js +36 -13
  564. package/lib/util/SourceProcessor.js +1050 -24
  565. package/lib/util/StringXor.js +1 -1
  566. package/lib/util/chainedImports.js +9 -5
  567. package/lib/util/cleverMerge.js +1 -1
  568. package/lib/util/comparators.js +45 -14
  569. package/lib/util/concatenate.js +203 -77
  570. package/lib/util/conventions.js +5 -1
  571. package/lib/util/createHash.js +2 -2
  572. package/lib/util/createHooksRegistry.js +8 -10
  573. package/lib/util/dataURL.js +225 -1
  574. package/lib/util/extractSourceMap.js +4 -3
  575. package/lib/util/findCaseMismatch.js +139 -0
  576. package/lib/util/formatLocation.js +1 -2
  577. package/lib/util/fs.js +22 -5
  578. package/lib/util/globUtils.js +298 -24
  579. package/lib/util/hash/BatchedHash.js +5 -1
  580. package/lib/util/hash/BulkUpdateHash.js +5 -1
  581. package/lib/util/hash/DebugHash.js +5 -1
  582. package/lib/util/hash/hash-digest.js +6 -2
  583. package/lib/util/identifier.js +4 -0
  584. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  585. package/lib/util/internalSerializables.js +6 -0
  586. package/lib/util/lazyModule.js +56 -0
  587. package/lib/util/makeSerializable.js +7 -3
  588. package/lib/util/matchAlias.js +25 -0
  589. package/lib/util/mimeTypes.js +11 -5
  590. package/lib/util/nonNumericOnlyHash.js +4 -3
  591. package/lib/util/parseJson.js +5 -3
  592. package/lib/util/preloadModuleType.js +32 -0
  593. package/lib/util/registerExternalSerializer.js +7 -5
  594. package/lib/util/runtime.js +2 -2
  595. package/lib/util/semver.js +1 -1
  596. package/lib/util/serialization.js +28 -28
  597. package/lib/util/source.js +2 -2
  598. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  599. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  600. package/lib/wasm/wasmModuleFilename.js +54 -0
  601. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  602. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  603. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  604. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  605. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  606. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  607. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  608. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  609. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  610. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  611. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  612. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  613. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  614. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  615. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  616. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  617. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  618. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  619. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  620. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  621. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  622. package/lib/web/JsonpTemplatePlugin.js +2 -2
  623. package/lib/webpack.js +22 -11
  624. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  625. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  626. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  627. package/module.d.ts +1 -0
  628. package/package.json +32 -25
  629. package/schemas/WebpackOptions.check.js +1 -1
  630. package/schemas/WebpackOptions.json +670 -36
  631. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  632. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  634. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  635. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  636. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  637. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  639. package/types.d.ts +3144 -454
  640. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -6,12 +6,19 @@
6
6
  "use strict";
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
- const ExportWebpackRequireRuntimeModule = require("./ExportWebpackRequireRuntimeModule");
10
- const ModuleChunkLoadingRuntimeModule = require("./ModuleChunkLoadingRuntimeModule");
9
+ const lazyModule = require("../util/lazyModule");
11
10
 
12
- /** @typedef {import("../Chunk")} Chunk */
13
- /** @typedef {import("../Compiler")} Compiler */
14
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
11
+ /** @import Chunk from "../Chunk" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { RuntimeRequirements } from "../Module" */
14
+
15
+ // only a chunk that loads other chunks at runtime emits these
16
+ const getExportWebpackRequireRuntimeModule = lazyModule(() =>
17
+ require("./ExportWebpackRequireRuntimeModule")
18
+ );
19
+ const getModuleChunkLoadingRuntimeModule = lazyModule(() =>
20
+ require("./ModuleChunkLoadingRuntimeModule")
21
+ );
15
22
 
16
23
  const PLUGIN_NAME = "ModuleChunkLoadingPlugin";
17
24
 
@@ -48,65 +55,89 @@ class ModuleChunkLoadingPlugin {
48
55
  if (onceForChunkSet.has(chunk)) return;
49
56
  onceForChunkSet.add(chunk);
50
57
  if (!isEnabledForChunk(chunk)) return;
51
- set.add(RuntimeGlobals.moduleFactoriesAddOnly);
52
- set.add(RuntimeGlobals.hasOwnProperty);
53
- compilation.addRuntimeModule(
58
+ compilation.addLazyRuntimeModule(
54
59
  chunk,
55
- new ModuleChunkLoadingRuntimeModule(set)
60
+ getModuleChunkLoadingRuntimeModule,
61
+ (Ctor) => new Ctor(set)
56
62
  );
57
63
  };
58
- compilation.hooks.runtimeRequirementInTree
59
- .for(RuntimeGlobals.ensureChunkHandlers)
60
- .tap(PLUGIN_NAME, handler);
61
- compilation.hooks.runtimeRequirementInTree
62
- .for(RuntimeGlobals.baseURI)
63
- .tap(PLUGIN_NAME, handler);
64
- compilation.hooks.runtimeRequirementInTree
65
- .for(RuntimeGlobals.externalInstallChunk)
66
- .tap(PLUGIN_NAME, handler);
67
- compilation.hooks.runtimeRequirementInTree
68
- .for(RuntimeGlobals.analyzableChunkImport)
69
- .tap(PLUGIN_NAME, handler);
70
- compilation.hooks.runtimeRequirementInTree
71
- .for(RuntimeGlobals.onChunksLoaded)
72
- .tap(PLUGIN_NAME, handler);
73
- compilation.hooks.runtimeRequirementInTree
74
- .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
75
- .tap(PLUGIN_NAME, handler);
76
- compilation.hooks.runtimeRequirementInTree
77
- .for(RuntimeGlobals.hmrDownloadManifest)
78
- .tap(PLUGIN_NAME, handler);
64
+ /**
65
+ * Installing a chunk is the only part that writes the module factories and
66
+ * looks a chunk id up; a base uri, `onChunksLoaded` or the hot manifest come
67
+ * without either. Kept off `handler`, which runs once per chunk and so cannot
68
+ * see which of the requirements below the chunk ends up with.
69
+ * @param {Chunk} chunk chunk to check
70
+ * @param {RuntimeRequirements} set runtime requirements
71
+ */
72
+ const installHandler = (chunk, set) => {
73
+ if (!isEnabledForChunk(chunk)) return;
74
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
75
+ set.add(RuntimeGlobals.hasOwnProperty);
76
+ };
77
+ for (const requirement of [
78
+ RuntimeGlobals.ensureChunkHandlers,
79
+ RuntimeGlobals.baseURI,
80
+ RuntimeGlobals.externalInstallChunk,
81
+ RuntimeGlobals.analyzableChunkImport,
82
+ RuntimeGlobals.onChunksLoaded,
83
+ RuntimeGlobals.hmrDownloadUpdateHandlers,
84
+ RuntimeGlobals.hmrDownloadManifest
85
+ ]) {
86
+ compilation.hooks.runtimeRequirementInTree
87
+ .for(requirement)
88
+ .tap(PLUGIN_NAME, handler);
89
+ }
90
+ for (const requirement of [
91
+ RuntimeGlobals.ensureChunkHandlers,
92
+ RuntimeGlobals.externalInstallChunk,
93
+ RuntimeGlobals.analyzableChunkImport,
94
+ RuntimeGlobals.hmrDownloadUpdateHandlers
95
+ ]) {
96
+ compilation.hooks.runtimeRequirementInTree
97
+ .for(requirement)
98
+ .tap(PLUGIN_NAME, installHandler);
99
+ }
79
100
  compilation.hooks.runtimeRequirementInTree
80
101
  .for(RuntimeGlobals.externalInstallChunk)
81
102
  .tap(PLUGIN_NAME, (chunk) => {
82
103
  if (!isEnabledForChunk(chunk)) return;
83
- compilation.addRuntimeModule(
104
+ compilation.addLazyRuntimeModule(
84
105
  chunk,
85
- new ExportWebpackRequireRuntimeModule()
106
+ getExportWebpackRequireRuntimeModule,
107
+ (Ctor) => new Ctor()
86
108
  );
87
109
  });
88
110
 
89
- // The prefetch/preload handlers build the chunk URL themselves, so they need
90
- // the public path and script filename directly — without relying on
91
- // `ensureChunkHandlers` to pull them in (an analyzable `import()` may replace it).
92
- compilation.hooks.runtimeRequirementInTree
93
- .for(RuntimeGlobals.prefetchChunkHandlers)
94
- .tap(PLUGIN_NAME, (chunk, set) => {
95
- if (!isEnabledForChunk(chunk)) return;
96
- set.add(RuntimeGlobals.publicPath);
97
- set.add(RuntimeGlobals.getChunkScriptFilename);
98
- });
99
-
100
- compilation.hooks.runtimeRequirementInTree
101
- .for(RuntimeGlobals.preloadChunkHandlers)
102
- .tap(PLUGIN_NAME, (chunk, set) => {
103
- if (!isEnabledForChunk(chunk)) return;
104
- set.add(RuntimeGlobals.publicPath);
105
- set.add(RuntimeGlobals.getChunkScriptFilename);
106
- });
111
+ // A handler that builds its url asks for both directly: an analyzable
112
+ // `import()` may replace `ensureChunkHandlers`, which otherwise pulls them in.
113
+ for (const requirement of [
114
+ RuntimeGlobals.prefetchChunkHandlers,
115
+ RuntimeGlobals.preloadChunkHandlers
116
+ ]) {
117
+ compilation.hooks.runtimeRequirementInTree
118
+ .for(requirement)
119
+ .tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
120
+ if (!isEnabledForChunk(chunk)) return;
121
+ // A baked url carries where the chunk is, so neither is read for it.
122
+ // Asked as the runtime module asks, so the two always agree.
123
+ if (
124
+ compilation.runtimeTemplate.analyzableChunkScriptUrls(
125
+ chunk,
126
+ chunkGraph,
127
+ set
128
+ ) !== null
129
+ ) {
130
+ return;
131
+ }
132
+ set.add(RuntimeGlobals.publicPath);
133
+ set.add(RuntimeGlobals.getChunkScriptFilename);
134
+ });
135
+ }
107
136
 
137
+ // Keyed on `ensureChunk`, not on the handler map: only the runtime chunk loader
138
+ // builds a URL from a chunk id, and an analyzable `import()` carries its own.
108
139
  compilation.hooks.runtimeRequirementInTree
109
- .for(RuntimeGlobals.ensureChunkHandlers)
140
+ .for(RuntimeGlobals.ensureChunk)
110
141
  .tap(PLUGIN_NAME, (chunk, set) => {
111
142
  if (!isEnabledForChunk(chunk)) return;
112
143
 
@@ -123,6 +154,13 @@ class ModuleChunkLoadingPlugin {
123
154
  if (!isEnabledForChunk(chunk)) return;
124
155
  set.add(RuntimeGlobals.publicPath);
125
156
  set.add(RuntimeGlobals.getChunkUpdateScriptFilename);
157
+ // The hot runtime force-loads through the handler map by bare chunk id, so
158
+ // the map and loader stay however analyzable — but only where there are
159
+ // async chunks to force-load.
160
+ if (chunk.hasAsyncChunks()) {
161
+ set.add(RuntimeGlobals.ensureChunkHandlers);
162
+ set.add(RuntimeGlobals.getChunkScriptFilename);
163
+ }
126
164
  set.add(RuntimeGlobals.moduleCache);
127
165
  set.add(RuntimeGlobals.hmrModuleData);
128
166
  set.add(RuntimeGlobals.moduleFactoriesAddOnly);
@@ -5,25 +5,25 @@
5
5
  "use strict";
6
6
 
7
7
  const { SyncWaterfallHook } = require("tapable");
8
- /** @typedef {import("../Compilation")} Compilation */
8
+ /** @import Compilation from "../Compilation" */
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const RuntimeModule = require("../RuntimeModule");
11
11
  const Template = require("../Template");
12
12
  const {
13
13
  generateJavascriptHMR
14
14
  } = require("../hmr/JavascriptHotModuleReplacementHelper");
15
- const {
16
- chunkHasJs,
17
- getChunkFilenameTemplate
18
- } = require("../javascript/JavascriptModulesPlugin");
15
+ const { chunkHasJs } = require("../javascript/JavascriptModulesPlugin");
19
16
  const { getInitialChunkIds } = require("../javascript/StartupHelpers");
17
+ const { renderBaseUri } = require("../runtime/baseUri");
20
18
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
21
19
  const createHooksRegistry = require("../util/createHooksRegistry");
22
- const { getUndoPath } = require("../util/identifier");
20
+ const memoize = require("../util/memoize");
21
+
22
+ const getAPIPlugin = memoize(() => require("../APIPlugin"));
23
23
 
24
- /** @typedef {import("../Chunk")} Chunk */
25
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
26
- /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
24
+ /** @import Chunk from "../Chunk" */
25
+ /** @import ChunkGraph from "../ChunkGraph" */
26
+ /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
27
27
 
28
28
  const createCompilationHooks = () => ({
29
29
  /**
@@ -62,16 +62,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
62
62
  */
63
63
  _generateBaseUri(chunk, rootOutputDir) {
64
64
  const options = chunk.getEntryOptions();
65
- if (options && options.baseUri) {
66
- return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
67
- }
68
65
  const compilation = /** @type {Compilation} */ (this.compilation);
69
66
  const {
70
67
  outputOptions: { importMetaName }
71
68
  } = compilation;
72
- return `${RuntimeGlobals.baseURI} = new URL(${JSON.stringify(
73
- rootOutputDir
74
- )}, ${importMetaName}.url);`;
69
+ return renderBaseUri(
70
+ options ? options.baseUri : undefined,
71
+ `new URL(${JSON.stringify(rootOutputDir)}, ${importMetaName}.url)`
72
+ );
75
73
  }
76
74
 
77
75
  /**
@@ -85,8 +83,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
85
83
  const environment = compilation.outputOptions.environment;
86
84
  const {
87
85
  runtimeTemplate,
88
- outputOptions: { importFunctionName, crossOriginLoading, charset }
86
+ outputOptions: {
87
+ importFunctionName,
88
+ crossOriginLoading,
89
+ charset,
90
+ resourceHints
91
+ }
89
92
  } = compilation;
93
+ const dedupePrefetch = Boolean(resourceHints && resourceHints.dedupe);
90
94
  const fn = RuntimeGlobals.ensureChunkHandlers;
91
95
  const withBaseURI = this._runtimeRequirements.has(RuntimeGlobals.baseURI);
92
96
  const withExternalInstallChunk = this._runtimeRequirements.has(
@@ -107,6 +111,11 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
107
111
  const withHmrManifest = this._runtimeRequirements.has(
108
112
  RuntimeGlobals.hmrDownloadManifest
109
113
  );
114
+ // `.f.j` serves `ensureChunk`: an analyzable import dispatches every handler but
115
+ // this one. HMR's force-load knows only a chunk id, so it needs the loader too.
116
+ const withJsLoading =
117
+ withLoading &&
118
+ (this._runtimeRequirements.has(RuntimeGlobals.ensureChunk) || withHmr);
110
119
  const { linkPreload, linkPrefetch } =
111
120
  ModuleChunkLoadingRuntimeModule.getCompilationHooks(compilation);
112
121
  const isNeutralPlatform = runtimeTemplate.isNeutralPlatform();
@@ -118,22 +127,35 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
118
127
  (environment.document || isNeutralPlatform) &&
119
128
  this._runtimeRequirements.has(RuntimeGlobals.preloadChunkHandlers) &&
120
129
  chunk.hasChildByOrder(chunkGraph, "preload", true, chunkHasJs);
130
+ // Under module output each hinted chunk is a known file, so the urls are written
131
+ // out and read by id rather than built from the chunk id at runtime.
132
+ const chunkUrls =
133
+ withPrefetch || withPreload
134
+ ? runtimeTemplate.analyzableChunkScriptUrls(
135
+ chunk,
136
+ chunkGraph,
137
+ this._runtimeRequirements,
138
+ this
139
+ )
140
+ : null;
121
141
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
122
142
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
123
143
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
124
144
 
125
- const outputName = compilation.getPath(
126
- getChunkFilenameTemplate(chunk, compilation.outputOptions),
127
- {
128
- chunk,
129
- contentHashType: "javascript"
130
- }
131
- );
132
- const rootOutputDir = getUndoPath(
133
- outputName,
134
- compilation.outputOptions.path,
135
- true
136
- );
145
+ const rootOutputDir = runtimeTemplate.chunkRootOutputDir(chunk, true);
146
+
147
+ const { publicPath } = compilation.outputOptions;
148
+ // `import()` resolves a bare specifier as a package name, so a public path that
149
+ // leaves one — empty, or a plain relative directory — needs an explicit `./`.
150
+ // A runtime override can swap in an absolute path, so leave those alone.
151
+ const chunkImportBase =
152
+ publicPath === "auto"
153
+ ? JSON.stringify(rootOutputDir)
154
+ : typeof publicPath === "string" &&
155
+ !/^(?:\.{0,2}\/|[a-zA-Z][\w+.-]*:)/.test(publicPath) &&
156
+ !getAPIPlugin().usesRuntimePublicPathOverride(compilation)
157
+ ? `"./" + ${RuntimeGlobals.publicPath}`
158
+ : RuntimeGlobals.publicPath;
137
159
 
138
160
  const stateExpression = withHmr
139
161
  ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_module`
@@ -146,19 +168,58 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
146
168
  ",\n"
147
169
  )
148
170
  )}\n}`;
171
+ // Every part below that reads the table. A chunk asking only for `.b` gets this
172
+ // module for the base uri alone, and then has nothing to look up.
173
+ const withInstalledChunks =
174
+ withLoading ||
175
+ withExternalInstallChunk ||
176
+ withAnalyzableImport ||
177
+ withOnChunkLoad ||
178
+ withHmr ||
179
+ withPrefetch ||
180
+ withPreload;
181
+ // The url is read through a thunk so a runtime hinting at many chunks builds only
182
+ // the one it appends.
183
+ /**
184
+ * @param {string} id expression naming the chunk whose url is wanted
185
+ * @returns {string} expression evaluating to its url
186
+ */
187
+ const chunkUrl = (id) =>
188
+ chunkUrls === null
189
+ ? `${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(${id})`
190
+ : `chunkUrls[${id}]()`;
149
191
  return Template.asString([
150
192
  withBaseURI
151
193
  ? this._generateBaseUri(chunk, rootOutputDir)
152
194
  : "// no baseURI",
153
195
  "",
154
- "// object to store loaded and loading chunks",
155
- "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
156
- "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
157
- `${cst} installedChunks = ${
158
- stateExpression
159
- ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
160
- : installedChunksObject
161
- };`,
196
+ ...(chunkUrls
197
+ ? [
198
+ `${cst} chunkUrls = {\n${Template.indent(
199
+ Array.from(
200
+ chunkUrls,
201
+ ([id, url]) =>
202
+ `${JSON.stringify(String(id))}: ${runtimeTemplate.returningFunction(url)}`
203
+ ).join(",\n")
204
+ )}\n};`,
205
+ ""
206
+ ]
207
+ : []),
208
+ withInstalledChunks
209
+ ? Template.asString([
210
+ "// object to store loaded and loading chunks",
211
+ "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
212
+ "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
213
+ `${cst} installedChunks = ${
214
+ stateExpression
215
+ ? runtimeTemplate.assignOr(
216
+ stateExpression,
217
+ installedChunksObject
218
+ )
219
+ : installedChunksObject
220
+ };`
221
+ ])
222
+ : "// no installed chunks",
162
223
  "",
163
224
  withLoading || withExternalInstallChunk || withAnalyzableImport
164
225
  ? `${cst} installChunk = ${runtimeTemplate.basicFunction("data", [
@@ -189,14 +250,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
189
250
  `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) && installedChunks[chunkId]) {`,
190
251
  Template.indent("installedChunks[chunkId][0]();"),
191
252
  "}",
192
- `installedChunks[${RuntimeGlobals.esmIds}[i]] = 0;`
253
+ "installedChunks[chunkId] = 0;"
193
254
  ]),
194
255
  "}",
195
256
  withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
196
257
  ])}`
197
258
  : "// no install chunk",
198
259
  "",
199
- withLoading
260
+ withJsLoading
200
261
  ? Template.asString([
201
262
  `${fn}.j = ${runtimeTemplate.basicFunction(
202
263
  "chunkId, promises",
@@ -219,11 +280,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
219
280
  : `if(${hasJsMatcher("chunkId")}) {`,
220
281
  Template.indent([
221
282
  "// setup Promise in chunk cache",
222
- `${lt} promise = ${importFunctionName}(${
223
- compilation.outputOptions.publicPath === "auto"
224
- ? JSON.stringify(rootOutputDir)
225
- : RuntimeGlobals.publicPath
226
- } + ${
283
+ `${lt} promise = ${importFunctionName}(${chunkImportBase} + ${
227
284
  RuntimeGlobals.getChunkScriptFilename
228
285
  }(chunkId)).then(installChunk, ${runtimeTemplate.basicFunction(
229
286
  "e",
@@ -265,6 +322,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
265
322
  hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
266
323
  }) {`,
267
324
  Template.indent([
325
+ // A hint is best-effort, so an id no url was written for is
326
+ // skipped rather than turned into a bogus href.
327
+ ...(chunkUrls ? ["if(!chunkUrls[chunkId]) return;"] : []),
268
328
  "installedChunks[chunkId] = null;",
269
329
  linkPrefetch.call(
270
330
  Template.asString([
@@ -282,10 +342,23 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
282
342
  "}",
283
343
  'link.rel = "prefetch";',
284
344
  'link.as = "script";',
285
- `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`
345
+ `link.href = ${chunkUrl("chunkId")};`
286
346
  ]),
287
347
  chunk
288
348
  ),
349
+ dedupePrefetch
350
+ ? Template.asString([
351
+ // Chrome re-requests a resource when a prefetch link is added
352
+ // after it was already (pre)loaded via markup; skip in that case.
353
+ `${cst} links = document.getElementsByTagName("link");`,
354
+ `for(${lt} i = 0; i < links.length; i++) {`,
355
+ Template.indent([
356
+ `${cst} l = links[i];`,
357
+ 'if(l.href === link.href && (l.rel === "prefetch" || l.rel === "preload" || l.rel === "modulepreload")) return;'
358
+ ]),
359
+ "}"
360
+ ])
361
+ : "",
289
362
  "document.head.appendChild(link);"
290
363
  ]),
291
364
  "}"
@@ -306,6 +379,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
306
379
  hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
307
380
  }) {`,
308
381
  Template.indent([
382
+ // A hint is best-effort, so an id no url was written for is
383
+ // skipped rather than turned into a bogus href.
384
+ ...(chunkUrls ? ["if(!chunkUrls[chunkId]) return;"] : []),
309
385
  "installedChunks[chunkId] = null;",
310
386
  linkPreload.call(
311
387
  Template.asString([
@@ -317,7 +393,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
317
393
  ),
318
394
  "}",
319
395
  'link.rel = "modulepreload";',
320
- `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
396
+ `link.href = ${chunkUrl("chunkId")};`,
321
397
  crossOriginLoading
322
398
  ? crossOriginLoading === "use-credentials"
323
399
  ? 'link.crossOrigin = "use-credentials";'
@@ -350,24 +426,41 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
350
426
  ? `${
351
427
  RuntimeGlobals.analyzableChunkImport
352
428
  } = ${runtimeTemplate.basicFunction("chunkId, importFn", [
353
- // A literal `import()` a foreign bundler can follow, wrapped to keep
354
- // `ensureChunk` timing and deduplication: resolved chunk → resolve now, in-flight →
355
- // reuse its promise, else run `importFn()` and install it.
429
+ // `ensureChunk` with its `.j` half replaced by a literal `import()` a foreign
430
+ // bundler can follow. The remaining handlers still run, so a chunk's css and
431
+ // its prefetch/preload children are not lost by taking this path.
432
+ `${lt} promises = [];`,
356
433
  `${lt} installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
357
- "if(installedChunkData === 0) return Promise.resolve();",
358
- "if(installedChunkData) return installedChunkData[1];",
359
- `${lt} promise = importFn().then(installChunk, ${runtimeTemplate.basicFunction(
360
- "e",
361
- [
362
- "if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
363
- "throw e;"
364
- ]
365
- )});`,
366
- `promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
367
- "installedChunkData = installedChunks[chunkId] = [resolve]",
368
- "resolve"
369
- )})]);`,
370
- "return (installedChunkData[1] = promise);"
434
+ 'if(installedChunkData !== 0) { // 0 means "already installed".',
435
+ Template.indent([
436
+ '// a Promise means "currently loading".',
437
+ "if(installedChunkData) {",
438
+ Template.indent(["promises.push(installedChunkData[1]);"]),
439
+ "} else {",
440
+ Template.indent([
441
+ `${lt} promise = importFn().then(installChunk, ${runtimeTemplate.basicFunction(
442
+ "e",
443
+ [
444
+ "if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
445
+ "throw e;"
446
+ ]
447
+ )});`,
448
+ `promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
449
+ "installedChunkData = installedChunks[chunkId] = [resolve]",
450
+ "resolve"
451
+ )})]);`,
452
+ "promises.push((installedChunkData[1] = promise));"
453
+ ]),
454
+ "}"
455
+ ]),
456
+ "}",
457
+ withLoading
458
+ ? `Object.keys(${fn}).forEach(${runtimeTemplate.basicFunction(
459
+ "key",
460
+ [`if(key !== "j") ${fn}[key](chunkId, promises);`]
461
+ )});`
462
+ : "// no other chunk loading handlers",
463
+ "return Promise.all(promises);"
371
464
  ])};`
372
465
  : "// no analyzable chunk import",
373
466
  "",
@@ -13,7 +13,9 @@
13
13
  /** @typedef {(status: string) => (Promise<void> | void)} StatusHandler */
14
14
  /** @typedef {Record<string, unknown>} ApplyOptions */
15
15
  /** @typedef {(reportError: (err: Error) => void) => Promise<ModuleId[]>} ApplyFn */
16
- /** @typedef {{ (id: ModuleId): unknown, e: (chunkId: ModuleId, fetchPriority?: string) => Promise<unknown>, [name: string]: unknown }} WebpackRequire */
16
+ /** @typedef {(chunkId: ModuleId, fetchPriority?: string) => Promise<unknown>} EnsureChunk */
17
+ /** @typedef {(chunkId: ModuleId, importFn: () => Promise<unknown>) => Promise<unknown>} AnalyzableChunkImport */
18
+ /** @typedef {{ (id: ModuleId): unknown, e?: EnsureChunk, ei?: AnalyzableChunkImport, [name: string]: unknown }} WebpackRequire */
17
19
 
18
20
  /**
19
21
  * @typedef {object} ApplyResult
@@ -185,13 +187,30 @@ module.exports = function () {
185
187
  };
186
188
  };
187
189
  for (var name in require) {
188
- if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
190
+ if (
191
+ Object.prototype.hasOwnProperty.call(require, name) &&
192
+ name !== "e" &&
193
+ name !== "ei"
194
+ ) {
189
195
  Object.defineProperty(fn, name, createPropertyDescriptor(name));
190
196
  }
191
197
  }
192
- /** @type {WebpackRequire} */ (fn).e = function (chunkId, fetchPriority) {
193
- return trackBlockingPromise(require.e(chunkId, fetchPriority));
194
- };
198
+ // A chunk load blocks the update until it settles, and `.ei` is the analyzable
199
+ // half of `.e`. A runtime that loads no chunks has neither to wrap.
200
+ if (require.e) {
201
+ /** @type {WebpackRequire} */ (fn).e = function (chunkId, fetchPriority) {
202
+ return trackBlockingPromise(
203
+ /** @type {EnsureChunk} */ (require.e)(chunkId, fetchPriority)
204
+ );
205
+ };
206
+ }
207
+ if (require.ei) {
208
+ /** @type {WebpackRequire} */ (fn).ei = function (chunkId, importFn) {
209
+ return trackBlockingPromise(
210
+ /** @type {AnalyzableChunkImport} */ (require.ei)(chunkId, importFn)
211
+ );
212
+ };
213
+ }
195
214
  return /** @type {WebpackRequire} */ (fn);
196
215
  }
197
216
 
@@ -9,7 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
- /** @typedef {import("../Compilation")} Compilation */
12
+ /** @import Compilation from "../Compilation" */
13
13
 
14
14
  class HotModuleReplacementRuntimeModule extends RuntimeModule {
15
15
  constructor() {
@@ -21,29 +21,41 @@ const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDepend
21
21
  const { resolveByProperty } = require("../util/cleverMerge");
22
22
  const { registerNotSerializable } = require("../util/serialization");
23
23
 
24
- /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
25
- /** @typedef {import("../Compilation")} Compilation */
26
- /** @typedef {import("../Compiler")} Compiler */
27
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
28
- /** @typedef {import("../Module").BuildCallback} BuildCallback */
29
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
30
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
31
- /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
32
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
33
- /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
34
- /** @typedef {import("../Module").LibIdent} LibIdent */
35
- /** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
36
- /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
37
- /** @typedef {import("../Module").SourceTypes} SourceTypes */
38
- /** @typedef {import("../Module").Sources} Sources */
39
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
40
- /** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
41
- /** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
42
- /** @typedef {import("../RequestShortener")} RequestShortener */
43
- /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
44
- /** @typedef {import("../dependencies/HarmonyImportDependency")} HarmonyImportDependency */
45
- /** @typedef {import("../util/Hash")} Hash */
46
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
24
+ /**
25
+ * @import {
26
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
27
+ * } from "../config/defaults"
28
+ */
29
+ /** @import Compilation from "../Compilation" */
30
+ /** @import Compiler from "../Compiler" */
31
+ /** @import { UpdateHashContext } from "../Dependency" */
32
+ /**
33
+ * @import {
34
+ * BuildCallback,
35
+ * BuildInfo,
36
+ * BuildMeta,
37
+ * CodeGenerationContext,
38
+ * CodeGenerationResult,
39
+ * LibIdentOptions,
40
+ * LibIdent,
41
+ * NeedBuildCallback,
42
+ * NeedBuildContext,
43
+ * SourceTypes,
44
+ * Sources,
45
+ * RuntimeRequirements
46
+ * } from "../Module"
47
+ */
48
+ /**
49
+ * @import {
50
+ * ModuleFactoryCallback,
51
+ * ModuleFactoryCreateData
52
+ * } from "../ModuleFactory"
53
+ */
54
+ /** @import RequestShortener from "../RequestShortener" */
55
+ /** @import { ResolverWithOptions } from "../ResolverFactory" */
56
+ /** @import HarmonyImportDependency from "../dependencies/HarmonyImportDependency" */
57
+ /** @import Hash from "../util/Hash" */
58
+ /** @import { InputFileSystem } from "../util/fs" */
47
59
 
48
60
  /** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
49
61
 
@@ -403,7 +415,8 @@ class LazyCompilationProxyModule extends Module {
403
415
  dependency: dep,
404
416
  strict: false, // TODO this should be inherited from the original module
405
417
  message: "import()",
406
- runtimeRequirements
418
+ runtimeRequirements,
419
+ originModule: this
407
420
  })};`,
408
421
  "if (module.hot) {",
409
422
  Template.indent([
@@ -547,6 +560,14 @@ class LazyCompilationPlugin {
547
560
  compiler.hooks.thisCompilation.tap(
548
561
  PLUGIN_NAME,
549
562
  (compilation, { normalModuleFactory }) => {
563
+ // A proxy already loaded in the client outlives the build that required
564
+ // `ensureChunk`, so every runtime keeps it or the proxy calls a dropped global.
565
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(
566
+ PLUGIN_NAME,
567
+ (chunk, set) => {
568
+ set.add(RuntimeGlobals.ensureChunk);
569
+ }
570
+ );
550
571
  normalModuleFactory.hooks.module.tap(
551
572
  PLUGIN_NAME,
552
573
  (module, createData, resolveData) => {