webpack 5.111.0 → 5.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/README.md +1 -1
  2. package/lib/Chunk.js +3 -966
  3. package/lib/Compilation.js +237 -138
  4. package/lib/Compiler.js +23 -24
  5. package/lib/Dependency.js +3 -551
  6. package/lib/DependencyTemplate.js +3 -69
  7. package/lib/EntryPlugin.js +3 -68
  8. package/lib/Entrypoint.js +3 -121
  9. package/lib/ExternalsPlugin.js +3 -92
  10. package/lib/FileSystemInfo.js +3 -4629
  11. package/lib/InitFragment.js +3 -204
  12. package/lib/LibraryTemplatePlugin.js +3 -46
  13. package/lib/ModuleFilenameHelpers.js +3 -400
  14. package/lib/ModuleNotFoundError.js +2 -2
  15. package/lib/MultiCompiler.js +43 -24
  16. package/lib/NormalModule.js +3 -2190
  17. package/lib/NullFactory.js +3 -22
  18. package/lib/ProgressPlugin.js +3 -908
  19. package/lib/RawModule.js +3 -197
  20. package/lib/RequestShortener.js +3 -37
  21. package/lib/SingleEntryPlugin.js +1 -1
  22. package/lib/WebpackError.js +2 -2
  23. package/lib/asset/AssetBytesGenerator.js +15 -9
  24. package/lib/asset/AssetBytesParser.js +3 -3
  25. package/lib/asset/AssetGenerator.js +61 -38
  26. package/lib/asset/AssetModule.js +2 -2
  27. package/lib/asset/AssetModulesPlugin.js +6 -9
  28. package/lib/asset/AssetParser.js +3 -3
  29. package/lib/asset/AssetSourceGenerator.js +15 -9
  30. package/lib/asset/AssetSourceParser.js +3 -3
  31. package/lib/asset/RawDataUrlModule.js +17 -10
  32. package/lib/asset/WebManifestGenerator.js +7 -7
  33. package/lib/asset/WebManifestParser.js +5 -5
  34. package/lib/async-modules/AsyncModuleHelpers.js +6 -5
  35. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  36. package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
  37. package/lib/async-modules/isGeneratorLowered.js +3 -3
  38. package/lib/bun/BunTargetPlugin.js +1 -1
  39. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  40. package/lib/{Cache.js → cache/Cache.js} +1 -1
  41. package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
  42. package/lib/cache/IdleFileCachePlugin.js +2 -2
  43. package/lib/cache/MemoryCachePlugin.js +6 -6
  44. package/lib/cache/MemoryWithGcCachePlugin.js +9 -10
  45. package/lib/cache/PackFileCacheStrategy.js +11 -28
  46. package/lib/cache/ResolverCachePlugin.js +8 -4
  47. package/lib/cache/getLazyHashedEtag.js +3 -5
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +3 -9
  54. package/lib/{cli.js → config/cli.js} +5 -158
  55. package/lib/config/defaults.js +192 -122
  56. package/lib/config/getClaimedAssetTypes.js +28 -21
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +13 -4
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  76. package/lib/{ContextModule.js → context/ContextModule.js} +50 -36
  77. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +25 -24
  78. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  79. package/lib/css/CssGenerator.js +57 -42
  80. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  81. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  82. package/lib/css/CssModule.js +27 -29
  83. package/lib/css/CssModulesPlugin.js +128 -44
  84. package/lib/css/CssParser.js +700 -311
  85. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  86. package/lib/css/cssMinify.js +130 -54
  87. package/lib/css/data.js +7017 -4648
  88. package/lib/css/syntax-parser.js +19873 -0
  89. package/lib/css/syntax-printer.js +6037 -0
  90. package/lib/css/syntax.js +37 -17370
  91. package/lib/debug/ProfilingPlugin.js +55 -23
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +25 -29
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +176 -44
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +39 -35
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +19 -20
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +34 -18
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -100
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +26 -22
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +26 -21
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +40 -41
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +22 -21
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +62 -93
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +83 -49
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +136 -122
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +68 -43
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +68 -65
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +199 -97
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +86 -43
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +110 -61
  188. package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
  189. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  190. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
  191. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
  192. package/lib/{util → dependencies/helpers}/chainedImports.js +8 -9
  193. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  194. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  195. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  196. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  197. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +125 -243
  200. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
  201. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +72 -23
  202. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +53 -19
  203. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  204. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  205. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  206. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  207. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
  208. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  209. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  210. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  211. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  212. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  213. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +126 -107
  214. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  215. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  216. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  217. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  218. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +34 -25
  219. package/lib/{url → dependencies/url}/URLParserPlugin.js +22 -26
  220. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  221. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  222. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  223. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  224. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +46 -54
  225. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +28 -20
  226. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +25 -27
  227. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  228. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  229. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  230. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  231. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +207 -129
  232. package/lib/{util → devtool}/generateDebugId.js +1 -1
  233. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  234. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  235. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  236. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  237. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  238. package/lib/dll/DelegatedModule.js +20 -18
  239. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  240. package/lib/dll/DelegatedPlugin.js +1 -1
  241. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  242. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  243. package/lib/dll/DllEntryPlugin.js +3 -3
  244. package/lib/dll/DllModule.js +11 -9
  245. package/lib/dll/DllModuleFactory.js +3 -3
  246. package/lib/dll/DllPlugin.js +18 -6
  247. package/lib/dll/DllReferencePlugin.js +102 -26
  248. package/lib/dll/LibManifestPlugin.js +9 -7
  249. package/lib/electron/ElectronTargetPlugin.js +2 -2
  250. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  251. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  252. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  253. package/lib/entry/EntryPlugin.js +75 -0
  254. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  255. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  256. package/lib/errors/BuildCycleError.js +1 -1
  257. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  258. package/lib/errors/ChunkRenderError.js +1 -1
  259. package/lib/errors/CodeGenerationError.js +1 -1
  260. package/lib/errors/CommentCompilationWarning.js +1 -1
  261. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  262. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  263. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  264. package/lib/errors/DllManifestError.js +26 -0
  265. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  266. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  267. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  268. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  269. package/lib/errors/ErrorHelpers.js +222 -0
  270. package/lib/errors/ExternalStarReexportError.js +2 -2
  271. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  272. package/lib/errors/HookWebpackError.js +6 -5
  273. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  274. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  275. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  276. package/lib/errors/ModuleBuildError.js +1 -1
  277. package/lib/errors/ModuleDependencyError.js +2 -2
  278. package/lib/errors/ModuleDependencyWarning.js +2 -2
  279. package/lib/errors/ModuleError.js +1 -1
  280. package/lib/errors/ModuleHashingError.js +1 -1
  281. package/lib/errors/ModuleNotFoundError.js +3 -3
  282. package/lib/errors/ModuleParseError.js +1 -1
  283. package/lib/errors/ModuleRestoreError.js +1 -1
  284. package/lib/errors/ModuleStoreError.js +1 -1
  285. package/lib/errors/ModuleWarning.js +1 -1
  286. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  287. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  288. package/lib/errors/NodeStuffInWebError.js +7 -2
  289. package/lib/errors/PathVariableError.js +31 -0
  290. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  291. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  292. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  293. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  294. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  295. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  296. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  297. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  298. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  299. package/lib/errors/WebpackError.js +12 -3
  300. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  301. package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
  302. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  303. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  304. package/lib/{ExternalModule.js → externals/ExternalModule.js} +85 -63
  305. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
  306. package/lib/externals/ExternalsPlugin.js +99 -0
  307. package/lib/fs/FileSystemInfo.js +4642 -0
  308. package/lib/{util → fs}/fs.js +22 -9
  309. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  310. package/lib/graph/Chunk.js +985 -0
  311. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
  312. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  313. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  314. package/lib/graph/Dependency.js +628 -0
  315. package/lib/graph/Entrypoint.js +136 -0
  316. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +151 -99
  317. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  318. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +36 -39
  319. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  320. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +163 -72
  321. package/lib/{util → graph}/findGraphRoots.js +20 -21
  322. package/lib/graph/isDependencyKind.js +23 -0
  323. package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
  324. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +49 -47
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  326. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
  327. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  328. package/lib/hmr/LazyCompilationPlugin.js +34 -26
  329. package/lib/html/HtmlGenerator.js +168 -125
  330. package/lib/html/HtmlModule.js +6 -2
  331. package/lib/html/HtmlModulesPlugin.js +260 -215
  332. package/lib/html/HtmlParser.js +598 -292
  333. package/lib/html/builtinEmbeddedRenderer.js +60 -13
  334. package/lib/html/data.js +23 -1
  335. package/lib/html/htmlMinify.js +120 -51
  336. package/lib/html/syntax-parser.js +15796 -0
  337. package/lib/html/syntax-printer.js +1034 -0
  338. package/lib/html/syntax.js +37 -14062
  339. package/lib/html/xmlMinify.js +67 -0
  340. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  341. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  342. package/lib/ids/HashedModuleIdsPlugin.js +31 -4
  343. package/lib/ids/IdHelpers.js +4 -4
  344. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  345. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  346. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  347. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  348. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  349. package/lib/{util → ids}/numberHash.js +1 -1
  350. package/lib/index.js +348 -99
  351. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +29 -30
  352. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  353. package/lib/javascript/BasicEvaluatedExpression.js +4 -4
  354. package/lib/javascript/ChunkHelpers.js +64 -4
  355. package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
  356. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +10 -11
  357. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +90 -139
  358. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  359. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  360. package/lib/javascript/JavascriptGenerator.js +25 -18
  361. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
  362. package/lib/javascript/JavascriptModule.js +4 -3
  363. package/lib/javascript/JavascriptModulesPlugin.js +458 -256
  364. package/lib/javascript/JavascriptParser.js +916 -287
  365. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  366. package/lib/javascript/MergedEntryExports.js +196 -0
  367. package/lib/javascript/ScopeAnalyzer.js +3840 -5
  368. package/lib/javascript/StartupHelpers.js +6 -6
  369. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
  370. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  371. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  372. package/lib/javascript/data.js +533 -122
  373. package/lib/javascript/jsMinify.js +272 -0
  374. package/lib/javascript/regexp.js +67 -32
  375. package/lib/javascript/syntax-parser.js +18561 -0
  376. package/lib/javascript/syntax-printer-data.js +933 -0
  377. package/lib/javascript/syntax-printer.js +47106 -0
  378. package/lib/javascript/syntax.js +20 -10946
  379. package/lib/json/JsonData.js +1 -1
  380. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  381. package/lib/json/JsonGenerator.js +17 -11
  382. package/lib/json/JsonModule.js +2 -2
  383. package/lib/json/JsonModulesPlugin.js +1 -1
  384. package/lib/json/JsonParser.js +5 -5
  385. package/lib/json/jsonMinify.js +69 -0
  386. package/lib/library/AbstractLibraryPlugin.js +28 -15
  387. package/lib/library/AmdLibraryPlugin.js +4 -4
  388. package/lib/library/AssignLibraryPlugin.js +27 -11
  389. package/lib/library/EnableLibraryPlugin.js +1 -1
  390. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  391. package/lib/library/JsonpLibraryPlugin.js +1 -1
  392. package/lib/library/LibraryTemplatePlugin.js +53 -0
  393. package/lib/library/ModuleLibraryPlugin.js +207 -285
  394. package/lib/library/SystemLibraryPlugin.js +6 -8
  395. package/lib/library/UmdLibraryPlugin.js +3 -4
  396. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  397. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  398. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  399. package/lib/{dependencies → loaders}/LoaderPlugin.js +27 -2
  400. package/lib/loaders/LoaderRunner.js +160 -22
  401. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  402. package/lib/logging/Logger.js +7 -9
  403. package/lib/logging/ProgressPlugin.js +957 -0
  404. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  405. package/lib/{Generator.js → module/Generator.js} +38 -14
  406. package/lib/{Module.js → module/Module.js} +122 -54
  407. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  408. package/lib/module/NormalModule.js +2348 -0
  409. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
  410. package/lib/module/NullFactory.js +29 -0
  411. package/lib/{Parser.js → module/Parser.js} +3 -3
  412. package/lib/module/RawModule.js +208 -0
  413. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  414. package/lib/{util → module}/extractSourceMap.js +2 -2
  415. package/lib/{util → module}/findCaseMismatch.js +2 -2
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  417. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  418. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
  419. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  420. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  421. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  422. package/lib/node/NodeTargetPlugin.js +1 -1
  423. package/lib/node/NodeWatchFileSystem.js +61 -15
  424. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  425. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
  426. package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
  427. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  428. package/lib/node/nodeConsole.js +2 -4
  429. package/lib/optimize/AggressiveMergingPlugin.js +5 -7
  430. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  431. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
  432. package/lib/optimize/ConcatenatedModule.js +305 -309
  433. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  434. package/lib/optimize/ConstExportsPlugin.js +7 -7
  435. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  436. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  437. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +25 -30
  438. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +26 -30
  439. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  440. package/lib/optimize/FlagIncludedChunksPlugin.js +5 -13
  441. package/lib/optimize/InlineExports.js +11 -3
  442. package/lib/optimize/InnerGraph.js +5 -13
  443. package/lib/optimize/InnerGraphPlugin.js +17 -23
  444. package/lib/optimize/LazyBarrels.js +584 -0
  445. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  446. package/lib/optimize/LimitChunkCountPlugin.js +21 -15
  447. package/lib/optimize/MangleExportsPlugin.js +8 -9
  448. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  449. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  450. package/lib/optimize/ModuleConcatenationPlugin.js +23 -16
  451. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  452. package/lib/optimize/RealContentHashPlugin.js +16 -7
  453. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  454. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  455. package/lib/optimize/SideEffectsFlagPlugin.js +25 -37
  456. package/lib/optimize/SplitChunksPlugin.js +715 -159
  457. package/lib/{util → optimize}/TupleQueue.js +9 -9
  458. package/lib/optimize/chunkSetIntersections.js +437 -0
  459. package/lib/{util → optimize}/deterministicGrouping.js +25 -30
  460. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  461. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
  462. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
  463. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  464. package/lib/output/SSRManifestPlugin.js +349 -0
  465. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  466. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  467. package/lib/performance/BroadContextsPlugin.js +4 -4
  468. package/lib/performance/CacheEffectivenessPlugin.js +5 -7
  469. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  470. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  471. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  472. package/lib/performance/DynamicExportsPlugin.js +2 -2
  473. package/lib/performance/EvalUsagePlugin.js +3 -3
  474. package/lib/performance/HotspotsPlugin.js +11 -10
  475. package/lib/performance/LargeModulesPlugin.js +2 -3
  476. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  477. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  478. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  479. package/lib/performance/PureAnnotationsPlugin.js +3 -3
  480. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  481. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  482. package/lib/performance/SizeLimitsPlugin.js +13 -16
  483. package/lib/performance/TopLevelThisPlugin.js +8 -7
  484. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  485. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  486. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  487. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  488. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  489. package/lib/performance/UnusedFederationPlugin.js +2 -4
  490. package/lib/performance/UnusedModulesPlugin.js +5 -4
  491. package/lib/performance/getModuleSize.js +1 -1
  492. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  493. package/lib/performance/isOnlyReexported.js +7 -6
  494. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  495. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  496. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +7 -9
  497. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  498. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  499. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  500. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  501. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  502. package/lib/prefetch/ResourceHintPlugin.js +82 -65
  503. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  504. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -13
  505. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  506. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  507. package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
  508. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  509. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  510. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  511. package/lib/resolve/getResolveOptionsKey.js +59 -0
  512. package/lib/rules/RuleSetCompiler.js +27 -46
  513. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  514. package/lib/runtime/AsyncModuleRuntimeModule.js +10 -9
  515. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  516. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  517. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  518. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  519. package/lib/runtime/CompatRuntimeModule.js +4 -4
  520. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  521. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  522. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  523. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  524. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  525. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  526. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  527. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -10
  528. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  529. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  530. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  531. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  532. package/lib/runtime/GlobalRuntimeModule.js +5 -7
  533. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  534. package/lib/runtime/HelperRuntimeModule.js +16 -1
  535. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  536. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +135 -102
  537. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  538. package/lib/runtime/NonceRuntimeModule.js +2 -2
  539. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  540. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  541. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  542. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
  543. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  544. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  545. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
  546. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  547. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  548. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  549. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  550. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  551. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  552. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  553. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  554. package/lib/runtime/baseUri.js +1 -1
  555. package/lib/schemes/DataUriPlugin.js +4 -7
  556. package/lib/schemes/HttpUriPlugin.js +67 -11
  557. package/lib/schemes/VirtualUrlPlugin.js +50 -16
  558. package/lib/serialization/AggregateErrorSerializer.js +2 -2
  559. package/lib/serialization/BinaryMiddleware.js +9 -9
  560. package/lib/serialization/FileMiddleware.js +19 -19
  561. package/lib/serialization/ObjectMiddleware.js +77 -49
  562. package/lib/serialization/SerializerMiddleware.js +2 -2
  563. package/lib/serialization/SingleItemMiddleware.js +4 -2
  564. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  565. package/lib/sharing/ConsumeSharedModule.js +18 -14
  566. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  567. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  568. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  569. package/lib/sharing/ProvideSharedDependency.js +1 -1
  570. package/lib/sharing/ProvideSharedModule.js +11 -9
  571. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  572. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  573. package/lib/sharing/SharePlugin.js +102 -9
  574. package/lib/sharing/ShareRuntimeModule.js +6 -6
  575. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  576. package/lib/{util → sharing}/semver.js +19 -19
  577. package/lib/sharing/utils.js +59 -2
  578. package/lib/stats/DefaultStatsFactoryPlugin.js +25 -23
  579. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  580. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
  581. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  582. package/lib/{Stats.js → stats/Stats.js} +4 -4
  583. package/lib/stats/StatsFactory.js +14 -13
  584. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  585. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  586. package/lib/template/DependencyTemplate.js +77 -0
  587. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  588. package/lib/template/InitFragment.js +223 -0
  589. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  590. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  591. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  592. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +178 -106
  593. package/lib/{Template.js → template/Template.js} +13 -11
  594. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +35 -82
  595. package/lib/typescript/TypeScriptPlugin.js +5 -6
  596. package/lib/util/LocConverter.js +4 -7
  597. package/lib/util/RequestShortener.js +44 -0
  598. package/lib/util/SortableSet.js +87 -22
  599. package/lib/util/SourceProcessor.js +364 -66
  600. package/lib/util/TupleSet.js +27 -27
  601. package/lib/util/WeakTupleMap.js +10 -12
  602. package/lib/util/buildDiagnostics.js +2 -2
  603. package/lib/util/comparators.js +10 -10
  604. package/lib/util/concatenate.js +32 -151
  605. package/lib/util/createHooksRegistry.js +1 -2
  606. package/lib/util/createMappings.js +111 -0
  607. package/lib/util/dataURL.js +96 -18
  608. package/lib/util/deprecation.js +1 -1
  609. package/lib/util/extractComments.js +118 -0
  610. package/lib/util/formatLocation.js +1 -1
  611. package/lib/util/globUtils.js +197 -16
  612. package/lib/util/haltVisitors.js +51 -0
  613. package/lib/util/handlerKeys.js +2 -2
  614. package/lib/util/hash/wasm-hash.js +3 -4
  615. package/lib/util/identifier.js +117 -1
  616. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  617. package/lib/util/internalSerializables.js +295 -103
  618. package/lib/util/magicComment.js +12 -7
  619. package/lib/util/makeSerializable.js +23 -4
  620. package/lib/util/parseJson.js +1 -1
  621. package/lib/util/preloadModuleType.js +5 -2
  622. package/lib/util/registerExternalSerializer.js +2 -2
  623. package/lib/util/removeBOM.js +1 -1
  624. package/lib/util/runtime.js +1 -1
  625. package/lib/util/serialization.js +4 -1
  626. package/lib/util/source.js +2 -2
  627. package/lib/util/terminalColors.js +161 -0
  628. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  629. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  630. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
  631. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +11 -6
  632. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +16 -11
  633. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  634. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
  635. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  636. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
  637. package/lib/wasm/wasmModuleFilename.js +2 -2
  638. package/lib/wasm-sync/SyncWasmModule.js +3 -3
  639. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +11 -12
  640. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  641. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -9
  642. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +19 -16
  643. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  644. package/lib/wasm-sync/WebAssemblyParser.js +6 -6
  645. package/lib/wasm-sync/WebAssemblyUtils.js +8 -9
  646. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  647. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  648. package/lib/{Watching.js → watch/Watching.js} +8 -8
  649. package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
  650. package/lib/web/FetchCompileWasmPlugin.js +6 -4
  651. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  652. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  653. package/lib/web/JsonpTemplatePlugin.js +1 -1
  654. package/lib/webpack.js +27 -17
  655. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  656. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  657. package/package.json +70 -40
  658. package/schemas/WebpackOptions.check.js +2 -1
  659. package/schemas/WebpackOptions.d.json.ts +2 -0
  660. package/schemas/WebpackOptions.json +294 -74
  661. package/schemas/plugins/BannerPlugin.check.js +2 -1
  662. package/schemas/plugins/BannerPlugin.json +29 -2
  663. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
  664. package/schemas/plugins/HtmlParserOptions.check.js +2 -1
  665. package/schemas/plugins/IgnorePlugin.check.js +1 -0
  666. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  667. package/schemas/plugins/IgnorePlugin.json +1 -1
  668. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
  669. package/schemas/plugins/ManifestPlugin.check.js +1 -0
  670. package/schemas/plugins/ManifestPlugin.json +3 -3
  671. package/schemas/plugins/ProgressPlugin.check.js +2 -1
  672. package/schemas/plugins/ProgressPlugin.json +2 -7
  673. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  674. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  675. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
  676. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  677. package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
  678. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  679. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
  680. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
  681. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
  682. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
  683. package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
  684. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  685. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
  686. package/schemas/plugins/container/ExternalsType.check.js +1 -0
  687. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
  688. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  689. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
  690. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
  691. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
  692. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
  693. package/schemas/plugins/css/CssParserOptions.check.js +1 -0
  694. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
  695. package/schemas/plugins/dll/DllPlugin.check.js +1 -0
  696. package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
  697. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  698. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
  699. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
  700. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
  701. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
  702. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
  703. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
  704. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
  705. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
  706. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
  707. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
  708. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
  709. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
  710. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  711. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
  712. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  713. package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
  714. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  715. package/types.d.ts +13915 -8414
  716. package/lib/ErrorHelpers.js +0 -107
  717. package/lib/LazyBarrel.js +0 -388
  718. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  719. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  720. package/lib/javascript/ChunkFormatHelpers.js +0 -71
  721. package/lib/javascript/grammar.js +0 -5546
  722. package/lib/javascript/parser.js +0 -1494
  723. package/lib/javascript/regexpData.js +0 -51
  724. package/lib/performance/getSourceModules.js +0 -22
  725. package/lib/util/Semaphore.js +0 -65
  726. package/lib/util/objectToMap.js +0 -15
  727. package/schemas/WebpackOptions.check.d.ts +0 -7
  728. package/schemas/_container.json +0 -155
  729. package/schemas/_sharing.json +0 -118
  730. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  731. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  732. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  733. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  734. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  735. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  736. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  737. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  738. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  739. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  740. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  741. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  742. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  743. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  745. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  746. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  747. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  748. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  749. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  750. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  751. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  752. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  753. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  754. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  755. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  756. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  758. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  759. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  760. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  761. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  762. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  763. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  764. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  765. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  768. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  769. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  770. /package/lib/{util → css}/conventions.js +0 -0
  771. /package/lib/{util → css}/topologicalSort.js +0 -0
  772. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  773. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  774. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  775. /package/lib/{util → javascript}/StackedMap.js +0 -0
  776. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  777. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  778. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  779. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  780. /package/lib/{util → optimize}/Queue.js +0 -0
  781. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -11,7 +11,7 @@ const {
11
11
  CSS_TYPE,
12
12
  JAVASCRIPT_TYPE,
13
13
  UNKNOWN_TYPE
14
- } = require("../ModuleSourceTypeConstants");
14
+ } = require("../module/ModuleSourceTypeConstants");
15
15
  const {
16
16
  ASSET_MODULE_TYPE,
17
17
  ASSET_MODULE_TYPE_BYTES,
@@ -29,9 +29,9 @@ const {
29
29
  JSON_MODULE_TYPE,
30
30
  WEBASSEMBLY_MODULE_TYPE_ASYNC,
31
31
  WEBASSEMBLY_MODULE_TYPE_SYNC
32
- } = require("../ModuleTypeConstants");
33
- const Template = require("../Template");
32
+ } = require("../module/ModuleTypeConstants");
34
33
  const RuleSetCompiler = require("../rules/RuleSetCompiler");
34
+ const Template = require("../template/Template");
35
35
  const { cleverMerge } = require("../util/cleverMerge");
36
36
  const {
37
37
  getDefaultTarget,
@@ -79,7 +79,7 @@ const {
79
79
  * WebpackOptionsNormalized
80
80
  * } from "../../declarations/WebpackOptions"
81
81
  */
82
- /** @import Module from "../Module" */
82
+ /** @import Module from "../module/Module" */
83
83
  /**
84
84
  * @import {
85
85
  * ChunkLoadingTypes
@@ -228,7 +228,7 @@ const {
228
228
  const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
229
229
  const DEFAULT_CACHE_NAME = "default";
230
230
  const DEFAULTS = {
231
- // TODO webpack 6 - use xxhash64
231
+ // TODO in the next major release: use xxhash64
232
232
  HASH_FUNCTION: "md4"
233
233
  };
234
234
 
@@ -386,7 +386,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
386
386
 
387
387
  F(options, "validate", () => !(futureDefaults === true && production));
388
388
 
389
- // Progress lives on infrastructureLogging; webpack@6 shows the interactive
389
+ // Progress lives on infrastructureLogging; the next major release shows the interactive
390
390
  // bar by default (`"auto"` = TTY only), webpack@5 stays opt-in.
391
391
  D(options.infrastructureLogging, "progress", futureDefaults ? "auto" : false);
392
392
 
@@ -492,10 +492,9 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
492
492
  library: options.output.library
493
493
  });
494
494
 
495
- // `output.resourceHints.urlHints` shorthand: fan the project-wide rules out
496
- // as the base `urlHints` of every URL-emitting parser (JS `new URL`, CSS
497
- // `url()`, HTML `<img src>`). They go first so parser-scoped
498
- // `parser.<type>.urlHints` rules — matched later, last-match-wins — override.
495
+ // `output.resourceHints.urlHints` fans the project-wide rules out as the base
496
+ // `urlHints` of every URL-emitting parser. They go first, so a parser-scoped
497
+ // rule matches later and wins.
499
498
  const outputUrlHints =
500
499
  options.output.resourceHints && options.output.resourceHints.urlHints;
501
500
  if (outputUrlHints && outputUrlHints.length > 0) {
@@ -537,15 +536,19 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
537
536
  );
538
537
 
539
538
  F(options, "externalsType", () => {
540
- const validExternalTypes = require("../../schemas/WebpackOptions.json")
541
- .definitions.ExternalsType.enum;
542
-
543
- return options.output.library &&
544
- validExternalTypes.includes(options.output.library.type)
545
- ? /** @type {ExternalsType} */ (options.output.library.type)
546
- : options.output.module
547
- ? "module-import"
548
- : "var";
539
+ const libraryType = options.output.library && options.output.library.type;
540
+ if (libraryType !== undefined) {
541
+ // The schema states which types are externals types, and reading it
542
+ // costs 498 KB of objects, so only a build naming one pays for that.
543
+ const validExternalTypes = require("../../schemas/WebpackOptions.json")
544
+ .definitions.ExternalsType.enum;
545
+
546
+ if (validExternalTypes.includes(libraryType)) {
547
+ return /** @type {ExternalsType} */ (libraryType);
548
+ }
549
+ }
550
+
551
+ return options.output.module ? "module-import" : "var";
549
552
  });
550
553
 
551
554
  applyNodeDefaults(options.node, {
@@ -576,9 +579,14 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
576
579
  applyOptimizationDefaults(options.optimization, {
577
580
  development,
578
581
  production,
582
+ futureDefaults,
579
583
  css:
580
584
  /** @type {boolean} */
581
585
  (options.experiments.css),
586
+ esmLibrary:
587
+ /** @type {string[]} */
588
+ (options.output.enabledLibraryTypes).length > 0 &&
589
+ Boolean(options.output.module),
582
590
  records: Boolean(options.recordsInputPath || options.recordsOutputPath)
583
591
  });
584
592
 
@@ -642,7 +650,7 @@ const applyExperimentsDefaults = (
642
650
  ) => {
643
651
  D(experiments, "futureDefaults", false);
644
652
  D(experiments, "backCompat", !experiments.futureDefaults);
645
- // TODO do we need sync web assembly in webpack@6?
653
+ // TODO in the next major release: do we need sync web assembly?
646
654
  D(experiments, "syncWebAssembly", false);
647
655
  D(
648
656
  experiments,
@@ -660,15 +668,13 @@ const applyExperimentsDefaults = (
660
668
  experiments.futureDefaults ? true : "auto"
661
669
  );
662
670
 
663
- // Resolve the "auto" default: enable the built-in css/html module type unless
664
- // the user already registered a loader (or explicit type) for these files, so
665
- // enabling them by default does not break existing css-loader/html-loader setups.
666
- // The built-in `/\.css$/i` rule also covers `.module.css`, so a loader scoped to
667
- // CSS modules must disable the built-in type too — sample both extensions.
668
- // When enabled implicitly the value stays `"auto"` (truthy): Css/HtmlModulesPlugin
669
- // then step aside per-module for requests that loaders were applied to
670
- // (inline requests or loaders injected via hooks, e.g. html-webpack-plugin).
671
- // TODO webpack 6: css/html default to `true`, drop the `"auto"` marker.
671
+ // Resolve `"auto"`: enable the built-in type unless a loader is already
672
+ // registered for these files, so the default breaks no existing setup. Both
673
+ // extensions are sampled, since `/\.css$/i` also covers `.module.css`.
674
+
675
+ // Enabled implicitly the value stays `"auto"`, and the plugins then step
676
+ // aside per module for requests loaders were applied to.
677
+ // TODO in the next major release: css/html/asyncWebAssembly default to `true`, drop the `"auto"` marker.
672
678
  if (experiments.css === "auto") {
673
679
  experiments.css =
674
680
  !(
@@ -697,7 +703,8 @@ const applyExperimentsDefaults = (
697
703
  if (experiments.asyncWebAssembly === "auto") {
698
704
  experiments.asyncWebAssembly =
699
705
  !experiments.syncWebAssembly &&
700
- !RuleSetCompiler.hasRuleForResource(rules, "/file.wasm");
706
+ !RuleSetCompiler.hasRuleForResource(rules, "/file.wasm") &&
707
+ "auto";
701
708
  }
702
709
 
703
710
  if (typeof experiments.buildHttp === "object") {
@@ -779,7 +786,12 @@ const applyCacheDefaults = (
779
786
  /** @type {NonNullable<FileCacheOptions["buildDependencies"]>} */
780
787
  (cache.buildDependencies),
781
788
  "defaultWebpack",
782
- [path.resolve(__dirname, "..") + path.sep]
789
+ [
790
+ {
791
+ dependency: path.resolve(__dirname, "..") + path.sep,
792
+ optional: false
793
+ }
794
+ ]
783
795
  );
784
796
  break;
785
797
  case "memory":
@@ -1227,18 +1239,13 @@ const applyModuleDefaults = (
1227
1239
  }
1228
1240
 
1229
1241
  if (html) {
1230
- // `module.generator.html.extract` is intentionally left undefined by
1231
- // default: HtmlGenerator treats undefined as "extract iff this HTML
1232
- // module is a compilation entry", which is the HTML-entry-point
1233
- // behaviour. Setting `extract: true` forces extraction for all HTML
1234
- // modules (including imported ones); `extract: false` disables it
1235
- // everywhere.
1242
+ // `extract` is deliberately left undefined, which HtmlGenerator reads as
1243
+ // "extract only a module that is a compilation entry". `true` forces it for
1244
+ // imported modules too, `false` disables it everywhere.
1236
1245
  F(module.generator, HTML_MODULE_TYPE, () => ({}));
1237
- // `module.parser.html.sources` defaults to `true` — HtmlParser uses
1238
- // the built-in source list to extract URL-like attributes (`<img
1239
- // src>`, `<link href>`, `<script src>`, …) as webpack dependencies.
1240
- // Users may pass `false` to disable extraction entirely or an array
1241
- // (with `"..."` to include the defaults) to customize it.
1246
+ // `sources` defaults to `true`, so HtmlParser extracts URL-like attributes
1247
+ // as dependencies from its built-in list. `false` disables extraction, and
1248
+ // an array customizes it, with `"..."` keeping the defaults.
1242
1249
  F(module.parser, HTML_MODULE_TYPE, () => ({}));
1243
1250
  D(
1244
1251
  /** @type {NonNullable<ParserOptionsByModuleTypeKnown[HTML_MODULE_TYPE]>} */
@@ -1372,11 +1379,9 @@ const applyModuleDefaults = (
1372
1379
  type: CSS_MODULE_TYPE,
1373
1380
  resolve
1374
1381
  });
1375
- // For CSS modules, i.e. `.class { composes: className from "./style.css" }`
1376
- // We inherit for such constructions, but skip files that are already
1377
- // detected as CSS modules by extension (`.module.<ext>`) — they get
1378
- // the same modules-mode behavior from the auto rule, and forcing a
1379
- // different type stamp here would create a duplicate module instance.
1382
+ // For `composes: className from "./style.css"`. A file already detected as
1383
+ // a CSS module by extension is skipped: it gets modules mode from the auto
1384
+ // rule anyway, and a second type stamp would duplicate the module.
1380
1385
  const moduleExtension = /\.module\.\w+$/i;
1381
1386
  rules.push({
1382
1387
  dependency: /css-import-local-module/,
@@ -1426,11 +1431,9 @@ const applyModuleDefaults = (
1426
1431
  type: HTML_MODULE_TYPE,
1427
1432
  resolve
1428
1433
  });
1429
- // `<iframe srcdoc>` content is fed back through the HTML pipeline as a
1430
- // `data:text/html` module. `extract: "inline"` exposes the processed
1431
- // HTML on the `html` codegen channel that `HtmlInlineHtmlDependency.
1432
- // Template` reads back into the attribute, without emitting a standalone
1433
- // `.html` file (the module is never a page on its own).
1434
+ // `<iframe srcdoc>` content goes back through the HTML pipeline as a
1435
+ // `data:text/html` module. `extract: "inline"` exposes it on the `html`
1436
+ // channel without emitting a file: it is never a page on its own.
1434
1437
  rules.push({
1435
1438
  dependency: "html-srcdoc",
1436
1439
  generator: {
@@ -1439,12 +1442,9 @@ const applyModuleDefaults = (
1439
1442
  resolve
1440
1443
  });
1441
1444
  if (css) {
1442
- // Inline `<style>` content in an HTML module is fed into the
1443
- // CSS pipeline as a `data:text/css` virtual module. We force
1444
- // `exportType: "text"` so the CSS module exposes the
1445
- // processed CSS text on the `css-text` codegen channel that
1446
- // `HtmlInlineStyleDependency.Template` reads back into the
1447
- // `<style>` tag.
1445
+ // Inline `<style>` content goes into the CSS pipeline as a
1446
+ // `data:text/css` module. `exportType: "text"` is forced, so the
1447
+ // processed text reaches the `css-text` channel the template reads.
1448
1448
  rules.push({
1449
1449
  dependency: "html-style",
1450
1450
  parser: {
@@ -1702,7 +1702,7 @@ const applyOutputDefaults = (
1702
1702
  ((tp.node === null && tp.web === null && tp.module !== false) ||
1703
1703
  tp.deno === true ||
1704
1704
  tp.bun === true ||
1705
- // webpack@6 emits ESM wherever the target reads one — a browserslist
1705
+ // the next major release emits ESM wherever the target reads one — a browserslist
1706
1706
  // query (or `esX`/`nodeX`) without ESM support keeps script output
1707
1707
  (futureDefaults && tp.module !== false && !hasScriptLibrary))
1708
1708
  )
@@ -1750,12 +1750,11 @@ const applyOutputDefaults = (
1750
1750
  "const",
1751
1751
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
1752
1752
  );
1753
- // Only the browserslist target reports these; everywhere else they stay
1754
- // unset, which `optimistic` reads as the modern spelling being available —
1755
- // the same policy the JS features above follow.
1756
- // `let` was added after `const`; targets predating it report only `const`,
1757
- // so fall back to `const` when `let` is unreported (undefined). Targets that
1758
- // do report `let` (browserslist, built-ins) keep their own accurate value.
1753
+ // Only the browserslist target reports these; unset elsewhere, which
1754
+ // `optimistic` reads as the modern spelling being available.
1755
+
1756
+ // `let` was added after `const`, so a target predating it reports only
1757
+ // `const` and falls back to it. One reporting `let` keeps its own value.
1759
1758
  F(environment, "let", () =>
1760
1759
  conditionallyOptimistic(
1761
1760
  /** @type {boolean | undefined} */ (tp && tp.let),
@@ -1887,10 +1886,9 @@ const applyOutputDefaults = (
1887
1886
  tp && optimistic(/** @type {boolean | undefined} */ (tp.modulePreload))
1888
1887
  );
1889
1888
 
1890
- // Vite-style default for ESM output (`output.module`): preload the entry's
1891
- // initial dependency graph, which native `import()` would otherwise fetch in
1892
- // a waterfall. Classic output loads initial chunks via parallel `<script>`
1893
- // tags (no waterfall), so it stays opt-in.
1889
+ // For ESM output, preload the entry's initial dependency graph, which native
1890
+ // `import()` would otherwise fetch in a waterfall. Classic output loads its
1891
+ // initial chunks in parallel already, so it stays opt-in.
1894
1892
  if (output.module && output.resourceHints === undefined) {
1895
1893
  output.resourceHints = {};
1896
1894
  }
@@ -1944,13 +1942,9 @@ const applyOutputDefaults = (
1944
1942
  }
1945
1943
  return "[id].css";
1946
1944
  });
1947
- // Derive html filename defaults from `output.filename` / `output.chunkFilename`
1948
- // (the same shape the CSS pipeline uses), but if the derived template lacks
1949
- // any per-module differentiator, fall back to `[name].html` so multiple
1950
- // extracted HTML modules in one compilation don't collide on the same
1951
- // emitted file. For example: `output.filename: "bundle.js"` would derive
1952
- // `bundle.html` — two `.html` modules extracted in the same build would
1953
- // both want that name and conflict at emit time.
1945
+ // Derive the html filenames from `output.filename`, as the CSS pipeline does.
1946
+ // A derived template with no per-module placeholder falls back to
1947
+ // `[name].html`, or two extracted modules would want the same file.
1954
1948
  const HAS_PATH_PLACEHOLDER_REGEXP =
1955
1949
  /\[(name|id|chunkhash|contenthash|fullhash|hash)/;
1956
1950
  /**
@@ -1997,11 +1991,9 @@ const applyOutputDefaults = (
1997
1991
  if (tp) {
1998
1992
  if (tp.global) return "global";
1999
1993
  if (tp.globalThis) return "globalThis";
2000
- // Universal target (web + node): no one identifier is defined on both
2001
- // sides, so `globalThis` where the target reports nothing against it,
2002
- // and a guarded pair where it does — `self` covers window and worker
2003
- // scopes, `global` covers Node.js. Naming either alone leaves the other
2004
- // platform reading an undeclared binding.
1994
+ // A universal target has no identifier defined on both sides, so this is
1995
+ // `globalThis` where nothing argues against it and a guarded pair where
1996
+ // something does: naming one alone leaves the other undeclared.
2005
1997
  if (tp.web === null && tp.node === null) {
2006
1998
  return tp.globalThis === undefined
2007
1999
  ? "globalThis"
@@ -2391,7 +2383,7 @@ const applyNodeDefaults = (
2391
2383
  });
2392
2384
 
2393
2385
  const handlerForNames = () => {
2394
- // TODO webpack@6 remove `node-module` in favor of `eval-only`
2386
+ // TODO in the next major release: remove `node-module` in favor of `eval-only`
2395
2387
  if (targetProperties) {
2396
2388
  if (targetProperties.node) {
2397
2389
  return "eval-only";
@@ -2407,7 +2399,7 @@ const applyNodeDefaults = (
2407
2399
  }
2408
2400
  }
2409
2401
 
2410
- // TODO webpack@6 should we use `warn-even-only`?
2402
+ // TODO in the next major release: should we use `warn-even-only`?
2411
2403
  return futureDefaults ? "warn-mock" : "mock";
2412
2404
  };
2413
2405
 
@@ -2467,12 +2459,14 @@ const applyPerformanceDefaults = (performance, { production }) => {
2467
2459
  * @param {boolean} options.production is production
2468
2460
  * @param {boolean} options.development is development
2469
2461
  * @param {boolean} options.css is css enabled
2462
+ * @param {boolean} options.esmLibrary whether the output is an ECMAScript module consumed as a library
2470
2463
  * @param {boolean} options.records using records
2464
+ * @param {boolean} options.futureDefaults use defaults of the next major version
2471
2465
  * @returns {void}
2472
2466
  */
2473
2467
  const applyOptimizationDefaults = (
2474
2468
  optimization,
2475
- { production, development, css, records }
2469
+ { production, development, css, esmLibrary, records, futureDefaults }
2476
2470
  ) => {
2477
2471
  D(optimization, "removeAvailableModules", false);
2478
2472
  D(optimization, "removeEmptyChunks", true);
@@ -2519,31 +2513,40 @@ const applyOptimizationDefaults = (
2519
2513
  /** @type {NonNullable<Optimization["minimizeOptions"]>} */
2520
2514
  (optimization.minimizeOptions);
2521
2515
  if (optimization.minimize) {
2522
- // Canonicalize the per-asset-type options: the JS minimizer's defaults
2523
- // become visible in the resolved config rather than hidden in the wiring.
2524
- F(minimizeOptions, "javascript", () => ({ compress: { passes: 2 } }));
2516
+ // Only ESM output carries these annotations, and only a consumer that
2517
+ // re-bundles it reads them; terser drops them everywhere else, which is
2518
+ // what a script-loaded output — a federation container — wants.
2519
+ F(minimizeOptions, "javascript", () =>
2520
+ esmLibrary
2521
+ ? {
2522
+ compress: { passes: 2 },
2523
+ // eslint-disable-next-line camelcase
2524
+ format: { preserve_annotations: true }
2525
+ }
2526
+ : { compress: { passes: 2 } }
2527
+ );
2525
2528
  F(minimizeOptions, "css", () => ({}));
2526
2529
  F(minimizeOptions, "html", () => ({}));
2530
+ D(minimizeOptions, "json", futureDefaults);
2531
+ if (futureDefaults) F(minimizeOptions, "xml", () => ({}));
2527
2532
  }
2528
2533
  A(optimization, "minimizer", () => [
2529
2534
  {
2530
2535
  apply: (compiler) => {
2531
2536
  // Lazy load the minimizer plugin
2532
- const TerserPlugin = require("minimizer-webpack-plugin");
2533
-
2534
- // One minimizer instance (one worker-thread pool) handles JS and, when
2535
- // native CSS / HTML is enabled, those assets too — an array of minify
2536
- // functions each dispatched by its own `filter` (terser -> JS,
2537
- // cssMinify -> CSS, htmlMinify -> HTML). The CSS / HTML serializers stay
2538
- // worker-safe by resolving their parser with `require("webpack/…")` in
2539
- // the worker, so all three share the same pool. `test` is widened to let
2540
- // CSS / HTML assets reach the dispatcher.
2541
- // Step aside for a minimizer the user already configured for these
2542
- // types: whichever of the two ran first would mark the asset
2543
- // `minimized` and silently disable the other, so webpack only claims
2544
- // what nothing else does. Their asset matchers are read directly rather
2545
- // than resolved per asset — a coarse check, but it keeps the outcome
2546
- // independent of tap order and of the plugin version in use.
2537
+ const MinimizerPlugin = require("minimizer-webpack-plugin");
2538
+
2539
+ // WHY: one minimizer instance, so one worker-thread pool, handles JS and
2540
+ // — where native CSS and HTML are enabled — those assets too, as an array
2541
+ // of minify functions each dispatched by its own `filter`: the JS one
2542
+ // to JS, `cssMinify` to CSS, `htmlMinify` to HTML. The CSS and
2543
+ // HTML serializers stay worker-safe by resolving their parser with
2544
+ // `require("webpack/…")` in the worker, so all three share the pool, and
2545
+ // `test` is widened to let those assets reach the dispatcher.
2546
+
2547
+ // Step aside for a minimizer the user configured for these types:
2548
+ // whichever ran first would mark the asset `minimized` and silently
2549
+ // disable the other. Matchers are read directly, coarse but stable.
2547
2550
  const claimedByOtherMinimizer = require("./getClaimedAssetTypes")(
2548
2551
  compiler
2549
2552
  );
@@ -2552,9 +2555,18 @@ const applyOptimizationDefaults = (
2552
2555
  const minimizeByType = /** @type {OptimizationMinimizeOptions} */ (
2553
2556
  compiler.options.optimization.minimizeOptions
2554
2557
  );
2555
- const terserOptions = minimizeByType.javascript || {
2558
+ const javascriptOptions = minimizeByType.javascript || {
2556
2559
  compress: { passes: 2 }
2557
2560
  };
2561
+ // webpack's printer, held to what terser writes, replaces terser; until
2562
+ // proven on real builds it is a future default, and terser as the plugin
2563
+ // publishes it minifies JS everywhere else.
2564
+ const javascriptMinify = futureDefaults
2565
+ ? require.resolve("../javascript/jsMinify")
2566
+ : {
2567
+ path: require.resolve("minimizer-webpack-plugin"),
2568
+ export: "terserMinify"
2569
+ };
2558
2570
 
2559
2571
  const { css, html } = compiler.options.experiments;
2560
2572
  const minifyJs = minimizeByType.javascript !== false;
@@ -2566,16 +2578,47 @@ const applyOptimizationDefaults = (
2566
2578
  Boolean(html) &&
2567
2579
  !claimedByOtherMinimizer.html &&
2568
2580
  minimizeByType.html !== false;
2569
- if (!minifyJs && !minifyCss && !minifyHtml) return;
2570
- if (minifyJs && !minifyCss && !minifyHtml) {
2571
- new TerserPlugin({ terserOptions }).apply(
2572
- /** @type {EXPECTED_ANY} */ (compiler)
2573
- );
2581
+ // `=== true` rather than `!== false`: outside `futureDefaults`, JSON is opt-in.
2582
+ const minifyJson =
2583
+ minimizeByType.json === true && !claimedByOtherMinimizer.json;
2584
+ // Off unless asked for: only an object, which futureDefaults supplies.
2585
+ const minifyXml =
2586
+ !claimedByOtherMinimizer.xml &&
2587
+ typeof minimizeByType.xml === "object";
2588
+ if (
2589
+ !minifyJs &&
2590
+ !minifyCss &&
2591
+ !minifyHtml &&
2592
+ !minifyJson &&
2593
+ !minifyXml
2594
+ ) {
2574
2595
  return;
2575
2596
  }
2576
- /** @type {(typeof TerserPlugin.terserMinify | typeof import("../css/cssMinify") | typeof import("../html/htmlMinify"))[]} */
2597
+ // An asset name keeps the query and the fragment its filename template
2598
+ // wrote (`[query][fragment]`, `main.js#[contenthash]`), so both may follow.
2599
+ /**
2600
+ * @param {string[]} extensions extension patterns
2601
+ * @returns {RegExp} matcher for asset names with those extensions
2602
+ */
2603
+ const assetNameTest = (extensions) =>
2604
+ new RegExp(`^[^?#]*\\.(?:${extensions.join("|")})(?:[?#].*)?$`, "i");
2605
+ if (
2606
+ minifyJs &&
2607
+ !minifyCss &&
2608
+ !minifyHtml &&
2609
+ !minifyJson &&
2610
+ !minifyXml
2611
+ ) {
2612
+ new MinimizerPlugin({
2613
+ test: assetNameTest(["[cm]?js"]),
2614
+ minify: javascriptMinify,
2615
+ minimizerOptions: javascriptOptions
2616
+ }).apply(/** @type {EXPECTED_ANY} */ (compiler));
2617
+ return;
2618
+ }
2619
+ /** @type {(typeof javascriptMinify | string)[]} */
2577
2620
  const minify = [];
2578
- /** @type {EXPECTED_OBJECT[]} */
2621
+ /** @type {(typeof javascriptOptions | NonNullable<Parameters<typeof import("../css/cssMinify")>[1]> | NonNullable<Parameters<typeof import("../html/htmlMinify")>[1]> | Record<string, never>)[]} */
2579
2622
  const minimizerOptions = [];
2580
2623
  /** @type {string[]} */
2581
2624
  const extensions = [];
@@ -2589,12 +2632,21 @@ const applyOptimizationDefaults = (
2589
2632
  // prefixes and every spelling a target can read, so `vendorPrefixes`
2590
2633
  // turns off the first alone — resolving it is what the second needs.
2591
2634
  const { target } = compiler.options;
2592
- const browsers = target
2635
+ const context = /** @type {Context} */ (compiler.options.context);
2636
+ const named = target
2593
2637
  ? getTargetsBrowsers(
2594
2638
  Array.isArray(target) ? target : [target],
2595
- /** @type {Context} */ (compiler.options.context)
2639
+ context
2596
2640
  )
2597
2641
  : undefined;
2642
+ // A target naming no browsers is still served to some: browserslist's own
2643
+ // `defaults` are them, where none would read as "every current engine" —
2644
+ // unless `dropOverriddenDeclarations` asks for exactly that assumption.
2645
+ const browsers =
2646
+ named ||
2647
+ (cssOptions !== undefined && cssOptions.dropOverriddenDeclarations
2648
+ ? undefined
2649
+ : getTargetsBrowsers(["browserslist:defaults"], context));
2598
2650
  const cssEnvironment = {
2599
2651
  browsers,
2600
2652
  vendorPrefixes:
@@ -2605,33 +2657,50 @@ const applyOptimizationDefaults = (
2605
2657
  ? minimizeByType.html
2606
2658
  : undefined;
2607
2659
  if (minifyJs) {
2608
- minify.push(TerserPlugin.terserMinify);
2609
- minimizerOptions.push(terserOptions);
2660
+ minify.push(javascriptMinify);
2661
+ minimizerOptions.push(javascriptOptions);
2610
2662
  extensions.push("[cm]?js");
2611
2663
  }
2612
2664
  if (minifyCss) {
2613
- minify.push(require("../css/cssMinify"));
2665
+ minify.push(require.resolve("../css/cssMinify"));
2666
+ // An SVG `data:` URL is minified as the `.svg` assets are, or left alone.
2614
2667
  minimizerOptions.push({
2615
2668
  environment: cssEnvironment,
2669
+ svg: minifyXml,
2616
2670
  ...cssOptions
2617
2671
  });
2618
2672
  extensions.push("css");
2619
2673
  }
2620
2674
  if (minifyHtml) {
2621
- minify.push(require("../html/htmlMinify"));
2622
- // `minimize.css` rides along under its own key rather than spread
2623
- // beside the HTML options: the two name some of the same switches
2624
- // (`quotes`, `comments`), and one flat object would hand
2625
- // each language the other's answer.
2675
+ minify.push(require.resolve("../html/htmlMinify"));
2676
+ // `minimize.css` rides under its own key rather than spread beside the
2677
+ // HTML options: the two name some of the same switches, so one flat
2678
+ // object would hand each language the other's answer.
2626
2679
  minimizerOptions.push({
2627
2680
  environment: cssEnvironment,
2628
2681
  css: cssOptions,
2682
+ svg: minifyXml,
2629
2683
  ...htmlOptions
2630
2684
  });
2631
2685
  extensions.push("html");
2632
2686
  }
2633
- new TerserPlugin({
2634
- test: new RegExp(`\\.(?:${extensions.join("|")})(\\?.*)?$`, "i"),
2687
+ if (minifyJson) {
2688
+ minify.push(require.resolve("../json/jsonMinify"));
2689
+ minimizerOptions.push({});
2690
+ // A web app manifest is JSON under its own extension.
2691
+ extensions.push("json", "webmanifest");
2692
+ }
2693
+ if (minifyXml) {
2694
+ minify.push(require.resolve("../html/xmlMinify"));
2695
+ minimizerOptions.push({
2696
+ environment: cssEnvironment,
2697
+ css: cssOptions,
2698
+ ...minimizeByType.xml
2699
+ });
2700
+ extensions.push("svg", "xml");
2701
+ }
2702
+ new MinimizerPlugin({
2703
+ test: assetNameTest(extensions),
2635
2704
  minify,
2636
2705
  minimizerOptions
2637
2706
  }).apply(/** @type {EXPECTED_ANY} */ (compiler));
@@ -2651,6 +2720,7 @@ const applyOptimizationDefaults = (
2651
2720
  : [JAVASCRIPT_TYPE, UNKNOWN_TYPE]
2652
2721
  );
2653
2722
  D(splitChunks, "hidePathInfo", production);
2723
+ D(splitChunks, "dedupDepth", futureDefaults ? 1 : 0);
2654
2724
  D(splitChunks, "chunks", "async");
2655
2725
  D(splitChunks, "usedExports", optimization.usedExports === true);
2656
2726
  D(splitChunks, "minChunks", 1);
@@ -5,11 +5,11 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { matchObject } = require("../ModuleFilenameHelpers");
8
+ const { matchObject } = require("../devtool/ModuleFilenameHelpers");
9
9
 
10
10
  /** @import Compiler from "../Compiler" */
11
- /** @import { MatchObject } from "../ModuleFilenameHelpers" */
12
- /** @typedef {MatchObject & { minimizer?: EXPECTED_OBJECT }} MinimizerOptions */
11
+ /** @import { MatchObject } from "../devtool/ModuleFilenameHelpers" */
12
+ /** @typedef {MatchObject & { minimizer?: import("minimizer-webpack-plugin").InternalPluginOptions<EXPECTED_ANY>["minimizer"] }} MinimizerOptions */
13
13
 
14
14
  /**
15
15
  * @param {unknown} candidate a configured plugin or minimizer entry
@@ -17,24 +17,21 @@ const { matchObject } = require("../ModuleFilenameHelpers");
17
17
  * @returns {boolean} whether the candidate minimizes that file
18
18
  */
19
19
  const claims = (candidate, file) => {
20
- // Every minimizer in the `minimizer-webpack-plugin` family (itself,
21
- // `css-minimizer-webpack-plugin`, `html-minimizer-webpack-plugin`, …) keeps
22
- // the minify implementation on `options.minimizer` and its asset matcher
23
- // alongside it in the shape `matchObject` reads. The matcher alone is not
24
- // enough to recognize one: `BannerPlugin` and `SourceMapDevToolPlugin` carry
25
- // the same three keys, and `LoaderOptionsPlugin` defaults `test` to match
26
- // every file — reading those as minimizers would disable minification.
20
+ // WHY: every minimizer in the `minimizer-webpack-plugin` family — itself,
21
+ // `css-minimizer-webpack-plugin`, `html-minimizer-webpack-plugin`, … — keeps
22
+ // its implementation on `options.minimizer` and its asset matcher alongside
23
+ // it, in the shape `matchObject` reads. The matcher alone is not enough to
24
+ // recognize one: `BannerPlugin` and `SourceMapDevToolPlugin` carry the same
25
+ // three keys, and `LoaderOptionsPlugin` defaults `test` to match every file,
26
+ // so reading those as minimizers would disable minification.
27
27
  const { options } = /** @type {{ options?: MinimizerOptions }} */ (candidate);
28
28
  if (!options || !options.minimizer) return false;
29
- // `test`/`include` say which types it handles, `exclude` only narrows the
30
- // files within them — honouring that narrowing would make a minimizer scoped
31
- // to a subdirectory claim nothing, and webpack would then race it on the very
32
- // files it was configured for.
29
+ // `test` and `include` say which types it handles, and the minimizer takes a
30
+ // file only when both match. `exclude` merely narrows the files within them:
31
+ // honoring it would let a subdirectory-scoped minimizer claim nothing.
33
32
  const { test, include } = options;
34
- return (
35
- (test !== undefined && matchObject({ test }, file)) ||
36
- (include !== undefined && matchObject({ include }, file))
37
- );
33
+ if (test === undefined && include === undefined) return false;
34
+ return matchObject({ test, include }, file);
38
35
  };
39
36
 
40
37
  /**
@@ -45,12 +42,14 @@ const claims = (candidate, file) => {
45
42
  * matcher rather than resolving it per emitted asset, so a minimizer restricted
46
43
  * to some of a type's files still claims the whole type.
47
44
  * @param {Compiler} compiler the compiler
48
- * @returns {{ css: boolean, html: boolean }} types another minimizer handles
45
+ * @returns {{ css: boolean, html: boolean, json: boolean, xml: boolean }} types another minimizer handles
49
46
  */
50
47
  module.exports = (compiler) => {
51
48
  const { optimization, plugins } = compiler.options;
52
49
  let css = false;
53
50
  let html = false;
51
+ let json = false;
52
+ let xml = false;
54
53
  // Both lists are normalized arrays with falsy entries already filtered out,
55
54
  // and `minimizer` was filled in by the defaults before any plugin applies.
56
55
  const minimizer =
@@ -59,7 +58,15 @@ module.exports = (compiler) => {
59
58
  for (const candidate of [...minimizer, ...plugins]) {
60
59
  if (!css) css = claims(candidate, "file.css");
61
60
  if (!html) html = claims(candidate, "file.html");
62
- if (css && html) break;
61
+ // The JSON minifier takes web app manifests too, so claiming either stops it.
62
+ if (!json) {
63
+ json =
64
+ claims(candidate, "file.json") || claims(candidate, "file.webmanifest");
65
+ }
66
+ if (!xml) {
67
+ xml = claims(candidate, "file.svg") || claims(candidate, "file.xml");
68
+ }
69
+ if (css && html && json && xml) break;
63
70
  }
64
- return { css, html };
71
+ return { css, html, json, xml };
65
72
  };