webpack 5.93.0 → 5.95.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 (344) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +33 -20
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +75 -68
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +6 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +41 -15
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +130 -69
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +21 -13
  94. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  95. package/lib/WatchIgnorePlugin.js +26 -9
  96. package/lib/Watching.js +10 -5
  97. package/lib/WebpackOptionsApply.js +84 -62
  98. package/lib/asset/AssetGenerator.js +107 -42
  99. package/lib/asset/AssetModulesPlugin.js +29 -23
  100. package/lib/asset/AssetSourceGenerator.js +2 -7
  101. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  102. package/lib/buildChunkGraph.js +93 -81
  103. package/lib/cache/IdleFileCachePlugin.js +4 -4
  104. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  105. package/lib/cache/PackFileCacheStrategy.js +51 -50
  106. package/lib/cache/ResolverCachePlugin.js +6 -6
  107. package/lib/cache/mergeEtags.js +16 -21
  108. package/lib/cli.js +148 -104
  109. package/lib/config/browserslistTargetHandler.js +16 -13
  110. package/lib/config/defaults.js +32 -28
  111. package/lib/config/normalization.js +335 -344
  112. package/lib/config/target.js +42 -52
  113. package/lib/container/ContainerEntryModule.js +2 -2
  114. package/lib/container/ContainerPlugin.js +1 -1
  115. package/lib/container/RemoteRuntimeModule.js +11 -8
  116. package/lib/container/options.js +18 -4
  117. package/lib/css/CssExportsGenerator.js +26 -24
  118. package/lib/css/CssGenerator.js +9 -4
  119. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  120. package/lib/css/CssModulesPlugin.js +127 -47
  121. package/lib/css/CssParser.js +20 -18
  122. package/lib/css/walkCssTokens.js +80 -95
  123. package/lib/debug/ProfilingPlugin.js +19 -20
  124. package/lib/dependencies/AMDDefineDependency.js +1 -1
  125. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  126. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  127. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  128. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  129. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  130. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  131. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  132. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  133. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  134. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  135. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  136. package/lib/dependencies/ConstDependency.js +1 -1
  137. package/lib/dependencies/ContextDependency.js +7 -2
  138. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  139. package/lib/dependencies/ContextElementDependency.js +35 -8
  140. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  141. package/lib/dependencies/CssExportDependency.js +7 -7
  142. package/lib/dependencies/CssImportDependency.js +0 -2
  143. package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
  144. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  145. package/lib/dependencies/CssUrlDependency.js +4 -5
  146. package/lib/dependencies/DynamicExports.js +5 -5
  147. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  148. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  149. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  151. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  153. package/lib/dependencies/HarmonyExports.js +2 -2
  154. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  155. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
  157. package/lib/dependencies/ImportDependency.js +1 -1
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  159. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  160. package/lib/dependencies/ImportParserPlugin.js +39 -44
  161. package/lib/dependencies/JsonExportsDependency.js +22 -18
  162. package/lib/dependencies/LoaderPlugin.js +47 -36
  163. package/lib/dependencies/LocalModule.js +1 -1
  164. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  165. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  166. package/lib/dependencies/ProvidedDependency.js +1 -1
  167. package/lib/dependencies/PureExpressionDependency.js +6 -6
  168. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  169. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  170. package/lib/dependencies/SystemPlugin.js +1 -1
  171. package/lib/dependencies/URLDependency.js +3 -3
  172. package/lib/dependencies/URLPlugin.js +66 -12
  173. package/lib/dependencies/WorkerPlugin.js +25 -24
  174. package/lib/dependencies/processExportInfo.js +3 -1
  175. package/lib/electron/ElectronTargetPlugin.js +1 -0
  176. package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
  177. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  178. package/lib/formatLocation.js +1 -2
  179. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  180. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  181. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  182. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  183. package/lib/hmr/lazyCompilationBackend.js +64 -40
  184. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  185. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  186. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  187. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  188. package/lib/ids/IdHelpers.js +29 -39
  189. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  190. package/lib/index.js +1 -5
  191. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
  192. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  193. package/lib/javascript/ChunkHelpers.js +1 -1
  194. package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
  195. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  196. package/lib/javascript/JavascriptGenerator.js +23 -7
  197. package/lib/javascript/JavascriptModulesPlugin.js +133 -86
  198. package/lib/javascript/JavascriptParser.js +179 -200
  199. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  200. package/lib/javascript/StartupHelpers.js +41 -13
  201. package/lib/json/JsonGenerator.js +7 -13
  202. package/lib/json/JsonModulesPlugin.js +1 -4
  203. package/lib/json/JsonParser.js +5 -3
  204. package/lib/library/AmdLibraryPlugin.js +12 -16
  205. package/lib/library/AssignLibraryPlugin.js +8 -10
  206. package/lib/library/EnableLibraryPlugin.js +15 -14
  207. package/lib/library/JsonpLibraryPlugin.js +2 -1
  208. package/lib/library/ModernModuleLibraryPlugin.js +8 -6
  209. package/lib/library/ModuleLibraryPlugin.js +2 -1
  210. package/lib/library/SystemLibraryPlugin.js +2 -1
  211. package/lib/library/UmdLibraryPlugin.js +66 -92
  212. package/lib/logging/Logger.js +32 -4
  213. package/lib/logging/createConsoleLogger.js +12 -13
  214. package/lib/logging/runtime.js +7 -8
  215. package/lib/logging/truncateArgs.js +5 -8
  216. package/lib/node/NodeWatchFileSystem.js +3 -18
  217. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  218. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  219. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/nodeConsole.js +22 -22
  221. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  222. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  223. package/lib/optimize/ConcatenatedModule.js +81 -51
  224. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  225. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  226. package/lib/optimize/InnerGraph.js +17 -17
  227. package/lib/optimize/InnerGraphPlugin.js +8 -7
  228. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  229. package/lib/optimize/MangleExportsPlugin.js +1 -0
  230. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
  231. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  232. package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
  233. package/lib/optimize/RealContentHashPlugin.js +7 -10
  234. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  235. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  236. package/lib/optimize/SplitChunksPlugin.js +34 -30
  237. package/lib/performance/SizeLimitsPlugin.js +2 -2
  238. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  239. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  240. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  241. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  242. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  243. package/lib/rules/RuleSetCompiler.js +41 -22
  244. package/lib/rules/UseEffectRulePlugin.js +36 -32
  245. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  246. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  247. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  248. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  249. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  250. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  251. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  252. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  253. package/lib/schemes/DataUriPlugin.js +1 -1
  254. package/lib/schemes/HttpUriPlugin.js +241 -126
  255. package/lib/serialization/BinaryMiddleware.js +44 -28
  256. package/lib/serialization/DateObjectSerializer.js +1 -0
  257. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  258. package/lib/serialization/FileMiddleware.js +154 -106
  259. package/lib/serialization/MapObjectSerializer.js +2 -1
  260. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  261. package/lib/serialization/ObjectMiddleware.js +52 -56
  262. package/lib/serialization/PlainObjectSerializer.js +32 -6
  263. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  264. package/lib/serialization/Serializer.js +4 -5
  265. package/lib/serialization/SerializerMiddleware.js +6 -6
  266. package/lib/serialization/SetObjectSerializer.js +2 -1
  267. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  268. package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
  269. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  270. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  271. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  272. package/lib/sharing/utils.js +15 -27
  273. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  274. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  275. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  276. package/lib/stats/StatsFactory.js +127 -56
  277. package/lib/stats/StatsPrinter.js +75 -44
  278. package/lib/util/ArrayHelpers.js +8 -4
  279. package/lib/util/ArrayQueue.js +1 -1
  280. package/lib/util/AsyncQueue.js +31 -12
  281. package/lib/util/IterableHelpers.js +3 -4
  282. package/lib/util/LazyBucketSortedSet.js +60 -44
  283. package/lib/util/LazySet.js +13 -0
  284. package/lib/util/MapHelpers.js +1 -3
  285. package/lib/util/ParallelismFactorCalculator.js +1 -1
  286. package/lib/util/Queue.js +1 -1
  287. package/lib/util/Semaphore.js +4 -7
  288. package/lib/util/SetHelpers.js +5 -5
  289. package/lib/util/SortableSet.js +4 -3
  290. package/lib/util/StackedCacheMap.js +4 -6
  291. package/lib/util/StackedMap.js +1 -3
  292. package/lib/util/StringXor.js +0 -5
  293. package/lib/util/TupleQueue.js +1 -1
  294. package/lib/util/TupleSet.js +15 -5
  295. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  296. package/lib/util/WeakTupleMap.js +19 -21
  297. package/lib/util/binarySearchBounds.js +5 -12
  298. package/lib/util/chainedImports.js +1 -1
  299. package/lib/util/cleverMerge.js +21 -19
  300. package/lib/util/comparators.js +57 -52
  301. package/lib/util/compileBooleanMatcher.js +3 -6
  302. package/lib/util/conventions.js +8 -11
  303. package/lib/util/createHash.js +9 -6
  304. package/lib/util/deprecation.js +22 -12
  305. package/lib/util/deterministicGrouping.js +19 -26
  306. package/lib/util/findGraphRoots.js +2 -2
  307. package/lib/util/fs.js +32 -32
  308. package/lib/util/hash/md4.js +2 -2
  309. package/lib/util/hash/wasm-hash.js +7 -7
  310. package/lib/util/hash/xxhash64.js +2 -2
  311. package/lib/util/identifier.js +81 -59
  312. package/lib/util/memoize.js +8 -10
  313. package/lib/util/mergeScope.js +6 -9
  314. package/lib/util/nonNumericOnlyHash.js +2 -2
  315. package/lib/util/numberHash.js +1 -6
  316. package/lib/util/objectToMap.js +0 -1
  317. package/lib/util/propertyAccess.js +2 -5
  318. package/lib/util/propertyName.js +1 -3
  319. package/lib/util/registerExternalSerializer.js +1 -1
  320. package/lib/util/runtime.js +109 -113
  321. package/lib/util/semver.js +29 -27
  322. package/lib/util/serialization.js +16 -1
  323. package/lib/util/smartGrouping.js +5 -5
  324. package/lib/util/source.js +1 -1
  325. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  326. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  327. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  328. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  329. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  330. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  331. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  333. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  334. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  335. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  336. package/package.json +18 -17
  337. package/schemas/WebpackOptions.check.js +1 -1
  338. package/schemas/WebpackOptions.json +5 -0
  339. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  340. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  341. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  342. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  343. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  344. package/types.d.ts +681 -355
@@ -20,7 +20,7 @@ let inHandleResult = 0;
20
20
  * @template T
21
21
  * @callback Callback
22
22
  * @param {(WebpackError | null)=} err
23
- * @param {T=} result
23
+ * @param {(T | null)=} result
24
24
  */
25
25
 
26
26
  /**
@@ -37,15 +37,27 @@ class AsyncQueueEntry {
37
37
  this.item = item;
38
38
  /** @type {typeof QUEUED_STATE | typeof PROCESSING_STATE | typeof DONE_STATE} */
39
39
  this.state = QUEUED_STATE;
40
+ /** @type {Callback<R> | undefined} */
40
41
  this.callback = callback;
41
42
  /** @type {Callback<R>[] | undefined} */
42
43
  this.callbacks = undefined;
44
+ /** @type {R | null | undefined} */
43
45
  this.result = undefined;
44
- /** @type {WebpackError | undefined} */
46
+ /** @type {WebpackError | null | undefined} */
45
47
  this.error = undefined;
46
48
  }
47
49
  }
48
50
 
51
+ /**
52
+ * @template T, K
53
+ * @typedef {function(T): K} getKey
54
+ */
55
+
56
+ /**
57
+ * @template T, R
58
+ * @typedef {function(T, Callback<R>): void} Processor
59
+ */
60
+
49
61
  /**
50
62
  * @template T
51
63
  * @template K
@@ -57,15 +69,16 @@ class AsyncQueue {
57
69
  * @param {string=} options.name name of the queue
58
70
  * @param {number=} options.parallelism how many items should be processed at once
59
71
  * @param {AsyncQueue<any, any, any>=} options.parent parent queue, which will have priority over this queue and with shared parallelism
60
- * @param {function(T): K=} options.getKey extract key from item
61
- * @param {function(T, Callback<R>): void} options.processor async function to process items
72
+ * @param {getKey<T, K>=} options.getKey extract key from item
73
+ * @param {Processor<T, R>} options.processor async function to process items
62
74
  */
63
75
  constructor({ name, parallelism, parent, processor, getKey }) {
64
76
  this._name = name;
65
77
  this._parallelism = parallelism || 1;
66
78
  this._processor = processor;
67
79
  this._getKey =
68
- getKey || /** @type {(T) => K} */ (item => /** @type {any} */ (item));
80
+ getKey ||
81
+ /** @type {getKey<T, K>} */ (item => /** @type {T & K} */ (item));
69
82
  /** @type {Map<K, AsyncQueueEntry<T, K, R>>} */
70
83
  this._entries = new Map();
71
84
  /** @type {ArrayQueue<AsyncQueueEntry<T, K, R>>} */
@@ -76,6 +89,7 @@ class AsyncQueue {
76
89
  this._willEnsureProcessing = false;
77
90
  this._needProcessing = false;
78
91
  this._stopped = false;
92
+ /** @type {AsyncQueue<any, any, any>} */
79
93
  this._root = parent ? parent._root : this;
80
94
  if (parent) {
81
95
  if (this._root._children === undefined) {
@@ -94,7 +108,7 @@ class AsyncQueue {
94
108
  beforeStart: new AsyncSeriesHook(["item"]),
95
109
  /** @type {SyncHook<[T]>} */
96
110
  started: new SyncHook(["item"]),
97
- /** @type {SyncHook<[T, Error, R]>} */
111
+ /** @type {SyncHook<[T, WebpackError | null | undefined, R | null | undefined]>} */
98
112
  result: new SyncHook(["item", "error", "result"])
99
113
  };
100
114
 
@@ -202,9 +216,14 @@ class AsyncQueue {
202
216
  this._queued = new ArrayQueue();
203
217
  const root = this._root;
204
218
  for (const entry of queue) {
205
- this._entries.delete(this._getKey(entry.item));
219
+ this._entries.delete(
220
+ this._getKey(/** @type {AsyncQueueEntry<T, K, R>} */ (entry).item)
221
+ );
206
222
  root._activeTasks++;
207
- this._handleResult(entry, new WebpackError("Queue was stopped"));
223
+ this._handleResult(
224
+ /** @type {AsyncQueueEntry<T, K, R>} */ (entry),
225
+ new WebpackError("Queue was stopped")
226
+ );
208
227
  }
209
228
  }
210
229
 
@@ -308,7 +327,7 @@ class AsyncQueue {
308
327
  });
309
328
  } catch (err) {
310
329
  if (inCallback) throw err;
311
- this._handleResult(entry, err, null);
330
+ this._handleResult(entry, /** @type {WebpackError} */ (err), null);
312
331
  }
313
332
  this.hooks.started.call(entry.item);
314
333
  });
@@ -316,8 +335,8 @@ class AsyncQueue {
316
335
 
317
336
  /**
318
337
  * @param {AsyncQueueEntry<T, K, R>} entry the entry
319
- * @param {WebpackError=} err error, if any
320
- * @param {R=} result result, if any
338
+ * @param {(WebpackError | null)=} err error, if any
339
+ * @param {(R | null)=} result result, if any
321
340
  * @returns {void}
322
341
  */
323
342
  _handleResult(entry, err, result) {
@@ -326,7 +345,7 @@ class AsyncQueue {
326
345
  ? makeWebpackError(hookError, `AsyncQueue(${this._name}).hooks.result`)
327
346
  : err;
328
347
 
329
- const callback = entry.callback;
348
+ const callback = /** @type {Callback<R>} */ (entry.callback);
330
349
  const callbacks = entry.callbacks;
331
350
  entry.state = DONE_STATE;
332
351
  entry.callback = undefined;
@@ -36,11 +36,10 @@ const someInIterable = (iterable, filter) => {
36
36
  */
37
37
  const countIterable = iterable => {
38
38
  let i = 0;
39
- // eslint-disable-next-line no-unused-vars
40
39
  for (const _ of iterable) i++;
41
40
  return i;
42
41
  };
43
42
 
44
- exports.last = last;
45
- exports.someInIterable = someInIterable;
46
- exports.countIterable = countIterable;
43
+ module.exports.last = last;
44
+ module.exports.someInIterable = someInIterable;
45
+ module.exports.countIterable = countIterable;
@@ -8,6 +8,16 @@
8
8
  const { first } = require("./SetHelpers");
9
9
  const SortableSet = require("./SortableSet");
10
10
 
11
+ /**
12
+ * @template T
13
+ * @typedef {LazyBucketSortedSet<T, any> | SortableSet<T>} Entry
14
+ */
15
+
16
+ /**
17
+ * @template T
18
+ * @typedef {(function(T): any) | (function(any, any): number)} Arg
19
+ */
20
+
11
21
  /**
12
22
  * Multi layer bucket sorted set:
13
23
  * Supports adding non-existing items (DO NOT ADD ITEM TWICE),
@@ -24,14 +34,15 @@ class LazyBucketSortedSet {
24
34
  /**
25
35
  * @param {function(T): K} getKey function to get key from item
26
36
  * @param {function(K, K): number} comparator comparator to sort keys
27
- * @param {...((function(T): any) | (function(any, any): number))} args more pairs of getKey and comparator plus optional final comparator for the last layer
37
+ * @param {...Arg<T>} args more pairs of getKey and comparator plus optional final comparator for the last layer
28
38
  */
29
39
  constructor(getKey, comparator, ...args) {
30
40
  this._getKey = getKey;
41
+ /** @type {Arg<T>[]} */
31
42
  this._innerArgs = args;
32
43
  this._leaf = args.length <= 1;
33
44
  this._keys = new SortableSet(undefined, comparator);
34
- /** @type {Map<K, LazyBucketSortedSet<T, any> | SortableSet<T>>} */
45
+ /** @type {Map<K, Entry<T>>} */
35
46
  this._map = new Map();
36
47
  this._unsortedItems = new Set();
37
48
  this.size = 0;
@@ -54,13 +65,18 @@ class LazyBucketSortedSet {
54
65
  _addInternal(key, item) {
55
66
  let entry = this._map.get(key);
56
67
  if (entry === undefined) {
57
- entry = this._leaf
58
- ? new SortableSet(undefined, this._innerArgs[0])
59
- : new /** @type {any} */ (LazyBucketSortedSet)(...this._innerArgs);
68
+ entry =
69
+ /** @type {Entry<T>} */
70
+ (
71
+ this._leaf
72
+ ? new SortableSet(undefined, this._innerArgs[0])
73
+ : new /** @type {TODO} */ (LazyBucketSortedSet)(...this._innerArgs)
74
+ );
60
75
  this._keys.add(key);
61
76
  this._map.set(key, entry);
62
77
  }
63
- entry.add(item);
78
+ /** @type {Entry<T>} */
79
+ (entry).add(item);
64
80
  }
65
81
 
66
82
  /**
@@ -74,7 +90,7 @@ class LazyBucketSortedSet {
74
90
  return;
75
91
  }
76
92
  const key = this._getKey(item);
77
- const entry = this._map.get(key);
93
+ const entry = /** @type {Entry<T>} */ (this._map.get(key));
78
94
  entry.delete(item);
79
95
  if (entry.size === 0) {
80
96
  this._deleteKey(key);
@@ -94,7 +110,7 @@ class LazyBucketSortedSet {
94
110
  * @returns {T | undefined} an item
95
111
  */
96
112
  popFirst() {
97
- if (this.size === 0) return undefined;
113
+ if (this.size === 0) return;
98
114
  this.size--;
99
115
  if (this._unsortedItems.size > 0) {
100
116
  for (const item of this._unsortedItems) {
@@ -104,25 +120,24 @@ class LazyBucketSortedSet {
104
120
  this._unsortedItems.clear();
105
121
  }
106
122
  this._keys.sort();
107
- const key = first(this._keys);
123
+ const key = /** @type {K} */ (first(this._keys));
108
124
  const entry = this._map.get(key);
109
125
  if (this._leaf) {
110
126
  const leafEntry = /** @type {SortableSet<T>} */ (entry);
111
127
  leafEntry.sort();
112
- const item = first(leafEntry);
128
+ const item = /** @type {T} */ (first(leafEntry));
113
129
  leafEntry.delete(item);
114
130
  if (leafEntry.size === 0) {
115
131
  this._deleteKey(key);
116
132
  }
117
133
  return item;
118
- } else {
119
- const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
120
- const item = nodeEntry.popFirst();
121
- if (nodeEntry.size === 0) {
122
- this._deleteKey(key);
123
- }
124
- return item;
125
134
  }
135
+ const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
136
+ const item = nodeEntry.popFirst();
137
+ if (nodeEntry.size === 0) {
138
+ this._deleteKey(key);
139
+ }
140
+ return item;
126
141
  }
127
142
 
128
143
  /**
@@ -135,7 +150,6 @@ class LazyBucketSortedSet {
135
150
  if (remove) {
136
151
  this._unsortedItems.delete(item);
137
152
  this.size--;
138
- return;
139
153
  }
140
154
  };
141
155
  }
@@ -163,32 +177,31 @@ class LazyBucketSortedSet {
163
177
  this._addInternal(newKey, item);
164
178
  }
165
179
  };
166
- } else {
167
- const oldEntry = /** @type {LazyBucketSortedSet<T, any>} */ (
168
- this._map.get(key)
169
- );
170
- const finishUpdate = oldEntry.startUpdate(item);
171
- return remove => {
172
- if (remove) {
173
- this.size--;
174
- finishUpdate(true);
175
- if (oldEntry.size === 0) {
176
- this._deleteKey(key);
177
- }
178
- return;
180
+ }
181
+ const oldEntry = /** @type {LazyBucketSortedSet<T, any>} */ (
182
+ this._map.get(key)
183
+ );
184
+ const finishUpdate = oldEntry.startUpdate(item);
185
+ return remove => {
186
+ if (remove) {
187
+ this.size--;
188
+ finishUpdate(true);
189
+ if (oldEntry.size === 0) {
190
+ this._deleteKey(key);
179
191
  }
180
- const newKey = this._getKey(item);
181
- if (key === newKey) {
182
- finishUpdate();
183
- } else {
184
- finishUpdate(true);
185
- if (oldEntry.size === 0) {
186
- this._deleteKey(key);
187
- }
188
- this._addInternal(newKey, item);
192
+ return;
193
+ }
194
+ const newKey = this._getKey(item);
195
+ if (key === newKey) {
196
+ finishUpdate();
197
+ } else {
198
+ finishUpdate(true);
199
+ if (oldEntry.size === 0) {
200
+ this._deleteKey(key);
189
201
  }
190
- };
191
- }
202
+ this._addInternal(newKey, item);
203
+ }
204
+ };
192
205
  }
193
206
 
194
207
  /**
@@ -215,16 +228,19 @@ class LazyBucketSortedSet {
215
228
  * @returns {Iterator<T>} the iterator
216
229
  */
217
230
  [Symbol.iterator]() {
231
+ /** @type {Iterator<T>[]} */
218
232
  const iterators = [];
219
233
  this._appendIterators(iterators);
220
234
  iterators.reverse();
221
- let currentIterator = iterators.pop();
235
+ let currentIterator =
236
+ /** @type {Iterator<T>} */
237
+ (iterators.pop());
222
238
  return {
223
239
  next: () => {
224
240
  const res = currentIterator.next();
225
241
  if (res.done) {
226
242
  if (iterators.length === 0) return res;
227
- currentIterator = iterators.pop();
243
+ currentIterator = /** @type {Iterator<T>} */ (iterators.pop());
228
244
  return currentIterator.next();
229
245
  }
230
246
  return res;
@@ -138,6 +138,9 @@ class LazySet {
138
138
  return this._set.delete(value);
139
139
  }
140
140
 
141
+ /**
142
+ * @returns {IterableIterator<[T, T]>} entries
143
+ */
141
144
  entries() {
142
145
  this._deopt = true;
143
146
  if (this._needMerge) this._merge();
@@ -152,6 +155,7 @@ class LazySet {
152
155
  forEach(callbackFn, thisArg) {
153
156
  this._deopt = true;
154
157
  if (this._needMerge) this._merge();
158
+ // eslint-disable-next-line unicorn/no-array-for-each
155
159
  this._set.forEach(callbackFn, thisArg);
156
160
  }
157
161
 
@@ -164,18 +168,27 @@ class LazySet {
164
168
  return this._set.has(item);
165
169
  }
166
170
 
171
+ /**
172
+ * @returns {IterableIterator<T>} keys
173
+ */
167
174
  keys() {
168
175
  this._deopt = true;
169
176
  if (this._needMerge) this._merge();
170
177
  return this._set.keys();
171
178
  }
172
179
 
180
+ /**
181
+ * @returns {IterableIterator<T>} values
182
+ */
173
183
  values() {
174
184
  this._deopt = true;
175
185
  if (this._needMerge) this._merge();
176
186
  return this._set.values();
177
187
  }
178
188
 
189
+ /**
190
+ * @returns {IterableIterator<T>} iterable iterator
191
+ */
179
192
  [Symbol.iterator]() {
180
193
  this._deopt = true;
181
194
  if (this._needMerge) this._merge();
@@ -9,14 +9,12 @@
9
9
  * getOrInsert is a helper function for maps that allows you to get a value
10
10
  * from a map if it exists, or insert a new value if it doesn't. If it value doesn't
11
11
  * exist, it will be computed by the provided function.
12
- *
13
12
  * @template K
14
13
  * @template V
15
14
  * @param {Map<K, V>} map The map object to check
16
15
  * @param {K} key The key to check
17
16
  * @param {function(): V} computer function which will compute the value if it doesn't exist
18
17
  * @returns {V} The value from the map, or the computed value
19
- *
20
18
  * @example
21
19
  * ```js
22
20
  * const map = new Map();
@@ -24,7 +22,7 @@
24
22
  * console.log(value); // "value"
25
23
  * ```
26
24
  */
27
- exports.getOrInsert = (map, key, computer) => {
25
+ module.exports.getOrInsert = (map, key, computer) => {
28
26
  // Grab key from map
29
27
  const value = map.get(key);
30
28
  // If the value already exists, return it
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const binarySearchBounds = require("../util/binarySearchBounds");
8
+ const binarySearchBounds = require("./binarySearchBounds");
9
9
 
10
10
  /** @typedef {function(number): void} Callback */
11
11
 
package/lib/util/Queue.js CHANGED
@@ -48,7 +48,7 @@ class Queue {
48
48
  */
49
49
  dequeue() {
50
50
  const result = this._iterator.next();
51
- if (result.done) return undefined;
51
+ if (result.done) return;
52
52
  this._set.delete(result.value);
53
53
  return result.value;
54
54
  }
@@ -8,7 +8,6 @@
8
8
  class Semaphore {
9
9
  /**
10
10
  * Creates an instance of Semaphore.
11
- *
12
11
  * @param {number} available the amount available number of "tasks"
13
12
  * in the Semaphore
14
13
  */
@@ -41,12 +40,10 @@ class Semaphore {
41
40
  }
42
41
 
43
42
  _continue() {
44
- if (this.available > 0) {
45
- if (this.waiters.length > 0) {
46
- this.available--;
47
- const callback = /** @type {(function(): void)} */ (this.waiters.pop());
48
- callback();
49
- }
43
+ if (this.available > 0 && this.waiters.length > 0) {
44
+ this.available--;
45
+ const callback = /** @type {(function(): void)} */ (this.waiters.pop());
46
+ callback();
50
47
  }
51
48
  }
52
49
  }
@@ -87,8 +87,8 @@ const combine = (a, b) => {
87
87
  return set;
88
88
  };
89
89
 
90
- exports.intersect = intersect;
91
- exports.isSubset = isSubset;
92
- exports.find = find;
93
- exports.first = first;
94
- exports.combine = combine;
90
+ module.exports.intersect = intersect;
91
+ module.exports.isSubset = isSubset;
92
+ module.exports.find = find;
93
+ module.exports.first = first;
94
+ module.exports.combine = combine;
@@ -15,15 +15,16 @@ const NONE = Symbol("not sorted");
15
15
  class SortableSet extends Set {
16
16
  /**
17
17
  * Create a new sortable set
18
+ * @template T
18
19
  * @param {Iterable<T>=} initialIterable The initial iterable value
19
20
  * @typedef {function(T, T): number} SortFunction
20
- * @param {SortFunction=} defaultSort Default sorting function
21
+ * @param {SortFunction<T>=} defaultSort Default sorting function
21
22
  */
22
23
  constructor(initialIterable, defaultSort) {
23
24
  super(initialIterable);
24
25
  /**
25
26
  * @private
26
- * @type {undefined | function(T, T): number}}
27
+ * @type {undefined | SortFunction<T>}
27
28
  */
28
29
  this._sortFn = defaultSort;
29
30
  /**
@@ -76,7 +77,7 @@ class SortableSet extends Set {
76
77
 
77
78
  /**
78
79
  * Sort with a comparer function
79
- * @param {SortFunction} sortFn Sorting comparer function
80
+ * @param {SortFunction<T> | undefined} sortFn Sorting comparer function
80
81
  * @returns {void}
81
82
  */
82
83
  sortWith(sortFn) {
@@ -6,9 +6,6 @@
6
6
  "use strict";
7
7
 
8
8
  /**
9
- * @template K
10
- * @template V
11
- *
12
9
  * The StackedCacheMap is a data structure designed as an alternative to a Map
13
10
  * in situations where you need to handle multiple item additions and
14
11
  * frequently access the largest map.
@@ -19,7 +16,6 @@
19
16
  * It has a fallback Map that is used when the map to be added is mutable.
20
17
  *
21
18
  * Note: `delete` and `has` are not supported for performance reasons.
22
- *
23
19
  * @example
24
20
  * ```js
25
21
  * const map = new StackedCacheMap();
@@ -31,6 +27,8 @@
31
27
  * console.log(key, value);
32
28
  * }
33
29
  * ```
30
+ * @template K
31
+ * @template V
34
32
  */
35
33
  class StackedCacheMap {
36
34
  constructor() {
@@ -94,7 +92,7 @@ class StackedCacheMap {
94
92
 
95
93
  /**
96
94
  * @param {K} item the key of the element to return
97
- * @returns {V} the value of the element
95
+ * @returns {V | undefined} the value of the element
98
96
  */
99
97
  get(item) {
100
98
  for (const map of this.stack) {
@@ -130,7 +128,7 @@ class StackedCacheMap {
130
128
  next() {
131
129
  let result = current.next();
132
130
  while (result.done && iterators.length > 0) {
133
- current = iterators.pop();
131
+ current = /** @type {IterableIterator<[K, V]>} */ (iterators.pop());
134
132
  result = current.next();
135
133
  }
136
134
  return result;
@@ -29,9 +29,8 @@ const extractPair = pair => {
29
29
  const val = pair[1];
30
30
  if (val === UNDEFINED_MARKER || val === TOMBSTONE) {
31
31
  return [key, undefined];
32
- } else {
33
- return /** @type {[K, Cell<V>]} */ (pair);
34
32
  }
33
+ return /** @type {[K, Cell<V>]} */ (pair);
35
34
  };
36
35
 
37
36
  /**
@@ -116,7 +115,6 @@ class StackedMap {
116
115
  }
117
116
  this.map.set(item, TOMBSTONE);
118
117
  }
119
- return undefined;
120
118
  }
121
119
 
122
120
  _compress() {
@@ -17,7 +17,6 @@
17
17
  * to create a hash of the current state of the compilation. By XOR'ing the Module hashes, it
18
18
  * doesn't matter if the Module hashes are sorted or not. This is useful because it allows us to avoid sorting the
19
19
  * Module hashes.
20
- *
21
20
  * @example
22
21
  * ```js
23
22
  * const xor = new StringXor();
@@ -25,7 +24,6 @@
25
24
  * xor.add('world');
26
25
  * console.log(xor.toString());
27
26
  * ```
28
- *
29
27
  * @example
30
28
  * ```js
31
29
  * const xor = new StringXor();
@@ -44,7 +42,6 @@ class StringXor {
44
42
 
45
43
  /**
46
44
  * Adds a string to the current StringXor object.
47
- *
48
45
  * @param {string} str string
49
46
  * @returns {void}
50
47
  */
@@ -84,7 +81,6 @@ class StringXor {
84
81
  * here because "latin1" encoding is a single-byte encoding that can represent all characters in the
85
82
  * [ISO-8859-1 character set](https://en.wikipedia.org/wiki/ISO/IEC_8859-1). This is useful when working
86
83
  * with binary data that needs to be represented as a string.
87
- *
88
84
  * @returns {string} Returns a string that represents the current state of the StringXor object.
89
85
  */
90
86
  toString() {
@@ -94,7 +90,6 @@ class StringXor {
94
90
 
95
91
  /**
96
92
  * Updates the hash with the current state of the StringXor object.
97
- *
98
93
  * @param {Hash} hash Hash instance
99
94
  */
100
95
  updateHash(hash) {
@@ -57,7 +57,7 @@ class TupleQueue {
57
57
  this._set.delete(...value);
58
58
  return value;
59
59
  }
60
- return undefined;
60
+ return;
61
61
  }
62
62
  this._set.delete(...result.value);
63
63
  return result.value;
@@ -9,7 +9,11 @@
9
9
  * @template {any[]} T
10
10
  */
11
11
  class TupleSet {
12
+ /**
13
+ * @param {Iterable<T>=} init init
14
+ */
12
15
  constructor(init) {
16
+ /** @type {Map<T, TODO>} */
13
17
  this._map = new Map();
14
18
  this.size = 0;
15
19
  if (init) {
@@ -62,7 +66,7 @@ class TupleSet {
62
66
  }
63
67
 
64
68
  const beforeLast = args[args.length - 2];
65
- let set = map.get(beforeLast);
69
+ const set = map.get(beforeLast);
66
70
  if (set === undefined) {
67
71
  return false;
68
72
  }
@@ -86,7 +90,7 @@ class TupleSet {
86
90
  }
87
91
 
88
92
  const beforeLast = args[args.length - 2];
89
- let set = map.get(beforeLast);
93
+ const set = map.get(beforeLast);
90
94
  if (set === undefined) {
91
95
  return;
92
96
  }
@@ -101,10 +105,17 @@ class TupleSet {
101
105
  * @returns {Iterator<T>} iterator
102
106
  */
103
107
  [Symbol.iterator]() {
108
+ /** @type {TODO[]} */
104
109
  const iteratorStack = [];
110
+ /** @type {T[]} */
105
111
  const tuple = [];
106
- let currentSetIterator = undefined;
112
+ /** @type {Iterator<T> | undefined} */
113
+ let currentSetIterator;
107
114
 
115
+ /**
116
+ * @param {TODO} it iterator
117
+ * @returns {boolean} result
118
+ */
108
119
  const next = it => {
109
120
  const result = it.next();
110
121
  if (result.done) {
@@ -118,9 +129,8 @@ class TupleSet {
118
129
  if (value instanceof Set) {
119
130
  currentSetIterator = value[Symbol.iterator]();
120
131
  return true;
121
- } else {
122
- return next(value[Symbol.iterator]());
123
132
  }
133
+ return next(value[Symbol.iterator]());
124
134
  };
125
135
 
126
136
  next(this._map[Symbol.iterator]());