webpack 5.112.0 → 5.112.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 (263) hide show
  1. package/bin/webpack.js +13 -7
  2. package/lib/Compilation.js +152 -60
  3. package/lib/Compiler.js +12 -25
  4. package/lib/asset/AssetBytesGenerator.js +14 -6
  5. package/lib/asset/AssetBytesParser.js +10 -8
  6. package/lib/asset/AssetGenerator.js +36 -48
  7. package/lib/asset/AssetModule.js +11 -0
  8. package/lib/asset/AssetModulesPlugin.js +5 -4
  9. package/lib/asset/AssetParser.js +8 -8
  10. package/lib/asset/AssetSourceGenerator.js +16 -8
  11. package/lib/asset/AssetSourceParser.js +10 -8
  12. package/lib/asset/WebManifestGenerator.js +11 -6
  13. package/lib/asset/WebManifestParser.js +3 -3
  14. package/lib/async-modules/AsyncModuleHelpers.js +8 -2
  15. package/lib/async-modules/InferAsyncModulesPlugin.js +7 -2
  16. package/lib/cache/CacheFacade.js +1 -1
  17. package/lib/cache/PackFileCacheStrategy.js +6 -10
  18. package/lib/cache/ResolverCachePlugin.js +58 -8
  19. package/lib/config/WebpackOptionsApply.js +8 -28
  20. package/lib/config/cli.js +9 -6
  21. package/lib/config/defaults.js +24 -13
  22. package/lib/config/getClaimedAssetTypes.js +2 -2
  23. package/lib/config/target.js +1 -1
  24. package/lib/context/ContextModule.js +1 -1
  25. package/lib/context/ContextModuleFactory.js +1 -1
  26. package/lib/context/ContextReplacementPlugin.js +3 -9
  27. package/lib/css/CssGenerator.js +40 -37
  28. package/lib/css/CssModule.js +10 -0
  29. package/lib/css/CssModulesPlugin.js +2 -2
  30. package/lib/css/CssParser.js +33 -32
  31. package/lib/css/conventions.js +1 -1
  32. package/lib/css/data.js +224 -219
  33. package/lib/css/syntax-parser.js +1159 -298
  34. package/lib/css/syntax-printer.js +90 -35
  35. package/lib/debug/ProfilingPlugin.js +65 -43
  36. package/lib/define/DefinePlugin.js +10 -15
  37. package/lib/define/DotenvPlugin.js +10 -6
  38. package/lib/define/EnvironmentPlugin.js +4 -2
  39. package/lib/dependencies/amd/AMDDefineDependencyParserPlugin.js +1 -2
  40. package/lib/dependencies/amd/AMDRequireDependenciesBlockParserPlugin.js +4 -1
  41. package/lib/dependencies/commonjs/CommonJsExportRequireDependency.js +1 -4
  42. package/lib/dependencies/commonjs/CommonJsExportsParserPlugin.js +18 -33
  43. package/lib/dependencies/commonjs/CommonJsImportsParserPlugin.js +1 -3
  44. package/lib/dependencies/commonjs/CommonJsObjectExportDependency.js +4 -4
  45. package/lib/dependencies/commonjs/CommonJsPlugin.js +2 -5
  46. package/lib/dependencies/commonjs/RequireEnsureDependenciesBlockParserPlugin.js +4 -1
  47. package/lib/dependencies/context/ImportMetaContextDependencyParserPlugin.js +1 -2
  48. package/lib/dependencies/context/ImportMetaGlobDependencyParserPlugin.js +4 -7
  49. package/lib/dependencies/context/ImportMetaGlobHelpers.js +8 -10
  50. package/lib/dependencies/core/CachedConstDependency.js +9 -6
  51. package/lib/dependencies/css/CssIcssExportDependency.js +6 -7
  52. package/lib/dependencies/css/CssIcssImportDependency.js +1 -3
  53. package/lib/dependencies/css/CssUrlDependency.js +2 -6
  54. package/lib/dependencies/esm/ESMDetectionParserPlugin.js +2 -4
  55. package/lib/dependencies/esm/ESMExportExpressionDependency.js +2 -2
  56. package/lib/dependencies/esm/ESMExportImportedSpecifierDependency.js +16 -18
  57. package/lib/dependencies/esm/ESMExportSpecifierDependency.js +20 -3
  58. package/lib/dependencies/esm/ESMExports.js +2 -10
  59. package/lib/dependencies/esm/ESMImportDependency.js +17 -2
  60. package/lib/dependencies/esm/ESMImportDependencyParserPlugin.js +6 -17
  61. package/lib/dependencies/esm/ESMImportGuard.js +11 -23
  62. package/lib/dependencies/esm/ESMImportSideEffectDependency.js +1 -1
  63. package/lib/dependencies/esm/ESMImportSpecifierDependency.js +4 -1
  64. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  65. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  66. package/lib/dependencies/esm/ESMModulesPlugin.js +1 -3
  67. package/lib/dependencies/esm/TopLevelAwaitDependency.js +1 -8
  68. package/lib/dependencies/helpers/DynamicExports.js +4 -6
  69. package/lib/dependencies/html/HtmlEntryDependency.js +5 -14
  70. package/lib/dependencies/html/HtmlInlineHtmlDependency.js +1 -4
  71. package/lib/dependencies/html/HtmlInlineScriptDependency.js +2 -6
  72. package/lib/dependencies/html/HtmlInlineStyleDependency.js +1 -4
  73. package/lib/dependencies/import/ImportParserPlugin.js +3 -6
  74. package/lib/dependencies/import-meta/ImportMetaPlugin.js +4 -6
  75. package/lib/dependencies/url/URLParserPlugin.js +1 -1
  76. package/lib/dependencies/worker/WorkerAndWorkletPlugin.js +51 -20
  77. package/lib/devtool/ModuleFilenameHelpers.js +1 -1
  78. package/lib/devtool/SourceMapDevToolPlugin.js +1 -1
  79. package/lib/dll/DelegatedModule.js +3 -3
  80. package/lib/dll/DllModule.js +3 -1
  81. package/lib/dll/DllReferencePlugin.js +1 -4
  82. package/lib/errors/AbstractMethodError.js +1 -1
  83. package/lib/errors/ErrorHelpers.js +2 -1
  84. package/lib/errors/HookWebpackError.js +2 -1
  85. package/lib/errors/JSONParseError.js +4 -4
  86. package/lib/errors/WebpackError.js +3 -2
  87. package/lib/esm/ModuleChunkFormatPlugin.js +36 -1
  88. package/lib/externals/ExternalModule.js +12 -9
  89. package/lib/externals/ExternalModuleFactoryPlugin.js +1 -2
  90. package/lib/externals/ExternalsPlugin.js +1 -1
  91. package/lib/fs/FileSystemInfo.js +4 -4
  92. package/lib/graph/AsyncDependenciesBlock.js +1 -1
  93. package/lib/graph/ChunkGraph.js +5 -0
  94. package/lib/graph/Dependency.js +8 -2
  95. package/lib/graph/ExportsInfo.js +1 -1
  96. package/lib/graph/ModuleGraph.js +14 -3
  97. package/lib/graph/buildChunkGraph.js +17 -19
  98. package/lib/graph/findGraphRoots.js +1 -1
  99. package/lib/hmr/HotModuleReplacement.runtime.js +10 -9
  100. package/lib/hmr/HotModuleReplacementPlugin.js +5 -11
  101. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +16 -19
  102. package/lib/hmr/LazyCompilationPlugin.js +1 -7
  103. package/lib/html/HtmlGenerator.js +25 -17
  104. package/lib/html/HtmlModule.js +11 -1
  105. package/lib/html/HtmlModulesPlugin.js +12 -11
  106. package/lib/html/HtmlParser.js +10 -9
  107. package/lib/html/builtinEmbeddedRenderer.js +31 -33
  108. package/lib/html/data.js +42 -21
  109. package/lib/html/htmlMinify.js +4 -1
  110. package/lib/html/syntax-parser.js +34 -35
  111. package/lib/html/syntax-printer.js +2 -3
  112. package/lib/html/xmlMinify.js +4 -1
  113. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  114. package/lib/index.js +13 -12
  115. package/lib/javascript/APIPlugin.js +7 -13
  116. package/lib/javascript/BasicEvaluatedExpression.js +5 -5
  117. package/lib/javascript/CommonJsChunkFormatPlugin.js +2 -7
  118. package/lib/javascript/ConstPlugin.js +1 -1
  119. package/lib/javascript/JavascriptGenerator.js +16 -11
  120. package/lib/javascript/JavascriptMetaInfoPlugin.js +3 -15
  121. package/lib/javascript/JavascriptModule.js +10 -0
  122. package/lib/javascript/JavascriptModulesPlugin.js +2 -4
  123. package/lib/javascript/JavascriptParser.js +99 -11
  124. package/lib/javascript/ScopeAnalyzer.js +183 -107
  125. package/lib/javascript/UseStrictPlugin.js +2 -5
  126. package/lib/javascript/jsMinify.js +1 -1
  127. package/lib/javascript/regexp.js +2 -2
  128. package/lib/javascript/syntax-parser.js +2114 -1506
  129. package/lib/javascript/syntax-printer-data.js +167 -1
  130. package/lib/javascript/syntax-printer.js +9554 -2782
  131. package/lib/json/JsonGenerator.js +15 -7
  132. package/lib/json/JsonModule.js +11 -0
  133. package/lib/json/JsonParser.js +7 -6
  134. package/lib/library/AssignLibraryPlugin.js +1 -1
  135. package/lib/library/JsonpLibraryPlugin.js +1 -1
  136. package/lib/library/ModuleLibraryPlugin.js +399 -23
  137. package/lib/loaders/LoaderRunner.js +76 -38
  138. package/lib/loaders/loadLoader.js +16 -10
  139. package/lib/module/Generator.js +17 -9
  140. package/lib/module/Module.js +2 -2
  141. package/lib/module/NormalModule.js +7 -5
  142. package/lib/module/NormalModuleFactory.js +11 -17
  143. package/lib/module/Parser.js +9 -2
  144. package/lib/module/extractSourceMap.js +69 -18
  145. package/lib/module/findCaseMismatch.js +2 -2
  146. package/lib/node/ExternalModuleInitFragment.js +2 -2
  147. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -12
  148. package/lib/node/ReadFileCompileWasmPlugin.js +2 -6
  149. package/lib/node/nodeConsole.js +4 -3
  150. package/lib/optimize/CircularModulesPlugin.js +1 -1
  151. package/lib/optimize/ConcatenatedModule.js +2 -6
  152. package/lib/optimize/FlagDependencyExportsPlugin.js +6 -11
  153. package/lib/optimize/FlagDependencyUsagePlugin.js +28 -3
  154. package/lib/optimize/InlineExports.js +4 -7
  155. package/lib/optimize/LazyBarrels.js +41 -5
  156. package/lib/optimize/ModuleConcatenationPlugin.js +8 -10
  157. package/lib/optimize/RealContentHashPlugin.js +2 -6
  158. package/lib/optimize/SideEffectsFlagPlugin.js +7 -21
  159. package/lib/optimize/SplitChunksPlugin.js +11 -24
  160. package/lib/optimize/TupleQueue.js +1 -1
  161. package/lib/output/CleanPlugin.js +3 -1
  162. package/lib/output/CopyPlugin.js +3 -4
  163. package/lib/performance/EvalUsagePlugin.js +1 -3
  164. package/lib/performance/HotspotsPlugin.js +33 -9
  165. package/lib/performance/PureAnnotationsPlugin.js +16 -10
  166. package/lib/performance/TopLevelThisPlugin.js +17 -9
  167. package/lib/prefetch/ResourceHintPlugin.js +1 -1
  168. package/lib/provide/ProvidedDependency.js +36 -4
  169. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  170. package/lib/rules/RuleSetCompiler.js +15 -5
  171. package/lib/rules/UseEffectRulePlugin.js +1 -3
  172. package/lib/runtime/AsyncModuleRuntimeModule.js +7 -1
  173. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -5
  174. package/lib/runtime/RuntimeGlobals.js +6 -0
  175. package/lib/runtime/RuntimePlugin.js +2 -0
  176. package/lib/schemes/HttpUriPlugin.js +1 -2
  177. package/lib/schemes/VirtualUrlPlugin.js +3 -1
  178. package/lib/serialization/AggregateErrorSerializer.js +3 -3
  179. package/lib/serialization/BinaryMiddleware.js +4 -1
  180. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  181. package/lib/serialization/ObjectMiddleware.js +17 -15
  182. package/lib/serialization/PlainObjectSerializer.js +3 -7
  183. package/lib/serialization/Serializer.js +21 -11
  184. package/lib/serialization/SerializerMiddleware.js +8 -6
  185. package/lib/stats/DefaultStatsFactoryPlugin.js +35 -35
  186. package/lib/stats/DefaultStatsPresetPlugin.js +2 -6
  187. package/lib/stats/DefaultStatsPrinterPlugin.js +12 -11
  188. package/lib/stats/StatsFactory.js +194 -24
  189. package/lib/stats/StatsPrinter.js +126 -13
  190. package/lib/template/DependencyTemplate.js +1 -1
  191. package/lib/template/RuntimeTemplate.js +13 -32
  192. package/lib/template/Template.js +1 -1
  193. package/lib/util/SourceProcessor.js +98 -15
  194. package/lib/util/WeakTupleMap.js +10 -4
  195. package/lib/util/cleverMerge.js +61 -33
  196. package/lib/util/comparators.js +9 -5
  197. package/lib/util/dataURL.js +2 -0
  198. package/lib/util/deprecation.js +4 -3
  199. package/lib/util/globUtils.js +1 -4
  200. package/lib/util/internalSerializables.js +2 -0
  201. package/lib/util/makeSerializable.js +6 -4
  202. package/lib/util/memoize.js +1 -1
  203. package/lib/util/parseJson.js +2 -2
  204. package/lib/util/serialization.js +31 -27
  205. package/lib/wasm/AsyncWasmModule.js +12 -2
  206. package/lib/wasm/AsyncWebAssemblyGenerator.js +12 -4
  207. package/lib/wasm/AsyncWebAssemblyJavascriptGenerator.js +13 -5
  208. package/lib/wasm/AsyncWebAssemblyParser.js +7 -5
  209. package/lib/wasm/UniversalCompileAsyncWasmPlugin.js +2 -6
  210. package/lib/wasm-sync/SyncWasmModule.js +16 -1
  211. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -10
  212. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +13 -5
  213. package/lib/wasm-sync/WebAssemblyParser.js +10 -12
  214. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -12
  215. package/lib/web/FetchCompileWasmPlugin.js +2 -6
  216. package/package.json +16 -18
  217. package/schemas/WebpackOptions.check.js +3 -3
  218. package/schemas/WebpackOptions.json +2 -2
  219. package/schemas/plugins/BannerPlugin.check.js +3 -3
  220. package/schemas/plugins/HtmlGeneratorOptions.check.js +3 -3
  221. package/schemas/plugins/HtmlParserOptions.check.js +3 -3
  222. package/schemas/plugins/IgnorePlugin.check.js +3 -3
  223. package/schemas/plugins/LoaderOptionsPlugin.check.js +3 -3
  224. package/schemas/plugins/ManifestPlugin.check.js +3 -3
  225. package/schemas/plugins/ProgressPlugin.check.js +3 -3
  226. package/schemas/plugins/SSRManifestPlugin.check.js +3 -3
  227. package/schemas/plugins/SourceMapDevToolPlugin.check.js +3 -3
  228. package/schemas/plugins/WatchIgnorePlugin.check.js +3 -3
  229. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +3 -3
  230. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +3 -3
  231. package/schemas/plugins/asset/AssetParserOptions.check.js +3 -3
  232. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +3 -3
  233. package/schemas/plugins/container/ContainerPlugin.check.js +3 -3
  234. package/schemas/plugins/container/ContainerReferencePlugin.check.js +3 -3
  235. package/schemas/plugins/container/ExternalsType.check.js +3 -3
  236. package/schemas/plugins/container/ModuleFederationPlugin.check.js +3 -3
  237. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +3 -3
  238. package/schemas/plugins/css/CssGeneratorOptions.check.js +3 -3
  239. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +3 -3
  240. package/schemas/plugins/css/CssModuleParserOptions.check.js +3 -3
  241. package/schemas/plugins/css/CssParserOptions.check.js +3 -3
  242. package/schemas/plugins/debug/ProfilingPlugin.check.js +3 -3
  243. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  244. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  245. package/schemas/plugins/dll/DllPlugin.check.js +3 -3
  246. package/schemas/plugins/dll/DllReferencePlugin.check.js +3 -3
  247. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +3 -3
  248. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +3 -3
  249. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +3 -3
  250. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +3 -3
  251. package/schemas/plugins/json/JsonModulesPluginParser.check.js +3 -3
  252. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +3 -3
  253. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +3 -3
  254. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +3 -3
  255. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +3 -3
  256. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  257. package/schemas/plugins/output/CleanOptions.json +3 -0
  258. package/schemas/plugins/schemes/HttpUriPlugin.check.js +3 -3
  259. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +3 -3
  260. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +3 -3
  261. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +3 -3
  262. package/schemas/plugins/sharing/SharePlugin.check.js +3 -3
  263. package/types.d.ts +1482 -358
@@ -23,7 +23,8 @@
23
23
  * KnownStatsModuleReason,
24
24
  * KnownStatsModuleTraceDependency,
25
25
  * KnownStatsModuleTraceItem,
26
- * KnownStatsProfile
26
+ * KnownStatsProfile,
27
+ * StatsJsonArray
27
28
  * } from "./DefaultStatsFactoryPlugin"
28
29
  */
29
30
  /**
@@ -89,8 +90,8 @@ const getResourceName = (resource) => {
89
90
  */
90
91
  const getModuleName = (name) => {
91
92
  const [, prefix, resource] =
92
- /** @type {[string, string, string]} */
93
- (/** @type {unknown} */ (/^(.*!)?([^!]*)$/.exec(name)));
93
+ /** @type {RegExpExecArray} */
94
+ (/^(.*!)?([^!]*)$/.exec(name));
94
95
 
95
96
  if (resource.length > MAX_MODULE_IDENTIFIER_LENGTH) {
96
97
  const truncatedResource = `${resource.slice(
@@ -479,7 +480,7 @@ const ASSET_SIMPLE_PRINTERS = {
479
480
  : undefined,
480
481
  "asset.filteredChildren": (filteredChildren, { asset: { children } }) =>
481
482
  filteredChildren > 0
482
- ? `${moreCount(children, filteredChildren)} ${plural(
483
+ ? `${moreCount(/** @type {StatsJsonArray | undefined} */ (children), filteredChildren)} ${plural(
483
484
  filteredChildren,
484
485
  "asset",
485
486
  "assets"
@@ -614,7 +615,7 @@ const MODULE_SIMPLE_PRINTERS = {
614
615
  : undefined,
615
616
  "module.filteredChildren": (filteredChildren, { module: { children } }) =>
616
617
  filteredChildren > 0
617
- ? `${moreCount(children, filteredChildren)} ${plural(
618
+ ? `${moreCount(/** @type {StatsJsonArray | undefined} */ (children), filteredChildren)} ${plural(
618
619
  filteredChildren,
619
620
  "module",
620
621
  "modules"
@@ -625,7 +626,7 @@ const MODULE_SIMPLE_PRINTERS = {
625
626
 
626
627
  /**
627
628
  * Defines the module issuer printers type used by this module.
628
- * @typedef {Printers<KnownStatsModuleIssuer, "moduleIssuer"> & Printers<KnownStatsModuleIssuer["profile"], "moduleIssuer.profile", "moduleIssuer">} ModuleIssuerPrinters
629
+ * @typedef {Printers<KnownStatsModuleIssuer, "moduleIssuer"> & Printers<KnownStatsProfile, "moduleIssuer.profile", "moduleIssuer">} ModuleIssuerPrinters
629
630
  */
630
631
 
631
632
  /** @type {ModuleIssuerPrinters} */
@@ -660,7 +661,7 @@ const MODULE_REASON_PRINTERS = {
660
661
  { moduleReason: { children } }
661
662
  ) =>
662
663
  filteredChildren > 0
663
- ? `${moreCount(children, filteredChildren)} ${plural(
664
+ ? `${moreCount(/** @type {StatsJsonArray | undefined} */ (children), filteredChildren)} ${plural(
664
665
  filteredChildren,
665
666
  "reason",
666
667
  "reasons"
@@ -1697,10 +1698,10 @@ class DefaultStatsPrinterPlugin {
1697
1698
  context[format] =
1698
1699
  /** @type {(content: Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>[0], ...args: Tail<Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>>) => string} */
1699
1700
  (content, ...args) =>
1700
- /** @type {EXPECTED_ANY} */
1701
+ /** @type {(value: Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>[0], options: Required<KnownStatsPrinterColorFunctions> & StatsPrinterContextWithExtra, ...args: Tail<Parameters<NonNullable<KnownStatsPrinterFormatters[keyof KnownStatsPrinterFormatters]>>>) => string} */
1701
1702
  (AVAILABLE_FORMATS[format])(
1702
1703
  content,
1703
- /** @type {StatsPrinterContext & Required<KnownStatsPrinterColorFunctions>} */
1704
+ /** @type {StatsPrinterContextWithExtra} */
1704
1705
  (context),
1705
1706
  ...args
1706
1707
  );
@@ -1711,7 +1712,7 @@ class DefaultStatsPrinterPlugin {
1711
1712
  // Every `*_SIMPLE_PRINTERS` map registers identically: tap
1712
1713
  // `print.for(key)` with a formatter called as `(obj, ctx, stats)`.
1713
1714
  // One loop over all maps replaces a dozen near-identical blocks.
1714
- for (const simplePrinters of /** @type {Record<string, EXPECTED_ANY>[]} */ ([
1715
+ for (const simplePrinters of /** @type {Record<string, (thing: never, context: StatsPrinterContext, printer: StatsPrinter) => string | undefined>[]} */ ([
1715
1716
  COMPILATION_SIMPLE_PRINTERS,
1716
1717
  ASSET_SIMPLE_PRINTERS,
1717
1718
  MODULE_SIMPLE_PRINTERS,
@@ -1729,7 +1730,7 @@ class DefaultStatsPrinterPlugin {
1729
1730
  stats.hooks.print
1730
1731
  .for(key)
1731
1732
  .tap(PLUGIN_NAME, (obj, ctx) =>
1732
- simplePrinters[key](obj, ctx, stats)
1733
+ simplePrinters[key](/** @type {never} */ (obj), ctx, stats)
1733
1734
  );
1734
1735
  }
1735
1736
  }
@@ -14,7 +14,12 @@ const smartGrouping = require("./smartGrouping");
14
14
  /** @import Dependency from "../graph/Dependency" */
15
15
  /** @import Module from "../module/Module" */
16
16
  /** @import ModuleGraphConnection from "../graph/ModuleGraphConnection" */
17
- /** @typedef {import("../util/comparators").Comparator<EXPECTED_ANY>} Comparator */
17
+ /** @import WebpackError from "../errors/WebpackError" */
18
+ /**
19
+ * Defines the comparator type used by this module.
20
+ * @template T
21
+ * @typedef {import("../util/comparators").Comparator<T>} Comparator
22
+ */
18
23
  /** @import ModuleProfile from "../module/ModuleProfile" */
19
24
  /** @import { RuntimeSpec } from "../util/runtime" */
20
25
  /**
@@ -26,6 +31,7 @@ const smartGrouping = require("./smartGrouping");
26
31
  * @import {
27
32
  * ChunkGroupInfoWithName,
28
33
  * ModuleTrace,
34
+ * PreprocessedAsset,
29
35
  * StatsAsset,
30
36
  * StatsChunk,
31
37
  * StatsChunkGroup,
@@ -33,6 +39,7 @@ const smartGrouping = require("./smartGrouping");
33
39
  * StatsCompilation,
34
40
  * StatsError,
35
41
  * StatsModule,
42
+ * StatsModuleIssuer,
36
43
  * StatsModuleReason,
37
44
  * StatsModuleTraceDependency,
38
45
  * StatsModuleTraceItem,
@@ -72,25 +79,188 @@ const smartGrouping = require("./smartGrouping");
72
79
  * @typedef {T extends ChunkGroupInfoWithName[] ? Record<string, StatsObject<ChunkGroupInfoWithName, F>> : T extends (infer V)[] ? StatsObject<V, F>[] : StatsObject<T, F>} CreatedObject
73
80
  */
74
81
 
75
- /** @typedef {EXPECTED_ANY} ObjectForExtract */
76
- /** @typedef {EXPECTED_ANY} FactoryData */
77
- /** @typedef {EXPECTED_ANY} FactoryDataItem */
78
- /** @typedef {EXPECTED_ANY} Result */
82
+ /**
83
+ * The `[object, data]` each `extract` key webpack registers receives.
84
+ * @typedef {object} KnownStatsFactoryExtract
85
+ * @property {[StatsCompilation, Compilation]} compilation
86
+ * @property {[StatsAsset, PreprocessedAsset]} asset
87
+ * @property {[StatsAsset, PreprocessedAsset]} asset$visible
88
+ * @property {[StatsChunkGroup, ChunkGroupInfoWithName]} chunkGroup
89
+ * @property {[StatsModule, Module]} module
90
+ * @property {[StatsModule, Module]} module$visible
91
+ * @property {[StatsModuleIssuer, Module]} moduleIssuer
92
+ * @property {[StatsProfile, ModuleProfile]} profile
93
+ * @property {[StatsModuleReason, ModuleGraphConnection]} moduleReason
94
+ * @property {[StatsChunk, Chunk]} chunk
95
+ * @property {[StatsChunkOrigin, OriginRecord]} chunkOrigin
96
+ * @property {[StatsError, WebpackError]} error
97
+ * @property {[StatsError, WebpackError]} warning
98
+ * @property {[StatsError, WebpackError]} cause
99
+ * @property {[StatsModuleTraceItem, ModuleTrace]} moduleTraceItem
100
+ * @property {[StatsModuleTraceDependency, Dependency]} moduleTraceDependency
101
+ */
102
+
103
+ /**
104
+ * The `[item, created item]` of each array path webpack creates.
105
+ * @typedef {{
106
+ * "compilation.assets": [PreprocessedAsset, StatsAsset],
107
+ * "compilation.chunks": [Chunk, StatsChunk],
108
+ * "compilation.modules": [Module, StatsModule],
109
+ * "compilation.entrypoints": [ChunkGroupInfoWithName, StatsChunkGroup],
110
+ * "compilation.namedChunkGroups": [ChunkGroupInfoWithName, StatsChunkGroup],
111
+ * "compilation.errors": [Error, StatsError],
112
+ * "compilation.warnings": [Error, StatsError],
113
+ * "compilation.hints": [Error, StatsError],
114
+ * "compilation.children": [Compilation, StatsCompilation],
115
+ * "asset.related": [PreprocessedAsset, StatsAsset],
116
+ * "error.errors": [Error, StatsError],
117
+ * "warning.errors": [Error, StatsError],
118
+ * "chunk.modules": [Module, StatsModule],
119
+ * "chunk.rootModules": [Module, StatsModule],
120
+ * "chunk.origins": [OriginRecord, StatsChunkOrigin],
121
+ * "module.issuerPath": [Module, StatsModuleIssuer],
122
+ * "module.reasons": [ModuleGraphConnection, StatsModuleReason],
123
+ * "module.modules": [Module, StatsModule],
124
+ * "module.children": [Module, StatsModule],
125
+ * moduleTrace: [ModuleTrace, StatsModuleTraceItem],
126
+ * "moduleTraceItem.dependencies": [Dependency, StatsModuleTraceDependency],
127
+ * }} KnownStatsFactoryItems
128
+ */
129
+
130
+ /** @typedef {{ [Key in keyof KnownStatsFactoryItems]: KnownStatsFactoryItems[Key][0] }} KnownStatsFactoryRawItems */
131
+ /** @typedef {{ [Key in keyof KnownStatsFactoryItems]: KnownStatsFactoryItems[Key][1] }} KnownStatsFactoryResultItems */
132
+
133
+ /**
134
+ * The item `getItemName` receives for each `<array path>[]` key webpack registers.
135
+ * @typedef {{
136
+ * "compilation.assets[]": PreprocessedAsset,
137
+ * "compilation.chunks[]": Chunk,
138
+ * "compilation.modules[]": Module,
139
+ * "compilation.entrypoints[]": ChunkGroupInfoWithName,
140
+ * "compilation.namedChunkGroups[]": ChunkGroupInfoWithName,
141
+ * "compilation.errors[]": Error,
142
+ * "compilation.warnings[]": Error,
143
+ * "compilation.hints[]": Error,
144
+ * "compilation.children[]": Compilation,
145
+ * "asset.related[]": PreprocessedAsset,
146
+ * "error.errors[]": Error,
147
+ * "warning.errors[]": Error,
148
+ * "chunk.modules[]": Module,
149
+ * "chunk.rootModules[]": Module,
150
+ * "chunk.origins[]": OriginRecord,
151
+ * "module.issuerPath[]": Module,
152
+ * "module.reasons[]": ModuleGraphConnection,
153
+ * "module.modules[]": Module,
154
+ * "module.children[]": Module,
155
+ * "moduleTrace[]": ModuleTrace,
156
+ * "moduleTraceItem.dependencies[]": Dependency,
157
+ * }} KnownStatsFactoryItemNames
158
+ */
159
+
160
+ /**
161
+ * The data `getItemFactory` receives: an item name key gets that item's data.
162
+ * @typedef {{ [Key in keyof KnownStatsFactoryExtract]: KnownStatsFactoryExtract[Key][1] } & { "compilation.children[].compilation": Compilation }} KnownStatsFactoryItemFactories
163
+ */
164
+
165
+ /**
166
+ * The value `result` passes on: an object key's stats object, an array path's (merged) items.
167
+ * @typedef {{ [Key in keyof KnownStatsFactoryExtract]: KnownStatsFactoryExtract[Key][0] } & { [Key in Exclude<keyof KnownStatsFactoryResultItems, "compilation.entrypoints" | "compilation.namedChunkGroups">]: KnownStatsFactoryResultItems[Key][] } & { "compilation.entrypoints": Record<string, StatsChunkGroup>, "compilation.namedChunkGroups": Record<string, StatsChunkGroup> }} KnownStatsFactoryResults
168
+ */
169
+
170
+ /**
171
+ * `extract` hooks: the exact `[object, data]` for keys webpack registers, generic for plugin keys.
172
+ * @typedef {{
173
+ * for<K extends keyof KnownStatsFactoryExtract>(key: K): SyncBailHook<[KnownStatsFactoryExtract[K][0], KnownStatsFactoryExtract[K][1], StatsFactoryContext], void>,
174
+ * for<O = EXPECTED_ANY, D = EXPECTED_ANY>(key: string): SyncBailHook<[O, D, StatsFactoryContext], void>
175
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, EXPECTED_ANY, StatsFactoryContext], void>>} StatsFactoryExtractHookMap
176
+ */
177
+
178
+ /**
179
+ * Filter hooks over the raw item: exact for known array paths, generic for plugin keys.
180
+ * @typedef {{
181
+ * for<K extends keyof KnownStatsFactoryRawItems>(key: K): SyncBailHook<[KnownStatsFactoryRawItems[K], StatsFactoryContext, number, number], boolean | void>,
182
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I, StatsFactoryContext, number, number], boolean | void>
183
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsFactoryContext, number, number], boolean | void>>} StatsFactoryItemFilterHookMap
184
+ */
185
+
186
+ /**
187
+ * Sort hooks over the raw item: exact for known array paths, generic for plugin keys.
188
+ * @typedef {{
189
+ * for<K extends keyof KnownStatsFactoryRawItems>(key: K): SyncBailHook<[Comparator<KnownStatsFactoryRawItems[K]>[], StatsFactoryContext], void>,
190
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[Comparator<I>[], StatsFactoryContext], void>
191
+ * } & HookMap<SyncBailHook<[Comparator<EXPECTED_ANY>[], StatsFactoryContext], void>>} StatsFactoryItemSortHookMap
192
+ */
193
+
194
+ /**
195
+ * Filter hooks over the created item: exact for known array paths, generic for plugin keys.
196
+ * @typedef {{
197
+ * for<K extends keyof KnownStatsFactoryResultItems>(key: K): SyncBailHook<[KnownStatsFactoryResultItems[K], StatsFactoryContext, number, number], boolean | void>,
198
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I, StatsFactoryContext, number, number], boolean | void>
199
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsFactoryContext, number, number], boolean | void>>} StatsFactoryResultFilterHookMap
200
+ */
201
+
202
+ /**
203
+ * Sort hooks over the created item: exact for known array paths, generic for plugin keys.
204
+ * @typedef {{
205
+ * for<K extends keyof KnownStatsFactoryResultItems>(key: K): SyncBailHook<[Comparator<KnownStatsFactoryResultItems[K]>[], StatsFactoryContext], void>,
206
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[Comparator<I>[], StatsFactoryContext], void>
207
+ * } & HookMap<SyncBailHook<[Comparator<EXPECTED_ANY>[], StatsFactoryContext], void>>} StatsFactoryResultSortHookMap
208
+ */
209
+
210
+ /**
211
+ * `groupResults` hooks: group configs over the exact created item for known keys, generic for plugin keys.
212
+ * @typedef {{
213
+ * for<K extends keyof KnownStatsFactoryResultItems, G = object>(key: K): SyncBailHook<[GroupConfig<KnownStatsFactoryResultItems[K], G>[], StatsFactoryContext], void>,
214
+ * for<I = EXPECTED_ANY, G = EXPECTED_ANY>(key: string): SyncBailHook<[GroupConfig<I, G>[], StatsFactoryContext], void>
215
+ * } & HookMap<SyncBailHook<[GroupConfig<EXPECTED_ANY, EXPECTED_ANY>[], StatsFactoryContext], void>>} StatsFactoryGroupResultsHookMap
216
+ */
217
+
218
+ /**
219
+ * `merge` hooks: the exact created items for known keys, merged by default into an object by name.
220
+ * @typedef {{
221
+ * for<K extends keyof KnownStatsFactoryResultItems, R = Record<string, KnownStatsFactoryResultItems[K]>>(key: K): SyncBailHook<[KnownStatsFactoryResultItems[K][], StatsFactoryContext], R | void>,
222
+ * for<I = EXPECTED_ANY, R = EXPECTED_ANY>(key: string): SyncBailHook<[I[], StatsFactoryContext], R | void>
223
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY[], StatsFactoryContext], EXPECTED_ANY>>} StatsFactoryMergeHookMap
224
+ */
225
+
226
+ /**
227
+ * `result` hooks: the exact stats value for known keys, generic for plugin keys.
228
+ * @typedef {{
229
+ * for<K extends keyof KnownStatsFactoryResults>(key: K): SyncBailHook<[KnownStatsFactoryResults[K], StatsFactoryContext], KnownStatsFactoryResults[K]>,
230
+ * for<R = EXPECTED_ANY>(key: string): SyncBailHook<[R, StatsFactoryContext], R>
231
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsFactoryContext], EXPECTED_ANY>>} StatsFactoryResultHookMap
232
+ */
233
+
234
+ /**
235
+ * `getItemName` hooks: the exact item for known `<array path>[]` keys, generic for plugin keys.
236
+ * @typedef {{
237
+ * for<K extends keyof KnownStatsFactoryItemNames>(key: K): SyncBailHook<[KnownStatsFactoryItemNames[K], StatsFactoryContext], string | void>,
238
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I, StatsFactoryContext], string | void>
239
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsFactoryContext], string | void>>} StatsFactoryGetItemNameHookMap
240
+ */
241
+
242
+ /**
243
+ * `getItemFactory` hooks: the exact data for known item keys, generic for plugin keys.
244
+ * @typedef {{
245
+ * for<K extends keyof KnownStatsFactoryItemFactories>(key: K): SyncBailHook<[KnownStatsFactoryItemFactories[K], StatsFactoryContext], StatsFactory | void>,
246
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I, StatsFactoryContext], StatsFactory | void>
247
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsFactoryContext], StatsFactory | void>>} StatsFactoryGetItemFactoryHookMap
248
+ */
79
249
 
80
250
  /**
81
251
  * Defines the stats factory hooks type used by this module.
82
252
  * @typedef {object} StatsFactoryHooks
83
- * @property {HookMap<SyncBailHook<[ObjectForExtract, FactoryData, StatsFactoryContext], void>>} extract
84
- * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filter
85
- * @property {HookMap<SyncBailHook<[Comparator[], StatsFactoryContext], void>>} sort
86
- * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filterSorted
87
- * @property {HookMap<SyncBailHook<[GroupConfig<EXPECTED_ANY, EXPECTED_ANY>[], StatsFactoryContext], void>>} groupResults
88
- * @property {HookMap<SyncBailHook<[Comparator[], StatsFactoryContext], void>>} sortResults
89
- * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filterResults
90
- * @property {HookMap<SyncBailHook<[FactoryDataItem[], StatsFactoryContext], Result | void>>} merge
91
- * @property {HookMap<SyncBailHook<[Result, StatsFactoryContext], Result>>} result
92
- * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext], string | void>>} getItemName
93
- * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext], StatsFactory | void>>} getItemFactory
253
+ * @property {StatsFactoryExtractHookMap} extract
254
+ * @property {StatsFactoryItemFilterHookMap} filter
255
+ * @property {StatsFactoryItemSortHookMap} sort
256
+ * @property {StatsFactoryItemFilterHookMap} filterSorted
257
+ * @property {StatsFactoryGroupResultsHookMap} groupResults
258
+ * @property {StatsFactoryResultSortHookMap} sortResults
259
+ * @property {StatsFactoryResultFilterHookMap} filterResults
260
+ * @property {StatsFactoryMergeHookMap} merge
261
+ * @property {StatsFactoryResultHookMap} result
262
+ * @property {StatsFactoryGetItemNameHookMap} getItemName
263
+ * @property {StatsFactoryGetItemFactoryHookMap} getItemFactory
94
264
  */
95
265
 
96
266
  /**
@@ -178,7 +348,7 @@ class StatsFactory {
178
348
  */
179
349
  _forEachLevel(hookMap, cache, type, fn) {
180
350
  for (const hook of this._getAllLevelHooks(hookMap, cache, type)) {
181
- const result = fn(/** @type {H} */ (hook));
351
+ const result = fn(hook);
182
352
  if (result !== undefined) return result;
183
353
  }
184
354
  }
@@ -198,7 +368,7 @@ class StatsFactory {
198
368
  */
199
369
  _forEachLevelWaterfall(hookMap, cache, type, data, fn) {
200
370
  for (const hook of this._getAllLevelHooks(hookMap, cache, type)) {
201
- data = fn(/** @type {H} */ (hook), data);
371
+ data = fn(hook, data);
202
372
  }
203
373
  return data;
204
374
  }
@@ -223,7 +393,7 @@ class StatsFactory {
223
393
  let i = 0;
224
394
  return items.filter((item, idx) => {
225
395
  for (const hook of hooks) {
226
- const r = fn(/** @type {H} */ (hook), item, idx, i);
396
+ const r = fn(hook, item, idx, i);
227
397
  if (r !== undefined) {
228
398
  if (r) i++;
229
399
  return r;
@@ -286,7 +456,7 @@ class StatsFactory {
286
456
  );
287
457
 
288
458
  // sort items
289
- /** @type {Comparator[]} */
459
+ /** @type {Comparator<FactoryData extends (infer I)[] ? I : never>[]} */
290
460
  const comparators = [];
291
461
  this._forEachLevel(this.hooks.sort, this._caches.sort, type, (h) =>
292
462
  h.call(comparators, context)
@@ -344,7 +514,7 @@ class StatsFactory {
344
514
  });
345
515
 
346
516
  // sort result items
347
- /** @type {Comparator[]} */
517
+ /** @type {Comparator<(typeof resultItems)[number]>[]} */
348
518
  const comparators2 = [];
349
519
  this._forEachLevel(
350
520
  this.hooks.sortResults,
@@ -357,7 +527,7 @@ class StatsFactory {
357
527
  }
358
528
 
359
529
  // group result items
360
- /** @type {GroupConfig<EXPECTED_ANY, EXPECTED_ANY>[]} */
530
+ /** @type {GroupConfig<(typeof resultItems)[number], (typeof resultItems)[number]>[]} */
361
531
  const groupConfigs = [];
362
532
  this._forEachLevel(
363
533
  this.hooks.groupResults,
@@ -397,8 +567,8 @@ class StatsFactory {
397
567
  (h, r) => h.call(r, context)
398
568
  );
399
569
  }
400
- /** @type {ObjectForExtract} */
401
- const object = {};
570
+ const object =
571
+ /** @type {CreatedObject<FactoryData, FallbackCreatedObject>} */ ({});
402
572
 
403
573
  // run extract on value
404
574
  this._forEachLevel(this.hooks.extract, this._caches.extract, type, (h) =>
@@ -12,9 +12,12 @@ const { HookMap, SyncBailHook, SyncWaterfallHook } = require("tapable");
12
12
  * StatsAsset,
13
13
  * StatsChunk,
14
14
  * StatsChunkGroup,
15
+ * StatsChunkOrigin,
15
16
  * StatsCompilation,
16
17
  * StatsError,
18
+ * StatsJsonValue,
17
19
  * StatsLogging,
20
+ * StatsLoggingEntry,
18
21
  * StatsModule,
19
22
  * StatsModuleIssuer,
20
23
  * StatsModuleReason,
@@ -85,17 +88,117 @@ const { HookMap, SyncBailHook, SyncWaterfallHook } = require("tapable");
85
88
 
86
89
  /** @typedef {KnownStatsPrinterColorFunctions & KnownStatsPrinterFormatters & KnownStatsPrinterContext & Record<string, EXPECTED_ANY>} StatsPrinterContext */
87
90
  /** @typedef {StatsPrinterContext & Required<KnownStatsPrinterColorFunctions> & Required<KnownStatsPrinterFormatters> & { type: string }} StatsPrinterContextWithExtra */
88
- /** @typedef {EXPECTED_ANY} PrintObject */
91
+ /**
92
+ * The value `print` receives for each object key webpack prints; the key also matches same-named fields.
93
+ * @typedef {object} KnownStatsPrintObjects
94
+ * @property {StatsCompilation} compilation
95
+ * @property {StatsAsset} asset
96
+ * @property {StatsChunk} chunk
97
+ * @property {StatsChunkGroup} chunkGroup
98
+ * @property {StatsModule | string | null} module
99
+ * @property {StatsModuleReason} moduleReason
100
+ * @property {StatsModuleIssuer} moduleIssuer
101
+ * @property {StatsChunkOrigin} chunkOrigin
102
+ * @property {StatsError} error
103
+ * @property {StatsProfile} profile
104
+ * @property {StatsLogging & { name: string }} loggingGroup
105
+ * @property {StatsModuleTraceItem} moduleTraceItem
106
+ * @property {StatsModuleTraceDependency} moduleTraceDependency
107
+ */
108
+
109
+ /**
110
+ * The item of each array path webpack prints stats objects for.
111
+ * @typedef {{
112
+ * "compilation.assets": StatsAsset,
113
+ * "compilation.modules": StatsModule,
114
+ * "compilation.chunks": StatsChunk,
115
+ * "compilation.entrypoints": StatsChunkGroup,
116
+ * "compilation.namedChunkGroups": StatsChunkGroup,
117
+ * "compilation.errors": StatsError,
118
+ * "compilation.warnings": StatsError,
119
+ * "compilation.hints": StatsError,
120
+ * "compilation.logging": StatsLogging & { name: string },
121
+ * "compilation.children": StatsCompilation,
122
+ * "asset.related": StatsAsset,
123
+ * "asset.children": StatsAsset,
124
+ * "module.modules": StatsModule,
125
+ * "module.children": StatsModule,
126
+ * "module.reasons": StatsModuleReason,
127
+ * "moduleReason.children": StatsModuleReason,
128
+ * "module.issuerPath": StatsModuleIssuer,
129
+ * "chunk.origins": StatsChunkOrigin,
130
+ * "chunk.modules": StatsModule,
131
+ * "loggingGroup.entries": StatsLoggingEntry,
132
+ * "loggingEntry.children": StatsLoggingEntry,
133
+ * "error.moduleTrace": StatsModuleTraceItem,
134
+ * "error.errors": StatsError,
135
+ * "moduleTraceItem.dependencies": StatsModuleTraceDependency,
136
+ * }} KnownStatsPrintItems
137
+ */
138
+
139
+ /**
140
+ * The item `getItemName` receives for each `<array path>[]` key of `KnownStatsPrintItems`.
141
+ * @typedef {{
142
+ * "compilation.assets[]": StatsAsset,
143
+ * "compilation.modules[]": StatsModule,
144
+ * "compilation.chunks[]": StatsChunk,
145
+ * "compilation.entrypoints[]": StatsChunkGroup,
146
+ * "compilation.namedChunkGroups[]": StatsChunkGroup,
147
+ * "compilation.errors[]": StatsError,
148
+ * "compilation.warnings[]": StatsError,
149
+ * "compilation.hints[]": StatsError,
150
+ * "compilation.logging[]": StatsLogging & { name: string },
151
+ * "compilation.children[]": StatsCompilation,
152
+ * "asset.related[]": StatsAsset,
153
+ * "asset.children[]": StatsAsset,
154
+ * "module.modules[]": StatsModule,
155
+ * "module.children[]": StatsModule,
156
+ * "module.reasons[]": StatsModuleReason,
157
+ * "moduleReason.children[]": StatsModuleReason,
158
+ * "module.issuerPath[]": StatsModuleIssuer,
159
+ * "chunk.origins[]": StatsChunkOrigin,
160
+ * "chunk.modules[]": StatsModule,
161
+ * "loggingGroup.entries[]": StatsLoggingEntry,
162
+ * "loggingEntry.children[]": StatsLoggingEntry,
163
+ * "error.moduleTrace[]": StatsModuleTraceItem,
164
+ * "error.errors[]": StatsError,
165
+ * "moduleTraceItem.dependencies[]": StatsModuleTraceDependency,
166
+ * }} KnownStatsPrintItemNames
167
+ */
168
+
169
+ /**
170
+ * `sortItems` hooks: the exact items for known array paths, generic for plugin keys.
171
+ * @typedef {{
172
+ * for<K extends keyof KnownStatsPrintItems>(key: K): SyncBailHook<[KnownStatsPrintItems[K][], StatsPrinterContext], boolean | void>,
173
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I[], StatsPrinterContext], boolean | void>
174
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY[], StatsPrinterContext], boolean | void>>} StatsPrinterSortItemsHookMap
175
+ */
176
+
177
+ /**
178
+ * `getItemName` hooks: the exact item for known `<array path>[]` keys, generic for plugin keys.
179
+ * @typedef {{
180
+ * for<K extends keyof KnownStatsPrintItemNames>(key: K): SyncBailHook<[KnownStatsPrintItemNames[K], StatsPrinterContext], string | void>,
181
+ * for<I = EXPECTED_ANY>(key: string): SyncBailHook<[I, StatsPrinterContext], string | void>
182
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsPrinterContext], string | void>>} StatsPrinterGetItemNameHookMap
183
+ */
184
+
185
+ /**
186
+ * `print` hooks: the exact value for known object keys, generic for plugin keys.
187
+ * @typedef {{
188
+ * for<K extends keyof KnownStatsPrintObjects>(key: K): SyncBailHook<[KnownStatsPrintObjects[K], StatsPrinterContext], string | undefined | void>,
189
+ * for<T = EXPECTED_ANY>(key: string): SyncBailHook<[T, StatsPrinterContext], string | undefined | void>
190
+ * } & HookMap<SyncBailHook<[EXPECTED_ANY, StatsPrinterContext], string | undefined | void>>} StatsPrinterPrintHookMap
191
+ */
89
192
 
90
193
  /**
91
194
  * Represents the stats printer runtime component.
92
195
  * @typedef {object} StatsPrintHooks
93
196
  * @property {HookMap<SyncBailHook<[string[], StatsPrinterContext], void>>} sortElements
94
197
  * @property {HookMap<SyncBailHook<[PrintedElement[], StatsPrinterContext], string | undefined | void>>} printElements
95
- * @property {HookMap<SyncBailHook<[PrintObject[], StatsPrinterContext], boolean | void>>} sortItems
96
- * @property {HookMap<SyncBailHook<[PrintObject, StatsPrinterContext], string | void>>} getItemName
198
+ * @property {StatsPrinterSortItemsHookMap} sortItems
199
+ * @property {StatsPrinterGetItemNameHookMap} getItemName
97
200
  * @property {HookMap<SyncBailHook<[string[], StatsPrinterContext], string | undefined>>} printItems
98
- * @property {HookMap<SyncBailHook<[PrintObject, StatsPrinterContext], string | undefined | void>>} print
201
+ * @property {StatsPrinterPrintHookMap} print
99
202
  * @property {HookMap<SyncWaterfallHook<[string, StatsPrinterContext]>>} result
100
203
  */
101
204
 
@@ -193,8 +296,9 @@ class StatsPrinter {
193
296
 
194
297
  /**
195
298
  * Returns printed result.
299
+ * @template T
196
300
  * @param {string} type The type
197
- * @param {PrintObject} object Object to print
301
+ * @param {T} object Object to print
198
302
  * @param {StatsPrinterContext=} baseContext The base context
199
303
  * @returns {string | undefined} printed result
200
304
  */
@@ -214,8 +318,9 @@ class StatsPrinter {
214
318
  /**
215
319
  * Returns printed result.
216
320
  * @private
321
+ * @template T
217
322
  * @param {string} type type
218
- * @param {PrintObject} object object
323
+ * @param {T} object object
219
324
  * @param {StatsPrinterContext=} baseContext context
220
325
  * @returns {string | undefined} printed result
221
326
  */
@@ -273,7 +378,9 @@ class StatsPrinter {
273
378
  }
274
379
  } else if (object !== null && typeof object === "object") {
275
380
  const elements = Object.keys(object).filter(
276
- (key) => object[key] !== undefined
381
+ (key) =>
382
+ /** @type {Record<string, StatsJsonValue>} */ (object)[key] !==
383
+ undefined
277
384
  );
278
385
  this._forEachLevel(this.hooks.sortElements, type, (h) =>
279
386
  h.call(
@@ -283,12 +390,18 @@ class StatsPrinter {
283
390
  )
284
391
  );
285
392
  const printedElements = elements.map((element) => {
286
- const content = this.print(`${type}.${element}`, object[element], {
287
- ...context,
288
- _parent: object,
289
- _element: element,
290
- [element]: object[element]
291
- });
393
+ const content = this.print(
394
+ `${type}.${element}`,
395
+ /** @type {Record<string, StatsJsonValue>} */ (object)[element],
396
+ {
397
+ ...context,
398
+ _parent: object,
399
+ _element: element,
400
+ [element]: /** @type {Record<string, StatsJsonValue>} */ (object)[
401
+ element
402
+ ]
403
+ }
404
+ );
292
405
  return { element, content };
293
406
  });
294
407
  printResult = this._forEachLevel(this.hooks.printElements, type, (h) =>
@@ -36,7 +36,7 @@
36
36
  * @property {InitFragment<GenerateContext>[]} initFragments mutable array of init fragments for the current module
37
37
  * @property {ConcatenationScope=} concatenationScope when in a concatenated module, information about other concatenated modules
38
38
  * @property {CodeGenerationResults} codeGenerationResults the code generation results
39
- * @property {InitFragment<GenerateContext>[]} chunkInitFragments chunkInitFragments
39
+ * @property {InitFragment<import("../javascript/JavascriptModulesPlugin").ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk, rendered with its render context
40
40
  * @property {(() => CodeGenerationResultData)=} getData get access to the code generation data
41
41
  */
42
42