@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
@@ -7,20 +7,13 @@
7
7
 
8
8
  const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
- const { getPresentKinds } = require("../TemplatedPathPlugin");
10
+ const { usesFullHashDigest } = require("../TemplatedPathPlugin");
11
+ const { needsRuntimeFullHash } = require("../wasm/wasmModuleFilename");
11
12
  const AsyncWasmCompileRuntimeModule = require("../wasm-async/AsyncWasmCompileRuntimeModule");
12
13
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
13
14
 
14
- /** @typedef {import("../Chunk")} Chunk */
15
- /** @typedef {import("../Compiler")} Compiler */
16
-
17
- /**
18
- * The wasm runtime inlines `[fullhash]` as a runtime `getFullHash()` call, so
19
- * that runtime module must be requested (`[hash]` is the per-module hash here).
20
- * @param {string} filename `output.webassemblyModuleFilename`
21
- * @returns {boolean} whether it references the compilation `[fullhash]`
22
- */
23
- const usesFullHash = (filename) => getPresentKinds(filename).has("fullhash");
15
+ /** @import Chunk from "../Chunk" */
16
+ /** @import Compiler from "../Compiler" */
24
17
 
25
18
  const PLUGIN_NAME = "FetchCompileAsyncWasmPlugin";
26
19
 
@@ -53,13 +46,36 @@ class FetchCompileAsyncWasmPlugin {
53
46
  return wasmLoading === "fetch";
54
47
  };
55
48
  /**
56
- * Generates the runtime expression that downloads the emitted wasm
57
- * binary for an async WebAssembly module.
49
+ * Downloads the emitted wasm binary through the runtime
50
+ * `__webpack_require__.p` public path.
58
51
  * @param {string} path path to the wasm file
59
52
  * @returns {string} code to load the wasm file
60
53
  */
61
54
  const generateLoadBinaryCode = (path) =>
62
55
  `fetch(${RuntimeGlobals.publicPath} + ${path})`;
56
+ /**
57
+ * ESM-output variant: the analyzable `fetch(new URL(path, import.meta.url))`
58
+ * form (relative to the chunk, no runtime public-path global) that other
59
+ * bundlers and webpack itself can statically follow to the emitted wasm.
60
+ * @param {string} path path to the wasm file
61
+ * @returns {string} code to load the wasm file
62
+ */
63
+ const generateAnalyzableLoadBinaryCode = (path) =>
64
+ `fetch(${compilation.runtimeTemplate.importMetaUrl(path)})`;
65
+ /**
66
+ * The call site already passes a complete `URL`, so no base is applied here.
67
+ * @param {string} path the wasm binary's URL expression
68
+ * @returns {string} code to load the wasm file
69
+ */
70
+ const generateBakedLoadBinaryCode = (path) => `fetch(${path})`;
71
+ /**
72
+ * A settled public path is the same string the global would hold, and `fetch`
73
+ * reads both against the document, so the runtime module is not needed.
74
+ * @param {string} constant the settled public path
75
+ * @returns {(path: string) => string} code to load the wasm file
76
+ */
77
+ const generateConstantLoadBinaryCode = (constant) => (path) =>
78
+ `fetch(${JSON.stringify(constant)} + ${path})`;
63
79
 
64
80
  compilation.hooks.runtimeRequirementInTree
65
81
  .for(RuntimeGlobals.instantiateWasm)
@@ -73,16 +89,49 @@ class FetchCompileAsyncWasmPlugin {
73
89
  ) {
74
90
  return;
75
91
  }
76
- set.add(RuntimeGlobals.publicPath);
92
+ const baked = compilation.runtimeTemplate.supportsAnalyzable(
93
+ "wasm",
94
+ undefined,
95
+ undefined,
96
+ chunk.runtime
97
+ );
98
+ const analyzable =
99
+ compilation.runtimeTemplate.supportsAnalyzable("wasm-relative");
100
+ // A baked URL carries the public path already, and a settled one is written
101
+ // out below; only a path nothing but the global knows asks for it.
102
+ const constant =
103
+ baked || analyzable
104
+ ? undefined
105
+ : compilation.runtimeTemplate.constantPublicPath();
106
+ if (!baked && !analyzable && constant === undefined) {
107
+ set.add(RuntimeGlobals.publicPath);
108
+ }
109
+ // A baked URL is already a literal, so nothing interpolates the name.
77
110
  if (
78
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
111
+ !baked &&
112
+ needsRuntimeFullHash(
113
+ /** @type {string} */ (
114
+ compilation.outputOptions.webassemblyModuleFilename
115
+ )
116
+ )
79
117
  ) {
80
118
  set.add(RuntimeGlobals.getFullHash);
81
119
  }
82
120
  compilation.addRuntimeModule(
83
121
  chunk,
84
122
  new AsyncWasmLoadingRuntimeModule({
85
- generateLoadBinaryCode,
123
+ fullHashDigest: usesFullHashDigest(
124
+ /** @type {string} */ (
125
+ compilation.outputOptions.webassemblyModuleFilename
126
+ )
127
+ ),
128
+ generateLoadBinaryCode: baked
129
+ ? generateBakedLoadBinaryCode
130
+ : analyzable
131
+ ? generateAnalyzableLoadBinaryCode
132
+ : constant === undefined
133
+ ? generateLoadBinaryCode
134
+ : generateConstantLoadBinaryCode(constant),
86
135
  supportsStreaming: true
87
136
  })
88
137
  );
@@ -100,16 +149,49 @@ class FetchCompileAsyncWasmPlugin {
100
149
  ) {
101
150
  return;
102
151
  }
103
- set.add(RuntimeGlobals.publicPath);
152
+ const baked = compilation.runtimeTemplate.supportsAnalyzable(
153
+ "wasm",
154
+ undefined,
155
+ undefined,
156
+ chunk.runtime
157
+ );
158
+ const analyzable =
159
+ compilation.runtimeTemplate.supportsAnalyzable("wasm-relative");
160
+ // A baked URL carries the public path already, and a settled one is written
161
+ // out below; only a path nothing but the global knows asks for it.
162
+ const constant =
163
+ baked || analyzable
164
+ ? undefined
165
+ : compilation.runtimeTemplate.constantPublicPath();
166
+ if (!baked && !analyzable && constant === undefined) {
167
+ set.add(RuntimeGlobals.publicPath);
168
+ }
169
+ // A baked URL is already a literal, so nothing interpolates the name.
104
170
  if (
105
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
171
+ !baked &&
172
+ needsRuntimeFullHash(
173
+ /** @type {string} */ (
174
+ compilation.outputOptions.webassemblyModuleFilename
175
+ )
176
+ )
106
177
  ) {
107
178
  set.add(RuntimeGlobals.getFullHash);
108
179
  }
109
180
  compilation.addRuntimeModule(
110
181
  chunk,
111
182
  new AsyncWasmCompileRuntimeModule({
112
- generateLoadBinaryCode,
183
+ fullHashDigest: usesFullHashDigest(
184
+ /** @type {string} */ (
185
+ compilation.outputOptions.webassemblyModuleFilename
186
+ )
187
+ ),
188
+ generateLoadBinaryCode: baked
189
+ ? generateBakedLoadBinaryCode
190
+ : analyzable
191
+ ? generateAnalyzableLoadBinaryCode
192
+ : constant === undefined
193
+ ? generateLoadBinaryCode
194
+ : generateConstantLoadBinaryCode(constant),
113
195
  supportsStreaming: true
114
196
  })
115
197
  );
@@ -7,19 +7,12 @@
7
7
 
8
8
  const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
- const { getPresentKinds } = require("../TemplatedPathPlugin");
10
+ const { usesFullHashDigest } = require("../TemplatedPathPlugin");
11
+ const { needsRuntimeFullHash } = require("../wasm/wasmModuleFilename");
11
12
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
12
13
 
13
- /** @typedef {import("../Chunk")} Chunk */
14
- /** @typedef {import("../Compiler")} Compiler */
15
-
16
- /**
17
- * The wasm runtime inlines `[fullhash]` as a runtime `getFullHash()` call, so
18
- * that runtime module must be requested (`[hash]` is the per-module hash here).
19
- * @param {string} filename `output.webassemblyModuleFilename`
20
- * @returns {boolean} whether it references the compilation `[fullhash]`
21
- */
22
- const usesFullHash = (filename) => getPresentKinds(filename).has("fullhash");
14
+ /** @import Chunk from "../Chunk" */
15
+ /** @import Compiler from "../Compiler" */
23
16
 
24
17
  /**
25
18
  * Options that influence how synchronous WebAssembly modules are emitted for
@@ -68,13 +61,30 @@ class FetchCompileWasmPlugin {
68
61
  return wasmLoading === "fetch";
69
62
  };
70
63
  /**
71
- * Generates the runtime expression that downloads the emitted wasm
72
- * binary for a module.
64
+ * Downloads the emitted wasm binary through the runtime
65
+ * `__webpack_require__.p` public path.
73
66
  * @param {string} path path to the wasm file
74
67
  * @returns {string} code to load the wasm file
75
68
  */
76
69
  const generateLoadBinaryCode = (path) =>
77
70
  `fetch(${RuntimeGlobals.publicPath} + ${path})`;
71
+ /**
72
+ * ESM-output variant: the analyzable `fetch(new URL(path, import.meta.url))`
73
+ * form (relative to the chunk, no runtime public-path global) that other
74
+ * bundlers and webpack itself can statically follow to the emitted wasm.
75
+ * @param {string} path path to the wasm file
76
+ * @returns {string} code to load the wasm file
77
+ */
78
+ const generateAnalyzableLoadBinaryCode = (path) =>
79
+ `fetch(${compilation.runtimeTemplate.importMetaUrl(path)})`;
80
+ /**
81
+ * A public path that never changes is the same string the global would hold,
82
+ * so it is inlined and the runtime module that sets it is not needed.
83
+ * @param {string} constant the settled public path
84
+ * @returns {(path: string) => string} code to load the wasm file
85
+ */
86
+ const generateConstantLoadBinaryCode = (constant) => (path) =>
87
+ `fetch(${JSON.stringify(constant)} + ${path})`;
78
88
 
79
89
  compilation.hooks.runtimeRequirementInTree
80
90
  .for(RuntimeGlobals.ensureChunkHandlers)
@@ -89,16 +99,36 @@ class FetchCompileWasmPlugin {
89
99
  return;
90
100
  }
91
101
  set.add(RuntimeGlobals.moduleCache);
92
- set.add(RuntimeGlobals.publicPath);
102
+ const analyzable =
103
+ compilation.runtimeTemplate.supportsAnalyzable("wasm-relative");
104
+ const constant = analyzable
105
+ ? undefined
106
+ : compilation.runtimeTemplate.constantPublicPath();
107
+ if (!analyzable && constant === undefined) {
108
+ set.add(RuntimeGlobals.publicPath);
109
+ }
93
110
  if (
94
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
111
+ needsRuntimeFullHash(
112
+ /** @type {string} */ (
113
+ compilation.outputOptions.webassemblyModuleFilename
114
+ )
115
+ )
95
116
  ) {
96
117
  set.add(RuntimeGlobals.getFullHash);
97
118
  }
98
119
  compilation.addRuntimeModule(
99
120
  chunk,
100
121
  new WasmChunkLoadingRuntimeModule({
101
- generateLoadBinaryCode,
122
+ fullHashDigest: usesFullHashDigest(
123
+ /** @type {string} */ (
124
+ compilation.outputOptions.webassemblyModuleFilename
125
+ )
126
+ ),
127
+ generateLoadBinaryCode: analyzable
128
+ ? generateAnalyzableLoadBinaryCode
129
+ : constant === undefined
130
+ ? generateLoadBinaryCode
131
+ : generateConstantLoadBinaryCode(constant),
102
132
  supportsStreaming: true,
103
133
  mangleImports: this.options.mangleImports,
104
134
  runtimeRequirements: set
@@ -6,11 +6,16 @@
6
6
  "use strict";
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
- const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
9
+ const lazyModule = require("../util/lazyModule");
10
10
 
11
- /** @typedef {import("../Chunk")} Chunk */
12
- /** @typedef {import("../Compiler")} Compiler */
13
- /** @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 this
16
+ const getJsonpChunkLoadingRuntimeModule = lazyModule(() =>
17
+ require("./JsonpChunkLoadingRuntimeModule")
18
+ );
14
19
 
15
20
  const PLUGIN_NAME = "JsonpChunkLoadingPlugin";
16
21
 
@@ -55,28 +60,47 @@ class JsonpChunkLoadingPlugin {
55
60
  if (onceForChunkSet.has(chunk)) return;
56
61
  onceForChunkSet.add(chunk);
57
62
  if (!isEnabledForChunk(chunk)) return;
58
- set.add(RuntimeGlobals.moduleFactoriesAddOnly);
59
- set.add(RuntimeGlobals.hasOwnProperty);
60
- compilation.addRuntimeModule(
63
+ compilation.addLazyRuntimeModule(
61
64
  chunk,
62
- new JsonpChunkLoadingRuntimeModule(set)
65
+ getJsonpChunkLoadingRuntimeModule,
66
+ (Ctor) => new Ctor(set)
63
67
  );
64
68
  };
65
- compilation.hooks.runtimeRequirementInTree
66
- .for(RuntimeGlobals.ensureChunkHandlers)
67
- .tap(PLUGIN_NAME, handler);
68
- compilation.hooks.runtimeRequirementInTree
69
- .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
70
- .tap(PLUGIN_NAME, handler);
71
- compilation.hooks.runtimeRequirementInTree
72
- .for(RuntimeGlobals.hmrDownloadManifest)
73
- .tap(PLUGIN_NAME, handler);
74
- compilation.hooks.runtimeRequirementInTree
75
- .for(RuntimeGlobals.baseURI)
76
- .tap(PLUGIN_NAME, handler);
77
- compilation.hooks.runtimeRequirementInTree
78
- .for(RuntimeGlobals.onChunksLoaded)
79
- .tap(PLUGIN_NAME, handler);
69
+ /**
70
+ * Installing a chunk, on load or on a hot update, is the only part that writes
71
+ * the module factories and looks a chunk id up; a base uri or `onChunksLoaded`
72
+ * comes without either. Kept off `handler`, which runs once per chunk and so
73
+ * cannot see which of the requirements below the chunk ends up with.
74
+ * @param {Chunk} chunk chunk to check
75
+ * @param {RuntimeRequirements} set runtime requirements
76
+ */
77
+ const installHandler = (chunk, set) => {
78
+ if (!isEnabledForChunk(chunk)) return;
79
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
80
+ set.add(RuntimeGlobals.hasOwnProperty);
81
+ };
82
+ for (const requirement of [
83
+ RuntimeGlobals.ensureChunkHandlers,
84
+ RuntimeGlobals.hmrDownloadUpdateHandlers,
85
+ RuntimeGlobals.hmrDownloadManifest,
86
+ RuntimeGlobals.baseURI,
87
+ RuntimeGlobals.onChunksLoaded
88
+ ]) {
89
+ compilation.hooks.runtimeRequirementInTree
90
+ .for(requirement)
91
+ .tap(PLUGIN_NAME, handler);
92
+ }
93
+ for (const requirement of [
94
+ RuntimeGlobals.ensureChunkHandlers,
95
+ RuntimeGlobals.chunkCallback,
96
+ RuntimeGlobals.hmrDownloadUpdateHandlers,
97
+ RuntimeGlobals.prefetchChunkHandlers,
98
+ RuntimeGlobals.preloadChunkHandlers
99
+ ]) {
100
+ compilation.hooks.runtimeRequirementInTree
101
+ .for(requirement)
102
+ .tap(PLUGIN_NAME, installHandler);
103
+ }
80
104
 
81
105
  compilation.hooks.runtimeRequirementInTree
82
106
  .for(RuntimeGlobals.ensureChunkHandlers)
@@ -5,7 +5,7 @@
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");
@@ -14,12 +14,13 @@ const {
14
14
  } = require("../hmr/JavascriptHotModuleReplacementHelper");
15
15
  const chunkHasJs = require("../javascript/JavascriptModulesPlugin").chunkHasJs;
16
16
  const { getInitialChunkIds } = require("../javascript/StartupHelpers");
17
+ const { renderBaseUri } = require("../runtime/baseUri");
17
18
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
18
19
  const createHooksRegistry = require("../util/createHooksRegistry");
19
20
 
20
- /** @typedef {import("../Chunk")} Chunk */
21
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
22
- /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
21
+ /** @import Chunk from "../Chunk" */
22
+ /** @import ChunkGraph from "../ChunkGraph" */
23
+ /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
23
24
 
24
25
  /**
25
26
  * @typedef {object} JsonpCompilationPluginHooks
@@ -44,10 +45,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
44
45
  */
45
46
  _generateBaseUri(chunk) {
46
47
  const options = chunk.getEntryOptions();
47
- if (options && options.baseUri) {
48
- return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
49
- }
50
- return `${RuntimeGlobals.baseURI} = (typeof document !== 'undefined' && document.baseURI) || self.location.href;`;
48
+ return renderBaseUri(
49
+ options ? options.baseUri : undefined,
50
+ "(typeof document !== 'undefined' && document.baseURI) || self.location.href"
51
+ );
51
52
  }
52
53
 
53
54
  /**
@@ -63,9 +64,11 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
63
64
  hotUpdateGlobal,
64
65
  crossOriginLoading,
65
66
  scriptType,
66
- charset
67
+ charset,
68
+ resourceHints
67
69
  }
68
70
  } = compilation;
71
+ const dedupePrefetch = Boolean(resourceHints && resourceHints.dedupe);
69
72
  const globalObject = runtimeTemplate.globalObject;
70
73
  const { linkPreload, linkPrefetch } =
71
74
  JsonpChunkLoadingRuntimeModule.getCompilationHooks(compilation);
@@ -115,17 +118,33 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
115
118
  ",\n"
116
119
  )
117
120
  )}\n}`;
121
+ // Every part below that reads the table. A chunk asking only for `.b` gets this
122
+ // module for the base uri alone, and then has nothing to look up.
123
+ const withInstalledChunks =
124
+ withLoading ||
125
+ withCallback ||
126
+ withOnChunkLoad ||
127
+ withHmr ||
128
+ withPrefetch ||
129
+ withPreload;
118
130
  return Template.asString([
119
131
  withBaseURI ? this._generateBaseUri(chunk) : "// no baseURI",
120
132
  "",
121
- "// object to store loaded and loading chunks",
122
- "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
123
- "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",
124
- `${cst} installedChunks = ${
125
- stateExpression
126
- ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
127
- : installedChunksObject
128
- };`,
133
+ withInstalledChunks
134
+ ? Template.asString([
135
+ "// object to store loaded and loading chunks",
136
+ "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
137
+ "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",
138
+ `${cst} installedChunks = ${
139
+ stateExpression
140
+ ? runtimeTemplate.assignOr(
141
+ stateExpression,
142
+ installedChunksObject
143
+ )
144
+ : installedChunksObject
145
+ };`
146
+ ])
147
+ : "// no installed chunks",
129
148
  "",
130
149
  withLoading
131
150
  ? Template.asString([
@@ -156,8 +175,6 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
156
175
  )});`,
157
176
  "promises.push(installedChunkData[2] = promise);",
158
177
  "",
159
- "// start chunk loading",
160
- `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
161
178
  "// create error before stack unwound to get useful stacktrace later",
162
179
  `${cst} error = new Error();`,
163
180
  `${cst} loadingEnded = ${runtimeTemplate.basicFunction(
@@ -185,7 +202,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
185
202
  )};`,
186
203
  `${
187
204
  RuntimeGlobals.loadScript
188
- }(url, loadingEnded, "chunk-" + chunkId, chunkId${
205
+ }(${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId), loadingEnded, "chunk-" + chunkId, chunkId${
189
206
  withFetchPriority ? ", fetchPriority" : ""
190
207
  });`
191
208
  ]),
@@ -233,6 +250,19 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
233
250
  ]),
234
251
  chunk
235
252
  ),
253
+ dedupePrefetch
254
+ ? Template.asString([
255
+ // Chrome re-requests a resource when a prefetch link is added
256
+ // after it was already (pre)loaded via markup; skip in that case.
257
+ `${cst} links = document.getElementsByTagName("link");`,
258
+ `for(${lt} i = 0; i < links.length; i++) {`,
259
+ Template.indent([
260
+ `${cst} l = links[i];`,
261
+ 'if(l.href === link.href && (l.rel === "prefetch" || l.rel === "preload" || l.rel === "modulepreload")) return;'
262
+ ]),
263
+ "}"
264
+ ])
265
+ : "",
236
266
  "document.head.appendChild(link);"
237
267
  ]),
238
268
  "}"
@@ -9,8 +9,8 @@ const ArrayPushCallbackChunkFormatPlugin = require("../javascript/ArrayPushCallb
9
9
  const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
10
10
  const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
11
11
 
12
- /** @typedef {import("../Compilation")} Compilation */
13
- /** @typedef {import("../Compiler")} Compiler */
12
+ /** @import Compilation from "../Compilation" */
13
+ /** @import Compiler from "../Compiler" */
14
14
 
15
15
  // TODO webpack 6 remove this class
16
16
  class JsonpTemplatePlugin {
package/lib/webpack.js CHANGED
@@ -11,7 +11,6 @@ const webpackOptionsSchema =
11
11
  /** @type {EXPECTED_ANY} */
12
12
  (require("../schemas/WebpackOptions.json"));
13
13
  const Compiler = require("./Compiler");
14
- const MultiCompiler = require("./MultiCompiler");
15
14
  const WebpackOptionsApply = require("./WebpackOptionsApply");
16
15
  const {
17
16
  applyWebpackOptionsBaseDefaults,
@@ -24,20 +23,31 @@ const {
24
23
  const NodeEnvironmentPlugin = require("./node/NodeEnvironmentPlugin");
25
24
  const memoize = require("./util/memoize");
26
25
 
27
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
28
- /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptionsNormalizedWithDefaults */
29
- /** @typedef {import("./config/normalization").WebpackOptionsInterception} WebpackOptionsInterception */
30
- /** @typedef {import("./Compiler").WatchOptions} WatchOptions */
31
- /** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
32
- /** @typedef {import("./MultiCompiler").MultiWebpackOptions} MultiWebpackOptions */
33
- /** @typedef {import("./MultiStats")} MultiStats */
34
- /** @typedef {import("./Stats")} Stats */
26
+ const getValidateSchema = memoize(() => require("./validateSchema"));
27
+ const getMultiCompiler = memoize(() => require("./MultiCompiler"));
28
+ const getProgressPlugin = memoize(() => require("./ProgressPlugin"));
29
+
30
+ /**
31
+ * @import {
32
+ * WebpackOptions,
33
+ * WatchOptions
34
+ * } from "../declarations/WebpackOptions"
35
+ */
36
+ /** @import { WebpackOptionsNormalizedWithDefaults } from "./config/defaults" */
37
+ /** @import { WebpackOptionsInterception } from "./config/normalization" */
38
+ /**
39
+ * @import MultiCompiler, {
40
+ * MultiCompilerOptions,
41
+ * MultiWebpackOptions
42
+ * } from "./MultiCompiler"
43
+ */
44
+ /** @import MultiStats from "./MultiStats" */
45
+ /** @import Stats from "./Stats" */
35
46
 
36
47
  /** @typedef {(this: Compiler, compiler: Compiler) => void} WebpackPluginFunction */
37
48
  /** @typedef {(compiler: Compiler) => void} WebpackPluginInstanceApplyFunction */
38
49
 
39
- const getValidateSchema = memoize(() => require("./validateSchema"));
40
- const getProgressPlugin = memoize(() => require("./ProgressPlugin"));
50
+ // only an array config reaches the multi compiler
41
51
 
42
52
  /**
43
53
  * Whether core should auto-apply progress, from `infrastructureLogging.progress`.
@@ -102,6 +112,7 @@ const applyDefaultProgressPlugin = (compiler, options, hasUserPlugin) => {
102
112
  * @returns {MultiCompiler} a multi-compiler
103
113
  */
104
114
  const createMultiCompiler = (childOptions, options) => {
115
+ const MultiCompiler = getMultiCompiler();
105
116
  const compilers = childOptions.map((options, index) =>
106
117
  createCompiler(options, index)
107
118
  );
@@ -7,11 +7,16 @@
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
10
- const ImportScriptsChunkLoadingRuntimeModule = require("./ImportScriptsChunkLoadingRuntimeModule");
10
+ const lazyModule = require("../util/lazyModule");
11
11
 
12
- /** @typedef {import("../Chunk")} Chunk */
13
- /** @typedef {import("../Compiler")} Compiler */
14
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
12
+ /** @import Chunk from "../Chunk" */
13
+ /** @import Compiler from "../Compiler" */
14
+ /** @import { RuntimeRequirements } from "../Module" */
15
+
16
+ // only a chunk that loads other chunks at runtime emits this
17
+ const getImportScriptsChunkLoadingRuntimeModule = lazyModule(() =>
18
+ require("./ImportScriptsChunkLoadingRuntimeModule")
19
+ );
15
20
 
16
21
  const PLUGIN_NAME = "ImportScriptsChunkLoadingPlugin";
17
22
 
@@ -62,31 +67,60 @@ class ImportScriptsChunkLoadingPlugin {
62
67
  const withCreateScriptUrl = Boolean(
63
68
  compilation.outputOptions.trustedTypes
64
69
  );
65
- set.add(RuntimeGlobals.moduleFactoriesAddOnly);
66
- set.add(RuntimeGlobals.hasOwnProperty);
67
- if (withCreateScriptUrl) {
68
- set.add(RuntimeGlobals.createScriptUrl);
69
- }
70
- compilation.addRuntimeModule(
70
+ compilation.addLazyRuntimeModule(
71
71
  chunk,
72
- new ImportScriptsChunkLoadingRuntimeModule(set, withCreateScriptUrl)
72
+ getImportScriptsChunkLoadingRuntimeModule,
73
+ (Ctor) => new Ctor(set, withCreateScriptUrl)
73
74
  );
74
75
  };
75
- compilation.hooks.runtimeRequirementInTree
76
- .for(RuntimeGlobals.ensureChunkHandlers)
77
- .tap(PLUGIN_NAME, handler);
78
- compilation.hooks.runtimeRequirementInTree
79
- .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
80
- .tap(PLUGIN_NAME, handler);
81
- compilation.hooks.runtimeRequirementInTree
82
- .for(RuntimeGlobals.hmrDownloadManifest)
83
- .tap(PLUGIN_NAME, handler);
84
- compilation.hooks.runtimeRequirementInTree
85
- .for(RuntimeGlobals.baseURI)
86
- .tap(PLUGIN_NAME, handler);
87
- compilation.hooks.runtimeRequirementInTree
88
- .for(RuntimeGlobals.onChunksLoaded)
89
- .tap(PLUGIN_NAME, handler);
76
+ /**
77
+ * Installing a chunk is the only part that writes the module factories and
78
+ * looks a chunk id up; a base uri or `onChunksLoaded` comes without either.
79
+ * Kept off `handler`, which runs once per chunk and so cannot see which of the
80
+ * requirements below the chunk ends up with.
81
+ * @param {Chunk} chunk chunk
82
+ * @param {RuntimeRequirements} set runtime requirements
83
+ */
84
+ const installHandler = (chunk, set) => {
85
+ if (!isEnabledForChunk(chunk)) return;
86
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
87
+ set.add(RuntimeGlobals.hasOwnProperty);
88
+ };
89
+ for (const requirement of [
90
+ RuntimeGlobals.ensureChunkHandlers,
91
+ RuntimeGlobals.hmrDownloadUpdateHandlers,
92
+ RuntimeGlobals.hmrDownloadManifest,
93
+ RuntimeGlobals.baseURI,
94
+ RuntimeGlobals.onChunksLoaded
95
+ ]) {
96
+ compilation.hooks.runtimeRequirementInTree
97
+ .for(requirement)
98
+ .tap(PLUGIN_NAME, handler);
99
+ }
100
+ for (const requirement of [
101
+ RuntimeGlobals.ensureChunkHandlers,
102
+ RuntimeGlobals.chunkCallback,
103
+ RuntimeGlobals.hmrDownloadUpdateHandlers
104
+ ]) {
105
+ compilation.hooks.runtimeRequirementInTree
106
+ .for(requirement)
107
+ .tap(PLUGIN_NAME, installHandler);
108
+ }
109
+ // Both `importScripts` calls the module emits — loading a chunk and loading a
110
+ // hot update — are wrapped under trusted types.
111
+ for (const requirement of [
112
+ RuntimeGlobals.ensureChunkHandlers,
113
+ RuntimeGlobals.hmrDownloadUpdateHandlers
114
+ ]) {
115
+ compilation.hooks.runtimeRequirementInTree
116
+ .for(requirement)
117
+ .tap(PLUGIN_NAME, (chunk, set) => {
118
+ if (!isEnabledForChunk(chunk)) return;
119
+ if (compilation.outputOptions.trustedTypes) {
120
+ set.add(RuntimeGlobals.createScriptUrl);
121
+ }
122
+ });
123
+ }
90
124
 
91
125
  compilation.hooks.runtimeRequirementInTree
92
126
  .for(RuntimeGlobals.ensureChunkHandlers)