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
@@ -23,26 +23,28 @@ const DYNAMIC_INFO = Symbol("cleverMerge dynamic info");
23
23
  * // when same arguments passed, gets the result from WeakMap and returns it.
24
24
  * cachedCleverMerge({a: 1}, {a: 2})
25
25
  * {a: 2}
26
- * @param {T} first first object
27
- * @param {O} second second object
26
+ * @param {T | null | undefined} first first object
27
+ * @param {O | null | undefined} second second object
28
28
  * @returns {T & O | T | O} merged object of first and second object
29
29
  */
30
30
  const cachedCleverMerge = (first, second) => {
31
- if (second === undefined) return first;
32
- if (first === undefined) return second;
33
- if (typeof second !== "object" || second === null) return second;
34
- if (typeof first !== "object" || first === null) return first;
31
+ if (second === undefined) return /** @type {T} */ (first);
32
+ if (first === undefined) return /** @type {O} */ (second);
33
+ if (typeof second !== "object" || second === null)
34
+ return /** @type {O} */ (second);
35
+ if (typeof first !== "object" || first === null)
36
+ return /** @type {T} */ (first);
35
37
 
36
38
  let innerCache = mergeCache.get(first);
37
39
  if (innerCache === undefined) {
38
40
  innerCache = new WeakMap();
39
41
  mergeCache.set(first, innerCache);
40
42
  }
41
- const prevMerge = innerCache.get(second);
43
+ const prevMerge = /** @type {T & O} */ (innerCache.get(second));
42
44
  if (prevMerge !== undefined) return prevMerge;
43
45
  const newMerge = _cleverMerge(first, second, true);
44
46
  innerCache.set(second, newMerge);
45
- return newMerge;
47
+ return /** @type {T & O} */ (newMerge);
46
48
  };
47
49
 
48
50
  /**
@@ -69,7 +71,7 @@ const cachedSetProperty = (obj, property, value) => {
69
71
 
70
72
  let result = mapByValue.get(value);
71
73
 
72
- if (result) return result;
74
+ if (result) return /** @type {T} */ (result);
73
75
 
74
76
  result = {
75
77
  ...obj,
@@ -77,18 +79,18 @@ const cachedSetProperty = (obj, property, value) => {
77
79
  };
78
80
  mapByValue.set(value, result);
79
81
 
80
- return result;
82
+ return /** @type {T} */ (result);
81
83
  };
82
84
 
83
85
  /**
84
- * @typedef {Object} ObjectParsedPropertyEntry
86
+ * @typedef {object} ObjectParsedPropertyEntry
85
87
  * @property {any | undefined} base base value
86
88
  * @property {string | undefined} byProperty the name of the selector property
87
89
  * @property {Map<string, any>} byValues value depending on selector property, merged with base
88
90
  */
89
91
 
90
92
  /**
91
- * @typedef {Object} ParsedObject
93
+ * @typedef {object} ParsedObject
92
94
  * @property {Map<string, ObjectParsedPropertyEntry>} static static properties (key is property name)
93
95
  * @property {{ byProperty: string, fn: Function } | undefined} dynamic dynamic part
94
96
  */
@@ -229,7 +231,7 @@ const getValueType = value => {
229
231
  } else if (value === DELETE) {
230
232
  return VALUE_TYPE_DELETE;
231
233
  } else if (Array.isArray(value)) {
232
- if (value.lastIndexOf("...") !== -1) return VALUE_TYPE_ARRAY_EXTEND;
234
+ if (value.includes("...")) return VALUE_TYPE_ARRAY_EXTEND;
233
235
  return VALUE_TYPE_ATOM;
234
236
  } else if (
235
237
  typeof value === "object" &&
@@ -257,7 +259,7 @@ const cleverMerge = (first, second) => {
257
259
  if (typeof second !== "object" || second === null) return second;
258
260
  if (typeof first !== "object" || first === null) return first;
259
261
 
260
- return _cleverMerge(first, second, false);
262
+ return /** @type {T & O} */ (_cleverMerge(first, second, false));
261
263
  };
262
264
 
263
265
  /**
@@ -457,8 +459,8 @@ const mergeSingleValue = (a, b, internalCaching) => {
457
459
  return aType !== VALUE_TYPE_OBJECT
458
460
  ? b
459
461
  : internalCaching
460
- ? cachedCleverMerge(a, b)
461
- : cleverMerge(a, b);
462
+ ? cachedCleverMerge(a, b)
463
+ : cleverMerge(a, b);
462
464
  }
463
465
  case VALUE_TYPE_UNDEFINED:
464
466
  return a;
@@ -467,8 +469,8 @@ const mergeSingleValue = (a, b, internalCaching) => {
467
469
  aType !== VALUE_TYPE_ATOM
468
470
  ? aType
469
471
  : Array.isArray(a)
470
- ? VALUE_TYPE_ARRAY_EXTEND
471
- : VALUE_TYPE_OBJECT
472
+ ? VALUE_TYPE_ARRAY_EXTEND
473
+ : VALUE_TYPE_OBJECT
472
474
  ) {
473
475
  case VALUE_TYPE_UNDEFINED:
474
476
  return b;
@@ -498,27 +500,40 @@ const mergeSingleValue = (a, b, internalCaching) => {
498
500
  };
499
501
 
500
502
  /**
501
- * @template T
503
+ * @template {object} T
502
504
  * @param {T} obj the object
505
+ * @param {(keyof T)[]=} keysToKeepOriginalValue keys to keep original value
503
506
  * @returns {T} the object without operations like "..." or DELETE
504
507
  */
505
- const removeOperations = obj => {
508
+ const removeOperations = (obj, keysToKeepOriginalValue = []) => {
506
509
  const newObj = /** @type {T} */ ({});
507
510
  for (const key of Object.keys(obj)) {
508
- const value = obj[key];
511
+ const value = obj[/** @type {keyof T} */ (key)];
509
512
  const type = getValueType(value);
513
+ if (
514
+ type === VALUE_TYPE_OBJECT &&
515
+ keysToKeepOriginalValue.includes(/** @type {keyof T} */ (key))
516
+ ) {
517
+ newObj[/** @type {keyof T} */ (key)] = value;
518
+ continue;
519
+ }
510
520
  switch (type) {
511
521
  case VALUE_TYPE_UNDEFINED:
512
522
  case VALUE_TYPE_DELETE:
513
523
  break;
514
524
  case VALUE_TYPE_OBJECT:
515
- newObj[key] = removeOperations(value);
525
+ newObj[key] = removeOperations(
526
+ /** @type {TODO} */ (value),
527
+ keysToKeepOriginalValue
528
+ );
516
529
  break;
517
530
  case VALUE_TYPE_ARRAY_EXTEND:
518
- newObj[key] = value.filter(i => i !== "...");
531
+ newObj[key] =
532
+ /** @type {any[]} */
533
+ (value).filter(i => i !== "...");
519
534
  break;
520
535
  default:
521
- newObj[key] = value;
536
+ newObj[/** @type {keyof T} */ (key)] = value;
522
537
  break;
523
538
  }
524
539
  }
@@ -537,21 +552,21 @@ const resolveByProperty = (obj, byProperty, ...values) => {
537
552
  if (typeof obj !== "object" || obj === null || !(byProperty in obj)) {
538
553
  return obj;
539
554
  }
540
- const { [byProperty]: _byValue, ..._remaining } = /** @type {object} */ (obj);
555
+ const { [byProperty]: _byValue, ..._remaining } = obj;
541
556
  const remaining = /** @type {T} */ (_remaining);
542
- const byValue = /** @type {Record<string, T> | function(...any[]): T} */ (
543
- _byValue
544
- );
557
+ const byValue =
558
+ /** @type {Record<string, T> | function(...any[]): T} */
559
+ (_byValue);
545
560
  if (typeof byValue === "object") {
546
561
  const key = values[0];
547
562
  if (key in byValue) {
548
563
  return cachedCleverMerge(remaining, byValue[key]);
549
564
  } else if ("default" in byValue) {
550
565
  return cachedCleverMerge(remaining, byValue.default);
551
- } else {
552
- return /** @type {T} */ (remaining);
553
566
  }
567
+ return remaining;
554
568
  } else if (typeof byValue === "function") {
569
+ // eslint-disable-next-line prefer-spread
555
570
  const result = byValue.apply(null, values);
556
571
  return cachedCleverMerge(
557
572
  remaining,
@@ -560,9 +575,9 @@ const resolveByProperty = (obj, byProperty, ...values) => {
560
575
  }
561
576
  };
562
577
 
563
- exports.cachedSetProperty = cachedSetProperty;
564
- exports.cachedCleverMerge = cachedCleverMerge;
565
- exports.cleverMerge = cleverMerge;
566
- exports.resolveByProperty = resolveByProperty;
567
- exports.removeOperations = removeOperations;
568
- exports.DELETE = DELETE;
578
+ module.exports.cachedSetProperty = cachedSetProperty;
579
+ module.exports.cachedCleverMerge = cachedCleverMerge;
580
+ module.exports.cleverMerge = cleverMerge;
581
+ module.exports.resolveByProperty = resolveByProperty;
582
+ module.exports.removeOperations = removeOperations;
583
+ module.exports.DELETE = DELETE;
@@ -8,15 +8,28 @@
8
8
  const { compareRuntime } = require("./runtime");
9
9
 
10
10
  /** @typedef {import("../Chunk")} Chunk */
11
+ /** @typedef {import("../Chunk").ChunkId} ChunkId */
11
12
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
12
14
  /** @typedef {import("../ChunkGroup")} ChunkGroup */
13
15
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
14
16
  /** @typedef {import("../Module")} Module */
15
17
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
18
 
17
- /** @template T @typedef {function(T, T): -1|0|1} Comparator */
18
- /** @template TArg @template T @typedef {function(TArg, T, T): -1|0|1} RawParameterizedComparator */
19
- /** @template TArg @template T @typedef {function(TArg): Comparator<T>} ParameterizedComparator */
19
+ /**
20
+ * @template T
21
+ * @typedef {function(T, T): -1|0|1} Comparator
22
+ */
23
+ /**
24
+ * @template TArg
25
+ * @template T
26
+ * @typedef {function(TArg, T, T): -1|0|1} RawParameterizedComparator
27
+ */
28
+ /**
29
+ * @template TArg
30
+ * @template T
31
+ * @typedef {function(TArg): Comparator<T>} ParameterizedComparator
32
+ */
20
33
 
21
34
  /**
22
35
  * @template T
@@ -45,18 +58,16 @@ const createCachedParameterizedComparator = fn => {
45
58
  * @param {Chunk} b chunk
46
59
  * @returns {-1|0|1} compare result
47
60
  */
48
- exports.compareChunksById = (a, b) => {
49
- return compareIds(a.id, b.id);
50
- };
61
+ module.exports.compareChunksById = (a, b) =>
62
+ compareIds(/** @type {ChunkId} */ (a.id), /** @type {ChunkId} */ (b.id));
51
63
 
52
64
  /**
53
65
  * @param {Module} a module
54
66
  * @param {Module} b module
55
67
  * @returns {-1|0|1} compare result
56
68
  */
57
- exports.compareModulesByIdentifier = (a, b) => {
58
- return compareIds(a.identifier(), b.identifier());
59
- };
69
+ module.exports.compareModulesByIdentifier = (a, b) =>
70
+ compareIds(a.identifier(), b.identifier());
60
71
 
61
72
  /**
62
73
  * @param {ChunkGraph} chunkGraph the chunk graph
@@ -64,11 +75,13 @@ exports.compareModulesByIdentifier = (a, b) => {
64
75
  * @param {Module} b module
65
76
  * @returns {-1|0|1} compare result
66
77
  */
67
- const compareModulesById = (chunkGraph, a, b) => {
68
- return compareIds(chunkGraph.getModuleId(a), chunkGraph.getModuleId(b));
69
- };
78
+ const compareModulesById = (chunkGraph, a, b) =>
79
+ compareIds(
80
+ /** @type {ModuleId} */ (chunkGraph.getModuleId(a)),
81
+ /** @type {ModuleId} */ (chunkGraph.getModuleId(b))
82
+ );
70
83
  /** @type {ParameterizedComparator<ChunkGraph, Module>} */
71
- exports.compareModulesById =
84
+ module.exports.compareModulesById =
72
85
  createCachedParameterizedComparator(compareModulesById);
73
86
 
74
87
  /**
@@ -84,7 +97,7 @@ const compareNumbers = (a, b) => {
84
97
  if (a > b) return 1;
85
98
  return 0;
86
99
  };
87
- exports.compareNumbers = compareNumbers;
100
+ module.exports.compareNumbers = compareNumbers;
88
101
 
89
102
  /**
90
103
  * @param {string} a string
@@ -92,35 +105,71 @@ exports.compareNumbers = compareNumbers;
92
105
  * @returns {-1|0|1} compare result
93
106
  */
94
107
  const compareStringsNumeric = (a, b) => {
95
- const partsA = a.split(/(\d+)/);
96
- const partsB = b.split(/(\d+)/);
97
- const len = Math.min(partsA.length, partsB.length);
98
- for (let i = 0; i < len; i++) {
99
- const pA = partsA[i];
100
- const pB = partsB[i];
101
- if (i % 2 === 0) {
102
- if (pA.length > pB.length) {
103
- if (pA.slice(0, pB.length) > pB) return 1;
104
- return -1;
105
- } else if (pB.length > pA.length) {
106
- if (pB.slice(0, pA.length) > pA) return -1;
107
- return 1;
108
- } else {
109
- if (pA < pB) return -1;
110
- if (pA > pB) return 1;
111
- }
108
+ const aLength = a.length;
109
+ const bLength = b.length;
110
+
111
+ let aChar = 0;
112
+ let bChar = 0;
113
+
114
+ let aIsDigit = false;
115
+ let bIsDigit = false;
116
+ let i = 0;
117
+ let j = 0;
118
+ while (i < aLength && j < bLength) {
119
+ aChar = a.charCodeAt(i);
120
+ bChar = b.charCodeAt(j);
121
+
122
+ aIsDigit = aChar >= 48 && aChar <= 57;
123
+ bIsDigit = bChar >= 48 && bChar <= 57;
124
+
125
+ if (!aIsDigit && !bIsDigit) {
126
+ if (aChar < bChar) return -1;
127
+ if (aChar > bChar) return 1;
128
+ i++;
129
+ j++;
130
+ } else if (aIsDigit && !bIsDigit) {
131
+ // This segment of a is shorter than in b
132
+ return 1;
133
+ } else if (!aIsDigit && bIsDigit) {
134
+ // This segment of b is shorter than in a
135
+ return -1;
112
136
  } else {
113
- const nA = +pA;
114
- const nB = +pB;
115
- if (nA < nB) return -1;
116
- if (nA > nB) return 1;
137
+ let aNumber = aChar - 48;
138
+ let bNumber = bChar - 48;
139
+
140
+ while (++i < aLength) {
141
+ aChar = a.charCodeAt(i);
142
+ if (aChar < 48 || aChar > 57) break;
143
+ aNumber = aNumber * 10 + aChar - 48;
144
+ }
145
+
146
+ while (++j < bLength) {
147
+ bChar = b.charCodeAt(j);
148
+ if (bChar < 48 || bChar > 57) break;
149
+ bNumber = bNumber * 10 + bChar - 48;
150
+ }
151
+
152
+ if (aNumber < bNumber) return -1;
153
+ if (aNumber > bNumber) return 1;
117
154
  }
118
155
  }
119
- if (partsB.length < partsA.length) return 1;
120
- if (partsB.length > partsA.length) return -1;
156
+
157
+ if (j < bLength) {
158
+ // a is shorter than b
159
+ bChar = b.charCodeAt(j);
160
+ bIsDigit = bChar >= 48 && bChar <= 57;
161
+ return bIsDigit ? -1 : 1;
162
+ }
163
+ if (i < aLength) {
164
+ // b is shorter than a
165
+ aChar = a.charCodeAt(i);
166
+ aIsDigit = aChar >= 48 && aChar <= 57;
167
+ return aIsDigit ? 1 : -1;
168
+ }
169
+
121
170
  return 0;
122
171
  };
123
- exports.compareStringsNumeric = compareStringsNumeric;
172
+ module.exports.compareStringsNumeric = compareStringsNumeric;
124
173
 
125
174
  /**
126
175
  * @param {ModuleGraph} moduleGraph the module graph
@@ -130,14 +179,14 @@ exports.compareStringsNumeric = compareStringsNumeric;
130
179
  */
131
180
  const compareModulesByPostOrderIndexOrIdentifier = (moduleGraph, a, b) => {
132
181
  const cmp = compareNumbers(
133
- moduleGraph.getPostOrderIndex(a),
134
- moduleGraph.getPostOrderIndex(b)
182
+ /** @type {number} */ (moduleGraph.getPostOrderIndex(a)),
183
+ /** @type {number} */ (moduleGraph.getPostOrderIndex(b))
135
184
  );
136
185
  if (cmp !== 0) return cmp;
137
186
  return compareIds(a.identifier(), b.identifier());
138
187
  };
139
188
  /** @type {ParameterizedComparator<ModuleGraph, Module>} */
140
- exports.compareModulesByPostOrderIndexOrIdentifier =
189
+ module.exports.compareModulesByPostOrderIndexOrIdentifier =
141
190
  createCachedParameterizedComparator(
142
191
  compareModulesByPostOrderIndexOrIdentifier
143
192
  );
@@ -150,14 +199,14 @@ exports.compareModulesByPostOrderIndexOrIdentifier =
150
199
  */
151
200
  const compareModulesByPreOrderIndexOrIdentifier = (moduleGraph, a, b) => {
152
201
  const cmp = compareNumbers(
153
- moduleGraph.getPreOrderIndex(a),
154
- moduleGraph.getPreOrderIndex(b)
202
+ /** @type {number} */ (moduleGraph.getPreOrderIndex(a)),
203
+ /** @type {number} */ (moduleGraph.getPreOrderIndex(b))
155
204
  );
156
205
  if (cmp !== 0) return cmp;
157
206
  return compareIds(a.identifier(), b.identifier());
158
207
  };
159
208
  /** @type {ParameterizedComparator<ModuleGraph, Module>} */
160
- exports.compareModulesByPreOrderIndexOrIdentifier =
209
+ module.exports.compareModulesByPreOrderIndexOrIdentifier =
161
210
  createCachedParameterizedComparator(
162
211
  compareModulesByPreOrderIndexOrIdentifier
163
212
  );
@@ -169,14 +218,16 @@ exports.compareModulesByPreOrderIndexOrIdentifier =
169
218
  * @returns {-1|0|1} compare result
170
219
  */
171
220
  const compareModulesByIdOrIdentifier = (chunkGraph, a, b) => {
172
- const cmp = compareIds(chunkGraph.getModuleId(a), chunkGraph.getModuleId(b));
221
+ const cmp = compareIds(
222
+ /** @type {ModuleId} */ (chunkGraph.getModuleId(a)),
223
+ /** @type {ModuleId} */ (chunkGraph.getModuleId(b))
224
+ );
173
225
  if (cmp !== 0) return cmp;
174
226
  return compareIds(a.identifier(), b.identifier());
175
227
  };
176
228
  /** @type {ParameterizedComparator<ChunkGraph, Module>} */
177
- exports.compareModulesByIdOrIdentifier = createCachedParameterizedComparator(
178
- compareModulesByIdOrIdentifier
179
- );
229
+ module.exports.compareModulesByIdOrIdentifier =
230
+ createCachedParameterizedComparator(compareModulesByIdOrIdentifier);
180
231
 
181
232
  /**
182
233
  * @param {ChunkGraph} chunkGraph the chunk graph
@@ -184,11 +235,10 @@ exports.compareModulesByIdOrIdentifier = createCachedParameterizedComparator(
184
235
  * @param {Chunk} b chunk
185
236
  * @returns {-1|0|1} compare result
186
237
  */
187
- const compareChunks = (chunkGraph, a, b) => {
188
- return chunkGraph.compareChunks(a, b);
189
- };
238
+ const compareChunks = (chunkGraph, a, b) => chunkGraph.compareChunks(a, b);
190
239
  /** @type {ParameterizedComparator<ChunkGraph, Chunk>} */
191
- exports.compareChunks = createCachedParameterizedComparator(compareChunks);
240
+ module.exports.compareChunks =
241
+ createCachedParameterizedComparator(compareChunks);
192
242
 
193
243
  /**
194
244
  * @param {string|number} a first id
@@ -204,7 +254,7 @@ const compareIds = (a, b) => {
204
254
  return 0;
205
255
  };
206
256
 
207
- exports.compareIds = compareIds;
257
+ module.exports.compareIds = compareIds;
208
258
 
209
259
  /**
210
260
  * @param {string} a first string
@@ -217,18 +267,16 @@ const compareStrings = (a, b) => {
217
267
  return 0;
218
268
  };
219
269
 
220
- exports.compareStrings = compareStrings;
270
+ module.exports.compareStrings = compareStrings;
221
271
 
222
272
  /**
223
273
  * @param {ChunkGroup} a first chunk group
224
274
  * @param {ChunkGroup} b second chunk group
225
275
  * @returns {-1|0|1} compare result
226
276
  */
227
- const compareChunkGroupsByIndex = (a, b) => {
228
- return a.index < b.index ? -1 : 1;
229
- };
230
-
231
- exports.compareChunkGroupsByIndex = compareChunkGroupsByIndex;
277
+ const compareChunkGroupsByIndex = (a, b) =>
278
+ /** @type {number} */ (a.index) < /** @type {number} */ (b.index) ? -1 : 1;
279
+ module.exports.compareChunkGroupsByIndex = compareChunkGroupsByIndex;
232
280
 
233
281
  /**
234
282
  * @template K1 {Object}
@@ -237,7 +285,10 @@ exports.compareChunkGroupsByIndex = compareChunkGroupsByIndex;
237
285
  */
238
286
  class TwoKeyWeakMap {
239
287
  constructor() {
240
- /** @private @type {WeakMap<any, WeakMap<any, T>>} */
288
+ /**
289
+ * @private
290
+ * @type {WeakMap<any, WeakMap<any, T | undefined>>}
291
+ */
241
292
  this._map = new WeakMap();
242
293
  }
243
294
 
@@ -249,7 +300,7 @@ class TwoKeyWeakMap {
249
300
  get(key1, key2) {
250
301
  const childMap = this._map.get(key1);
251
302
  if (childMap === undefined) {
252
- return undefined;
303
+ return;
253
304
  }
254
305
  return childMap.get(key2);
255
306
  }
@@ -302,9 +353,12 @@ const concatComparators = (c1, c2, ...cRest) => {
302
353
  concatComparatorsCache.set(c1, c2, result);
303
354
  return result;
304
355
  };
305
- exports.concatComparators = concatComparators;
356
+ module.exports.concatComparators = concatComparators;
306
357
 
307
- /** @template A, B @typedef {(input: A) => B} Selector */
358
+ /**
359
+ * @template A, B
360
+ * @typedef {(input: A) => B | undefined | null} Selector
361
+ */
308
362
 
309
363
  /** @type {TwoKeyWeakMap<Selector<any, any>, Comparator<any>, Comparator<any>>}} */
310
364
  const compareSelectCache = new TwoKeyWeakMap();
@@ -332,17 +386,16 @@ const compareSelect = (getter, comparator) => {
332
386
  return comparator(aValue, bValue);
333
387
  }
334
388
  return -1;
335
- } else {
336
- if (bValue !== undefined && bValue !== null) {
337
- return 1;
338
- }
339
- return 0;
340
389
  }
390
+ if (bValue !== undefined && bValue !== null) {
391
+ return 1;
392
+ }
393
+ return 0;
341
394
  };
342
395
  compareSelectCache.set(getter, comparator, result);
343
396
  return result;
344
397
  };
345
- exports.compareSelect = compareSelect;
398
+ module.exports.compareSelect = compareSelect;
346
399
 
347
400
  /** @type {WeakMap<Comparator<any>, Comparator<Iterable<any>>>} */
348
401
  const compareIteratorsCache = new WeakMap();
@@ -363,7 +416,6 @@ const compareIterables = elementComparator => {
363
416
  const result = (a, b) => {
364
417
  const aI = a[Symbol.iterator]();
365
418
  const bI = b[Symbol.iterator]();
366
- // eslint-disable-next-line no-constant-condition
367
419
  while (true) {
368
420
  const aItem = aI.next();
369
421
  const bItem = bI.next();
@@ -379,7 +431,7 @@ const compareIterables = elementComparator => {
379
431
  compareIteratorsCache.set(elementComparator, result);
380
432
  return result;
381
433
  };
382
- exports.compareIterables = compareIterables;
434
+ module.exports.compareIterables = compareIterables;
383
435
 
384
436
  // TODO this is no longer needed when minimum node.js version is >= 12
385
437
  // since these versions ship with a stable sort function
@@ -388,25 +440,32 @@ exports.compareIterables = compareIterables;
388
440
  * @param {Iterable<T>} iterable original ordered list
389
441
  * @returns {Comparator<T>} comparator
390
442
  */
391
- exports.keepOriginalOrder = iterable => {
443
+ module.exports.keepOriginalOrder = iterable => {
392
444
  /** @type {Map<T, number>} */
393
445
  const map = new Map();
394
446
  let i = 0;
395
447
  for (const item of iterable) {
396
448
  map.set(item, i++);
397
449
  }
398
- return (a, b) => compareNumbers(map.get(a), map.get(b));
450
+ return (a, b) =>
451
+ compareNumbers(
452
+ /** @type {number} */ (map.get(a)),
453
+ /** @type {number} */ (map.get(b))
454
+ );
399
455
  };
400
456
 
401
457
  /**
402
458
  * @param {ChunkGraph} chunkGraph the chunk graph
403
459
  * @returns {Comparator<Chunk>} comparator
404
460
  */
405
- exports.compareChunksNatural = chunkGraph => {
406
- const cmpFn = exports.compareModulesById(chunkGraph);
461
+ module.exports.compareChunksNatural = chunkGraph => {
462
+ const cmpFn = module.exports.compareModulesById(chunkGraph);
407
463
  const cmpIterableFn = compareIterables(cmpFn);
408
464
  return concatComparators(
409
- compareSelect(chunk => chunk.name, compareIds),
465
+ compareSelect(
466
+ chunk => /** @type {string|number} */ (chunk.name),
467
+ compareIds
468
+ ),
410
469
  compareSelect(chunk => chunk.runtime, compareRuntime),
411
470
  compareSelect(
412
471
  /**
@@ -425,9 +484,9 @@ exports.compareChunksNatural = chunkGraph => {
425
484
  * @param {DependencyLocation} b A location node
426
485
  * @returns {-1|0|1} sorting comparator value
427
486
  */
428
- exports.compareLocations = (a, b) => {
429
- let isObjectA = typeof a === "object" && a !== null;
430
- let isObjectB = typeof b === "object" && b !== null;
487
+ module.exports.compareLocations = (a, b) => {
488
+ const isObjectA = typeof a === "object" && a !== null;
489
+ const isObjectB = typeof b === "object" && b !== null;
431
490
  if (!isObjectA || !isObjectB) {
432
491
  if (isObjectA) return 1;
433
492
  if (isObjectB) return -1;
@@ -439,8 +498,10 @@ exports.compareLocations = (a, b) => {
439
498
  const bp = b.start;
440
499
  if (ap.line < bp.line) return -1;
441
500
  if (ap.line > bp.line) return 1;
442
- if (ap.column < bp.column) return -1;
443
- if (ap.column > bp.column) return 1;
501
+ if (/** @type {number} */ (ap.column) < /** @type {number} */ (bp.column))
502
+ return -1;
503
+ if (/** @type {number} */ (ap.column) > /** @type {number} */ (bp.column))
504
+ return 1;
444
505
  } else return -1;
445
506
  } else if ("start" in b) return 1;
446
507
  if ("name" in a) {
@@ -451,8 +512,10 @@ exports.compareLocations = (a, b) => {
451
512
  } else if ("name" in b) return 1;
452
513
  if ("index" in a) {
453
514
  if ("index" in b) {
454
- if (a.index < b.index) return -1;
455
- if (a.index > b.index) return 1;
515
+ if (/** @type {number} */ (a.index) < /** @type {number} */ (b.index))
516
+ return -1;
517
+ if (/** @type {number} */ (a.index) > /** @type {number} */ (b.index))
518
+ return 1;
456
519
  } else return -1;
457
520
  } else if ("index" in b) return 1;
458
521
  return 0;