@depup/webpack 5.111.1-depup.1 → 5.112.0-depup.0

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