@depup/webpack 5.109.2-depup.0 → 5.110.3-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 (647) 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 +46 -35
  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 +107 -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 +91 -26
  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 +111 -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 +40 -49
  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 +152 -103
  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 +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  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 +12 -6
  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 +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -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 +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  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 +5334 -0
  160. package/lib/css/syntax.js +9647 -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 +170 -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 +24 -11
  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 +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  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 +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -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 +49 -31
  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 +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  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 +73 -49
  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 +50 -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 +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. 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,51 @@ class FetchCompileAsyncWasmPlugin {
73
89
  ) {
74
90
  return;
75
91
  }
76
- set.add(RuntimeGlobals.publicPath);
92
+ const baked = compilation.runtimeTemplate.supportsAnalyzable(
93
+ "wasm",
94
+ chunkGraph,
95
+ undefined,
96
+ chunk.runtime
97
+ );
98
+ const analyzable = compilation.runtimeTemplate.supportsAnalyzable(
99
+ "wasm-relative",
100
+ chunkGraph
101
+ );
102
+ // A baked URL carries the public path already, and a settled one is written
103
+ // out below; only a path nothing but the global knows asks for it.
104
+ const constant =
105
+ baked || analyzable
106
+ ? undefined
107
+ : compilation.runtimeTemplate.constantPublicPath();
108
+ if (!baked && !analyzable && constant === undefined) {
109
+ set.add(RuntimeGlobals.publicPath);
110
+ }
111
+ // A baked URL is already a literal, so nothing interpolates the name.
77
112
  if (
78
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
113
+ !baked &&
114
+ needsRuntimeFullHash(
115
+ /** @type {string} */ (
116
+ compilation.outputOptions.webassemblyModuleFilename
117
+ )
118
+ )
79
119
  ) {
80
120
  set.add(RuntimeGlobals.getFullHash);
81
121
  }
82
122
  compilation.addRuntimeModule(
83
123
  chunk,
84
124
  new AsyncWasmLoadingRuntimeModule({
85
- generateLoadBinaryCode,
125
+ fullHashDigest: usesFullHashDigest(
126
+ /** @type {string} */ (
127
+ compilation.outputOptions.webassemblyModuleFilename
128
+ )
129
+ ),
130
+ generateLoadBinaryCode: baked
131
+ ? generateBakedLoadBinaryCode
132
+ : analyzable
133
+ ? generateAnalyzableLoadBinaryCode
134
+ : constant === undefined
135
+ ? generateLoadBinaryCode
136
+ : generateConstantLoadBinaryCode(constant),
86
137
  supportsStreaming: true
87
138
  })
88
139
  );
@@ -100,16 +151,51 @@ class FetchCompileAsyncWasmPlugin {
100
151
  ) {
101
152
  return;
102
153
  }
103
- set.add(RuntimeGlobals.publicPath);
154
+ const baked = compilation.runtimeTemplate.supportsAnalyzable(
155
+ "wasm",
156
+ chunkGraph,
157
+ undefined,
158
+ chunk.runtime
159
+ );
160
+ const analyzable = compilation.runtimeTemplate.supportsAnalyzable(
161
+ "wasm-relative",
162
+ chunkGraph
163
+ );
164
+ // A baked URL carries the public path already, and a settled one is written
165
+ // out below; only a path nothing but the global knows asks for it.
166
+ const constant =
167
+ baked || analyzable
168
+ ? undefined
169
+ : compilation.runtimeTemplate.constantPublicPath();
170
+ if (!baked && !analyzable && constant === undefined) {
171
+ set.add(RuntimeGlobals.publicPath);
172
+ }
173
+ // A baked URL is already a literal, so nothing interpolates the name.
104
174
  if (
105
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
175
+ !baked &&
176
+ needsRuntimeFullHash(
177
+ /** @type {string} */ (
178
+ compilation.outputOptions.webassemblyModuleFilename
179
+ )
180
+ )
106
181
  ) {
107
182
  set.add(RuntimeGlobals.getFullHash);
108
183
  }
109
184
  compilation.addRuntimeModule(
110
185
  chunk,
111
186
  new AsyncWasmCompileRuntimeModule({
112
- generateLoadBinaryCode,
187
+ fullHashDigest: usesFullHashDigest(
188
+ /** @type {string} */ (
189
+ compilation.outputOptions.webassemblyModuleFilename
190
+ )
191
+ ),
192
+ generateLoadBinaryCode: baked
193
+ ? generateBakedLoadBinaryCode
194
+ : analyzable
195
+ ? generateAnalyzableLoadBinaryCode
196
+ : constant === undefined
197
+ ? generateLoadBinaryCode
198
+ : generateConstantLoadBinaryCode(constant),
113
199
  supportsStreaming: true
114
200
  })
115
201
  );
@@ -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,38 @@ class FetchCompileWasmPlugin {
89
99
  return;
90
100
  }
91
101
  set.add(RuntimeGlobals.moduleCache);
92
- set.add(RuntimeGlobals.publicPath);
102
+ const analyzable = compilation.runtimeTemplate.supportsAnalyzable(
103
+ "wasm-relative",
104
+ chunkGraph
105
+ );
106
+ const constant = analyzable
107
+ ? undefined
108
+ : compilation.runtimeTemplate.constantPublicPath();
109
+ if (!analyzable && constant === undefined) {
110
+ set.add(RuntimeGlobals.publicPath);
111
+ }
93
112
  if (
94
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
113
+ needsRuntimeFullHash(
114
+ /** @type {string} */ (
115
+ compilation.outputOptions.webassemblyModuleFilename
116
+ )
117
+ )
95
118
  ) {
96
119
  set.add(RuntimeGlobals.getFullHash);
97
120
  }
98
121
  compilation.addRuntimeModule(
99
122
  chunk,
100
123
  new WasmChunkLoadingRuntimeModule({
101
- generateLoadBinaryCode,
124
+ fullHashDigest: usesFullHashDigest(
125
+ /** @type {string} */ (
126
+ compilation.outputOptions.webassemblyModuleFilename
127
+ )
128
+ ),
129
+ generateLoadBinaryCode: analyzable
130
+ ? generateAnalyzableLoadBinaryCode
131
+ : constant === undefined
132
+ ? generateLoadBinaryCode
133
+ : generateConstantLoadBinaryCode(constant),
102
134
  supportsStreaming: true,
103
135
  mangleImports: this.options.mangleImports,
104
136
  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)