webpack 5.97.1 → 5.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +345 -392
  2. package/lib/AsyncDependenciesBlock.js +3 -1
  3. package/lib/BannerPlugin.js +1 -1
  4. package/lib/Cache.js +9 -7
  5. package/lib/CacheFacade.js +5 -5
  6. package/lib/Chunk.js +2 -2
  7. package/lib/ChunkGraph.js +21 -16
  8. package/lib/ChunkTemplate.js +6 -6
  9. package/lib/CleanPlugin.js +10 -10
  10. package/lib/CodeGenerationResults.js +4 -3
  11. package/lib/CompatibilityPlugin.js +4 -1
  12. package/lib/Compilation.js +343 -167
  13. package/lib/Compiler.js +13 -18
  14. package/lib/ConditionalInitFragment.js +1 -1
  15. package/lib/ConstPlugin.js +5 -3
  16. package/lib/ContextModule.js +4 -2
  17. package/lib/ContextModuleFactory.js +3 -3
  18. package/lib/ContextReplacementPlugin.js +43 -16
  19. package/lib/DefinePlugin.js +25 -24
  20. package/lib/DelegatedModule.js +4 -2
  21. package/lib/DelegatedModuleFactoryPlugin.js +2 -1
  22. package/lib/Dependency.js +19 -13
  23. package/lib/DependencyTemplates.js +4 -3
  24. package/lib/DllModule.js +4 -2
  25. package/lib/DllModuleFactory.js +2 -2
  26. package/lib/DllReferencePlugin.js +2 -1
  27. package/lib/DynamicEntryPlugin.js +1 -1
  28. package/lib/EnvironmentPlugin.js +4 -2
  29. package/lib/ExportsInfo.js +72 -40
  30. package/lib/ExternalModule.js +14 -5
  31. package/lib/ExternalModuleFactoryPlugin.js +24 -12
  32. package/lib/FileSystemInfo.js +129 -94
  33. package/lib/FlagDependencyExportsPlugin.js +6 -4
  34. package/lib/FlagDependencyUsagePlugin.js +1 -1
  35. package/lib/Generator.js +29 -1
  36. package/lib/HookWebpackError.js +2 -2
  37. package/lib/HotModuleReplacementPlugin.js +3 -9
  38. package/lib/IgnoreErrorModuleFactory.js +2 -2
  39. package/lib/IgnorePlugin.js +0 -5
  40. package/lib/InitFragment.js +1 -1
  41. package/lib/LoaderOptionsPlugin.js +8 -5
  42. package/lib/MainTemplate.js +7 -7
  43. package/lib/Module.js +44 -21
  44. package/lib/ModuleBuildError.js +3 -1
  45. package/lib/ModuleDependencyError.js +4 -3
  46. package/lib/ModuleDependencyWarning.js +4 -3
  47. package/lib/ModuleFactory.js +9 -3
  48. package/lib/ModuleFilenameHelpers.js +21 -39
  49. package/lib/ModuleGraph.js +20 -14
  50. package/lib/ModuleGraphConnection.js +7 -13
  51. package/lib/ModuleNotFoundError.js +1 -1
  52. package/lib/ModuleParseError.js +2 -1
  53. package/lib/ModuleSourceTypesConstants.js +11 -0
  54. package/lib/ModuleTemplate.js +5 -5
  55. package/lib/ModuleTypeConstants.js +15 -0
  56. package/lib/MultiCompiler.js +4 -4
  57. package/lib/MultiStats.js +1 -1
  58. package/lib/NormalModule.js +101 -54
  59. package/lib/NormalModuleFactory.js +38 -33
  60. package/lib/NormalModuleReplacementPlugin.js +3 -2
  61. package/lib/NullFactory.js +2 -2
  62. package/lib/Parser.js +4 -3
  63. package/lib/ProgressPlugin.js +1 -2
  64. package/lib/RawModule.js +4 -2
  65. package/lib/RecordIdsPlugin.js +6 -2
  66. package/lib/RequestShortener.js +3 -1
  67. package/lib/ResolverFactory.js +12 -9
  68. package/lib/RuntimeModule.js +4 -2
  69. package/lib/RuntimeTemplate.js +2 -1
  70. package/lib/SelfModuleFactory.js +2 -2
  71. package/lib/SourceMapDevToolPlugin.js +0 -8
  72. package/lib/Template.js +6 -5
  73. package/lib/TemplatedPathPlugin.js +15 -12
  74. package/lib/WebpackOptionsApply.js +1 -1
  75. package/lib/asset/AssetGenerator.js +237 -170
  76. package/lib/asset/AssetModulesPlugin.js +52 -10
  77. package/lib/asset/AssetSourceGenerator.js +18 -0
  78. package/lib/asset/RawDataUrlModule.js +4 -2
  79. package/lib/buildChunkGraph.js +14 -4
  80. package/lib/cache/MemoryWithGcCachePlugin.js +6 -2
  81. package/lib/cache/PackFileCacheStrategy.js +137 -121
  82. package/lib/cache/ResolverCachePlugin.js +15 -7
  83. package/lib/cache/getLazyHashedEtag.js +4 -3
  84. package/lib/cli.js +23 -15
  85. package/lib/config/defaults.js +104 -28
  86. package/lib/config/normalization.js +14 -13
  87. package/lib/config/target.js +8 -8
  88. package/lib/container/ContainerEntryModule.js +4 -2
  89. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  90. package/lib/container/FallbackModule.js +4 -2
  91. package/lib/container/FallbackModuleFactory.js +2 -2
  92. package/lib/container/RemoteModule.js +4 -2
  93. package/lib/container/options.js +5 -5
  94. package/lib/css/CssGenerator.js +71 -9
  95. package/lib/css/CssLoadingRuntimeModule.js +5 -2
  96. package/lib/css/CssModulesPlugin.js +41 -9
  97. package/lib/css/CssParser.js +37 -17
  98. package/lib/css/walkCssTokens.js +17 -17
  99. package/lib/debug/ProfilingPlugin.js +98 -38
  100. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +10 -4
  101. package/lib/dependencies/AMDPlugin.js +5 -2
  102. package/lib/dependencies/AMDRequireArrayDependency.js +4 -3
  103. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  104. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +15 -7
  105. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  106. package/lib/dependencies/CommonJsExportRequireDependency.js +4 -5
  107. package/lib/dependencies/CommonJsExportsParserPlugin.js +3 -3
  108. package/lib/dependencies/CommonJsImportsParserPlugin.js +38 -7
  109. package/lib/dependencies/CommonJsRequireContextDependency.js +2 -1
  110. package/lib/dependencies/ContextDependencyHelpers.js +13 -6
  111. package/lib/dependencies/CssIcssExportDependency.js +15 -12
  112. package/lib/dependencies/CssIcssImportDependency.js +4 -1
  113. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -15
  114. package/lib/dependencies/ExportsInfoDependency.js +6 -1
  115. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +5 -5
  116. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +22 -15
  117. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +23 -8
  118. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  119. package/lib/dependencies/HarmonyImportDependency.js +8 -6
  120. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -14
  121. package/lib/dependencies/HarmonyImportSpecifierDependency.js +5 -5
  122. package/lib/dependencies/ImportContextDependency.js +2 -1
  123. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +8 -4
  124. package/lib/dependencies/JsonExportsDependency.js +49 -27
  125. package/lib/dependencies/LoaderPlugin.js +4 -14
  126. package/lib/dependencies/RequireContextDependency.js +2 -1
  127. package/lib/dependencies/RequireContextDependencyParserPlugin.js +6 -3
  128. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -2
  129. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +11 -5
  130. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  131. package/lib/dependencies/WebAssemblyExportImportedDependency.js +1 -1
  132. package/lib/dependencies/WorkerDependency.js +6 -3
  133. package/lib/dependencies/WorkerPlugin.js +100 -41
  134. package/lib/esm/ModuleChunkFormatPlugin.js +5 -0
  135. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +3 -2
  136. package/lib/hmr/HotModuleReplacement.runtime.js +1 -0
  137. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +1 -0
  138. package/lib/hmr/LazyCompilationPlugin.js +32 -24
  139. package/lib/hmr/lazyCompilationBackend.js +1 -1
  140. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  141. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  142. package/lib/ids/IdHelpers.js +15 -14
  143. package/lib/ids/SyncModuleIdsPlugin.js +9 -5
  144. package/lib/index.js +5 -5
  145. package/lib/javascript/BasicEvaluatedExpression.js +6 -6
  146. package/lib/javascript/JavascriptGenerator.js +11 -1
  147. package/lib/javascript/JavascriptModulesPlugin.js +54 -34
  148. package/lib/javascript/JavascriptParser.js +272 -188
  149. package/lib/javascript/JavascriptParserHelpers.js +10 -9
  150. package/lib/javascript/StartupHelpers.js +4 -1
  151. package/lib/json/JsonData.js +4 -4
  152. package/lib/json/JsonGenerator.js +54 -22
  153. package/lib/json/JsonModulesPlugin.js +16 -3
  154. package/lib/json/JsonParser.js +10 -4
  155. package/lib/library/AbstractLibraryPlugin.js +7 -3
  156. package/lib/library/AssignLibraryPlugin.js +29 -1
  157. package/lib/library/EnableLibraryPlugin.js +7 -10
  158. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  159. package/lib/library/ModuleLibraryPlugin.js +121 -15
  160. package/lib/logging/Logger.js +2 -2
  161. package/lib/logging/createConsoleLogger.js +4 -4
  162. package/lib/node/NodeEnvironmentPlugin.js +6 -2
  163. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -2
  164. package/lib/node/ReadFileCompileWasmPlugin.js +1 -2
  165. package/lib/node/nodeConsole.js +3 -1
  166. package/lib/optimize/AggressiveSplittingPlugin.js +1 -1
  167. package/lib/optimize/ConcatenatedModule.js +19 -12
  168. package/lib/optimize/InnerGraph.js +3 -2
  169. package/lib/optimize/InnerGraphPlugin.js +13 -7
  170. package/lib/optimize/LimitChunkCountPlugin.js +20 -0
  171. package/lib/optimize/ModuleConcatenationPlugin.js +10 -7
  172. package/lib/optimize/RealContentHashPlugin.js +8 -4
  173. package/lib/optimize/SideEffectsFlagPlugin.js +4 -2
  174. package/lib/optimize/SplitChunksPlugin.js +90 -65
  175. package/lib/rules/BasicEffectRulePlugin.js +9 -1
  176. package/lib/rules/BasicMatcherRulePlugin.js +15 -4
  177. package/lib/rules/ObjectMatcherRulePlugin.js +12 -3
  178. package/lib/rules/RuleSetCompiler.js +25 -14
  179. package/lib/rules/UseEffectRulePlugin.js +47 -17
  180. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -1
  181. package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
  182. package/lib/schemes/HttpUriPlugin.js +38 -17
  183. package/lib/serialization/BinaryMiddleware.js +52 -19
  184. package/lib/serialization/FileMiddleware.js +78 -48
  185. package/lib/serialization/ObjectMiddleware.js +78 -29
  186. package/lib/serialization/PlainObjectSerializer.js +1 -1
  187. package/lib/serialization/Serializer.js +15 -10
  188. package/lib/serialization/SerializerMiddleware.js +80 -41
  189. package/lib/serialization/SingleItemMiddleware.js +10 -7
  190. package/lib/serialization/types.js +1 -1
  191. package/lib/sharing/ConsumeSharedModule.js +4 -2
  192. package/lib/sharing/ProvideSharedModule.js +4 -2
  193. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  194. package/lib/sharing/utils.js +2 -2
  195. package/lib/stats/DefaultStatsFactoryPlugin.js +81 -79
  196. package/lib/stats/DefaultStatsPresetPlugin.js +43 -23
  197. package/lib/stats/DefaultStatsPrinterPlugin.js +85 -43
  198. package/lib/stats/StatsFactory.js +11 -11
  199. package/lib/stats/StatsPrinter.js +7 -7
  200. package/lib/util/ArrayHelpers.js +2 -4
  201. package/lib/util/ArrayQueue.js +1 -1
  202. package/lib/util/AsyncQueue.js +4 -4
  203. package/lib/util/IterableHelpers.js +1 -1
  204. package/lib/util/LazyBucketSortedSet.js +41 -23
  205. package/lib/util/LazySet.js +3 -2
  206. package/lib/util/MapHelpers.js +1 -1
  207. package/lib/util/ParallelismFactorCalculator.js +1 -1
  208. package/lib/util/Semaphore.js +3 -3
  209. package/lib/util/SetHelpers.js +1 -1
  210. package/lib/util/SortableSet.js +9 -7
  211. package/lib/util/TupleQueue.js +9 -8
  212. package/lib/util/TupleSet.js +2 -2
  213. package/lib/util/WeakTupleMap.js +12 -11
  214. package/lib/util/binarySearchBounds.js +2 -1
  215. package/lib/util/cleverMerge.js +84 -54
  216. package/lib/util/comparators.js +22 -21
  217. package/lib/util/compileBooleanMatcher.js +3 -3
  218. package/lib/util/concatenate.js +6 -4
  219. package/lib/util/create-schema-validation.js +4 -4
  220. package/lib/util/createHash.js +2 -2
  221. package/lib/util/deprecation.js +35 -33
  222. package/lib/util/deterministicGrouping.js +6 -6
  223. package/lib/util/findGraphRoots.js +1 -1
  224. package/lib/util/fs.js +39 -39
  225. package/lib/util/hash/wasm-hash.js +2 -2
  226. package/lib/util/identifier.js +15 -18
  227. package/lib/util/makeSerializable.js +1 -1
  228. package/lib/util/memoize.js +4 -1
  229. package/lib/util/objectToMap.js +3 -2
  230. package/lib/util/processAsyncTree.js +2 -2
  231. package/lib/util/propertyName.js +0 -1
  232. package/lib/util/registerExternalSerializer.js +15 -18
  233. package/lib/util/removeBOM.js +25 -0
  234. package/lib/util/runtime.js +34 -27
  235. package/lib/util/semver.js +18 -8
  236. package/lib/util/serialization.js +5 -16
  237. package/lib/util/smartGrouping.js +3 -3
  238. package/lib/validateSchema.js +4 -7
  239. package/lib/wasm/EnableWasmLoadingPlugin.js +2 -2
  240. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  241. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +11 -0
  242. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +10 -0
  243. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +2 -2
  244. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +4 -0
  245. package/lib/wasm-sync/WebAssemblyGenerator.js +28 -12
  246. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +10 -0
  247. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +2 -2
  248. package/lib/wasm-sync/WebAssemblyParser.js +9 -4
  249. package/lib/web/JsonpChunkLoadingRuntimeModule.js +4 -2
  250. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -0
  251. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -25
  252. package/package.json +27 -26
  253. package/schemas/WebpackOptions.check.js +1 -1
  254. package/schemas/WebpackOptions.json +48 -13
  255. package/schemas/plugins/JsonModulesPluginGenerator.check.d.ts +7 -0
  256. package/schemas/plugins/JsonModulesPluginGenerator.check.js +6 -0
  257. package/schemas/plugins/JsonModulesPluginGenerator.json +11 -0
  258. package/schemas/plugins/JsonModulesPluginParser.check.js +1 -1
  259. package/schemas/plugins/JsonModulesPluginParser.json +4 -0
  260. package/schemas/plugins/SourceMapDevToolPlugin.json +2 -2
  261. package/types.d.ts +888 -583
  262. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
@@ -27,14 +27,15 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
27
27
  /** @typedef {import("webpack-sources").Source} Source */
28
28
  /** @typedef {import("../Chunk")} Chunk */
29
29
  /** @typedef {import("../Chunk").ChunkId} ChunkId */
30
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
30
31
  /** @typedef {import("../ChunkGroup")} ChunkGroup */
31
32
  /** @typedef {import("../ChunkGroup").OriginRecord} OriginRecord */
32
33
  /** @typedef {import("../Compilation")} Compilation */
33
34
  /** @typedef {import("../Compilation").Asset} Asset */
34
35
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
36
+ /** @typedef {import("../Compilation").KnownNormalizedStatsOptions} KnownNormalizedStatsOptions */
35
37
  /** @typedef {import("../Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
36
38
  /** @typedef {import("../Compiler")} Compiler */
37
- /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
38
39
  /** @typedef {import("../Dependency")} Dependency */
39
40
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
40
41
  /** @typedef {import("../Module")} Module */
@@ -42,20 +43,23 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
42
43
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
43
44
  /** @typedef {import("../ModuleProfile")} ModuleProfile */
44
45
  /** @typedef {import("../RequestShortener")} RequestShortener */
45
- /** @typedef {import("../WebpackError")} WebpackError */
46
46
  /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
47
+ /** @typedef {import("../WebpackError")} WebpackError */
48
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
49
+ /** @typedef {import("./StatsFactory")} StatsFactory */
50
+ /** @typedef {import("./StatsFactory").StatsFactoryContext} StatsFactoryContext */
51
+
47
52
  /**
48
53
  * @template T
49
54
  * @typedef {import("../util/comparators").Comparator<T>} Comparator<T>
50
55
  */
51
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
56
+
52
57
  /**
53
58
  * @template T, R
54
59
  * @typedef {import("../util/smartGrouping").GroupConfig<T, R>} GroupConfig
55
60
  */
56
- /** @typedef {import("./StatsFactory")} StatsFactory */
57
- /** @typedef {import("./StatsFactory").StatsFactoryContext} StatsFactoryContext */
58
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsCompilation} StatsCompilation */
61
+
62
+ /** @typedef {KnownStatsCompilation & Record<string, EXPECTED_ANY>} StatsCompilation */
59
63
  /**
60
64
  * @typedef {object} KnownStatsCompilation
61
65
  * @property {any=} env
@@ -83,7 +87,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
83
87
  * @property {Record<string, StatsLogging>=} logging
84
88
  */
85
89
 
86
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsLogging} StatsLogging */
90
+ /** @typedef {KnownStatsLogging & Record<string, EXPECTED_ANY>} StatsLogging */
87
91
  /**
88
92
  * @typedef {object} KnownStatsLogging
89
93
  * @property {StatsLoggingEntry[]} entries
@@ -91,18 +95,18 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
91
95
  * @property {boolean} debug
92
96
  */
93
97
 
94
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsLoggingEntry} StatsLoggingEntry */
98
+ /** @typedef {KnownStatsLoggingEntry & Record<string, EXPECTED_ANY>} StatsLoggingEntry */
95
99
  /**
96
100
  * @typedef {object} KnownStatsLoggingEntry
97
101
  * @property {string} type
98
102
  * @property {string=} message
99
103
  * @property {string[]=} trace
100
104
  * @property {StatsLoggingEntry[]=} children
101
- * @property {any[]=} args
105
+ * @property {EXPECTED_ANY[]=} args
102
106
  * @property {number=} time
103
107
  */
104
108
 
105
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsAsset} StatsAsset */
109
+ /** @typedef {KnownStatsAsset & Record<string, EXPECTED_ANY>} StatsAsset */
106
110
  /**
107
111
  * @typedef {object} KnownStatsAsset
108
112
  * @property {string} type
@@ -123,7 +127,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
123
127
  * @property {boolean=} isOverSizeLimit
124
128
  */
125
129
 
126
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsChunkGroup} StatsChunkGroup */
130
+ /** @typedef {KnownStatsChunkGroup & Record<string, EXPECTED_ANY>} StatsChunkGroup */
127
131
  /**
128
132
  * @typedef {object} KnownStatsChunkGroup
129
133
  * @property {(string | null)=} name
@@ -139,7 +143,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
139
143
  * @property {boolean=} isOverSizeLimit
140
144
  */
141
145
 
142
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsModule} StatsModule */
146
+ /** @typedef {KnownStatsModule & Record<string, EXPECTED_ANY>} StatsModule */
143
147
  /**
144
148
  * @typedef {object} KnownStatsModule
145
149
  * @property {string=} type
@@ -183,7 +187,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
183
187
  * @property {ReturnType<Source["source"]>=} source
184
188
  */
185
189
 
186
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsProfile} StatsProfile */
190
+ /** @typedef {KnownStatsProfile & Record<string, EXPECTED_ANY>} StatsProfile */
187
191
  /**
188
192
  * @typedef {object} KnownStatsProfile
189
193
  * @property {number} total
@@ -198,7 +202,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
198
202
  * @property {number} dependencies
199
203
  */
200
204
 
201
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsModuleIssuer} StatsModuleIssuer */
205
+ /** @typedef {KnownStatsModuleIssuer & Record<string, EXPECTED_ANY>} StatsModuleIssuer */
202
206
  /**
203
207
  * @typedef {object} KnownStatsModuleIssuer
204
208
  * @property {string} identifier
@@ -207,7 +211,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
207
211
  * @property {StatsProfile} profile
208
212
  */
209
213
 
210
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsModuleReason} StatsModuleReason */
214
+ /** @typedef {KnownStatsModuleReason & Record<string, EXPECTED_ANY>} StatsModuleReason */
211
215
  /**
212
216
  * @typedef {object} KnownStatsModuleReason
213
217
  * @property {string | null} moduleIdentifier
@@ -224,7 +228,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
224
228
  * @property {(string | number | null)=} resolvedModuleId
225
229
  */
226
230
 
227
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsChunk} StatsChunk */
231
+ /** @typedef {KnownStatsChunk & Record<string, EXPECTED_ANY>} StatsChunk */
228
232
  /**
229
233
  * @typedef {object} KnownStatsChunk
230
234
  * @property {boolean} rendered
@@ -250,7 +254,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
250
254
  * @property {StatsChunkOrigin[]=} origins
251
255
  */
252
256
 
253
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsChunkOrigin} StatsChunkOrigin */
257
+ /** @typedef {KnownStatsChunkOrigin & Record<string, EXPECTED_ANY>} StatsChunkOrigin */
254
258
  /**
255
259
  * @typedef {object} KnownStatsChunkOrigin
256
260
  * @property {string} module
@@ -261,7 +265,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
261
265
  * @property {(string | number)=} moduleId
262
266
  */
263
267
 
264
- /** @typedef { Record<string, EXPECTED_ANY> & KnownStatsModuleTraceItem} StatsModuleTraceItem */
268
+ /** @typedef {KnownStatsModuleTraceItem & Record<string, EXPECTED_ANY>} StatsModuleTraceItem */
265
269
  /**
266
270
  * @typedef {object} KnownStatsModuleTraceItem
267
271
  * @property {string=} originIdentifier
@@ -273,13 +277,13 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
273
277
  * @property {(string|number)=} moduleId
274
278
  */
275
279
 
276
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsModuleTraceDependency} StatsModuleTraceDependency */
280
+ /** @typedef {KnownStatsModuleTraceDependency & Record<string, EXPECTED_ANY>} StatsModuleTraceDependency */
277
281
  /**
278
282
  * @typedef {object} KnownStatsModuleTraceDependency
279
283
  * @property {string=} loc
280
284
  */
281
285
 
282
- /** @typedef {Record<string, EXPECTED_ANY> & KnownStatsError} StatsError */
286
+ /** @typedef {KnownStatsError & Record<string, EXPECTED_ANY>} StatsError */
283
287
  /**
284
288
  * @typedef {object} KnownStatsError
285
289
  * @property {string} message
@@ -293,8 +297,9 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
293
297
  * @property {ChunkId=} chunkId
294
298
  * @property {string|number=} moduleId
295
299
  * @property {StatsModuleTraceItem[]=} moduleTrace
296
- * @property {any=} details
300
+ * @property {string=} details
297
301
  * @property {string=} stack
302
+ * @property {string=} compilerPath
298
303
  */
299
304
 
300
305
  /** @typedef {Asset & { type: string, related: PreprocessedAsset[] | undefined }} PreprocessedAsset */
@@ -328,7 +333,7 @@ const { makePathsRelative, parseResource } = require("../util/identifier");
328
333
  * @template T
329
334
  * @template I
330
335
  * @param {Iterable<T>} items items to select from
331
- * @param {function(T): Iterable<I>} selector selector function to select values from item
336
+ * @param {(item: T) => Iterable<I>} selector selector function to select values from item
332
337
  * @returns {I[]} array of values
333
338
  */
334
339
  const uniqueArray = (items, selector) => {
@@ -346,7 +351,7 @@ const uniqueArray = (items, selector) => {
346
351
  * @template T
347
352
  * @template I
348
353
  * @param {Iterable<T>} items items to select from
349
- * @param {function(T): Iterable<I>} selector selector function to select values from item
354
+ * @param {(item: T) => Iterable<I>} selector selector function to select values from item
350
355
  * @param {Comparator<I>} comparator comparator function
351
356
  * @returns {I[]} array of values
352
357
  */
@@ -374,8 +379,9 @@ const mapObject = (obj, fn) => {
374
379
  };
375
380
 
376
381
  /**
382
+ * @template T
377
383
  * @param {Compilation} compilation the compilation
378
- * @param {function(Compilation, string): any[]} getItems get items
384
+ * @param {(compilation: Compilation, name: string) => T[]} getItems get items
379
385
  * @returns {number} total number
380
386
  */
381
387
  const countWithChildren = (compilation, getItems) => {
@@ -396,7 +402,9 @@ const EXTRACT_ERROR = {
396
402
  object.message = error;
397
403
  } else {
398
404
  if (error.chunk) {
399
- object.chunkName = error.chunk.name;
405
+ object.chunkName =
406
+ /** @type {string | undefined} */
407
+ (error.chunk.name);
400
408
  object.chunkEntry = error.chunk.hasRuntime();
401
409
  object.chunkInitial = error.chunk.canBeInitial();
402
410
  }
@@ -904,7 +912,7 @@ const SIMPLE_EXTRACTORS = {
904
912
  object.warningsCount = countWithChildren(compilation, (c, childType) => {
905
913
  if (
906
914
  !warningsFilter &&
907
- /** @type {((warning: StatsError, textValue: string) => boolean)[]} */
915
+ /** @type {KnownNormalizedStatsOptions["warningsFilter"]} */
908
916
  (warningsFilter).length === 0
909
917
  )
910
918
  return cachedGetWarnings(c);
@@ -1574,7 +1582,7 @@ const SIMPLE_EXTRACTORS = {
1574
1582
  }
1575
1583
  };
1576
1584
 
1577
- /** @type {Record<string, Record<string, (thing: any, context: StatsFactoryContext, options: NormalizedStatsOptions) => boolean | undefined>>} */
1585
+ /** @type {Record<string, Record<string, (thing: ModuleGraphConnection, context: StatsFactoryContext, options: NormalizedStatsOptions, idx: number, i: number) => boolean | undefined>>} */
1578
1586
  const FILTER = {
1579
1587
  "module.reasons": {
1580
1588
  "!orphanModules": (reason, { compilation: { chunkGraph } }) => {
@@ -1588,7 +1596,7 @@ const FILTER = {
1588
1596
  }
1589
1597
  };
1590
1598
 
1591
- /** @type {Record<string, Record<string, (thing: KnownStatsError, context: StatsFactoryContext, options: NormalizedStatsOptions) => boolean | undefined>>} */
1599
+ /** @type {Record<string, Record<string, (thing: KnownStatsError, context: StatsFactoryContext, options: NormalizedStatsOptions, idx: number, i: number) => boolean | undefined>>} */
1592
1600
  const FILTER_RESULTS = {
1593
1601
  "compilation.warnings": {
1594
1602
  warningsFilter: util.deprecate(
@@ -1604,39 +1612,20 @@ const FILTER_RESULTS = {
1604
1612
  }
1605
1613
  };
1606
1614
 
1607
- /** @type {Record<string, (comparators: Function[], context: StatsFactoryContext) => void>} */
1615
+ /**
1616
+ * @type {Record<string, (comparators: Comparator<Module>[], context: StatsFactoryContext) => void>}
1617
+ */
1608
1618
  const MODULES_SORTER = {
1609
1619
  _: (comparators, { compilation: { moduleGraph } }) => {
1610
1620
  comparators.push(
1611
- compareSelect(
1612
- /**
1613
- * @param {Module} m module
1614
- * @returns {number | null} depth
1615
- */
1616
- m => moduleGraph.getDepth(m),
1617
- compareNumbers
1618
- ),
1619
- compareSelect(
1620
- /**
1621
- * @param {Module} m module
1622
- * @returns {number | null} index
1623
- */
1624
- m => moduleGraph.getPreOrderIndex(m),
1625
- compareNumbers
1626
- ),
1627
- compareSelect(
1628
- /**
1629
- * @param {Module} m module
1630
- * @returns {string} identifier
1631
- */
1632
- m => m.identifier(),
1633
- compareIds
1634
- )
1621
+ compareSelect(m => moduleGraph.getDepth(m), compareNumbers),
1622
+ compareSelect(m => moduleGraph.getPreOrderIndex(m), compareNumbers),
1623
+ compareSelect(m => m.identifier(), compareIds)
1635
1624
  );
1636
1625
  }
1637
1626
  };
1638
1627
 
1639
- /** @type {Record<string, Record<string, (comparators: Function[], context: StatsFactoryContext) => void>>} */
1628
+ /** @type {Record<string, Record<string, (comparators: Comparator<any>[], context: StatsFactoryContext, options: NormalizedStatsOptions) => void>>} */
1640
1629
  const SORTERS = {
1641
1630
  "compilation.chunks": {
1642
1631
  _: comparators => {
@@ -1852,7 +1841,7 @@ const spaceLimited = (
1852
1841
  // So it should always end up being smaller
1853
1842
  const headerSize = group.filteredChildren ? 2 : 1;
1854
1843
  const limited = spaceLimited(
1855
- /** @type {Children<T>} */ (group.children),
1844
+ /** @type {Children<T>[]} */ (group.children),
1856
1845
  maxGroupSize -
1857
1846
  // we should use ceil to always feet in max
1858
1847
  Math.ceil(oversize / groups.length) -
@@ -1924,7 +1913,9 @@ const errorsSpaceLimit = (errors, max) => {
1924
1913
  const error = errors[i++];
1925
1914
  result.push({
1926
1915
  ...error,
1927
- details: error.details.split("\n").slice(0, -overLimit).join("\n"),
1916
+ details:
1917
+ /** @type {string} */
1918
+ (error.details).split("\n").slice(0, -overLimit).join("\n"),
1928
1919
  filteredDetails: overLimit
1929
1920
  });
1930
1921
  filtered = errors.length - i;
@@ -2150,7 +2141,7 @@ const ASSETS_GROUPERS = {
2150
2141
 
2151
2142
  /** @typedef {Record<string, (groupConfigs: GroupConfig<KnownStatsModule, TODO>[], context: StatsFactoryContext, options: NormalizedStatsOptions) => void>} ModulesGroupers */
2152
2143
 
2153
- /** @type {function("module" | "chunk" | "root-of-chunk" | "nested"): ModulesGroupers} */
2144
+ /** @type {(type: "module" | "chunk" | "root-of-chunk" | "nested") => ModulesGroupers} */
2154
2145
  const MODULES_GROUPERS = type => ({
2155
2146
  _: (groupConfigs, context, options) => {
2156
2147
  /**
@@ -2312,7 +2303,7 @@ const MODULES_GROUPERS = type => ({
2312
2303
  }
2313
2304
  });
2314
2305
 
2315
- /** @typedef {Record<string, (groupConfigs: import("../util/smartGrouping").GroupConfig<KnownStatsModuleReason, TODO>[], context: StatsFactoryContext, options: NormalizedStatsOptions) => void>} ModuleReasonsGroupers */
2306
+ /** @typedef {Record<string, (groupConfigs: GroupConfig<KnownStatsModuleReason, TODO>[], context: StatsFactoryContext, options: NormalizedStatsOptions) => void>} ModuleReasonsGroupers */
2316
2307
 
2317
2308
  /** @type {ModuleReasonsGroupers} */
2318
2309
  const MODULE_REASONS_GROUPERS = {
@@ -2366,15 +2357,15 @@ const sortOrderRegular = field => {
2366
2357
 
2367
2358
  /**
2368
2359
  * @template T
2369
- * @param {string} field field name
2370
- * @returns {function(T, T): 0 | 1 | -1} comparators
2360
+ * @param {string | false} field field name
2361
+ * @returns {(a: T, b: T) => 0 | 1 | -1} comparators
2371
2362
  */
2372
2363
  const sortByField = field => {
2373
2364
  if (!field) {
2374
2365
  /**
2375
- * @param {any} a first
2376
- * @param {any} b second
2377
- * @returns {-1|0|1} zero
2366
+ * @param {T} a first
2367
+ * @param {T} b second
2368
+ * @returns {-1 | 0 | 1} zero
2378
2369
  */
2379
2370
  const noSort = (a, b) => 0;
2380
2371
  return noSort;
@@ -2432,9 +2423,10 @@ const RESULT_SORTERS = {
2432
2423
  };
2433
2424
 
2434
2425
  /**
2435
- * @param {Record<string, Record<string, Function>>} config the config see above
2426
+ * @template T
2427
+ * @param {Record<string, Record<string, T>>} config the config see above
2436
2428
  * @param {NormalizedStatsOptions} options stats options
2437
- * @param {function(string, Function): void} fn handler function called for every active line in config
2429
+ * @param {(hookFor: string, fn: T) => void} fn handler function called for every active line in config
2438
2430
  * @returns {void}
2439
2431
  */
2440
2432
  const iterateConfig = (config, options, fn) => {
@@ -2523,13 +2515,18 @@ class DefaultStatsFactoryPlugin {
2523
2515
  * @param {NormalizedStatsOptions} options stats options
2524
2516
  */
2525
2517
  (stats, options) => {
2526
- iterateConfig(SIMPLE_EXTRACTORS, options, (hookFor, fn) => {
2527
- stats.hooks.extract
2528
- .for(hookFor)
2529
- .tap("DefaultStatsFactoryPlugin", (obj, data, ctx) =>
2530
- fn(obj, data, ctx, options, stats)
2531
- );
2532
- });
2518
+ iterateConfig(
2519
+ /** @type {TODO} */
2520
+ (SIMPLE_EXTRACTORS),
2521
+ options,
2522
+ (hookFor, fn) => {
2523
+ stats.hooks.extract
2524
+ .for(hookFor)
2525
+ .tap("DefaultStatsFactoryPlugin", (obj, data, ctx) =>
2526
+ fn(obj, data, ctx, options, stats)
2527
+ );
2528
+ }
2529
+ );
2533
2530
  iterateConfig(FILTER, options, (hookFor, fn) => {
2534
2531
  stats.hooks.filter
2535
2532
  .for(hookFor)
@@ -2558,13 +2555,18 @@ class DefaultStatsFactoryPlugin {
2558
2555
  fn(comparators, ctx, options)
2559
2556
  );
2560
2557
  });
2561
- iterateConfig(RESULT_GROUPERS, options, (hookFor, fn) => {
2562
- stats.hooks.groupResults
2563
- .for(hookFor)
2564
- .tap("DefaultStatsFactoryPlugin", (groupConfigs, ctx) =>
2565
- fn(groupConfigs, ctx, options)
2566
- );
2567
- });
2558
+ iterateConfig(
2559
+ /** @type {TODO} */
2560
+ (RESULT_GROUPERS),
2561
+ options,
2562
+ (hookFor, fn) => {
2563
+ stats.hooks.groupResults
2564
+ .for(hookFor)
2565
+ .tap("DefaultStatsFactoryPlugin", (groupConfigs, ctx) =>
2566
+ fn(groupConfigs, ctx, options)
2567
+ );
2568
+ }
2569
+ );
2568
2570
  for (const key of Object.keys(ITEM_NAMES)) {
2569
2571
  const itemName = ITEM_NAMES[key];
2570
2572
  stats.hooks.getItemName
@@ -8,26 +8,30 @@
8
8
  const RequestShortener = require("../RequestShortener");
9
9
 
10
10
  /** @typedef {import("../../declarations/WebpackOptions").StatsOptions} StatsOptions */
11
+ /** @typedef {import("../../declarations/WebpackOptions").StatsValue} StatsValue */
11
12
  /** @typedef {import("../Compilation")} Compilation */
12
13
  /** @typedef {import("../Compilation").CreateStatsOptionsContext} CreateStatsOptionsContext */
14
+ /** @typedef {import("../Compilation").KnownNormalizedStatsOptions} KnownNormalizedStatsOptions */
15
+ /** @typedef {import("../Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
13
16
  /** @typedef {import("../Compiler")} Compiler */
14
17
  /** @typedef {import("./DefaultStatsFactoryPlugin").StatsError} StatsError */
15
18
 
16
19
  /**
17
- * @param {StatsOptions} options options
20
+ * @param {Partial<NormalizedStatsOptions>} options options
18
21
  * @param {StatsOptions} defaults default options
19
22
  */
20
23
  const applyDefaults = (options, defaults) => {
21
24
  for (const _k of Object.keys(defaults)) {
22
25
  const key = /** @type {keyof StatsOptions} */ (_k);
23
26
  if (typeof options[key] === "undefined") {
24
- /** @type {TODO} */
25
- (options)[key] = defaults[key];
27
+ options[/** @type {keyof NormalizedStatsOptions} */ (key)] =
28
+ defaults[key];
26
29
  }
27
30
  }
28
31
  };
29
32
 
30
- /** @typedef {Record<string, StatsOptions>} NamedPresets */
33
+ /** @typedef {{ [Key in Exclude<StatsValue, boolean | object | "normal">]: StatsOptions }} NamedPresets */
34
+
31
35
  /** @type {NamedPresets} */
32
36
  const NAMED_PRESETS = {
33
37
  verbose: {
@@ -136,31 +140,31 @@ const NAMED_PRESETS = {
136
140
  };
137
141
 
138
142
  /**
139
- * @param {StatsOptions} all stats option
143
+ * @param {Partial<NormalizedStatsOptions>} all stats option
140
144
  * @returns {boolean} true when enabled, otherwise false
141
145
  */
142
146
  const NORMAL_ON = ({ all }) => all !== false;
143
147
  /**
144
- * @param {StatsOptions} all stats option
148
+ * @param {Partial<NormalizedStatsOptions>} all stats option
145
149
  * @returns {boolean} true when enabled, otherwise false
146
150
  */
147
151
  const NORMAL_OFF = ({ all }) => all === true;
148
152
  /**
149
- * @param {StatsOptions} all stats option
153
+ * @param {Partial<NormalizedStatsOptions>} all stats option
150
154
  * @param {CreateStatsOptionsContext} forToString stats options context
151
155
  * @returns {boolean} true when enabled, otherwise false
152
156
  */
153
157
  const ON_FOR_TO_STRING = ({ all }, { forToString }) =>
154
158
  forToString ? all !== false : all === true;
155
159
  /**
156
- * @param {StatsOptions} all stats option
160
+ * @param {Partial<NormalizedStatsOptions>} all stats option
157
161
  * @param {CreateStatsOptionsContext} forToString stats options context
158
162
  * @returns {boolean} true when enabled, otherwise false
159
163
  */
160
164
  const OFF_FOR_TO_STRING = ({ all }, { forToString }) =>
161
165
  forToString ? all === true : all !== false;
162
166
  /**
163
- * @param {StatsOptions} all stats option
167
+ * @param {Partial<NormalizedStatsOptions>} all stats option
164
168
  * @param {CreateStatsOptionsContext} forToString stats options context
165
169
  * @returns {boolean | "auto"} true when enabled, otherwise false
166
170
  */
@@ -171,9 +175,10 @@ const AUTO_FOR_TO_STRING = ({ all }, { forToString }) => {
171
175
  return true;
172
176
  };
173
177
 
174
- /** @typedef {Record<string, (options: StatsOptions, context: CreateStatsOptionsContext, compilation: Compilation) => StatsOptions[keyof StatsOptions] | RequestShortener>} Defaults */
178
+ /** @typedef {keyof NormalizedStatsOptions} DefaultsKeys */
179
+ /** @typedef {{ [Key in DefaultsKeys]: (options: Partial<NormalizedStatsOptions>, context: CreateStatsOptionsContext, compilation: Compilation) => NormalizedStatsOptions[Key] | RequestShortener }} Defaults */
175
180
 
176
- /** @type {Defaults} */
181
+ /** @type {Partial<Defaults>} */
177
182
  const DEFAULTS = {
178
183
  context: (options, context, compilation) => compilation.compiler.context,
179
184
  requestShortener: (options, context, compilation) =>
@@ -274,32 +279,37 @@ const DEFAULTS = {
274
279
  };
275
280
 
276
281
  /**
277
- * @param {string | ({ test: function(string): boolean }) | (function(string): boolean) | boolean} item item to normalize
278
- * @returns {(function(string): boolean) | undefined} normalize fn
282
+ * @template {string} T
283
+ * @param {string | ({ test: (value: T) => boolean }) | ((value: T, ...args: EXPECTED_ANY[]) => boolean) | boolean} item item to normalize
284
+ * @returns {(value: T, ...args: EXPECTED_ANY[]) => boolean} normalize fn
279
285
  */
280
286
  const normalizeFilter = item => {
281
287
  if (typeof item === "string") {
282
288
  const regExp = new RegExp(
283
289
  `[\\\\/]${item.replace(/[-[\]{}()*+?.\\^$|]/g, "\\$&")}([\\\\/]|$|!|\\?)`
284
290
  );
285
- return ident => regExp.test(ident);
291
+ return ident => regExp.test(/** @type {T} */ (ident));
286
292
  }
287
293
  if (item && typeof item === "object" && typeof item.test === "function") {
288
294
  return ident => item.test(ident);
289
295
  }
290
- if (typeof item === "function") {
291
- return item;
292
- }
293
296
  if (typeof item === "boolean") {
294
297
  return () => item;
295
298
  }
299
+
300
+ return /** @type {(value: T, ...args: EXPECTED_ANY[]) => boolean} */ (item);
296
301
  };
297
302
 
298
- /** @type {Record<string, function(any): any[]>} */
303
+ /** @typedef {keyof (KnownNormalizedStatsOptions | StatsOptions)} NormalizerKeys */
304
+ /** @typedef {{ [Key in NormalizerKeys]: (value: StatsOptions[Key]) => KnownNormalizedStatsOptions[Key] }} Normalizers */
305
+
306
+ /** @type {Partial<Normalizers>} */
299
307
  const NORMALIZER = {
300
308
  excludeModules: value => {
301
309
  if (!Array.isArray(value)) {
302
- value = value ? [value] : [];
310
+ value = value
311
+ ? /** @type {KnownNormalizedStatsOptions["excludeModules"]} */ ([value])
312
+ : [];
303
313
  }
304
314
  return value.map(normalizeFilter);
305
315
  },
@@ -342,11 +352,13 @@ const NORMALIZER = {
342
352
  },
343
353
  logging: value => {
344
354
  if (value === true) value = "log";
345
- return value;
355
+ return /** @type {KnownNormalizedStatsOptions["logging"]} */ (value);
346
356
  },
347
357
  loggingDebug: value => {
348
358
  if (!Array.isArray(value)) {
349
- value = value ? [value] : [];
359
+ value = value
360
+ ? /** @type {KnownNormalizedStatsOptions["loggingDebug"]} */ ([value])
361
+ : [];
350
362
  }
351
363
  return value.map(normalizeFilter);
352
364
  }
@@ -373,10 +385,18 @@ class DefaultStatsPresetPlugin {
373
385
  (options, context) => {
374
386
  for (const key of Object.keys(DEFAULTS)) {
375
387
  if (options[key] === undefined)
376
- options[key] = DEFAULTS[key](options, context, compilation);
388
+ options[key] =
389
+ /** @type {Defaults[DefaultsKeys]} */
390
+ (DEFAULTS[/** @type {DefaultsKeys} */ (key)])(
391
+ options,
392
+ context,
393
+ compilation
394
+ );
377
395
  }
378
396
  for (const key of Object.keys(NORMALIZER)) {
379
- options[key] = NORMALIZER[key](options[key]);
397
+ options[key] =
398
+ /** @type {TODO} */
399
+ (NORMALIZER[/** @type {NormalizerKeys} */ (key)])(options[key]);
380
400
  }
381
401
  }
382
402
  );