webpack 5.109.1 → 5.110.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 (639) hide show
  1. package/README.md +6 -0
  2. package/lib/APIPlugin.js +123 -17
  3. package/lib/AsyncDependenciesBlock.js +10 -7
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/BannerPlugin.js +10 -6
  6. package/lib/CacheFacade.js +6 -6
  7. package/lib/Chunk.js +14 -11
  8. package/lib/ChunkGraph.js +26 -17
  9. package/lib/ChunkGroup.js +7 -7
  10. package/lib/ChunkTemplate.js +35 -44
  11. package/lib/CircularModulesPlugin.js +205 -28
  12. package/lib/CleanPlugin.js +15 -16
  13. package/lib/CodeGenerationResults.js +11 -8
  14. package/lib/CompatibilityPlugin.js +7 -7
  15. package/lib/Compilation.js +700 -412
  16. package/lib/Compiler.js +69 -42
  17. package/lib/ConcatenationScope.js +117 -8
  18. package/lib/ConditionalInitFragment.js +3 -3
  19. package/lib/ConstPlugin.js +13 -11
  20. package/lib/ContextExclusionPlugin.js +1 -1
  21. package/lib/ContextModule.js +146 -54
  22. package/lib/ContextModuleFactory.js +46 -14
  23. package/lib/ContextReplacementPlugin.js +12 -14
  24. package/lib/DefinePlugin.js +131 -46
  25. package/lib/DependenciesBlock.js +9 -6
  26. package/lib/Dependency.js +36 -16
  27. package/lib/DependencyTemplate.js +11 -12
  28. package/lib/DependencyTemplates.js +3 -3
  29. package/lib/DotenvPlugin.js +50 -13
  30. package/lib/DynamicEntryPlugin.js +8 -4
  31. package/lib/EntryOptionPlugin.js +8 -4
  32. package/lib/EntryPlugin.js +2 -2
  33. package/lib/Entrypoint.js +6 -2
  34. package/lib/EnvironmentPlugin.js +2 -2
  35. package/lib/EvalDevToolModulePlugin.js +8 -4
  36. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  37. package/lib/ExportsInfo.js +101 -14
  38. package/lib/ExportsInfoApiPlugin.js +2 -4
  39. package/lib/ExternalModule.js +242 -84
  40. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  41. package/lib/ExternalsPlugin.js +10 -6
  42. package/lib/FileSystemInfo.js +27 -68
  43. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  44. package/lib/FlagDependencyExportsPlugin.js +76 -19
  45. package/lib/FlagDependencyUsagePlugin.js +32 -47
  46. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  47. package/lib/Generator.js +19 -15
  48. package/lib/HotModuleReplacementPlugin.js +16 -44
  49. package/lib/IgnorePlugin.js +8 -4
  50. package/lib/IgnoreWarningsPlugin.js +2 -2
  51. package/lib/InitFragment.js +8 -4
  52. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  53. package/lib/LazyBarrel.js +3 -4
  54. package/lib/LibraryTemplatePlugin.js +10 -6
  55. package/lib/LoaderOptionsPlugin.js +7 -3
  56. package/lib/LoaderTargetPlugin.js +1 -1
  57. package/lib/MainTemplate.js +49 -42
  58. package/lib/ManifestPlugin.js +12 -11
  59. package/lib/Module.js +62 -33
  60. package/lib/ModuleFactory.js +3 -3
  61. package/lib/ModuleFilenameHelpers.js +22 -6
  62. package/lib/ModuleGraph.js +195 -21
  63. package/lib/ModuleGraphConnection.js +6 -13
  64. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  65. package/lib/ModuleTemplate.js +62 -63
  66. package/lib/MultiCompiler.js +130 -64
  67. package/lib/MultiStats.js +40 -9
  68. package/lib/MultiWatching.js +3 -3
  69. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  70. package/lib/NodeStuffPlugin.js +29 -19
  71. package/lib/NormalModule.js +212 -153
  72. package/lib/NormalModuleFactory.js +563 -112
  73. package/lib/NormalModuleReplacementPlugin.js +5 -8
  74. package/lib/NullFactory.js +6 -2
  75. package/lib/OptionsApply.js +7 -3
  76. package/lib/Parser.js +7 -3
  77. package/lib/PlatformPlugin.js +2 -2
  78. package/lib/PrefetchPlugin.js +1 -1
  79. package/lib/ProgressPlugin.js +16 -13
  80. package/lib/ProvidePlugin.js +3 -5
  81. package/lib/RawModule.js +25 -17
  82. package/lib/RecordIdsPlugin.js +3 -3
  83. package/lib/RequestShortener.js +1 -1
  84. package/lib/ResolverFactory.js +2 -2
  85. package/lib/RuntimeGlobals.js +22 -10
  86. package/lib/RuntimeModule.js +29 -19
  87. package/lib/RuntimePlugin.js +332 -169
  88. package/lib/RuntimeTemplate.js +2792 -352
  89. package/lib/SelfModuleFactory.js +7 -3
  90. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  91. package/lib/SourceMapDevToolPlugin.js +30 -20
  92. package/lib/Stats.js +3 -4
  93. package/lib/Template.js +32 -22
  94. package/lib/TemplatedPathPlugin.js +96 -14
  95. package/lib/UseStrictPlugin.js +4 -6
  96. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  97. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  98. package/lib/WarnNoModeSetPlugin.js +1 -1
  99. package/lib/WatchIgnorePlugin.js +8 -6
  100. package/lib/Watching.js +8 -8
  101. package/lib/WebpackIsIncludedPlugin.js +2 -4
  102. package/lib/WebpackOptionsApply.js +308 -18
  103. package/lib/WebpackOptionsDefaulter.js +6 -2
  104. package/lib/asset/AssetBytesGenerator.js +11 -7
  105. package/lib/asset/AssetBytesParser.js +2 -4
  106. package/lib/asset/AssetGenerator.js +187 -92
  107. package/lib/asset/AssetModule.js +7 -3
  108. package/lib/asset/AssetModulesPlugin.js +110 -38
  109. package/lib/asset/AssetParser.js +9 -7
  110. package/lib/asset/AssetSourceGenerator.js +59 -10
  111. package/lib/asset/AssetSourceParser.js +2 -4
  112. package/lib/asset/RawDataUrlModule.js +24 -16
  113. package/lib/asset/WebManifestGenerator.js +8 -10
  114. package/lib/asset/WebManifestParser.js +24 -10
  115. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  118. package/lib/async-modules/isGeneratorLowered.js +4 -4
  119. package/lib/buildChunkGraph.js +36 -27
  120. package/lib/bun/BunTargetPlugin.js +1 -1
  121. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  122. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  123. package/lib/cache/IdleFileCachePlugin.js +2 -2
  124. package/lib/cache/MemoryCachePlugin.js +18 -10
  125. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  126. package/lib/cache/PackFileCacheStrategy.js +289 -28
  127. package/lib/cache/ResolverCachePlugin.js +38 -18
  128. package/lib/cache/getLazyHashedEtag.js +1 -2
  129. package/lib/cache/mergeEtags.js +1 -1
  130. package/lib/cli.js +1 -3
  131. package/lib/config/browserslistTargetHandler.js +41 -5
  132. package/lib/config/defaults.js +276 -81
  133. package/lib/config/defineConfig.js +10 -2
  134. package/lib/config/getClaimedAssetTypes.js +65 -0
  135. package/lib/config/normalization.js +36 -16
  136. package/lib/config/target.js +46 -3
  137. package/lib/container/ContainerEntryDependency.js +1 -1
  138. package/lib/container/ContainerEntryModule.js +24 -15
  139. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  140. package/lib/container/ContainerPlugin.js +9 -10
  141. package/lib/container/ContainerReferencePlugin.js +6 -2
  142. package/lib/container/FallbackDependency.js +1 -1
  143. package/lib/container/FallbackModule.js +24 -17
  144. package/lib/container/FallbackModuleFactory.js +7 -3
  145. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  146. package/lib/container/ModuleFederationPlugin.js +7 -18
  147. package/lib/container/RemoteModule.js +27 -19
  148. package/lib/container/RemoteRuntimeModule.js +10 -8
  149. package/lib/container/moduleFederationHooks.js +32 -0
  150. package/lib/css/CssGenerator.js +177 -41
  151. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  152. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  153. package/lib/css/CssModule.js +10 -7
  154. package/lib/css/CssModulesPlugin.js +197 -106
  155. package/lib/css/CssParser.js +1113 -568
  156. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  157. package/lib/css/cssMinify.js +168 -0
  158. package/lib/css/data.js +5324 -0
  159. package/lib/css/syntax.js +9579 -232
  160. package/lib/debug/ProfilingPlugin.js +14 -9
  161. package/lib/deno/DenoTargetPlugin.js +1 -1
  162. package/lib/dependencies/AMDDefineDependency.js +112 -87
  163. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  164. package/lib/dependencies/AMDPlugin.js +9 -7
  165. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  166. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  167. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  168. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  169. package/lib/dependencies/AMDRequireDependency.js +8 -7
  170. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  171. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  172. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  173. package/lib/dependencies/CachedConstDependency.js +11 -8
  174. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  175. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  176. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  177. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  178. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  179. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  180. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  181. package/lib/dependencies/CommonJsPlugin.js +35 -6
  182. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  183. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  184. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  185. package/lib/dependencies/ConstDependency.js +8 -9
  186. package/lib/dependencies/ContextDependency.js +12 -8
  187. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  188. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  189. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  190. package/lib/dependencies/ContextElementDependency.js +31 -12
  191. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  192. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  193. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  194. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  195. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  196. package/lib/dependencies/CssImportDependency.js +18 -9
  197. package/lib/dependencies/CssUrlDependency.js +17 -13
  198. package/lib/dependencies/DllEntryDependency.js +1 -1
  199. package/lib/dependencies/DynamicExports.js +2 -2
  200. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  201. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  202. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  203. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  204. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  205. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  206. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  207. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  208. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +13 -10
  209. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  210. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  211. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  212. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
  213. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  214. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  215. package/lib/dependencies/HarmonyExports.js +7 -4
  216. package/lib/dependencies/HarmonyImportDependency.js +27 -19
  217. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  218. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  219. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  220. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  221. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  222. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  223. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  224. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  225. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  226. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  227. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  228. package/lib/dependencies/ImportContextDependency.js +2 -2
  229. package/lib/dependencies/ImportDependency.js +24 -20
  230. package/lib/dependencies/ImportEagerDependency.js +6 -9
  231. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  232. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  233. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  234. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  235. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  236. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  237. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  238. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  240. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  241. package/lib/dependencies/ImportParserPlugin.js +49 -35
  242. package/lib/dependencies/ImportPhase.js +12 -5
  243. package/lib/dependencies/ImportPlugin.js +7 -3
  244. package/lib/dependencies/ImportWeakDependency.js +6 -9
  245. package/lib/dependencies/JsonExportsDependency.js +11 -7
  246. package/lib/dependencies/LoaderDependency.js +2 -2
  247. package/lib/dependencies/LoaderImportDependency.js +2 -2
  248. package/lib/dependencies/LoaderPlugin.js +11 -7
  249. package/lib/dependencies/LocalModuleDependency.js +5 -5
  250. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  251. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  252. package/lib/dependencies/ModuleDependency.js +9 -6
  253. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  254. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  255. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  256. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  257. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  258. package/lib/dependencies/NullDependency.js +3 -3
  259. package/lib/dependencies/ProvidedDependency.js +14 -10
  260. package/lib/dependencies/PureExpressionDependency.js +9 -10
  261. package/lib/dependencies/RequireContextDependency.js +2 -2
  262. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  263. package/lib/dependencies/RequireContextPlugin.js +8 -4
  264. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  265. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  266. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  267. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  268. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  269. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  270. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  271. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  272. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  273. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  274. package/lib/dependencies/RequireResolveDependency.js +4 -4
  275. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  276. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  277. package/lib/dependencies/StaticExportsDependency.js +2 -2
  278. package/lib/dependencies/SystemPlugin.js +10 -6
  279. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  280. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  281. package/lib/dependencies/URLContextDependency.js +2 -2
  282. package/lib/dependencies/URLDependency.js +110 -64
  283. package/lib/dependencies/URLPlugin.js +7 -3
  284. package/lib/dependencies/UnsupportedDependency.js +4 -4
  285. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  286. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  287. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  288. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  289. package/lib/dependencies/WorkerDependency.js +28 -22
  290. package/lib/dependencies/WorkletDependency.js +15 -14
  291. package/lib/dependencies/getFunctionExpression.js +8 -4
  292. package/lib/dependencies/processExportInfo.js +5 -5
  293. package/lib/dll/DelegatedModule.js +34 -22
  294. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  295. package/lib/dll/DelegatedPlugin.js +2 -2
  296. package/lib/dll/DllEntryPlugin.js +2 -2
  297. package/lib/dll/DllModule.js +22 -15
  298. package/lib/dll/DllModuleFactory.js +7 -3
  299. package/lib/dll/DllPlugin.js +7 -5
  300. package/lib/dll/DllReferencePlugin.js +10 -7
  301. package/lib/dll/LibManifestPlugin.js +5 -5
  302. package/lib/electron/ElectronTargetPlugin.js +53 -49
  303. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  304. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  305. package/lib/errors/BroadContextsWarning.js +43 -0
  306. package/lib/errors/BuildCycleError.js +1 -1
  307. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  308. package/lib/errors/ChunkRenderError.js +1 -1
  309. package/lib/errors/CircularDependenciesWarning.js +38 -0
  310. package/lib/errors/CodeGenerationError.js +1 -1
  311. package/lib/errors/CommentCompilationWarning.js +1 -1
  312. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  313. package/lib/errors/DuplicateModulesWarning.js +45 -0
  314. package/lib/errors/DynamicExportsWarning.js +30 -0
  315. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  316. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  317. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  318. package/lib/errors/EvalUsageWarning.js +28 -0
  319. package/lib/errors/HookWebpackError.js +5 -5
  320. package/lib/errors/HotspotsWarning.js +57 -0
  321. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  322. package/lib/errors/InlinedAssetsWarning.js +36 -0
  323. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  324. package/lib/errors/LargeModulesWarning.js +45 -0
  325. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  326. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  327. package/lib/errors/MixedExportsWarning.js +41 -0
  328. package/lib/errors/ModuleDependencyError.js +13 -16
  329. package/lib/errors/ModuleDependencyWarning.js +5 -15
  330. package/lib/errors/ModuleHashingError.js +1 -1
  331. package/lib/errors/ModuleNotFoundError.js +2 -2
  332. package/lib/errors/ModuleParseError.js +1 -2
  333. package/lib/errors/ModuleRestoreError.js +1 -1
  334. package/lib/errors/ModuleStoreError.js +1 -1
  335. package/lib/errors/NodeStuffInWebError.js +1 -1
  336. package/lib/errors/OsDependentRuleWarning.js +31 -0
  337. package/lib/errors/PureAnnotationsWarning.js +36 -0
  338. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  339. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  340. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  341. package/lib/errors/TinyChunksWarning.js +40 -0
  342. package/lib/errors/TopLevelThisWarning.js +34 -0
  343. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  344. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  345. package/lib/errors/UnusedAliasesWarning.js +29 -0
  346. package/lib/errors/UnusedDefinesWarning.js +29 -0
  347. package/lib/errors/UnusedExternalsWarning.js +29 -0
  348. package/lib/errors/UnusedReexportsWarning.js +42 -0
  349. package/lib/errors/UnusedRuleWarning.js +29 -0
  350. package/lib/errors/WebpackError.js +9 -5
  351. package/lib/errors/deriveStackFromNestedError.js +90 -0
  352. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  353. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  354. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  355. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  356. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  357. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  358. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  359. package/lib/hmr/lazyCompilationBackend.js +9 -6
  360. package/lib/hmr/parserHooks.js +56 -0
  361. package/lib/html/HtmlGenerator.js +276 -76
  362. package/lib/html/HtmlModule.js +7 -3
  363. package/lib/html/HtmlModulesPlugin.js +312 -174
  364. package/lib/html/HtmlParser.js +31 -86
  365. package/lib/html/data.js +1928 -0
  366. package/lib/html/htmlMinify.js +288 -0
  367. package/lib/html/syntax.js +5557 -1155
  368. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  369. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  370. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  371. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  372. package/lib/ids/IdHelpers.js +7 -8
  373. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  374. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  375. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  376. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  377. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  378. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  379. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  380. package/lib/index.js +10 -0
  381. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  382. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  383. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  384. package/lib/javascript/ChunkHelpers.js +1 -1
  385. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  386. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  387. package/lib/javascript/JavascriptGenerator.js +64 -164
  388. package/lib/javascript/JavascriptModule.js +9 -3
  389. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  390. package/lib/javascript/JavascriptParser.js +286 -110
  391. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  392. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  393. package/lib/javascript/StartupHelpers.js +55 -9
  394. package/lib/javascript/syntax.js +2678 -232
  395. package/lib/json/JsonData.js +8 -4
  396. package/lib/json/JsonGenerator.js +37 -15
  397. package/lib/json/JsonModule.js +7 -3
  398. package/lib/json/JsonModulesPlugin.js +1 -1
  399. package/lib/json/JsonParser.js +5 -6
  400. package/lib/library/AbstractLibraryPlugin.js +20 -14
  401. package/lib/library/AmdLibraryPlugin.js +11 -7
  402. package/lib/library/AssignLibraryPlugin.js +19 -13
  403. package/lib/library/EnableLibraryPlugin.js +2 -2
  404. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  405. package/lib/library/JsonpLibraryPlugin.js +11 -7
  406. package/lib/library/ModuleLibraryPlugin.js +256 -64
  407. package/lib/library/SystemLibraryPlugin.js +12 -8
  408. package/lib/library/UmdLibraryPlugin.js +62 -25
  409. package/lib/loaders/LoaderRunner.js +14 -1
  410. package/lib/loaders/loadLoader.js +8 -4
  411. package/lib/logging/createConsoleLogger.js +7 -4
  412. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  413. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  414. package/lib/node/NodeSourcePlugin.js +1 -1
  415. package/lib/node/NodeTargetPlugin.js +4 -3
  416. package/lib/node/NodeTemplatePlugin.js +1 -1
  417. package/lib/node/NodeWatchFileSystem.js +70 -9
  418. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  419. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
  420. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  421. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  422. package/lib/node/nodeConsole.js +7 -3
  423. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  424. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  425. package/lib/optimize/ConcatenatedModule.js +985 -470
  426. package/lib/optimize/ConstExportsPlugin.js +11 -7
  427. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  428. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  429. package/lib/optimize/InlineExports.js +9 -5
  430. package/lib/optimize/InnerGraph.js +28 -12
  431. package/lib/optimize/InnerGraphPlugin.js +23 -18
  432. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  433. package/lib/optimize/MangleExportsPlugin.js +7 -8
  434. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  435. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  436. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  437. package/lib/optimize/RealContentHashPlugin.js +20 -13
  438. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  439. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  440. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  441. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  442. package/lib/optimize/SplitChunksPlugin.js +86 -24
  443. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  444. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  445. package/lib/performance/BroadContextsPlugin.js +142 -0
  446. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  447. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  448. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  449. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  450. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  451. package/lib/performance/DynamicExportsPlugin.js +120 -0
  452. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  453. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  454. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  455. package/lib/performance/EvalUsagePlugin.js +115 -0
  456. package/lib/performance/HotspotsPlugin.js +296 -0
  457. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  458. package/lib/performance/LargeModulesPlugin.js +126 -0
  459. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  460. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  461. package/lib/performance/MixedExportsPlugin.js +136 -0
  462. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  463. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  464. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  465. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  466. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  467. package/lib/performance/SizeLimitsPlugin.js +139 -7
  468. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  469. package/lib/performance/TinyChunksPlugin.js +128 -0
  470. package/lib/performance/TopLevelThisPlugin.js +208 -0
  471. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  472. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  473. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  474. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  475. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  476. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  477. package/lib/performance/getModuleSize.js +22 -0
  478. package/lib/performance/getSourceModules.js +22 -0
  479. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  480. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  481. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  482. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  483. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  484. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  485. package/lib/prefetch/ResourceHintPlugin.js +295 -78
  486. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  487. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  488. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  489. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  490. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  491. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  492. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  493. package/lib/rules/RuleSetCompiler.js +146 -12
  494. package/lib/rules/UseEffectRulePlugin.js +18 -11
  495. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  496. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  497. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  498. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  499. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  500. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  501. package/lib/runtime/CompatRuntimeModule.js +5 -3
  502. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  503. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  504. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  505. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  506. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  507. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  508. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  509. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  510. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  511. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  512. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  513. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  514. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  515. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  516. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  517. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  518. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  519. package/lib/runtime/NonceRuntimeModule.js +10 -0
  520. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  521. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  522. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  523. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  524. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  525. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  526. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  527. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  528. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  529. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  530. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  531. package/lib/runtime/baseUri.js +63 -0
  532. package/lib/schemes/DataUriPlugin.js +1 -1
  533. package/lib/schemes/FileUriPlugin.js +1 -1
  534. package/lib/schemes/HttpUriPlugin.js +24 -15
  535. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  536. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  537. package/lib/serialization/BinaryMiddleware.js +4 -4
  538. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  539. package/lib/serialization/FileMiddleware.js +305 -66
  540. package/lib/serialization/ObjectMiddleware.js +11 -6
  541. package/lib/serialization/PlainObjectSerializer.js +19 -16
  542. package/lib/sharing/ConsumeSharedModule.js +30 -21
  543. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  544. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  545. package/lib/sharing/ProvideSharedModule.js +25 -16
  546. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  547. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  548. package/lib/sharing/SharePlugin.js +17 -5
  549. package/lib/sharing/ShareRuntimeModule.js +4 -4
  550. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  551. package/lib/sharing/utils.js +1 -3
  552. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  553. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  554. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  555. package/lib/stats/StatsFactory.js +25 -26
  556. package/lib/stats/StatsPrinter.js +16 -12
  557. package/lib/typescript/TypeScriptPlugin.js +12 -14
  558. package/lib/url/URLParserPlugin.js +26 -13
  559. package/lib/util/AsyncQueue.js +4 -3
  560. package/lib/util/Hash.js +5 -1
  561. package/lib/util/LazySet.js +35 -22
  562. package/lib/util/LocConverter.js +36 -13
  563. package/lib/util/SourceProcessor.js +1050 -24
  564. package/lib/util/StringXor.js +1 -1
  565. package/lib/util/chainedImports.js +9 -5
  566. package/lib/util/cleverMerge.js +1 -1
  567. package/lib/util/comparators.js +45 -14
  568. package/lib/util/concatenate.js +203 -77
  569. package/lib/util/conventions.js +5 -1
  570. package/lib/util/createHash.js +2 -2
  571. package/lib/util/createHooksRegistry.js +8 -10
  572. package/lib/util/dataURL.js +225 -1
  573. package/lib/util/extractSourceMap.js +4 -3
  574. package/lib/util/findCaseMismatch.js +139 -0
  575. package/lib/util/formatLocation.js +1 -2
  576. package/lib/util/fs.js +22 -5
  577. package/lib/util/globUtils.js +298 -24
  578. package/lib/util/hash/BatchedHash.js +5 -1
  579. package/lib/util/hash/BulkUpdateHash.js +5 -1
  580. package/lib/util/hash/DebugHash.js +5 -1
  581. package/lib/util/hash/hash-digest.js +6 -2
  582. package/lib/util/identifier.js +25 -1
  583. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  584. package/lib/util/internalSerializables.js +6 -0
  585. package/lib/util/lazyModule.js +56 -0
  586. package/lib/util/makeSerializable.js +7 -3
  587. package/lib/util/matchAlias.js +25 -0
  588. package/lib/util/mimeTypes.js +11 -5
  589. package/lib/util/nonNumericOnlyHash.js +4 -3
  590. package/lib/util/parseJson.js +5 -3
  591. package/lib/util/preloadModuleType.js +32 -0
  592. package/lib/util/registerExternalSerializer.js +7 -5
  593. package/lib/util/runtime.js +2 -2
  594. package/lib/util/semver.js +1 -1
  595. package/lib/util/serialization.js +28 -28
  596. package/lib/util/source.js +2 -2
  597. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  598. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  599. package/lib/wasm/wasmModuleFilename.js +54 -0
  600. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  601. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  602. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  603. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  604. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +54 -16
  605. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  606. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  607. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  608. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  609. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  610. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  611. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  612. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  613. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -6
  614. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  615. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  616. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  617. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  618. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  619. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  620. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  621. package/lib/web/JsonpTemplatePlugin.js +2 -2
  622. package/lib/webpack.js +22 -11
  623. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  624. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  625. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  626. package/module.d.ts +1 -0
  627. package/package.json +23 -16
  628. package/schemas/WebpackOptions.check.js +1 -1
  629. package/schemas/WebpackOptions.json +780 -91
  630. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  631. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  632. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  633. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  635. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  636. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  637. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  638. package/types.d.ts +4010 -739
  639. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -11,6 +11,7 @@ const {
11
11
  AsyncParallelHook,
12
12
  AsyncSeriesBailHook,
13
13
  AsyncSeriesHook,
14
+ AsyncSeriesWaterfallHook,
14
15
  HookMap,
15
16
  SyncBailHook,
16
17
  SyncHook,
@@ -39,19 +40,10 @@ const RuntimeGlobals = require("./RuntimeGlobals");
39
40
  const RuntimeTemplate = require("./RuntimeTemplate");
40
41
  const Stats = require("./Stats");
41
42
  const buildChunkGraph = require("./buildChunkGraph");
42
- const BuildCycleError = require("./errors/BuildCycleError");
43
- const ChunkRenderError = require("./errors/ChunkRenderError");
44
- const CodeGenerationError = require("./errors/CodeGenerationError");
45
43
  const {
46
44
  makeWebpackError,
47
45
  tryRunOrWebpackError
48
46
  } = require("./errors/HookWebpackError");
49
- const ModuleDependencyError = require("./errors/ModuleDependencyError");
50
- const ModuleDependencyWarning = require("./errors/ModuleDependencyWarning");
51
- const ModuleHashingError = require("./errors/ModuleHashingError");
52
- const ModuleNotFoundError = require("./errors/ModuleNotFoundError");
53
- const ModuleRestoreError = require("./errors/ModuleRestoreError");
54
- const ModuleStoreError = require("./errors/ModuleStoreError");
55
47
  const WebpackError = require("./errors/WebpackError");
56
48
  const { LogType, Logger } = require("./logging/Logger");
57
49
  const StatsFactory = require("./stats/StatsFactory");
@@ -63,11 +55,10 @@ const { getOrInsert } = require("./util/MapHelpers");
63
55
  const WeakTupleMap = require("./util/WeakTupleMap");
64
56
  const { cachedCleverMerge } = require("./util/cleverMerge");
65
57
  const {
58
+ compareErrors,
66
59
  compareIds,
67
- compareLocations,
68
60
  compareModulesByIdentifier,
69
61
  compareSelect,
70
- compareStringsNumeric,
71
62
  concatComparators
72
63
  } = require("./util/comparators");
73
64
  const createHash = require("./util/createHash");
@@ -76,62 +67,124 @@ const {
76
67
  createFakeHook,
77
68
  soonFrozenObjectDeprecation
78
69
  } = require("./util/deprecation");
70
+ const memoize = require("./util/memoize");
79
71
  const processAsyncTree = require("./util/processAsyncTree");
80
72
  const { getRuntimeKey } = require("./util/runtime");
81
73
  const { isSourceEqual } = require("./util/source");
82
74
 
83
- /** @typedef {import("webpack-sources").Source} Source */
84
- /** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
85
- /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
86
- /** @typedef {import("../declarations/WebpackOptions").HashDigest} HashDigest */
87
- /** @typedef {import("../declarations/WebpackOptions").HashDigestLength} HashDigestLength */
88
- /** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
89
- /** @typedef {import("../declarations/WebpackOptions").Plugins} Plugins */
90
- /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
91
- /** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptionsWithDefaults */
92
- /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
93
- /** @typedef {import("./Cache")} Cache */
94
- /** @typedef {import("./CacheFacade")} CacheFacade */
95
- /** @typedef {import("./Chunk").ChunkName} ChunkName */
96
- /** @typedef {import("./Chunk").ChunkId} ChunkId */
97
- /** @typedef {import("./ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */
98
- /** @typedef {import("./Compiler")} Compiler */
99
- /** @typedef {import("./Compiler").CompilationParams} CompilationParams */
100
- /** @typedef {import("./Compiler").MemCache} MemCache */
101
- /** @typedef {import("./Compiler").WeakReferences} WeakReferences */
102
- /** @typedef {import("./Compiler").ModuleMemCachesItem} ModuleMemCachesItem */
103
- /** @typedef {import("./Compiler").Records} Records */
104
- /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
105
- /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
106
- /** @typedef {import("./Dependency").ReferencedExports} ReferencedExports */
75
+ const getModuleStoreError = memoize(() => require("./errors/ModuleStoreError"));
76
+
77
+ const getModuleRestoreError = memoize(() =>
78
+ require("./errors/ModuleRestoreError")
79
+ );
80
+
81
+ const getModuleNotFoundError = memoize(() =>
82
+ require("./errors/ModuleNotFoundError")
83
+ );
84
+
85
+ const getModuleHashingError = memoize(() =>
86
+ require("./errors/ModuleHashingError")
87
+ );
88
+
89
+ const getModuleDependencyWarning = memoize(() =>
90
+ require("./errors/ModuleDependencyWarning")
91
+ );
92
+
93
+ const getModuleDependencyError = memoize(() =>
94
+ require("./errors/ModuleDependencyError")
95
+ );
96
+
97
+ const getCodeGenerationError = memoize(() =>
98
+ require("./errors/CodeGenerationError")
99
+ );
100
+
101
+ const getChunkRenderError = memoize(() => require("./errors/ChunkRenderError"));
102
+
103
+ const getBuildCycleError = memoize(() => require("./errors/BuildCycleError"));
104
+
105
+ /** @import { Source } from "webpack-sources" */
106
+ /**
107
+ * @import {
108
+ * OutputNormalized as OutputOptions,
109
+ * HashFunction,
110
+ * HashDigest,
111
+ * HashDigestLength,
112
+ * StatsOptions,
113
+ * Plugins,
114
+ * ResolveOptions
115
+ * } from "../declarations/WebpackOptions"
116
+ */
117
+ /**
118
+ * @import {
119
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions,
120
+ * OutputNormalizedWithDefaults as OutputOptionsWithDefaults
121
+ * } from "./config/defaults"
122
+ */
123
+ /** @import AsyncDependenciesBlock from "./AsyncDependenciesBlock" */
124
+ /** @import Cache from "./Cache" */
125
+ /** @import CacheFacade from "./CacheFacade" */
126
+ /** @import { ChunkName, ChunkId } from "./Chunk" */
127
+ /** @import { ChunkGroupOptions } from "./ChunkGroup" */
128
+ /**
129
+ * @import Compiler, {
130
+ * CompilationParams,
131
+ * MemCache,
132
+ * WeakReferences,
133
+ * ModuleMemCachesItem,
134
+ * Records
135
+ * } from "./Compiler"
136
+ */
137
+ /** @import DependenciesBlock from "./DependenciesBlock" */
138
+ /** @import { DependencyLocation, ReferencedExports } from "./Dependency" */
107
139
  /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
108
- /** @typedef {import("./Module").NameForCondition} NameForCondition */
109
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
110
- /** @typedef {import("./Module").ValueCacheVersions} ValueCacheVersions */
111
- /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
112
- /** @typedef {import("./Module").SourceTypes} SourceTypes */
113
- /** @typedef {import("./NormalModule").NormalModuleCompilationHooks} NormalModuleCompilationHooks */
114
- /** @typedef {import("./Module").FactoryMeta} FactoryMeta */
115
- /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
116
- /** @typedef {import("./ModuleFactory")} ModuleFactory */
117
- /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
118
- /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
119
- /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
120
- /** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
121
- /** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
122
- /** @typedef {import("./NormalModule")} NormalModule */
123
- /** @typedef {import("./NormalModule").AnyLoaderContext} AnyLoaderContext */
124
- /** @typedef {import("./NormalModule").ParserOptions} ParserOptions */
125
- /** @typedef {import("./NormalModule").GeneratorOptions} GeneratorOptions */
126
- /** @typedef {import("./RequestShortener")} RequestShortener */
127
- /** @typedef {import("./RuntimeModule")} RuntimeModule */
128
- /** @typedef {import("./Template").RenderManifestEntry} RenderManifestEntry */
129
- /** @typedef {import("./Template").RenderManifestOptions} RenderManifestOptions */
130
- /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
131
- /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
132
- /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModule} StatsModule */
133
- /** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
134
- /** @typedef {import("./util/Hash")} Hash */
140
+ /**
141
+ * @import {
142
+ * NameForCondition,
143
+ * BuildInfo,
144
+ * ValueCacheVersions,
145
+ * RuntimeRequirements,
146
+ * SourceTypes,
147
+ * SourceType,
148
+ * FactoryMeta,
149
+ * CodeGenerationResult
150
+ * } from "./Module"
151
+ */
152
+ /**
153
+ * @import NormalModule, {
154
+ * NormalModuleCompilationHooks,
155
+ * AnyLoaderContext,
156
+ * ParserOptions,
157
+ * GeneratorOptions
158
+ * } from "./NormalModule"
159
+ */
160
+ /**
161
+ * @import ModuleFactory, {
162
+ * ModuleFactoryCreateDataContextInfo,
163
+ * ModuleFactoryResult
164
+ * } from "./ModuleFactory"
165
+ */
166
+ /** @import { ModuleId } from "./ChunkGraph" */
167
+ /** @import ModuleGraphConnection from "./ModuleGraphConnection" */
168
+ /** @import RequestShortener from "./RequestShortener" */
169
+ /** @import RuntimeModule from "./RuntimeModule" */
170
+ /** @import { RenderManifestEntry, RenderManifestOptions } from "./Template" */
171
+
172
+ /**
173
+ * One language's source embedded in another's output.
174
+ * @typedef {object} EmbeddedSourceInfo
175
+ * @property {SourceType} type the embedded source's type, e.g. `"css"` / `"html"`
176
+ * @property {SourceType} hostType the type of the source it is embedded in, e.g. `"javascript"`
177
+ * @property {Module} module the module being generated
178
+ * @property {string=} as which of that language's productions this is, where more than one can be embedded — a `style=""` holds `"block-contents"`, an inline `<style>` a whole `"stylesheet"`. Absent where the language has only one
179
+ */
180
+ /**
181
+ * @import {
182
+ * StatsAsset,
183
+ * StatsError,
184
+ * StatsModule
185
+ * } from "./stats/DefaultStatsFactoryPlugin"
186
+ */
187
+ /** @import Hash from "./util/Hash" */
135
188
 
136
189
  /**
137
190
  * Defines the shared type used by this module.
@@ -144,8 +197,8 @@ const { isSourceEqual } = require("./util/source");
144
197
  * @template T
145
198
  * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T>
146
199
  */
147
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
148
- /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
200
+ /** @import { RuntimeSpec } from "./util/runtime" */
201
+ /** @import { InputFileSystem } from "./util/fs" */
149
202
 
150
203
  /**
151
204
  * Defines the callback callback.
@@ -276,7 +329,7 @@ const { isSourceEqual } = require("./util/source");
276
329
  * @property {CodeGenerationResult} codeGenerationResult
277
330
  */
278
331
 
279
- /** @typedef {((id: string) => ExecuteModuleExports) & { i?: ((options: ExecuteOptions) => void)[], c?: Record<string, ExecuteModuleObject> }} WebpackRequire */
332
+ /** @typedef {((id: string) => ExecuteModuleExports) & { i?: ((options: ExecuteOptions) => void)[], c?: Record<string, ExecuteModuleObject>, p?: string }} WebpackRequire */
280
333
 
281
334
  /**
282
335
  * Defines the execute options type used by this module.
@@ -523,20 +576,6 @@ const byNameOrHash = concatComparators(
523
576
  compareSelect((c) => c.fullHash, compareIds)
524
577
  );
525
578
 
526
- const byMessage = compareSelect(
527
- (err) => `${err.message}`,
528
- compareStringsNumeric
529
- );
530
-
531
- const byModule = compareSelect(
532
- (err) => (err.module && err.module.identifier()) || "",
533
- compareStringsNumeric
534
- );
535
-
536
- const byLocation = compareSelect((err) => err.loc, compareLocations);
537
-
538
- const compareErrors = concatComparators(byModule, byLocation, byMessage);
539
-
540
579
  /**
541
580
  * Defines the known unsafe cache data type used by this module.
542
581
  * @typedef {object} KnownUnsafeCacheData
@@ -594,6 +633,7 @@ const reduceAffectType = (connections) => {
594
633
 
595
634
  /** @typedef {{ id: ModuleId, modules?: Map<Module, ModuleId>, blocks?: (ChunkId | null)[], sourceTypes?: SourceTypes }} References */
596
635
  /** @typedef {Map<Module, WeakTupleMap<EXPECTED_ANY[], EXPECTED_ANY>>} ModuleMemCaches */
636
+ /** @typedef {{ chunk: Chunk, load: () => Promise<EXPECTED_ANY>, create: (loaded: EXPECTED_ANY) => RuntimeModule, chunkGraph: ChunkGraph }} PendingRuntimeModule */
597
637
 
598
638
  class Compilation {
599
639
  /**
@@ -884,9 +924,15 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
884
924
  "runtime"
885
925
  ]),
886
926
 
887
- /** @type {SyncHook<[ExecuteModuleArgument, ExecuteModuleContext]>} */
927
+ /**
928
+ * @type {SyncHook<[ExecuteModuleArgument, ExecuteModuleContext]>}
929
+ * @since 5.32.0
930
+ */
888
931
  executeModule: new SyncHook(["options", "context"]),
889
- /** @type {AsyncParallelHook<[ExecuteModuleArgument, ExecuteModuleContext]>} */
932
+ /**
933
+ * @type {AsyncParallelHook<[ExecuteModuleArgument, ExecuteModuleContext]>}
934
+ * @since 5.33.0
935
+ */
890
936
  prepareModuleExecution: new AsyncParallelHook(["options", "context"]),
891
937
 
892
938
  /** @type {AsyncSeriesHook<[Iterable<Module>]>} */
@@ -1090,7 +1136,10 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1090
1136
 
1091
1137
  processAssets: processAssetsHook,
1092
1138
  afterProcessAssets: afterProcessAssetsHook,
1093
- /** @type {AsyncSeriesHook<[CompilationAssets]>} */
1139
+ /**
1140
+ * @type {AsyncSeriesHook<[CompilationAssets]>}
1141
+ * @since 5.8.0
1142
+ */
1094
1143
  processAdditionalAssets: new AsyncSeriesHook(["assets"]),
1095
1144
 
1096
1145
  /** @type {SyncBailHook<[], boolean | void>} */
@@ -1101,6 +1150,27 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1101
1150
  /** @type {SyncWaterfallHook<[RenderManifestEntry[], RenderManifestOptions]>} */
1102
1151
  renderManifest: new SyncWaterfallHook(["result", "options"]),
1103
1152
 
1153
+ /**
1154
+ * Called with source written in one language that a module emits inside
1155
+ * another — CSS or HTML reaching the bundle as a JavaScript string
1156
+ * literal today — before it is embedded; return the (possibly
1157
+ * transformed) source, e.g. a minified one. `info.type` says which
1158
+ * language it is, so one tap serves every pair; no asset carries this
1159
+ * source, so an asset-level minimizer cannot reach it.
1160
+ * @type {AsyncSeriesWaterfallHook<[Source, EmbeddedSourceInfo]>}
1161
+ * @since 5.110.0
1162
+ */
1163
+ renderEmbeddedSource: new AsyncSeriesWaterfallHook(["source", "info"]),
1164
+ /**
1165
+ * Called while hashing a module that embeds such a source. Module hashes
1166
+ * are taken before code generation, so a `renderEmbeddedSource` tap must
1167
+ * write whatever it varies on into the hash, or the codegen cache
1168
+ * replays output from before its options changed.
1169
+ * @type {SyncHook<[Module, Hash]>}
1170
+ * @since 5.110.0
1171
+ */
1172
+ embeddedSourceHash: new SyncHook(["module", "hash"]),
1173
+
1104
1174
  /** @type {SyncHook<[Hash]>} */
1105
1175
  fullHash: new SyncHook(["hash"]),
1106
1176
  /** @type {SyncHook<[Chunk, Hash, ChunkHashContext]>} */
@@ -1231,6 +1301,27 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1231
1301
  );
1232
1302
  /** @type {CodeGenerationResults | undefined} */
1233
1303
  this.codeGenerationResults = undefined;
1304
+ /**
1305
+ * What `renderEmbeddedSource` returned, by module and by language pair and
1306
+ * text. Never shared between modules: a returned source may carry a map,
1307
+ * which names the module it came from.
1308
+ * @type {Map<Module, Map<string, Source>>}
1309
+ * @private
1310
+ */
1311
+ this._embeddedSources = new Map();
1312
+ /**
1313
+ * Embedded source seen this pass that the hook has not been run over yet.
1314
+ * @type {Map<Module, Map<string, { source: Source, info: EmbeddedSourceInfo, jobModule: Module }>>}
1315
+ * @private
1316
+ */
1317
+ this._pendingEmbeddedSources = new Map();
1318
+ /**
1319
+ * The module whose code generation is currently running — the outer one
1320
+ * when a generator runs nested, as `ConcatenatedModule` does.
1321
+ * @type {Module | undefined}
1322
+ * @private
1323
+ */
1324
+ this._generatingModule = undefined;
1234
1325
 
1235
1326
  /** @type {AsyncQueue<Module, Module, Module>} */
1236
1327
  this.processDependenciesQueue = new AsyncQueue({
@@ -1323,6 +1414,10 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1323
1414
  this.errors = [];
1324
1415
  /** @type {Error[]} */
1325
1416
  this.warnings = [];
1417
+ // Hints reported with `performance.hints: "stats"` — surfaced in stats
1418
+ // only, so they neither fail the build nor count as warnings.
1419
+ /** @type {Error[]} */
1420
+ this.hints = [];
1326
1421
  /** @type {Compilation[]} */
1327
1422
  this.children = [];
1328
1423
  /** @type {Map<string, LogEntry[]>} */
@@ -1387,6 +1482,8 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1387
1482
  this._assetsCache = this.getCache("Compilation/assets");
1388
1483
  /** @type {CacheFacade} */
1389
1484
  this._codeGenerationCache = this.getCache("Compilation/codeGeneration");
1485
+ /** @type {PendingRuntimeModule[] | undefined} */
1486
+ this._pendingRuntimeModules = undefined;
1390
1487
 
1391
1488
  const unsafeCache = options.module.unsafeCache;
1392
1489
  /** @type {boolean} */
@@ -1629,7 +1726,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1629
1726
  }
1630
1727
 
1631
1728
  this._modulesCache.get(identifier, null, (err, cacheModule) => {
1632
- if (err) return callback(new ModuleRestoreError(module, err));
1729
+ if (err) return callback(new (getModuleRestoreError())(module, err));
1633
1730
 
1634
1731
  if (currentProfile !== undefined) {
1635
1732
  currentProfile.markRestoringEnd();
@@ -1745,7 +1842,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
1745
1842
  module,
1746
1843
  /** @type {WebpackError} */ (err)
1747
1844
  );
1748
- return callback(new ModuleStoreError(module, err));
1845
+ return callback(new (getModuleStoreError())(module, err));
1749
1846
  }
1750
1847
  this.hooks.succeedModule.call(module);
1751
1848
  return callback();
@@ -2249,7 +2346,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
2249
2346
  }
2250
2347
  }
2251
2348
  if (err) {
2252
- const notFoundError = new ModuleNotFoundError(
2349
+ const notFoundError = new (getModuleNotFoundError())(
2253
2350
  originModule,
2254
2351
  err,
2255
2352
  /** @type {DependencyLocation} */
@@ -2508,7 +2605,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
2508
2605
  if (blockReasons !== undefined) {
2509
2606
  for (const m of blockReasons) {
2510
2607
  if (m === module) {
2511
- return callback(new BuildCycleError(module));
2608
+ return callback(new (getBuildCycleError())(module));
2512
2609
  }
2513
2610
  set.add(m);
2514
2611
  }
@@ -3779,100 +3876,105 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3779
3876
  this.logger.time("runtime requirements");
3780
3877
  this.hooks.beforeRuntimeRequirements.call();
3781
3878
  this.processRuntimeRequirements();
3782
- this.hooks.afterRuntimeRequirements.call();
3783
- this.logger.timeEnd("runtime requirements");
3784
-
3785
- this.logger.time("hashing");
3786
- this.hooks.beforeHash.call();
3787
- const codeGenerationJobs = this.createHash();
3788
- this.hooks.afterHash.call();
3789
- this.logger.timeEnd("hashing");
3790
-
3791
- this._runCodeGenerationJobs(codeGenerationJobs, (err) => {
3879
+ this._attachPendingRuntimeModules((err) => {
3792
3880
  if (err) {
3793
3881
  return finalCallback(err);
3794
3882
  }
3883
+ this.hooks.afterRuntimeRequirements.call();
3884
+ this.logger.timeEnd("runtime requirements");
3795
3885
 
3796
- if (shouldRecord) {
3797
- this.logger.time("record hash");
3798
- this.hooks.recordHash.call(
3799
- /** @type {Records} */
3800
- (this.records)
3801
- );
3802
- this.logger.timeEnd("record hash");
3803
- }
3886
+ this.logger.time("hashing");
3887
+ this.hooks.beforeHash.call();
3888
+ const codeGenerationJobs = this.createHash();
3889
+ this.hooks.afterHash.call();
3890
+ this.logger.timeEnd("hashing");
3804
3891
 
3805
- this.logger.time("module assets");
3806
- this.clearAssets();
3892
+ this._runCodeGenerationJobs(codeGenerationJobs, (err) => {
3893
+ if (err) {
3894
+ return finalCallback(err);
3895
+ }
3807
3896
 
3808
- this.hooks.beforeModuleAssets.call();
3809
- this.createModuleAssets();
3810
- this.logger.timeEnd("module assets");
3897
+ if (shouldRecord) {
3898
+ this.logger.time("record hash");
3899
+ this.hooks.recordHash.call(
3900
+ /** @type {Records} */
3901
+ (this.records)
3902
+ );
3903
+ this.logger.timeEnd("record hash");
3904
+ }
3811
3905
 
3812
- const cont = () => {
3813
- this.logger.time("process assets");
3814
- this.hooks.processAssets.callAsync(this.assets, (err) => {
3815
- if (err) {
3816
- return finalCallback(
3817
- makeWebpackError(err, "Compilation.hooks.processAssets")
3818
- );
3819
- }
3820
- this.hooks.afterProcessAssets.call(this.assets);
3821
- this.logger.timeEnd("process assets");
3822
- this.assets =
3823
- /** @type {CompilationAssets} */
3824
- (
3825
- this._backCompat
3826
- ? soonFrozenObjectDeprecation(
3827
- this.assets,
3828
- "Compilation.assets",
3829
- "DEP_WEBPACK_COMPILATION_ASSETS",
3830
- `BREAKING CHANGE: No more changes should happen to Compilation.assets after sealing the Compilation.
3831
- Do changes to assets earlier, e. g. in Compilation.hooks.processAssets.
3832
- Make sure to select an appropriate stage from Compilation.PROCESS_ASSETS_STAGE_*.`
3833
- )
3834
- : Object.freeze(this.assets)
3835
- );
3906
+ this.logger.time("module assets");
3907
+ this.clearAssets();
3836
3908
 
3837
- this.summarizeDependencies();
3838
- if (shouldRecord) {
3839
- this.hooks.record.call(
3840
- this,
3841
- /** @type {Records} */
3842
- (this.records)
3843
- );
3844
- }
3909
+ this.hooks.beforeModuleAssets.call();
3910
+ this.createModuleAssets();
3911
+ this.logger.timeEnd("module assets");
3845
3912
 
3846
- if (this.hooks.needAdditionalSeal.call()) {
3847
- this.unseal();
3848
- return this.seal(callback);
3849
- }
3850
- return this.hooks.afterSeal.callAsync((err) => {
3913
+ const cont = () => {
3914
+ this.logger.time("process assets");
3915
+ this.hooks.processAssets.callAsync(this.assets, (err) => {
3851
3916
  if (err) {
3852
3917
  return finalCallback(
3853
- makeWebpackError(err, "Compilation.hooks.afterSeal")
3918
+ makeWebpackError(err, "Compilation.hooks.processAssets")
3919
+ );
3920
+ }
3921
+ this.hooks.afterProcessAssets.call(this.assets);
3922
+ this.logger.timeEnd("process assets");
3923
+ this.assets =
3924
+ /** @type {CompilationAssets} */
3925
+ (
3926
+ this._backCompat
3927
+ ? soonFrozenObjectDeprecation(
3928
+ this.assets,
3929
+ "Compilation.assets",
3930
+ "DEP_WEBPACK_COMPILATION_ASSETS",
3931
+ `BREAKING CHANGE: No more changes should happen to Compilation.assets after sealing the Compilation.
3932
+ Do changes to assets earlier, e. g. in Compilation.hooks.processAssets.
3933
+ Make sure to select an appropriate stage from Compilation.PROCESS_ASSETS_STAGE_*.`
3934
+ )
3935
+ : Object.freeze(this.assets)
3936
+ );
3937
+
3938
+ this.summarizeDependencies();
3939
+ if (shouldRecord) {
3940
+ this.hooks.record.call(
3941
+ this,
3942
+ /** @type {Records} */
3943
+ (this.records)
3854
3944
  );
3855
3945
  }
3856
- this.fileSystemInfo.logStatistics();
3857
- finalCallback();
3946
+
3947
+ if (this.hooks.needAdditionalSeal.call()) {
3948
+ this.unseal();
3949
+ return this.seal(callback);
3950
+ }
3951
+ return this.hooks.afterSeal.callAsync((err) => {
3952
+ if (err) {
3953
+ return finalCallback(
3954
+ makeWebpackError(err, "Compilation.hooks.afterSeal")
3955
+ );
3956
+ }
3957
+ this.fileSystemInfo.logStatistics();
3958
+ finalCallback();
3959
+ });
3858
3960
  });
3859
- });
3860
- };
3961
+ };
3861
3962
 
3862
- this.logger.time("create chunk assets");
3863
- if (this.hooks.shouldGenerateChunkAssets.call() !== false) {
3864
- this.hooks.beforeChunkAssets.call();
3865
- this.createChunkAssets((err) => {
3963
+ this.logger.time("create chunk assets");
3964
+ if (this.hooks.shouldGenerateChunkAssets.call() !== false) {
3965
+ this.hooks.beforeChunkAssets.call();
3966
+ this.createChunkAssets((err) => {
3967
+ this.logger.timeEnd("create chunk assets");
3968
+ if (err) {
3969
+ return finalCallback(err);
3970
+ }
3971
+ cont();
3972
+ });
3973
+ } else {
3866
3974
  this.logger.timeEnd("create chunk assets");
3867
- if (err) {
3868
- return finalCallback(err);
3869
- }
3870
3975
  cont();
3871
- });
3872
- } else {
3873
- this.logger.timeEnd("create chunk assets");
3874
- cont();
3875
- }
3976
+ }
3977
+ });
3876
3978
  });
3877
3979
  });
3878
3980
  }
@@ -3898,7 +4000,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3898
4000
  // A consolidated dependency (e.g. CssIcssExportDependency) carries
3899
4001
  // per-item locations on the error itself; fall back to the
3900
4002
  // dependency loc for the usual one-loc-per-dependency case.
3901
- const warning = new ModuleDependencyWarning(
4003
+ const warning = new (getModuleDependencyWarning())(
3902
4004
  module,
3903
4005
  w,
3904
4006
  /** @type {EXPECTED_ANY} */ (w).loc || d.loc
@@ -3910,7 +4012,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3910
4012
  const errors = d.getErrors(this.moduleGraph);
3911
4013
  if (errors) {
3912
4014
  for (const e of errors) {
3913
- const error = new ModuleDependencyError(
4015
+ const error = new (getModuleDependencyError())(
3914
4016
  module,
3915
4017
  e,
3916
4018
  /** @type {EXPECTED_ANY} */ (e).loc || d.loc
@@ -3966,6 +4068,120 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3966
4068
  this._runCodeGenerationJobs(jobs, callback);
3967
4069
  }
3968
4070
 
4071
+ /**
4072
+ * Offer source one language embeds in another to `renderEmbeddedSource`. The
4073
+ * hook is async and generation is not, so the first pass returns the source
4074
+ * untouched and records it; `_resolveEmbeddedSources` awaits the hook and
4075
+ * generates those modules again, when the resolved source is waiting here.
4076
+ * @param {Source} source the embedded source
4077
+ * @param {EmbeddedSourceInfo} info what it is and where it is going
4078
+ * @returns {Source} the resolved source, or `source` until it is resolved
4079
+ */
4080
+ _resolveEmbeddedSource(source, info) {
4081
+ // Untapped, nothing can change: skip reading the text and the second pass.
4082
+ if (this.hooks.renderEmbeddedSource.taps.length === 0) return source;
4083
+ const text = /** @type {string} */ (source.source());
4084
+ // Everything the hook is handed is in the key: a tap answers per language
4085
+ // pair, so identical text offered as two of them is two questions.
4086
+ const key = `${info.type}${info.hostType}${text}`;
4087
+ const resolved = this._embeddedSources.get(info.module);
4088
+ if (resolved !== undefined) {
4089
+ const hit = resolved.get(key);
4090
+ if (hit !== undefined) return hit;
4091
+ }
4092
+ getOrInsert(this._pendingEmbeddedSources, info.module, () => new Map()).set(
4093
+ key,
4094
+ { source, info, jobModule: this._generatingModule || info.module }
4095
+ );
4096
+ return source;
4097
+ }
4098
+
4099
+ /**
4100
+ * Run `renderEmbeddedSource` over everything the last pass recorded, then
4101
+ * generate those modules again so the resolved source is the one embedded.
4102
+ * @private
4103
+ * @param {CodeGenerationJobs} jobs the jobs the last pass ran
4104
+ * @param {Callback} callback callback
4105
+ * @returns {void}
4106
+ */
4107
+ _resolveEmbeddedSources(jobs, callback) {
4108
+ if (this._pendingEmbeddedSources.size === 0) return callback();
4109
+ /** @type {{ key: string, source: Source, info: EmbeddedSourceInfo, jobModule: Module }[]} */
4110
+ const pending = [];
4111
+ for (const byKey of this._pendingEmbeddedSources.values()) {
4112
+ for (const [key, entry] of byKey) {
4113
+ pending.push({ key, ...entry });
4114
+ }
4115
+ }
4116
+ this._pendingEmbeddedSources.clear();
4117
+ asyncLib.each(
4118
+ pending,
4119
+ ({ key, source, info }, cb) => {
4120
+ this.hooks.renderEmbeddedSource.callAsync(
4121
+ source,
4122
+ info,
4123
+ /**
4124
+ * @param {(Error | null)=} err error
4125
+ * @param {Source=} result the resolved source
4126
+ * @returns {void}
4127
+ */
4128
+ (err, result) => {
4129
+ if (err) return cb(err);
4130
+ getOrInsert(
4131
+ this._embeddedSources,
4132
+ info.module,
4133
+ () => new Map()
4134
+ ).set(key, result || source);
4135
+ cb();
4136
+ }
4137
+ );
4138
+ },
4139
+ (err) => {
4140
+ if (err) return callback(/** @type {WebpackError} */ (err));
4141
+ const affected = new Set(pending.map(({ jobModule }) => jobModule));
4142
+ const redo = jobs.filter(({ module }) => affected.has(module));
4143
+ // Generated directly rather than through the codegen cache: the module
4144
+ // hash is unchanged, so the cache would hand back the first pass again.
4145
+ const results =
4146
+ /** @type {CodeGenerationResults} */
4147
+ (this.codeGenerationResults);
4148
+ for (const { module, runtime, runtimes } of redo) {
4149
+ /** @type {CodeGenerationResult} */
4150
+ let result;
4151
+ try {
4152
+ this._generatingModule = module;
4153
+ result = module.codeGeneration({
4154
+ chunkGraph: this.chunkGraph,
4155
+ moduleGraph: this.moduleGraph,
4156
+ dependencyTemplates: this.dependencyTemplates,
4157
+ runtimeTemplate: this.runtimeTemplate,
4158
+ runtime,
4159
+ runtimes,
4160
+ codeGenerationResults: results,
4161
+ compilation: this
4162
+ });
4163
+ } catch (err) {
4164
+ // Reported and carried on with, as the first pass does: a throw
4165
+ // here would leave the build with no error to show for it.
4166
+ this.errors.push(
4167
+ new (getCodeGenerationError())(module, /** @type {Error} */ (err))
4168
+ );
4169
+ result = {
4170
+ sources: new Map(),
4171
+ runtimeRequirements: null,
4172
+ data: undefined
4173
+ };
4174
+ } finally {
4175
+ this._generatingModule = undefined;
4176
+ }
4177
+ for (const r of runtimes) results.add(module, r, result);
4178
+ }
4179
+ // A tap that changed the source again is resolved on the next round.
4180
+ this._resolveEmbeddedSources(redo, callback);
4181
+ }
4182
+ );
4183
+ }
4184
+
3969
4185
  /**
3970
4186
  * Run code generation jobs.
3971
4187
  * @private
@@ -3977,6 +4193,10 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3977
4193
  if (jobs.length === 0) {
3978
4194
  return callback();
3979
4195
  }
4196
+ // `jobs` is reassigned per iteration; embedded source is resolved over all.
4197
+ // Untapped nothing is recorded, so the array is not held past its iteration.
4198
+ const allJobs =
4199
+ this.hooks.renderEmbeddedSource.taps.length === 0 ? undefined : jobs;
3980
4200
  let statModulesFromCache = 0;
3981
4201
  let statModulesGenerated = 0;
3982
4202
  const { chunkGraph, moduleGraph, dependencyTemplates, runtimeTemplate } =
@@ -4069,7 +4289,11 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4069
4289
  (statModulesGenerated + statModulesFromCache)
4070
4290
  )}% code generated (${statModulesGenerated} generated, ${statModulesFromCache} from cache)`
4071
4291
  );
4072
- callback();
4292
+ this._resolveEmbeddedSources(allJobs || jobs, (err) => {
4293
+ this._embeddedSources.clear();
4294
+ this._pendingEmbeddedSources.clear();
4295
+ callback(err);
4296
+ });
4073
4297
  }
4074
4298
  );
4075
4299
  };
@@ -4113,6 +4337,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4113
4337
  try {
4114
4338
  codeGenerated = true;
4115
4339
  this.codeGeneratedModules.add(module);
4340
+ this._generatingModule = module;
4116
4341
  result = module.codeGeneration({
4117
4342
  chunkGraph,
4118
4343
  moduleGraph,
@@ -4125,13 +4350,15 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4125
4350
  });
4126
4351
  } catch (err) {
4127
4352
  errors.push(
4128
- new CodeGenerationError(module, /** @type {Error} */ (err))
4353
+ new (getCodeGenerationError())(module, /** @type {Error} */ (err))
4129
4354
  );
4130
4355
  result = {
4131
4356
  sources: new Map(),
4132
4357
  runtimeRequirements: null,
4133
4358
  data: undefined
4134
4359
  };
4360
+ } finally {
4361
+ this._generatingModule = undefined;
4135
4362
  }
4136
4363
  for (const runtime of runtimes) {
4137
4364
  results.add(module, runtime, result);
@@ -4154,6 +4381,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4154
4381
  try {
4155
4382
  codeGenerated = true;
4156
4383
  this.codeGeneratedModules.add(module);
4384
+ this._generatingModule = module;
4157
4385
  result = module.codeGeneration({
4158
4386
  chunkGraph,
4159
4387
  moduleGraph,
@@ -4166,13 +4394,15 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4166
4394
  });
4167
4395
  } catch (err) {
4168
4396
  errors.push(
4169
- new CodeGenerationError(module, /** @type {Error} */ (err))
4397
+ new (getCodeGenerationError())(module, /** @type {Error} */ (err))
4170
4398
  );
4171
4399
  result = cachedResult = {
4172
4400
  sources: new Map(),
4173
4401
  runtimeRequirements: null,
4174
4402
  data: undefined
4175
4403
  };
4404
+ } finally {
4405
+ this._generatingModule = undefined;
4176
4406
  }
4177
4407
  } else {
4178
4408
  result = cachedResult;
@@ -4347,6 +4577,46 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4347
4577
  this.logger.timeEnd("runtime requirements.entries");
4348
4578
  }
4349
4579
 
4580
+ /**
4581
+ * Queues a runtime module whose implementation is loaded on demand, for
4582
+ * `_attachPendingRuntimeModules` to await and build once the requirement pass
4583
+ * is over. `runtimeRequirementInTree` is a sync hook, so a tap cannot await
4584
+ * the load itself; anything the tap reads off the requirement set must be
4585
+ * captured before queueing, since `create` runs later.
4586
+ * @param {Chunk} chunk target chunk
4587
+ * @param {() => Promise<EXPECTED_ANY>} load resolves the runtime module implementation
4588
+ * @param {(loaded: EXPECTED_ANY) => RuntimeModule} create builds the runtime module from it
4589
+ * @param {ChunkGraph} chunkGraph the chunk graph
4590
+ * @returns {void}
4591
+ */
4592
+ addLazyRuntimeModule(chunk, load, create, chunkGraph = this.chunkGraph) {
4593
+ if (this._pendingRuntimeModules === undefined) {
4594
+ this._pendingRuntimeModules = [];
4595
+ }
4596
+ this._pendingRuntimeModules.push({ chunk, load, create, chunkGraph });
4597
+ }
4598
+
4599
+ /**
4600
+ * Awaits and attaches everything `addLazyRuntimeModule` queued. The only
4601
+ * place a deferred runtime module implementation is loaded.
4602
+ * @param {Callback} callback signals when the call finishes
4603
+ * @returns {void}
4604
+ */
4605
+ _attachPendingRuntimeModules(callback) {
4606
+ const pending = this._pendingRuntimeModules;
4607
+ if (pending === undefined) return callback(null);
4608
+ this._pendingRuntimeModules = undefined;
4609
+ Promise.all(pending.map(({ load }) => load()))
4610
+ .then((loaded) => {
4611
+ for (let i = 0; i < pending.length; i++) {
4612
+ const { chunk, create, chunkGraph } = pending[i];
4613
+ this.addRuntimeModule(chunk, create(loaded[i]), chunkGraph);
4614
+ }
4615
+ })
4616
+ // a `runtimeModule` tap may have queued more
4617
+ .then(() => this._attachPendingRuntimeModules(callback), callback);
4618
+ }
4619
+
4350
4620
  // TODO webpack 6 make chunkGraph argument non-optional
4351
4621
  /**
4352
4622
  * Adds runtime module.
@@ -4727,6 +4997,8 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4727
4997
 
4728
4998
  this.errors.sort(compareErrors);
4729
4999
  this.warnings.sort(compareErrors);
5000
+ // `hints` is sorted where stats read it — producers tap `afterSeal` and
5001
+ // `afterEmit`, so they append after this point.
4730
5002
  this.children.sort(byNameOrHash);
4731
5003
  }
4732
5004
 
@@ -4843,7 +5115,9 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
4843
5115
  });
4844
5116
  moduleHashDigest = moduleHash.digest(hashDigest);
4845
5117
  } catch (err) {
4846
- errors.push(new ModuleHashingError(module, /** @type {Error} */ (err)));
5118
+ errors.push(
5119
+ new (getModuleHashingError())(module, /** @type {Error} */ (err))
5120
+ );
4847
5121
  moduleHashDigest = "XXXXXX";
4848
5122
  }
4849
5123
  chunkGraph.setModuleHashes(
@@ -5094,7 +5368,7 @@ This prevents using hashes of each other and should be avoided.`);
5094
5368
  }
5095
5369
  } catch (err) {
5096
5370
  this.errors.push(
5097
- new ChunkRenderError(chunk, "", /** @type {Error} */ (err))
5371
+ new (getChunkRenderError())(chunk, "", /** @type {Error} */ (err))
5098
5372
  );
5099
5373
  }
5100
5374
  this.logger.timeAggregate("hashing: hash chunks");
@@ -5610,7 +5884,7 @@ This prevents using hashes of each other and should be avoided.`);
5610
5884
  });
5611
5885
  } catch (err) {
5612
5886
  this.errors.push(
5613
- new ChunkRenderError(chunk, "", /** @type {Error} */ (err))
5887
+ new (getChunkRenderError())(chunk, "", /** @type {Error} */ (err))
5614
5888
  );
5615
5889
  return callback();
5616
5890
  }
@@ -5648,7 +5922,9 @@ This prevents using hashes of each other and should be avoided.`);
5648
5922
  ? filenameTemplate
5649
5923
  : "");
5650
5924
 
5651
- this.errors.push(new ChunkRenderError(chunk, filename, err));
5925
+ this.errors.push(
5926
+ new (getChunkRenderError())(chunk, filename, err)
5927
+ );
5652
5928
  inTry = false;
5653
5929
  return callback();
5654
5930
  };
@@ -5874,6 +6150,7 @@ This prevents using hashes of each other and should be avoided.`);
5874
6150
  this.moduleGraph,
5875
6151
  this.outputOptions.hashFunction
5876
6152
  );
6153
+ chunkGraph.buildTimeExecution = true;
5877
6154
  const runtime = "build time";
5878
6155
  const { hashFunction, hashDigest, hashDigestLength } =
5879
6156
  this.outputOptions;
@@ -5983,265 +6260,276 @@ This prevents using hashes of each other and should be avoided.`);
5983
6260
  codeGenerationResults,
5984
6261
  chunkGraphEntries: chunks
5985
6262
  });
6263
+ // restored before the deferred attach so no concurrent `make`
6264
+ // task observes the build-time graph
5986
6265
  this.chunkGraph = old;
6266
+ this._attachPendingRuntimeModules((err) => {
6267
+ if (err) return callback(err);
5987
6268
 
5988
- const runtimeModules =
5989
- chunkGraph.getChunkRuntimeModulesIterable(chunk);
6269
+ const runtimeModules =
6270
+ chunkGraph.getChunkRuntimeModulesIterable(chunk);
5990
6271
 
5991
- // Hash runtime modules
5992
- for (const module of runtimeModules) {
5993
- modules.add(module);
5994
- this._createModuleHash(
5995
- module,
5996
- chunkGraph,
5997
- runtime,
5998
- hashFunction,
5999
- runtimeTemplate,
6000
- hashDigest,
6001
- hashDigestLength,
6002
- errors
6003
- );
6004
- }
6005
-
6006
- // Generate code for all runtime modules
6007
- asyncLib.eachLimit(
6008
- /** @type {import("neo-async").IterableCollection<RuntimeModule>} */ (
6009
- runtimeModules
6010
- ),
6011
- 10,
6012
- codeGen,
6013
- (err) => {
6014
- if (err) return callback(err);
6015
- reportErrors();
6016
-
6017
- /** @type {Map<Module, ExecuteModuleArgument>} */
6018
- const moduleArgumentsMap = new Map();
6019
- /** @type {Map<string, ExecuteModuleArgument>} */
6020
- const moduleArgumentsById = new Map();
6021
-
6022
- /** @type {ExecuteModuleResult["fileDependencies"]} */
6023
- const fileDependencies = new LazySet();
6024
- /** @type {ExecuteModuleResult["contextDependencies"]} */
6025
- const contextDependencies = new LazySet();
6026
- /** @type {ExecuteModuleResult["missingDependencies"]} */
6027
- const missingDependencies = new LazySet();
6028
- /** @type {ExecuteModuleResult["buildDependencies"]} */
6029
- const buildDependencies = new LazySet();
6030
-
6031
- /** @type {ExecuteModuleResult["assets"]} */
6032
- const assets = new Map();
6033
-
6034
- let cacheable = true;
6035
- /** @type {ExecuteModuleResult["notCacheableReasons"]} */
6036
- const notCacheableReasons = [];
6037
-
6038
- /** @type {ExecuteModuleContext} */
6039
- const context = {
6040
- assets,
6041
- __webpack_require__: undefined,
6042
- chunk,
6043
- chunkGraph
6044
- };
6272
+ // Hash runtime modules
6273
+ for (const module of runtimeModules) {
6274
+ modules.add(module);
6275
+ this._createModuleHash(
6276
+ module,
6277
+ chunkGraph,
6278
+ runtime,
6279
+ hashFunction,
6280
+ runtimeTemplate,
6281
+ hashDigest,
6282
+ hashDigestLength,
6283
+ errors
6284
+ );
6285
+ }
6045
6286
 
6046
- // Prepare execution
6047
- asyncLib.eachLimit(
6048
- modules,
6049
- 10,
6050
- (module, callback) => {
6051
- const codeGenerationResult = codeGenerationResults.get(
6052
- module,
6053
- runtime
6054
- );
6055
- /** @type {ExecuteModuleArgument} */
6056
- const moduleArgument = {
6057
- module,
6058
- codeGenerationResult,
6059
- moduleObject: undefined
6060
- };
6061
- moduleArgumentsMap.set(module, moduleArgument);
6062
- moduleArgumentsById.set(
6063
- module.identifier(),
6064
- moduleArgument
6065
- );
6066
- module.addCacheDependencies(
6067
- fileDependencies,
6068
- contextDependencies,
6069
- missingDependencies,
6070
- buildDependencies
6071
- );
6072
- const buildInfo = /** @type {BuildInfo} */ (
6073
- module.buildInfo
6074
- );
6075
- if (buildInfo.cacheable === false) {
6076
- cacheable = false;
6077
- if (buildInfo.notCacheableReasons) {
6078
- for (const reason of buildInfo.notCacheableReasons) {
6079
- if (!notCacheableReasons.includes(reason)) {
6080
- notCacheableReasons.push(reason);
6287
+ // Generate code for all runtime modules
6288
+ asyncLib.eachLimit(
6289
+ /** @type {import("neo-async").IterableCollection<RuntimeModule>} */ (
6290
+ runtimeModules
6291
+ ),
6292
+ 10,
6293
+ codeGen,
6294
+ (err) => {
6295
+ if (err) return callback(err);
6296
+ reportErrors();
6297
+
6298
+ /** @type {Map<Module, ExecuteModuleArgument>} */
6299
+ const moduleArgumentsMap = new Map();
6300
+ /** @type {Map<string, ExecuteModuleArgument>} */
6301
+ const moduleArgumentsById = new Map();
6302
+
6303
+ /** @type {ExecuteModuleResult["fileDependencies"]} */
6304
+ const fileDependencies = new LazySet();
6305
+ /** @type {ExecuteModuleResult["contextDependencies"]} */
6306
+ const contextDependencies = new LazySet();
6307
+ /** @type {ExecuteModuleResult["missingDependencies"]} */
6308
+ const missingDependencies = new LazySet();
6309
+ /** @type {ExecuteModuleResult["buildDependencies"]} */
6310
+ const buildDependencies = new LazySet();
6311
+
6312
+ /** @type {ExecuteModuleResult["assets"]} */
6313
+ const assets = new Map();
6314
+
6315
+ let cacheable = true;
6316
+ /** @type {ExecuteModuleResult["notCacheableReasons"]} */
6317
+ const notCacheableReasons = [];
6318
+
6319
+ /** @type {ExecuteModuleContext} */
6320
+ const context = {
6321
+ assets,
6322
+ __webpack_require__: undefined,
6323
+ chunk,
6324
+ chunkGraph
6325
+ };
6326
+
6327
+ // Prepare execution
6328
+ asyncLib.eachLimit(
6329
+ modules,
6330
+ 10,
6331
+ (module, callback) => {
6332
+ const codeGenerationResult = codeGenerationResults.get(
6333
+ module,
6334
+ runtime
6335
+ );
6336
+ /** @type {ExecuteModuleArgument} */
6337
+ const moduleArgument = {
6338
+ module,
6339
+ codeGenerationResult,
6340
+ moduleObject: undefined
6341
+ };
6342
+ moduleArgumentsMap.set(module, moduleArgument);
6343
+ moduleArgumentsById.set(
6344
+ module.identifier(),
6345
+ moduleArgument
6346
+ );
6347
+ module.addCacheDependencies(
6348
+ fileDependencies,
6349
+ contextDependencies,
6350
+ missingDependencies,
6351
+ buildDependencies
6352
+ );
6353
+ const buildInfo = /** @type {BuildInfo} */ (
6354
+ module.buildInfo
6355
+ );
6356
+ if (buildInfo.cacheable === false) {
6357
+ cacheable = false;
6358
+ if (buildInfo.notCacheableReasons) {
6359
+ for (const reason of buildInfo.notCacheableReasons) {
6360
+ if (!notCacheableReasons.includes(reason)) {
6361
+ notCacheableReasons.push(reason);
6362
+ }
6081
6363
  }
6082
6364
  }
6083
6365
  }
6084
- }
6085
- if (module.buildInfo && module.buildInfo.assets) {
6086
- const { assets: moduleAssets, assetsInfo } =
6087
- module.buildInfo;
6088
- for (const assetName of Object.keys(moduleAssets)) {
6089
- assets.set(assetName, {
6090
- source: moduleAssets[assetName],
6091
- info: assetsInfo
6092
- ? assetsInfo.get(assetName)
6093
- : undefined
6094
- });
6095
- }
6096
- }
6097
- this.hooks.prepareModuleExecution.callAsync(
6098
- moduleArgument,
6099
- context,
6100
- callback
6101
- );
6102
- },
6103
- (err) => {
6104
- if (err) return callback(/** @type {WebpackError} */ (err));
6105
-
6106
- /** @type {ExecuteModuleExports | undefined} */
6107
- let exports;
6108
- try {
6109
- const {
6110
- strictModuleErrorHandling,
6111
- strictModuleExceptionHandling
6112
- } = this.outputOptions;
6113
-
6114
- /** @type {WebpackRequire} */
6115
- const __webpack_require__ = (id) => {
6116
- const cached = moduleCache[id];
6117
- if (cached !== undefined) {
6118
- if (cached.error) throw cached.error;
6119
- return cached.exports;
6366
+ if (module.buildInfo && module.buildInfo.assets) {
6367
+ const { assets: moduleAssets, assetsInfo } =
6368
+ module.buildInfo;
6369
+ for (const assetName of Object.keys(moduleAssets)) {
6370
+ assets.set(assetName, {
6371
+ source: moduleAssets[assetName],
6372
+ info: assetsInfo
6373
+ ? assetsInfo.get(assetName)
6374
+ : undefined
6375
+ });
6120
6376
  }
6121
- const moduleArgument = moduleArgumentsById.get(id);
6122
- return __webpack_require_module__(
6123
- /** @type {ExecuteModuleArgument} */
6124
- (moduleArgument),
6125
- id
6126
- );
6127
- };
6128
- const interceptModuleExecution = (__webpack_require__[
6129
- /** @type {"i"} */
6130
- (
6131
- RuntimeGlobals.interceptModuleExecution.replace(
6132
- `${RuntimeGlobals.require}.`,
6133
- ""
6377
+ }
6378
+ this.hooks.prepareModuleExecution.callAsync(
6379
+ moduleArgument,
6380
+ context,
6381
+ callback
6382
+ );
6383
+ },
6384
+ (err) => {
6385
+ if (err) {
6386
+ return callback(/** @type {WebpackError} */ (err));
6387
+ }
6388
+
6389
+ /** @type {ExecuteModuleExports | undefined} */
6390
+ let exports;
6391
+ try {
6392
+ const {
6393
+ strictModuleErrorHandling,
6394
+ strictModuleExceptionHandling
6395
+ } = this.outputOptions;
6396
+
6397
+ /** @type {WebpackRequire} */
6398
+ const __webpack_require__ = (id) => {
6399
+ const cached = moduleCache[id];
6400
+ if (cached !== undefined) {
6401
+ if (cached.error) throw cached.error;
6402
+ return cached.exports;
6403
+ }
6404
+ const moduleArgument = moduleArgumentsById.get(id);
6405
+ return __webpack_require_module__(
6406
+ /** @type {ExecuteModuleArgument} */
6407
+ (moduleArgument),
6408
+ id
6409
+ );
6410
+ };
6411
+ const interceptModuleExecution = (__webpack_require__[
6412
+ /** @type {"i"} */
6413
+ (
6414
+ RuntimeGlobals.interceptModuleExecution.replace(
6415
+ `${RuntimeGlobals.require}.`,
6416
+ ""
6417
+ )
6134
6418
  )
6135
- )
6136
- ] = /** @type {NonNullable<WebpackRequire["i"]>} */ ([]));
6137
- const moduleCache = (__webpack_require__[
6138
- /** @type {"c"} */ (
6139
- RuntimeGlobals.moduleCache.replace(
6140
- `${RuntimeGlobals.require}.`,
6141
- ""
6419
+ ] =
6420
+ /** @type {NonNullable<WebpackRequire["i"]>} */ ([]));
6421
+ const moduleCache = (__webpack_require__[
6422
+ /** @type {"c"} */ (
6423
+ RuntimeGlobals.moduleCache.replace(
6424
+ `${RuntimeGlobals.require}.`,
6425
+ ""
6426
+ )
6142
6427
  )
6143
- )
6144
- ] = /** @type {NonNullable<WebpackRequire["c"]>} */ ({}));
6145
-
6146
- context.__webpack_require__ = __webpack_require__;
6147
-
6148
- /**
6149
- * Webpack require module.
6150
- * @param {ExecuteModuleArgument} moduleArgument the module argument
6151
- * @param {string=} id id
6152
- * @returns {ExecuteModuleExports} exports
6153
- */
6154
- const __webpack_require_module__ = (
6155
- moduleArgument,
6156
- id
6157
- ) => {
6158
- /** @type {ExecuteOptions} */
6159
- const execOptions = {
6160
- id,
6161
- module: {
6428
+ ] =
6429
+ /** @type {NonNullable<WebpackRequire["c"]>} */ ({}));
6430
+
6431
+ context.__webpack_require__ = __webpack_require__;
6432
+
6433
+ /**
6434
+ * Webpack require module.
6435
+ * @param {ExecuteModuleArgument} moduleArgument the module argument
6436
+ * @param {string=} id id
6437
+ * @returns {ExecuteModuleExports} exports
6438
+ */
6439
+ const __webpack_require_module__ = (
6440
+ moduleArgument,
6441
+ id
6442
+ ) => {
6443
+ /** @type {ExecuteOptions} */
6444
+ const execOptions = {
6162
6445
  id,
6163
- exports: {},
6164
- loaded: false,
6165
- error: undefined
6166
- },
6167
- require: __webpack_require__
6168
- };
6169
- for (const handler of interceptModuleExecution) {
6170
- handler(execOptions);
6171
- }
6172
- const module = moduleArgument.module;
6173
- this.buildTimeExecutedModules.add(module);
6174
- const moduleObject = execOptions.module;
6175
- moduleArgument.moduleObject = moduleObject;
6176
- try {
6177
- if (id) moduleCache[id] = moduleObject;
6178
-
6179
- tryRunOrWebpackError(
6180
- () =>
6181
- this.hooks.executeModule.call(
6182
- moduleArgument,
6183
- context
6184
- ),
6185
- "Compilation.hooks.executeModule"
6186
- );
6187
- moduleObject.loaded = true;
6188
- return moduleObject.exports;
6189
- } catch (execErr) {
6190
- if (strictModuleExceptionHandling) {
6191
- if (id) delete moduleCache[id];
6192
- } else if (strictModuleErrorHandling) {
6193
- moduleObject.error =
6194
- /** @type {WebpackError} */
6195
- (execErr);
6446
+ module: {
6447
+ id,
6448
+ exports: {},
6449
+ loaded: false,
6450
+ error: undefined
6451
+ },
6452
+ require: __webpack_require__
6453
+ };
6454
+ for (const handler of interceptModuleExecution) {
6455
+ handler(execOptions);
6196
6456
  }
6197
- if (!(/** @type {WebpackError} */ (execErr).module)) {
6198
- /** @type {WebpackError} */
6199
- (execErr).module = module;
6457
+ const module = moduleArgument.module;
6458
+ this.buildTimeExecutedModules.add(module);
6459
+ const moduleObject = execOptions.module;
6460
+ moduleArgument.moduleObject = moduleObject;
6461
+ try {
6462
+ if (id) moduleCache[id] = moduleObject;
6463
+
6464
+ tryRunOrWebpackError(
6465
+ () =>
6466
+ this.hooks.executeModule.call(
6467
+ moduleArgument,
6468
+ context
6469
+ ),
6470
+ "Compilation.hooks.executeModule"
6471
+ );
6472
+ moduleObject.loaded = true;
6473
+ return moduleObject.exports;
6474
+ } catch (execErr) {
6475
+ if (strictModuleExceptionHandling) {
6476
+ if (id) delete moduleCache[id];
6477
+ } else if (strictModuleErrorHandling) {
6478
+ moduleObject.error =
6479
+ /** @type {WebpackError} */
6480
+ (execErr);
6481
+ }
6482
+ if (
6483
+ !(/** @type {WebpackError} */ (execErr).module)
6484
+ ) {
6485
+ /** @type {WebpackError} */
6486
+ (execErr).module = module;
6487
+ }
6488
+ throw execErr;
6200
6489
  }
6201
- throw execErr;
6490
+ };
6491
+
6492
+ for (const runtimeModule of chunkGraph.getChunkRuntimeModulesInOrder(
6493
+ chunk
6494
+ )) {
6495
+ __webpack_require_module__(
6496
+ /** @type {ExecuteModuleArgument} */
6497
+ (moduleArgumentsMap.get(runtimeModule))
6498
+ );
6202
6499
  }
6203
- };
6204
6500
 
6205
- for (const runtimeModule of chunkGraph.getChunkRuntimeModulesInOrder(
6206
- chunk
6207
- )) {
6208
- __webpack_require_module__(
6209
- /** @type {ExecuteModuleArgument} */
6210
- (moduleArgumentsMap.get(runtimeModule))
6501
+ exports = __webpack_require__(module.identifier());
6502
+ } catch (execErr) {
6503
+ const { message, stack, module } =
6504
+ /** @type {WebpackError} */
6505
+ (execErr);
6506
+ const err = new WebpackError(
6507
+ `Execution of module code from module graph (${
6508
+ /** @type {Module} */
6509
+ (module).readableIdentifier(this.requestShortener)
6510
+ }) failed: ${message}`,
6511
+ { cause: execErr }
6211
6512
  );
6513
+ err.stack = stack;
6514
+ err.module = module;
6515
+ return callback(err);
6212
6516
  }
6213
6517
 
6214
- exports = __webpack_require__(module.identifier());
6215
- } catch (execErr) {
6216
- const { message, stack, module } =
6217
- /** @type {WebpackError} */
6218
- (execErr);
6219
- const err = new WebpackError(
6220
- `Execution of module code from module graph (${
6221
- /** @type {Module} */
6222
- (module).readableIdentifier(this.requestShortener)
6223
- }) failed: ${message}`,
6224
- { cause: execErr }
6225
- );
6226
- err.stack = stack;
6227
- err.module = module;
6228
- return callback(err);
6518
+ callback(null, {
6519
+ exports,
6520
+ assets,
6521
+ cacheable,
6522
+ notCacheableReasons,
6523
+ fileDependencies,
6524
+ contextDependencies,
6525
+ missingDependencies,
6526
+ buildDependencies
6527
+ });
6229
6528
  }
6230
-
6231
- callback(null, {
6232
- exports,
6233
- assets,
6234
- cacheable,
6235
- notCacheableReasons,
6236
- fileDependencies,
6237
- contextDependencies,
6238
- missingDependencies,
6239
- buildDependencies
6240
- });
6241
- }
6242
- );
6243
- }
6244
- );
6529
+ );
6530
+ }
6531
+ );
6532
+ });
6245
6533
  }
6246
6534
  );
6247
6535
  }