webpack 5.111.1 → 5.112.1

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 (793) hide show
  1. package/README.md +1 -1
  2. package/bin/webpack.js +13 -7
  3. package/lib/Chunk.js +3 -966
  4. package/lib/Compilation.js +373 -163
  5. package/lib/Compiler.js +31 -44
  6. package/lib/Dependency.js +3 -551
  7. package/lib/DependencyTemplate.js +3 -70
  8. package/lib/EntryPlugin.js +3 -68
  9. package/lib/Entrypoint.js +3 -121
  10. package/lib/ExternalsPlugin.js +3 -92
  11. package/lib/FileSystemInfo.js +3 -4629
  12. package/lib/InitFragment.js +3 -204
  13. package/lib/LibraryTemplatePlugin.js +3 -46
  14. package/lib/ModuleFilenameHelpers.js +3 -400
  15. package/lib/ModuleNotFoundError.js +2 -2
  16. package/lib/MultiCompiler.js +37 -8
  17. package/lib/NormalModule.js +3 -2242
  18. package/lib/NullFactory.js +3 -22
  19. package/lib/ProgressPlugin.js +3 -908
  20. package/lib/RawModule.js +3 -197
  21. package/lib/RequestShortener.js +3 -37
  22. package/lib/SingleEntryPlugin.js +1 -1
  23. package/lib/WebpackError.js +2 -2
  24. package/lib/asset/AssetBytesGenerator.js +21 -13
  25. package/lib/asset/AssetBytesParser.js +12 -10
  26. package/lib/asset/AssetGenerator.js +71 -69
  27. package/lib/asset/AssetModule.js +13 -2
  28. package/lib/asset/AssetModulesPlugin.js +10 -12
  29. package/lib/asset/AssetParser.js +10 -10
  30. package/lib/asset/AssetSourceGenerator.js +23 -15
  31. package/lib/asset/AssetSourceParser.js +12 -10
  32. package/lib/asset/RawDataUrlModule.js +17 -10
  33. package/lib/asset/WebManifestGenerator.js +17 -12
  34. package/lib/asset/WebManifestParser.js +8 -8
  35. package/lib/async-modules/AsyncModuleHelpers.js +12 -5
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  37. package/lib/async-modules/InferAsyncModulesPlugin.js +9 -3
  38. package/lib/async-modules/isGeneratorLowered.js +3 -3
  39. package/lib/bun/BunTargetPlugin.js +1 -1
  40. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  41. package/lib/{Cache.js → cache/Cache.js} +1 -1
  42. package/lib/{CacheFacade.js → cache/CacheFacade.js} +6 -6
  43. package/lib/cache/IdleFileCachePlugin.js +2 -2
  44. package/lib/cache/MemoryCachePlugin.js +2 -2
  45. package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
  46. package/lib/cache/PackFileCacheStrategy.js +13 -19
  47. package/lib/cache/ResolverCachePlugin.js +65 -11
  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} +209 -212
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +1 -1
  54. package/lib/{cli.js → config/cli.js} +14 -164
  55. package/lib/config/defaults.js +166 -59
  56. package/lib/config/getClaimedAssetTypes.js +22 -14
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +11 -1
  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/context/ContextModule.js +37 -26
  76. package/lib/context/ContextModuleFactory.js +14 -11
  77. package/lib/context/ContextReplacementPlugin.js +6 -12
  78. package/lib/css/CssGenerator.js +78 -68
  79. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  80. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  81. package/lib/css/CssModule.js +37 -29
  82. package/lib/css/CssModulesPlugin.js +129 -45
  83. package/lib/css/CssParser.js +714 -322
  84. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  85. package/lib/{util → css}/conventions.js +1 -1
  86. package/lib/css/cssMinify.js +110 -37
  87. package/lib/css/data.js +6990 -5125
  88. package/lib/css/syntax-parser.js +20734 -0
  89. package/lib/css/syntax-printer.js +6092 -0
  90. package/lib/css/syntax.js +37 -18686
  91. package/lib/debug/ProfilingPlugin.js +106 -51
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
  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 -11
  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} +14 -11
  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} +166 -36
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
  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} +17 -16
  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} +9 -6
  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} +31 -9
  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} +10 -11
  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} +7 -10
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
  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} +21 -17
  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 -99
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
  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} +25 -22
  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} +29 -21
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +20 -20
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
  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} +146 -133
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
  188. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  189. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  190. package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
  191. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  192. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
  193. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
  194. package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
  195. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  196. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  197. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  200. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  201. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +52 -151
  202. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
  203. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
  204. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
  205. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  206. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  207. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  208. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  209. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +22 -25
  210. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  211. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  212. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  213. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  214. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  215. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +122 -103
  216. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  217. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  218. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  219. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  220. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
  221. package/lib/{url → dependencies/url}/URLParserPlugin.js +17 -19
  222. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  223. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  224. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  225. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  226. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +82 -53
  227. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
  228. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
  229. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  230. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  231. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  232. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  233. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +155 -27
  234. package/lib/{util → devtool}/generateDebugId.js +1 -1
  235. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  236. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  237. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  238. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  239. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  240. package/lib/dll/DelegatedModule.js +23 -21
  241. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  242. package/lib/dll/DelegatedPlugin.js +1 -1
  243. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  244. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  245. package/lib/dll/DllEntryPlugin.js +3 -3
  246. package/lib/dll/DllModule.js +14 -10
  247. package/lib/dll/DllModuleFactory.js +3 -3
  248. package/lib/dll/DllPlugin.js +18 -6
  249. package/lib/dll/DllReferencePlugin.js +103 -30
  250. package/lib/dll/LibManifestPlugin.js +9 -7
  251. package/lib/electron/ElectronTargetPlugin.js +2 -2
  252. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  253. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  254. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  255. package/lib/entry/EntryPlugin.js +75 -0
  256. package/lib/errors/AbstractMethodError.js +1 -1
  257. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  258. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  259. package/lib/errors/BuildCycleError.js +1 -1
  260. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  261. package/lib/errors/ChunkRenderError.js +1 -1
  262. package/lib/errors/CodeGenerationError.js +1 -1
  263. package/lib/errors/CommentCompilationWarning.js +1 -1
  264. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  265. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  266. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  267. package/lib/errors/DllManifestError.js +26 -0
  268. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  269. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  270. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  271. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  272. package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +9 -6
  273. package/lib/errors/ExternalStarReexportError.js +2 -2
  274. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  275. package/lib/errors/HookWebpackError.js +6 -5
  276. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  277. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  278. package/lib/errors/JSONParseError.js +4 -4
  279. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  280. package/lib/errors/ModuleBuildError.js +1 -1
  281. package/lib/errors/ModuleDependencyError.js +2 -2
  282. package/lib/errors/ModuleDependencyWarning.js +2 -2
  283. package/lib/errors/ModuleError.js +1 -1
  284. package/lib/errors/ModuleHashingError.js +1 -1
  285. package/lib/errors/ModuleNotFoundError.js +3 -3
  286. package/lib/errors/ModuleParseError.js +1 -1
  287. package/lib/errors/ModuleRestoreError.js +1 -1
  288. package/lib/errors/ModuleStoreError.js +1 -1
  289. package/lib/errors/ModuleWarning.js +1 -1
  290. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  291. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  292. package/lib/errors/NodeStuffInWebError.js +7 -2
  293. package/lib/errors/PathVariableError.js +31 -0
  294. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  295. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  296. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  297. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  298. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  299. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  300. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  301. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  302. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  303. package/lib/errors/WebpackError.js +13 -3
  304. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  305. package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
  306. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  307. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  308. package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
  309. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
  310. package/lib/externals/ExternalsPlugin.js +99 -0
  311. package/lib/fs/FileSystemInfo.js +4642 -0
  312. package/lib/{util → fs}/fs.js +22 -9
  313. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  314. package/lib/graph/Chunk.js +985 -0
  315. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +192 -80
  316. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  317. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  318. package/lib/graph/Dependency.js +634 -0
  319. package/lib/graph/Entrypoint.js +136 -0
  320. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
  321. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  322. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
  323. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  324. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
  325. package/lib/{util → graph}/findGraphRoots.js +15 -9
  326. package/lib/graph/isDependencyKind.js +23 -0
  327. package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
  328. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
  329. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  330. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
  331. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  332. package/lib/hmr/LazyCompilationPlugin.js +32 -28
  333. package/lib/html/HtmlGenerator.js +132 -60
  334. package/lib/html/HtmlModule.js +16 -2
  335. package/lib/html/HtmlModulesPlugin.js +184 -87
  336. package/lib/html/HtmlParser.js +511 -160
  337. package/lib/html/builtinEmbeddedRenderer.js +70 -25
  338. package/lib/html/data.js +44 -22
  339. package/lib/html/htmlMinify.js +114 -41
  340. package/lib/html/syntax-parser.js +15795 -0
  341. package/lib/html/syntax-printer.js +1033 -0
  342. package/lib/html/syntax.js +37 -13952
  343. package/lib/html/xmlMinify.js +70 -0
  344. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  345. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  346. package/lib/ids/HashedModuleIdsPlugin.js +32 -5
  347. package/lib/ids/IdHelpers.js +4 -4
  348. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  349. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  350. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  351. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  352. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  353. package/lib/{util → ids}/numberHash.js +1 -1
  354. package/lib/index.js +312 -105
  355. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
  356. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  357. package/lib/javascript/BasicEvaluatedExpression.js +9 -9
  358. package/lib/javascript/ChunkHelpers.js +64 -4
  359. package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
  360. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
  361. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
  362. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  363. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  364. package/lib/javascript/JavascriptGenerator.js +32 -27
  365. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
  366. package/lib/javascript/JavascriptModule.js +14 -3
  367. package/lib/javascript/JavascriptModulesPlugin.js +441 -214
  368. package/lib/javascript/JavascriptParser.js +318 -144
  369. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  370. package/lib/javascript/MergedEntryExports.js +196 -0
  371. package/lib/javascript/ScopeAnalyzer.js +3924 -13
  372. package/lib/javascript/StartupHelpers.js +6 -6
  373. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
  374. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  375. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  376. package/lib/javascript/data.js +533 -122
  377. package/lib/javascript/jsMinify.js +272 -0
  378. package/lib/javascript/regexp.js +67 -32
  379. package/lib/javascript/syntax-parser.js +19169 -0
  380. package/lib/javascript/syntax-printer-data.js +1099 -0
  381. package/lib/javascript/syntax-printer.js +53878 -0
  382. package/lib/javascript/syntax.js +20 -11274
  383. package/lib/json/JsonData.js +1 -1
  384. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  385. package/lib/json/JsonGenerator.js +24 -16
  386. package/lib/json/JsonModule.js +13 -2
  387. package/lib/json/JsonModulesPlugin.js +1 -1
  388. package/lib/json/JsonParser.js +11 -10
  389. package/lib/json/jsonMinify.js +69 -0
  390. package/lib/library/AbstractLibraryPlugin.js +28 -15
  391. package/lib/library/AmdLibraryPlugin.js +4 -4
  392. package/lib/library/AssignLibraryPlugin.js +28 -12
  393. package/lib/library/EnableLibraryPlugin.js +1 -1
  394. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  395. package/lib/library/JsonpLibraryPlugin.js +2 -2
  396. package/lib/library/LibraryTemplatePlugin.js +53 -0
  397. package/lib/library/ModuleLibraryPlugin.js +557 -187
  398. package/lib/library/SystemLibraryPlugin.js +6 -8
  399. package/lib/library/UmdLibraryPlugin.js +3 -4
  400. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  401. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  402. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  403. package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
  404. package/lib/loaders/LoaderRunner.js +94 -46
  405. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  406. package/lib/loaders/loadLoader.js +16 -10
  407. package/lib/logging/Logger.js +7 -9
  408. package/lib/logging/ProgressPlugin.js +957 -0
  409. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  410. package/lib/{Generator.js → module/Generator.js} +33 -23
  411. package/lib/{Module.js → module/Module.js} +121 -53
  412. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  413. package/lib/module/NormalModule.js +2350 -0
  414. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
  415. package/lib/module/NullFactory.js +29 -0
  416. package/lib/{Parser.js → module/Parser.js} +12 -5
  417. package/lib/module/RawModule.js +208 -0
  418. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  419. package/lib/{util → module}/extractSourceMap.js +71 -20
  420. package/lib/{util → module}/findCaseMismatch.js +4 -4
  421. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  422. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  423. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
  424. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  425. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  426. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  427. package/lib/node/NodeTargetPlugin.js +1 -1
  428. package/lib/node/NodeWatchFileSystem.js +58 -6
  429. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  430. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -19
  431. package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
  432. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  433. package/lib/node/nodeConsole.js +6 -7
  434. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  435. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  436. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
  437. package/lib/optimize/ConcatenatedModule.js +231 -220
  438. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  439. package/lib/optimize/ConstExportsPlugin.js +7 -7
  440. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  441. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  442. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +23 -28
  443. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
  444. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  445. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  446. package/lib/optimize/InlineExports.js +12 -7
  447. package/lib/optimize/InnerGraph.js +5 -13
  448. package/lib/optimize/InnerGraphPlugin.js +10 -10
  449. package/lib/optimize/LazyBarrels.js +620 -0
  450. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  451. package/lib/optimize/LimitChunkCountPlugin.js +16 -7
  452. package/lib/optimize/MangleExportsPlugin.js +5 -5
  453. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  454. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  455. package/lib/optimize/ModuleConcatenationPlugin.js +28 -22
  456. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  457. package/lib/optimize/RealContentHashPlugin.js +18 -13
  458. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  459. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  460. package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
  461. package/lib/optimize/SplitChunksPlugin.js +719 -174
  462. package/lib/{util → optimize}/TupleQueue.js +9 -9
  463. package/lib/optimize/chunkSetIntersections.js +437 -0
  464. package/lib/{util → optimize}/deterministicGrouping.js +17 -17
  465. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  466. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +69 -25
  467. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
  468. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  469. package/lib/output/SSRManifestPlugin.js +349 -0
  470. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  471. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  472. package/lib/performance/BroadContextsPlugin.js +4 -4
  473. package/lib/performance/CacheEffectivenessPlugin.js +2 -3
  474. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  475. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  476. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  477. package/lib/performance/DynamicExportsPlugin.js +2 -2
  478. package/lib/performance/EvalUsagePlugin.js +4 -6
  479. package/lib/performance/HotspotsPlugin.js +39 -14
  480. package/lib/performance/LargeModulesPlugin.js +2 -3
  481. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  482. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  483. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  484. package/lib/performance/PureAnnotationsPlugin.js +19 -13
  485. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  486. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  487. package/lib/performance/SizeLimitsPlugin.js +11 -12
  488. package/lib/performance/TopLevelThisPlugin.js +22 -13
  489. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  490. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  491. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  492. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  493. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  494. package/lib/performance/UnusedFederationPlugin.js +2 -4
  495. package/lib/performance/UnusedModulesPlugin.js +5 -4
  496. package/lib/performance/getModuleSize.js +1 -1
  497. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  498. package/lib/performance/isOnlyReexported.js +7 -6
  499. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  500. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  501. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  502. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  503. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  504. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  505. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  506. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  507. package/lib/prefetch/ResourceHintPlugin.js +66 -45
  508. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  509. package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
  510. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  511. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  512. package/lib/{dependencies → provide}/ProvidedDependency.js +50 -17
  513. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  514. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  515. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  516. package/lib/resolve/getResolveOptionsKey.js +59 -0
  517. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  518. package/lib/rules/RuleSetCompiler.js +42 -51
  519. package/lib/rules/UseEffectRulePlugin.js +1 -3
  520. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  521. package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
  522. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  523. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  524. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  525. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  526. package/lib/runtime/CompatRuntimeModule.js +4 -4
  527. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  528. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  529. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  530. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  531. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  532. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  533. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  534. package/lib/runtime/GetChunkFilenameRuntimeModule.js +7 -11
  535. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  536. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  537. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  538. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  539. package/lib/runtime/GlobalRuntimeModule.js +3 -3
  540. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  541. package/lib/runtime/HelperRuntimeModule.js +16 -1
  542. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  543. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
  544. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  545. package/lib/runtime/NonceRuntimeModule.js +2 -2
  546. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  547. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  548. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  549. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +24 -1
  550. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  551. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  552. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -50
  553. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  554. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  555. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  556. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  557. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  558. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  559. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  560. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  561. package/lib/runtime/baseUri.js +1 -1
  562. package/lib/schemes/DataUriPlugin.js +1 -1
  563. package/lib/schemes/HttpUriPlugin.js +68 -13
  564. package/lib/schemes/VirtualUrlPlugin.js +52 -16
  565. package/lib/serialization/AggregateErrorSerializer.js +4 -4
  566. package/lib/serialization/BinaryMiddleware.js +4 -1
  567. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  568. package/lib/serialization/FileMiddleware.js +3 -3
  569. package/lib/serialization/ObjectMiddleware.js +62 -29
  570. package/lib/serialization/PlainObjectSerializer.js +3 -7
  571. package/lib/serialization/Serializer.js +21 -11
  572. package/lib/serialization/SerializerMiddleware.js +10 -8
  573. package/lib/serialization/SingleItemMiddleware.js +4 -2
  574. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  575. package/lib/sharing/ConsumeSharedModule.js +18 -14
  576. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  577. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  578. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  579. package/lib/sharing/ProvideSharedDependency.js +1 -1
  580. package/lib/sharing/ProvideSharedModule.js +11 -9
  581. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  582. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  583. package/lib/sharing/SharePlugin.js +102 -9
  584. package/lib/sharing/ShareRuntimeModule.js +6 -6
  585. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  586. package/lib/{util → sharing}/semver.js +14 -16
  587. package/lib/sharing/utils.js +59 -2
  588. package/lib/stats/DefaultStatsFactoryPlugin.js +57 -54
  589. package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
  590. package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
  591. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  592. package/lib/{Stats.js → stats/Stats.js} +4 -4
  593. package/lib/stats/StatsFactory.js +208 -37
  594. package/lib/stats/StatsPrinter.js +126 -13
  595. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  596. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  597. package/lib/template/DependencyTemplate.js +77 -0
  598. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  599. package/lib/template/InitFragment.js +223 -0
  600. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  601. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  602. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  603. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +158 -95
  604. package/lib/{Template.js → template/Template.js} +14 -12
  605. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
  606. package/lib/typescript/TypeScriptPlugin.js +3 -3
  607. package/lib/util/RequestShortener.js +44 -0
  608. package/lib/util/SortableSet.js +87 -22
  609. package/lib/util/SourceProcessor.js +439 -51
  610. package/lib/util/TupleSet.js +27 -27
  611. package/lib/util/WeakTupleMap.js +20 -16
  612. package/lib/util/buildDiagnostics.js +2 -2
  613. package/lib/util/cleverMerge.js +61 -33
  614. package/lib/util/comparators.js +19 -15
  615. package/lib/util/concatenate.js +28 -147
  616. package/lib/util/createMappings.js +111 -0
  617. package/lib/util/dataURL.js +96 -15
  618. package/lib/util/deprecation.js +5 -4
  619. package/lib/util/extractComments.js +118 -0
  620. package/lib/util/formatLocation.js +1 -1
  621. package/lib/util/globUtils.js +198 -20
  622. package/lib/util/haltVisitors.js +51 -0
  623. package/lib/util/handlerKeys.js +2 -2
  624. package/lib/util/identifier.js +117 -1
  625. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  626. package/lib/util/internalSerializables.js +296 -102
  627. package/lib/util/magicComment.js +12 -7
  628. package/lib/util/makeSerializable.js +28 -7
  629. package/lib/util/memoize.js +1 -1
  630. package/lib/util/parseJson.js +2 -2
  631. package/lib/util/preloadModuleType.js +5 -2
  632. package/lib/util/registerExternalSerializer.js +2 -2
  633. package/lib/util/removeBOM.js +1 -1
  634. package/lib/util/runtime.js +1 -1
  635. package/lib/util/serialization.js +35 -28
  636. package/lib/util/source.js +2 -2
  637. package/lib/util/terminalColors.js +161 -0
  638. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  639. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  640. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +19 -5
  641. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
  642. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
  643. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  644. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
  645. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  646. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
  647. package/lib/wasm/wasmModuleFilename.js +2 -2
  648. package/lib/wasm-sync/SyncWasmModule.js +18 -3
  649. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
  650. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  651. package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
  652. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
  653. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  654. package/lib/wasm-sync/WebAssemblyParser.js +15 -17
  655. package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
  656. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  657. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  658. package/lib/{Watching.js → watch/Watching.js} +8 -8
  659. package/lib/web/FetchCompileAsyncWasmPlugin.js +12 -18
  660. package/lib/web/FetchCompileWasmPlugin.js +8 -10
  661. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  662. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  663. package/lib/web/JsonpTemplatePlugin.js +1 -1
  664. package/lib/webpack.js +27 -17
  665. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  666. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  667. package/package.json +57 -36
  668. package/schemas/WebpackOptions.check.js +4 -3
  669. package/schemas/WebpackOptions.d.json.ts +2 -0
  670. package/schemas/WebpackOptions.json +295 -75
  671. package/schemas/plugins/BannerPlugin.check.js +4 -3
  672. package/schemas/plugins/BannerPlugin.json +29 -2
  673. package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
  674. package/schemas/plugins/HtmlParserOptions.check.js +4 -3
  675. package/schemas/plugins/IgnorePlugin.check.js +4 -3
  676. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  677. package/schemas/plugins/IgnorePlugin.json +1 -1
  678. package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
  679. package/schemas/plugins/ManifestPlugin.check.js +4 -3
  680. package/schemas/plugins/ManifestPlugin.json +3 -3
  681. package/schemas/plugins/ProgressPlugin.check.js +4 -3
  682. package/schemas/plugins/ProgressPlugin.json +2 -7
  683. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  684. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  685. package/schemas/plugins/SourceMapDevToolPlugin.check.js +4 -3
  686. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  687. package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
  688. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  689. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
  690. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
  691. package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
  692. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
  693. package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
  694. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  695. package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
  696. package/schemas/plugins/container/ExternalsType.check.js +4 -3
  697. package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
  698. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  699. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
  700. package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
  701. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
  702. package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
  703. package/schemas/plugins/css/CssParserOptions.check.js +4 -3
  704. package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
  705. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  706. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  707. package/schemas/plugins/dll/DllPlugin.check.js +4 -3
  708. package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
  709. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  710. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
  711. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
  712. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
  713. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
  714. package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
  715. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
  716. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
  717. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
  718. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
  719. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  720. package/schemas/plugins/output/CleanOptions.json +3 -0
  721. package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
  722. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
  723. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
  724. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  725. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
  726. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  727. package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
  728. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  729. package/types.d.ts +20780 -14174
  730. package/lib/LazyBarrel.js +0 -388
  731. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  732. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  733. package/lib/javascript/ChunkFormatHelpers.js +0 -72
  734. package/lib/javascript/grammar.js +0 -5546
  735. package/lib/javascript/parser.js +0 -1500
  736. package/lib/javascript/regexpData.js +0 -51
  737. package/lib/performance/getSourceModules.js +0 -22
  738. package/lib/util/Semaphore.js +0 -65
  739. package/lib/util/objectToMap.js +0 -15
  740. package/schemas/WebpackOptions.check.d.ts +0 -7
  741. package/schemas/_container.json +0 -155
  742. package/schemas/_sharing.json +0 -118
  743. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  745. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  746. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  747. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  748. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  749. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  750. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  751. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  752. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  753. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  754. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  755. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  756. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  758. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  759. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  760. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  761. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  762. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  763. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  764. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  765. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  768. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  769. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  770. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  771. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  772. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  773. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  774. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  775. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  776. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  777. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  778. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  779. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  780. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  781. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  782. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  783. /package/lib/{util → css}/topologicalSort.js +0 -0
  784. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  785. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  786. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  787. /package/lib/{util → javascript}/StackedMap.js +0 -0
  788. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  789. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  790. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  791. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  792. /package/lib/{util → optimize}/Queue.js +0 -0
  793. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -4,21 +4,22 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const Parser = require("../Parser");
8
- const ConstDependency = require("../dependencies/ConstDependency");
9
- const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
10
- const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
11
- const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
12
- const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
13
- const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
14
- const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
7
+ const ConstDependency = require("../dependencies/core/ConstDependency");
8
+ const StaticExportsDependency = require("../dependencies/core/StaticExportsDependency");
9
+ const HtmlEntryDependency = require("../dependencies/html/HtmlEntryDependency");
10
+ const HtmlInlineHtmlDependency = require("../dependencies/html/HtmlInlineHtmlDependency");
11
+ const HtmlInlineScriptDependency = require("../dependencies/html/HtmlInlineScriptDependency");
12
+ const HtmlInlineStyleDependency = require("../dependencies/html/HtmlInlineStyleDependency");
13
+ const HtmlSourceDependency = require("../dependencies/html/HtmlSourceDependency");
15
14
  const WebpackError = require("../errors/WebpackError");
15
+ const Parser = require("../module/Parser");
16
16
  const ResourceHintPlugin = require("../prefetch/ResourceHintPlugin");
17
17
  const parseResourceHintOptions = require("../prefetch/parseResourceHintOptions");
18
+ const ModuleInfoHeaderPlugin = require("../template/ModuleInfoHeaderPlugin");
18
19
  const LazySet = require("../util/LazySet");
19
20
  const LocConverter = require("../util/LocConverter");
20
21
  const createHash = require("../util/createHash");
21
- const { contextify } = require("../util/identifier");
22
+ const { contextify, getRequestBaseName } = require("../util/identifier");
22
23
  const {
23
24
  createMagicCommentContext,
24
25
  parseMagicComment,
@@ -26,12 +27,13 @@ const {
26
27
  } = require("../util/magicComment");
27
28
  const memoize = require("../util/memoize");
28
29
  const { JAVASCRIPT_SCRIPT_TYPES } = require("./data");
30
+ const { SVG_TAG_ADJUST } = require("./data");
31
+ const { SourceProcessor } = require("./syntax");
29
32
  const {
30
- NS_HTML,
31
- NS_SVG,
33
+ Field,
34
+ Flag,
32
35
  NodeType,
33
- SVG_TAG_ADJUST,
34
- SourceProcessor,
36
+ Part,
35
37
  baseTag,
36
38
  buildHeadTags,
37
39
  decodeEntities,
@@ -43,7 +45,7 @@ const {
43
45
  parseMsapplicationTask,
44
46
  parseSrc,
45
47
  parseSrcset
46
- } = require("./syntax");
48
+ } = require("./syntax-parser");
47
49
 
48
50
  const getUnsupportedFeatureWarning = memoize(() =>
49
51
  require("../errors/UnsupportedFeatureWarning")
@@ -57,13 +59,12 @@ const getCommentCompilationWarning = memoize(() =>
57
59
  require("../errors/CommentCompilationWarning")
58
60
  );
59
61
 
62
+ /** @import { BuiltHtmlModule, HtmlNormalModule } from "./HtmlModule" */
60
63
  /** @import { HtmlParserOptions } from "../../declarations/WebpackOptions" */
61
64
  /** @import { Range } from "../javascript/JavascriptParser" */
62
- /** @import Module, { BuildInfo, BuildMeta } from "../Module" */
65
+ /** @import Module from "../module/Module" */
63
66
  /** @import { FileSystemDependencies } from "../Compilation" */
64
- /** @import NormalModule from "../NormalModule" */
65
- /** @import { ParserState, PreparsedAst } from "../Parser" */
66
- /** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
67
+ /** @import { ParserState, PreparsedAst } from "../module/Parser" */
67
68
 
68
69
  /**
69
70
  * @typedef {object} HtmlTemplateContext
@@ -78,7 +79,8 @@ const getCommentCompilationWarning = memoize(() =>
78
79
  */
79
80
  /** @typedef {(source: string, context: HtmlTemplateContext) => string} HtmlTemplateFunction */
80
81
 
81
- /** @import { ParsedSource } from "./syntax" */
82
+ /** @import { ParsedSource } from "./syntax-parser" */
83
+ /** @import { MagicCommentOptions } from "../util/magicComment" */
82
84
 
83
85
  // Cheap pre-filter for a `style="..."` attribute: only route it through the
84
86
  // CSS pipeline when it can hold a URL-bearing function (`url()` / `src()` /
@@ -105,6 +107,12 @@ const CHARSET_DECLARATION_REGEXP = /charset\s*=/i;
105
107
  // CSP/fetch attributes copied verbatim onto a synthesized sibling `<link>` /
106
108
  // `<script>` (`HtmlEntryDependency`). Fixed output order, independent of
107
109
  // source order.
110
+ /**
111
+ * @param {import("./syntax-parser").HtmlPath} path walk path at an element
112
+ * @returns {boolean} whether the element is in the HTML namespace
113
+ */
114
+ const isHtmlElement = (path) => !path.flag(Flag.svg) && !path.flag(Flag.mathml);
115
+
108
116
  const COPYABLE_SIBLING_ATTRS = ["nonce", "crossorigin", "referrerpolicy"];
109
117
 
110
118
  const CC_QUOTATION = '"'.charCodeAt(0);
@@ -115,54 +123,135 @@ const CC_SLASH = "/".charCodeAt(0);
115
123
  * Byte-exact source span of an attribute including the single leading
116
124
  * whitespace (` name`, ` name=value`, ` name="value"`), mirroring the
117
125
  * tokenizer's end-of-attribute rule (`valueEnd + 1` past the closing quote).
118
- * @param {import("./syntax").HtmlPath} path walk path (used only for attribute-ref reads)
126
+ * @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
119
127
  * @param {string} source HTML source
120
- * @param {import("./syntax").HtmlAttributeRef} attr attribute ref
128
+ * @param {import("./syntax-parser").HtmlAttributeRef} attr attribute ref
121
129
  * @returns {string} the attribute's source slice
122
130
  */
123
131
  const attrSourceSpan = (path, source, attr) => {
124
- const valueStart = path.attributeValueStart(attr);
125
- const valueEnd = path.attributeValueEnd(attr);
132
+ const valueStart = path.startOf(Part.value, attr);
133
+ const valueEnd = path.endOf(Part.value, attr);
126
134
  const end =
127
135
  valueStart === -1
128
- ? path.attributeNameEnd(attr)
136
+ ? path.endOf(Part.name, attr)
129
137
  : source.charCodeAt(valueStart - 1) === CC_QUOTATION ||
130
138
  source.charCodeAt(valueStart - 1) === CC_APOSTROPHE
131
139
  ? valueEnd + 1
132
140
  : valueEnd;
133
- return source.slice(path.attributeNameStart(attr) - 1, end);
141
+ return source.slice(path.startOf(Part.name, attr) - 1, end);
134
142
  };
135
143
 
136
144
  /**
137
145
  * Source span of a tag's `integrity` attribute (offsets relative to
138
146
  * `elementStart`, leading whitespace and quotes included), so the template can
139
147
  * drop the content-specific author value without re-parsing. Null when absent.
140
- * @param {import("./syntax").HtmlPath} path walk path (for attribute reads)
148
+ * @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
141
149
  * @param {string} source HTML source
142
150
  * @param {number} elementStart offset of the tag's opening `<`
143
151
  * @returns {Range | null} the span, or null when there is no `integrity`
144
152
  */
145
153
  const captureIntegrityRange = (path, source, elementStart) => {
146
- const integrityAttr = path.findAttribute("integrity");
147
- if (integrityAttr === 0 || path.attributeNameStart(integrityAttr) < 0) {
154
+ const integrityAttr = path.fieldNamed(Field.attributes, "integrity");
155
+ if (integrityAttr === 0 || path.startOf(Part.name, integrityAttr) < 0) {
148
156
  return null;
149
157
  }
150
- let rs = path.attributeNameStart(integrityAttr);
158
+ let rs = path.startOf(Part.name, integrityAttr);
151
159
  while (rs > 0 && isAsciiWhitespace(source.charCodeAt(rs - 1))) {
152
160
  rs--;
153
161
  }
154
162
  let re;
155
- const ivs = path.attributeValueStart(integrityAttr);
163
+ const ivs = path.startOf(Part.value, integrityAttr);
156
164
  if (ivs === -1) {
157
- re = path.attributeNameEnd(integrityAttr);
165
+ re = path.endOf(Part.name, integrityAttr);
158
166
  } else {
159
167
  const q = source.charCodeAt(ivs - 1);
160
- const ive = path.attributeValueEnd(integrityAttr);
168
+ const ive = path.endOf(Part.value, integrityAttr);
161
169
  re = q === CC_QUOTATION || q === CC_APOSTROPHE ? ive + 1 : ive;
162
170
  }
163
171
  return [rs - elementStart, re - elementStart];
164
172
  };
165
173
 
174
+ /**
175
+ * Whether a span holds nothing a script body could have read — whitespace and
176
+ * comments only. Scanned rather than matched: the pattern for it backtracks.
177
+ * @param {string} source HTML source
178
+ * @param {number} start offset the span starts at
179
+ * @param {number} end offset the span ends at
180
+ * @returns {boolean} true when no node of the span reaches the DOM
181
+ */
182
+ const isEmptyRunGap = (source, start, end) => {
183
+ let offset = start;
184
+ while (offset < end) {
185
+ if (isAsciiWhitespace(source.charCodeAt(offset))) {
186
+ offset++;
187
+ continue;
188
+ }
189
+ if (!source.startsWith("<!--", offset)) return false;
190
+ const close = source.indexOf("-->", offset + 4);
191
+ if (close === -1 || close + 3 > end) return false;
192
+ offset = close + 3;
193
+ }
194
+ return true;
195
+ };
196
+
197
+ // What an entry name keeps from a page's path. The mapping is reversible, so
198
+ // two pages of one compilation can never sanitize to the same name.
199
+ const ENTRY_NAME_KEPT_REGEXP = /[^\w.]/g;
200
+ const ENTRY_NAME_EXTENSION_REGEXP = /\.[^./\\]*$/;
201
+ const ENTRY_NAME_TRIM_REGEXP = /^[-.]+|[-.]+$/g;
202
+
203
+ /**
204
+ * Names the entries a page's tags are extracted under, after the page itself.
205
+ * A `data:` document has no path to be named after, so it keeps a digest of
206
+ * the one thing that tells it from another such document.
207
+ * @param {string} pagePath the page's path, relative to the compiler context
208
+ * @param {import("../util/Hash").HashFunction | undefined} hashFunction `output.hashFunction`
209
+ * @returns {string} the prefix every entry name of this page starts with
210
+ */
211
+ const entryNamePrefix = (pagePath, hashFunction) => {
212
+ if (pagePath.startsWith("data:")) {
213
+ const digest = createHash(hashFunction || "md4")
214
+ .update(pagePath)
215
+ .digest("hex")
216
+ .slice(0, 8);
217
+ return `data-${digest}`;
218
+ }
219
+ return pagePath
220
+ .replace(ENTRY_NAME_EXTENSION_REGEXP, "")
221
+ .replace(ENTRY_NAME_KEPT_REGEXP, (character) => {
222
+ if (character === "-") return "--";
223
+ if (character === "/" || character === "\\") return "-";
224
+ return `_${character.charCodeAt(0).toString(16)}_`;
225
+ })
226
+ .replace(ENTRY_NAME_TRIM_REGEXP, "");
227
+ };
228
+
229
+ /**
230
+ * @typedef {object} HtmlChunkNameData
231
+ * @property {string} page the page's path, escaped for use in a name
232
+ * @property {string} name the tag's own basename, empty for an inline body
233
+ * @property {number} index the tag's position in the page, across all kinds
234
+ * @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type what the tag is extracted as
235
+ */
236
+
237
+ /** @typedef {(data: HtmlChunkNameData) => string} HtmlChunkNameFn */
238
+
239
+ const CHUNK_NAME_PLACEHOLDER_REGEXP = /\[(page|name|index|type)\]/g;
240
+
241
+ /**
242
+ * End offset of a raw-text element, its closing tag included. `contentEnd`
243
+ * sits at the `</` that ended the body, and at the body's end without one.
244
+ * @param {string} source HTML source
245
+ * @param {number} contentEnd end offset of the element's raw text
246
+ * @returns {number} offset just past the element
247
+ */
248
+ const rawTextElementEnd = (source, contentEnd) => {
249
+ const close = source.startsWith("</", contentEnd)
250
+ ? source.indexOf(">", contentEnd)
251
+ : -1;
252
+ return close === -1 ? contentEnd : close + 1;
253
+ };
254
+
166
255
  /**
167
256
  * @param {Map<string, string>} attributes attributes
168
257
  * @param {string} name name
@@ -348,8 +437,8 @@ const isLinkStylesheet = (attributes) => {
348
437
  /** @typedef {SourceType | ((attrs: Map<string, string>, css: boolean) => SourceType)} SourceTypeOrResolver */
349
438
  /** @typedef {(attributes: Map<string, string>, value: string) => boolean} SourceFilter */
350
439
  /** @typedef {{ tag?: string, attribute: string, type: SourceType, filter?: SourceFilter }} SourceEntry */
351
- /** A `type` plus optional gates: `filter` (the decoded attribute map + the decoded value; return false to skip — covers both cross-attribute checks and cheap value checks) and `namespace` (restrict to an element namespace, e.g. SVG). */
352
- /** @typedef {{ type: SourceTypeOrResolver, filter?: SourceFilter, namespace?: number }} SourceItem */
440
+ /** A `type` plus optional gates: `filter` (the decoded attribute map + the decoded value; return false to skip — covers both cross-attribute checks and cheap value checks) and `namespace` (restrict to an element namespace, by its `Flag`, e.g. SVG). */
441
+ /** @typedef {{ type: SourceTypeOrResolver, filter?: SourceFilter, namespace?: typeof Flag.svg | typeof Flag.mathml }} SourceItem */
353
442
  /** A tag→attribute lookup; a `undefined` value marks a built-in source disabled via `sources` (`type: false`). */
354
443
  /** @typedef {Record<string, SourceItem | undefined>} SourceBucket */
355
444
  /** @typedef {Record<string, SourceBucket>} SourceTable */
@@ -364,8 +453,9 @@ const isLinkStylesheet = (attributes) => {
364
453
  * `constructor`, or `toString` resolve to inherited values at lookup
365
454
  * time — producing bogus dependencies and letting `sources: false` be
366
455
  * bypassed.
367
- * @param {...(Record<string, EXPECTED_ANY> | undefined)} bags property bags
368
- * @returns {EXPECTED_ANY} null-prototype dictionary
456
+ * @template T
457
+ * @param {...(Record<string, T> | undefined)} bags property bags
458
+ * @returns {Record<string, T>} null-prototype dictionary
369
459
  */
370
460
  const dict = (...bags) => Object.assign(Object.create(null), ...bags);
371
461
 
@@ -520,7 +610,7 @@ const DEFAULT_SOURCES_BY_TAG = dict({
520
610
  const SVG_CSS_URL = {
521
611
  type: "css-url",
522
612
  filter: (attributes, value) => FUNC_IRI_URL_REGEXP.test(value),
523
- namespace: NS_SVG
613
+ namespace: Flag.svg
524
614
  };
525
615
 
526
616
  // The global `style=""` attribute, available on every tag and even under
@@ -627,6 +717,9 @@ const CONTENT_SOURCES = dict({
627
717
  style: { type: "stylesheet-style", filter: styleContentFilter }
628
718
  });
629
719
 
720
+ /**
721
+ * @extends {Parser<BuiltHtmlModule>}
722
+ */
630
723
  class HtmlParser extends Parser {
631
724
  /**
632
725
  * Creates an instance of HtmlParser.
@@ -644,6 +737,8 @@ class HtmlParser extends Parser {
644
737
  // `as` selects the parse mode: `"document"` parses a full page, any other
645
738
  // value names the context element whose inner HTML this is, so that a
646
739
  // partial's `<tr>`, `<td>` or `<option>` is kept rather than dropped.
740
+ /** @type {string | HtmlChunkNameFn | undefined} */
741
+ this._chunkName = options.chunkName;
647
742
  /** @type {string | undefined} */
648
743
  this.fragmentContext =
649
744
  options.as === undefined || options.as === "document"
@@ -710,14 +805,14 @@ class HtmlParser extends Parser {
710
805
  * dependency offsets against it) and the generator (which renders from
711
806
  * `module.originalSource()`) stay in agreement.
712
807
  * @param {string | Buffer} source the original source
713
- * @param {NormalModule} module the html module
808
+ * @param {HtmlNormalModule} module the html module
714
809
  * @returns {string | Buffer} the transformed source
715
810
  */
716
811
  applyTemplate(source, module) {
717
812
  if (!this.template) return source;
718
813
  // `processResult` runs after `_doBuild` has initialized these
719
814
  // dependency sets, so they are always present here.
720
- const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
815
+ const { buildInfo } = /** @type {BuiltHtmlModule} */ (module);
721
816
  const fileDependencies = /** @type {FileSystemDependencies} */ (
722
817
  buildInfo.fileDependencies
723
818
  );
@@ -783,23 +878,21 @@ class HtmlParser extends Parser {
783
878
 
784
879
  const locConverter = new LocConverter(source);
785
880
 
786
- const module = state.module;
881
+ const module = /** @type {BuiltHtmlModule} */ (state.module);
787
882
  const compilation = state.compilation;
788
883
  const { hashFunction, module: outputModule } = compilation.outputOptions;
789
884
  const context = compilation.compiler.context;
790
885
  const css = Boolean(compilation.options.experiments.css);
791
886
  const urlHints = this._urlHints;
792
887
 
793
- // Per-module prefix keeping generated entry names from colliding across the
794
- // HTML modules of one compilation. It hashes `module.resource` rather than
795
- // `identifier()`, whose `html|` prefix `contextify` would leave absolute.
888
+ // An entry name starts with the page's own path, so two pages never claim
889
+ // one — from `resource`, since `identifier()` is `html|<path>`.
796
890
  /** @type {string} */
797
- const resource =
798
- /** @type {EXPECTED_ANY} */ (module).resource || module.identifier();
799
- const moduleHash = createHash(hashFunction || "md4")
800
- .update(context ? contextify(context, resource) : resource)
801
- .digest("hex")
802
- .slice(0, 8);
891
+ const resource = module.resource || module.identifier();
892
+ const entryPrefix = entryNamePrefix(
893
+ context ? contextify(context, resource) : resource,
894
+ hashFunction
895
+ );
803
896
 
804
897
  // `output.html` head injection collects facts during the walk and turns
805
898
  // them into presentational dependencies after, so no later pass re-parses
@@ -816,6 +909,72 @@ class HtmlParser extends Parser {
816
909
  !resource.startsWith("data:")
817
910
  ? htmlOutputOptions
818
911
  : undefined;
912
+ const chunkNameOption = this._chunkName;
913
+ /** @type {Set<string>} */
914
+ const claimedEntryNames = new Set();
915
+ /** @type {Set<string>} */
916
+ const requestedEntryNames = new Set();
917
+
918
+ /**
919
+ * Claims `base`, counting up from the tag's own position while another tag
920
+ * of this page holds it: one name would merge entries the document parts.
921
+ * @param {string} base the name the tag asks for
922
+ * @param {number} index the tag's position in the page
923
+ * @returns {string} the name it claimed
924
+ */
925
+ const claimEntryName = (base, index) => {
926
+ let claimed = base;
927
+ for (let suffix = index; claimedEntryNames.has(claimed); suffix++) {
928
+ claimed = `${base}-${suffix}`;
929
+ }
930
+ claimedEntryNames.add(claimed);
931
+ return claimed;
932
+ };
933
+
934
+ /**
935
+ * The name a tag's extracted entry claims: what its own
936
+ * `webpackChunkName` comment asked for, else what
937
+ * `module.parser.html.chunkName` makes of it, else the page and the position.
938
+ * @param {string | undefined} requested name from the tag's magic comment
939
+ * @param {string} request the tag's request
940
+ * @param {number} index the tag's position in the page
941
+ * @param {HtmlChunkNameData["type"]} type what the tag is extracted as
942
+ * @returns {string} an entry name no other tag of this page claims
943
+ */
944
+ const entryNameFor = (requested, request, index, type) => {
945
+ let name = requested;
946
+ if (name === undefined && chunkNameOption !== undefined) {
947
+ const tagName = getRequestBaseName(request) || "";
948
+ name =
949
+ typeof chunkNameOption === "function"
950
+ ? chunkNameOption({ page: entryPrefix, name: tagName, index, type })
951
+ : chunkNameOption.replace(
952
+ CHUNK_NAME_PLACEHOLDER_REGEXP,
953
+ (_, placeholder) => {
954
+ if (placeholder === "page") return entryPrefix;
955
+ if (placeholder === "name") return tagName;
956
+ if (placeholder === "index") return `${index}`;
957
+ return type;
958
+ }
959
+ );
960
+ }
961
+ if (typeof name !== "string" || name === "") {
962
+ return claimEntryName(`${entryPrefix}-${index}`, index);
963
+ }
964
+ const claimed = claimEntryName(name, index);
965
+ requestedEntryNames.add(claimed);
966
+ return claimed;
967
+ };
968
+
969
+ /**
970
+ * The name a tag's file is emitted under when the page asked for one, so
971
+ * a named chunk is not left to be called after the tag's url.
972
+ * @param {string} entryName the entry name the tag claimed
973
+ * @returns {string | undefined} the asked-for name, else undefined
974
+ */
975
+ const requestedFileName = (entryName) =>
976
+ requestedEntryNames.has(entryName) ? entryName : undefined;
977
+
819
978
  let doctypeEnd = -1;
820
979
  let htmlTagEnd = -1;
821
980
  // insertion offsets just inside the (possibly implicit) head
@@ -845,6 +1004,7 @@ class HtmlParser extends Parser {
845
1004
  * @property {number} index position in the document, across all groups — the order the emitted files are named in
846
1005
  * @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type
847
1006
  * @property {boolean=} css entry emits a CSS chunk (`<link rel="preload" as="style">`), so it needs the CSS filename template
1007
+ * @property {string=} chunkName name the page asked this tag's chunk to claim, which names its file too
848
1008
  */
849
1009
  /** @type {HtmlEntryInfo[]} */
850
1010
  const scriptEntries = [];
@@ -872,6 +1032,20 @@ class HtmlParser extends Parser {
872
1032
  let firstBlockingScriptStart = -1;
873
1033
 
874
1034
  let nextEntryIndex = 0;
1035
+ // One chunk per run of inline `<script>`: under module output every
1036
+ // extracted tag is deferred, so only what executes between them matters.
1037
+ /** @type {string | undefined} */
1038
+ let inlineRunEntryName;
1039
+ // Element offset of the run's last member — any other `<script>` ends it.
1040
+ let inlineRunTag = -1;
1041
+ // End offset of that member, for the gap a classic run may not span.
1042
+ let inlineRunEnd = -1;
1043
+ // How the run's tags are scheduled, which a member has to share.
1044
+ /** @type {string | undefined} */
1045
+ let inlineRunScheduling;
1046
+ // The run's first tag, which carries the chunk and so the inline request.
1047
+ /** @type {HtmlInlineScriptDependency | undefined} */
1048
+ let inlineRunLeaderDependency;
875
1049
 
876
1050
  // WHY: `<base href>` resolves the relative URLs that follow it. A relative base
877
1051
  // (`./assets/`) rewrites them into a subdirectory and they stay bundled; a
@@ -898,6 +1072,12 @@ class HtmlParser extends Parser {
898
1072
  let pendingWebpackIgnore;
899
1073
  /** @type {boolean | undefined} */
900
1074
  let pendingWebpackInline;
1075
+ /**
1076
+ * The name the most recent comment asked the next tag's chunk to claim,
1077
+ * cleared the same way as the flags above.
1078
+ * @type {string | undefined}
1079
+ */
1080
+ let pendingWebpackChunkName;
901
1081
  /**
902
1082
  * Tracks the resource-hint values from the most recent `<!-- webpackPrefetch: … -->`
903
1083
  * (etc.) comment so the next asset URL attribute picks them up.
@@ -908,16 +1088,16 @@ class HtmlParser extends Parser {
908
1088
  const magicCommentContext = this.magicCommentContext;
909
1089
 
910
1090
  /**
911
- * @param {import("./syntax").HtmlPath} path walk path (used only for attribute-ref reads)
912
- * @param {import("./syntax").HtmlAttributeRef} typeAttr type attribute ref (0 = none)
1091
+ * @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
1092
+ * @param {import("./syntax-parser").HtmlAttributeRef} typeAttr type attribute ref (0 = none)
913
1093
  * @param {number} nameEnd end offset of the tag name
914
1094
  * @param {string} type type of the script
915
1095
  * @param {string} input source string
916
1096
  */
917
1097
  const reconcileScriptTypeAttr = (path, typeAttr, nameEnd, type, input) => {
918
1098
  const valueStart =
919
- typeAttr !== 0 ? path.attributeValueStart(typeAttr) : -1;
920
- const valueEnd = typeAttr !== 0 ? path.attributeValueEnd(typeAttr) : -1;
1099
+ typeAttr !== 0 ? path.startOf(Part.value, typeAttr) : -1;
1100
+ const valueEnd = typeAttr !== 0 ? path.endOf(Part.value, typeAttr) : -1;
921
1101
  if (outputModule && type === "script") {
922
1102
  // Chunk is an ES module; upgrade the tag.
923
1103
  if (typeAttr !== 0 && valueStart !== -1) {
@@ -934,13 +1114,13 @@ class HtmlParser extends Parser {
934
1114
  // browser doesn't load it under module semantics.
935
1115
  let attrEnd;
936
1116
  if (valueStart === -1) {
937
- attrEnd = path.attributeNameEnd(typeAttr);
1117
+ attrEnd = path.endOf(Part.name, typeAttr);
938
1118
  } else if (input[valueEnd] === '"' || input[valueEnd] === "'") {
939
1119
  attrEnd = valueEnd + 1;
940
1120
  } else {
941
1121
  attrEnd = valueEnd;
942
1122
  }
943
- let attrStart = path.attributeNameStart(typeAttr);
1123
+ let attrStart = path.startOf(Part.name, typeAttr);
944
1124
  if (
945
1125
  attrStart > 0 &&
946
1126
  isAsciiWhitespace(input.charCodeAt(attrStart - 1))
@@ -976,11 +1156,11 @@ class HtmlParser extends Parser {
976
1156
  * Classifies the first `<base href>` seen in the walk, setting
977
1157
  * `documentBase`/`baseDir`/`baseIsExternal`/`baseUrlPrefix` for the URLs
978
1158
  * that follow it.
979
- * @param {import("./syntax").HtmlPath} path walk path (for attribute reads)
980
- * @param {import("./syntax").HtmlAttributeRef} hrefAttr the base's href attribute
1159
+ * @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
1160
+ * @param {import("./syntax-parser").HtmlAttributeRef} hrefAttr the base's href attribute
981
1161
  */
982
1162
  const resolveDocumentBase = (path, hrefAttr) => {
983
- documentBase = decodeEntities(path.attributeValue(hrefAttr), true).trim();
1163
+ documentBase = path.value(hrefAttr).trim();
984
1164
  if (!documentBase) return;
985
1165
  if (
986
1166
  ABSOLUTE_URL_SCHEME_REGEXP.test(documentBase) ||
@@ -1019,7 +1199,7 @@ class HtmlParser extends Parser {
1019
1199
 
1020
1200
  // Lazy decoded-attribute map for the current element — parse-scoped
1021
1201
  // to avoid a closure and memo slot per element.
1022
- /** @type {import("./syntax").HtmlPath | undefined} */
1202
+ /** @type {import("./syntax-parser").HtmlPath | undefined} */
1023
1203
  let attrMapPath;
1024
1204
  let attrMapCount = 0;
1025
1205
  /** @type {Map<string, string> | undefined} */
@@ -1027,15 +1207,14 @@ class HtmlParser extends Parser {
1027
1207
  const getAttributesMap = () => {
1028
1208
  if (currentAttributesMap) return currentAttributesMap;
1029
1209
  currentAttributesMap = new Map();
1030
- const path = /** @type {import("./syntax").HtmlPath} */ (attrMapPath);
1210
+ const path = /** @type {import("./syntax-parser").HtmlPath} */ (
1211
+ attrMapPath
1212
+ );
1031
1213
  for (let i = 0; i < attrMapCount; i++) {
1032
- const attr = path.attributeAt(i);
1214
+ const attr = path.field(i, Field.attributes);
1033
1215
  // Decoded values — filters and type resolvers compare what
1034
1216
  // the browser sees (e.g. `rel="&#105;con"` means `icon`)
1035
- currentAttributesMap.set(
1036
- path.attributeName(attr),
1037
- decodeEntities(path.attributeValue(attr), true)
1038
- );
1217
+ currentAttributesMap.set(path.name(attr), path.value(attr));
1039
1218
  }
1040
1219
  return currentAttributesMap;
1041
1220
  };
@@ -1046,8 +1225,8 @@ class HtmlParser extends Parser {
1046
1225
  new SourceProcessor()
1047
1226
  .use({
1048
1227
  [NodeType.Comment]: (path) => {
1049
- const start = path.start();
1050
- const end = path.end();
1228
+ const start = path.start(path.node);
1229
+ const end = path.end(path.node);
1051
1230
  // comments count toward the head-end insertion anchor
1052
1231
  if (inHead && headTemplateDepth === 0 && end > headLastEnd) {
1053
1232
  headLastEnd = end;
@@ -1065,17 +1244,19 @@ class HtmlParser extends Parser {
1065
1244
  ) {
1066
1245
  pendingWebpackIgnore = undefined;
1067
1246
  pendingWebpackInline = undefined;
1247
+ pendingWebpackChunkName = undefined;
1068
1248
  pendingHints = undefined;
1069
1249
  return;
1070
1250
  }
1071
- const value = path.data();
1251
+ const value = path.value();
1072
1252
  if (!webpackCommentRegExp.test(value)) {
1073
1253
  pendingWebpackIgnore = undefined;
1074
1254
  pendingWebpackInline = undefined;
1255
+ pendingWebpackChunkName = undefined;
1075
1256
  pendingHints = undefined;
1076
1257
  return;
1077
1258
  }
1078
- /** @type {Record<string, EXPECTED_ANY>} */
1259
+ /** @type {MagicCommentOptions} */
1079
1260
  let options;
1080
1261
  try {
1081
1262
  options = parseMagicComment(value, magicCommentContext);
@@ -1095,18 +1276,21 @@ class HtmlParser extends Parser {
1095
1276
  );
1096
1277
  pendingWebpackIgnore = undefined;
1097
1278
  pendingWebpackInline = undefined;
1279
+ pendingWebpackChunkName = undefined;
1098
1280
  pendingHints = undefined;
1099
1281
  return;
1100
1282
  }
1101
1283
  if (
1102
1284
  options.webpackIgnore === undefined &&
1103
1285
  options.webpackInline === undefined &&
1286
+ options.webpackChunkName === undefined &&
1104
1287
  options.webpackPrefetch === undefined &&
1105
1288
  options.webpackPreload === undefined &&
1106
1289
  options.webpackFetchPriority === undefined
1107
1290
  ) {
1108
1291
  pendingWebpackIgnore = undefined;
1109
1292
  pendingWebpackInline = undefined;
1293
+ pendingWebpackChunkName = undefined;
1110
1294
  pendingHints = undefined;
1111
1295
  return;
1112
1296
  }
@@ -1127,6 +1311,7 @@ class HtmlParser extends Parser {
1127
1311
  );
1128
1312
  pendingWebpackIgnore = undefined;
1129
1313
  pendingWebpackInline = undefined;
1314
+ pendingWebpackChunkName = undefined;
1130
1315
  pendingHints = undefined;
1131
1316
  return;
1132
1317
  }
@@ -1147,11 +1332,35 @@ class HtmlParser extends Parser {
1147
1332
  );
1148
1333
  pendingWebpackIgnore = undefined;
1149
1334
  pendingWebpackInline = undefined;
1335
+ pendingWebpackChunkName = undefined;
1336
+ pendingHints = undefined;
1337
+ return;
1338
+ }
1339
+ if (
1340
+ options.webpackChunkName !== undefined &&
1341
+ (typeof options.webpackChunkName !== "string" ||
1342
+ options.webpackChunkName === "")
1343
+ ) {
1344
+ const { line: sl, column: sc } = locConverter.get(start);
1345
+ const { line: el, column: ec } = locConverter.get(end);
1346
+ module.addWarning(
1347
+ new (getUnsupportedFeatureWarning())(
1348
+ `\`webpackChunkName\` expected a non-empty string, but received: ${options.webpackChunkName}.`,
1349
+ {
1350
+ start: { line: sl, column: sc },
1351
+ end: { line: el, column: ec }
1352
+ }
1353
+ )
1354
+ );
1355
+ pendingWebpackIgnore = undefined;
1356
+ pendingWebpackInline = undefined;
1357
+ pendingWebpackChunkName = undefined;
1150
1358
  pendingHints = undefined;
1151
1359
  return;
1152
1360
  }
1153
1361
  pendingWebpackIgnore = options.webpackIgnore;
1154
1362
  pendingWebpackInline = options.webpackInline;
1363
+ pendingWebpackChunkName = options.webpackChunkName;
1155
1364
  if (
1156
1365
  options.webpackPrefetch !== undefined ||
1157
1366
  options.webpackPreload !== undefined ||
@@ -1175,9 +1384,10 @@ class HtmlParser extends Parser {
1175
1384
  },
1176
1385
  [NodeType.Doctype]: (path) => {
1177
1386
  // only visited when head injection is active (see `skip` below)
1178
- if (doctypeEnd === -1) doctypeEnd = path.end();
1387
+ if (doctypeEnd === -1) doctypeEnd = path.end(path.node);
1179
1388
  pendingWebpackIgnore = undefined;
1180
1389
  pendingWebpackInline = undefined;
1390
+ pendingWebpackChunkName = undefined;
1181
1391
  pendingHints = undefined;
1182
1392
  },
1183
1393
  [NodeType.Element]: {
@@ -1187,23 +1397,25 @@ class HtmlParser extends Parser {
1187
1397
  enter: (path) => {
1188
1398
  const ignore = pendingWebpackIgnore === true;
1189
1399
  const forceInline = pendingWebpackInline === true;
1400
+ const chunkName = pendingWebpackChunkName;
1190
1401
  pendingWebpackIgnore = undefined;
1191
1402
  pendingWebpackInline = undefined;
1403
+ pendingWebpackChunkName = undefined;
1192
1404
 
1193
1405
  // `<head>` anchors are collected for every page, since they place
1194
1406
  // `inject: "head"` siblings and resource hints. Structural, so this
1195
1407
  // runs even for `webpackIgnore`d elements.
1196
1408
  {
1197
- const name = path.tagName();
1198
- if (name === "template" && path.namespace() === NS_HTML) {
1409
+ const name = path.name();
1410
+ if (name === "template" && isHtmlElement(path)) {
1199
1411
  templateDepth++;
1200
1412
  }
1201
1413
  if (headTemplateDepth > 0) {
1202
- if (name === "template" && path.namespace() === NS_HTML) {
1414
+ if (name === "template" && isHtmlElement(path)) {
1203
1415
  headTemplateDepth++;
1204
1416
  }
1205
1417
  } else if (inHead) {
1206
- if (headOptions !== undefined && path.namespace() === NS_HTML) {
1418
+ if (headOptions !== undefined && isHtmlElement(path)) {
1207
1419
  switch (name) {
1208
1420
  case "title":
1209
1421
  headHasTitle = true;
@@ -1212,50 +1424,48 @@ class HtmlParser extends Parser {
1212
1424
  headHasBase = true;
1213
1425
  break;
1214
1426
  case "meta": {
1215
- if (path.findAttribute("charset") !== 0) {
1216
- headCharsetEnd = path.tagEnd();
1427
+ if (path.fieldNamed(Field.attributes, "charset") !== 0) {
1428
+ headCharsetEnd = path.startOf(Part.content, path.node);
1217
1429
  } else {
1218
- const httpEquiv = path.findAttribute("http-equiv");
1430
+ const httpEquiv = path.fieldNamed(
1431
+ Field.attributes,
1432
+ "http-equiv"
1433
+ );
1219
1434
  const contentAttr =
1220
1435
  httpEquiv !== 0 &&
1221
- decodeEntities(
1222
- path.attributeValue(httpEquiv),
1223
- true
1224
- ).toLowerCase() === "content-type"
1225
- ? path.findAttribute("content")
1436
+ path.value(httpEquiv).toLowerCase() === "content-type"
1437
+ ? path.fieldNamed(Field.attributes, "content")
1226
1438
  : 0;
1227
1439
  if (
1228
1440
  contentAttr !== 0 &&
1229
1441
  CHARSET_DECLARATION_REGEXP.test(
1230
- decodeEntities(
1231
- path.attributeValue(contentAttr),
1232
- true
1233
- )
1442
+ path.value(contentAttr)
1234
1443
  )
1235
1444
  ) {
1236
- headCharsetEnd = path.tagEnd();
1445
+ headCharsetEnd = path.startOf(
1446
+ Part.content,
1447
+ path.node
1448
+ );
1237
1449
  }
1238
1450
  }
1239
- const nameAttr = path.findAttribute("name");
1240
- const propertyAttr = path.findAttribute("property");
1451
+ const nameAttr = path.fieldNamed(
1452
+ Field.attributes,
1453
+ "name"
1454
+ );
1455
+ const propertyAttr = path.fieldNamed(
1456
+ Field.attributes,
1457
+ "property"
1458
+ );
1241
1459
  if (nameAttr !== 0 || propertyAttr !== 0) {
1242
1460
  if (headMetaNames === undefined) {
1243
1461
  headMetaNames = new Set();
1244
1462
  }
1245
1463
  if (nameAttr !== 0) {
1246
- headMetaNames.add(
1247
- decodeEntities(
1248
- path.attributeValue(nameAttr),
1249
- true
1250
- ).toLowerCase()
1251
- );
1464
+ headMetaNames.add(path.value(nameAttr).toLowerCase());
1252
1465
  }
1253
1466
  if (propertyAttr !== 0) {
1254
1467
  headMetaNames.add(
1255
- decodeEntities(
1256
- path.attributeValue(propertyAttr),
1257
- true
1258
- ).toLowerCase()
1468
+ path.value(propertyAttr).toLowerCase()
1259
1469
  );
1260
1470
  }
1261
1471
  }
@@ -1265,23 +1475,22 @@ class HtmlParser extends Parser {
1265
1475
  headTemplateDepth++;
1266
1476
  break;
1267
1477
  }
1268
- } else if (
1269
- name === "template" &&
1270
- path.namespace() === NS_HTML
1271
- ) {
1478
+ } else if (name === "template" && isHtmlElement(path)) {
1272
1479
  headTemplateDepth++;
1273
1480
  }
1274
- if (path.end() > headLastEnd) headLastEnd = path.end();
1275
- } else if (!headSeen && path.namespace() === NS_HTML) {
1481
+ if (path.end(path.node) > headLastEnd) {
1482
+ headLastEnd = path.end(path.node);
1483
+ }
1484
+ } else if (!headSeen && isHtmlElement(path)) {
1276
1485
  if (name === "html") {
1277
- htmlTagEnd = path.tagEnd();
1486
+ htmlTagEnd = path.startOf(Part.content, path.node);
1278
1487
  } else if (name === "head") {
1279
1488
  headSeen = true;
1280
1489
  inHead = true;
1281
1490
  // explicit head has real offsets; an implicit one (head
1282
1491
  // tags are optional in HTML5) anchors after `<html>`,
1283
1492
  // the doctype, or the document start
1284
- const tagEnd = path.tagEnd();
1493
+ const tagEnd = path.startOf(Part.content, path.node);
1285
1494
  headStart =
1286
1495
  tagEnd > 0
1287
1496
  ? tagEnd
@@ -1296,14 +1505,21 @@ class HtmlParser extends Parser {
1296
1505
  }
1297
1506
 
1298
1507
  if (ignore) {
1508
+ // It stays in the document and runs where it stands, so a run
1509
+ // may not span it either.
1510
+ if (path.name() === "script") {
1511
+ inlineRunEntryName = undefined;
1512
+ inlineRunLeaderDependency = undefined;
1513
+ inlineRunScheduling = undefined;
1514
+ }
1299
1515
  return;
1300
1516
  }
1301
1517
 
1302
- const elementName = path.tagName();
1303
- const attributeCount = path.attributeCount();
1304
- const elementStart = path.start();
1305
- const tagEnd = path.tagEnd();
1306
- const nameEnd = path.nameEnd();
1518
+ const elementName = path.name();
1519
+ const attributeCount = path.fieldCount(Field.attributes);
1520
+ const elementStart = path.start(path.node);
1521
+ const tagEnd = path.startOf(Part.content, path.node);
1522
+ const nameEnd = path.endOf(Part.name, path.node);
1307
1523
 
1308
1524
  // The first `<base href>` freezes the base for later URLs — but
1309
1525
  // only one in the real document tree, not inside an inert
@@ -1312,9 +1528,9 @@ class HtmlParser extends Parser {
1312
1528
  documentBase === undefined &&
1313
1529
  templateDepth === 0 &&
1314
1530
  elementName === "base" &&
1315
- path.namespace() === NS_HTML
1531
+ isHtmlElement(path)
1316
1532
  ) {
1317
- const hrefAttr = path.findAttribute("href");
1533
+ const hrefAttr = path.fieldNamed(Field.attributes, "href");
1318
1534
  if (hrefAttr !== 0) resolveDocumentBase(path, hrefAttr);
1319
1535
  }
1320
1536
 
@@ -1342,7 +1558,7 @@ class HtmlParser extends Parser {
1342
1558
  let start;
1343
1559
  /** @type {number} */
1344
1560
  let end;
1345
- /** @type {import("./syntax").HtmlAttributeRef} */
1561
+ /** @type {import("./syntax-parser").HtmlAttributeRef} */
1346
1562
  let attr = 0;
1347
1563
  if (content) {
1348
1564
  if (!bodyItem) continue;
@@ -1352,7 +1568,7 @@ class HtmlParser extends Parser {
1352
1568
  // `skip.text` drops the body `Text` node; the raw content
1353
1569
  // span is [`tagEnd`, `contentEnd`] on the element.
1354
1570
  const bodyStart = tagEnd;
1355
- const bodyEnd = path.contentEnd();
1571
+ const bodyEnd = path.endOf(Part.content, path.node);
1356
1572
  if (bodyEnd <= bodyStart) continue;
1357
1573
  value = source.slice(bodyStart, bodyEnd);
1358
1574
  if (value.trim() === "") continue;
@@ -1363,20 +1579,19 @@ class HtmlParser extends Parser {
1363
1579
  ? bodyItem.type(getAttributesMap(), css)
1364
1580
  : bodyItem.type;
1365
1581
  } else {
1366
- attr = path.attributeAt(i);
1367
- const item = sources[path.attributeName(attr)];
1582
+ attr = path.field(i, Field.attributes);
1583
+ const item = sources[path.name(attr)];
1368
1584
  if (!item) continue;
1369
1585
  if (
1370
1586
  item.namespace !== undefined &&
1371
- path.namespace() !== item.namespace
1587
+ !path.flag(item.namespace)
1372
1588
  ) {
1373
1589
  continue;
1374
1590
  }
1375
1591
  // Adoption-agency clones carry no offsets; skip blank values.
1376
- if (path.attributeValueStart(attr) === -1) {
1377
- continue;
1378
- }
1379
- value = path.attributeValue(attr);
1592
+ const valueStart = path.startOf(Part.value, attr);
1593
+ if (valueStart === -1) continue;
1594
+ value = path.source(valueStart, path.endOf(Part.value, attr));
1380
1595
  if (!value || !/\S/.test(value)) continue;
1381
1596
  const filter = item.filter;
1382
1597
  if (filter) {
@@ -1387,8 +1602,8 @@ class HtmlParser extends Parser {
1387
1602
  : value;
1388
1603
  if (!filter(getAttributesMap(), decoded)) continue;
1389
1604
  }
1390
- start = path.attributeValueStart(attr);
1391
- end = path.attributeValueEnd(attr);
1605
+ start = valueStart;
1606
+ end = path.endOf(Part.value, attr);
1392
1607
  type =
1393
1608
  typeof item.type === "function"
1394
1609
  ? item.type(getAttributesMap(), css)
@@ -1397,19 +1612,35 @@ class HtmlParser extends Parser {
1397
1612
  // A resolved `type` selects the parse algorithm and the dependency
1398
1613
  // kind — the only dispatch in the parser.
1399
1614
  switch (type) {
1400
- // Inline CSS — a `<style>` body (raw, a full stylesheet) or an
1615
+ // Inline CSS — a `<style>` body (a full stylesheet) or an
1401
1616
  // attribute value (decoded, re-escaped on write-back; `*-attribute`
1402
1617
  // is a declaration list). Needs `experiments.css`.
1403
1618
  case "stylesheet-style":
1404
1619
  case "stylesheet-style-attribute": {
1405
1620
  if (!css) break;
1406
- const cssText = content ? value : decodeEntities(value, true);
1621
+ // WHY: an HTML `<style>` body is raw text, so its source is its
1622
+ // text. The same element in a foreign subtree holds character
1623
+ // data, where `&#x2e;a` is the selector `.a` — so the sheet has
1624
+ // to be decoded going in and escaped coming back out, which is
1625
+ // what `characterData` tells the write-back.
1626
+ const characterData = content && !isHtmlElement(path);
1627
+ // A page webpack emitted is one it can be pointed at again,
1628
+ // where a sheet arrives headed by the module the last build
1629
+ // read it as. That header was that build's; this writes its own.
1630
+ const cssText = ModuleInfoHeaderPlugin.stripHeaders(
1631
+ content
1632
+ ? characterData
1633
+ ? decodeEntities(value, false)
1634
+ : value
1635
+ : decodeEntities(value, true)
1636
+ );
1407
1637
  if (cssText.trim() === "") break;
1408
1638
  const dep = new HtmlInlineStyleDependency(
1409
1639
  dataUri("text/css", cssText),
1410
1640
  [start, end],
1411
1641
  content ? false : type === "stylesheet-style-attribute",
1412
- !content
1642
+ !content,
1643
+ characterData
1413
1644
  );
1414
1645
  setLoc(dep, start, end);
1415
1646
  module.addDependency(dep);
@@ -1445,25 +1676,101 @@ class HtmlParser extends Parser {
1445
1676
  if (content) {
1446
1677
  const scriptType =
1447
1678
  /** @type {"script" | "script-module"} */ (type);
1448
- const request = dataUri("text/javascript", value);
1679
+ // WHY: an HTML `<script>` body is raw text, so its source
1680
+ // is its text. The same element in a foreign subtree holds
1681
+ // character data, where a character reference stands for
1682
+ // what it names — `1 &lt; 2` is `1 < 2` there, but reads
1683
+ // as `1 & lt < 2` when taken as written. Character data
1684
+ // also decodes `&copy=1`, which an attribute keeps whole.
1685
+ const scriptText = isHtmlElement(path)
1686
+ ? value
1687
+ : decodeEntities(value, false);
1688
+ const request = dataUri("text/javascript", scriptText);
1449
1689
  const index = nextEntryIndex++;
1450
- const entryName = `__html_${moduleHash}_${index}`;
1690
+ // Module output upgrades a classic tag, so every extracted
1691
+ // tag defers; without it the authored kind parts the run.
1692
+ const scheduling = outputModule ? "deferred" : scriptType;
1693
+ // `async` fires whenever it loads and a `<template>` body never
1694
+ // does, so neither joins — and only a deferred run spans markup.
1695
+ const joinsRun =
1696
+ templateDepth === 0 &&
1697
+ path.fieldNamed(Field.attributes, "async") === 0 &&
1698
+ (outputModule ||
1699
+ inlineRunEntryName === undefined ||
1700
+ isEmptyRunGap(source, inlineRunEnd, elementStart));
1701
+ /** @type {Range | undefined} */
1702
+ let removeRange;
1703
+ /** @type {string} */
1704
+ let entryName;
1705
+ if (joinsRun) {
1706
+ // A tag the page named leads a run of its own rather than
1707
+ // joining one, so the name covers what follows it.
1708
+ if (
1709
+ chunkName !== undefined ||
1710
+ inlineRunEntryName === undefined ||
1711
+ inlineRunScheduling !== scheduling
1712
+ ) {
1713
+ entryName = entryNameFor(
1714
+ chunkName,
1715
+ request,
1716
+ index,
1717
+ scriptType
1718
+ );
1719
+ inlineRunEntryName = entryName;
1720
+ inlineRunScheduling = scheduling;
1721
+ } else {
1722
+ entryName = inlineRunEntryName;
1723
+ // The body rides in the run's chunk already, so the
1724
+ // element goes rather than gaining a `src`.
1725
+ removeRange = [
1726
+ elementStart,
1727
+ rawTextElementEnd(source, end)
1728
+ ];
1729
+ }
1730
+ inlineRunTag = elementStart;
1731
+ inlineRunEnd = rawTextElementEnd(source, end);
1732
+ } else {
1733
+ entryName = entryNameFor(
1734
+ chunkName,
1735
+ request,
1736
+ index,
1737
+ scriptType
1738
+ );
1739
+ }
1451
1740
  const dep = new HtmlInlineScriptDependency(
1452
1741
  request,
1453
1742
  nameEnd,
1454
1743
  [start, end],
1455
1744
  entryName,
1456
- scriptType === "script-module" ? "esm" : "commonjs"
1745
+ scriptType === "script-module" ? "esm" : "commonjs",
1746
+ removeRange,
1747
+ forceInline
1457
1748
  );
1749
+ if (joinsRun) {
1750
+ if (removeRange === undefined) {
1751
+ inlineRunLeaderDependency = dep;
1752
+ } else if (
1753
+ forceInline &&
1754
+ inlineRunLeaderDependency !== undefined
1755
+ ) {
1756
+ // A run is one chunk, so a tag asking to be written
1757
+ // into the page asks it of the whole run.
1758
+ inlineRunLeaderDependency.forceInline = true;
1759
+ }
1760
+ }
1458
1761
  setLoc(dep, start, end);
1459
1762
  module.addPresentationalDependency(dep);
1460
- reconcileScriptTypeAttr(
1461
- path,
1462
- path.findAttribute("type"),
1463
- nameEnd,
1464
- scriptType,
1465
- source
1466
- );
1763
+ // A dropped tag is not rewritten: an edit inside the
1764
+ // removed range would survive it as loose text.
1765
+ if (removeRange === undefined) {
1766
+ reconcileScriptTypeAttr(
1767
+ path,
1768
+ path.fieldNamed(Field.attributes, "type"),
1769
+ nameEnd,
1770
+ scriptType,
1771
+ source
1772
+ );
1773
+ }
1467
1774
  (scriptType === "script"
1468
1775
  ? scriptEntries
1469
1776
  : scriptModuleEntries
@@ -1471,7 +1778,8 @@ class HtmlParser extends Parser {
1471
1778
  request,
1472
1779
  entryName,
1473
1780
  index,
1474
- type: scriptType
1781
+ type: scriptType,
1782
+ chunkName: requestedFileName(entryName)
1475
1783
  });
1476
1784
  break;
1477
1785
  }
@@ -1514,7 +1822,7 @@ class HtmlParser extends Parser {
1514
1822
  new (getModuleDependencyError())(
1515
1823
  module,
1516
1824
  new WebpackError(
1517
- `Bad value for attribute "${path.attributeName(
1825
+ `Bad value for attribute "${path.name(
1518
1826
  attr
1519
1827
  )}" on element "${elementName}": ${
1520
1828
  /** @type {Error} */ (err).message
@@ -1551,7 +1859,12 @@ class HtmlParser extends Parser {
1551
1859
  // emitting no siblings. Independent, like an entry point.
1552
1860
  if (type === "html") {
1553
1861
  const index = nextEntryIndex++;
1554
- const entryName = `__html_${moduleHash}_${index}`;
1862
+ const entryName = entryNameFor(
1863
+ chunkName,
1864
+ request,
1865
+ index,
1866
+ "html"
1867
+ );
1555
1868
  const dep = new HtmlEntryDependency(
1556
1869
  request,
1557
1870
  [s, e],
@@ -1561,7 +1874,13 @@ class HtmlParser extends Parser {
1561
1874
  );
1562
1875
  setLoc(dep, s, e);
1563
1876
  module.addPresentationalDependency(dep);
1564
- htmlLinkEntries.push({ request, entryName, index, type });
1877
+ htmlLinkEntries.push({
1878
+ request,
1879
+ entryName,
1880
+ index,
1881
+ type,
1882
+ chunkName: requestedFileName(entryName)
1883
+ });
1565
1884
  continue;
1566
1885
  }
1567
1886
  // `rel="preload"/"prefetch"` of a bundled resource: an independent,
@@ -1573,7 +1892,12 @@ class HtmlParser extends Parser {
1573
1892
  ? as.trim().toLowerCase() === "style"
1574
1893
  : false;
1575
1894
  const index = nextEntryIndex++;
1576
- const entryName = `__html_${moduleHash}_${index}`;
1895
+ const entryName = entryNameFor(
1896
+ chunkName,
1897
+ request,
1898
+ index,
1899
+ type
1900
+ );
1577
1901
  // Tag metadata letting the template mirror `crossorigin` and
1578
1902
  // `integrity` onto a native `preload` `<link>`. `prefetch` is not
1579
1903
  // integrity-eligible per the SRI spec, so its is left uncaptured.
@@ -1589,7 +1913,9 @@ class HtmlParser extends Parser {
1589
1913
  isNativeLink,
1590
1914
  "",
1591
1915
  nameEnd,
1592
- isNativeLink && path.findAttribute("crossorigin") !== 0,
1916
+ isNativeLink &&
1917
+ path.fieldNamed(Field.attributes, "crossorigin") !==
1918
+ 0,
1593
1919
  -1,
1594
1920
  type === "preload" && isNativeLink
1595
1921
  ? captureIntegrityRange(path, source, elementStart)
@@ -1606,7 +1932,8 @@ class HtmlParser extends Parser {
1606
1932
  entryName,
1607
1933
  index,
1608
1934
  type,
1609
- css: asStyle
1935
+ css: asStyle,
1936
+ chunkName: requestedFileName(entryName)
1610
1937
  });
1611
1938
  continue;
1612
1939
  }
@@ -1620,7 +1947,12 @@ class HtmlParser extends Parser {
1620
1947
  type === "stylesheet"
1621
1948
  ) {
1622
1949
  const index = nextEntryIndex++;
1623
- const entryName = `__html_${moduleHash}_${index}`;
1950
+ const entryName = entryNameFor(
1951
+ chunkName,
1952
+ request,
1953
+ index,
1954
+ type
1955
+ );
1624
1956
  const willBeModuleScript =
1625
1957
  type === "script-module" ||
1626
1958
  (outputModule && type === "script");
@@ -1651,7 +1983,10 @@ class HtmlParser extends Parser {
1651
1983
  let hasOwnCrossOrigin = false;
1652
1984
  if (elementStart >= 0) {
1653
1985
  for (const copyableName of COPYABLE_SIBLING_ATTRS) {
1654
- const copyableAttr = path.findAttribute(copyableName);
1986
+ const copyableAttr = path.fieldNamed(
1987
+ Field.attributes,
1988
+ copyableName
1989
+ );
1655
1990
  if (copyableAttr !== 0) {
1656
1991
  copyableAttrsText += attrSourceSpan(
1657
1992
  path,
@@ -1672,8 +2007,8 @@ class HtmlParser extends Parser {
1672
2007
  (type === "script" || type === "script-module") &&
1673
2008
  !outputModule &&
1674
2009
  (elementName !== nativeTag ||
1675
- (path.findAttribute("defer") === 0 &&
1676
- path.findAttribute("async") === 0))
2010
+ (path.fieldNamed(Field.attributes, "defer") === 0 &&
2011
+ path.fieldNamed(Field.attributes, "async") === 0))
1677
2012
  ) {
1678
2013
  firstBlockingScriptStart = elementStart;
1679
2014
  }
@@ -1691,14 +2026,17 @@ class HtmlParser extends Parser {
1691
2026
  elementName === nativeTag &&
1692
2027
  elementKind === "script-module"
1693
2028
  ) {
1694
- const typeAttr = path.findAttribute("type");
2029
+ const typeAttr = path.fieldNamed(
2030
+ Field.attributes,
2031
+ "type"
2032
+ );
1695
2033
  if (
1696
2034
  typeAttr !== 0 &&
1697
- path.attributeValueStart(typeAttr) >= 0
2035
+ path.startOf(Part.value, typeAttr) >= 0
1698
2036
  ) {
1699
2037
  typeValueRange = [
1700
- path.attributeValueStart(typeAttr) - elementStart,
1701
- path.attributeValueEnd(typeAttr) - elementStart
2038
+ path.startOf(Part.value, typeAttr) - elementStart,
2039
+ path.endOf(Part.value, typeAttr) - elementStart
1702
2040
  ];
1703
2041
  }
1704
2042
  }
@@ -1729,7 +2067,7 @@ class HtmlParser extends Parser {
1729
2067
  ) {
1730
2068
  reconcileScriptTypeAttr(
1731
2069
  path,
1732
- path.findAttribute("type"),
2070
+ path.fieldNamed(Field.attributes, "type"),
1733
2071
  nameEnd,
1734
2072
  type,
1735
2073
  source
@@ -1742,7 +2080,13 @@ class HtmlParser extends Parser {
1742
2080
  : type === "stylesheet"
1743
2081
  ? stylesheetEntries
1744
2082
  : modulePreloadEntries
1745
- ).push({ request, entryName, index, type });
2083
+ ).push({
2084
+ request,
2085
+ entryName,
2086
+ index,
2087
+ type,
2088
+ chunkName: requestedFileName(entryName)
2089
+ });
1746
2090
  } else {
1747
2091
  const dep = new HtmlSourceDependency(request, [s, e]);
1748
2092
  ResourceHintPlugin.applyDefaults(
@@ -1764,10 +2108,17 @@ class HtmlParser extends Parser {
1764
2108
  }
1765
2109
  }
1766
2110
  }
2111
+ // A `<script>` that joined no run ends the open one: the chunk runs
2112
+ // where its first tag stands, so nothing may execute in between.
2113
+ if (elementName === "script" && inlineRunTag !== elementStart) {
2114
+ inlineRunEntryName = undefined;
2115
+ inlineRunLeaderDependency = undefined;
2116
+ inlineRunScheduling = undefined;
2117
+ }
1767
2118
  },
1768
2119
  exit: (path) => {
1769
- if (path.namespace() === NS_HTML) {
1770
- const name = path.tagName();
2120
+ if (isHtmlElement(path)) {
2121
+ const name = path.name();
1771
2122
  if (name === "template") {
1772
2123
  if (templateDepth > 0) templateDepth--;
1773
2124
  if (headTemplateDepth > 0) headTemplateDepth--;
@@ -1777,6 +2128,7 @@ class HtmlParser extends Parser {
1777
2128
  }
1778
2129
  pendingWebpackIgnore = undefined;
1779
2130
  pendingWebpackInline = undefined;
2131
+ pendingWebpackChunkName = undefined;
1780
2132
  pendingHints = undefined;
1781
2133
  }
1782
2134
  }
@@ -1835,7 +2187,7 @@ class HtmlParser extends Parser {
1835
2187
  }
1836
2188
  }
1837
2189
 
1838
- const buildInfo = /** @type {HtmlModuleBuildInfo} */ (module.buildInfo);
2190
+ const buildInfo = module.buildInfo;
1839
2191
  buildInfo.strict = true;
1840
2192
  if (baseUrlPrefix !== undefined) buildInfo.baseUrlPrefix = baseUrlPrefix;
1841
2193
  // WHY: hand the collected entries to HtmlModulesPlugin, which creates the
@@ -1864,8 +2216,7 @@ class HtmlParser extends Parser {
1864
2216
  };
1865
2217
  }
1866
2218
 
1867
- const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
1868
- buildMeta.exportsType = "default";
2219
+ module.buildMeta.exportsType = "default";
1869
2220
 
1870
2221
  state.module.addDependency(new StaticExportsDependency(["default"], true));
1871
2222