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
@@ -10,34 +10,70 @@ const { concatComparators, keepOriginalOrder } = require("../util/comparators");
10
10
  const smartGrouping = require("../util/smartGrouping");
11
11
 
12
12
  /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../ChunkGroup").OriginRecord} OriginRecord */
13
14
  /** @typedef {import("../Compilation")} Compilation */
15
+ /** @typedef {import("../Compilation").Asset} Asset */
14
16
  /** @typedef {import("../Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
17
+ /** @typedef {import("../Dependency")} Dependency */
15
18
  /** @typedef {import("../Module")} Module */
19
+ /** @typedef {import("../ModuleGraph").ModuleProfile} ModuleProfile */
20
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
16
21
  /** @typedef {import("../WebpackError")} WebpackError */
17
- /** @typedef {import("../util/comparators").Comparator<any>} Comparator */
22
+ /** @typedef {import("../util/comparators").Comparator<EXPECTED_ANY>} Comparator */
18
23
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
- /** @typedef {import("../util/smartGrouping").GroupConfig<any, object>} GroupConfig */
24
+ /**
25
+ * @template T, R
26
+ * @typedef {import("../util/smartGrouping").GroupConfig<T, R>} GroupConfig
27
+ */
28
+ /** @typedef {import("./DefaultStatsFactoryPlugin").ChunkGroupInfoWithName} ChunkGroupInfoWithName */
29
+ /** @typedef {import("./DefaultStatsFactoryPlugin").ModuleIssuerPath} ModuleIssuerPath */
30
+ /** @typedef {import("./DefaultStatsFactoryPlugin").ModuleTrace} ModuleTrace */
31
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
32
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
33
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */
34
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsChunkOrigin} StatsChunkOrigin */
35
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
36
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsError} StatsError */
37
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsModule} StatsModule */
38
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsModuleIssuer} StatsModuleIssuer */
39
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsModuleReason} StatsModuleReason */
40
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsModuleTraceDependency} StatsModuleTraceDependency */
41
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsModuleTraceItem} StatsModuleTraceItem */
42
+ /** @typedef {import("./DefaultStatsFactoryPlugin").StatsProfile} StatsProfile */
20
43
 
21
44
  /**
22
45
  * @typedef {object} KnownStatsFactoryContext
23
46
  * @property {string} type
24
- * @property {function(string): string} makePathsRelative
25
47
  * @property {Compilation} compilation
48
+ * @property {(path: string) => string} makePathsRelative
26
49
  * @property {Set<Module>} rootModules
27
- * @property {Map<string,Chunk[]>} compilationFileToChunks
28
- * @property {Map<string,Chunk[]>} compilationAuxiliaryFileToChunks
50
+ * @property {Map<string, Chunk[]>} compilationFileToChunks
51
+ * @property {Map<string, Chunk[]>} compilationAuxiliaryFileToChunks
29
52
  * @property {RuntimeSpec} runtime
30
- * @property {function(Compilation): WebpackError[]} cachedGetErrors
31
- * @property {function(Compilation): WebpackError[]} cachedGetWarnings
53
+ * @property {(compilation: Compilation) => Error[]} cachedGetErrors
54
+ * @property {(compilation: Compilation) => Error[]} cachedGetWarnings
32
55
  */
33
56
 
34
- /** @typedef {Record<string, any> & KnownStatsFactoryContext} StatsFactoryContext */
57
+ /** @typedef {KnownStatsFactoryContext & Record<string, EXPECTED_ANY>} StatsFactoryContext */
35
58
 
36
- /** @typedef {any} CreatedObject */
37
- /** @typedef {any} FactoryData */
38
- /** @typedef {any} FactoryDataItem */
39
- /** @typedef {any} Result */
40
- /** @typedef {Record<string, any>} ObjectForExtract */
59
+ // StatsLogging StatsLoggingEntry
60
+
61
+ /**
62
+ * @template T
63
+ * @template F
64
+ * @typedef {T extends Compilation ? StatsCompilation : T extends ChunkGroupInfoWithName ? StatsChunkGroup : T extends Chunk ? StatsChunk : T extends OriginRecord ? StatsChunkOrigin : T extends Module ? StatsModule : T extends ModuleGraphConnection ? StatsModuleReason : T extends Asset ? StatsAsset : T extends ModuleTrace ? StatsModuleTraceItem : T extends Dependency ? StatsModuleTraceDependency : T extends Error ? StatsError : T extends ModuleProfile ? StatsProfile : F} StatsObject
65
+ */
66
+
67
+ /**
68
+ * @template T
69
+ * @template F
70
+ * @typedef {T extends ChunkGroupInfoWithName[] ? Record<string, StatsObject<ChunkGroupInfoWithName, F>> : T extends (infer V)[] ? StatsObject<V, F>[] : StatsObject<T, F>} CreatedObject
71
+ */
72
+
73
+ /** @typedef {EXPECTED_ANY} ObjectForExtract */
74
+ /** @typedef {EXPECTED_ANY} FactoryData */
75
+ /** @typedef {EXPECTED_ANY} FactoryDataItem */
76
+ /** @typedef {EXPECTED_ANY} Result */
41
77
 
42
78
  /**
43
79
  * @typedef {object} StatsFactoryHooks
@@ -45,7 +81,7 @@ const smartGrouping = require("../util/smartGrouping");
45
81
  * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filter
46
82
  * @property {HookMap<SyncBailHook<[Comparator[], StatsFactoryContext], void>>} sort
47
83
  * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filterSorted
48
- * @property {HookMap<SyncBailHook<[GroupConfig[], StatsFactoryContext], void>>} groupResults
84
+ * @property {HookMap<SyncBailHook<[GroupConfig<EXPECTED_ANY, EXPECTED_ANY>[], StatsFactoryContext], void>>} groupResults
49
85
  * @property {HookMap<SyncBailHook<[Comparator[], StatsFactoryContext], void>>} sortResults
50
86
  * @property {HookMap<SyncBailHook<[FactoryDataItem, StatsFactoryContext, number, number], boolean | void>>} filterResults
51
87
  * @property {HookMap<SyncBailHook<[FactoryDataItem[], StatsFactoryContext], Result | void>>} merge
@@ -88,7 +124,8 @@ class StatsFactory {
88
124
  getItemFactory: new HookMap(() => new SyncBailHook(["item", "context"]))
89
125
  });
90
126
  const hooks = this.hooks;
91
- this._caches = /** @type {TODO} */ ({});
127
+ this._caches =
128
+ /** @type {{ [Key in keyof StatsFactoryHooks]: Map<string, SyncBailHook<EXPECTED_ANY, EXPECTED_ANY>[]> }} */ ({});
92
129
  for (const key of Object.keys(hooks)) {
93
130
  this._caches[/** @type {keyof StatsFactoryHooks} */ (key)] = new Map();
94
131
  }
@@ -128,7 +165,7 @@ class StatsFactory {
128
165
  * @param {HM} hookMap hook map
129
166
  * @param {Caches<H>} cache cache
130
167
  * @param {string} type type
131
- * @param {function(H): R | void} fn fn
168
+ * @param {(hook: H) => R | void} fn fn
132
169
  * @returns {R | void} hook
133
170
  * @private
134
171
  */
@@ -146,7 +183,7 @@ class StatsFactory {
146
183
  * @param {Caches<H>} cache cache
147
184
  * @param {string} type type
148
185
  * @param {FactoryData} data data
149
- * @param {function(H, FactoryData): FactoryData} fn fn
186
+ * @param {(hook: H, factoryData: FactoryData) => FactoryData} fn fn
150
187
  * @returns {FactoryData} data
151
188
  * @private
152
189
  */
@@ -164,15 +201,15 @@ class StatsFactory {
164
201
  * @param {T} hookMap hook map
165
202
  * @param {Caches<H>} cache cache
166
203
  * @param {string} type type
167
- * @param {Array<FactoryData>} items items
168
- * @param {function(H, R, number, number): R | undefined} fn fn
204
+ * @param {FactoryData[]} items items
205
+ * @param {(hook: H, item: R, idx: number, i: number) => R | undefined} fn fn
169
206
  * @param {boolean} forceClone force clone
170
207
  * @returns {R[]} result for each level
171
208
  * @private
172
209
  */
173
210
  _forEachLevelFilter(hookMap, cache, type, items, fn, forceClone) {
174
211
  const hooks = this._getAllLevelHooks(hookMap, cache, type);
175
- if (hooks.length === 0) return forceClone ? items.slice() : items;
212
+ if (hooks.length === 0) return forceClone ? [...items] : items;
176
213
  let i = 0;
177
214
  return items.filter((item, idx) => {
178
215
  for (const hook of hooks) {
@@ -188,10 +225,12 @@ class StatsFactory {
188
225
  }
189
226
 
190
227
  /**
228
+ * @template FactoryData
229
+ * @template FallbackCreatedObject
191
230
  * @param {string} type type
192
231
  * @param {FactoryData} data factory data
193
232
  * @param {Omit<StatsFactoryContext, "type">} baseContext context used as base
194
- * @returns {CreatedObject} created object
233
+ * @returns {CreatedObject<FactoryData, FallbackCreatedObject>} created object
195
234
  */
196
235
  create(type, data, baseContext) {
197
236
  if (this._inCreate) {
@@ -201,18 +240,21 @@ class StatsFactory {
201
240
  this._inCreate = true;
202
241
  return this._create(type, data, baseContext);
203
242
  } finally {
204
- for (const key of Object.keys(this._caches))
243
+ for (const key of Object.keys(this._caches)) {
205
244
  this._caches[/** @type {keyof StatsFactoryHooks} */ (key)].clear();
245
+ }
206
246
  this._inCreate = false;
207
247
  }
208
248
  }
209
249
 
210
250
  /**
251
+ * @private
252
+ * @template FactoryData
253
+ * @template FallbackCreatedObject
211
254
  * @param {string} type type
212
255
  * @param {FactoryData} data factory data
213
256
  * @param {Omit<StatsFactoryContext, "type">} baseContext context used as base
214
- * @returns {CreatedObject} created object
215
- * @private
257
+ * @returns {CreatedObject<FactoryData, FallbackCreatedObject>} created object
216
258
  */
217
259
  _create(type, data, baseContext) {
218
260
  const context = /** @type {StatsFactoryContext} */ ({
@@ -234,7 +276,7 @@ class StatsFactory {
234
276
  // sort items
235
277
  /** @type {Comparator[]} */
236
278
  const comparators = [];
237
- this._forEachLevel(this.hooks.sort, this._caches.sort, type, h =>
279
+ this._forEachLevel(this.hooks.sort, this._caches.sort, type, (h) =>
238
280
  h.call(comparators, context)
239
281
  );
240
282
  if (comparators.length > 0) {
@@ -267,7 +309,7 @@ class StatsFactory {
267
309
  this.hooks.getItemName,
268
310
  this._caches.getItemName,
269
311
  `${type}[]`,
270
- h => h.call(item, itemContext)
312
+ (h) => h.call(item, itemContext)
271
313
  );
272
314
  if (itemName) itemContext[itemName] = item;
273
315
  const innerType = itemName ? `${type}[].${itemName}` : `${type}[]`;
@@ -278,7 +320,7 @@ class StatsFactory {
278
320
  this.hooks.getItemFactory,
279
321
  this._caches.getItemFactory,
280
322
  innerType,
281
- h => h.call(item, itemContext)
323
+ (h) => h.call(item, itemContext)
282
324
  ) || this;
283
325
 
284
326
  // run item factory
@@ -292,7 +334,7 @@ class StatsFactory {
292
334
  this.hooks.sortResults,
293
335
  this._caches.sortResults,
294
336
  type,
295
- h => h.call(comparators2, context)
337
+ (h) => h.call(comparators2, context)
296
338
  );
297
339
  if (comparators2.length > 0) {
298
340
  resultItems.sort(
@@ -302,13 +344,13 @@ class StatsFactory {
302
344
  }
303
345
 
304
346
  // group result items
305
- /** @type {GroupConfig[]} */
347
+ /** @type {GroupConfig<EXPECTED_ANY, EXPECTED_ANY>[]} */
306
348
  const groupConfigs = [];
307
349
  this._forEachLevel(
308
350
  this.hooks.groupResults,
309
351
  this._caches.groupResults,
310
352
  type,
311
- h => h.call(groupConfigs, context)
353
+ (h) => h.call(groupConfigs, context)
312
354
  );
313
355
  if (groupConfigs.length > 0) {
314
356
  resultItems = smartGrouping(resultItems, groupConfigs);
@@ -329,7 +371,7 @@ class StatsFactory {
329
371
  this.hooks.merge,
330
372
  this._caches.merge,
331
373
  type,
332
- h => h.call(finalResultItems, context)
374
+ (h) => h.call(finalResultItems, context)
333
375
  );
334
376
  if (result === undefined) result = finalResultItems;
335
377
 
@@ -346,7 +388,7 @@ class StatsFactory {
346
388
  const object = {};
347
389
 
348
390
  // run extract on value
349
- this._forEachLevel(this.hooks.extract, this._caches.extract, type, h =>
391
+ this._forEachLevel(this.hooks.extract, this._caches.extract, type, (h) =>
350
392
  h.call(object, data, context)
351
393
  );
352
394
 
@@ -360,4 +402,5 @@ class StatsFactory {
360
402
  );
361
403
  }
362
404
  }
405
+
363
406
  module.exports = StatsFactory;
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { HookMap, SyncWaterfallHook, SyncBailHook } = require("tapable");
8
+ const { HookMap, SyncBailHook, SyncWaterfallHook } = require("tapable");
9
9
 
10
10
  /** @typedef {import("./DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
11
11
  /** @typedef {import("./DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
@@ -23,7 +23,7 @@ const { HookMap, SyncWaterfallHook, SyncBailHook } = require("tapable");
23
23
  /**
24
24
  * @typedef {object} PrintedElement
25
25
  * @property {string} element
26
- * @property {string} content
26
+ * @property {string | undefined} content
27
27
  */
28
28
 
29
29
  /**
@@ -44,21 +44,23 @@ const { HookMap, SyncWaterfallHook, SyncBailHook } = require("tapable");
44
44
  * @property {StatsModuleTraceDependency=} moduleTraceDependency
45
45
  */
46
46
 
47
+ /** @typedef {(value: string | number) => string} ColorFunction */
48
+
47
49
  /**
48
- * @typedef {object} KnownStatsPrinterColorFn
49
- * @property {(str: string) => string=} bold
50
- * @property {(str: string) => string=} yellow
51
- * @property {(str: string) => string=} red
52
- * @property {(str: string) => string=} green
53
- * @property {(str: string) => string=} magenta
54
- * @property {(str: string) => string=} cyan
50
+ * @typedef {object} KnownStatsPrinterColorFunctions
51
+ * @property {ColorFunction=} bold
52
+ * @property {ColorFunction=} yellow
53
+ * @property {ColorFunction=} red
54
+ * @property {ColorFunction=} green
55
+ * @property {ColorFunction=} magenta
56
+ * @property {ColorFunction=} cyan
55
57
  */
56
58
 
57
59
  /**
58
- * @typedef {object} KnownStatsPrinterFormaters
60
+ * @typedef {object} KnownStatsPrinterFormatters
59
61
  * @property {(file: string, oversize?: boolean) => string=} formatFilename
60
- * @property {(id: string) => string=} formatModuleId
61
- * @property {(id: string, direction?: "parent"|"child"|"sibling") => string=} formatChunkId
62
+ * @property {(id: string | number) => string=} formatModuleId
63
+ * @property {(id: string | number, direction?: "parent" | "child" | "sibling") => string=} formatChunkId
62
64
  * @property {(size: number) => string=} formatSize
63
65
  * @property {(size: string) => string=} formatLayer
64
66
  * @property {(dateTime: number) => string=} formatDateTime
@@ -67,17 +69,18 @@ const { HookMap, SyncWaterfallHook, SyncBailHook } = require("tapable");
67
69
  * @property {(message: string) => string=} formatError
68
70
  */
69
71
 
70
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsPrinterColorFn & KnownStatsPrinterFormaters & KnownStatsPrinterContext} StatsPrinterContext */
71
- /** @typedef {any} PrintObject */
72
+ /** @typedef {KnownStatsPrinterColorFunctions & KnownStatsPrinterFormatters & KnownStatsPrinterContext & Record<string, EXPECTED_ANY>} StatsPrinterContext */
73
+ /** @typedef {StatsPrinterContext & Required<KnownStatsPrinterColorFunctions> & Required<KnownStatsPrinterFormatters> & { type: string }} StatsPrinterContextWithExtra */
74
+ /** @typedef {EXPECTED_ANY} PrintObject */
72
75
 
73
76
  /**
74
77
  * @typedef {object} StatsPrintHooks
75
78
  * @property {HookMap<SyncBailHook<[string[], StatsPrinterContext], void>>} sortElements
76
- * @property {HookMap<SyncBailHook<[PrintedElement[], StatsPrinterContext], string | void>>} printElements
79
+ * @property {HookMap<SyncBailHook<[PrintedElement[], StatsPrinterContext], string | undefined | void>>} printElements
77
80
  * @property {HookMap<SyncBailHook<[PrintObject[], StatsPrinterContext], boolean | void>>} sortItems
78
81
  * @property {HookMap<SyncBailHook<[PrintObject, StatsPrinterContext], string | void>>} getItemName
79
- * @property {HookMap<SyncBailHook<[string[], StatsPrinterContext], string | void>>} printItems
80
- * @property {HookMap<SyncBailHook<[PrintObject, StatsPrinterContext], string | void>>} print
82
+ * @property {HookMap<SyncBailHook<[string[], StatsPrinterContext], string | undefined>>} printItems
83
+ * @property {HookMap<SyncBailHook<[PrintObject, StatsPrinterContext], string | undefined | void>>} print
81
84
  * @property {HookMap<SyncWaterfallHook<[string, StatsPrinterContext]>>} result
82
85
  */
83
86
 
@@ -97,12 +100,9 @@ class StatsPrinter {
97
100
  () => new SyncBailHook(["printedItems", "context"])
98
101
  ),
99
102
  print: new HookMap(() => new SyncBailHook(["object", "context"])),
100
- /** @type {HookMap<SyncWaterfallHook<[string, StatsPrinterContext]>>} */
101
103
  result: new HookMap(() => new SyncWaterfallHook(["result", "context"]))
102
104
  });
103
- /**
104
- * @type {TODO}
105
- */
105
+ /** @type {Map<StatsPrintHooks[keyof StatsPrintHooks], Map<string, import("tapable").Hook<EXPECTED_ANY, EXPECTED_ANY>[]>>} */
106
106
  this._levelHookCache = new Map();
107
107
  this._inPrint = false;
108
108
  }
@@ -124,7 +124,7 @@ class StatsPrinter {
124
124
  }
125
125
  const cacheEntry = cache.get(type);
126
126
  if (cacheEntry !== undefined) {
127
- return cacheEntry;
127
+ return /** @type {H[]} */ (cacheEntry);
128
128
  }
129
129
  /** @type {H[]} */
130
130
  const hooks = [];
@@ -144,16 +144,16 @@ class StatsPrinter {
144
144
  * @private
145
145
  * @template {StatsPrintHooks[keyof StatsPrintHooks]} HM
146
146
  * @template {HM extends HookMap<infer H> ? H : never} H
147
- * @template {H extends import("tapable").Hook<any, infer R> ? R : never} R
147
+ * @template {H extends import("tapable").Hook<EXPECTED_ANY, infer R> ? R : never} R
148
148
  * @param {HM} hookMap hook map
149
149
  * @param {string} type type
150
- * @param {function(H): R | void} fn fn
151
- * @returns {R | void} hook
150
+ * @param {(hooK: H) => R | undefined | void} fn fn
151
+ * @returns {R | undefined} hook
152
152
  */
153
153
  _forEachLevel(hookMap, type, fn) {
154
154
  for (const hook of this._getAllLevelHooks(hookMap, type)) {
155
155
  const result = fn(/** @type {H} */ (hook));
156
- if (result !== undefined) return result;
156
+ if (result !== undefined) return /** @type {R} */ (result);
157
157
  }
158
158
  }
159
159
 
@@ -165,8 +165,8 @@ class StatsPrinter {
165
165
  * @param {HM} hookMap hook map
166
166
  * @param {string} type type
167
167
  * @param {string} data data
168
- * @param {function(H, string): string} fn fn
169
- * @returns {string} result of `fn`
168
+ * @param {(hook: H, data: string) => string} fn fn
169
+ * @returns {string | undefined} result of `fn`
170
170
  */
171
171
  _forEachLevelWaterfall(hookMap, type, data, fn) {
172
172
  for (const hook of this._getAllLevelHooks(hookMap, type)) {
@@ -179,7 +179,7 @@ class StatsPrinter {
179
179
  * @param {string} type The type
180
180
  * @param {PrintObject} object Object to print
181
181
  * @param {StatsPrinterContext=} baseContext The base context
182
- * @returns {string} printed result
182
+ * @returns {string | undefined} printed result
183
183
  */
184
184
  print(type, object, baseContext) {
185
185
  if (this._inPrint) {
@@ -199,7 +199,7 @@ class StatsPrinter {
199
199
  * @param {string} type type
200
200
  * @param {PrintObject} object object
201
201
  * @param {StatsPrinterContext=} baseContext context
202
- * @returns {string} printed result
202
+ * @returns {string | undefined} printed result
203
203
  */
204
204
  _print(type, object, baseContext) {
205
205
  /** @type {StatsPrinterContext} */
@@ -209,25 +209,31 @@ class StatsPrinter {
209
209
  [type]: object
210
210
  };
211
211
 
212
- let printResult = this._forEachLevel(this.hooks.print, type, hook =>
212
+ /** @type {string | undefined} */
213
+ let printResult = this._forEachLevel(this.hooks.print, type, (hook) =>
213
214
  hook.call(object, context)
214
215
  );
215
216
  if (printResult === undefined) {
216
217
  if (Array.isArray(object)) {
217
- const sortedItems = object.slice();
218
- this._forEachLevel(this.hooks.sortItems, type, h =>
219
- h.call(sortedItems, context)
218
+ const sortedItems = [...object];
219
+ this._forEachLevel(this.hooks.sortItems, type, (h) =>
220
+ h.call(
221
+ sortedItems,
222
+ /** @type {StatsPrinterContextWithExtra} */
223
+ (context)
224
+ )
220
225
  );
221
226
  const printedItems = sortedItems.map((item, i) => {
222
- /** @type {StatsPrinterContext} */
223
- const itemContext = {
224
- ...context,
225
- _index: i
226
- };
227
+ const itemContext =
228
+ /** @type {StatsPrinterContextWithExtra} */
229
+ ({
230
+ ...context,
231
+ _index: i
232
+ });
227
233
  const itemName = this._forEachLevel(
228
234
  this.hooks.getItemName,
229
235
  `${type}[]`,
230
- h => h.call(item, itemContext)
236
+ (h) => h.call(item, itemContext)
231
237
  );
232
238
  if (itemName) itemContext[itemName] = item;
233
239
  return this.print(
@@ -236,8 +242,12 @@ class StatsPrinter {
236
242
  itemContext
237
243
  );
238
244
  });
239
- printResult = this._forEachLevel(this.hooks.printItems, type, h =>
240
- h.call(printedItems, context)
245
+ printResult = this._forEachLevel(this.hooks.printItems, type, (h) =>
246
+ h.call(
247
+ /** @type {string[]} */ (printedItems),
248
+ /** @type {StatsPrinterContextWithExtra} */
249
+ (context)
250
+ )
241
251
  );
242
252
  if (printResult === undefined) {
243
253
  const result = printedItems.filter(Boolean);
@@ -245,12 +255,16 @@ class StatsPrinter {
245
255
  }
246
256
  } else if (object !== null && typeof object === "object") {
247
257
  const elements = Object.keys(object).filter(
248
- key => object[key] !== undefined
258
+ (key) => object[key] !== undefined
249
259
  );
250
- this._forEachLevel(this.hooks.sortElements, type, h =>
251
- h.call(elements, context)
260
+ this._forEachLevel(this.hooks.sortElements, type, (h) =>
261
+ h.call(
262
+ elements,
263
+ /** @type {StatsPrinterContextWithExtra} */
264
+ (context)
265
+ )
252
266
  );
253
- const printedElements = elements.map(element => {
267
+ const printedElements = elements.map((element) => {
254
268
  const content = this.print(`${type}.${element}`, object[element], {
255
269
  ...context,
256
270
  _parent: object,
@@ -259,11 +273,15 @@ class StatsPrinter {
259
273
  });
260
274
  return { element, content };
261
275
  });
262
- printResult = this._forEachLevel(this.hooks.printElements, type, h =>
263
- h.call(printedElements, context)
276
+ printResult = this._forEachLevel(this.hooks.printElements, type, (h) =>
277
+ h.call(
278
+ printedElements,
279
+ /** @type {StatsPrinterContextWithExtra} */
280
+ (context)
281
+ )
264
282
  );
265
283
  if (printResult === undefined) {
266
- const result = printedElements.map(e => e.content).filter(Boolean);
284
+ const result = printedElements.map((e) => e.content).filter(Boolean);
267
285
  if (result.length > 0) printResult = result.join("\n");
268
286
  }
269
287
  }
@@ -272,9 +290,11 @@ class StatsPrinter {
272
290
  return this._forEachLevelWaterfall(
273
291
  this.hooks.result,
274
292
  type,
275
- /** @type {string} */ (printResult),
276
- (h, r) => h.call(r, context)
293
+ /** @type {string} */
294
+ (printResult),
295
+ (h, r) => h.call(r, /** @type {StatsPrinterContextWithExtra} */ (context))
277
296
  );
278
297
  }
279
298
  }
299
+
280
300
  module.exports = StatsPrinter;