@depup/webpack 5.109.0-depup.0 → 5.110.1-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 (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -21,21 +21,28 @@ const { makePathsRelative } = require("../util/identifier");
21
21
  const memoize = require("../util/memoize");
22
22
  const MinMaxSizeWarning = require("./MinMaxSizeWarning");
23
23
 
24
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksCacheGroup} OptimizationSplitChunksCacheGroup */
25
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
26
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksSizes} OptimizationSplitChunksSizes */
27
- /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
28
- /** @typedef {import("../Chunk").ChunkName} ChunkName */
29
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
30
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
31
- /** @typedef {import("../Compiler")} Compiler */
32
- /** @typedef {import("../Module")} Module */
33
- /** @typedef {import("../Module").SourceType} SourceType */
34
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
35
- /** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
24
+ /**
25
+ * @import {
26
+ * OptimizationSplitChunksCacheGroup,
27
+ * OptimizationSplitChunksOptions,
28
+ * OptimizationSplitChunksSizes
29
+ * } from "../../declarations/WebpackOptions"
30
+ */
31
+ /**
32
+ * @import {
33
+ * OutputNormalizedWithDefaults as OutputOptions
34
+ * } from "../config/defaults"
35
+ */
36
+ /** @import { ChunkName, ChunkFilenameTemplate } from "../Chunk" */
37
+ /** @import ChunkGraph from "../ChunkGraph" */
38
+ /** @import ChunkGroup from "../ChunkGroup" */
39
+ /** @import Compilation from "../Compilation" */
40
+ /** @import Compiler from "../Compiler" */
41
+ /** @import Module, { SourceType } from "../Module" */
42
+ /** @import ModuleGraph from "../ModuleGraph" */
36
43
  /** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
37
44
  /** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
38
- /** @typedef {import("../util/deterministicGrouping").Sizes} Sizes */
45
+ /** @import { Sizes } from "../util/deterministicGrouping" */
39
46
 
40
47
  /**
41
48
  * Defines the chunk filter fn callback.
@@ -182,7 +189,6 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
182
189
  * @property {string=} name
183
190
  * @property {SplitChunksSizes} sizes
184
191
  * @property {ChunkSet} chunks
185
- * @property {ChunkSet} reusableChunks
186
192
  * @property {Set<bigint | Chunk>} chunksKeys
187
193
  */
188
194
 
@@ -213,6 +219,27 @@ const hashFilename = (name, outputOptions) => {
213
219
  return digest.slice(0, 8);
214
220
  };
215
221
 
222
+ /**
223
+ * A split `maxInitialRequests`/`maxAsyncRequests` refused, recorded for
224
+ * `performance.splitChunksCapped`.
225
+ * @typedef {object} CappedSplit
226
+ * @property {string} cacheGroup the cache group whose split was refused
227
+ * @property {Chunk} chunk the chunk it would have been taken out of
228
+ * @property {"maxAsyncRequests" | "maxInitialRequests"} limit the option that refused it
229
+ * @property {number} maxRequests the value that option had
230
+ * @property {number} modules how many modules the split would have moved
231
+ */
232
+
233
+ /** @type {WeakMap<Compilation, CappedSplit[]>} */
234
+ const CAPPED_SPLITS = new WeakMap();
235
+
236
+ /**
237
+ * Reads back the splits a request cap refused during this compilation.
238
+ * @param {Compilation} compilation the compilation
239
+ * @returns {CappedSplit[] | undefined} the refused splits, or `undefined` when nothing recorded them
240
+ */
241
+ const getCappedSplits = (compilation) => CAPPED_SPLITS.get(compilation);
242
+
216
243
  /**
217
244
  * Returns the number of requests.
218
245
  * @param {Chunk} chunk the chunk
@@ -229,7 +256,6 @@ const getRequests = (chunk) => {
229
256
  /**
230
257
  * Returns result.
231
258
  * @template {object} T
232
- * @template {object} R
233
259
  * @param {T} obj obj an object
234
260
  * @param {(obj: T[keyof T], key: keyof T) => T[keyof T]} fn fn
235
261
  * @returns {T} result
@@ -314,6 +340,9 @@ const ASYNC_CHUNK_FILTER = (chunk) => !chunk.canBeInitial();
314
340
  */
315
341
  const ALL_CHUNK_FILTER = (_chunk) => true;
316
342
 
343
+ /** Placeholder until a chunk set group is filled and its signatures are written. */
344
+ const EMPTY_SIGNATURES = new Uint32Array(0);
345
+
317
346
  /**
318
347
  * Returns normalized representation.
319
348
  * @param {OptimizationSplitChunksSizes | undefined} value the sizes
@@ -689,7 +718,7 @@ const createCacheGroupSource = (options, key, defaultSizeTypes) => {
689
718
 
690
719
  const PLUGIN_NAME = "SplitChunksPlugin";
691
720
 
692
- module.exports = class SplitChunksPlugin {
721
+ class SplitChunksPlugin {
693
722
  /**
694
723
  * Creates an instance of SplitChunksPlugin.
695
724
  * @param {OptimizationSplitChunksOptions=} options plugin options
@@ -896,21 +925,40 @@ module.exports = class SplitChunksPlugin {
896
925
  (chunks) => {
897
926
  if (alreadyOptimized) return;
898
927
  alreadyOptimized = true;
928
+ const { performance } = compilation.options;
929
+ // Mirrors both of `SplitChunksCappedPlugin`'s gates: a build that
930
+ // would not report records nothing and allocates nothing.
931
+ /** @type {CappedSplit[] | undefined} */
932
+ let cappedSplits;
933
+ if (
934
+ performance !== false &&
935
+ performance.splitChunksCapped === true &&
936
+ Boolean(performance.hints)
937
+ ) {
938
+ cappedSplits = [];
939
+ CAPPED_SPLITS.set(compilation, cappedSplits);
940
+ }
899
941
  logger.time("prepare");
900
942
  const chunkGraph = compilation.chunkGraph;
901
943
  const moduleGraph = compilation.moduleGraph;
902
944
  // Give each selected chunk an index (to create strings from chunks)
903
945
  /** @type {Map<Chunk, bigint>} */
904
946
  const chunkIndexMap = new Map();
947
+ // Dense per-chunk index, folded into the 64 bit membership
948
+ // signatures that reject non-subsets in getCombinations
949
+ /** @type {Map<Chunk, number>} */
950
+ const chunkSignatureBitMap = new Map();
905
951
  const ZERO = BigInt("0");
906
952
  const ONE = BigInt("1");
907
953
  const START = ONE << BigInt("31");
908
954
  let index = START;
955
+ let denseIndex = 0;
909
956
  for (const chunk of chunks) {
910
957
  chunkIndexMap.set(
911
958
  chunk,
912
959
  index | BigInt((Math.random() * 0x7fffffff) | 0)
913
960
  );
961
+ chunkSignatureBitMap.set(chunk, denseIndex++ & 63);
914
962
  index <<= ONE;
915
963
  }
916
964
  /**
@@ -1011,7 +1059,36 @@ module.exports = class SplitChunksPlugin {
1011
1059
  return { chunkSetsInGraph, singleChunkSets };
1012
1060
  });
1013
1061
 
1014
- /** @typedef {Map<CountOfChunk, ChunkSet[]>} ChunkSetsByCount */
1062
+ /**
1063
+ * Chunk sets of equal size, with a 64 bit membership signature
1064
+ * per set stored as two words at `2 * i` in `signatures`.
1065
+ * @typedef {object} ChunkSetGroup
1066
+ * @property {ChunkSet[]} sets the chunk sets
1067
+ * @property {Uint32Array} signatures two signature words per set
1068
+ */
1069
+
1070
+ /** @typedef {Map<CountOfChunk, ChunkSetGroup>} ChunkSetsByCount */
1071
+
1072
+ // holds the signature of the set currently being combined; transient
1073
+ const signatureScratch = new Uint32Array(2);
1074
+
1075
+ /**
1076
+ * Folds a chunk set into a 64 bit membership signature.
1077
+ * @param {ChunkSet} chunksSet set of chunks
1078
+ * @param {Uint32Array} out target array
1079
+ * @param {number} offset index of the first of the two words
1080
+ * @returns {void}
1081
+ */
1082
+ const writeSignature = (chunksSet, out, offset) => {
1083
+ out[offset] = 0;
1084
+ out[offset + 1] = 0;
1085
+ for (const chunk of chunksSet) {
1086
+ const bit = /** @type {number} */ (
1087
+ chunkSignatureBitMap.get(chunk)
1088
+ );
1089
+ out[offset + (bit >> 5)] |= 1 << (bit & 31);
1090
+ }
1091
+ };
1015
1092
 
1016
1093
  // group these set of chunks by count
1017
1094
  // to allow to check less sets via isSubset
@@ -1026,12 +1103,20 @@ module.exports = class SplitChunksPlugin {
1026
1103
  const chunkSetsByCount = new Map();
1027
1104
  for (const chunksSet of chunkSets) {
1028
1105
  const count = chunksSet.size;
1029
- let array = chunkSetsByCount.get(count);
1030
- if (array === undefined) {
1031
- array = [];
1032
- chunkSetsByCount.set(count, array);
1106
+ let group = chunkSetsByCount.get(count);
1107
+ if (group === undefined) {
1108
+ group = { sets: [], signatures: EMPTY_SIGNATURES };
1109
+ chunkSetsByCount.set(count, group);
1033
1110
  }
1034
- array.push(chunksSet);
1111
+ group.sets.push(chunksSet);
1112
+ }
1113
+ for (const group of chunkSetsByCount.values()) {
1114
+ const { sets } = group;
1115
+ const signatures = new Uint32Array(sets.length * 2);
1116
+ for (let i = 0; i < sets.length; i++) {
1117
+ writeSignature(sets[i], signatures, i * 2);
1118
+ }
1119
+ group.signatures = signatures;
1035
1120
  }
1036
1121
  return chunkSetsByCount;
1037
1122
  };
@@ -1077,10 +1162,24 @@ module.exports = class SplitChunksPlugin {
1077
1162
  (chunkSets.get(key));
1078
1163
  /** @type {Combinations} */
1079
1164
  const array = [chunksSet];
1080
- for (const [count, setArray] of chunkSetsByCount) {
1165
+ writeSignature(chunksSet, signatureScratch, 0);
1166
+ const selfLow = signatureScratch[0];
1167
+ const selfHigh = signatureScratch[1];
1168
+ for (const [count, group] of chunkSetsByCount) {
1081
1169
  // "equal" is not needed because they would have been merge in the first step
1082
1170
  if (count < chunksSet.size) {
1083
- for (const set of setArray) {
1171
+ const { sets, signatures } = group;
1172
+ for (let i = 0; i < sets.length; i++) {
1173
+ // a subset cannot hold a signature bit the superset lacks,
1174
+ // so this rejects nearly every candidate without touching the Set
1175
+ const offset = i * 2;
1176
+ if (
1177
+ (signatures[offset] & ~selfLow) !== 0 ||
1178
+ (signatures[offset + 1] & ~selfHigh) !== 0
1179
+ ) {
1180
+ continue;
1181
+ }
1182
+ const set = sets[i];
1084
1183
  if (isSubset(chunksSet, set)) {
1085
1184
  array.push(set);
1086
1185
  }
@@ -1187,6 +1286,31 @@ module.exports = class SplitChunksPlugin {
1187
1286
  /** @type {Map<string, ChunksInfoItem>} */
1188
1287
  const chunksInfoMap = new Map();
1189
1288
 
1289
+ // The unnamed key is derived only from cache group and chunk set, so it
1290
+ // repeats for every module sharing that pair — build the string once
1291
+ /** @type {Map<CacheGroup, Map<bigint | Chunk, string>>} */
1292
+ const unnamedKeyCache = new Map();
1293
+
1294
+ /**
1295
+ * Returns the chunksInfoMap key for a cache group and chunk set.
1296
+ * @param {CacheGroup} cacheGroup the current cache group
1297
+ * @param {bigint | Chunk} selectedChunksKey a key of selectedChunks
1298
+ * @returns {string} key into chunksInfoMap
1299
+ */
1300
+ const getUnnamedKey = (cacheGroup, selectedChunksKey) => {
1301
+ let byChunksKey = unnamedKeyCache.get(cacheGroup);
1302
+ if (byChunksKey === undefined) {
1303
+ byChunksKey = new Map();
1304
+ unnamedKeyCache.set(cacheGroup, byChunksKey);
1305
+ }
1306
+ let key = byChunksKey.get(selectedChunksKey);
1307
+ if (key === undefined) {
1308
+ key = `${cacheGroup.key} chunks:${keyToString(selectedChunksKey)}`;
1309
+ byChunksKey.set(selectedChunksKey, key);
1310
+ }
1311
+ return key;
1312
+ };
1313
+
1190
1314
  /**
1191
1315
  * Adds module to chunks info map.
1192
1316
  * @param {CacheGroup} cacheGroup the current cache group
@@ -1270,11 +1394,9 @@ module.exports = class SplitChunksPlugin {
1270
1394
  // When it has a name we use the name as key
1271
1395
  // Otherwise we create the key from chunks and cache group key
1272
1396
  // This automatically merges equal names
1273
- const key =
1274
- cacheGroup.key +
1275
- (name
1276
- ? ` name:${name}`
1277
- : ` chunks:${keyToString(selectedChunksKey)}`);
1397
+ const key = name
1398
+ ? `${cacheGroup.key} name:${name}`
1399
+ : getUnnamedKey(cacheGroup, selectedChunksKey);
1278
1400
  // Add module to maps
1279
1401
  let info = chunksInfoMap.get(key);
1280
1402
  if (info === undefined) {
@@ -1290,7 +1412,6 @@ module.exports = class SplitChunksPlugin {
1290
1412
  name,
1291
1413
  sizes: {},
1292
1414
  chunks: new Set(),
1293
- reusableChunks: new Set(),
1294
1415
  chunksKeys: new Set()
1295
1416
  })
1296
1417
  );
@@ -1316,6 +1437,35 @@ module.exports = class SplitChunksPlugin {
1316
1437
  chunkGraph
1317
1438
  };
1318
1439
 
1440
+ /**
1441
+ * Returns combinations of the chunks the module is in.
1442
+ * @param {Module} module the module
1443
+ * @returns {Combinations} chunk combinations
1444
+ */
1445
+ const computeCombinations = (module) =>
1446
+ getCombinations(getKey(chunkGraph.getModuleChunksIterable(module)));
1447
+
1448
+ /**
1449
+ * Returns combinations of the module's chunks grouped by used exports.
1450
+ * @param {Module} module the module
1451
+ * @returns {Set<ChunkSet | Chunk>} chunk combinations
1452
+ */
1453
+ const computeCombinationsByUsedExports = (module) => {
1454
+ // fill the groupedByExportsMap
1455
+ getExportsChunkSetsInGraph();
1456
+ /** @type {Set<ChunkSet | Chunk>} */
1457
+ const set = new Set();
1458
+ const groupedByUsedExports =
1459
+ /** @type {Iterable<Chunk[]>} */
1460
+ (groupedByExportsMap.get(module));
1461
+ for (const chunks of groupedByUsedExports) {
1462
+ for (const comb of getExportsCombinations(getKey(chunks))) {
1463
+ set.add(comb);
1464
+ }
1465
+ }
1466
+ return set;
1467
+ };
1468
+
1319
1469
  logger.timeEnd("prepare");
1320
1470
 
1321
1471
  logger.time("modules");
@@ -1328,38 +1478,29 @@ module.exports = class SplitChunksPlugin {
1328
1478
  continue;
1329
1479
  }
1330
1480
 
1331
- // Prepare some values (usedExports = false)
1332
- const getCombs = memoize(() => {
1333
- const chunks = chunkGraph.getModuleChunksIterable(module);
1334
- const chunksKey = getKey(chunks);
1335
- return getCombinations(chunksKey);
1336
- });
1337
-
1338
- // Prepare some values (usedExports = true)
1339
- const getCombsByUsedExports = memoize(() => {
1340
- // fill the groupedByExportsMap
1341
- getExportsChunkSetsInGraph();
1342
- /** @type {Set<ChunkSet | Chunk>} */
1343
- const set = new Set();
1344
- const groupedByUsedExports =
1345
- /** @type {Iterable<Chunk[]>} */
1346
- (groupedByExportsMap.get(module));
1347
- for (const chunks of groupedByUsedExports) {
1348
- const chunksKey = getKey(chunks);
1349
- for (const comb of getExportsCombinations(chunksKey)) {
1350
- set.add(comb);
1351
- }
1352
- }
1353
- return set;
1354
- });
1481
+ // Computed at most once per module, on first use by a cache group
1482
+ /** @type {Combinations | undefined} */
1483
+ let combsCache;
1484
+ /** @type {Set<ChunkSet | Chunk> | undefined} */
1485
+ let combsByUsedExportsCache;
1355
1486
 
1356
1487
  let cacheGroupIndex = 0;
1357
1488
  for (const cacheGroupSource of cacheGroups) {
1358
1489
  const cacheGroup = this._getCacheGroup(cacheGroupSource);
1359
1490
 
1360
- const combs = cacheGroup.usedExports
1361
- ? getCombsByUsedExports()
1362
- : getCombs();
1491
+ let combs;
1492
+ if (cacheGroup.usedExports) {
1493
+ if (combsByUsedExportsCache === undefined) {
1494
+ combsByUsedExportsCache =
1495
+ computeCombinationsByUsedExports(module);
1496
+ }
1497
+ combs = combsByUsedExportsCache;
1498
+ } else {
1499
+ if (combsCache === undefined) {
1500
+ combsCache = computeCombinations(module);
1501
+ }
1502
+ combs = combsCache;
1503
+ }
1363
1504
  // For all combination of chunk selection
1364
1505
  for (const chunkCombination of combs) {
1365
1506
  // Break if minimum number of chunks is not reached
@@ -1544,19 +1685,36 @@ module.exports = class SplitChunksPlugin {
1544
1685
  Number.isFinite(item.cacheGroup.maxAsyncRequests))
1545
1686
  ) {
1546
1687
  for (const chunk of usedChunks) {
1547
- // respect max requests
1548
- const maxRequests = chunk.isOnlyInitial()
1549
- ? item.cacheGroup.maxInitialRequests
1550
- : chunk.canBeInitial()
1551
- ? Math.min(
1552
- item.cacheGroup.maxInitialRequests,
1553
- item.cacheGroup.maxAsyncRequests
1554
- )
1555
- : item.cacheGroup.maxAsyncRequests;
1688
+ // respect max requests: a chunk that is both initial and
1689
+ // async answers to the stricter of the two caps
1690
+ const isOnlyInitial = chunk.isOnlyInitial();
1691
+ const byAsyncRequests =
1692
+ !isOnlyInitial &&
1693
+ (!chunk.canBeInitial() ||
1694
+ item.cacheGroup.maxAsyncRequests <
1695
+ item.cacheGroup.maxInitialRequests);
1696
+ const maxRequests = byAsyncRequests
1697
+ ? item.cacheGroup.maxAsyncRequests
1698
+ : item.cacheGroup.maxInitialRequests;
1556
1699
  if (
1557
1700
  Number.isFinite(maxRequests) &&
1558
1701
  getRequests(chunk) >= maxRequests
1559
1702
  ) {
1703
+ if (cappedSplits !== undefined) {
1704
+ cappedSplits.push({
1705
+ cacheGroup: item.cacheGroup.key,
1706
+ chunk,
1707
+ // which cap it was cannot be read back off the value:
1708
+ // the two are equal by default in production
1709
+ limit: byAsyncRequests
1710
+ ? "maxAsyncRequests"
1711
+ : "maxInitialRequests",
1712
+ maxRequests:
1713
+ /** @type {number} */
1714
+ (maxRequests),
1715
+ modules: item.modules.size
1716
+ });
1717
+ }
1560
1718
  usedChunks.delete(chunk);
1561
1719
  }
1562
1720
  }
@@ -1577,12 +1735,14 @@ module.exports = class SplitChunksPlugin {
1577
1735
  }
1578
1736
  if (usedChunks.size >= item.cacheGroup.minChunks) {
1579
1737
  const chunksArr = [...usedChunks];
1738
+ // invariant across the module loop below
1739
+ const usedChunksKey = getKey(usedChunks);
1580
1740
  for (const module of item.modules) {
1581
1741
  addModuleToChunksInfoMap(
1582
1742
  item.cacheGroup,
1583
1743
  item.cacheGroupIndex,
1584
1744
  chunksArr,
1585
- getKey(usedChunks),
1745
+ usedChunksKey,
1586
1746
  module
1587
1747
  );
1588
1748
  }
@@ -1881,4 +2041,8 @@ module.exports = class SplitChunksPlugin {
1881
2041
  );
1882
2042
  });
1883
2043
  }
1884
- };
2044
+ }
2045
+
2046
+ SplitChunksPlugin.getCappedSplits = getCappedSplits;
2047
+
2048
+ module.exports = SplitChunksPlugin;
@@ -8,7 +8,7 @@
8
8
  const WebpackError = require("../errors/WebpackError");
9
9
  const formatSize = require("../util/formatSize");
10
10
 
11
- /** @typedef {import("./SizeLimitsPlugin").AssetDetails} AssetDetails */
11
+ /** @import { AssetDetails } from "./SizeLimitsPlugin" */
12
12
 
13
13
  class AssetsOverSizeLimitWarning extends WebpackError {
14
14
  /**
@@ -18,7 +18,15 @@ class AssetsOverSizeLimitWarning extends WebpackError {
18
18
  */
19
19
  constructor(assetsOverSizeLimit, assetLimit) {
20
20
  const assetLists = assetsOverSizeLimit
21
- .map((asset) => `\n ${asset.name} (${formatSize(asset.size)})`)
21
+ .map((asset) => {
22
+ const largest = asset.modules
23
+ ? `\n Largest modules: ${asset.modules
24
+ .map((module) => `${module.name} (${formatSize(module.size)})`)
25
+ .join(", ")}`
26
+ : "";
27
+
28
+ return `\n ${asset.name} (${formatSize(asset.size)})${largest}`;
29
+ })
22
30
  .join("");
23
31
 
24
32
  super(`asset size limit: The following asset(s) exceed the recommended size limit (${formatSize(
@@ -0,0 +1,136 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const AsyncChunkWaterfallWarning = require("../errors/AsyncChunkWaterfallWarning");
9
+
10
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
11
+ /** @import ChunkGroup from "../ChunkGroup" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { WaterfallDetails } from "../errors/AsyncChunkWaterfallWarning" */
14
+
15
+ const PLUGIN_NAME = "AsyncChunkWaterfallsPlugin";
16
+
17
+ // Enough to name the offenders without printing the whole chunk graph.
18
+ const MAX_REPORTED_WATERFALLS = 5;
19
+
20
+ // Two levels is the shape `import()` is for — a route that loads its own data.
21
+ // Three is where the round trips start outweighing what splitting saved.
22
+ const MIN_REPORTED_DEPTH = 3;
23
+
24
+ class AsyncChunkWaterfallsPlugin {
25
+ /**
26
+ * Creates an instance of AsyncChunkWaterfallsPlugin.
27
+ * @param {PerformanceOptions} options the plugin options
28
+ */
29
+ constructor(options) {
30
+ /** @type {PerformanceOptions["hints"]} */
31
+ this.hints = options.hints;
32
+ }
33
+
34
+ /**
35
+ * Applies the plugin by registering its hooks on the compiler.
36
+ * @param {Compiler} compiler the compiler instance
37
+ * @returns {void}
38
+ */
39
+ apply(compiler) {
40
+ const hints = this.hints;
41
+
42
+ if (!hints) return;
43
+
44
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
45
+ // `afterSeal` is past the hash, which folds every message into it — a
46
+ // hint reported earlier would change the build's identity.
47
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
48
+ const { chunkGraph } = compilation;
49
+
50
+ /**
51
+ * The name to print for a group; ids exist by `afterSeal`.
52
+ * @param {ChunkGroup} group the group
53
+ * @returns {string} what to call it
54
+ */
55
+ const nameOf = (group) => {
56
+ if (group.name) return group.name;
57
+
58
+ const [chunk] = group.chunks;
59
+
60
+ return chunk && chunk.id !== null ? `${chunk.id}` : "(unnamed)";
61
+ };
62
+
63
+ // Breadth-first from the initial groups, so the depth recorded for a
64
+ // group is the fewest requests a client makes to reach it.
65
+ /** @type {Map<ChunkGroup, ChunkGroup[]>} */
66
+ const pathTo = new Map();
67
+ /** @type {ChunkGroup[]} */
68
+ const queue = [];
69
+
70
+ for (const group of compilation.chunkGroups) {
71
+ if (!group.isInitial()) continue;
72
+
73
+ pathTo.set(group, []);
74
+ queue.push(group);
75
+ }
76
+
77
+ /** @type {WaterfallDetails[]} */
78
+ const waterfalls = [];
79
+ let deepest = 0;
80
+
81
+ for (let i = 0; i < queue.length; i++) {
82
+ const group = queue[i];
83
+ const path = /** @type {ChunkGroup[]} */ (pathTo.get(group));
84
+
85
+ for (const child of group.getChildren()) {
86
+ if (pathTo.has(child)) continue;
87
+
88
+ const childPath = [...path, child];
89
+
90
+ pathTo.set(child, childPath);
91
+ queue.push(child);
92
+
93
+ if (childPath.length < MIN_REPORTED_DEPTH) continue;
94
+
95
+ // Only the end of a chain is reported: every prefix of it is a
96
+ // waterfall too, and naming them all says the same thing N times.
97
+ if (child.getNumberOfChildren() > 0) continue;
98
+
99
+ let size = 0;
100
+
101
+ for (const step of childPath) {
102
+ for (const chunk of step.chunks) {
103
+ size += chunkGraph.getChunkSize(chunk);
104
+ }
105
+ }
106
+
107
+ deepest = Math.max(deepest, childPath.length);
108
+ waterfalls.push({ chain: childPath.map(nameOf), size });
109
+ }
110
+ }
111
+
112
+ if (waterfalls.length === 0) return;
113
+
114
+ // Deepest first, then largest: the worst round-trip cost leads.
115
+ waterfalls.sort(
116
+ (a, b) => b.chain.length - a.chain.length || b.size - a.size
117
+ );
118
+
119
+ const warning = new AsyncChunkWaterfallWarning(
120
+ waterfalls.slice(0, MAX_REPORTED_WATERFALLS),
121
+ deepest
122
+ );
123
+
124
+ if (hints === "error") {
125
+ compilation.errors.push(warning);
126
+ } else if (hints === "stats") {
127
+ compilation.hints.push(warning);
128
+ } else {
129
+ compilation.warnings.push(warning);
130
+ }
131
+ });
132
+ });
133
+ }
134
+ }
135
+
136
+ module.exports = AsyncChunkWaterfallsPlugin;