@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -7,7 +7,7 @@
7
7
 
8
8
  const Chunk = require("../Chunk");
9
9
  const { STAGE_ADVANCED } = require("../OptimizationStages");
10
- const WebpackError = require("../WebpackError");
10
+ const WebpackError = require("../errors/WebpackError");
11
11
  const { requestToId } = require("../ids/IdHelpers");
12
12
  const { isSubset } = require("../util/SetHelpers");
13
13
  const SortableSet = require("../util/SortableSet");
@@ -32,12 +32,13 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
32
32
  /** @typedef {import("../Module")} Module */
33
33
  /** @typedef {import("../Module").SourceType} SourceType */
34
34
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
35
- /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
35
+ /** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
36
36
  /** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
37
37
  /** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
38
38
  /** @typedef {import("../util/deterministicGrouping").Sizes} Sizes */
39
39
 
40
40
  /**
41
+ * Defines the chunk filter fn callback.
41
42
  * @callback ChunkFilterFn
42
43
  * @param {Chunk} chunk
43
44
  * @returns {boolean | undefined}
@@ -49,6 +50,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
49
50
  /** @typedef {number} CountOfRequest */
50
51
 
51
52
  /**
53
+ * Defines the combine size function callback.
52
54
  * @callback CombineSizeFunction
53
55
  * @param {Size} a
54
56
  * @param {Size} b
@@ -60,6 +62,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
60
62
  /** @typedef {Record<SourceType, Size>} SplitChunksSizes */
61
63
 
62
64
  /**
65
+ * Defines the cache group source type used by this module.
63
66
  * @typedef {object} CacheGroupSource
64
67
  * @property {string} key
65
68
  * @property {Priority=} priority
@@ -75,7 +78,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
75
78
  * @property {CountOfChunk=} minChunks
76
79
  * @property {CountOfRequest=} maxAsyncRequests
77
80
  * @property {CountOfRequest=} maxInitialRequests
78
- * @property {TemplatePath=} filename
81
+ * @property {ChunkFilenameTemplate=} filename
79
82
  * @property {string=} idHint
80
83
  * @property {string=} automaticNameDelimiter
81
84
  * @property {boolean=} reuseExistingChunk
@@ -83,6 +86,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
83
86
  */
84
87
 
85
88
  /**
89
+ * Defines the cache group type used by this module.
86
90
  * @typedef {object} CacheGroup
87
91
  * @property {string} key
88
92
  * @property {Priority} priority
@@ -97,7 +101,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
97
101
  * @property {CountOfChunk} minChunks
98
102
  * @property {CountOfRequest} maxAsyncRequests
99
103
  * @property {CountOfRequest} maxInitialRequests
100
- * @property {TemplatePath=} filename
104
+ * @property {ChunkFilenameTemplate=} filename
101
105
  * @property {string} idHint
102
106
  * @property {string} automaticNameDelimiter
103
107
  * @property {boolean} reuseExistingChunk
@@ -109,6 +113,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
109
113
  */
110
114
 
111
115
  /**
116
+ * Defines the fallback cache group type used by this module.
112
117
  * @typedef {object} FallbackCacheGroup
113
118
  * @property {ChunkFilterFn} chunksFilter
114
119
  * @property {SplitChunksSizes} minSize
@@ -118,6 +123,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
118
123
  */
119
124
 
120
125
  /**
126
+ * Defines the cache groups context type used by this module.
121
127
  * @typedef {object} CacheGroupsContext
122
128
  * @property {ModuleGraph} moduleGraph
123
129
  * @property {ChunkGraph} chunkGraph
@@ -126,6 +132,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
126
132
  /** @typedef {(module: Module) => OptimizationSplitChunksCacheGroup | OptimizationSplitChunksCacheGroup[] | void} RawGetCacheGroups */
127
133
 
128
134
  /**
135
+ * Defines the get cache groups callback.
129
136
  * @callback GetCacheGroups
130
137
  * @param {Module} module
131
138
  * @param {CacheGroupsContext} context
@@ -133,6 +140,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
133
140
  */
134
141
 
135
142
  /**
143
+ * Defines the get name fn callback.
136
144
  * @callback GetNameFn
137
145
  * @param {Module} module
138
146
  * @param {Chunk[]} chunks
@@ -141,6 +149,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
141
149
  */
142
150
 
143
151
  /**
152
+ * Defines the split chunks options type used by this module.
144
153
  * @typedef {object} SplitChunksOptions
145
154
  * @property {ChunkFilterFn} chunksFilter
146
155
  * @property {DefaultSizeTypes} defaultSizeTypes
@@ -154,7 +163,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
154
163
  * @property {CountOfRequest} maxAsyncRequests
155
164
  * @property {CountOfRequest} maxInitialRequests
156
165
  * @property {boolean} hidePathInfo
157
- * @property {TemplatePath=} filename
166
+ * @property {ChunkFilenameTemplate=} filename
158
167
  * @property {string} automaticNameDelimiter
159
168
  * @property {GetCacheGroups} getCacheGroups
160
169
  * @property {GetNameFn} getName
@@ -165,6 +174,7 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
165
174
  /** @typedef {Set<Chunk>} ChunkSet */
166
175
 
167
176
  /**
177
+ * Defines the chunks info item type used by this module.
168
178
  * @typedef {object} ChunksInfoItem
169
179
  * @property {SortableSet<Module>} modules
170
180
  * @property {CacheGroup} cacheGroup
@@ -172,7 +182,6 @@ const MinMaxSizeWarning = require("./MinMaxSizeWarning");
172
182
  * @property {string=} name
173
183
  * @property {SplitChunksSizes} sizes
174
184
  * @property {ChunkSet} chunks
175
- * @property {ChunkSet} reusableChunks
176
185
  * @property {Set<bigint | Chunk>} chunksKeys
177
186
  */
178
187
 
@@ -187,6 +196,7 @@ const deterministicGroupingForModules =
187
196
  const getKeyCache = new WeakMap();
188
197
 
189
198
  /**
199
+ * Returns hashed filename.
190
200
  * @param {string} name a filename to hash
191
201
  * @param {OutputOptions} outputOptions hash function used
192
202
  * @returns {string} hashed filename
@@ -203,6 +213,7 @@ const hashFilename = (name, outputOptions) => {
203
213
  };
204
214
 
205
215
  /**
216
+ * Returns the number of requests.
206
217
  * @param {Chunk} chunk the chunk
207
218
  * @returns {CountOfRequest} the number of requests
208
219
  */
@@ -215,8 +226,8 @@ const getRequests = (chunk) => {
215
226
  };
216
227
 
217
228
  /**
229
+ * Returns result.
218
230
  * @template {object} T
219
- * @template {object} R
220
231
  * @param {T} obj obj an object
221
232
  * @param {(obj: T[keyof T], key: keyof T) => T[keyof T]} fn fn
222
233
  * @returns {T} result
@@ -235,6 +246,7 @@ const mapObject = (obj, fn) => {
235
246
  };
236
247
 
237
248
  /**
249
+ * Checks whether this object is overlap.
238
250
  * @template T
239
251
  * @param {Set<T>} a set
240
252
  * @param {Set<T>} b other set
@@ -250,6 +262,7 @@ const isOverlap = (a, b) => {
250
262
  const compareModuleIterables = compareIterables(compareModulesByIdentifier);
251
263
 
252
264
  /**
265
+ * Compares the provided values and returns their ordering.
253
266
  * @param {ChunksInfoItem} a item
254
267
  * @param {ChunksInfoItem} b item
255
268
  * @returns {number} compare result
@@ -281,22 +294,29 @@ const compareEntries = (a, b) => {
281
294
  };
282
295
 
283
296
  /**
297
+ * Initial chunk filter.
284
298
  * @param {Chunk} chunk the chunk
285
299
  * @returns {boolean} true, if the chunk is an entry chunk
286
300
  */
287
301
  const INITIAL_CHUNK_FILTER = (chunk) => chunk.canBeInitial();
288
302
  /**
303
+ * Async chunk filter.
289
304
  * @param {Chunk} chunk the chunk
290
305
  * @returns {boolean} true, if the chunk is an async chunk
291
306
  */
292
307
  const ASYNC_CHUNK_FILTER = (chunk) => !chunk.canBeInitial();
293
308
  /**
309
+ * Returns always true.
294
310
  * @param {Chunk} _chunk the chunk
295
311
  * @returns {boolean} always true
296
312
  */
297
313
  const ALL_CHUNK_FILTER = (_chunk) => true;
298
314
 
315
+ /** Placeholder until a chunk set group is filled and its signatures are written. */
316
+ const EMPTY_SIGNATURES = new Uint32Array(0);
317
+
299
318
  /**
319
+ * Returns normalized representation.
300
320
  * @param {OptimizationSplitChunksSizes | undefined} value the sizes
301
321
  * @param {DefaultSizeTypes} defaultSizeTypes the default size types
302
322
  * @returns {SplitChunksSizes} normalized representation
@@ -314,6 +334,7 @@ const normalizeSizes = (value, defaultSizeTypes) => {
314
334
  };
315
335
 
316
336
  /**
337
+ * Merges the provided values into a single result.
317
338
  * @param {...(SplitChunksSizes | undefined)} sizes the sizes
318
339
  * @returns {SplitChunksSizes} the merged sizes
319
340
  */
@@ -327,6 +348,7 @@ const mergeSizes = (...sizes) => {
327
348
  };
328
349
 
329
350
  /**
351
+ * Checks whether this object contains the size.
330
352
  * @param {SplitChunksSizes} sizes the sizes
331
353
  * @returns {boolean} true, if there are sizes > 0
332
354
  */
@@ -338,6 +360,7 @@ const hasNonZeroSizes = (sizes) => {
338
360
  };
339
361
 
340
362
  /**
363
+ * Returns the combine sizes.
341
364
  * @param {SplitChunksSizes} a first sizes
342
365
  * @param {SplitChunksSizes} b second sizes
343
366
  * @param {CombineSizeFunction} combine a function to combine sizes
@@ -360,6 +383,7 @@ const combineSizes = (a, b, combine) => {
360
383
  };
361
384
 
362
385
  /**
386
+ * Checks true if there are sizes and all existing sizes are at least minSize.
363
387
  * @param {SplitChunksSizes} sizes the sizes
364
388
  * @param {SplitChunksSizes} minSize the min sizes
365
389
  * @returns {boolean} true if there are sizes and all existing sizes are at least `minSize`
@@ -374,6 +398,7 @@ const checkMinSize = (sizes, minSize) => {
374
398
  };
375
399
 
376
400
  /**
401
+ * Checks min size reduction.
377
402
  * @param {SplitChunksSizes} sizes the sizes
378
403
  * @param {SplitChunksSizes} minSizeReduction the min sizes
379
404
  * @param {CountOfChunk} chunkCount number of chunks
@@ -391,6 +416,7 @@ const checkMinSizeReduction = (sizes, minSizeReduction, chunkCount) => {
391
416
  };
392
417
 
393
418
  /**
419
+ * Gets violating min sizes.
394
420
  * @param {SplitChunksSizes} sizes the sizes
395
421
  * @param {SplitChunksSizes} minSize the min sizes
396
422
  * @returns {undefined | SourceTypes} list of size types that are below min size
@@ -410,6 +436,7 @@ const getViolatingMinSizes = (sizes, minSize) => {
410
436
  };
411
437
 
412
438
  /**
439
+ * Returns the total size.
413
440
  * @param {SplitChunksSizes} sizes the sizes
414
441
  * @returns {Size} the total size
415
442
  */
@@ -422,6 +449,7 @@ const totalSize = (sizes) => {
422
449
  };
423
450
 
424
451
  /**
452
+ * Returns a function to get the name of the chunk.
425
453
  * @param {OptimizationSplitChunksCacheGroup["name"]} name the chunk name
426
454
  * @returns {GetNameFn | undefined} a function to get the name of the chunk
427
455
  */
@@ -435,6 +463,7 @@ const normalizeName = (name) => {
435
463
  };
436
464
 
437
465
  /**
466
+ * Normalizes chunks filter.
438
467
  * @param {OptimizationSplitChunksCacheGroup["chunks"]} chunks the chunk filter option
439
468
  * @returns {ChunkFilterFn | undefined} the chunk filter function
440
469
  */
@@ -457,6 +486,7 @@ const normalizeChunksFilter = (chunks) => {
457
486
  };
458
487
 
459
488
  /**
489
+ * Normalizes cache groups.
460
490
  * @param {undefined | GetCacheGroups | Record<string, false | string | RegExp | RawGetCacheGroups | OptimizationSplitChunksCacheGroup>} cacheGroups the cache group options
461
491
  * @param {DefaultSizeTypes} defaultSizeTypes the default size types
462
492
  * @returns {GetCacheGroups} a function to get the cache groups
@@ -517,6 +547,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
517
547
  }
518
548
  }
519
549
  /**
550
+ * Returns the matching cache groups.
520
551
  * @param {Module} module the current module
521
552
  * @param {CacheGroupsContext} context the current context
522
553
  * @returns {CacheGroupSource[]} the matching cache groups
@@ -537,6 +568,7 @@ const normalizeCacheGroups = (cacheGroups, defaultSizeTypes) => {
537
568
  /** @typedef {(module: Module, context: CacheGroupsContext) => boolean} CheckTestFn */
538
569
 
539
570
  /**
571
+ * Checks true, if the module should be selected.
540
572
  * @param {OptimizationSplitChunksCacheGroup["test"]} test test option
541
573
  * @param {Module} module the module
542
574
  * @param {CacheGroupsContext} context context object
@@ -562,6 +594,7 @@ const checkTest = (test, module, context) => {
562
594
  /** @typedef {(type: string) => boolean} CheckModuleTypeFn */
563
595
 
564
596
  /**
597
+ * Checks module type.
565
598
  * @param {OptimizationSplitChunksCacheGroup["type"]} test type option
566
599
  * @param {Module} module the module
567
600
  * @returns {boolean} true, if the module should be selected
@@ -585,6 +618,7 @@ const checkModuleType = (test, module) => {
585
618
  /** @typedef {(layer: string | null) => boolean} CheckModuleLayerFn */
586
619
 
587
620
  /**
621
+ * Checks module layer.
588
622
  * @param {OptimizationSplitChunksCacheGroup["layer"]} test type option
589
623
  * @param {Module} module the module
590
624
  * @returns {boolean} true, if the module should be selected
@@ -606,6 +640,7 @@ const checkModuleLayer = (test, module) => {
606
640
  };
607
641
 
608
642
  /**
643
+ * Creates a cache group source.
609
644
  * @param {OptimizationSplitChunksCacheGroup} options the group options
610
645
  * @param {string} key key of cache group
611
646
  * @param {DefaultSizeTypes} defaultSizeTypes the default size types
@@ -657,6 +692,7 @@ const PLUGIN_NAME = "SplitChunksPlugin";
657
692
 
658
693
  module.exports = class SplitChunksPlugin {
659
694
  /**
695
+ * Creates an instance of SplitChunksPlugin.
660
696
  * @param {OptimizationSplitChunksOptions=} options plugin options
661
697
  */
662
698
  constructor(options = {}) {
@@ -746,6 +782,7 @@ module.exports = class SplitChunksPlugin {
746
782
  }
747
783
 
748
784
  /**
785
+ * Returns the cache group (cached).
749
786
  * @param {CacheGroupSource} cacheGroupSource source
750
787
  * @returns {CacheGroup} the cache group (cached)
751
788
  */
@@ -837,7 +874,7 @@ module.exports = class SplitChunksPlugin {
837
874
  }
838
875
 
839
876
  /**
840
- * Apply the plugin
877
+ * Applies the plugin by registering its hooks on the compiler.
841
878
  * @param {Compiler} compiler the compiler instance
842
879
  * @returns {void}
843
880
  */
@@ -866,18 +903,25 @@ module.exports = class SplitChunksPlugin {
866
903
  // Give each selected chunk an index (to create strings from chunks)
867
904
  /** @type {Map<Chunk, bigint>} */
868
905
  const chunkIndexMap = new Map();
906
+ // Dense per-chunk index, folded into the 64 bit membership
907
+ // signatures that reject non-subsets in getCombinations
908
+ /** @type {Map<Chunk, number>} */
909
+ const chunkSignatureBitMap = new Map();
869
910
  const ZERO = BigInt("0");
870
911
  const ONE = BigInt("1");
871
912
  const START = ONE << BigInt("31");
872
913
  let index = START;
914
+ let denseIndex = 0;
873
915
  for (const chunk of chunks) {
874
916
  chunkIndexMap.set(
875
917
  chunk,
876
918
  index | BigInt((Math.random() * 0x7fffffff) | 0)
877
919
  );
920
+ chunkSignatureBitMap.set(chunk, denseIndex++ & 63);
878
921
  index <<= ONE;
879
922
  }
880
923
  /**
924
+ * Returns key of the chunks.
881
925
  * @param {Iterable<Chunk, undefined, undefined>} chunks list of chunks
882
926
  * @returns {bigint | Chunk} key of the chunks
883
927
  */
@@ -898,6 +942,7 @@ module.exports = class SplitChunksPlugin {
898
942
  return key;
899
943
  };
900
944
  /**
945
+ * Returns stringified key.
901
946
  * @param {bigint | Chunk} key key of the chunks
902
947
  * @returns {string} stringified key
903
948
  */
@@ -926,6 +971,7 @@ module.exports = class SplitChunksPlugin {
926
971
  });
927
972
 
928
973
  /**
974
+ * Group chunks by exports.
929
975
  * @param {Module} module the module
930
976
  * @returns {Iterable<Chunk[]>} groups of chunks with equal exports
931
977
  */
@@ -972,12 +1018,42 @@ module.exports = class SplitChunksPlugin {
972
1018
  return { chunkSetsInGraph, singleChunkSets };
973
1019
  });
974
1020
 
975
- /** @typedef {Map<CountOfChunk, ChunkSet[]>} ChunkSetsByCount */
1021
+ /**
1022
+ * Chunk sets of equal size, with a 64 bit membership signature
1023
+ * per set stored as two words at `2 * i` in `signatures`.
1024
+ * @typedef {object} ChunkSetGroup
1025
+ * @property {ChunkSet[]} sets the chunk sets
1026
+ * @property {Uint32Array} signatures two signature words per set
1027
+ */
1028
+
1029
+ /** @typedef {Map<CountOfChunk, ChunkSetGroup>} ChunkSetsByCount */
1030
+
1031
+ // holds the signature of the set currently being combined; transient
1032
+ const signatureScratch = new Uint32Array(2);
1033
+
1034
+ /**
1035
+ * Folds a chunk set into a 64 bit membership signature.
1036
+ * @param {ChunkSet} chunksSet set of chunks
1037
+ * @param {Uint32Array} out target array
1038
+ * @param {number} offset index of the first of the two words
1039
+ * @returns {void}
1040
+ */
1041
+ const writeSignature = (chunksSet, out, offset) => {
1042
+ out[offset] = 0;
1043
+ out[offset + 1] = 0;
1044
+ for (const chunk of chunksSet) {
1045
+ const bit = /** @type {number} */ (
1046
+ chunkSignatureBitMap.get(chunk)
1047
+ );
1048
+ out[offset + (bit >> 5)] |= 1 << (bit & 31);
1049
+ }
1050
+ };
976
1051
 
977
1052
  // group these set of chunks by count
978
1053
  // to allow to check less sets via isSubset
979
1054
  // (only smaller sets can be subset)
980
1055
  /**
1056
+ * Group chunk sets by count.
981
1057
  * @param {IterableIterator<ChunkSet>} chunkSets set of sets of chunks
982
1058
  * @returns {ChunkSetsByCount} map of sets of chunks by count
983
1059
  */
@@ -986,12 +1062,20 @@ module.exports = class SplitChunksPlugin {
986
1062
  const chunkSetsByCount = new Map();
987
1063
  for (const chunksSet of chunkSets) {
988
1064
  const count = chunksSet.size;
989
- let array = chunkSetsByCount.get(count);
990
- if (array === undefined) {
991
- array = [];
992
- chunkSetsByCount.set(count, array);
1065
+ let group = chunkSetsByCount.get(count);
1066
+ if (group === undefined) {
1067
+ group = { sets: [], signatures: EMPTY_SIGNATURES };
1068
+ chunkSetsByCount.set(count, group);
993
1069
  }
994
- array.push(chunksSet);
1070
+ group.sets.push(chunksSet);
1071
+ }
1072
+ for (const group of chunkSetsByCount.values()) {
1073
+ const { sets } = group;
1074
+ const signatures = new Uint32Array(sets.length * 2);
1075
+ for (let i = 0; i < sets.length; i++) {
1076
+ writeSignature(sets[i], signatures, i * 2);
1077
+ }
1078
+ group.signatures = signatures;
995
1079
  }
996
1080
  return chunkSetsByCount;
997
1081
  };
@@ -1010,6 +1094,7 @@ module.exports = class SplitChunksPlugin {
1010
1094
 
1011
1095
  // Create a list of possible combinations
1012
1096
  /**
1097
+ * Creates a get combinations.
1013
1098
  * @param {ChunkSetsInGraph} chunkSets chunk sets
1014
1099
  * @param {ChunkSet} singleChunkSets single chunks sets
1015
1100
  * @param {ChunkSetsByCount} chunkSetsByCount chunk sets by count
@@ -1036,10 +1121,24 @@ module.exports = class SplitChunksPlugin {
1036
1121
  (chunkSets.get(key));
1037
1122
  /** @type {Combinations} */
1038
1123
  const array = [chunksSet];
1039
- for (const [count, setArray] of chunkSetsByCount) {
1124
+ writeSignature(chunksSet, signatureScratch, 0);
1125
+ const selfLow = signatureScratch[0];
1126
+ const selfHigh = signatureScratch[1];
1127
+ for (const [count, group] of chunkSetsByCount) {
1040
1128
  // "equal" is not needed because they would have been merge in the first step
1041
1129
  if (count < chunksSet.size) {
1042
- for (const set of setArray) {
1130
+ const { sets, signatures } = group;
1131
+ for (let i = 0; i < sets.length; i++) {
1132
+ // a subset cannot hold a signature bit the superset lacks,
1133
+ // so this rejects nearly every candidate without touching the Set
1134
+ const offset = i * 2;
1135
+ if (
1136
+ (signatures[offset] & ~selfLow) !== 0 ||
1137
+ (signatures[offset + 1] & ~selfHigh) !== 0
1138
+ ) {
1139
+ continue;
1140
+ }
1141
+ const set = sets[i];
1043
1142
  if (isSubset(chunksSet, set)) {
1044
1143
  array.push(set);
1045
1144
  }
@@ -1066,6 +1165,7 @@ module.exports = class SplitChunksPlugin {
1066
1165
  });
1067
1166
 
1068
1167
  /**
1168
+ * Returns combinations by key.
1069
1169
  * @param {bigint | Chunk} key key
1070
1170
  * @returns {Combinations} combinations by key
1071
1171
  */
@@ -1081,6 +1181,7 @@ module.exports = class SplitChunksPlugin {
1081
1181
  );
1082
1182
  });
1083
1183
  /**
1184
+ * Gets exports combinations.
1084
1185
  * @param {bigint | Chunk} key key
1085
1186
  * @returns {Combinations} exports combinations by key
1086
1187
  */
@@ -1088,6 +1189,7 @@ module.exports = class SplitChunksPlugin {
1088
1189
  getExportsCombinationsFactory()(key);
1089
1190
 
1090
1191
  /**
1192
+ * Defines the selected chunks result type used by this module.
1091
1193
  * @typedef {object} SelectedChunksResult
1092
1194
  * @property {Chunk[]} chunks the list of chunks
1093
1195
  * @property {bigint | Chunk} key a key of the list
@@ -1143,7 +1245,33 @@ module.exports = class SplitChunksPlugin {
1143
1245
  /** @type {Map<string, ChunksInfoItem>} */
1144
1246
  const chunksInfoMap = new Map();
1145
1247
 
1248
+ // The unnamed key is derived only from cache group and chunk set, so it
1249
+ // repeats for every module sharing that pair — build the string once
1250
+ /** @type {Map<CacheGroup, Map<bigint | Chunk, string>>} */
1251
+ const unnamedKeyCache = new Map();
1252
+
1253
+ /**
1254
+ * Returns the chunksInfoMap key for a cache group and chunk set.
1255
+ * @param {CacheGroup} cacheGroup the current cache group
1256
+ * @param {bigint | Chunk} selectedChunksKey a key of selectedChunks
1257
+ * @returns {string} key into chunksInfoMap
1258
+ */
1259
+ const getUnnamedKey = (cacheGroup, selectedChunksKey) => {
1260
+ let byChunksKey = unnamedKeyCache.get(cacheGroup);
1261
+ if (byChunksKey === undefined) {
1262
+ byChunksKey = new Map();
1263
+ unnamedKeyCache.set(cacheGroup, byChunksKey);
1264
+ }
1265
+ let key = byChunksKey.get(selectedChunksKey);
1266
+ if (key === undefined) {
1267
+ key = `${cacheGroup.key} chunks:${keyToString(selectedChunksKey)}`;
1268
+ byChunksKey.set(selectedChunksKey, key);
1269
+ }
1270
+ return key;
1271
+ };
1272
+
1146
1273
  /**
1274
+ * Adds module to chunks info map.
1147
1275
  * @param {CacheGroup} cacheGroup the current cache group
1148
1276
  * @param {number} cacheGroupIndex the index of the cache group of ordering
1149
1277
  * @param {Chunk[]} selectedChunks chunks selected for this module
@@ -1225,11 +1353,9 @@ module.exports = class SplitChunksPlugin {
1225
1353
  // When it has a name we use the name as key
1226
1354
  // Otherwise we create the key from chunks and cache group key
1227
1355
  // This automatically merges equal names
1228
- const key =
1229
- cacheGroup.key +
1230
- (name
1231
- ? ` name:${name}`
1232
- : ` chunks:${keyToString(selectedChunksKey)}`);
1356
+ const key = name
1357
+ ? `${cacheGroup.key} name:${name}`
1358
+ : getUnnamedKey(cacheGroup, selectedChunksKey);
1233
1359
  // Add module to maps
1234
1360
  let info = chunksInfoMap.get(key);
1235
1361
  if (info === undefined) {
@@ -1245,7 +1371,6 @@ module.exports = class SplitChunksPlugin {
1245
1371
  name,
1246
1372
  sizes: {},
1247
1373
  chunks: new Set(),
1248
- reusableChunks: new Set(),
1249
1374
  chunksKeys: new Set()
1250
1375
  })
1251
1376
  );
@@ -1271,6 +1396,35 @@ module.exports = class SplitChunksPlugin {
1271
1396
  chunkGraph
1272
1397
  };
1273
1398
 
1399
+ /**
1400
+ * Returns combinations of the chunks the module is in.
1401
+ * @param {Module} module the module
1402
+ * @returns {Combinations} chunk combinations
1403
+ */
1404
+ const computeCombinations = (module) =>
1405
+ getCombinations(getKey(chunkGraph.getModuleChunksIterable(module)));
1406
+
1407
+ /**
1408
+ * Returns combinations of the module's chunks grouped by used exports.
1409
+ * @param {Module} module the module
1410
+ * @returns {Set<ChunkSet | Chunk>} chunk combinations
1411
+ */
1412
+ const computeCombinationsByUsedExports = (module) => {
1413
+ // fill the groupedByExportsMap
1414
+ getExportsChunkSetsInGraph();
1415
+ /** @type {Set<ChunkSet | Chunk>} */
1416
+ const set = new Set();
1417
+ const groupedByUsedExports =
1418
+ /** @type {Iterable<Chunk[]>} */
1419
+ (groupedByExportsMap.get(module));
1420
+ for (const chunks of groupedByUsedExports) {
1421
+ for (const comb of getExportsCombinations(getKey(chunks))) {
1422
+ set.add(comb);
1423
+ }
1424
+ }
1425
+ return set;
1426
+ };
1427
+
1274
1428
  logger.timeEnd("prepare");
1275
1429
 
1276
1430
  logger.time("modules");
@@ -1283,38 +1437,29 @@ module.exports = class SplitChunksPlugin {
1283
1437
  continue;
1284
1438
  }
1285
1439
 
1286
- // Prepare some values (usedExports = false)
1287
- const getCombs = memoize(() => {
1288
- const chunks = chunkGraph.getModuleChunksIterable(module);
1289
- const chunksKey = getKey(chunks);
1290
- return getCombinations(chunksKey);
1291
- });
1292
-
1293
- // Prepare some values (usedExports = true)
1294
- const getCombsByUsedExports = memoize(() => {
1295
- // fill the groupedByExportsMap
1296
- getExportsChunkSetsInGraph();
1297
- /** @type {Set<ChunkSet | Chunk>} */
1298
- const set = new Set();
1299
- const groupedByUsedExports =
1300
- /** @type {Iterable<Chunk[]>} */
1301
- (groupedByExportsMap.get(module));
1302
- for (const chunks of groupedByUsedExports) {
1303
- const chunksKey = getKey(chunks);
1304
- for (const comb of getExportsCombinations(chunksKey)) {
1305
- set.add(comb);
1306
- }
1307
- }
1308
- return set;
1309
- });
1440
+ // Computed at most once per module, on first use by a cache group
1441
+ /** @type {Combinations | undefined} */
1442
+ let combsCache;
1443
+ /** @type {Set<ChunkSet | Chunk> | undefined} */
1444
+ let combsByUsedExportsCache;
1310
1445
 
1311
1446
  let cacheGroupIndex = 0;
1312
1447
  for (const cacheGroupSource of cacheGroups) {
1313
1448
  const cacheGroup = this._getCacheGroup(cacheGroupSource);
1314
1449
 
1315
- const combs = cacheGroup.usedExports
1316
- ? getCombsByUsedExports()
1317
- : getCombs();
1450
+ let combs;
1451
+ if (cacheGroup.usedExports) {
1452
+ if (combsByUsedExportsCache === undefined) {
1453
+ combsByUsedExportsCache =
1454
+ computeCombinationsByUsedExports(module);
1455
+ }
1456
+ combs = combsByUsedExportsCache;
1457
+ } else {
1458
+ if (combsCache === undefined) {
1459
+ combsCache = computeCombinations(module);
1460
+ }
1461
+ combs = combsCache;
1462
+ }
1318
1463
  // For all combination of chunk selection
1319
1464
  for (const chunkCombination of combs) {
1320
1465
  // Break if minimum number of chunks is not reached
@@ -1346,6 +1491,7 @@ module.exports = class SplitChunksPlugin {
1346
1491
  logger.time("queue");
1347
1492
 
1348
1493
  /**
1494
+ * Removes modules with source type.
1349
1495
  * @param {ChunksInfoItem} info entry
1350
1496
  * @param {SourceTypes} sourceTypes source types to be removed
1351
1497
  */
@@ -1362,6 +1508,7 @@ module.exports = class SplitChunksPlugin {
1362
1508
  };
1363
1509
 
1364
1510
  /**
1511
+ * Removes min size violating modules.
1365
1512
  * @param {ChunksInfoItem} info entry
1366
1513
  * @returns {boolean} true, if entry become empty
1367
1514
  */
@@ -1392,6 +1539,7 @@ module.exports = class SplitChunksPlugin {
1392
1539
  }
1393
1540
 
1394
1541
  /**
1542
+ * Defines the max size queue item type used by this module.
1395
1543
  * @typedef {object} MaxSizeQueueItem
1396
1544
  * @property {SplitChunksSizes} minSize
1397
1545
  * @property {SplitChunksSizes} maxAsyncSize
@@ -1529,12 +1677,14 @@ module.exports = class SplitChunksPlugin {
1529
1677
  }
1530
1678
  if (usedChunks.size >= item.cacheGroup.minChunks) {
1531
1679
  const chunksArr = [...usedChunks];
1680
+ // invariant across the module loop below
1681
+ const usedChunksKey = getKey(usedChunks);
1532
1682
  for (const module of item.modules) {
1533
1683
  addModuleToChunksInfoMap(
1534
1684
  item.cacheGroup,
1535
1685
  item.cacheGroupIndex,
1536
1686
  chunksArr,
1537
- getKey(usedChunks),
1687
+ usedChunksKey,
1538
1688
  module
1539
1689
  );
1540
1690
  }