webpack 5.59.0 → 5.94.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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -13,9 +13,15 @@ class ArrayQueue {
13
13
  * @param {Iterable<T>=} items The initial elements.
14
14
  */
15
15
  constructor(items) {
16
- /** @private @type {T[]} */
16
+ /**
17
+ * @private
18
+ * @type {T[]}
19
+ */
17
20
  this._list = items ? Array.from(items) : [];
18
- /** @private @type {T[]} */
21
+ /**
22
+ * @private
23
+ * @type {T[]}
24
+ */
19
25
  this._listReversed = [];
20
26
  }
21
27
 
@@ -50,7 +56,7 @@ class ArrayQueue {
50
56
  */
51
57
  dequeue() {
52
58
  if (this._listReversed.length === 0) {
53
- if (this._list.length === 0) return undefined;
59
+ if (this._list.length === 0) return;
54
60
  if (this._list.length === 1) return this._list.pop();
55
61
  if (this._list.length < 16) return this._list.shift();
56
62
  const temp = this._listReversed;
@@ -77,31 +83,18 @@ class ArrayQueue {
77
83
  }
78
84
 
79
85
  [Symbol.iterator]() {
80
- let i = -1;
81
- let reversed = false;
82
86
  return {
83
87
  next: () => {
84
- if (!reversed) {
85
- i++;
86
- if (i < this._list.length) {
87
- return {
88
- done: false,
89
- value: this._list[i]
90
- };
91
- }
92
- reversed = true;
93
- i = this._listReversed.length;
94
- }
95
- i--;
96
- if (i < 0) {
88
+ const item = this.dequeue();
89
+ if (item) {
97
90
  return {
98
- done: true,
99
- value: undefined
91
+ done: false,
92
+ value: item
100
93
  };
101
94
  }
102
95
  return {
103
- done: false,
104
- value: this._listReversed[i]
96
+ done: true,
97
+ value: undefined
105
98
  };
106
99
  }
107
100
  };
@@ -19,8 +19,8 @@ let inHandleResult = 0;
19
19
  /**
20
20
  * @template T
21
21
  * @callback Callback
22
- * @param {WebpackError=} err
23
- * @param {T=} result
22
+ * @param {(WebpackError | null)=} err
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
@@ -53,29 +65,31 @@ class AsyncQueueEntry {
53
65
  */
54
66
  class AsyncQueue {
55
67
  /**
56
- * @param {Object} options options object
68
+ * @param {object} options options object
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>>} */
72
85
  this._queued = new ArrayQueue();
73
- /** @type {AsyncQueue<any, any, any>[]} */
86
+ /** @type {AsyncQueue<any, any, any>[] | undefined} */
74
87
  this._children = undefined;
75
88
  this._activeTasks = 0;
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
 
@@ -159,7 +173,9 @@ class AsyncQueue {
159
173
  */
160
174
  invalidate(item) {
161
175
  const key = this._getKey(item);
162
- const entry = this._entries.get(key);
176
+ const entry =
177
+ /** @type {AsyncQueueEntry<T, K, R>} */
178
+ (this._entries.get(key));
163
179
  this._entries.delete(key);
164
180
  if (entry.state === QUEUED_STATE) {
165
181
  this._queued.delete(entry);
@@ -200,9 +216,14 @@ class AsyncQueue {
200
216
  this._queued = new ArrayQueue();
201
217
  const root = this._root;
202
218
  for (const entry of queue) {
203
- this._entries.delete(this._getKey(entry.item));
219
+ this._entries.delete(
220
+ this._getKey(/** @type {AsyncQueueEntry<T, K, R>} */ (entry).item)
221
+ );
204
222
  root._activeTasks++;
205
- 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
+ );
206
227
  }
207
228
  }
208
229
 
@@ -306,7 +327,7 @@ class AsyncQueue {
306
327
  });
307
328
  } catch (err) {
308
329
  if (inCallback) throw err;
309
- this._handleResult(entry, err, null);
330
+ this._handleResult(entry, /** @type {WebpackError} */ (err), null);
310
331
  }
311
332
  this.hooks.started.call(entry.item);
312
333
  });
@@ -314,8 +335,8 @@ class AsyncQueue {
314
335
 
315
336
  /**
316
337
  * @param {AsyncQueueEntry<T, K, R>} entry the entry
317
- * @param {WebpackError=} err error, if any
318
- * @param {R=} result result, if any
338
+ * @param {(WebpackError | null)=} err error, if any
339
+ * @param {(R | null)=} result result, if any
319
340
  * @returns {void}
320
341
  */
321
342
  _handleResult(entry, err, result) {
@@ -324,7 +345,7 @@ class AsyncQueue {
324
345
  ? makeWebpackError(hookError, `AsyncQueue(${this._name}).hooks.result`)
325
346
  : err;
326
347
 
327
- const callback = entry.callback;
348
+ const callback = /** @type {Callback<R>} */ (entry.callback);
328
349
  const callbacks = entry.callbacks;
329
350
  entry.state = DONE_STATE;
330
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;
@@ -87,7 +87,7 @@ class LazySet {
87
87
 
88
88
  /**
89
89
  * @param {T} item an item
90
- * @returns {this} itself
90
+ * @returns {LazySet<T>} itself
91
91
  */
92
92
  add(item) {
93
93
  this._set.add(item);
@@ -96,7 +96,7 @@ class LazySet {
96
96
 
97
97
  /**
98
98
  * @param {Iterable<T> | LazySet<T>} iterable a immutable iterable or another immutable LazySet which will eventually be merged into the Set
99
- * @returns {this} itself
99
+ * @returns {LazySet<T>} itself
100
100
  */
101
101
  addAll(iterable) {
102
102
  if (this._deopt) {
@@ -152,6 +152,7 @@ class LazySet {
152
152
  forEach(callbackFn, thisArg) {
153
153
  this._deopt = true;
154
154
  if (this._needMerge) this._merge();
155
+ // eslint-disable-next-line unicorn/no-array-for-each
155
156
  this._set.forEach(callbackFn, thisArg);
156
157
  }
157
158
 
@@ -187,12 +188,20 @@ class LazySet {
187
188
  return "LazySet";
188
189
  }
189
190
 
191
+ /**
192
+ * @param {import("../serialization/ObjectMiddleware").ObjectSerializerContext} context context
193
+ */
190
194
  serialize({ write }) {
191
195
  if (this._needMerge) this._merge();
192
196
  write(this._set.size);
193
197
  for (const item of this._set) write(item);
194
198
  }
195
199
 
200
+ /**
201
+ * @template T
202
+ * @param {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} context context
203
+ * @returns {LazySet<T>} lazy set
204
+ */
196
205
  static deserialize({ read }) {
197
206
  const count = read();
198
207
  const items = [];
@@ -6,16 +6,28 @@
6
6
  "use strict";
7
7
 
8
8
  /**
9
+ * getOrInsert is a helper function for maps that allows you to get a value
10
+ * from a map if it exists, or insert a new value if it doesn't. If it value doesn't
11
+ * exist, it will be computed by the provided function.
9
12
  * @template K
10
13
  * @template V
11
- * @param {Map<K, V>} map a map
12
- * @param {K} key the key
13
- * @param {function(): V} computer compute value
14
- * @returns {V} value
14
+ * @param {Map<K, V>} map The map object to check
15
+ * @param {K} key The key to check
16
+ * @param {function(): V} computer function which will compute the value if it doesn't exist
17
+ * @returns {V} The value from the map, or the computed value
18
+ * @example
19
+ * ```js
20
+ * const map = new Map();
21
+ * const value = getOrInsert(map, "key", () => "value");
22
+ * console.log(value); // "value"
23
+ * ```
15
24
  */
16
- exports.provide = (map, key, computer) => {
25
+ module.exports.getOrInsert = (map, key, computer) => {
26
+ // Grab key from map
17
27
  const value = map.get(key);
28
+ // If the value already exists, return it
18
29
  if (value !== undefined) return value;
30
+ // Otherwise compute the value, set it in the map, and return it
19
31
  const newValue = computer();
20
32
  map.set(key, newValue);
21
33
  return newValue;
@@ -5,14 +5,24 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const binarySearchBounds = require("../util/binarySearchBounds");
8
+ const binarySearchBounds = require("./binarySearchBounds");
9
+
10
+ /** @typedef {function(number): void} Callback */
9
11
 
10
12
  class ParallelismFactorCalculator {
11
13
  constructor() {
14
+ /** @type {number[]} */
12
15
  this._rangePoints = [];
16
+ /** @type {Callback[]} */
13
17
  this._rangeCallbacks = [];
14
18
  }
15
19
 
20
+ /**
21
+ * @param {number} start range start
22
+ * @param {number} end range end
23
+ * @param {Callback} callback callback
24
+ * @returns {void}
25
+ */
16
26
  range(start, end, callback) {
17
27
  if (start === end) return callback(1);
18
28
  this._rangePoints.push(start);
package/lib/util/Queue.js CHANGED
@@ -13,9 +13,15 @@ class Queue {
13
13
  * @param {Iterable<T>=} items The initial elements.
14
14
  */
15
15
  constructor(items) {
16
- /** @private @type {Set<T>} */
16
+ /**
17
+ * @private
18
+ * @type {Set<T>}
19
+ */
17
20
  this._set = new Set(items);
18
- /** @private @type {Iterator<T>} */
21
+ /**
22
+ * @private
23
+ * @type {Iterator<T>}
24
+ */
19
25
  this._iterator = this._set[Symbol.iterator]();
20
26
  }
21
27
 
@@ -42,7 +48,7 @@ class Queue {
42
48
  */
43
49
  dequeue() {
44
50
  const result = this._iterator.next();
45
- if (result.done) return undefined;
51
+ if (result.done) return;
46
52
  this._set.delete(result.value);
47
53
  return result.value;
48
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 = 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,19 +15,32 @@ 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
- /** @private @type {undefined | function(T, T): number}} */
25
+ /**
26
+ * @private
27
+ * @type {undefined | SortFunction<T>}
28
+ */
25
29
  this._sortFn = defaultSort;
26
- /** @private @type {typeof NONE | undefined | function(T, T): number}} */
30
+ /**
31
+ * @private
32
+ * @type {typeof NONE | undefined | function(T, T): number}}
33
+ */
27
34
  this._lastActiveSortFn = NONE;
28
- /** @private @type {Map<Function, any> | undefined} */
35
+ /**
36
+ * @private
37
+ * @type {Map<Function, any> | undefined}
38
+ */
29
39
  this._cache = undefined;
30
- /** @private @type {Map<Function, any> | undefined} */
40
+ /**
41
+ * @private
42
+ * @type {Map<Function, any> | undefined}
43
+ */
31
44
  this._cacheOrderIndependent = undefined;
32
45
  }
33
46
 
@@ -64,7 +77,7 @@ class SortableSet extends Set {
64
77
 
65
78
  /**
66
79
  * Sort with a comparer function
67
- * @param {SortFunction} sortFn Sorting comparer function
80
+ * @param {SortFunction<T> | undefined} sortFn Sorting comparer function
68
81
  * @returns {void}
69
82
  */
70
83
  sortWith(sortFn) {