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
@@ -19,7 +19,7 @@ const SortableSet = require("./SortableSet");
19
19
  * @param {EntryOptions=} options optionally already received entry options
20
20
  * @returns {RuntimeSpec} runtime
21
21
  */
22
- exports.getEntryRuntime = (compilation, name, options) => {
22
+ module.exports.getEntryRuntime = (compilation, name, options) => {
23
23
  let dependOn;
24
24
  let runtime;
25
25
  if (options) {
@@ -31,7 +31,7 @@ exports.getEntryRuntime = (compilation, name, options) => {
31
31
  }
32
32
  if (dependOn) {
33
33
  /** @type {RuntimeSpec} */
34
- let result = undefined;
34
+ let result;
35
35
  const queue = new Set(dependOn);
36
36
  for (const name of queue) {
37
37
  const dep = compilation.entries.get(name);
@@ -46,18 +46,17 @@ exports.getEntryRuntime = (compilation, name, options) => {
46
46
  }
47
47
  }
48
48
  return result || name;
49
- } else {
50
- return runtime || name;
51
49
  }
50
+ return runtime || name;
52
51
  };
53
52
 
54
53
  /**
55
54
  * @param {RuntimeSpec} runtime runtime
56
- * @param {function(string): void} fn functor
55
+ * @param {function(string | undefined): void} fn functor
57
56
  * @param {boolean} deterministicOrder enforce a deterministic order
58
57
  * @returns {void}
59
58
  */
60
- exports.forEachRuntime = (runtime, fn, deterministicOrder = false) => {
59
+ const forEachRuntime = (runtime, fn, deterministicOrder = false) => {
61
60
  if (runtime === undefined) {
62
61
  fn(undefined);
63
62
  } else if (typeof runtime === "string") {
@@ -69,7 +68,13 @@ exports.forEachRuntime = (runtime, fn, deterministicOrder = false) => {
69
68
  }
70
69
  }
71
70
  };
71
+ module.exports.forEachRuntime = forEachRuntime;
72
72
 
73
+ /**
74
+ * @template T
75
+ * @param {SortableSet<T>} set set
76
+ * @returns {string} runtime key
77
+ */
73
78
  const getRuntimesKey = set => {
74
79
  set.sort();
75
80
  return Array.from(set).join("\n");
@@ -84,20 +89,25 @@ const getRuntimeKey = runtime => {
84
89
  if (typeof runtime === "string") return runtime;
85
90
  return runtime.getFromUnorderedCache(getRuntimesKey);
86
91
  };
87
- exports.getRuntimeKey = getRuntimeKey;
92
+ module.exports.getRuntimeKey = getRuntimeKey;
88
93
 
89
94
  /**
90
95
  * @param {string} key key of runtimes
91
96
  * @returns {RuntimeSpec} runtime(s)
92
97
  */
93
98
  const keyToRuntime = key => {
94
- if (key === "*") return undefined;
99
+ if (key === "*") return;
95
100
  const items = key.split("\n");
96
101
  if (items.length === 1) return items[0];
97
102
  return new SortableSet(items);
98
103
  };
99
- exports.keyToRuntime = keyToRuntime;
104
+ module.exports.keyToRuntime = keyToRuntime;
100
105
 
106
+ /**
107
+ * @template T
108
+ * @param {SortableSet<T>} set set
109
+ * @returns {string} runtime string
110
+ */
101
111
  const getRuntimesString = set => {
102
112
  set.sort();
103
113
  return Array.from(set).join("+");
@@ -112,13 +122,13 @@ const runtimeToString = runtime => {
112
122
  if (typeof runtime === "string") return runtime;
113
123
  return runtime.getFromUnorderedCache(getRuntimesString);
114
124
  };
115
- exports.runtimeToString = runtimeToString;
125
+ module.exports.runtimeToString = runtimeToString;
116
126
 
117
127
  /**
118
128
  * @param {RuntimeCondition} runtimeCondition runtime condition
119
129
  * @returns {string} readable version
120
130
  */
121
- exports.runtimeConditionToString = runtimeCondition => {
131
+ module.exports.runtimeConditionToString = runtimeCondition => {
122
132
  if (runtimeCondition === true) return "true";
123
133
  if (runtimeCondition === false) return "false";
124
134
  return runtimeToString(runtimeCondition);
@@ -141,40 +151,38 @@ const runtimeEqual = (a, b) => {
141
151
  return false;
142
152
  } else if (a.size !== b.size) {
143
153
  return false;
144
- } else {
145
- a.sort();
146
- b.sort();
147
- const aIt = a[Symbol.iterator]();
148
- const bIt = b[Symbol.iterator]();
149
- for (;;) {
150
- const aV = aIt.next();
151
- if (aV.done) return true;
152
- const bV = bIt.next();
153
- if (aV.value !== bV.value) return false;
154
- }
154
+ }
155
+ a.sort();
156
+ b.sort();
157
+ const aIt = a[Symbol.iterator]();
158
+ const bIt = b[Symbol.iterator]();
159
+ for (;;) {
160
+ const aV = aIt.next();
161
+ if (aV.done) return true;
162
+ const bV = bIt.next();
163
+ if (aV.value !== bV.value) return false;
155
164
  }
156
165
  };
157
- exports.runtimeEqual = runtimeEqual;
166
+ module.exports.runtimeEqual = runtimeEqual;
158
167
 
159
168
  /**
160
169
  * @param {RuntimeSpec} a first
161
170
  * @param {RuntimeSpec} b second
162
171
  * @returns {-1|0|1} compare
163
172
  */
164
- exports.compareRuntime = (a, b) => {
173
+ module.exports.compareRuntime = (a, b) => {
165
174
  if (a === b) {
166
175
  return 0;
167
176
  } else if (a === undefined) {
168
177
  return -1;
169
178
  } else if (b === undefined) {
170
179
  return 1;
171
- } else {
172
- const aKey = getRuntimeKey(a);
173
- const bKey = getRuntimeKey(b);
174
- if (aKey < bKey) return -1;
175
- if (aKey > bKey) return 1;
176
- return 0;
177
180
  }
181
+ const aKey = getRuntimeKey(a);
182
+ const bKey = getRuntimeKey(b);
183
+ if (aKey < bKey) return -1;
184
+ if (aKey > bKey) return 1;
185
+ return 0;
178
186
  };
179
187
 
180
188
  /**
@@ -197,26 +205,23 @@ const mergeRuntime = (a, b) => {
197
205
  return set;
198
206
  } else if (b.has(a)) {
199
207
  return b;
200
- } else {
201
- const set = new SortableSet(b);
202
- set.add(a);
203
- return set;
204
- }
205
- } else {
206
- if (typeof b === "string") {
207
- if (a.has(b)) return a;
208
- const set = new SortableSet(a);
209
- set.add(b);
210
- return set;
211
- } else {
212
- const set = new SortableSet(a);
213
- for (const item of b) set.add(item);
214
- if (set.size === a.size) return a;
215
- return set;
216
208
  }
209
+ const set = new SortableSet(b);
210
+ set.add(a);
211
+ return set;
212
+ }
213
+ if (typeof b === "string") {
214
+ if (a.has(b)) return a;
215
+ const set = new SortableSet(a);
216
+ set.add(b);
217
+ return set;
217
218
  }
219
+ const set = new SortableSet(a);
220
+ for (const item of b) set.add(item);
221
+ if (set.size === a.size) return a;
222
+ return set;
218
223
  };
219
- exports.mergeRuntime = mergeRuntime;
224
+ module.exports.mergeRuntime = mergeRuntime;
220
225
 
221
226
  /**
222
227
  * @param {RuntimeCondition} a first
@@ -224,12 +229,12 @@ exports.mergeRuntime = mergeRuntime;
224
229
  * @param {RuntimeSpec} runtime full runtime
225
230
  * @returns {RuntimeCondition} result
226
231
  */
227
- exports.mergeRuntimeCondition = (a, b, runtime) => {
232
+ module.exports.mergeRuntimeCondition = (a, b, runtime) => {
228
233
  if (a === false) return b;
229
234
  if (b === false) return a;
230
235
  if (a === true || b === true) return true;
231
236
  const merged = mergeRuntime(a, b);
232
- if (merged === undefined) return undefined;
237
+ if (merged === undefined) return;
233
238
  if (typeof merged === "string") {
234
239
  if (typeof runtime === "string" && merged === runtime) return true;
235
240
  return merged;
@@ -245,10 +250,10 @@ exports.mergeRuntimeCondition = (a, b, runtime) => {
245
250
  * @param {RuntimeSpec} runtime full runtime
246
251
  * @returns {RuntimeSpec | true} result
247
252
  */
248
- exports.mergeRuntimeConditionNonFalse = (a, b, runtime) => {
253
+ module.exports.mergeRuntimeConditionNonFalse = (a, b, runtime) => {
249
254
  if (a === true || b === true) return true;
250
255
  const merged = mergeRuntime(a, b);
251
- if (merged === undefined) return undefined;
256
+ if (merged === undefined) return;
252
257
  if (typeof merged === "string") {
253
258
  if (typeof runtime === "string" && merged === runtime) return true;
254
259
  return merged;
@@ -271,38 +276,34 @@ const mergeRuntimeOwned = (a, b) => {
271
276
  } else if (a === undefined) {
272
277
  if (typeof b === "string") {
273
278
  return b;
274
- } else {
275
- return new SortableSet(b);
276
279
  }
280
+ return new SortableSet(b);
277
281
  } else if (typeof a === "string") {
278
282
  if (typeof b === "string") {
279
283
  const set = new SortableSet();
280
284
  set.add(a);
281
285
  set.add(b);
282
286
  return set;
283
- } else {
284
- const set = new SortableSet(b);
285
- set.add(a);
286
- return set;
287
- }
288
- } else {
289
- if (typeof b === "string") {
290
- a.add(b);
291
- return a;
292
- } else {
293
- for (const item of b) a.add(item);
294
- return a;
295
287
  }
288
+ const set = new SortableSet(b);
289
+ set.add(a);
290
+ return set;
291
+ }
292
+ if (typeof b === "string") {
293
+ a.add(b);
294
+ return a;
296
295
  }
296
+ for (const item of b) a.add(item);
297
+ return a;
297
298
  };
298
- exports.mergeRuntimeOwned = mergeRuntimeOwned;
299
+ module.exports.mergeRuntimeOwned = mergeRuntimeOwned;
299
300
 
300
301
  /**
301
302
  * @param {RuntimeSpec} a first
302
303
  * @param {RuntimeSpec} b second
303
304
  * @returns {RuntimeSpec} merged
304
305
  */
305
- exports.intersectRuntime = (a, b) => {
306
+ module.exports.intersectRuntime = (a, b) => {
306
307
  if (a === undefined) {
307
308
  return b;
308
309
  } else if (b === undefined) {
@@ -311,26 +312,26 @@ exports.intersectRuntime = (a, b) => {
311
312
  return a;
312
313
  } else if (typeof a === "string") {
313
314
  if (typeof b === "string") {
314
- return undefined;
315
+ return;
315
316
  } else if (b.has(a)) {
316
317
  return a;
317
- } else {
318
- return undefined;
319
- }
320
- } else {
321
- if (typeof b === "string") {
322
- if (a.has(b)) return b;
323
- return undefined;
324
- } else {
325
- const set = new SortableSet();
326
- for (const item of b) {
327
- if (a.has(item)) set.add(item);
328
- }
329
- if (set.size === 0) return undefined;
330
- if (set.size === 1) for (const item of set) return item;
331
- return set;
332
318
  }
319
+ return;
320
+ }
321
+ if (typeof b === "string") {
322
+ if (a.has(b)) return b;
323
+ return;
324
+ }
325
+ const set = new SortableSet();
326
+ for (const item of b) {
327
+ if (a.has(item)) set.add(item);
333
328
  }
329
+ if (set.size === 0) return;
330
+ if (set.size === 1) {
331
+ const [item] = set;
332
+ return item;
333
+ }
334
+ return set;
334
335
  };
335
336
 
336
337
  /**
@@ -340,41 +341,42 @@ exports.intersectRuntime = (a, b) => {
340
341
  */
341
342
  const subtractRuntime = (a, b) => {
342
343
  if (a === undefined) {
343
- return undefined;
344
+ return;
344
345
  } else if (b === undefined) {
345
346
  return a;
346
347
  } else if (a === b) {
347
- return undefined;
348
+ return;
348
349
  } else if (typeof a === "string") {
349
350
  if (typeof b === "string") {
350
351
  return a;
351
352
  } else if (b.has(a)) {
352
- return undefined;
353
- } else {
354
- return a;
353
+ return;
355
354
  }
356
- } else {
357
- if (typeof b === "string") {
358
- if (!a.has(b)) return a;
359
- if (a.size === 2) {
360
- for (const item of a) {
361
- if (item !== b) return item;
362
- }
363
- }
364
- const set = new SortableSet(a);
365
- set.delete(b);
366
- } else {
367
- const set = new SortableSet();
355
+ return a;
356
+ }
357
+ if (typeof b === "string") {
358
+ if (!a.has(b)) return a;
359
+ if (a.size === 2) {
368
360
  for (const item of a) {
369
- if (!b.has(item)) set.add(item);
361
+ if (item !== b) return item;
370
362
  }
371
- if (set.size === 0) return undefined;
372
- if (set.size === 1) for (const item of set) return item;
373
- return set;
374
363
  }
364
+ const set = new SortableSet(a);
365
+ set.delete(b);
366
+ return set;
367
+ }
368
+ const set = new SortableSet();
369
+ for (const item of a) {
370
+ if (!b.has(item)) set.add(item);
375
371
  }
372
+ if (set.size === 0) return;
373
+ if (set.size === 1) {
374
+ const [item] = set;
375
+ return item;
376
+ }
377
+ return set;
376
378
  };
377
- exports.subtractRuntime = subtractRuntime;
379
+ module.exports.subtractRuntime = subtractRuntime;
378
380
 
379
381
  /**
380
382
  * @param {RuntimeCondition} a first
@@ -382,7 +384,7 @@ exports.subtractRuntime = subtractRuntime;
382
384
  * @param {RuntimeSpec} runtime runtime
383
385
  * @returns {RuntimeCondition} result
384
386
  */
385
- exports.subtractRuntimeCondition = (a, b, runtime) => {
387
+ module.exports.subtractRuntimeCondition = (a, b, runtime) => {
386
388
  if (b === true) return false;
387
389
  if (b === false) return a;
388
390
  if (a === false) return false;
@@ -392,15 +394,15 @@ exports.subtractRuntimeCondition = (a, b, runtime) => {
392
394
 
393
395
  /**
394
396
  * @param {RuntimeSpec} runtime runtime
395
- * @param {function(RuntimeSpec): boolean} filter filter function
397
+ * @param {function(RuntimeSpec=): boolean} filter filter function
396
398
  * @returns {boolean | RuntimeSpec} true/false if filter is constant for all runtimes, otherwise runtimes that are active
397
399
  */
398
- exports.filterRuntime = (runtime, filter) => {
399
- if (runtime === undefined) return filter(undefined);
400
+ module.exports.filterRuntime = (runtime, filter) => {
401
+ if (runtime === undefined) return filter();
400
402
  if (typeof runtime === "string") return filter(runtime);
401
403
  let some = false;
402
404
  let every = true;
403
- let result = undefined;
405
+ let result;
404
406
  for (const r of runtime) {
405
407
  const v = filter(r);
406
408
  if (v) {
@@ -415,6 +417,11 @@ exports.filterRuntime = (runtime, filter) => {
415
417
  return result;
416
418
  };
417
419
 
420
+ /**
421
+ * @template T
422
+ * @typedef {Map<string, T>} RuntimeSpecMapInnerMap
423
+ */
424
+
418
425
  /**
419
426
  * @template T
420
427
  */
@@ -426,26 +433,28 @@ class RuntimeSpecMap {
426
433
  this._mode = clone ? clone._mode : 0; // 0 = empty, 1 = single entry, 2 = map
427
434
  /** @type {RuntimeSpec} */
428
435
  this._singleRuntime = clone ? clone._singleRuntime : undefined;
429
- /** @type {T} */
436
+ /** @type {T | undefined} */
430
437
  this._singleValue = clone ? clone._singleValue : undefined;
431
- /** @type {Map<string, T> | undefined} */
438
+ /** @type {RuntimeSpecMapInnerMap<T> | undefined} */
432
439
  this._map = clone && clone._map ? new Map(clone._map) : undefined;
433
440
  }
434
441
 
435
442
  /**
436
443
  * @param {RuntimeSpec} runtime the runtimes
437
- * @returns {T} value
444
+ * @returns {T | undefined} value
438
445
  */
439
446
  get(runtime) {
440
447
  switch (this._mode) {
441
448
  case 0:
442
- return undefined;
449
+ return;
443
450
  case 1:
444
451
  return runtimeEqual(this._singleRuntime, runtime)
445
452
  ? this._singleValue
446
453
  : undefined;
447
454
  default:
448
- return this._map.get(getRuntimeKey(runtime));
455
+ return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).get(
456
+ getRuntimeKey(runtime)
457
+ );
449
458
  }
450
459
  }
451
460
 
@@ -460,10 +469,16 @@ class RuntimeSpecMap {
460
469
  case 1:
461
470
  return runtimeEqual(this._singleRuntime, runtime);
462
471
  default:
463
- return this._map.has(getRuntimeKey(runtime));
472
+ return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).has(
473
+ getRuntimeKey(runtime)
474
+ );
464
475
  }
465
476
  }
466
477
 
478
+ /**
479
+ * @param {RuntimeSpec} runtime the runtimes
480
+ * @param {T} value the value
481
+ */
467
482
  set(runtime, value) {
468
483
  switch (this._mode) {
469
484
  case 0:
@@ -478,15 +493,24 @@ class RuntimeSpecMap {
478
493
  }
479
494
  this._mode = 2;
480
495
  this._map = new Map();
481
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
496
+ this._map.set(
497
+ getRuntimeKey(this._singleRuntime),
498
+ /** @type {T} */ (this._singleValue)
499
+ );
482
500
  this._singleRuntime = undefined;
483
501
  this._singleValue = undefined;
484
502
  /* falls through */
485
503
  default:
486
- this._map.set(getRuntimeKey(runtime), value);
504
+ /** @type {RuntimeSpecMapInnerMap<T>} */
505
+ (this._map).set(getRuntimeKey(runtime), value);
487
506
  }
488
507
  }
489
508
 
509
+ /**
510
+ * @param {RuntimeSpec} runtime the runtimes
511
+ * @param {() => TODO} computer function to compute the value
512
+ * @returns {TODO} true, when the runtime was deleted
513
+ */
490
514
  provide(runtime, computer) {
491
515
  switch (this._mode) {
492
516
  case 0:
@@ -495,11 +519,14 @@ class RuntimeSpecMap {
495
519
  return (this._singleValue = computer());
496
520
  case 1: {
497
521
  if (runtimeEqual(this._singleRuntime, runtime)) {
498
- return this._singleValue;
522
+ return /** @type {T} */ (this._singleValue);
499
523
  }
500
524
  this._mode = 2;
501
525
  this._map = new Map();
502
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
526
+ this._map.set(
527
+ getRuntimeKey(this._singleRuntime),
528
+ /** @type {T} */ (this._singleValue)
529
+ );
503
530
  this._singleRuntime = undefined;
504
531
  this._singleValue = undefined;
505
532
  const newValue = computer();
@@ -508,15 +535,19 @@ class RuntimeSpecMap {
508
535
  }
509
536
  default: {
510
537
  const key = getRuntimeKey(runtime);
511
- const value = this._map.get(key);
538
+ const value = /** @type {Map<string, T>} */ (this._map).get(key);
512
539
  if (value !== undefined) return value;
513
540
  const newValue = computer();
514
- this._map.set(key, newValue);
541
+ /** @type {Map<string, T>} */
542
+ (this._map).set(key, newValue);
515
543
  return newValue;
516
544
  }
517
545
  }
518
546
  }
519
547
 
548
+ /**
549
+ * @param {RuntimeSpec} runtime the runtimes
550
+ */
520
551
  delete(runtime) {
521
552
  switch (this._mode) {
522
553
  case 0:
@@ -529,10 +560,15 @@ class RuntimeSpecMap {
529
560
  }
530
561
  return;
531
562
  default:
532
- this._map.delete(getRuntimeKey(runtime));
563
+ /** @type {RuntimeSpecMapInnerMap<T>} */
564
+ (this._map).delete(getRuntimeKey(runtime));
533
565
  }
534
566
  }
535
567
 
568
+ /**
569
+ * @param {RuntimeSpec} runtime the runtimes
570
+ * @param {function(T | undefined): T} fn function to update the value
571
+ */
536
572
  update(runtime, fn) {
537
573
  switch (this._mode) {
538
574
  case 0:
@@ -546,7 +582,10 @@ class RuntimeSpecMap {
546
582
  if (newValue !== undefined) {
547
583
  this._mode = 2;
548
584
  this._map = new Map();
549
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
585
+ this._map.set(
586
+ getRuntimeKey(this._singleRuntime),
587
+ /** @type {T} */ (this._singleValue)
588
+ );
550
589
  this._singleRuntime = undefined;
551
590
  this._singleValue = undefined;
552
591
  this._map.set(getRuntimeKey(runtime), newValue);
@@ -555,9 +594,11 @@ class RuntimeSpecMap {
555
594
  }
556
595
  default: {
557
596
  const key = getRuntimeKey(runtime);
558
- const oldValue = this._map.get(key);
597
+ const oldValue = /** @type {Map<string, T>} */ (this._map).get(key);
559
598
  const newValue = fn(oldValue);
560
- if (newValue !== oldValue) this._map.set(key, newValue);
599
+ if (newValue !== oldValue)
600
+ /** @type {RuntimeSpecMapInnerMap<T>} */
601
+ (this._map).set(key, newValue);
561
602
  }
562
603
  }
563
604
  }
@@ -569,7 +610,11 @@ class RuntimeSpecMap {
569
610
  case 1:
570
611
  return [this._singleRuntime];
571
612
  default:
572
- return Array.from(this._map.keys(), keyToRuntime);
613
+ return Array.from(
614
+ /** @type {RuntimeSpecMapInnerMap<T>} */
615
+ (this._map).keys(),
616
+ keyToRuntime
617
+ );
573
618
  }
574
619
  }
575
620
 
@@ -578,21 +623,24 @@ class RuntimeSpecMap {
578
623
  case 0:
579
624
  return [][Symbol.iterator]();
580
625
  case 1:
581
- return [this._singleValue][Symbol.iterator]();
626
+ return [/** @type {T} */ (this._singleValue)][Symbol.iterator]();
582
627
  default:
583
- return this._map.values();
628
+ return /** @type {Map<string, T>} */ (this._map).values();
584
629
  }
585
630
  }
586
631
 
587
632
  get size() {
588
- if (this._mode <= 1) return this._mode;
589
- return this._map.size;
633
+ if (/** @type {number} */ (this._mode) <= 1) return this._mode;
634
+ return /** @type {Map<string, T>} */ (this._map).size;
590
635
  }
591
636
  }
592
637
 
593
- exports.RuntimeSpecMap = RuntimeSpecMap;
638
+ module.exports.RuntimeSpecMap = RuntimeSpecMap;
594
639
 
595
640
  class RuntimeSpecSet {
641
+ /**
642
+ * @param {Iterable<RuntimeSpec>=} iterable iterable
643
+ */
596
644
  constructor(iterable) {
597
645
  /** @type {Map<string, RuntimeSpec>} */
598
646
  this._map = new Map();
@@ -603,10 +651,17 @@ class RuntimeSpecSet {
603
651
  }
604
652
  }
605
653
 
654
+ /**
655
+ * @param {RuntimeSpec} runtime runtime
656
+ */
606
657
  add(runtime) {
607
658
  this._map.set(getRuntimeKey(runtime), runtime);
608
659
  }
609
660
 
661
+ /**
662
+ * @param {RuntimeSpec} runtime runtime
663
+ * @returns {boolean} true, when the runtime exists
664
+ */
610
665
  has(runtime) {
611
666
  return this._map.has(getRuntimeKey(runtime));
612
667
  }
@@ -620,4 +675,4 @@ class RuntimeSpecSet {
620
675
  }
621
676
  }
622
677
 
623
- exports.RuntimeSpecSet = RuntimeSpecSet;
678
+ module.exports.RuntimeSpecSet = RuntimeSpecSet;