webpack 5.111.0 → 5.112.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 (781) hide show
  1. package/README.md +1 -1
  2. package/lib/Chunk.js +3 -966
  3. package/lib/Compilation.js +237 -138
  4. package/lib/Compiler.js +23 -24
  5. package/lib/Dependency.js +3 -551
  6. package/lib/DependencyTemplate.js +3 -69
  7. package/lib/EntryPlugin.js +3 -68
  8. package/lib/Entrypoint.js +3 -121
  9. package/lib/ExternalsPlugin.js +3 -92
  10. package/lib/FileSystemInfo.js +3 -4629
  11. package/lib/InitFragment.js +3 -204
  12. package/lib/LibraryTemplatePlugin.js +3 -46
  13. package/lib/ModuleFilenameHelpers.js +3 -400
  14. package/lib/ModuleNotFoundError.js +2 -2
  15. package/lib/MultiCompiler.js +43 -24
  16. package/lib/NormalModule.js +3 -2190
  17. package/lib/NullFactory.js +3 -22
  18. package/lib/ProgressPlugin.js +3 -908
  19. package/lib/RawModule.js +3 -197
  20. package/lib/RequestShortener.js +3 -37
  21. package/lib/SingleEntryPlugin.js +1 -1
  22. package/lib/WebpackError.js +2 -2
  23. package/lib/asset/AssetBytesGenerator.js +15 -9
  24. package/lib/asset/AssetBytesParser.js +3 -3
  25. package/lib/asset/AssetGenerator.js +61 -38
  26. package/lib/asset/AssetModule.js +2 -2
  27. package/lib/asset/AssetModulesPlugin.js +6 -9
  28. package/lib/asset/AssetParser.js +3 -3
  29. package/lib/asset/AssetSourceGenerator.js +15 -9
  30. package/lib/asset/AssetSourceParser.js +3 -3
  31. package/lib/asset/RawDataUrlModule.js +17 -10
  32. package/lib/asset/WebManifestGenerator.js +7 -7
  33. package/lib/asset/WebManifestParser.js +5 -5
  34. package/lib/async-modules/AsyncModuleHelpers.js +6 -5
  35. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  36. package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
  37. package/lib/async-modules/isGeneratorLowered.js +3 -3
  38. package/lib/bun/BunTargetPlugin.js +1 -1
  39. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  40. package/lib/{Cache.js → cache/Cache.js} +1 -1
  41. package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
  42. package/lib/cache/IdleFileCachePlugin.js +2 -2
  43. package/lib/cache/MemoryCachePlugin.js +6 -6
  44. package/lib/cache/MemoryWithGcCachePlugin.js +9 -10
  45. package/lib/cache/PackFileCacheStrategy.js +11 -28
  46. package/lib/cache/ResolverCachePlugin.js +8 -4
  47. package/lib/cache/getLazyHashedEtag.js +3 -5
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +3 -9
  54. package/lib/{cli.js → config/cli.js} +5 -158
  55. package/lib/config/defaults.js +192 -122
  56. package/lib/config/getClaimedAssetTypes.js +28 -21
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +13 -4
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  76. package/lib/{ContextModule.js → context/ContextModule.js} +50 -36
  77. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +25 -24
  78. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  79. package/lib/css/CssGenerator.js +57 -42
  80. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  81. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  82. package/lib/css/CssModule.js +27 -29
  83. package/lib/css/CssModulesPlugin.js +128 -44
  84. package/lib/css/CssParser.js +700 -311
  85. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  86. package/lib/css/cssMinify.js +130 -54
  87. package/lib/css/data.js +7017 -4648
  88. package/lib/css/syntax-parser.js +19873 -0
  89. package/lib/css/syntax-printer.js +6037 -0
  90. package/lib/css/syntax.js +37 -17370
  91. package/lib/debug/ProfilingPlugin.js +55 -23
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +25 -29
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +176 -44
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +39 -35
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +19 -20
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +34 -18
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -100
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +26 -22
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +26 -21
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +40 -41
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +22 -21
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +62 -93
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +83 -49
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +136 -122
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +68 -43
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +68 -65
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +199 -97
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +86 -43
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +110 -61
  188. package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
  189. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  190. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
  191. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
  192. package/lib/{util → dependencies/helpers}/chainedImports.js +8 -9
  193. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  194. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  195. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  196. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  197. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +125 -243
  200. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
  201. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +72 -23
  202. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +53 -19
  203. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  204. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  205. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  206. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  207. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
  208. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  209. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  210. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  211. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  212. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  213. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +126 -107
  214. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  215. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  216. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  217. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  218. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +34 -25
  219. package/lib/{url → dependencies/url}/URLParserPlugin.js +22 -26
  220. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  221. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  222. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  223. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  224. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +46 -54
  225. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +28 -20
  226. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +25 -27
  227. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  228. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  229. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  230. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  231. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +207 -129
  232. package/lib/{util → devtool}/generateDebugId.js +1 -1
  233. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  234. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  235. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  236. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  237. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  238. package/lib/dll/DelegatedModule.js +20 -18
  239. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  240. package/lib/dll/DelegatedPlugin.js +1 -1
  241. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  242. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  243. package/lib/dll/DllEntryPlugin.js +3 -3
  244. package/lib/dll/DllModule.js +11 -9
  245. package/lib/dll/DllModuleFactory.js +3 -3
  246. package/lib/dll/DllPlugin.js +18 -6
  247. package/lib/dll/DllReferencePlugin.js +102 -26
  248. package/lib/dll/LibManifestPlugin.js +9 -7
  249. package/lib/electron/ElectronTargetPlugin.js +2 -2
  250. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  251. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  252. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  253. package/lib/entry/EntryPlugin.js +75 -0
  254. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  255. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  256. package/lib/errors/BuildCycleError.js +1 -1
  257. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  258. package/lib/errors/ChunkRenderError.js +1 -1
  259. package/lib/errors/CodeGenerationError.js +1 -1
  260. package/lib/errors/CommentCompilationWarning.js +1 -1
  261. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  262. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  263. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  264. package/lib/errors/DllManifestError.js +26 -0
  265. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  266. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  267. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  268. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  269. package/lib/errors/ErrorHelpers.js +222 -0
  270. package/lib/errors/ExternalStarReexportError.js +2 -2
  271. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  272. package/lib/errors/HookWebpackError.js +6 -5
  273. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  274. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  275. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  276. package/lib/errors/ModuleBuildError.js +1 -1
  277. package/lib/errors/ModuleDependencyError.js +2 -2
  278. package/lib/errors/ModuleDependencyWarning.js +2 -2
  279. package/lib/errors/ModuleError.js +1 -1
  280. package/lib/errors/ModuleHashingError.js +1 -1
  281. package/lib/errors/ModuleNotFoundError.js +3 -3
  282. package/lib/errors/ModuleParseError.js +1 -1
  283. package/lib/errors/ModuleRestoreError.js +1 -1
  284. package/lib/errors/ModuleStoreError.js +1 -1
  285. package/lib/errors/ModuleWarning.js +1 -1
  286. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  287. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  288. package/lib/errors/NodeStuffInWebError.js +7 -2
  289. package/lib/errors/PathVariableError.js +31 -0
  290. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  291. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  292. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  293. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  294. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  295. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  296. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  297. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  298. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  299. package/lib/errors/WebpackError.js +12 -3
  300. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  301. package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
  302. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  303. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  304. package/lib/{ExternalModule.js → externals/ExternalModule.js} +85 -63
  305. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
  306. package/lib/externals/ExternalsPlugin.js +99 -0
  307. package/lib/fs/FileSystemInfo.js +4642 -0
  308. package/lib/{util → fs}/fs.js +22 -9
  309. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  310. package/lib/graph/Chunk.js +985 -0
  311. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
  312. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  313. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  314. package/lib/graph/Dependency.js +628 -0
  315. package/lib/graph/Entrypoint.js +136 -0
  316. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +151 -99
  317. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  318. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +36 -39
  319. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  320. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +163 -72
  321. package/lib/{util → graph}/findGraphRoots.js +20 -21
  322. package/lib/graph/isDependencyKind.js +23 -0
  323. package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
  324. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +49 -47
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  326. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
  327. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  328. package/lib/hmr/LazyCompilationPlugin.js +34 -26
  329. package/lib/html/HtmlGenerator.js +168 -125
  330. package/lib/html/HtmlModule.js +6 -2
  331. package/lib/html/HtmlModulesPlugin.js +260 -215
  332. package/lib/html/HtmlParser.js +598 -292
  333. package/lib/html/builtinEmbeddedRenderer.js +60 -13
  334. package/lib/html/data.js +23 -1
  335. package/lib/html/htmlMinify.js +120 -51
  336. package/lib/html/syntax-parser.js +15796 -0
  337. package/lib/html/syntax-printer.js +1034 -0
  338. package/lib/html/syntax.js +37 -14062
  339. package/lib/html/xmlMinify.js +67 -0
  340. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  341. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  342. package/lib/ids/HashedModuleIdsPlugin.js +31 -4
  343. package/lib/ids/IdHelpers.js +4 -4
  344. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  345. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  346. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  347. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  348. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  349. package/lib/{util → ids}/numberHash.js +1 -1
  350. package/lib/index.js +348 -99
  351. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +29 -30
  352. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  353. package/lib/javascript/BasicEvaluatedExpression.js +4 -4
  354. package/lib/javascript/ChunkHelpers.js +64 -4
  355. package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
  356. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +10 -11
  357. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +90 -139
  358. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  359. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  360. package/lib/javascript/JavascriptGenerator.js +25 -18
  361. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
  362. package/lib/javascript/JavascriptModule.js +4 -3
  363. package/lib/javascript/JavascriptModulesPlugin.js +458 -256
  364. package/lib/javascript/JavascriptParser.js +916 -287
  365. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  366. package/lib/javascript/MergedEntryExports.js +196 -0
  367. package/lib/javascript/ScopeAnalyzer.js +3840 -5
  368. package/lib/javascript/StartupHelpers.js +6 -6
  369. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
  370. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  371. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  372. package/lib/javascript/data.js +533 -122
  373. package/lib/javascript/jsMinify.js +272 -0
  374. package/lib/javascript/regexp.js +67 -32
  375. package/lib/javascript/syntax-parser.js +18561 -0
  376. package/lib/javascript/syntax-printer-data.js +933 -0
  377. package/lib/javascript/syntax-printer.js +47106 -0
  378. package/lib/javascript/syntax.js +20 -10946
  379. package/lib/json/JsonData.js +1 -1
  380. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  381. package/lib/json/JsonGenerator.js +17 -11
  382. package/lib/json/JsonModule.js +2 -2
  383. package/lib/json/JsonModulesPlugin.js +1 -1
  384. package/lib/json/JsonParser.js +5 -5
  385. package/lib/json/jsonMinify.js +69 -0
  386. package/lib/library/AbstractLibraryPlugin.js +28 -15
  387. package/lib/library/AmdLibraryPlugin.js +4 -4
  388. package/lib/library/AssignLibraryPlugin.js +27 -11
  389. package/lib/library/EnableLibraryPlugin.js +1 -1
  390. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  391. package/lib/library/JsonpLibraryPlugin.js +1 -1
  392. package/lib/library/LibraryTemplatePlugin.js +53 -0
  393. package/lib/library/ModuleLibraryPlugin.js +207 -285
  394. package/lib/library/SystemLibraryPlugin.js +6 -8
  395. package/lib/library/UmdLibraryPlugin.js +3 -4
  396. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  397. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  398. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  399. package/lib/{dependencies → loaders}/LoaderPlugin.js +27 -2
  400. package/lib/loaders/LoaderRunner.js +160 -22
  401. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  402. package/lib/logging/Logger.js +7 -9
  403. package/lib/logging/ProgressPlugin.js +957 -0
  404. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  405. package/lib/{Generator.js → module/Generator.js} +38 -14
  406. package/lib/{Module.js → module/Module.js} +122 -54
  407. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  408. package/lib/module/NormalModule.js +2348 -0
  409. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
  410. package/lib/module/NullFactory.js +29 -0
  411. package/lib/{Parser.js → module/Parser.js} +3 -3
  412. package/lib/module/RawModule.js +208 -0
  413. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  414. package/lib/{util → module}/extractSourceMap.js +2 -2
  415. package/lib/{util → module}/findCaseMismatch.js +2 -2
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  417. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  418. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
  419. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  420. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  421. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  422. package/lib/node/NodeTargetPlugin.js +1 -1
  423. package/lib/node/NodeWatchFileSystem.js +61 -15
  424. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  425. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
  426. package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
  427. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  428. package/lib/node/nodeConsole.js +2 -4
  429. package/lib/optimize/AggressiveMergingPlugin.js +5 -7
  430. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  431. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
  432. package/lib/optimize/ConcatenatedModule.js +305 -309
  433. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  434. package/lib/optimize/ConstExportsPlugin.js +7 -7
  435. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  436. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  437. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +25 -30
  438. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +26 -30
  439. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  440. package/lib/optimize/FlagIncludedChunksPlugin.js +5 -13
  441. package/lib/optimize/InlineExports.js +11 -3
  442. package/lib/optimize/InnerGraph.js +5 -13
  443. package/lib/optimize/InnerGraphPlugin.js +17 -23
  444. package/lib/optimize/LazyBarrels.js +584 -0
  445. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  446. package/lib/optimize/LimitChunkCountPlugin.js +21 -15
  447. package/lib/optimize/MangleExportsPlugin.js +8 -9
  448. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  449. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  450. package/lib/optimize/ModuleConcatenationPlugin.js +23 -16
  451. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  452. package/lib/optimize/RealContentHashPlugin.js +16 -7
  453. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  454. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  455. package/lib/optimize/SideEffectsFlagPlugin.js +25 -37
  456. package/lib/optimize/SplitChunksPlugin.js +715 -159
  457. package/lib/{util → optimize}/TupleQueue.js +9 -9
  458. package/lib/optimize/chunkSetIntersections.js +437 -0
  459. package/lib/{util → optimize}/deterministicGrouping.js +25 -30
  460. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  461. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
  462. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
  463. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  464. package/lib/output/SSRManifestPlugin.js +349 -0
  465. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  466. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  467. package/lib/performance/BroadContextsPlugin.js +4 -4
  468. package/lib/performance/CacheEffectivenessPlugin.js +5 -7
  469. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  470. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  471. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  472. package/lib/performance/DynamicExportsPlugin.js +2 -2
  473. package/lib/performance/EvalUsagePlugin.js +3 -3
  474. package/lib/performance/HotspotsPlugin.js +11 -10
  475. package/lib/performance/LargeModulesPlugin.js +2 -3
  476. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  477. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  478. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  479. package/lib/performance/PureAnnotationsPlugin.js +3 -3
  480. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  481. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  482. package/lib/performance/SizeLimitsPlugin.js +13 -16
  483. package/lib/performance/TopLevelThisPlugin.js +8 -7
  484. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  485. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  486. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  487. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  488. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  489. package/lib/performance/UnusedFederationPlugin.js +2 -4
  490. package/lib/performance/UnusedModulesPlugin.js +5 -4
  491. package/lib/performance/getModuleSize.js +1 -1
  492. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  493. package/lib/performance/isOnlyReexported.js +7 -6
  494. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  495. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  496. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +7 -9
  497. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  498. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  499. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  500. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  501. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  502. package/lib/prefetch/ResourceHintPlugin.js +82 -65
  503. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  504. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -13
  505. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  506. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  507. package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
  508. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  509. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  510. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  511. package/lib/resolve/getResolveOptionsKey.js +59 -0
  512. package/lib/rules/RuleSetCompiler.js +27 -46
  513. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  514. package/lib/runtime/AsyncModuleRuntimeModule.js +10 -9
  515. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  516. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  517. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  518. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  519. package/lib/runtime/CompatRuntimeModule.js +4 -4
  520. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  521. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  522. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  523. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  524. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  525. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  526. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  527. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -10
  528. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  529. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  530. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  531. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  532. package/lib/runtime/GlobalRuntimeModule.js +5 -7
  533. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  534. package/lib/runtime/HelperRuntimeModule.js +16 -1
  535. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  536. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +135 -102
  537. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  538. package/lib/runtime/NonceRuntimeModule.js +2 -2
  539. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  540. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  541. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  542. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
  543. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  544. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  545. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
  546. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  547. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  548. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  549. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  550. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  551. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  552. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  553. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  554. package/lib/runtime/baseUri.js +1 -1
  555. package/lib/schemes/DataUriPlugin.js +4 -7
  556. package/lib/schemes/HttpUriPlugin.js +67 -11
  557. package/lib/schemes/VirtualUrlPlugin.js +50 -16
  558. package/lib/serialization/AggregateErrorSerializer.js +2 -2
  559. package/lib/serialization/BinaryMiddleware.js +9 -9
  560. package/lib/serialization/FileMiddleware.js +19 -19
  561. package/lib/serialization/ObjectMiddleware.js +77 -49
  562. package/lib/serialization/SerializerMiddleware.js +2 -2
  563. package/lib/serialization/SingleItemMiddleware.js +4 -2
  564. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  565. package/lib/sharing/ConsumeSharedModule.js +18 -14
  566. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  567. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  568. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  569. package/lib/sharing/ProvideSharedDependency.js +1 -1
  570. package/lib/sharing/ProvideSharedModule.js +11 -9
  571. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  572. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  573. package/lib/sharing/SharePlugin.js +102 -9
  574. package/lib/sharing/ShareRuntimeModule.js +6 -6
  575. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  576. package/lib/{util → sharing}/semver.js +19 -19
  577. package/lib/sharing/utils.js +59 -2
  578. package/lib/stats/DefaultStatsFactoryPlugin.js +25 -23
  579. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  580. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
  581. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  582. package/lib/{Stats.js → stats/Stats.js} +4 -4
  583. package/lib/stats/StatsFactory.js +14 -13
  584. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  585. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  586. package/lib/template/DependencyTemplate.js +77 -0
  587. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  588. package/lib/template/InitFragment.js +223 -0
  589. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  590. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  591. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  592. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +178 -106
  593. package/lib/{Template.js → template/Template.js} +13 -11
  594. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +35 -82
  595. package/lib/typescript/TypeScriptPlugin.js +5 -6
  596. package/lib/util/LocConverter.js +4 -7
  597. package/lib/util/RequestShortener.js +44 -0
  598. package/lib/util/SortableSet.js +87 -22
  599. package/lib/util/SourceProcessor.js +364 -66
  600. package/lib/util/TupleSet.js +27 -27
  601. package/lib/util/WeakTupleMap.js +10 -12
  602. package/lib/util/buildDiagnostics.js +2 -2
  603. package/lib/util/comparators.js +10 -10
  604. package/lib/util/concatenate.js +32 -151
  605. package/lib/util/createHooksRegistry.js +1 -2
  606. package/lib/util/createMappings.js +111 -0
  607. package/lib/util/dataURL.js +96 -18
  608. package/lib/util/deprecation.js +1 -1
  609. package/lib/util/extractComments.js +118 -0
  610. package/lib/util/formatLocation.js +1 -1
  611. package/lib/util/globUtils.js +197 -16
  612. package/lib/util/haltVisitors.js +51 -0
  613. package/lib/util/handlerKeys.js +2 -2
  614. package/lib/util/hash/wasm-hash.js +3 -4
  615. package/lib/util/identifier.js +117 -1
  616. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  617. package/lib/util/internalSerializables.js +295 -103
  618. package/lib/util/magicComment.js +12 -7
  619. package/lib/util/makeSerializable.js +23 -4
  620. package/lib/util/parseJson.js +1 -1
  621. package/lib/util/preloadModuleType.js +5 -2
  622. package/lib/util/registerExternalSerializer.js +2 -2
  623. package/lib/util/removeBOM.js +1 -1
  624. package/lib/util/runtime.js +1 -1
  625. package/lib/util/serialization.js +4 -1
  626. package/lib/util/source.js +2 -2
  627. package/lib/util/terminalColors.js +161 -0
  628. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  629. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  630. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
  631. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +11 -6
  632. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +16 -11
  633. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  634. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
  635. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  636. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
  637. package/lib/wasm/wasmModuleFilename.js +2 -2
  638. package/lib/wasm-sync/SyncWasmModule.js +3 -3
  639. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +11 -12
  640. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  641. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -9
  642. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +19 -16
  643. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  644. package/lib/wasm-sync/WebAssemblyParser.js +6 -6
  645. package/lib/wasm-sync/WebAssemblyUtils.js +8 -9
  646. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  647. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  648. package/lib/{Watching.js → watch/Watching.js} +8 -8
  649. package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
  650. package/lib/web/FetchCompileWasmPlugin.js +6 -4
  651. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  652. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  653. package/lib/web/JsonpTemplatePlugin.js +1 -1
  654. package/lib/webpack.js +27 -17
  655. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  656. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  657. package/package.json +70 -40
  658. package/schemas/WebpackOptions.check.js +2 -1
  659. package/schemas/WebpackOptions.d.json.ts +2 -0
  660. package/schemas/WebpackOptions.json +294 -74
  661. package/schemas/plugins/BannerPlugin.check.js +2 -1
  662. package/schemas/plugins/BannerPlugin.json +29 -2
  663. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
  664. package/schemas/plugins/HtmlParserOptions.check.js +2 -1
  665. package/schemas/plugins/IgnorePlugin.check.js +1 -0
  666. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  667. package/schemas/plugins/IgnorePlugin.json +1 -1
  668. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
  669. package/schemas/plugins/ManifestPlugin.check.js +1 -0
  670. package/schemas/plugins/ManifestPlugin.json +3 -3
  671. package/schemas/plugins/ProgressPlugin.check.js +2 -1
  672. package/schemas/plugins/ProgressPlugin.json +2 -7
  673. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  674. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  675. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
  676. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  677. package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
  678. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  679. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
  680. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
  681. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
  682. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
  683. package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
  684. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  685. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
  686. package/schemas/plugins/container/ExternalsType.check.js +1 -0
  687. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
  688. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  689. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
  690. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
  691. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
  692. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
  693. package/schemas/plugins/css/CssParserOptions.check.js +1 -0
  694. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
  695. package/schemas/plugins/dll/DllPlugin.check.js +1 -0
  696. package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
  697. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  698. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
  699. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
  700. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
  701. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
  702. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
  703. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
  704. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
  705. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
  706. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
  707. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
  708. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
  709. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
  710. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  711. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
  712. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  713. package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
  714. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  715. package/types.d.ts +13915 -8414
  716. package/lib/ErrorHelpers.js +0 -107
  717. package/lib/LazyBarrel.js +0 -388
  718. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  719. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  720. package/lib/javascript/ChunkFormatHelpers.js +0 -71
  721. package/lib/javascript/grammar.js +0 -5546
  722. package/lib/javascript/parser.js +0 -1494
  723. package/lib/javascript/regexpData.js +0 -51
  724. package/lib/performance/getSourceModules.js +0 -22
  725. package/lib/util/Semaphore.js +0 -65
  726. package/lib/util/objectToMap.js +0 -15
  727. package/schemas/WebpackOptions.check.d.ts +0 -7
  728. package/schemas/_container.json +0 -155
  729. package/schemas/_sharing.json +0 -118
  730. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  731. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  732. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  733. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  734. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  735. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  736. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  737. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  738. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  739. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  740. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  741. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  742. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  743. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  745. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  746. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  747. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  748. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  749. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  750. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  751. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  752. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  753. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  754. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  755. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  756. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  758. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  759. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  760. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  761. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  762. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  763. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  764. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  765. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  768. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  769. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  770. /package/lib/{util → css}/conventions.js +0 -0
  771. /package/lib/{util → css}/topologicalSort.js +0 -0
  772. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  773. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  774. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  775. /package/lib/{util → javascript}/StackedMap.js +0 -0
  776. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  777. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  778. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  779. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  780. /package/lib/{util → optimize}/Queue.js +0 -0
  781. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -4,23 +4,20 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const { basename, extname } = require("path");
8
7
  const { pathToFileURL } = require("url");
9
8
  const { AsyncSeriesHook, AsyncSeriesWaterfallHook } = require("tapable");
10
9
  const { RawSource } = require("webpack-sources");
11
10
  const Compilation = require("../Compilation");
12
- const EntryOptionPlugin = require("../EntryOptionPlugin");
13
- const EntryPlugin = require("../EntryPlugin");
14
- const HotUpdateChunk = require("../HotUpdateChunk");
15
- const { HTML_TYPE } = require("../ModuleSourceTypeConstants");
16
- const { HTML_MODULE_TYPE } = require("../ModuleTypeConstants");
17
- const NormalModule = require("../NormalModule");
18
- const { toTemplateSourceFileName } = require("../TemplatedPathPlugin");
19
- const ConstDependency = require("../dependencies/ConstDependency");
20
- const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
11
+ const ConstDependency = require("../dependencies/core/ConstDependency");
12
+ const StaticExportsDependency = require("../dependencies/core/StaticExportsDependency");
13
+ const EntryOptionPlugin = require("../entry/EntryOptionPlugin");
14
+ const EntryPlugin = require("../entry/EntryPlugin");
21
15
  const WebpackError = require("../errors/WebpackError");
22
16
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
23
- const ConcatenatedModule = require("../optimize/ConcatenatedModule");
17
+ const { HTML_TYPE } = require("../module/ModuleSourceTypeConstants");
18
+ const { HTML_MODULE_TYPE } = require("../module/ModuleTypeConstants");
19
+ const NormalModule = require("../module/NormalModule");
20
+ const { toTemplateSourceFileName } = require("../template/TemplatedPathPlugin");
24
21
  const {
25
22
  compareModulesByFullName,
26
23
  compareModulesByIdentifier
@@ -28,9 +25,9 @@ const {
28
25
  const createHash = require("../util/createHash");
29
26
  const createHooksRegistry = require("../util/createHooksRegistry");
30
27
  const {
28
+ getRequestBaseName,
31
29
  getUndoPath,
32
- makePathsRelative,
33
- parseResource
30
+ makePathsRelative
34
31
  } = require("../util/identifier");
35
32
  const implicitTypeLoaderFallback = require("../util/implicitTypeLoaderFallback");
36
33
  const lazyModule = require("../util/lazyModule");
@@ -45,7 +42,7 @@ const HtmlModule = require("./HtmlModule");
45
42
 
46
43
  const getMimeTypes = memoize(() => require("../util/mimeTypes"));
47
44
 
48
- const getHtmlSyntax = memoize(() => require("./syntax"));
45
+ const getHtmlSyntax = memoize(() => require("./syntax-parser"));
49
46
 
50
47
  // Lazy: this plugin is applied on every build (`experiments.html` defaults on),
51
48
  // but the HTML parser and tokenizer are only reached once HTML is in the graph.
@@ -73,14 +70,14 @@ const getCssModulesPlugin = memoize(() => require("../css/CssModulesPlugin"));
73
70
  /** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["favicon"]} FaviconOption */
74
71
  /** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["manifest"]} ManifestOption */
75
72
  /** @typedef {Exclude<HtmlFaviconIcon, string>} FaviconIcon */
76
- /** @import Chunk, { ChunkFilenameTemplate } from "../Chunk" */
77
- /** @import ChunkGraph from "../ChunkGraph" */
73
+ /** @import Chunk, { ChunkFilenameTemplate } from "../graph/Chunk" */
74
+ /** @import ChunkGraph from "../graph/ChunkGraph" */
78
75
  /** @import Compiler from "../Compiler" */
79
- /** @import Module from "../Module" */
76
+ /** @import Module from "../module/Module" */
80
77
  /** @typedef {import("../Compilation").EntryData} EntryData */
81
78
  /** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
82
79
  /** @import HtmlParser from "./HtmlParser" */
83
- /** @typedef {{ request: string, entryName: string, index: number, type: "script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch", css?: boolean }} HtmlEntryInfo */
80
+ /** @typedef {{ request: string, entryName: string, index: number, type: "script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch", css?: boolean, chunkName?: string }} HtmlEntryInfo */
84
81
  /**
85
82
  * What one extracted entry needs to be named. Recorded in page order once
86
83
  * every page is built, and resolved to filenames once chunks exist.
@@ -114,6 +111,7 @@ const getCssModulesPlugin = memoize(() => require("../css/CssModulesPlugin"));
114
111
  * @property {boolean=} remove set true to delete the whole element
115
112
  */
116
113
  /** @typedef {{ outputName: string, html: string }} HtmlTransformTagsContext */
114
+ /** @typedef {{ context: string, request: string, name: string, index: number, dependOn: string[] | undefined, page: boolean }} HtmlEntrySpec */
117
115
 
118
116
  const createCompilationHooks = () => ({
119
117
  /**
@@ -148,10 +146,9 @@ const createCompilationHooks = () => ({
148
146
 
149
147
  const PLUGIN_NAME = "HtmlModulesPlugin";
150
148
 
151
- // Built-in default favicon (the webpack logo). Referenced as a `file:` request
152
- // so `<link rel="icon">` in the synthetic wrapper flows through the normal
153
- // asset pipeline — emitted hashed, with the correct publicPath, no direct IO.
154
- // Resolved from `__filename` (a sibling of this module) — no `path` needed.
149
+ // Built-in default favicon, referenced as a `file:` request so the wrapper's
150
+ // `<link rel="icon">` flows through the normal asset pipeline: emitted hashed,
151
+ // with the right publicPath and no direct IO.
155
152
  const DEFAULT_FAVICON = new URL("./favicon.svg", pathToFileURL(__filename))
156
153
  .href;
157
154
 
@@ -290,29 +287,19 @@ const getPageOnlyEntry = (compilation, module) => {
290
287
  return configured === undefined ? entry : undefined;
291
288
  };
292
289
 
293
- /**
294
- * The basename a tag's url lends to the entry it becomes, so
295
- * `src="./my-script.js"` emits `my-script.js`. Undefined for an inline body.
296
- * @param {string} request the tag's request
297
- * @returns {string | undefined} the basename, when the url carries one
298
- */
299
- const getRequestBaseName = (request) => {
300
- // An inline `<script>` body is a `data:` request webpack writes itself.
301
- if (request.startsWith("data:")) return undefined;
302
- const { path: file } = parseResource(request);
303
- return basename(file, extname(file)) || undefined;
304
- };
305
-
306
290
  /**
307
291
  * Claims `base`, numbering it while something else already emits under that
308
292
  * name, so two tags sharing a basename stay distinct.
309
293
  * @param {string} base preferred name
310
294
  * @param {Set<string>} taken names this kind of output already emits under
295
+ * @param {Map<string, number>} next per base, the number every lower one is taken up to
311
296
  * @returns {string} the claimed name
312
297
  */
313
- const claimName = (base, taken) => {
314
- let name = base;
315
- for (let index = 1; taken.has(name); index++) name = `${base}${index}`;
298
+ const claimName = (base, taken, next) => {
299
+ let index = next.get(base) || 0;
300
+ let name = index === 0 ? base : `${base}${index}`;
301
+ while (taken.has(name)) name = `${base}${++index}`;
302
+ next.set(base, index + 1);
316
303
  taken.add(name);
317
304
  return name;
318
305
  };
@@ -418,7 +405,7 @@ const collectHtmlEntryRequests = (name, entries) => {
418
405
 
419
406
  /**
420
407
  * @param {string} name definition name in `schemas/WebpackOptions.json`
421
- * @returns {EXPECTED_OBJECT} a schema referencing `#/definitions/<name>`
408
+ * @returns {{ oneOf: [{ $ref: string }], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} a schema referencing `#/definitions/<name>`
422
409
  */
423
410
  const getSchema = (name) => {
424
411
  const { definitions } = require("../../schemas/WebpackOptions.json");
@@ -466,16 +453,16 @@ class HtmlModulesPlugin {
466
453
  * Filename template for an extracted HTML page: `output.htmlFilename` for
467
454
  * initial chunks, `output.htmlChunkFilename` otherwise — the HTML counterpart
468
455
  * of `CssModulesPlugin.getChunkFilenameTemplate`.
469
- * @param {import("../Chunk")} chunk chunk
456
+ * @param {import("../graph/Chunk")} chunk chunk
470
457
  * @param {OutputOptions} outputOptions output options
471
- * @returns {import("../Chunk").ChunkFilenameTemplate} used filename template
458
+ * @returns {import("../graph/Chunk").ChunkFilenameTemplate} used filename template
472
459
  */
473
460
  static getChunkFilenameTemplate(chunk, outputOptions) {
474
461
  return chunk.canBeInitial()
475
- ? /** @type {import("../Chunk").ChunkFilenameTemplate} */ (
462
+ ? /** @type {import("../graph/Chunk").ChunkFilenameTemplate} */ (
476
463
  outputOptions.htmlFilename
477
464
  )
478
- : /** @type {import("../Chunk").ChunkFilenameTemplate} */ (
465
+ : /** @type {import("../graph/Chunk").ChunkFilenameTemplate} */ (
479
466
  outputOptions.htmlChunkFilename
480
467
  );
481
468
  }
@@ -506,10 +493,9 @@ class HtmlModulesPlugin {
506
493
  // several entries, so those can only be applied per emitted asset.
507
494
  /** @type {Map<string, OutputHtmlOptions>} */
508
495
  const htmlOptionsByEntry = new Map();
509
- // SRI sentinels are emitted while the page's HTML is generated, before the
510
- // owning entry is known, so any page asking for integrity turns them on for
511
- // all of them; pages that don't want SRI drop them again on emit. Authored
512
- // `.html` pages never reach the entry hook, hence the global seed.
496
+ // SRI sentinels are emitted before the owning entry is known, so one page
497
+ // asking for integrity turns them on for all and the rest drop them on emit.
498
+ // Authored `.html` pages never reach the entry hook, hence the global seed.
513
499
  let anyIntegrity = isIntegrityEnabled(
514
500
  globalHtmlOptions && globalHtmlOptions.integrity
515
501
  );
@@ -542,13 +528,9 @@ class HtmlModulesPlugin {
542
528
  return options;
543
529
  };
544
530
 
545
- // `output.html` (or an entry's `html`) wraps a non-HTML entry in a
546
- // synthetic HTML module so the existing pipeline injects its JS/CSS
547
- // chunks and applies the `template` option. `dependOn` ancestors are
548
- // injected first so the page loads the shared/runtime chunks before
549
- // the entry's own (see `collectHtmlEntryRequests`). `crossOriginLoading`
550
- // and SRI are applied to the injected tags centrally in
551
- // HtmlEntryDependency.
531
+ // `output.html` wraps a non-HTML entry in a synthetic HTML module, so the
532
+ // existing pipeline injects its chunks. `dependOn` ancestors go first, so the
533
+ // page loads shared and runtime chunks before the entry's own.
552
534
  EntryOptionPlugin.getHooks(compiler).entry.tap(
553
535
  PLUGIN_NAME,
554
536
  (context, name, desc) => {
@@ -623,24 +605,20 @@ class HtmlModulesPlugin {
623
605
  /** @type {Map<string, { content: string, source: import("webpack-sources").RawSource }>} */
624
606
  const sentinelResolvedSourceCache = new Map();
625
607
 
626
- // `<script src>` and `<link rel="modulepreload">` references collected
627
- // by HtmlParser become real compilation entries here. The `script`
628
- // and `script-module` groups are chained via a leader-only dependOn so
629
- // they share a runtime — the first entry of the group owns it and
630
- // every subsequent entry sets `dependOn: [leader]`. Modulepreload
631
- // entries are emitted as independent entries (no dependOn) so they
632
- // can never be imported as a runtime leader by a later script —
633
- // that's what keeps the "preload but don't execute" contract of
634
- // `<link rel="modulepreload">` intact.
635
- // Per-compilation state: the HTML modules seen during make (so
636
- // `finishMake` creates their entries without scanning the whole module
637
- // graph), the stylesheet entry names (read in `afterChunks`) and the html
638
- // options of every emitted page, keyed by its asset name.
639
- /** @type {WeakMap<import("../Compilation"), { htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions> }>} */
608
+ // WHY: the `script` and `script-module` groups are chained through a
609
+ // leader-only `dependOn`, so they share a runtime: the group's first entry
610
+ // owns it and every later one sets `dependOn: [leader]`. A modulepreload
611
+ // entry is emitted independently, with no `dependOn`, so a later script can
612
+ // never import it as a runtime leader — which is what keeps the "preload but
613
+ // don't execute" contract of `<link rel="modulepreload">` intact.
614
+ // Per-compilation state: the HTML modules seen during make, so `finishMake`
615
+ // creates their entries without scanning the module graph, plus the
616
+ // stylesheet entry names and each emitted page's html options.
617
+ /** @type {WeakMap<import("../Compilation"), { htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions>, pageNames: Map<string, string> }>} */
640
618
  const compilationState = new WeakMap();
641
619
  /**
642
620
  * @param {import("../Compilation")} compilation compilation
643
- * @returns {{ htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions> }} per-compilation state
621
+ * @returns {{ htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions>, pageNames: Map<string, string> }} per-compilation state
644
622
  */
645
623
  const getState = (compilation) => {
646
624
  let state = compilationState.get(compilation);
@@ -649,14 +627,15 @@ class HtmlModulesPlugin {
649
627
  htmlModules: new Set(),
650
628
  stylesheetEntries: new Set(),
651
629
  pendingNames: new Map(),
652
- htmlAssetOptions: new Map()
630
+ htmlAssetOptions: new Map(),
631
+ pageNames: new Map()
653
632
  };
654
633
  compilationState.set(compilation, state);
655
634
  }
656
635
  return state;
657
636
  };
658
637
  compiler.hooks.finishMake.tapAsync(PLUGIN_NAME, (compilation, callback) => {
659
- const { htmlModules, stylesheetEntries, pendingNames } =
638
+ const { htmlModules, stylesheetEntries, pendingNames, pageNames } =
660
639
  getState(compilation);
661
640
  /** @type {Set<string>} */
662
641
  const extractedNames = new Set();
@@ -665,27 +644,32 @@ class HtmlModulesPlugin {
665
644
  /** @type {Map<string, Module>} */
666
645
  const linkedPages = new Map();
667
646
 
668
- // Collect the entries an HTML module asks for. Only the script chains
669
- // (`script`, `script-module`) share a runtime via a leader-only
670
- // `dependOn`; `modulepreload`, `stylesheet` and `html` links are all
671
- // independent entries (a CSS or page entry must not chain into a JS
672
- // leader, or the chunk would mix unrelated outputs).
673
- /** @type {(module: Module) => { context: string, request: string, name: string, dependOn: string[] | undefined }[]} */
647
+ // Collect the entries an HTML module asks for. Only the script chains share
648
+ // a runtime, through a leader-only `dependOn`; chaining a CSS or page entry
649
+ // into a JS leader would mix unrelated outputs into one chunk.
650
+ /** @type {(module: Module) => HtmlEntrySpec[]} */
674
651
  const collectEntrySpecs = (module) => {
675
652
  const { htmlEntries } = /** @type {HtmlModuleBuildInfo} */ (
676
653
  module.buildInfo
677
654
  );
678
655
  if (!htmlEntries) return [];
679
656
  const context = /** @type {string} */ (module.context);
657
+ /** @type {HtmlEntrySpec[]} */
680
658
  const specs = [];
659
+ /** @type {Set<string>} */
660
+ const specNames = new Set();
681
661
  for (const [groupKind, group] of Object.entries(htmlEntries)) {
682
662
  const isChainGroup =
683
663
  groupKind === "script" || groupKind === "script-module";
684
664
  /** @type {string | undefined} */
685
665
  let leaderName;
686
666
  for (const entry of group) {
667
+ // A run's tags are added under one entry name and the first of
668
+ // them carries its options, so a later one re-decides nothing.
687
669
  const dependOn =
688
- isChainGroup && leaderName !== undefined
670
+ isChainGroup &&
671
+ leaderName !== undefined &&
672
+ !specNames.has(entry.entryName)
689
673
  ? [leaderName]
690
674
  : undefined;
691
675
  if (isChainGroup && leaderName === undefined) {
@@ -697,14 +681,39 @@ class HtmlModulesPlugin {
697
681
  stylesheetEntries.add(entry.entryName);
698
682
  }
699
683
  extractedNames.add(entry.entryName);
684
+ specNames.add(entry.entryName);
700
685
  specs.push({
701
686
  context,
702
687
  request: entry.request,
703
688
  name: entry.entryName,
704
- dependOn
689
+ index: entry.index,
690
+ dependOn,
691
+ page: groupKind === "html"
705
692
  });
706
693
  }
707
694
  }
695
+ // A run is collected group by group, so its members are put back into
696
+ // the document's order — an entry's array is executed in it.
697
+ /** @type {Map<string, number[]>} */
698
+ const positionsByName = new Map();
699
+ for (let position = 0; position < specs.length; position++) {
700
+ const { name } = specs[position];
701
+ const positions = positionsByName.get(name);
702
+ if (positions === undefined) {
703
+ positionsByName.set(name, [position]);
704
+ } else {
705
+ positions.push(position);
706
+ }
707
+ }
708
+ for (const positions of positionsByName.values()) {
709
+ if (positions.length < 2) continue;
710
+ const ordered = positions
711
+ .map((position) => specs[position])
712
+ .sort((a, b) => a.index - b.index);
713
+ for (let i = 0; i < positions.length; i++) {
714
+ specs[positions[i]] = ordered[i];
715
+ }
716
+ }
708
717
  return specs;
709
718
  };
710
719
 
@@ -749,13 +758,29 @@ class HtmlModulesPlugin {
749
758
  }
750
759
  }
751
760
  ordered.sort((a, b) => a.index - b.index);
761
+ // An inline body has no url to be named after, so its page lends the
762
+ // name — and a `data:` page has none either, so its holder is walked to.
763
+ /** @type {string | undefined} */
764
+ let pageBase;
765
+ /** @type {Module | null | undefined} */
766
+ let holder = module;
767
+ while (pageBase === undefined && holder) {
768
+ const holderResource = /** @type {NormalModule} */ (holder).resource;
769
+ if (typeof holderResource === "string") {
770
+ pageBase = getRequestBaseName(holderResource);
771
+ }
772
+ holder = compilation.moduleGraph.getIssuer(holder);
773
+ }
752
774
  for (const entry of ordered) {
753
- // An inline `<script>` body has no url to be named after, so it
754
- // keeps the name of its own entry, page hash and tag index.
775
+ // A name the page or `module.parser.html.chunkName` asked for is what
776
+ // the file is called too; otherwise the tag's url lends its basename.
755
777
  const base =
756
778
  wrapsEntry && namedEntry
757
779
  ? namedEntry.name
758
- : getRequestBaseName(entry.request) || entry.entryName;
780
+ : entry.chunkName ||
781
+ getRequestBaseName(entry.request) ||
782
+ pageBase ||
783
+ entry.entryName;
759
784
  pendingNames.set(entry.entryName, {
760
785
  base,
761
786
  jsTemplate,
@@ -764,6 +789,11 @@ class HtmlModulesPlugin {
764
789
  }
765
790
  links.sort((a, b) => a.index - b.index);
766
791
  for (const link of links) {
792
+ // A linked page is named after its own path; a name the page asked
793
+ // for replaces that, and the link to it is rewritten either way.
794
+ if (link.chunkName && !contestedPageNames.has(link.entryName)) {
795
+ pageNames.set(link.entryName, link.chunkName);
796
+ }
767
797
  const page = linkedPages.get(link.entryName);
768
798
  if (page) recordNames(page, seen);
769
799
  }
@@ -771,7 +801,7 @@ class HtmlModulesPlugin {
771
801
 
772
802
  // Push one collected reference as a compilation entry; resolves with
773
803
  // the built entry module.
774
- /** @type {(spec: { context: string, request: string, name: string, dependOn: string[] | undefined }) => Promise<Module | null>} */
804
+ /** @type {(spec: HtmlEntrySpec) => Promise<Module | null>} */
775
805
  const addEntry = (spec) =>
776
806
  new Promise((resolve, reject) => {
777
807
  compilation.addEntry(
@@ -789,10 +819,32 @@ class HtmlModulesPlugin {
789
819
  );
790
820
  });
791
821
 
822
+ // What each page name was claimed for, so a second page asking for a
823
+ // taken one is refused rather than appended to the entry holding it.
824
+ /** @type {Map<string, string>} */
825
+ const pageRequests = new Map();
826
+ // Names a second page asked for and did not get, so it keeps the one its
827
+ // own path lends and emits beside the page holding the name.
828
+ /** @type {Set<string>} */
829
+ const contestedPageNames = new Set();
830
+ /**
831
+ * @param {string} name the name two things ask for
832
+ * @param {string} taken what holds it
833
+ * @param {string} request what asked for it
834
+ */
835
+ const reportNameTaken = (name, taken, request) => {
836
+ contestedPageNames.add(name);
837
+ compilation.errors.push(
838
+ new WebpackError(
839
+ `The name "${name}" is asked for by ${request} and is already taken by ${taken}. A page is emitted as its name, so give one of them another.`
840
+ )
841
+ );
842
+ };
843
+
792
844
  // Create one HTML module's entries. A `type: "html"` link is itself an
793
845
  // HTML entry, so after it builds we recurse into it — the same handling
794
846
  // every HTML entry already gets. `processed` guards diamonds and cycles.
795
- /** @type {WeakSet<import("../Module")>} */
847
+ /** @type {WeakSet<import("../module/Module")>} */
796
848
  const processed = new WeakSet();
797
849
  /** @type {(module: Module) => Promise<void>} */
798
850
  const processEntry = async (module) => {
@@ -800,18 +852,42 @@ class HtmlModulesPlugin {
800
852
  processed.add(module);
801
853
  await Promise.all(
802
854
  collectEntrySpecs(module).map(async (spec) => {
855
+ if (spec.page) {
856
+ const claimed = pageRequests.get(spec.name);
857
+ // The page holding the name is already an entry of its own:
858
+ // a second link to it adds nothing, a second page cannot have it.
859
+ if (claimed !== undefined) {
860
+ if (claimed !== spec.request) {
861
+ reportNameTaken(spec.name, claimed, spec.request);
862
+ }
863
+ return;
864
+ }
865
+ pageRequests.set(spec.name, spec.request);
866
+ }
803
867
  const entryModule = await addEntry(spec);
804
- if (entryModule && entryModule.type === HTML_MODULE_TYPE) {
868
+ // A page entry webpack made for us holds that page alone; anything
869
+ // else in it named the same and would be emitted over.
870
+ if (spec.page) {
871
+ const entry = compilation.entries.get(spec.name);
872
+ if (entry && entry.dependencies.length !== 1) {
873
+ reportNameTaken(
874
+ spec.name,
875
+ `entry "${spec.name}"`,
876
+ spec.request
877
+ );
878
+ return;
879
+ }
880
+ }
881
+ if (entryModule && entryModule.is("html")) {
805
882
  linkedPages.set(spec.name, entryModule);
806
883
  await processEntry(entryModule);
807
884
  }
808
885
  })
809
886
  );
810
887
  };
811
- // Seed with the HTML modules seen during make (config entries /
812
- // imports, fresh or cache-restored); linked pages are reached by
813
- // recursion above. Sorted because they are tracked in build-completion
814
- // order, which the names must not depend on.
888
+ // Seed with the HTML modules seen during make; linked pages are reached by
889
+ // the recursion above. Sorted because they are tracked in build-completion
890
+ // order, which the generated names must not depend on.
815
891
  const seeds = [...htmlModules].sort(compareModulesByIdentifier);
816
892
  Promise.all(seeds.map(processEntry)).then(() => {
817
893
  /** @type {Set<Module>} */
@@ -822,13 +898,12 @@ class HtmlModulesPlugin {
822
898
  });
823
899
 
824
900
  // `csp` injects a `<meta http-equiv="Content-Security-Policy">` and
825
- // `integrity` resolves the SRI sentinels — both once the page's inline
826
- // content is final (in `processAssets` below), per page, so an entry's
827
- // `html` can override them.
828
- // `"auto"` marks implicit enablement (no user rule for HTML files) — see
829
- // `applyExperimentsDefaults`. Only then loaders win over the built-in type
830
- // (e.g. html-webpack-plugin's template loader in its child compiler).
831
- // TODO webpack 6: html defaults to `true`, drop this implicit-only fallback.
901
+ // `integrity` resolves the SRI sentinels, both per page once its inline
902
+ // content is final, so an entry's `html` can override them.
903
+
904
+ // `"auto"` marks implicit enablement, the one case where loaders win over
905
+ // the built-in type — see `applyExperimentsDefaults`.
906
+ // TODO in the next major release: html defaults to `true`, drop this implicit-only fallback.
832
907
  const implicitlyEnabled = compiler.options.experiments.html === "auto";
833
908
  compiler.hooks.compilation.tap(
834
909
  PLUGIN_NAME,
@@ -845,11 +920,11 @@ class HtmlModulesPlugin {
845
920
  /**
846
921
  * Records HTML modules as they are built or restored, so `finishMake`
847
922
  * creates their entries without scanning the whole module graph.
848
- * @param {import("../Module")} module built or restored module
923
+ * @param {import("../module/Module")} module built or restored module
849
924
  * @returns {void}
850
925
  */
851
926
  const trackHtmlModule = (module) => {
852
- if (module.type !== HTML_MODULE_TYPE) return;
927
+ if (!module.is("html")) return;
853
928
  // enabled here, not on the compilation hook: an integrity build
854
929
  // with no html module must not load the generator
855
930
  if (anyIntegrity) {
@@ -860,13 +935,12 @@ class HtmlModulesPlugin {
860
935
  compilation.hooks.succeedModule.tap(PLUGIN_NAME, trackHtmlModule);
861
936
  compilation.hooks.stillValidModule.tap(PLUGIN_NAME, trackHtmlModule);
862
937
 
863
- // Resolve integrity and inline sentinels after `RealContentHashPlugin`
864
- // so final bytes are in place. Only HTML pages carry these sentinels —
865
- // never JS chunks that embed an HTML string.
866
- // SRI only takes effect on a cross-origin subresource fetched
867
- // with CORS; without `output.crossOriginLoading` the browser
868
- // silently ignores `integrity` on cross-origin loads. Warn once
869
- // so a CDN deployment doesn't ship no-op integrity attributes.
938
+ // Resolve integrity and inline sentinels after `RealContentHashPlugin`,
939
+ // so final bytes are in place. Only HTML pages carry them.
940
+
941
+ // SRI takes effect only on a cross-origin subresource fetched with CORS,
942
+ // so without `output.crossOriginLoading` the browser ignores `integrity`.
943
+ // Warn once, rather than let a CDN deployment ship no-op attributes.
870
944
  if (anyIntegrity && !compilation.outputOptions.crossOriginLoading) {
871
945
  compilation.warnings.push(
872
946
  new WebpackError(
@@ -912,12 +986,9 @@ class HtmlModulesPlugin {
912
986
  inlinedFiles
913
987
  );
914
988
  }
915
- // `injectTags` (add tags), `transformTags` (mutate/move/remove the
916
- // page's own and injected tags), and CSP all run over a single
917
- // parse: collect the tags/anchors once, let the hooks act, then
918
- // render every edit — placement, attribute rewrites, moves,
919
- // removals, CSP hashes/nonce/meta — in one pass. Injected inline
920
- // `<script>`/`<style>` are hashed like the page's own.
989
+ // `injectTags`, `transformTags` and CSP all run over a single parse:
990
+ // collect the tags and anchors once, let the hooks act, then render
991
+ // every edit in one pass.
921
992
  const injected = await hooks.injectTags.promise([], {
922
993
  outputName: name,
923
994
  html: resolved
@@ -991,14 +1062,9 @@ class HtmlModulesPlugin {
991
1062
  }
992
1063
  );
993
1064
 
994
- // CSS entries created by `<link rel="stylesheet">` in HTML need
995
- // their `.css` filename set via `chunk.cssFilenameTemplate`
996
- // (the field `CssModulesPlugin.getChunkFilenameTemplate` reads).
997
- // Compilation only flows `options.filename` to `chunk.filenameTemplate`,
998
- // which controls JS emit — there's no entry-level `cssFilename`.
999
- // Set it ourselves after chunks are created so each stylesheet
1000
- // entry emits to a distinct file derived from `output.cssFilename`
1001
- // (or `output.cssChunkFilename` for non-initial CSS chunks).
1065
+ // There is no entry-level `cssFilename`: Compilation flows
1066
+ // `options.filename` only to `chunk.filenameTemplate`, which drives JS
1067
+ // emit. So set `chunk.cssFilenameTemplate` here, once chunks exist.
1002
1068
  compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
1003
1069
  const { stylesheetEntries, pendingNames } = getState(compilation);
1004
1070
  if (pendingNames.size === 0) return;
@@ -1008,6 +1074,10 @@ class HtmlModulesPlugin {
1008
1074
  // documents' order rather than their builds'.
1009
1075
  const takenJsNames = new Set(compilation.entries.keys());
1010
1076
  const takenCssNames = new Set(takenJsNames);
1077
+ /** @type {Map<string, number>} */
1078
+ const nextJsIndex = new Map();
1079
+ /** @type {Map<string, number>} */
1080
+ const nextCssIndex = new Map();
1011
1081
  // An extracted entry emits nothing under its own synthetic name, so
1012
1082
  // that name never stands in the way of the one its tag asks for.
1013
1083
  for (const entryName of pendingNames.keys()) {
@@ -1035,7 +1105,7 @@ class HtmlModulesPlugin {
1035
1105
  chunk.filenameTemplate = getEntryTemplate(
1036
1106
  jsTemplate,
1037
1107
  jsExtension,
1038
- claimName(base, takenJsNames)
1108
+ claimName(base, takenJsNames, nextJsIndex)
1039
1109
  );
1040
1110
  }
1041
1111
  // A `<script src>` whose chunk carries no CSS claims no CSS name, so
@@ -1049,7 +1119,7 @@ class HtmlModulesPlugin {
1049
1119
  chunk.cssFilenameTemplate = getEntryTemplate(
1050
1120
  outputOptions.cssFilename,
1051
1121
  ".css",
1052
- claimName(base, takenCssNames)
1122
+ claimName(base, takenCssNames, nextCssIndex)
1053
1123
  );
1054
1124
  }
1055
1125
  });
@@ -1057,10 +1127,9 @@ class HtmlModulesPlugin {
1057
1127
  StaticExportsDependency,
1058
1128
  new StaticExportsDependency.Template()
1059
1129
  );
1060
- // `ConstDependency` is used by HtmlParser to insert
1061
- // ` type="module"` into the rewritten <script> tag when
1062
- // `output.module` is on. Register its template so the HTML
1063
- // generator runs the insertion.
1130
+ // HtmlParser uses `ConstDependency` to insert ` type="module"` into a
1131
+ // rewritten `<script>` under `output.module`; its template has to be
1132
+ // registered for the HTML generator to run that insertion.
1064
1133
  compilation.dependencyTemplates.set(
1065
1134
  ConstDependency,
1066
1135
  new ConstDependency.Template()
@@ -1070,11 +1139,11 @@ class HtmlModulesPlugin {
1070
1139
  normalModuleFactory.hooks.prepareModuleType
1071
1140
  .for(HTML_MODULE_TYPE)
1072
1141
  .tap(PLUGIN_NAME, () => {
1073
- const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
1074
- const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
1075
- const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
1076
- const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
1077
- const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
1142
+ const HtmlSourceDependency = require("../dependencies/html/HtmlSourceDependency");
1143
+ const HtmlEntryDependency = require("../dependencies/html/HtmlEntryDependency");
1144
+ const HtmlInlineScriptDependency = require("../dependencies/html/HtmlInlineScriptDependency");
1145
+ const HtmlInlineStyleDependency = require("../dependencies/html/HtmlInlineStyleDependency");
1146
+ const HtmlInlineHtmlDependency = require("../dependencies/html/HtmlInlineHtmlDependency");
1078
1147
 
1079
1148
  compilation.dependencyFactories.set(
1080
1149
  HtmlSourceDependency,
@@ -1092,10 +1161,9 @@ class HtmlModulesPlugin {
1092
1161
  HtmlEntryDependency,
1093
1162
  new HtmlEntryDependency.Template()
1094
1163
  );
1095
- // Inline `<script>` content is bundled as its own entry — the
1096
- // same pipeline that handles `<script src>` — via a
1097
- // `data:text/javascript,...` request. The dependency
1098
- // template rewrites the original tag to `<script src=…>`.
1164
+ // Inline `<script>` content becomes its own entry through a
1165
+ // `data:text/javascript,...` request, the same pipeline as
1166
+ // `<script src>`; the template then rewrites the tag.
1099
1167
  compilation.dependencyFactories.set(
1100
1168
  HtmlInlineScriptDependency,
1101
1169
  normalModuleFactory
@@ -1104,11 +1172,9 @@ class HtmlModulesPlugin {
1104
1172
  HtmlInlineScriptDependency,
1105
1173
  new HtmlInlineScriptDependency.Template()
1106
1174
  );
1107
- // Inline `<style>` content is routed through the CSS pipeline
1108
- // as a `data:text/css` module. The dependency template reads
1109
- // the processed CSS text from the CSS module's code
1110
- // generation data (`css-text` channel set by CssGenerator
1111
- // when `exportType` is `"text"`).
1175
+ // Inline `<style>` content goes through the CSS pipeline as a
1176
+ // `data:text/css` module; the template reads the processed text
1177
+ // from the `css-text` code-generation channel.
1112
1178
  compilation.dependencyFactories.set(
1113
1179
  HtmlInlineStyleDependency,
1114
1180
  normalModuleFactory
@@ -1176,12 +1242,11 @@ class HtmlModulesPlugin {
1176
1242
  NormalModule.getCompilationHooks(compilation).processResult.tap(
1177
1243
  PLUGIN_NAME,
1178
1244
  (result, module) => {
1179
- if (module.type === HTML_MODULE_TYPE) {
1245
+ if (module.is("html")) {
1180
1246
  const [source, ...rest] = removeBOMFromResult(result);
1181
- // `applyTemplate` is a no-op unless `module.parser.html.template`
1182
- // is set. Running it here (where the returned source becomes the
1183
- // module's stored source) keeps the parser's dependency offsets
1184
- // and the generator's render base in sync.
1247
+ // Run here, where the returned source becomes the module's stored
1248
+ // source, so the parser's dependency offsets and the generator's
1249
+ // render base stay in sync.
1185
1250
  const parser = /** @type {HtmlParser} */ (module.parser);
1186
1251
 
1187
1252
  return [parser.applyTemplate(source, module), ...rest];
@@ -1191,35 +1256,20 @@ class HtmlModulesPlugin {
1191
1256
  }
1192
1257
  );
1193
1258
 
1194
- // Emit extracted `.html` files for any HTML module that opted
1195
- // into extraction. The opt-in is computed by
1196
- // `HtmlGenerator#_shouldExtract`: `module.generator.html.extract:
1197
- // true` always extracts, `false` never extracts, and when
1198
- // `extract` is unset the generator extracts iff the HTML module
1199
- // is a compilation entry — the iteration below picks up only
1200
- // modules whose generator reported the `html` source type, so
1201
- // that decision is honored implicitly. The HTML content is read
1202
- // from the generator's secondary `"html"` source type (see
1203
- // HtmlGenerator#generate). The filename template comes from
1204
- // `output.htmlFilename` (initial chunks) or
1205
- // `output.htmlChunkFilename` (non-initial chunks), mirroring
1206
- // the CSS pipeline. Path data follows the asset-module pattern —
1207
- // `module` + a relative source `filename`, with `chunk`
1208
- // intentionally omitted so `[name]` resolves to the HTML
1209
- // source's basename (e.g. `page` for `./page.html`) rather
1210
- // than the importing chunk's name (e.g. `main`). A per-module
1211
- // content hash is computed from the rewritten HTML so the
1212
- // template's `[contenthash]` placeholder works; the
1213
- // compilation hash is also forwarded so `[fullhash]` /
1214
- // `[hash]` work in user-supplied templates.
1215
-
1216
- // Sentinel-resolved content and its content hash depend only on
1217
- // the HTML-type module source — not on the chunk or output
1218
- // filename — yet `renderManifest` runs per `(chunk, module)`.
1219
- // Memoize so a module landing in multiple chunks resolves and
1220
- // hashes its sentinels once. Scoped to this compilation because
1221
- // sentinel resolution embeds chunk filenames, which change
1222
- // across rebuilds; weakly keyed by source so entries release.
1259
+ // WHY: emit extracted `.html` files for any HTML module that opted in.
1260
+ // `HtmlGenerator#_shouldExtract` computes that opt-in —
1261
+ // `module.generator.html.extract: true` always extracts, `false` never,
1262
+ // and unset extracts only a compilation entry — and the iteration below
1263
+ // picks up only modules whose generator reported the `html` source type,
1264
+ // so that decision is honoured implicitly. The filename comes from
1265
+ // `output.htmlFilename` for initial chunks and `output.htmlChunkFilename`
1266
+ // otherwise, mirroring the CSS pipeline, and the path data follows the
1267
+ // asset-module pattern with `chunk` deliberately left out, so `[name]`
1268
+ // resolves to the HTML source's basename rather than the chunk's.
1269
+
1270
+ // `renderManifest` runs per `(chunk, module)`, but resolved content and
1271
+ // its hash depend only on the module source, so memoize. Scoped to this
1272
+ // compilation, since resolution embeds chunk filenames.
1223
1273
  /** @type {WeakMap<import("webpack-sources").Source, { resolvedContent: string, contentHash: string }>} */
1224
1274
  const resolvedSentinelHashCache = new WeakMap();
1225
1275
 
@@ -1228,28 +1278,25 @@ class HtmlModulesPlugin {
1228
1278
  * content hash. Links to other pages stay sentinels, so a page's filename
1229
1279
  * never depends on the filenames of the pages it links to.
1230
1280
  * @param {NormalModule} module the page's html module
1231
- * @param {import("../Chunk")} chunk chunk the page is emitted from
1281
+ * @param {import("../graph/Chunk")} chunk chunk the page is emitted from
1232
1282
  * @returns {{ resolvedContent: string, contentHash: string, filename: string, info: import("../Compilation").AssetInfo } | undefined} the page's emit, or `undefined` when it generates no html
1233
1283
  */
1234
1284
  const computePageEmit = (module, chunk) => {
1235
1285
  const { chunkGraph, outputOptions } = compilation;
1236
1286
  const codeGenResult =
1237
- /** @type {import("../CodeGenerationResults")} */ (
1287
+ /** @type {import("../module/CodeGenerationResults")} */ (
1238
1288
  compilation.codeGenerationResults
1239
1289
  ).get(module, chunk.runtime);
1240
1290
  const placeholderSource = codeGenResult.sources.get(HTML_TYPE);
1241
1291
  if (!placeholderSource) return undefined;
1242
1292
  let cached = resolvedSentinelHashCache.get(placeholderSource);
1243
1293
  if (cached === undefined) {
1244
- // Resolve chunk-URL sentinels *before* hashing so the HTML's
1245
- // `[contenthash]` invalidates with the referenced chunks'
1246
- // filenames. Inlined chunks have no URL, so tag their inline
1247
- // sentinels with the chunk content hash — that keeps the emitted
1248
- // bytes (and RealContentHashPlugin's later recompute)
1249
- // content-dependent, so the page hash tracks inlined content too.
1250
- // Asset URL sentinels (from `HtmlEntryDependency` resource-hint
1251
- // tags) resolve here too — deferred from template.apply so it
1252
- // doesn't race with asset-module codegen.
1294
+ // Resolve chunk-URL sentinels before hashing, so the page's
1295
+ // `[contenthash]` tracks the referenced chunks. An inlined chunk has
1296
+ // no URL, so its sentinel carries the chunk content hash instead.
1297
+
1298
+ // Asset URL sentinels resolve here rather than in `template.apply`,
1299
+ // which would race with asset-module codegen.
1253
1300
  const resolvedContent = getHtmlGenerator().resolveAssetUrlSentinels(
1254
1301
  getHtmlGenerator().embedInlineChunkHashes(
1255
1302
  getHtmlGenerator().resolveChunkUrlSentinels(
@@ -1270,10 +1317,14 @@ class HtmlModulesPlugin {
1270
1317
  resolvedSentinelHashCache.set(placeholderSource, cached);
1271
1318
  }
1272
1319
  const resource = module.getResource() || module.resource;
1273
- // Synthetic `output.html` entries are `data:text/html` modules with no
1274
- // real basename — name the file after the entry instead.
1320
+ // A page is named after its own path, unless it asked for a name; a
1321
+ // synthetic `output.html` entry has none, so its entry names it.
1322
+ const requestedPageName = chunk.name
1323
+ ? getState(compilation).pageNames.get(chunk.name)
1324
+ : undefined;
1275
1325
  const sourceFilename =
1276
- resource.startsWith("data:text/html") && chunk.name
1326
+ requestedPageName ||
1327
+ (resource.startsWith("data:text/html") && chunk.name
1277
1328
  ? chunk.name
1278
1329
  : toTemplateSourceFileName(
1279
1330
  makePathsRelative(
@@ -1282,13 +1333,13 @@ class HtmlModulesPlugin {
1282
1333
  compiler.root
1283
1334
  ).replace(/^\.\//, ""),
1284
1335
  compilation
1285
- );
1336
+ ));
1286
1337
  const filenameTemplate = HtmlModulesPlugin.getChunkFilenameTemplate(
1287
1338
  chunk,
1288
1339
  outputOptions
1289
1340
  );
1290
1341
  const { path: filename, info } = compilation.getPathWithInfo(
1291
- /** @type {import("../TemplatedPathPlugin").TemplatePath} */
1342
+ /** @type {import("../template/TemplatedPathPlugin").TemplatePath} */
1292
1343
  (filenameTemplate),
1293
1344
  {
1294
1345
  module,
@@ -1345,11 +1396,10 @@ class HtmlModulesPlugin {
1345
1396
  compilation.hooks.renderManifest.tap(
1346
1397
  PLUGIN_NAME,
1347
1398
  (result, { chunk }) => {
1348
- // HMR's `HotUpdateChunk`s flow through the same hook
1349
- // but aren't real output chunks — extracting `.html`
1350
- // for them would create stray hot-update HTML files.
1399
+ // HMR's `HotUpdateChunk`s reach this hook but are not output chunks,
1400
+ // so extracting `.html` for them would emit stray hot-update files.
1351
1401
  // `CssModulesPlugin` early-returns for the same reason.
1352
- if (chunk instanceof HotUpdateChunk) return result;
1402
+ if (chunk.isHotUpdate()) return result;
1353
1403
  const { chunkGraph } = compilation;
1354
1404
  const modules =
1355
1405
  chunkGraph.getOrderedChunkModulesIterableBySourceType(
@@ -1361,12 +1411,13 @@ class HtmlModulesPlugin {
1361
1411
  const outputOptions = compilation.outputOptions;
1362
1412
  for (const module of modules) {
1363
1413
  const normalModule = /** @type {NormalModule} */ (module);
1364
- // `<iframe srcdoc>` modules expose `html` only so HtmlInlineHtmlDependency
1365
- // can write the processed markup back into the host attribute — they are
1366
- // never standalone pages. `generator.extract: "inline"` marks them so no
1367
- // `.html` file is emitted; without this they'd collide on the
1368
- // `data:text/html` → chunk-name path (every srcdoc module in a chunk would
1369
- // emit `<chunk>.html`). An O(1) flag check, not a scan.
1414
+ // WHY: an `<iframe srcdoc>` module exposes `html` only so that
1415
+ // `HtmlInlineHtmlDependency` can write the processed markup back
1416
+ // into the host attribute; it is never a standalone page.
1417
+ // `generator.extract: "inline"` marks it so no `.html` file is
1418
+ // emitted — without it they would collide on the `data:text/html`
1419
+ // to chunk-name path, every srcdoc module in a chunk emitting
1420
+ // `<chunk>.html`. An O(1) flag check rather than a scan.
1370
1421
  const generatorOptions = normalModule.generatorOptions;
1371
1422
  if (generatorOptions && generatorOptions.extract === "inline") {
1372
1423
  continue;
@@ -1376,11 +1427,9 @@ class HtmlModulesPlugin {
1376
1427
  if (!emit) continue;
1377
1428
  const { resolvedContent, contentHash, filename, info } = emit;
1378
1429
 
1379
- // Resolve any remaining `[webpack/auto]` placeholders to an undo
1380
- // path computed from the emitted HTML's location, so asset/chunk
1381
- // URLs stay relative to `output.path` even when the page emits into
1382
- // a subdirectory. A relative `<base href>` prepends `../`s so the
1383
- // base can't misdirect the rewritten URLs (see `HtmlParser`).
1430
+ // Resolve the remaining `[webpack/auto]` placeholders against the
1431
+ // emitted page's own location, so URLs stay relative to `output.path`
1432
+ // from a subdirectory. A relative `<base href>` prepends `../`s.
1384
1433
  const basePrefix =
1385
1434
  /** @type {HtmlModuleBuildInfo} */ (normalModule.buildInfo)
1386
1435
  .baseUrlPrefix || "";
@@ -1402,12 +1451,9 @@ class HtmlModulesPlugin {
1402
1451
  .split(autoPlaceholder)
1403
1452
  .join(undoPath);
1404
1453
  const finalSource = new RawSource(finalContent);
1405
- // The same HTML module can land in multiple chunks with different
1406
- // `htmlFilename`/`htmlChunkFilename` shapes → different `undoPath`s and
1407
- // final content for the same module id. Include the emitted filename in
1408
- // the asset cache key and the post-undo-path content in the hash so the
1409
- // asset cache can't reuse one variant's bytes at another variant's URL.
1410
- // Unchanged content reuses the memoized hash instead of re-digesting.
1454
+ // One module can land in several chunks whose filename shapes give
1455
+ // different undo paths, so the emitted filename joins the cache key
1456
+ // and the post-undo content the hash — else variants alias.
1411
1457
  const finalContentHash =
1412
1458
  finalContent === resolvedContent
1413
1459
  ? contentHash
@@ -1541,11 +1587,10 @@ class HtmlModulesPlugin {
1541
1587
  // Scope-hoisted HTML loses HTML_TYPE on the ConcatenatedModule, but its
1542
1588
  // JS export can still carry unresolved sentinels that need this path.
1543
1589
  for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
1544
- if (module instanceof HtmlModule) return true;
1545
- if (module instanceof ConcatenatedModule) {
1546
- for (const inner of module.modules) {
1547
- if (inner instanceof HtmlModule) return true;
1548
- }
1590
+ if (module.is("html")) return true;
1591
+ if (module.getRootModule() === module) continue;
1592
+ for (const inner of module.getSourceModules()) {
1593
+ if (inner.is("html")) return true;
1549
1594
  }
1550
1595
  }
1551
1596
  return false;