@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
@@ -15,6 +15,7 @@ const SizeLimitsPlugin = require("../performance/SizeLimitsPlugin");
15
15
  const { countIterable } = require("../util/IterableHelpers");
16
16
  const {
17
17
  compareChunksById,
18
+ compareErrors,
18
19
  compareIds,
19
20
  compareLocations,
20
21
  compareModulesByIdentifier,
@@ -25,34 +26,39 @@ const {
25
26
  const formatLocation = require("../util/formatLocation");
26
27
  const { makePathsRelative, parseResource } = require("../util/identifier");
27
28
 
28
- /** @typedef {import("webpack-sources").Source} Source */
29
- /** @typedef {import("../../declarations/WebpackOptions").StatsValue} StatsValue */
30
- /** @typedef {import("./StatsFactory")} StatsFactory */
31
- /** @typedef {import("./StatsFactory").StatsFactoryContext} StatsFactoryContext */
32
- /** @typedef {import("../Chunk")} Chunk */
33
- /** @typedef {import("../Chunk").ChunkId} ChunkId */
34
- /** @typedef {import("../Chunk").ChunkName} ChunkName */
35
- /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
36
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
37
- /** @typedef {import("../ChunkGroup").OriginRecord} OriginRecord */
38
- /** @typedef {import("../Compilation")} Compilation */
39
- /** @typedef {import("../Compilation").Asset} Asset */
40
- /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
41
- /** @typedef {import("../Compilation").ExcludeModulesType} ExcludeModulesType */
42
- /** @typedef {import("../Compilation").KnownNormalizedStatsOptions} KnownNormalizedStatsOptions */
43
- /** @typedef {import("../Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
44
- /** @typedef {import("../Compiler")} Compiler */
45
- /** @typedef {import("../Dependency")} Dependency */
46
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
47
- /** @typedef {import("../Module")} Module */
48
- /** @typedef {import("../Module").NameForCondition} NameForCondition */
49
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
50
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
51
- /** @typedef {import("../ModuleProfile")} ModuleProfile */
52
- /** @typedef {import("../errors/WebpackError")} WebpackError */
53
- /** @typedef {import("../serialization/AggregateErrorSerializer").AggregateError} AggregateError */
54
- /** @typedef {import("../serialization/ErrorObjectSerializer").ErrorWithCause} ErrorWithCause */
55
- /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
29
+ /** @import { Source } from "webpack-sources" */
30
+ /** @import { StatsValue } from "../../declarations/WebpackOptions" */
31
+ /** @import StatsFactory, { StatsFactoryContext } from "./StatsFactory" */
32
+ /** @import Chunk, { ChunkId, ChunkName } from "../Chunk" */
33
+ /** @import { ModuleId } from "../ChunkGraph" */
34
+ /** @import ChunkGroup, { OriginRecord } from "../ChunkGroup" */
35
+ /**
36
+ * @import Compilation, {
37
+ * Asset,
38
+ * AssetInfo,
39
+ * ExcludeModulesType,
40
+ * KnownNormalizedStatsOptions,
41
+ * NormalizedStatsOptions
42
+ * } from "../Compilation"
43
+ */
44
+ /** @import Compiler from "../Compiler" */
45
+ /**
46
+ * @import Dependency, {
47
+ * DependencyLocation,
48
+ * ExportInfoName
49
+ * } from "../Dependency"
50
+ */
51
+ /** @import Module, { NameForCondition, BuildInfo } from "../Module" */
52
+ /** @import ModuleGraph from "../ModuleGraph" */
53
+ /** @import ModuleGraphConnection from "../ModuleGraphConnection" */
54
+ /** @import ModuleProfile from "../ModuleProfile" */
55
+ /** @import WebpackError from "../errors/WebpackError" */
56
+ /**
57
+ * @import {
58
+ * AggregateError
59
+ * } from "../serialization/AggregateErrorSerializer"
60
+ */
61
+ /** @import { ErrorWithCause } from "../serialization/ErrorObjectSerializer" */
56
62
 
57
63
  /**
58
64
  * Defines the shared type used by this module.
@@ -91,6 +97,8 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
91
97
  * @property {number=} errorsCount
92
98
  * @property {StatsError[]=} warnings
93
99
  * @property {number=} warningsCount
100
+ * @property {StatsError[]=} hints
101
+ * @property {number=} hintsCount
94
102
  * @property {StatsCompilation[]=} children
95
103
  * @property {Record<string, StatsLogging>=} logging
96
104
  * @property {number=} filteredWarningDetailsCount
@@ -834,22 +842,24 @@ const SIMPLE_EXTRACTORS = {
834
842
  }
835
843
 
836
844
  object.assetsByChunkName = {};
837
- for (const [file, chunks] of [
838
- ...compilationFileToChunks,
839
- ...compilationAuxiliaryFileToChunks
845
+ for (const fileToChunks of [
846
+ compilationFileToChunks,
847
+ compilationAuxiliaryFileToChunks
840
848
  ]) {
841
- for (const chunk of chunks) {
842
- const name = chunk.name;
843
- if (!name) continue;
844
- if (
845
- !Object.prototype.hasOwnProperty.call(
846
- object.assetsByChunkName,
847
- name
848
- )
849
- ) {
850
- object.assetsByChunkName[name] = [];
849
+ for (const [file, chunks] of fileToChunks) {
850
+ for (const chunk of chunks) {
851
+ const name = chunk.name;
852
+ if (!name) continue;
853
+ if (
854
+ !Object.prototype.hasOwnProperty.call(
855
+ object.assetsByChunkName,
856
+ name
857
+ )
858
+ ) {
859
+ object.assetsByChunkName[name] = [];
860
+ }
861
+ object.assetsByChunkName[name].push(file);
851
862
  }
852
- object.assetsByChunkName[name].push(file);
853
863
  }
854
864
  }
855
865
 
@@ -1038,6 +1048,19 @@ const SIMPLE_EXTRACTORS = {
1038
1048
  );
1039
1049
  });
1040
1050
  },
1051
+ hints: (object, compilation, context, options, factory) => {
1052
+ const { type } = context;
1053
+ // Sorted here rather than in `sortItemsWithChunkIds`, which runs before
1054
+ // the `afterSeal` and `afterEmit` producers have appended their hints.
1055
+ object.hints = factory.create(
1056
+ `${type}.hints`,
1057
+ [...compilation.hints].sort(compareErrors),
1058
+ context
1059
+ );
1060
+ },
1061
+ hintsCount: (object, compilation) => {
1062
+ object.hintsCount = countWithChildren(compilation, (c) => c.hints);
1063
+ },
1041
1064
  children: (object, compilation, context, options, factory) => {
1042
1065
  const { type } = context;
1043
1066
  object.children = factory.create(
@@ -1279,19 +1302,16 @@ const SIMPLE_EXTRACTORS = {
1279
1302
  for (const sourceType of module.getSourceTypes()) {
1280
1303
  sizes[sourceType] = module.size(sourceType);
1281
1304
  }
1282
- /** @type {KnownStatsModule} */
1283
- const statsModule = {
1284
- type: "module",
1285
- moduleType: module.type,
1286
- layer: module.layer,
1287
- size: module.size(),
1288
- sizes,
1289
- built,
1290
- codeGenerated,
1291
- buildTimeExecuted,
1292
- cached: !built && !codeGenerated
1293
- };
1294
- Object.assign(object, statsModule);
1305
+ // assign fields directly to avoid an intermediate object + copy per module
1306
+ object.type = "module";
1307
+ object.moduleType = module.type;
1308
+ object.layer = module.layer;
1309
+ object.size = module.size();
1310
+ object.sizes = sizes;
1311
+ object.built = built;
1312
+ object.codeGenerated = codeGenerated;
1313
+ object.buildTimeExecuted = buildTimeExecuted;
1314
+ object.cached = !built && !codeGenerated;
1295
1315
  if (built || codeGenerated || options.cachedModules) {
1296
1316
  Object.assign(
1297
1317
  object,
@@ -1323,42 +1343,40 @@ const SIMPLE_EXTRACTORS = {
1323
1343
  const { cacheable, notCacheableReasons } = /** @type {BuildInfo} */ (
1324
1344
  module.buildInfo
1325
1345
  );
1326
- /** @type {KnownStatsModule} */
1327
- const statsModule = {
1328
- identifier: module.identifier(),
1329
- name: module.readableIdentifier(requestShortener),
1330
- nameForCondition: module.nameForCondition(),
1331
- index: /** @type {number} */ (moduleGraph.getPreOrderIndex(module)),
1332
- preOrderIndex: /** @type {number} */ (
1333
- moduleGraph.getPreOrderIndex(module)
1334
- ),
1335
- index2: /** @type {number} */ (moduleGraph.getPostOrderIndex(module)),
1336
- postOrderIndex: /** @type {number} */ (
1337
- moduleGraph.getPostOrderIndex(module)
1338
- ),
1339
- cacheable,
1340
- notCacheableReasons:
1341
- notCacheableReasons &&
1342
- notCacheableReasons.map(
1343
- (request) =>
1344
- /** @type {string} */ (requestShortener.shorten(request))
1345
- ),
1346
- optional: module.isOptional(moduleGraph),
1347
- orphan:
1348
- !type.endsWith("module.modules[].module$visible") &&
1349
- compilation.chunkGraph.getNumberOfModuleChunks(module) === 0,
1350
- dependent: rootModules ? !rootModules.has(module) : undefined,
1351
- issuer: issuer && issuer.identifier(),
1352
- issuerName: issuer && issuer.readableIdentifier(requestShortener),
1353
- issuerPath:
1354
- issuer &&
1355
- /** @type {StatsModuleIssuer[] | undefined} */
1356
- (factory.create(`${type.slice(0, -8)}.issuerPath`, path, context)),
1357
- failed: errorsCount > 0,
1358
- errors: errorsCount,
1359
- warnings: warningsCount
1360
- };
1361
- Object.assign(object, statsModule);
1346
+ const preOrderIndex = /** @type {number} */ (
1347
+ moduleGraph.getPreOrderIndex(module)
1348
+ );
1349
+ const postOrderIndex = /** @type {number} */ (
1350
+ moduleGraph.getPostOrderIndex(module)
1351
+ );
1352
+ // assign fields directly to avoid an intermediate object + copy per module
1353
+ object.identifier = module.identifier();
1354
+ object.name = module.readableIdentifier(requestShortener);
1355
+ object.nameForCondition = module.nameForCondition();
1356
+ object.index = preOrderIndex;
1357
+ object.preOrderIndex = preOrderIndex;
1358
+ object.index2 = postOrderIndex;
1359
+ object.postOrderIndex = postOrderIndex;
1360
+ object.cacheable = cacheable;
1361
+ object.notCacheableReasons =
1362
+ notCacheableReasons &&
1363
+ notCacheableReasons.map(
1364
+ (request) => /** @type {string} */ (requestShortener.shorten(request))
1365
+ );
1366
+ object.optional = module.isOptional(moduleGraph);
1367
+ object.orphan =
1368
+ !type.endsWith("module.modules[].module$visible") &&
1369
+ compilation.chunkGraph.getNumberOfModuleChunks(module) === 0;
1370
+ object.dependent = rootModules ? !rootModules.has(module) : undefined;
1371
+ object.issuer = issuer && issuer.identifier();
1372
+ object.issuerName = issuer && issuer.readableIdentifier(requestShortener);
1373
+ object.issuerPath =
1374
+ issuer &&
1375
+ /** @type {StatsModuleIssuer[] | undefined} */
1376
+ (factory.create(`${type.slice(0, -8)}.issuerPath`, path, context));
1377
+ object.failed = errorsCount > 0;
1378
+ object.errors = errorsCount;
1379
+ object.warnings = warningsCount;
1362
1380
  if (profile) {
1363
1381
  object.profile = factory.create(
1364
1382
  `${type.slice(0, -8)}.profile`,
@@ -1470,27 +1488,24 @@ const SIMPLE_EXTRACTORS = {
1470
1488
  },
1471
1489
  profile: {
1472
1490
  _: (object, profile) => {
1473
- /** @type {KnownStatsProfile} */
1474
- const statsProfile = {
1475
- total:
1476
- profile.factory +
1477
- profile.restoring +
1478
- profile.integration +
1479
- profile.building +
1480
- profile.storing,
1481
- resolving: profile.factory,
1482
- restoring: profile.restoring,
1483
- building: profile.building,
1484
- integration: profile.integration,
1485
- storing: profile.storing,
1486
- additionalResolving: profile.additionalFactories,
1487
- additionalIntegration: profile.additionalIntegration,
1488
- // TODO remove this in webpack 6
1489
- factory: profile.factory,
1490
- // TODO remove this in webpack 6
1491
- dependencies: profile.additionalFactories
1492
- };
1493
- Object.assign(object, statsProfile);
1491
+ // assign fields directly to avoid an intermediate object + copy
1492
+ object.total =
1493
+ profile.factory +
1494
+ profile.restoring +
1495
+ profile.integration +
1496
+ profile.building +
1497
+ profile.storing;
1498
+ object.resolving = profile.factory;
1499
+ object.restoring = profile.restoring;
1500
+ object.building = profile.building;
1501
+ object.integration = profile.integration;
1502
+ object.storing = profile.storing;
1503
+ object.additionalResolving = profile.additionalFactories;
1504
+ object.additionalIntegration = profile.additionalIntegration;
1505
+ // TODO remove this in webpack 6
1506
+ object.factory = profile.factory;
1507
+ // TODO remove this in webpack 6
1508
+ object.dependencies = profile.additionalFactories;
1494
1509
  }
1495
1510
  },
1496
1511
  moduleIssuer: {
@@ -1499,12 +1514,9 @@ const SIMPLE_EXTRACTORS = {
1499
1514
  const compilation = /** @type {Compilation} */ (context.compilation);
1500
1515
  const { moduleGraph } = compilation;
1501
1516
  const profile = moduleGraph.getProfile(module);
1502
- /** @type {Partial<KnownStatsModuleIssuer>} */
1503
- const statsModuleIssuer = {
1504
- identifier: module.identifier(),
1505
- name: module.readableIdentifier(requestShortener)
1506
- };
1507
- Object.assign(object, statsModuleIssuer);
1517
+ // assign fields directly to avoid an intermediate object + copy per issuer
1518
+ object.identifier = module.identifier();
1519
+ object.name = module.readableIdentifier(requestShortener);
1508
1520
  if (profile) {
1509
1521
  object.profile = factory.create(`${type}.profile`, profile, context);
1510
1522
  }
@@ -1518,31 +1530,26 @@ const SIMPLE_EXTRACTORS = {
1518
1530
  const dep = reason.dependency;
1519
1531
  const moduleDep =
1520
1532
  dep && dep instanceof ModuleDependency ? dep : undefined;
1521
- /** @type {KnownStatsModuleReason} */
1522
- const statsModuleReason = {
1523
- moduleIdentifier: reason.originModule
1524
- ? reason.originModule.identifier()
1525
- : null,
1526
- module: reason.originModule
1527
- ? reason.originModule.readableIdentifier(requestShortener)
1528
- : null,
1529
- moduleName: reason.originModule
1530
- ? reason.originModule.readableIdentifier(requestShortener)
1531
- : null,
1532
- resolvedModuleIdentifier: reason.resolvedOriginModule
1533
- ? reason.resolvedOriginModule.identifier()
1534
- : null,
1535
- resolvedModule: reason.resolvedOriginModule
1536
- ? reason.resolvedOriginModule.readableIdentifier(requestShortener)
1537
- : null,
1538
- type: reason.dependency ? reason.dependency.type : null,
1539
- active: reason.isActive(runtime),
1540
- explanation: reason.explanation,
1541
- userRequest: (moduleDep && moduleDep.userRequest) || null
1542
- };
1543
- Object.assign(object, statsModuleReason);
1544
- if (reason.dependency) {
1545
- const locInfo = formatLocation(reason.dependency.loc);
1533
+ const { originModule, resolvedOriginModule } = reason;
1534
+ const originName = originModule
1535
+ ? originModule.readableIdentifier(requestShortener)
1536
+ : null;
1537
+ // assign fields directly to avoid an intermediate object + copy per reason
1538
+ object.moduleIdentifier = originModule ? originModule.identifier() : null;
1539
+ object.module = originName;
1540
+ object.moduleName = originName;
1541
+ object.resolvedModuleIdentifier = resolvedOriginModule
1542
+ ? resolvedOriginModule.identifier()
1543
+ : null;
1544
+ object.resolvedModule = resolvedOriginModule
1545
+ ? resolvedOriginModule.readableIdentifier(requestShortener)
1546
+ : null;
1547
+ object.type = dep ? dep.type : null;
1548
+ object.active = reason.isActive(runtime);
1549
+ object.explanation = reason.explanation;
1550
+ object.userRequest = (moduleDep && moduleDep.userRequest) || null;
1551
+ if (dep) {
1552
+ const locInfo = formatLocation(dep.loc);
1546
1553
  if (locInfo) {
1547
1554
  object.loc = locInfo;
1548
1555
  }
@@ -1561,29 +1568,26 @@ const SIMPLE_EXTRACTORS = {
1561
1568
  _: (object, chunk, { makePathsRelative, compilation: { chunkGraph } }) => {
1562
1569
  const childIdByOrder = chunk.getChildIdsByOrders(chunkGraph);
1563
1570
 
1564
- /** @type {KnownStatsChunk} */
1565
- const statsChunk = {
1566
- rendered: chunk.rendered,
1567
- initial: chunk.canBeInitial(),
1568
- entry: chunk.hasRuntime(),
1569
- recorded: AggressiveSplittingPlugin.wasChunkRecorded(chunk),
1570
- reason: chunk.chunkReason,
1571
- size: chunkGraph.getChunkModulesSize(chunk),
1572
- sizes: chunkGraph.getChunkModulesSizes(chunk),
1573
- names: chunk.name ? [chunk.name] : [],
1574
- idHints: [...chunk.idNameHints],
1575
- runtime:
1576
- chunk.runtime === undefined
1577
- ? undefined
1578
- : typeof chunk.runtime === "string"
1579
- ? [makePathsRelative(chunk.runtime)]
1580
- : Array.from(chunk.runtime.sort(), makePathsRelative),
1581
- files: [...chunk.files],
1582
- auxiliaryFiles: [...chunk.auxiliaryFiles].sort(compareIds),
1583
- hash: /** @type {string} */ (chunk.renderedHash),
1584
- childrenByOrder: childIdByOrder
1585
- };
1586
- Object.assign(object, statsChunk);
1571
+ // assign fields directly to avoid an intermediate object + copy per chunk
1572
+ object.rendered = chunk.rendered;
1573
+ object.initial = chunk.canBeInitial();
1574
+ object.entry = chunk.hasRuntime();
1575
+ object.recorded = AggressiveSplittingPlugin.wasChunkRecorded(chunk);
1576
+ object.reason = chunk.chunkReason;
1577
+ object.size = chunkGraph.getChunkModulesSize(chunk);
1578
+ object.sizes = chunkGraph.getChunkModulesSizes(chunk);
1579
+ object.names = chunk.name ? [chunk.name] : [];
1580
+ object.idHints = [...chunk.idNameHints];
1581
+ object.runtime =
1582
+ chunk.runtime === undefined
1583
+ ? undefined
1584
+ : typeof chunk.runtime === "string"
1585
+ ? [makePathsRelative(chunk.runtime)]
1586
+ : Array.from(chunk.runtime.sort(), makePathsRelative);
1587
+ object.files = [...chunk.files];
1588
+ object.auxiliaryFiles = [...chunk.auxiliaryFiles].sort(compareIds);
1589
+ object.hash = /** @type {string} */ (chunk.renderedHash);
1590
+ object.childrenByOrder = childIdByOrder;
1587
1591
  },
1588
1592
  ids: (object, chunk) => {
1589
1593
  object.id = /** @type {ChunkId} */ (chunk.id);
@@ -1660,17 +1664,16 @@ const SIMPLE_EXTRACTORS = {
1660
1664
  },
1661
1665
  chunkOrigin: {
1662
1666
  _: (object, origin, context, { requestShortener }) => {
1663
- /** @type {KnownStatsChunkOrigin} */
1664
- const statsChunkOrigin = {
1665
- module: origin.module ? origin.module.identifier() : "",
1666
- moduleIdentifier: origin.module ? origin.module.identifier() : "",
1667
- moduleName: origin.module
1668
- ? origin.module.readableIdentifier(requestShortener)
1669
- : "",
1670
- loc: formatLocation(origin.loc),
1671
- request: origin.request
1672
- };
1673
- Object.assign(object, statsChunkOrigin);
1667
+ const originModule = origin.module;
1668
+ const identifier = originModule ? originModule.identifier() : "";
1669
+ // assign fields directly to avoid an intermediate object + copy per origin
1670
+ object.module = identifier;
1671
+ object.moduleIdentifier = identifier;
1672
+ object.moduleName = originModule
1673
+ ? originModule.readableIdentifier(requestShortener)
1674
+ : "";
1675
+ object.loc = formatLocation(origin.loc);
1676
+ object.request = origin.request;
1674
1677
  },
1675
1678
  ids: (object, origin, { compilation: { chunkGraph } }) => {
1676
1679
  object.moduleId = origin.module
@@ -1691,13 +1694,16 @@ const SIMPLE_EXTRACTORS = {
1691
1694
  object.originName = origin.readableIdentifier(requestShortener);
1692
1695
  object.moduleIdentifier = module.identifier();
1693
1696
  object.moduleName = module.readableIdentifier(requestShortener);
1694
- const dependencies = [...moduleGraph.getIncomingConnections(module)]
1695
- .filter((c) => c.resolvedOriginModule === origin && c.dependency)
1696
- .map((c) => c.dependency);
1697
+ /** @type {Set<Dependency>} */
1698
+ const dependencies = new Set();
1699
+ for (const c of moduleGraph.getIncomingConnections(module)) {
1700
+ if (c.resolvedOriginModule === origin && c.dependency) {
1701
+ dependencies.add(c.dependency);
1702
+ }
1703
+ }
1697
1704
  object.dependencies = factory.create(
1698
1705
  `${type}.dependencies`,
1699
- /** @type {Dependency[]} */
1700
- ([...new Set(dependencies)]),
1706
+ [...dependencies],
1701
1707
  context
1702
1708
  );
1703
1709
  },
@@ -1749,17 +1755,50 @@ const FILTER_RESULTS = {
1749
1755
  }
1750
1756
  };
1751
1757
 
1758
+ // module sort selectors close over moduleGraph, so cache the built comparators per
1759
+ // moduleGraph (stable per compilation) instead of rebuilding them on every sort
1760
+ /** @type {WeakMap<ModuleGraph, Comparator<Module>[]>} */
1761
+ const modulesSorterCache = new WeakMap();
1762
+
1752
1763
  /** @type {Record<string, (comparators: Comparator<Module>[], context: StatsFactoryContext) => void>} */
1753
1764
  const MODULES_SORTER = {
1754
1765
  _: (comparators, { compilation: { moduleGraph } }) => {
1755
- comparators.push(
1756
- compareSelect((m) => moduleGraph.getDepth(m), compareNumbers),
1757
- compareSelect((m) => moduleGraph.getPreOrderIndex(m), compareNumbers),
1758
- compareSelect((m) => m.identifier(), compareIds)
1759
- );
1766
+ let cached = modulesSorterCache.get(moduleGraph);
1767
+ if (cached === undefined) {
1768
+ cached = [
1769
+ compareSelect((m) => moduleGraph.getDepth(m), compareNumbers),
1770
+ compareSelect((m) => moduleGraph.getPreOrderIndex(m), compareNumbers),
1771
+ compareSelect((m) => m.identifier(), compareIds)
1772
+ ];
1773
+ modulesSorterCache.set(moduleGraph, cached);
1774
+ }
1775
+ comparators.push(...cached);
1760
1776
  }
1761
1777
  };
1762
1778
 
1779
+ // reason comparators use only pure selectors, so build them once instead of per
1780
+ // module.reasons sort (which runs once per module and otherwise thrashes the caches)
1781
+ /** @type {Comparator<ModuleGraphConnection>[]} */
1782
+ const MODULE_REASONS_COMPARATORS = [
1783
+ compareSelect((x) => x.originModule, compareModulesByIdentifier),
1784
+ compareSelect((x) => x.resolvedOriginModule, compareModulesByIdentifier),
1785
+ compareSelect(
1786
+ (x) => x.dependency,
1787
+ concatComparators(
1788
+ compareSelect(
1789
+ /**
1790
+ * Handles the callback for this hook.
1791
+ * @param {Dependency} x dependency
1792
+ * @returns {DependencyLocation} location
1793
+ */
1794
+ (x) => x.loc,
1795
+ compareLocations
1796
+ ),
1797
+ compareSelect((x) => x.type, compareIds)
1798
+ )
1799
+ )
1800
+ ];
1801
+
1763
1802
  /**
1764
1803
  * @type {{
1765
1804
  * "compilation.chunks": Record<string, (comparators: Comparator<Chunk>[], context: StatsFactoryContext, options: NormalizedStatsOptions) => void>,
@@ -1782,30 +1821,8 @@ const SORTERS = {
1782
1821
  "chunk.modules": MODULES_SORTER,
1783
1822
  "module.modules": MODULES_SORTER,
1784
1823
  "module.reasons": {
1785
- _: (comparators, _context) => {
1786
- comparators.push(
1787
- compareSelect((x) => x.originModule, compareModulesByIdentifier)
1788
- );
1789
- comparators.push(
1790
- compareSelect((x) => x.resolvedOriginModule, compareModulesByIdentifier)
1791
- );
1792
- comparators.push(
1793
- compareSelect(
1794
- (x) => x.dependency,
1795
- concatComparators(
1796
- compareSelect(
1797
- /**
1798
- * Handles the callback for this hook.
1799
- * @param {Dependency} x dependency
1800
- * @returns {DependencyLocation} location
1801
- */
1802
- (x) => x.loc,
1803
- compareLocations
1804
- ),
1805
- compareSelect((x) => x.type, compareIds)
1806
- )
1807
- )
1808
- );
1824
+ _: (comparators) => {
1825
+ comparators.push(...MODULE_REASONS_COMPARATORS);
1809
1826
  }
1810
1827
  },
1811
1828
  "chunk.origins": {
@@ -2588,6 +2605,17 @@ const sortOrderRegular = (field) => {
2588
2605
  return true;
2589
2606
  };
2590
2607
 
2608
+ /**
2609
+ * Returns zero.
2610
+ * @param {EXPECTED_ANY} a first
2611
+ * @param {EXPECTED_ANY} b second
2612
+ * @returns {-1 | 0 | 1} zero
2613
+ */
2614
+ const noSort = (a, b) => 0;
2615
+
2616
+ /** @type {Map<string, (a: EXPECTED_ANY, b: EXPECTED_ANY) => 0 | 1 | -1>} */
2617
+ const sortByFieldCache = new Map();
2618
+
2591
2619
  /**
2592
2620
  * Returns comparators.
2593
2621
  * @template T
@@ -2595,29 +2623,24 @@ const sortOrderRegular = (field) => {
2595
2623
  * @returns {(a: T, b: T) => 0 | 1 | -1} comparators
2596
2624
  */
2597
2625
  const sortByField = (field) => {
2598
- if (!field) {
2599
- /**
2600
- * Returns zero.
2601
- * @param {T} a first
2602
- * @param {T} b second
2603
- * @returns {-1 | 0 | 1} zero
2604
- */
2605
- const noSort = (a, b) => 0;
2606
- return noSort;
2607
- }
2626
+ if (!field) return noSort;
2627
+
2628
+ // memoize per field: the comparator (and its selector) is pure, so building it
2629
+ // once keeps compareSelect's cache warm instead of allocating a new entry per sort
2630
+ let sortFn = sortByFieldCache.get(field);
2631
+ if (sortFn !== undefined) return sortFn;
2608
2632
 
2609
2633
  const fieldKey = normalizeFieldKey(field);
2610
2634
 
2611
- let sortFn = compareSelect((m) => m[fieldKey], compareIds);
2635
+ sortFn = compareSelect((m) => m[fieldKey], compareIds);
2612
2636
 
2613
2637
  // if a field is prefixed with a "!" the sort is reversed!
2614
- const sortIsRegular = sortOrderRegular(field);
2615
-
2616
- if (!sortIsRegular) {
2638
+ if (!sortOrderRegular(field)) {
2617
2639
  const oldSortFn = sortFn;
2618
2640
  sortFn = (a, b) => oldSortFn(b, a);
2619
2641
  }
2620
2642
 
2643
+ sortByFieldCache.set(field, sortFn);
2621
2644
  return sortFn;
2622
2645
  };
2623
2646
 
@@ -2629,13 +2652,16 @@ const sortByField = (field) => {
2629
2652
  * }} AssetSorters
2630
2653
  */
2631
2654
 
2655
+ /** @type {Comparator<Asset>} */
2656
+ const compareAssetsByName = compareSelect((asset) => asset.name, compareIds);
2657
+
2632
2658
  /** @type {AssetSorters} */
2633
2659
  const ASSET_SORTERS = {
2634
2660
  assetsSort: (comparators, context, { assetsSort }) => {
2635
2661
  comparators.push(sortByField(assetsSort));
2636
2662
  },
2637
2663
  _: (comparators) => {
2638
- comparators.push(compareSelect((a) => a.name, compareIds));
2664
+ comparators.push(compareAssetsByName);
2639
2665
  }
2640
2666
  };
2641
2667
 
@@ -2719,6 +2745,7 @@ const ITEM_NAMES = {
2719
2745
  "compilation.namedChunkGroups[]": "chunkGroup",
2720
2746
  "compilation.errors[]": "error",
2721
2747
  "compilation.warnings[]": "warning",
2748
+ "compilation.hints[]": "warning",
2722
2749
  "error.errors[]": "error",
2723
2750
  "warning.errors[]": "error",
2724
2751
  "chunk.modules[]": "module",