webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -6,11 +6,31 @@
6
6
  "use strict";
7
7
 
8
8
  /** @typedef {import("../Compiler")} Compiler */
9
+ /** @typedef {import("../logging/Logger").LogTypeEnum} LogTypeEnum */
10
+ /** @typedef {import("./DefaultStatsFactoryPlugin").ChunkId} ChunkId */
11
+ /** @typedef {import("./DefaultStatsFactoryPlugin").ChunkName} ChunkName */
12
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsAsset} KnownStatsAsset */
13
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsChunk} KnownStatsChunk */
9
14
  /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsChunkGroup} KnownStatsChunkGroup */
15
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsChunkOrigin} KnownStatsChunkOrigin */
16
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsCompilation} KnownStatsCompilation */
17
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsError} KnownStatsError */
18
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsLogging} KnownStatsLogging */
19
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsLoggingEntry} KnownStatsLoggingEntry */
20
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsModule} KnownStatsModule */
21
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsModuleIssuer} KnownStatsModuleIssuer */
22
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsModuleReason} KnownStatsModuleReason */
23
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsModuleTraceDependency} KnownStatsModuleTraceDependency */
24
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsModuleTraceItem} KnownStatsModuleTraceItem */
25
+ /** @typedef {import("./DefaultStatsFactoryPlugin").KnownStatsProfile} KnownStatsProfile */
26
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
10
27
  /** @typedef {import("./StatsPrinter")} StatsPrinter */
11
- /** @typedef {import("./StatsPrinter").KnownStatsPrinterColorFn} KnownStatsPrinterColorFn */
12
- /** @typedef {import("./StatsPrinter").KnownStatsPrinterFormaters} KnownStatsPrinterFormaters */
28
+ /** @typedef {import("./StatsPrinter").ColorFunction} ColorFunction */
29
+ /** @typedef {import("./StatsPrinter").KnownStatsPrinterColorFunctions} KnownStatsPrinterColorFunctions */
30
+ /** @typedef {import("./StatsPrinter").KnownStatsPrinterContext} KnownStatsPrinterContext */
31
+ /** @typedef {import("./StatsPrinter").KnownStatsPrinterFormatters} KnownStatsPrinterFormatters */
13
32
  /** @typedef {import("./StatsPrinter").StatsPrinterContext} StatsPrinterContext */
33
+ /** @typedef {import("./StatsPrinter").StatsPrinterContextWithExtra} StatsPrinterContextWithExtra */
14
34
 
15
35
  const DATA_URI_CONTENT_LENGTH = 16;
16
36
  const MAX_MODULE_IDENTIFIER_LENGTH = 80;
@@ -28,20 +48,21 @@ const plural = (n, singular, plural) => (n === 1 ? singular : plural);
28
48
  * @param {StatsPrinterContext} options options
29
49
  * @returns {string | undefined} text
30
50
  */
31
- const printSizes = (sizes, { formatSize = n => `${n}` }) => {
51
+ const printSizes = (sizes, { formatSize = (n) => `${n}` }) => {
32
52
  const keys = Object.keys(sizes);
33
53
  if (keys.length > 1) {
34
- return keys.map(key => `${formatSize(sizes[key])} (${key})`).join(" ");
54
+ return keys.map((key) => `${formatSize(sizes[key])} (${key})`).join(" ");
35
55
  } else if (keys.length === 1) {
36
56
  return formatSize(sizes[keys[0]]);
37
57
  }
38
58
  };
39
59
 
40
60
  /**
41
- * @param {string} resource resource
61
+ * @param {string | null} resource resource
42
62
  * @returns {string} resource name for display
43
63
  */
44
- const getResourceName = resource => {
64
+ const getResourceName = (resource) => {
65
+ if (!resource) return "";
45
66
  const dataUrl = /^data:[^,]+,/.exec(resource);
46
67
  if (!dataUrl) return resource;
47
68
 
@@ -55,11 +76,11 @@ const getResourceName = resource => {
55
76
 
56
77
  /**
57
78
  * @param {string} name module name
58
- * @returns {[string,string]} prefix and module name
79
+ * @returns {[string, string]} prefix and module name
59
80
  */
60
- const getModuleName = name => {
81
+ const getModuleName = (name) => {
61
82
  const [, prefix, resource] =
62
- /** @type {[any, string, string]} */
83
+ /** @type {[string, string, string]} */
63
84
  (/** @type {unknown} */ (/^(.*!)?([^!]*)$/.exec(name)));
64
85
 
65
86
  if (resource.length > MAX_MODULE_IDENTIFIER_LENGTH) {
@@ -79,7 +100,7 @@ const getModuleName = name => {
79
100
 
80
101
  /**
81
102
  * @param {string} str string
82
- * @param {function(string): string} fn function to apply to each line
103
+ * @param {(item: string) => string} fn function to apply to each line
83
104
  * @returns {string} joined string
84
105
  */
85
106
  const mapLines = (str, fn) => str.split("\n").map(fn).join("\n");
@@ -88,17 +109,23 @@ const mapLines = (str, fn) => str.split("\n").map(fn).join("\n");
88
109
  * @param {number} n a number
89
110
  * @returns {string} number as two digit string, leading 0
90
111
  */
91
- const twoDigit = n => (n >= 10 ? `${n}` : `0${n}`);
112
+ const twoDigit = (n) => (n >= 10 ? `${n}` : `0${n}`);
92
113
 
93
114
  /**
94
- * @param {string | number} id an id
95
- * @returns {boolean | string} is i
115
+ * @param {string | number | null} id an id
116
+ * @returns {id is string | number} is i
96
117
  */
97
- const isValidId = id => typeof id === "number" || id;
118
+ const isValidId = (id) => {
119
+ if (typeof id === "number" || id) {
120
+ return true;
121
+ }
122
+
123
+ return false;
124
+ };
98
125
 
99
126
  /**
100
127
  * @template T
101
- * @param {Array<T> | undefined} list of items
128
+ * @param {T[] | undefined} list of items
102
129
  * @param {number} count number of items to show
103
130
  * @returns {string} string representation of list
104
131
  */
@@ -111,7 +138,61 @@ const moreCount = (list, count) =>
111
138
  * @typedef {{ [P in K]-?: T[P] }} WithRequired
112
139
  */
113
140
 
114
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation">, printer: StatsPrinter) => string | undefined>} */
141
+ /**
142
+ * @template {keyof StatsPrinterContext} RequiredStatsPrinterContextKeys
143
+ * @typedef {StatsPrinterContextWithExtra & WithRequired<StatsPrinterContext, "compilation" | RequiredStatsPrinterContextKeys>} DefineStatsPrinterContext
144
+ */
145
+
146
+ /**
147
+ * @template T
148
+ * @template {keyof StatsPrinterContext} RequiredStatsPrinterContextKeys
149
+ * @typedef {(thing: Exclude<T, undefined>, context: DefineStatsPrinterContext<RequiredStatsPrinterContextKeys>, printer: StatsPrinter) => string | undefined} SimplePrinter
150
+ */
151
+
152
+ /**
153
+ * @template T
154
+ * @typedef {T extends (infer U)[] ? U : T} Unpacked
155
+ */
156
+
157
+ /**
158
+ * @template {object} O
159
+ * @template {keyof O} K
160
+ * @template {string} B
161
+ * @typedef {K extends string ? `${B}.${K}` : never} PropertyName
162
+ */
163
+
164
+ /**
165
+ * @template {object} O
166
+ * @template {keyof O} K
167
+ * @template {string} B
168
+ * @typedef {K extends string ? `${B}.${K}[]` : never} ArrayPropertyName
169
+ */
170
+
171
+ /**
172
+ * @template {object} O
173
+ * @template {string} K
174
+ * @template {string} E
175
+ * @typedef {{ [property in `${K}!`]?: SimplePrinter<O, "compilation" | E> }} Exclamation
176
+ */
177
+
178
+ /**
179
+ * @template {object} O
180
+ * @template {string} B
181
+ * @template {string} [R=B]
182
+ * @typedef {{ [K in keyof O as PropertyName<O, K, B>]?: SimplePrinter<O[K], R> } &
183
+ * { [K in keyof O as ArrayPropertyName<O, K, B>]?: Exclude<O[K], undefined> extends (infer I)[] ? SimplePrinter<I, R> : never }} Printers
184
+ */
185
+
186
+ /**
187
+ * @typedef {Printers<KnownStatsCompilation, "compilation"> &
188
+ * { ["compilation.summary!"]?: SimplePrinter<KnownStatsCompilation, "compilation"> } &
189
+ * { ["compilation.errorsInChildren!"]?: SimplePrinter<KnownStatsCompilation, "compilation"> } &
190
+ * { ["compilation.warningsInChildren!"]?: SimplePrinter<KnownStatsCompilation, "compilation"> }} CompilationSimplePrinters
191
+ */
192
+
193
+ /**
194
+ * @type {CompilationSimplePrinters}
195
+ */
115
196
  const COMPILATION_SIMPLE_PRINTERS = {
116
197
  "compilation.summary!": (
117
198
  _,
@@ -184,10 +265,11 @@ const COMPILATION_SIMPLE_PRINTERS = {
184
265
  (errorsCount === 0 && warningsCount === 0) ||
185
266
  timeMessage ||
186
267
  hashMessage
187
- )
268
+ ) {
188
269
  return `${builtAtMessage}${subjectMessage} ${statusMessage}${timeMessage}${hashMessage}`;
270
+ }
189
271
  },
190
- "compilation.filteredWarningDetailsCount": count =>
272
+ "compilation.filteredWarningDetailsCount": (count) =>
191
273
  count
192
274
  ? `${count} ${plural(
193
275
  count,
@@ -226,8 +308,12 @@ const COMPILATION_SIMPLE_PRINTERS = {
226
308
  let chunkGroups = Object.values(namedChunkGroups);
227
309
  if (entrypoints) {
228
310
  chunkGroups = chunkGroups.filter(
229
- group =>
230
- !Object.prototype.hasOwnProperty.call(entrypoints, group.name)
311
+ (group) =>
312
+ !Object.prototype.hasOwnProperty.call(
313
+ entrypoints,
314
+ /** @type {string} */
315
+ (group.name)
316
+ )
231
317
  );
232
318
  }
233
319
  return printer.print(context.type, chunkGroups, {
@@ -318,9 +404,19 @@ const COMPILATION_SIMPLE_PRINTERS = {
318
404
  }
319
405
  };
320
406
 
321
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "asset">, printer: StatsPrinter) => string | undefined>} */
407
+ /**
408
+ * @typedef {Printers<KnownStatsAsset, "asset"> &
409
+ * Printers<KnownStatsAsset["info"], "asset.info"> &
410
+ * Exclamation<KnownStatsAsset, "asset.separator", "asset"> &
411
+ * { ["asset.filteredChildren"]?: SimplePrinter<number, "asset"> } &
412
+ * { assetChunk?: SimplePrinter<ChunkId, "asset"> } &
413
+ * { assetChunkName?: SimplePrinter<ChunkName, "asset"> } &
414
+ * { assetChunkIdHint?: SimplePrinter<string, "asset"> }} AssetSimplePrinters
415
+ */
416
+
417
+ /** @type {AssetSimplePrinters} */
322
418
  const ASSET_SIMPLE_PRINTERS = {
323
- "asset.type": type => type,
419
+ "asset.type": (type) => type,
324
420
  "asset.name": (name, { formatFilename, asset: { isOverSizeLimit } }) =>
325
421
  formatFilename(name, isOverSizeLimit),
326
422
  "asset.size": (size, { asset: { isOverSizeLimit }, yellow, formatSize }) =>
@@ -339,13 +435,7 @@ const ASSET_SIMPLE_PRINTERS = {
339
435
  "asset.info.javascriptModule": (javascriptModule, { formatFlag }) =>
340
436
  javascriptModule ? formatFlag("javascript module") : undefined,
341
437
  "asset.info.sourceFilename": (sourceFilename, { formatFlag }) =>
342
- sourceFilename
343
- ? formatFlag(
344
- sourceFilename === true
345
- ? "from source file"
346
- : `from: ${sourceFilename}`
347
- )
348
- : undefined,
438
+ sourceFilename ? formatFlag(`from: ${sourceFilename}`) : undefined,
349
439
  "asset.info.development": (development, { green, formatFlag }) =>
350
440
  development ? green(formatFlag("dev")) : undefined,
351
441
  "asset.info.hotModuleReplacement": (
@@ -371,21 +461,27 @@ const ASSET_SIMPLE_PRINTERS = {
371
461
  : undefined,
372
462
 
373
463
  assetChunk: (id, { formatChunkId }) => formatChunkId(id),
374
-
375
- assetChunkName: name => name,
376
- assetChunkIdHint: name => name
464
+ assetChunkName: (name) => name || undefined,
465
+ assetChunkIdHint: (name) => name || undefined
377
466
  };
378
467
 
379
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "module">, printer: StatsPrinter) => string | undefined>} */
468
+ /**
469
+ * @typedef {Printers<KnownStatsModule, "module"> &
470
+ * Exclamation<KnownStatsModule, "module.separator", "module"> &
471
+ * { ["module.filteredChildren"]?: SimplePrinter<number, "module"> } &
472
+ * { ["module.filteredReasons"]?: SimplePrinter<number, "module"> }} ModuleSimplePrinters
473
+ */
474
+
475
+ /** @type {ModuleSimplePrinters} */
380
476
  const MODULE_SIMPLE_PRINTERS = {
381
- "module.type": type => (type !== "module" ? type : undefined),
477
+ "module.type": (type) => (type !== "module" ? type : undefined),
382
478
  "module.id": (id, { formatModuleId }) =>
383
479
  isValidId(id) ? formatModuleId(id) : undefined,
384
480
  "module.name": (name, { bold }) => {
385
481
  const [prefix, resource] = getModuleName(name);
386
482
  return `${prefix || ""}${bold(resource || "")}`;
387
483
  },
388
- "module.identifier": identifier => undefined,
484
+ "module.identifier": (_identifier) => undefined,
389
485
  "module.layer": (layer, { formatLayer }) =>
390
486
  layer ? formatLayer(layer) : undefined,
391
487
  "module.sizes": printSizes,
@@ -396,8 +492,8 @@ const MODULE_SIMPLE_PRINTERS = {
396
492
  cacheable === false ? red(formatFlag("not cacheable")) : undefined,
397
493
  "module.orphan": (orphan, { formatFlag, yellow }) =>
398
494
  orphan ? yellow(formatFlag("orphan")) : undefined,
399
- "module.runtime": (runtime, { formatFlag, yellow }) =>
400
- runtime ? yellow(formatFlag("runtime")) : undefined,
495
+ // "module.runtime": (runtime, { formatFlag, yellow }) =>
496
+ // runtime ? yellow(formatFlag("runtime")) : undefined,
401
497
  "module.optional": (optional, { formatFlag, yellow }) =>
402
498
  optional ? yellow(formatFlag("optional")) : undefined,
403
499
  "module.dependent": (dependent, { formatFlag, cyan }) =>
@@ -419,19 +515,15 @@ const MODULE_SIMPLE_PRINTERS = {
419
515
  )
420
516
  : undefined,
421
517
  "module.warnings": (warnings, { formatFlag, yellow }) =>
422
- warnings === true
423
- ? yellow(formatFlag("warnings"))
424
- : warnings
425
- ? yellow(
426
- formatFlag(`${warnings} ${plural(warnings, "warning", "warnings")}`)
427
- )
428
- : undefined,
518
+ warnings
519
+ ? yellow(
520
+ formatFlag(`${warnings} ${plural(warnings, "warning", "warnings")}`)
521
+ )
522
+ : undefined,
429
523
  "module.errors": (errors, { formatFlag, red }) =>
430
- errors === true
431
- ? red(formatFlag("errors"))
432
- : errors
433
- ? red(formatFlag(`${errors} ${plural(errors, "error", "errors")}`))
434
- : undefined,
524
+ errors
525
+ ? red(formatFlag(`${errors} ${plural(errors, "error", "errors")}`))
526
+ : undefined,
435
527
  "module.providedExports": (providedExports, { formatFlag, cyan }) => {
436
528
  if (Array.isArray(providedExports)) {
437
529
  if (providedExports.length === 0) return cyan(formatFlag("no exports"));
@@ -443,8 +535,9 @@ const MODULE_SIMPLE_PRINTERS = {
443
535
  if (usedExports === null) return cyan(formatFlag("used exports unknown"));
444
536
  if (usedExports === false) return cyan(formatFlag("module unused"));
445
537
  if (Array.isArray(usedExports)) {
446
- if (usedExports.length === 0)
538
+ if (usedExports.length === 0) {
447
539
  return cyan(formatFlag("no exports used"));
540
+ }
448
541
  const providedExportsCount = Array.isArray(module.providedExports)
449
542
  ? module.providedExports.length
450
543
  : null;
@@ -465,7 +558,7 @@ const MODULE_SIMPLE_PRINTERS = {
465
558
  yellow(optimizationBailout),
466
559
  "module.issuerPath": (issuerPath, { module }) =>
467
560
  module.profile ? undefined : "",
468
- "module.profile": profile => undefined,
561
+ "module.profile": (_profile) => undefined,
469
562
  "module.filteredModules": (filteredModules, { module: { modules } }) =>
470
563
  filteredModules > 0
471
564
  ? `${moreCount(modules, filteredModules)} nested ${plural(
@@ -493,25 +586,38 @@ const MODULE_SIMPLE_PRINTERS = {
493
586
  "module.separator!": () => "\n"
494
587
  };
495
588
 
496
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleIssuer">, printer: StatsPrinter) => string | undefined>} */
589
+ /**
590
+ * @typedef {Printers<KnownStatsModuleIssuer, "moduleIssuer"> &
591
+ * Printers<KnownStatsModuleIssuer["profile"], "moduleIssuer.profile", "moduleIssuer">} ModuleIssuerPrinters
592
+ */
593
+
594
+ /** @type {ModuleIssuerPrinters} */
497
595
  const MODULE_ISSUER_PRINTERS = {
498
596
  "moduleIssuer.id": (id, { formatModuleId }) => formatModuleId(id),
499
597
  "moduleIssuer.profile.total": (value, { formatTime }) => formatTime(value)
500
598
  };
501
599
 
502
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleReason">, printer: StatsPrinter) => string | undefined>} */
600
+ /**
601
+ * @typedef {Printers<KnownStatsModuleReason, "moduleReason"> &
602
+ * { ["moduleReason.filteredChildren"]?: SimplePrinter<number, "moduleReason"> }} ModuleReasonsPrinters
603
+ */
604
+
605
+ /** @type {ModuleReasonsPrinters} */
503
606
  const MODULE_REASON_PRINTERS = {
504
- "moduleReason.type": type => type,
607
+ "moduleReason.type": (type) => type || undefined,
505
608
  "moduleReason.userRequest": (userRequest, { cyan }) =>
506
609
  cyan(getResourceName(userRequest)),
507
610
  "moduleReason.moduleId": (moduleId, { formatModuleId }) =>
508
611
  isValidId(moduleId) ? formatModuleId(moduleId) : undefined,
509
- "moduleReason.module": (module, { magenta }) => magenta(module),
510
- "moduleReason.loc": loc => loc,
511
- "moduleReason.explanation": (explanation, { cyan }) => cyan(explanation),
612
+ "moduleReason.module": (module, { magenta }) =>
613
+ module ? magenta(module) : undefined,
614
+ "moduleReason.loc": (loc) => loc || undefined,
615
+ "moduleReason.explanation": (explanation, { cyan }) =>
616
+ explanation ? cyan(explanation) : undefined,
512
617
  "moduleReason.active": (active, { formatFlag }) =>
513
618
  active ? undefined : formatFlag("inactive"),
514
- "moduleReason.resolvedModule": (module, { magenta }) => magenta(module),
619
+ "moduleReason.resolvedModule": (module, { magenta }) =>
620
+ module ? magenta(module) : undefined,
515
621
  "moduleReason.filteredChildren": (
516
622
  filteredChildren,
517
623
  { moduleReason: { children } }
@@ -525,7 +631,9 @@ const MODULE_REASON_PRINTERS = {
525
631
  : undefined
526
632
  };
527
633
 
528
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "profile">, printer: StatsPrinter) => string | undefined>} */
634
+ /** @typedef {Printers<KnownStatsProfile, "module.profile", "profile">} ModuleProfilePrinters */
635
+
636
+ /** @type {ModuleProfilePrinters} */
529
637
  const MODULE_PROFILE_PRINTERS = {
530
638
  "module.profile.total": (value, { formatTime }) => formatTime(value),
531
639
  "module.profile.resolving": (value, { formatTime }) =>
@@ -544,11 +652,23 @@ const MODULE_PROFILE_PRINTERS = {
544
652
  value ? `additional integration: ${formatTime(value)}` : undefined
545
653
  };
546
654
 
547
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "chunkGroupKind" | "chunkGroup">, printer: StatsPrinter) => string | undefined>} */
655
+ /**
656
+ * @typedef {Exclamation<KnownStatsChunkGroup, "chunkGroup.kind", "chunkGroupKind"> &
657
+ * Exclamation<KnownStatsChunkGroup, "chunkGroup.separator", "chunkGroup"> &
658
+ * Printers<KnownStatsChunkGroup, "chunkGroup"> &
659
+ * Exclamation<KnownStatsChunkGroup, "chunkGroup.is", "chunkGroup"> &
660
+ * Printers<Exclude<KnownStatsChunkGroup["assets"], undefined>[number], "chunkGroupAsset" | "chunkGroup"> &
661
+ * { ['chunkGroupChildGroup.type']?: SimplePrinter<string, "chunkGroupAsset"> } &
662
+ * { ['chunkGroupChild.assets[]']?: SimplePrinter<string, "chunkGroupAsset"> } &
663
+ * { ['chunkGroupChild.chunks[]']?: SimplePrinter<ChunkId, "chunkGroupAsset"> } &
664
+ * { ['chunkGroupChild.name']?: SimplePrinter<ChunkName, "chunkGroupAsset"> }} ChunkGroupPrinters
665
+ */
666
+
667
+ /** @type {ChunkGroupPrinters} */
548
668
  const CHUNK_GROUP_PRINTERS = {
549
669
  "chunkGroup.kind!": (_, { chunkGroupKind }) => chunkGroupKind,
550
670
  "chunkGroup.separator!": () => "\n",
551
- "chunkGroup.name": (name, { bold }) => bold(name),
671
+ "chunkGroup.name": (name, { bold }) => (name ? bold(name) : undefined),
552
672
  "chunkGroup.isOverSizeLimit": (isOverSizeLimit, { formatFlag, yellow }) =>
553
673
  isOverSizeLimit ? yellow(formatFlag("big")) : undefined,
554
674
  "chunkGroup.assetsSize": (size, { formatSize }) =>
@@ -583,26 +703,34 @@ const CHUNK_GROUP_PRINTERS = {
583
703
  ? undefined
584
704
  : printer.print(
585
705
  context.type,
586
- Object.keys(children).map(key => ({
706
+ Object.keys(children).map((key) => ({
587
707
  type: key,
588
708
  children: children[key]
589
709
  })),
590
710
  context
591
711
  ),
592
- "chunkGroupChildGroup.type": type => `${type}:`,
712
+ "chunkGroupChildGroup.type": (type) => `${type}:`,
593
713
  "chunkGroupChild.assets[]": (file, { formatFilename }) =>
594
714
  formatFilename(file),
595
715
  "chunkGroupChild.chunks[]": (id, { formatChunkId }) => formatChunkId(id),
596
- "chunkGroupChild.name": name => (name ? `(name: ${name})` : undefined)
716
+ "chunkGroupChild.name": (name) => (name ? `(name: ${name})` : undefined)
597
717
  };
598
718
 
599
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "chunk">, printer: StatsPrinter) => string | undefined>} */
719
+ /**
720
+ * @typedef {Printers<KnownStatsChunk, "chunk"> &
721
+ * { ["chunk.childrenByOrder[].type"]: SimplePrinter<string, "chunk"> } &
722
+ * { ["chunk.childrenByOrder[].children[]"]: SimplePrinter<ChunkId, "chunk"> } &
723
+ * Exclamation<KnownStatsChunk, "chunk.separator", "chunk"> &
724
+ * Printers<KnownStatsChunkOrigin, "chunkOrigin">} ChunkPrinters
725
+ */
726
+
727
+ /** @type {ChunkPrinters} */
600
728
  const CHUNK_PRINTERS = {
601
729
  "chunk.id": (id, { formatChunkId }) => formatChunkId(id),
602
730
  "chunk.files[]": (file, { formatFilename }) => formatFilename(file),
603
- "chunk.names[]": name => name,
604
- "chunk.idHints[]": name => name,
605
- "chunk.runtime[]": name => name,
731
+ "chunk.names[]": (name) => name,
732
+ "chunk.idHints[]": (name) => name,
733
+ "chunk.runtime[]": (name) => name,
606
734
  "chunk.sizes": (sizes, context) => printSizes(sizes, context),
607
735
  "chunk.parents[]": (parents, context) =>
608
736
  context.formatChunkId(parents, "parent"),
@@ -615,13 +743,13 @@ const CHUNK_PRINTERS = {
615
743
  ? undefined
616
744
  : printer.print(
617
745
  context.type,
618
- Object.keys(childrenByOrder).map(key => ({
746
+ Object.keys(childrenByOrder).map((key) => ({
619
747
  type: key,
620
748
  children: childrenByOrder[key]
621
749
  })),
622
750
  context
623
751
  ),
624
- "chunk.childrenByOrder[].type": type => `${type}:`,
752
+ "chunk.childrenByOrder[].type": (type) => `${type}:`,
625
753
  "chunk.childrenByOrder[].children[]": (id, { formatChunkId }) =>
626
754
  isValidId(id) ? formatChunkId(id) : undefined,
627
755
  "chunk.entry": (entry, { formatFlag, yellow }) =>
@@ -643,14 +771,22 @@ const CHUNK_PRINTERS = {
643
771
  : undefined,
644
772
  "chunk.separator!": () => "\n",
645
773
 
646
- "chunkOrigin.request": request => request,
774
+ "chunkOrigin.request": (request) => request,
647
775
  "chunkOrigin.moduleId": (moduleId, { formatModuleId }) =>
648
776
  isValidId(moduleId) ? formatModuleId(moduleId) : undefined,
649
777
  "chunkOrigin.moduleName": (moduleName, { bold }) => bold(moduleName),
650
- "chunkOrigin.loc": loc => loc
778
+ "chunkOrigin.loc": (loc) => loc
651
779
  };
652
780
 
653
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "error">, printer: StatsPrinter) => string | undefined>} */
781
+ /**
782
+ * @typedef {Printers<KnownStatsError, "error"> &
783
+ * { ["error.filteredDetails"]?: SimplePrinter<number, "error"> } &
784
+ * Exclamation<KnownStatsError, "error.separator", "error">} ErrorPrinters
785
+ */
786
+
787
+ /**
788
+ * @type {ErrorPrinters}
789
+ */
654
790
  const ERROR_PRINTERS = {
655
791
  "error.compilerPath": (compilerPath, { bold }) =>
656
792
  compilerPath ? bold(`(${compilerPath})`) : undefined,
@@ -669,64 +805,89 @@ const ERROR_PRINTERS = {
669
805
  "error.message": (message, { bold, formatError }) =>
670
806
  message.includes("\u001B[") ? message : bold(formatError(message)),
671
807
  "error.details": (details, { formatError }) => formatError(details),
672
- "error.filteredDetails": filteredDetails =>
808
+ "error.filteredDetails": (filteredDetails) =>
673
809
  filteredDetails ? `+ ${filteredDetails} hidden lines` : undefined,
674
- "error.stack": stack => stack,
675
- "error.moduleTrace": moduleTrace => undefined,
810
+ "error.stack": (stack) => stack,
811
+ "error.cause": (cause, context, printer) =>
812
+ cause
813
+ ? indent(
814
+ `[cause]: ${
815
+ /** @type {string} */
816
+ (printer.print(`${context.type}.error`, cause, context))
817
+ }`,
818
+ " "
819
+ )
820
+ : undefined,
821
+ "error.moduleTrace": (_moduleTrace) => undefined,
676
822
  "error.separator!": () => "\n"
677
823
  };
678
824
 
679
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "logging">, printer: StatsPrinter) => string | undefined>} */
825
+ /**
826
+ * @typedef {Printers<KnownStatsLoggingEntry, `loggingEntry(${LogTypeEnum}).loggingEntry`> &
827
+ * { ["loggingEntry(clear).loggingEntry"]?: SimplePrinter<KnownStatsLoggingEntry, "logging"> } &
828
+ * { ["loggingEntry.trace[]"]?: SimplePrinter<Exclude<KnownStatsLoggingEntry["trace"], undefined>[number], "logging"> } &
829
+ * { loggingGroup?: SimplePrinter<KnownStatsLogging[], "logging"> } &
830
+ * Printers<KnownStatsLogging & { name: string }, `loggingGroup`> &
831
+ * Exclamation<KnownStatsLogging, "loggingGroup.separator", "loggingGroup">} LogEntryPrinters
832
+ */
833
+
834
+ /** @type {LogEntryPrinters} */
680
835
  const LOG_ENTRY_PRINTERS = {
681
836
  "loggingEntry(error).loggingEntry.message": (message, { red }) =>
682
- mapLines(message, x => `<e> ${red(x)}`),
837
+ mapLines(message, (x) => `<e> ${red(x)}`),
683
838
  "loggingEntry(warn).loggingEntry.message": (message, { yellow }) =>
684
- mapLines(message, x => `<w> ${yellow(x)}`),
839
+ mapLines(message, (x) => `<w> ${yellow(x)}`),
685
840
  "loggingEntry(info).loggingEntry.message": (message, { green }) =>
686
- mapLines(message, x => `<i> ${green(x)}`),
841
+ mapLines(message, (x) => `<i> ${green(x)}`),
687
842
  "loggingEntry(log).loggingEntry.message": (message, { bold }) =>
688
- mapLines(message, x => ` ${bold(x)}`),
689
- "loggingEntry(debug).loggingEntry.message": message =>
690
- mapLines(message, x => ` ${x}`),
691
- "loggingEntry(trace).loggingEntry.message": message =>
692
- mapLines(message, x => ` ${x}`),
843
+ mapLines(message, (x) => ` ${bold(x)}`),
844
+ "loggingEntry(debug).loggingEntry.message": (message) =>
845
+ mapLines(message, (x) => ` ${x}`),
846
+ "loggingEntry(trace).loggingEntry.message": (message) =>
847
+ mapLines(message, (x) => ` ${x}`),
693
848
  "loggingEntry(status).loggingEntry.message": (message, { magenta }) =>
694
- mapLines(message, x => `<s> ${magenta(x)}`),
849
+ mapLines(message, (x) => `<s> ${magenta(x)}`),
695
850
  "loggingEntry(profile).loggingEntry.message": (message, { magenta }) =>
696
- mapLines(message, x => `<p> ${magenta(x)}`),
851
+ mapLines(message, (x) => `<p> ${magenta(x)}`),
697
852
  "loggingEntry(profileEnd).loggingEntry.message": (message, { magenta }) =>
698
- mapLines(message, x => `</p> ${magenta(x)}`),
853
+ mapLines(message, (x) => `</p> ${magenta(x)}`),
699
854
  "loggingEntry(time).loggingEntry.message": (message, { magenta }) =>
700
- mapLines(message, x => `<t> ${magenta(x)}`),
855
+ mapLines(message, (x) => `<t> ${magenta(x)}`),
701
856
  "loggingEntry(group).loggingEntry.message": (message, { cyan }) =>
702
- mapLines(message, x => `<-> ${cyan(x)}`),
857
+ mapLines(message, (x) => `<-> ${cyan(x)}`),
703
858
  "loggingEntry(groupCollapsed).loggingEntry.message": (message, { cyan }) =>
704
- mapLines(message, x => `<+> ${cyan(x)}`),
859
+ mapLines(message, (x) => `<+> ${cyan(x)}`),
705
860
  "loggingEntry(clear).loggingEntry": () => " -------",
706
861
  "loggingEntry(groupCollapsed).loggingEntry.children": () => "",
707
- "loggingEntry.trace[]": trace =>
708
- trace ? mapLines(trace, x => `| ${x}`) : undefined,
862
+ "loggingEntry.trace[]": (trace) =>
863
+ trace ? mapLines(trace, (x) => `| ${x}`) : undefined,
709
864
 
710
- loggingGroup: loggingGroup =>
865
+ loggingGroup: (loggingGroup) =>
711
866
  loggingGroup.entries.length === 0 ? "" : undefined,
712
867
  "loggingGroup.debug": (flag, { red }) => (flag ? red("DEBUG") : undefined),
713
868
  "loggingGroup.name": (name, { bold }) => bold(`LOG from ${name}`),
714
869
  "loggingGroup.separator!": () => "\n",
715
- "loggingGroup.filteredEntries": filteredEntries =>
870
+ "loggingGroup.filteredEntries": (filteredEntries) =>
716
871
  filteredEntries > 0 ? `+ ${filteredEntries} hidden lines` : undefined
717
872
  };
718
873
 
719
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleTraceItem">, printer: StatsPrinter) => string | undefined>} */
874
+ /** @typedef {Printers<KnownStatsModuleTraceItem, "moduleTraceItem">} ModuleTraceItemPrinters */
875
+
876
+ /** @type {ModuleTraceItemPrinters} */
720
877
  const MODULE_TRACE_ITEM_PRINTERS = {
721
- "moduleTraceItem.originName": originName => originName
878
+ "moduleTraceItem.originName": (originName) => originName
722
879
  };
723
880
 
724
- /** @type {Record<string, (thing: any, context: Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleTraceDependency">, printer: StatsPrinter) => string | undefined>} */
881
+ /** @typedef {Printers<KnownStatsModuleTraceDependency, "moduleTraceDependency">} ModuleTraceDependencyPrinters */
882
+
883
+ /** @type {ModuleTraceDependencyPrinters} */
725
884
  const MODULE_TRACE_DEPENDENCY_PRINTERS = {
726
- "moduleTraceDependency.loc": loc => loc
885
+ "moduleTraceDependency.loc": (loc) => loc
727
886
  };
728
887
 
729
- /** @type {Record<string, string | function(any): string>} */
888
+ /**
889
+ * @type {Record<string, string | ((item: KnownStatsLoggingEntry) => string)>}
890
+ */
730
891
  const ITEM_NAMES = {
731
892
  "compilation.assets[]": "asset",
732
893
  "compilation.modules[]": "module",
@@ -758,11 +919,12 @@ const ITEM_NAMES = {
758
919
  "module.issuerPath[]": "moduleIssuer",
759
920
  "chunk.origins[]": "chunkOrigin",
760
921
  "chunk.modules[]": "module",
761
- "loggingGroup.entries[]": logEntry =>
922
+ "loggingGroup.entries[]": (logEntry) =>
762
923
  `loggingEntry(${logEntry.type}).loggingEntry`,
763
- "loggingEntry.children[]": logEntry =>
924
+ "loggingEntry.children[]": (logEntry) =>
764
925
  `loggingEntry(${logEntry.type}).loggingEntry`,
765
926
  "error.moduleTrace[]": "moduleTraceItem",
927
+ "error.errors[]": "error",
766
928
  "moduleTraceItem.dependencies[]": "moduleTraceDependency"
767
929
  };
768
930
 
@@ -784,6 +946,8 @@ const ERROR_PREFERRED_ORDER = [
784
946
  "separator!",
785
947
  "stack",
786
948
  "separator!",
949
+ "cause",
950
+ "separator!",
787
951
  "missing",
788
952
  "separator!",
789
953
  "moduleTrace"
@@ -958,19 +1122,19 @@ const PREFERRED_ORDERS = {
958
1122
  /** @typedef {(items: string[]) => string | undefined} SimpleItemsJoiner */
959
1123
 
960
1124
  /** @type {SimpleItemsJoiner} */
961
- const itemsJoinOneLine = items => items.filter(Boolean).join(" ");
1125
+ const itemsJoinOneLine = (items) => items.filter(Boolean).join(" ");
962
1126
  /** @type {SimpleItemsJoiner} */
963
- const itemsJoinOneLineBrackets = items =>
1127
+ const itemsJoinOneLineBrackets = (items) =>
964
1128
  items.length > 0 ? `(${items.filter(Boolean).join(" ")})` : undefined;
965
1129
  /** @type {SimpleItemsJoiner} */
966
- const itemsJoinMoreSpacing = items => items.filter(Boolean).join("\n\n");
1130
+ const itemsJoinMoreSpacing = (items) => items.filter(Boolean).join("\n\n");
967
1131
  /** @type {SimpleItemsJoiner} */
968
- const itemsJoinComma = items => items.filter(Boolean).join(", ");
1132
+ const itemsJoinComma = (items) => items.filter(Boolean).join(", ");
969
1133
  /** @type {SimpleItemsJoiner} */
970
- const itemsJoinCommaBrackets = items =>
1134
+ const itemsJoinCommaBrackets = (items) =>
971
1135
  items.length > 0 ? `(${items.filter(Boolean).join(", ")})` : undefined;
972
- /** @type {function(string): SimpleItemsJoiner} */
973
- const itemsJoinCommaBracketsWithName = name => items =>
1136
+ /** @type {(item: string) => SimpleItemsJoiner} */
1137
+ const itemsJoinCommaBracketsWithName = (name) => (items) =>
974
1138
  items.length > 0
975
1139
  ? `(${name}: ${items.filter(Boolean).join(", ")})`
976
1140
  : undefined;
@@ -999,18 +1163,18 @@ const SIMPLE_ITEMS_JOINER = {
999
1163
  "asset.auxiliaryChunkIdHints":
1000
1164
  itemsJoinCommaBracketsWithName("auxiliary id hint"),
1001
1165
  "module.chunks": itemsJoinOneLine,
1002
- "module.issuerPath": items =>
1166
+ "module.issuerPath": (items) =>
1003
1167
  items
1004
1168
  .filter(Boolean)
1005
- .map(item => `${item} ->`)
1169
+ .map((item) => `${item} ->`)
1006
1170
  .join(" "),
1007
1171
  "compilation.errors": itemsJoinMoreSpacing,
1008
1172
  "compilation.warnings": itemsJoinMoreSpacing,
1009
1173
  "compilation.logging": itemsJoinMoreSpacing,
1010
- "compilation.children": items =>
1174
+ "compilation.children": (items) =>
1011
1175
  indent(/** @type {string} */ (itemsJoinMoreSpacing(items)), " "),
1012
1176
  "moduleTraceItem.dependencies": itemsJoinOneLine,
1013
- "loggingEntry.children": items =>
1177
+ "loggingEntry.children": (items) =>
1014
1178
  indent(items.filter(Boolean).join("\n"), " ", false)
1015
1179
  };
1016
1180
 
@@ -1018,9 +1182,9 @@ const SIMPLE_ITEMS_JOINER = {
1018
1182
  * @param {Item[]} items items
1019
1183
  * @returns {string} result
1020
1184
  */
1021
- const joinOneLine = items =>
1185
+ const joinOneLine = (items) =>
1022
1186
  items
1023
- .map(item => item.content)
1187
+ .map((item) => item.content)
1024
1188
  .filter(Boolean)
1025
1189
  .join(" ");
1026
1190
 
@@ -1028,7 +1192,7 @@ const joinOneLine = items =>
1028
1192
  * @param {Item[]} items items
1029
1193
  * @returns {string} result
1030
1194
  */
1031
- const joinInBrackets = items => {
1195
+ const joinInBrackets = (items) => {
1032
1196
  const res = [];
1033
1197
  let mode = 0;
1034
1198
  for (const item of items) {
@@ -1092,7 +1256,7 @@ const joinExplicitNewLine = (items, indenter) => {
1092
1256
  let firstInLine = true;
1093
1257
  let first = true;
1094
1258
  return items
1095
- .map(item => {
1259
+ .map((item) => {
1096
1260
  if (!item || !item.content) return;
1097
1261
  let content = indent(item.content, first ? "" : indenter, !firstInLine);
1098
1262
  if (firstInLine) {
@@ -1114,10 +1278,10 @@ const joinExplicitNewLine = (items, indenter) => {
1114
1278
  * @returns {SimpleElementJoiner} joiner
1115
1279
  */
1116
1280
  const joinError =
1117
- error =>
1281
+ (error) =>
1118
1282
  /**
1119
1283
  * @param {Item[]} items items
1120
- * @param {Required<StatsPrinterContext>} ctx context
1284
+ * @param {StatsPrinterContextWithExtra} ctx context
1121
1285
  * @returns {string} result
1122
1286
  */
1123
1287
  (items, { red, yellow }) =>
@@ -1126,12 +1290,12 @@ const joinError =
1126
1290
  ""
1127
1291
  )}`;
1128
1292
 
1129
- /** @typedef {{ element: string, content: string }} Item */
1130
- /** @typedef {(items: Item[], context: Required<StatsPrinterContext>) => string} SimpleElementJoiner */
1293
+ /** @typedef {{ element: string, content: string | undefined }} Item */
1294
+ /** @typedef {(items: Item[], context: StatsPrinterContextWithExtra & Required<KnownStatsPrinterContext>) => string} SimpleElementJoiner */
1131
1295
 
1132
1296
  /** @type {Record<string, SimpleElementJoiner>} */
1133
1297
  const SIMPLE_ELEMENT_JOINERS = {
1134
- compilation: items => {
1298
+ compilation: (items) => {
1135
1299
  const result = [];
1136
1300
  let lastNeedMore = false;
1137
1301
  for (const item of items) {
@@ -1151,9 +1315,9 @@ const SIMPLE_ELEMENT_JOINERS = {
1151
1315
  if (lastNeedMore) result.push("\n");
1152
1316
  return result.join("");
1153
1317
  },
1154
- asset: items =>
1318
+ asset: (items) =>
1155
1319
  joinExplicitNewLine(
1156
- items.map(item => {
1320
+ items.map((item) => {
1157
1321
  if (
1158
1322
  (item.element === "related" || item.element === "children") &&
1159
1323
  item.content
@@ -1171,7 +1335,7 @@ const SIMPLE_ELEMENT_JOINERS = {
1171
1335
  module: (items, { module }) => {
1172
1336
  let hasName = false;
1173
1337
  return joinExplicitNewLine(
1174
- items.map(item => {
1338
+ items.map((item) => {
1175
1339
  switch (item.element) {
1176
1340
  case "id":
1177
1341
  if (module.id === module.name) {
@@ -1204,10 +1368,10 @@ const SIMPLE_ELEMENT_JOINERS = {
1204
1368
  " "
1205
1369
  );
1206
1370
  },
1207
- chunk: items => {
1371
+ chunk: (items) => {
1208
1372
  let hasEntry = false;
1209
1373
  return `chunk ${joinExplicitNewLine(
1210
- items.filter(item => {
1374
+ items.filter((item) => {
1211
1375
  switch (item.element) {
1212
1376
  case "entry":
1213
1377
  if (item.content) hasEntry = true;
@@ -1221,48 +1385,28 @@ const SIMPLE_ELEMENT_JOINERS = {
1221
1385
  " "
1222
1386
  )}`;
1223
1387
  },
1224
- "chunk.childrenByOrder[]": items => `(${joinOneLine(items)})`,
1225
- chunkGroup: items => joinExplicitNewLine(items, " "),
1388
+ "chunk.childrenByOrder[]": (items) => `(${joinOneLine(items)})`,
1389
+ chunkGroup: (items) => joinExplicitNewLine(items, " "),
1226
1390
  chunkGroupAsset: joinOneLine,
1227
1391
  chunkGroupChildGroup: joinOneLine,
1228
1392
  chunkGroupChild: joinOneLine,
1229
- // moduleReason: (items, { moduleReason }) => {
1230
- // let hasName = false;
1231
- // return joinOneLine(
1232
- // items.filter(item => {
1233
- // switch (item.element) {
1234
- // case "moduleId":
1235
- // if (moduleReason.moduleId === moduleReason.module && item.content)
1236
- // hasName = true;
1237
- // break;
1238
- // case "module":
1239
- // if (hasName) return false;
1240
- // break;
1241
- // case "resolvedModule":
1242
- // return (
1243
- // moduleReason.module !== moduleReason.resolvedModule &&
1244
- // item.content
1245
- // );
1246
- // }
1247
- // return true;
1248
- // })
1249
- // );
1250
- // },
1251
1393
  moduleReason: (items, { moduleReason }) => {
1252
1394
  let hasName = false;
1253
1395
  return joinExplicitNewLine(
1254
- items.map(item => {
1396
+ items.map((item) => {
1255
1397
  switch (item.element) {
1256
1398
  case "moduleId":
1257
- if (moduleReason.moduleId === moduleReason.module && item.content)
1399
+ if (moduleReason.moduleId === moduleReason.module && item.content) {
1258
1400
  hasName = true;
1401
+ }
1259
1402
  break;
1260
1403
  case "module":
1261
1404
  if (hasName) return false;
1262
1405
  break;
1263
1406
  case "resolvedModule":
1264
- if (moduleReason.module === moduleReason.resolvedModule)
1407
+ if (moduleReason.module === moduleReason.resolvedModule) {
1265
1408
  return false;
1409
+ }
1266
1410
  break;
1267
1411
  case "children":
1268
1412
  if (item.content) {
@@ -1280,17 +1424,18 @@ const SIMPLE_ELEMENT_JOINERS = {
1280
1424
  },
1281
1425
  "module.profile": joinInBrackets,
1282
1426
  moduleIssuer: joinOneLine,
1283
- chunkOrigin: items => `> ${joinOneLine(items)}`,
1427
+ chunkOrigin: (items) => `> ${joinOneLine(items)}`,
1284
1428
  "errors[].error": joinError(true),
1285
1429
  "warnings[].error": joinError(false),
1286
- loggingGroup: items => joinExplicitNewLine(items, "").trimEnd(),
1287
- moduleTraceItem: items => ` @ ${joinOneLine(items)}`,
1430
+ error: (items) => joinExplicitNewLine(items, ""),
1431
+ "error.errors[].error": (items) =>
1432
+ indent(`[errors]: ${joinExplicitNewLine(items, "")}`, " "),
1433
+ loggingGroup: (items) => joinExplicitNewLine(items, "").trimEnd(),
1434
+ moduleTraceItem: (items) => ` @ ${joinOneLine(items)}`,
1288
1435
  moduleTraceDependency: joinOneLine
1289
1436
  };
1290
1437
 
1291
- /** @typedef {"bold" | "yellow" | "red" | "green" | "cyan" | "magenta"} ColorNames */
1292
-
1293
- /** @type {Record<ColorNames, string>} */
1438
+ /** @type {Record<keyof KnownStatsPrinterColorFunctions, string>} */
1294
1439
  const AVAILABLE_COLORS = {
1295
1440
  bold: "\u001B[1m",
1296
1441
  yellow: "\u001B[1m\u001B[33m",
@@ -1300,7 +1445,19 @@ const AVAILABLE_COLORS = {
1300
1445
  magenta: "\u001B[1m\u001B[35m"
1301
1446
  };
1302
1447
 
1303
- /** @type {Record<string, function(any, Required<KnownStatsPrinterColorFn> & StatsPrinterContext, ...any): string>} */
1448
+ /**
1449
+ * @template T
1450
+ * @typedef {T extends [infer Head, ...infer Tail] ? Tail : undefined} Tail
1451
+ */
1452
+
1453
+ /**
1454
+ * @template {(...args: EXPECTED_ANY[]) => EXPECTED_ANY} T
1455
+ * @typedef {T extends (firstArg: EXPECTED_ANY, ...rest: infer R) => EXPECTED_ANY ? R : never} TailParameters
1456
+ */
1457
+
1458
+ /** @typedef {{ [Key in keyof KnownStatsPrinterFormatters]: (value: Parameters<NonNullable<KnownStatsPrinterFormatters[Key]>>[0], options: Required<KnownStatsPrinterColorFunctions> & StatsPrinterContextWithExtra, ...args: TailParameters<NonNullable<KnownStatsPrinterFormatters[Key]>>) => string }} AvailableFormats */
1459
+
1460
+ /** @type {AvailableFormats} */
1304
1461
  const AVAILABLE_FORMATS = {
1305
1462
  formatChunkId: (id, { yellow }, direction) => {
1306
1463
  switch (direction) {
@@ -1314,11 +1471,11 @@ const AVAILABLE_FORMATS = {
1314
1471
  return `{${yellow(id)}}`;
1315
1472
  }
1316
1473
  },
1317
- formatModuleId: id => `[${id}]`,
1474
+ formatModuleId: (id) => `[${id}]`,
1318
1475
  formatFilename: (filename, { green, yellow }, oversize) =>
1319
1476
  (oversize ? yellow : green)(filename),
1320
- formatFlag: flag => `[${flag}]`,
1321
- formatLayer: layer => `(in ${layer})`,
1477
+ formatFlag: (flag) => `[${flag}]`,
1478
+ formatLayer: (layer) => `(in ${layer})`,
1322
1479
  formatSize: require("../SizeFormatHelpers").formatSize,
1323
1480
  formatDateTime: (dateTime, { bold }) => {
1324
1481
  const d = new Date(dateTime);
@@ -1391,10 +1548,10 @@ const AVAILABLE_FORMATS = {
1391
1548
  }
1392
1549
  };
1393
1550
 
1394
- /** @typedef {function(string): string} ResultModifierFn */
1551
+ /** @typedef {(result: string) => string} ResultModifierFn */
1395
1552
  /** @type {Record<string, ResultModifierFn>} */
1396
1553
  const RESULT_MODIFIER = {
1397
- "module.modules": result => indent(result, "| ")
1554
+ "module.modules": (result) => indent(result, "| ")
1398
1555
  };
1399
1556
 
1400
1557
  /**
@@ -1403,7 +1560,7 @@ const RESULT_MODIFIER = {
1403
1560
  * @returns {string[]} result
1404
1561
  */
1405
1562
  const createOrder = (array, preferredOrder) => {
1406
- const originalArray = array.slice();
1563
+ const originalArray = [...array];
1407
1564
  /** @type {Set<string>} */
1408
1565
  const set = new Set(array);
1409
1566
  /** @type {Set<string>} */
@@ -1423,6 +1580,8 @@ const createOrder = (array, preferredOrder) => {
1423
1580
  return array;
1424
1581
  };
1425
1582
 
1583
+ const PLUGIN_NAME = "DefaultStatsPrinterPlugin";
1584
+
1426
1585
  class DefaultStatsPrinterPlugin {
1427
1586
  /**
1428
1587
  * Apply the plugin
@@ -1430,266 +1589,271 @@ class DefaultStatsPrinterPlugin {
1430
1589
  * @returns {void}
1431
1590
  */
1432
1591
  apply(compiler) {
1433
- compiler.hooks.compilation.tap("DefaultStatsPrinterPlugin", compilation => {
1434
- compilation.hooks.statsPrinter.tap(
1435
- "DefaultStatsPrinterPlugin",
1436
- (stats, options) => {
1437
- // Put colors into context
1438
- stats.hooks.print
1439
- .for("compilation")
1440
- .tap("DefaultStatsPrinterPlugin", (compilation, context) => {
1441
- for (const color of Object.keys(AVAILABLE_COLORS)) {
1442
- const name = /** @type {ColorNames} */ (color);
1443
- /** @type {string | undefined} */
1444
- let start;
1445
- if (options.colors) {
1446
- if (
1447
- typeof options.colors === "object" &&
1448
- typeof options.colors[name] === "string"
1449
- ) {
1450
- start = options.colors[name];
1451
- } else {
1452
- start = AVAILABLE_COLORS[name];
1453
- }
1454
- }
1455
- if (start) {
1456
- /**
1457
- * @param {string} str string
1458
- * @returns {string} string with color
1459
- */
1460
- context[color] = str =>
1461
- `${start}${
1462
- typeof str === "string"
1463
- ? str.replace(
1464
- /((\u001B\[39m|\u001B\[22m|\u001B\[0m)+)/g,
1465
- `$1${start}`
1466
- )
1467
- : str
1468
- }\u001B[39m\u001B[22m`;
1592
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
1593
+ compilation.hooks.statsPrinter.tap(PLUGIN_NAME, (stats, options) => {
1594
+ // Put colors into context
1595
+ stats.hooks.print
1596
+ .for("compilation")
1597
+ .tap(PLUGIN_NAME, (compilation, context) => {
1598
+ for (const color of Object.keys(AVAILABLE_COLORS)) {
1599
+ const name =
1600
+ /** @type {keyof KnownStatsPrinterColorFunctions} */
1601
+ (color);
1602
+ /** @type {string | undefined} */
1603
+ let start;
1604
+ if (options.colors) {
1605
+ if (
1606
+ typeof options.colors === "object" &&
1607
+ typeof options.colors[name] === "string"
1608
+ ) {
1609
+ start = options.colors[name];
1469
1610
  } else {
1470
- /**
1471
- * @param {string} str string
1472
- * @returns {string} str string
1473
- */
1474
- context[color] = str => str;
1611
+ start = AVAILABLE_COLORS[name];
1475
1612
  }
1476
1613
  }
1477
- for (const format of Object.keys(AVAILABLE_FORMATS)) {
1478
- context[format] =
1479
- /**
1480
- * @param {string | number} content content
1481
- * @param {...TODO} args args
1482
- * @returns {string} result
1483
- */
1484
- (content, ...args) =>
1485
- AVAILABLE_FORMATS[format](
1486
- content,
1487
- /** @type {Required<KnownStatsPrinterColorFn> & StatsPrinterContext} */
1488
- (context),
1489
- ...args
1490
- );
1614
+ if (start) {
1615
+ /** @type {ColorFunction} */
1616
+ context[color] = (str) =>
1617
+ `${start}${
1618
+ typeof str === "string"
1619
+ ? str.replace(
1620
+ // eslint-disable-next-line no-control-regex
1621
+ /((\u001B\[39m|\u001B\[22m|\u001B\[0m)+)/g,
1622
+ `$1${start}`
1623
+ )
1624
+ : str
1625
+ }\u001B[39m\u001B[22m`;
1626
+ } else {
1627
+ /**
1628
+ * @param {string} str string
1629
+ * @returns {string} str string
1630
+ */
1631
+ context[color] = (str) => str;
1491
1632
  }
1492
- context.timeReference = compilation.time;
1633
+ }
1634
+ for (const format of /** @type {(keyof KnownStatsPrinterFormatters)[]} */ (
1635
+ Object.keys(AVAILABLE_FORMATS)
1636
+ )) {
1637
+ context[format] =
1638
+ /** @type {(content: Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>[0], ...args: Tail<Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>>) => string} */
1639
+ (content, ...args) =>
1640
+ /** @type {EXPECTED_ANY} */
1641
+ (AVAILABLE_FORMATS[format])(
1642
+ content,
1643
+ /** @type {StatsPrinterContext & Required<KnownStatsPrinterColorFunctions>} */
1644
+ (context),
1645
+ ...args
1646
+ );
1647
+ }
1648
+ context.timeReference = compilation.time;
1649
+ });
1650
+
1651
+ for (const key of /** @type {(keyof CompilationSimplePrinters)[]} */ (
1652
+ Object.keys(COMPILATION_SIMPLE_PRINTERS)
1653
+ )) {
1654
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1655
+ /** @type {EXPECTED_ANY} */
1656
+ (COMPILATION_SIMPLE_PRINTERS)[key](
1657
+ obj,
1658
+ /** @type {DefineStatsPrinterContext<"compilation">} */
1659
+ (ctx),
1660
+ stats
1661
+ )
1662
+ );
1663
+ }
1664
+
1665
+ for (const key of /** @type {(keyof AssetSimplePrinters)[]} */ (
1666
+ Object.keys(ASSET_SIMPLE_PRINTERS)
1667
+ )) {
1668
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1669
+ /** @type {NonNullable<AssetSimplePrinters[keyof AssetSimplePrinters]>} */
1670
+ (ASSET_SIMPLE_PRINTERS[key])(
1671
+ obj,
1672
+ /** @type {DefineStatsPrinterContext<"asset" | "asset.info">} */
1673
+ (ctx),
1674
+ stats
1675
+ )
1676
+ );
1677
+ }
1678
+
1679
+ for (const key of /** @type {(keyof ModuleSimplePrinters)[]} */ (
1680
+ Object.keys(MODULE_SIMPLE_PRINTERS)
1681
+ )) {
1682
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1683
+ /** @type {EXPECTED_ANY} */
1684
+ (MODULE_SIMPLE_PRINTERS)[key](
1685
+ obj,
1686
+ /** @type {DefineStatsPrinterContext<"module">} */
1687
+ (ctx),
1688
+ stats
1689
+ )
1690
+ );
1691
+ }
1692
+
1693
+ for (const key of /** @type {(keyof ModuleIssuerPrinters)[]} */ (
1694
+ Object.keys(MODULE_ISSUER_PRINTERS)
1695
+ )) {
1696
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1697
+ /** @type {NonNullable<ModuleIssuerPrinters[keyof ModuleIssuerPrinters]>} */
1698
+ (MODULE_ISSUER_PRINTERS[key])(
1699
+ obj,
1700
+ /** @type {DefineStatsPrinterContext<"moduleIssuer">} */
1701
+ (ctx),
1702
+ stats
1703
+ )
1704
+ );
1705
+ }
1706
+
1707
+ for (const key of /** @type {(keyof ModuleReasonsPrinters)[]} */ (
1708
+ Object.keys(MODULE_REASON_PRINTERS)
1709
+ )) {
1710
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1711
+ /** @type {EXPECTED_ANY} */
1712
+ (MODULE_REASON_PRINTERS)[key](
1713
+ obj,
1714
+ /** @type {DefineStatsPrinterContext<"moduleReason">} */
1715
+ (ctx),
1716
+ stats
1717
+ )
1718
+ );
1719
+ }
1720
+
1721
+ for (const key of /** @type {(keyof ModuleProfilePrinters)[]} */ (
1722
+ Object.keys(MODULE_PROFILE_PRINTERS)
1723
+ )) {
1724
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1725
+ /** @type {NonNullable<ModuleProfilePrinters[keyof ModuleProfilePrinters]>} */
1726
+ (MODULE_PROFILE_PRINTERS[key])(
1727
+ obj,
1728
+ /** @type {DefineStatsPrinterContext<"profile">} */
1729
+ (ctx),
1730
+ stats
1731
+ )
1732
+ );
1733
+ }
1734
+
1735
+ for (const key of /** @type {(keyof ChunkGroupPrinters)[]} */ (
1736
+ Object.keys(CHUNK_GROUP_PRINTERS)
1737
+ )) {
1738
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1739
+ /** @type {EXPECTED_ANY} */
1740
+ (CHUNK_GROUP_PRINTERS)[key](
1741
+ obj,
1742
+ /** @type {DefineStatsPrinterContext<"chunkGroupKind" | "chunkGroup">} */
1743
+ (ctx),
1744
+ stats
1745
+ )
1746
+ );
1747
+ }
1748
+
1749
+ for (const key of /** @type {(keyof ChunkPrinters)[]} */ (
1750
+ Object.keys(CHUNK_PRINTERS)
1751
+ )) {
1752
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1753
+ /** @type {EXPECTED_ANY} */
1754
+ (CHUNK_PRINTERS)[key](
1755
+ obj,
1756
+ /** @type {DefineStatsPrinterContext<"chunk">} */
1757
+ (ctx),
1758
+ stats
1759
+ )
1760
+ );
1761
+ }
1762
+
1763
+ for (const key of /** @type {(keyof ErrorPrinters)[]} */ (
1764
+ Object.keys(ERROR_PRINTERS)
1765
+ )) {
1766
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1767
+ /** @type {EXPECTED_ANY} */
1768
+ (ERROR_PRINTERS)[key](
1769
+ obj,
1770
+ /** @type {DefineStatsPrinterContext<"error">} */
1771
+ (ctx),
1772
+ stats
1773
+ )
1774
+ );
1775
+ }
1776
+
1777
+ for (const key of /** @type {(keyof LogEntryPrinters)[]} */ (
1778
+ Object.keys(LOG_ENTRY_PRINTERS)
1779
+ )) {
1780
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1781
+ /** @type {EXPECTED_ANY} */
1782
+ (LOG_ENTRY_PRINTERS)[key](
1783
+ obj,
1784
+ /** @type {DefineStatsPrinterContext<"logging">} */
1785
+ (ctx),
1786
+ stats
1787
+ )
1788
+ );
1789
+ }
1790
+
1791
+ for (const key of /** @type {(keyof ModuleTraceDependencyPrinters)[]} */ (
1792
+ Object.keys(MODULE_TRACE_DEPENDENCY_PRINTERS)
1793
+ )) {
1794
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1795
+ /** @type {NonNullable<ModuleTraceDependencyPrinters[keyof ModuleTraceDependencyPrinters]>} */
1796
+ (MODULE_TRACE_DEPENDENCY_PRINTERS[key])(
1797
+ obj,
1798
+ /** @type {DefineStatsPrinterContext<"moduleTraceDependency">} */
1799
+ (ctx),
1800
+ stats
1801
+ )
1802
+ );
1803
+ }
1804
+
1805
+ for (const key of /** @type {(keyof ModuleTraceItemPrinters)[]} */ (
1806
+ Object.keys(MODULE_TRACE_ITEM_PRINTERS)
1807
+ )) {
1808
+ stats.hooks.print.for(key).tap(PLUGIN_NAME, (obj, ctx) =>
1809
+ /** @type {NonNullable<ModuleTraceItemPrinters[keyof ModuleTraceItemPrinters]>} */
1810
+ (MODULE_TRACE_ITEM_PRINTERS[key])(
1811
+ obj,
1812
+ /** @type {DefineStatsPrinterContext<"moduleTraceItem">} */
1813
+ (ctx),
1814
+ stats
1815
+ )
1816
+ );
1817
+ }
1818
+
1819
+ for (const key of Object.keys(PREFERRED_ORDERS)) {
1820
+ const preferredOrder = PREFERRED_ORDERS[key];
1821
+ stats.hooks.sortElements
1822
+ .for(key)
1823
+ .tap(PLUGIN_NAME, (elements, _context) => {
1824
+ createOrder(elements, preferredOrder);
1493
1825
  });
1826
+ }
1494
1827
 
1495
- for (const key of Object.keys(COMPILATION_SIMPLE_PRINTERS)) {
1496
- stats.hooks.print
1497
- .for(key)
1498
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1499
- COMPILATION_SIMPLE_PRINTERS[key](
1500
- obj,
1501
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation">} */
1502
- (ctx),
1503
- stats
1504
- )
1505
- );
1506
- }
1507
-
1508
- for (const key of Object.keys(ASSET_SIMPLE_PRINTERS)) {
1509
- stats.hooks.print
1510
- .for(key)
1511
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1512
- ASSET_SIMPLE_PRINTERS[key](
1513
- obj,
1514
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "asset">} */
1515
- (ctx),
1516
- stats
1517
- )
1518
- );
1519
- }
1520
-
1521
- for (const key of Object.keys(MODULE_SIMPLE_PRINTERS)) {
1522
- stats.hooks.print
1523
- .for(key)
1524
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1525
- MODULE_SIMPLE_PRINTERS[key](
1526
- obj,
1527
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "module">} */
1528
- (ctx),
1529
- stats
1530
- )
1531
- );
1532
- }
1533
-
1534
- for (const key of Object.keys(MODULE_ISSUER_PRINTERS)) {
1535
- stats.hooks.print
1536
- .for(key)
1537
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1538
- MODULE_ISSUER_PRINTERS[key](
1539
- obj,
1540
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleIssuer">} */
1541
- (ctx),
1542
- stats
1543
- )
1544
- );
1545
- }
1546
-
1547
- for (const key of Object.keys(MODULE_REASON_PRINTERS)) {
1548
- stats.hooks.print
1549
- .for(key)
1550
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1551
- MODULE_REASON_PRINTERS[key](
1552
- obj,
1553
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleReason">} */
1554
- (ctx),
1555
- stats
1556
- )
1557
- );
1558
- }
1559
-
1560
- for (const key of Object.keys(MODULE_PROFILE_PRINTERS)) {
1561
- stats.hooks.print
1562
- .for(key)
1563
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1564
- MODULE_PROFILE_PRINTERS[key](
1565
- obj,
1566
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "profile">} */
1567
- (ctx),
1568
- stats
1569
- )
1570
- );
1571
- }
1572
-
1573
- for (const key of Object.keys(CHUNK_GROUP_PRINTERS)) {
1574
- stats.hooks.print
1575
- .for(key)
1576
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1577
- CHUNK_GROUP_PRINTERS[key](
1578
- obj,
1579
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "chunkGroupKind" | "chunkGroup">} */
1580
- (ctx),
1581
- stats
1582
- )
1583
- );
1584
- }
1585
-
1586
- for (const key of Object.keys(CHUNK_PRINTERS)) {
1587
- stats.hooks.print
1588
- .for(key)
1589
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1590
- CHUNK_PRINTERS[key](
1591
- obj,
1592
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "chunk">} */
1593
- (ctx),
1594
- stats
1595
- )
1596
- );
1597
- }
1598
-
1599
- for (const key of Object.keys(ERROR_PRINTERS)) {
1600
- stats.hooks.print
1601
- .for(key)
1602
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1603
- ERROR_PRINTERS[key](
1604
- obj,
1605
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "error">} */
1606
- (ctx),
1607
- stats
1608
- )
1609
- );
1610
- }
1611
-
1612
- for (const key of Object.keys(LOG_ENTRY_PRINTERS)) {
1613
- stats.hooks.print
1614
- .for(key)
1615
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1616
- LOG_ENTRY_PRINTERS[key](
1617
- obj,
1618
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "logging">} */
1619
- (ctx),
1620
- stats
1621
- )
1622
- );
1623
- }
1624
-
1625
- for (const key of Object.keys(MODULE_TRACE_DEPENDENCY_PRINTERS)) {
1626
- stats.hooks.print
1627
- .for(key)
1628
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1629
- MODULE_TRACE_DEPENDENCY_PRINTERS[key](
1630
- obj,
1631
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleTraceDependency">} */
1632
- (ctx),
1633
- stats
1634
- )
1635
- );
1636
- }
1637
-
1638
- for (const key of Object.keys(MODULE_TRACE_ITEM_PRINTERS)) {
1639
- stats.hooks.print
1640
- .for(key)
1641
- .tap("DefaultStatsPrinterPlugin", (obj, ctx) =>
1642
- MODULE_TRACE_ITEM_PRINTERS[key](
1643
- obj,
1644
- /** @type {Required<KnownStatsPrinterColorFn> & Required<KnownStatsPrinterFormaters> & WithRequired<StatsPrinterContext, "type" | "compilation" | "moduleTraceItem">} */
1645
- (ctx),
1646
- stats
1647
- )
1648
- );
1649
- }
1650
-
1651
- for (const key of Object.keys(PREFERRED_ORDERS)) {
1652
- const preferredOrder = PREFERRED_ORDERS[key];
1653
- stats.hooks.sortElements
1654
- .for(key)
1655
- .tap("DefaultStatsPrinterPlugin", (elements, context) => {
1656
- createOrder(elements, preferredOrder);
1657
- });
1658
- }
1659
-
1660
- for (const key of Object.keys(ITEM_NAMES)) {
1661
- const itemName = ITEM_NAMES[key];
1662
- stats.hooks.getItemName
1663
- .for(key)
1664
- .tap(
1665
- "DefaultStatsPrinterPlugin",
1666
- typeof itemName === "string" ? () => itemName : itemName
1667
- );
1668
- }
1669
-
1670
- for (const key of Object.keys(SIMPLE_ITEMS_JOINER)) {
1671
- const joiner = SIMPLE_ITEMS_JOINER[key];
1672
- stats.hooks.printItems
1673
- .for(key)
1674
- .tap("DefaultStatsPrinterPlugin", joiner);
1675
- }
1676
-
1677
- for (const key of Object.keys(SIMPLE_ELEMENT_JOINERS)) {
1678
- const joiner = SIMPLE_ELEMENT_JOINERS[key];
1679
- stats.hooks.printElements
1680
- .for(key)
1681
- .tap("DefaultStatsPrinterPlugin", /** @type {TODO} */ (joiner));
1682
- }
1683
-
1684
- for (const key of Object.keys(RESULT_MODIFIER)) {
1685
- const modifier = RESULT_MODIFIER[key];
1686
- stats.hooks.result
1687
- .for(key)
1688
- .tap("DefaultStatsPrinterPlugin", modifier);
1689
- }
1828
+ for (const key of Object.keys(ITEM_NAMES)) {
1829
+ const itemName = ITEM_NAMES[key];
1830
+ stats.hooks.getItemName
1831
+ .for(key)
1832
+ .tap(
1833
+ PLUGIN_NAME,
1834
+ typeof itemName === "string" ? () => itemName : itemName
1835
+ );
1690
1836
  }
1691
- );
1837
+
1838
+ for (const key of Object.keys(SIMPLE_ITEMS_JOINER)) {
1839
+ const joiner = SIMPLE_ITEMS_JOINER[key];
1840
+ stats.hooks.printItems.for(key).tap(PLUGIN_NAME, joiner);
1841
+ }
1842
+
1843
+ for (const key of Object.keys(SIMPLE_ELEMENT_JOINERS)) {
1844
+ const joiner =
1845
+ /** @type {(items: Item[], context: StatsPrinterContext) => string} */
1846
+ (SIMPLE_ELEMENT_JOINERS[key]);
1847
+ stats.hooks.printElements.for(key).tap(PLUGIN_NAME, joiner);
1848
+ }
1849
+
1850
+ for (const key of Object.keys(RESULT_MODIFIER)) {
1851
+ const modifier = RESULT_MODIFIER[key];
1852
+ stats.hooks.result.for(key).tap(PLUGIN_NAME, modifier);
1853
+ }
1854
+ });
1692
1855
  });
1693
1856
  }
1694
1857
  }
1858
+
1695
1859
  module.exports = DefaultStatsPrinterPlugin;