webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -8,86 +8,188 @@
8
8
  const { compareRuntime } = require("./runtime");
9
9
 
10
10
  /** @typedef {import("../Chunk")} Chunk */
11
+ /** @typedef {import("../Chunk").ChunkName} ChunkName */
11
12
  /** @typedef {import("../Chunk").ChunkId} ChunkId */
12
13
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
14
  /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
14
15
  /** @typedef {import("../ChunkGroup")} ChunkGroup */
15
16
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
17
+ /** @typedef {import("../Dependency")} Dependency */
18
+ /** @typedef {import("../dependencies/HarmonyImportSideEffectDependency")} HarmonyImportSideEffectDependency */
19
+ /** @typedef {import("../dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
16
20
  /** @typedef {import("../Module")} Module */
17
21
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
22
+ /** @typedef {import("../dependencies/ModuleDependency")} ModuleDependency */
23
+
24
+ /**
25
+ * @typedef {object} DependencySourceOrder
26
+ * @property {number} main the main source order
27
+ * @property {number} sub the sub source order
28
+ */
18
29
 
19
30
  /**
20
31
  * @template T
21
- * @typedef {function(T, T): -1|0|1} Comparator
32
+ * @typedef {(a: T, b: T) => -1 | 0 | 1} Comparator
22
33
  */
23
34
  /**
24
- * @template TArg
35
+ * @template {object} TArg
25
36
  * @template T
26
- * @typedef {function(TArg, T, T): -1|0|1} RawParameterizedComparator
37
+ * @typedef {(tArg: TArg, a: T, b: T) => -1 | 0 | 1} RawParameterizedComparator
27
38
  */
28
39
  /**
29
- * @template TArg
40
+ * @template {object} TArg
30
41
  * @template T
31
- * @typedef {function(TArg): Comparator<T>} ParameterizedComparator
42
+ * @typedef {(tArg: TArg) => Comparator<T>} ParameterizedComparator
32
43
  */
33
44
 
34
45
  /**
35
- * @template T
36
- * @param {RawParameterizedComparator<any, T>} fn comparator with argument
37
- * @returns {ParameterizedComparator<any, T>} comparator
46
+ * @template {object} TArg
47
+ * @template {object} T
48
+ * @param {RawParameterizedComparator<TArg, T>} fn comparator with argument
49
+ * @returns {ParameterizedComparator<TArg, T>} comparator
38
50
  */
39
- const createCachedParameterizedComparator = fn => {
40
- /** @type {WeakMap<object, Comparator<T>>} */
51
+ const createCachedParameterizedComparator = (fn) => {
52
+ /** @type {WeakMap<EXPECTED_OBJECT, Comparator<T>>} */
41
53
  const map = new WeakMap();
42
- return arg => {
43
- const cachedResult = map.get(arg);
54
+ return (arg) => {
55
+ const cachedResult = map.get(/** @type {EXPECTED_OBJECT} */ (arg));
44
56
  if (cachedResult !== undefined) return cachedResult;
45
57
  /**
46
58
  * @param {T} a first item
47
59
  * @param {T} b second item
48
- * @returns {-1|0|1} compare result
60
+ * @returns {-1 | 0 | 1} compare result
49
61
  */
50
62
  const result = fn.bind(null, arg);
51
- map.set(arg, result);
63
+ map.set(/** @type {EXPECTED_OBJECT} */ (arg), result);
52
64
  return result;
53
65
  };
54
66
  };
55
67
 
56
68
  /**
57
- * @param {Chunk} a chunk
58
- * @param {Chunk} b chunk
59
- * @returns {-1|0|1} compare result
69
+ * @param {string | number} a first id
70
+ * @param {string | number} b second id
71
+ * @returns {-1 | 0 | 1} compare result
60
72
  */
61
- module.exports.compareChunksById = (a, b) =>
62
- compareIds(/** @type {ChunkId} */ (a.id), /** @type {ChunkId} */ (b.id));
73
+ const compareIds = (a, b) => {
74
+ if (typeof a !== typeof b) {
75
+ return typeof a < typeof b ? -1 : 1;
76
+ }
77
+ if (a < b) return -1;
78
+ if (a > b) return 1;
79
+ return 0;
80
+ };
63
81
 
64
82
  /**
65
- * @param {Module} a module
66
- * @param {Module} b module
67
- * @returns {-1|0|1} compare result
83
+ * @template T
84
+ * @param {Comparator<T>} elementComparator comparator for elements
85
+ * @returns {Comparator<Iterable<T>>} comparator for iterables of elements
68
86
  */
69
- module.exports.compareModulesByIdentifier = (a, b) =>
70
- compareIds(a.identifier(), b.identifier());
87
+ const compareIterables = (elementComparator) => {
88
+ const cacheEntry = compareIteratorsCache.get(elementComparator);
89
+ if (cacheEntry !== undefined) return cacheEntry;
90
+ /**
91
+ * @param {Iterable<T>} a first value
92
+ * @param {Iterable<T>} b second value
93
+ * @returns {-1 | 0 | 1} compare result
94
+ */
95
+ const result = (a, b) => {
96
+ const aI = a[Symbol.iterator]();
97
+ const bI = b[Symbol.iterator]();
98
+ while (true) {
99
+ const aItem = aI.next();
100
+ const bItem = bI.next();
101
+ if (aItem.done) {
102
+ return bItem.done ? 0 : -1;
103
+ } else if (bItem.done) {
104
+ return 1;
105
+ }
106
+ const res = elementComparator(aItem.value, bItem.value);
107
+ if (res !== 0) return res;
108
+ }
109
+ };
110
+ compareIteratorsCache.set(elementComparator, result);
111
+ return result;
112
+ };
113
+
114
+ /**
115
+ * Compare two locations
116
+ * @param {DependencyLocation} a A location node
117
+ * @param {DependencyLocation} b A location node
118
+ * @returns {-1 | 0 | 1} sorting comparator value
119
+ */
120
+ const compareLocations = (a, b) => {
121
+ const isObjectA = typeof a === "object" && a !== null;
122
+ const isObjectB = typeof b === "object" && b !== null;
123
+ if (!isObjectA || !isObjectB) {
124
+ if (isObjectA) return 1;
125
+ if (isObjectB) return -1;
126
+ return 0;
127
+ }
128
+ if ("start" in a) {
129
+ if ("start" in b) {
130
+ const ap = a.start;
131
+ const bp = b.start;
132
+ if (ap.line < bp.line) return -1;
133
+ if (ap.line > bp.line) return 1;
134
+ if (
135
+ /** @type {number} */ (ap.column) < /** @type {number} */ (bp.column)
136
+ ) {
137
+ return -1;
138
+ }
139
+ if (
140
+ /** @type {number} */ (ap.column) > /** @type {number} */ (bp.column)
141
+ ) {
142
+ return 1;
143
+ }
144
+ } else {
145
+ return -1;
146
+ }
147
+ } else if ("start" in b) {
148
+ return 1;
149
+ }
150
+ if ("name" in a) {
151
+ if ("name" in b) {
152
+ if (a.name < b.name) return -1;
153
+ if (a.name > b.name) return 1;
154
+ } else {
155
+ return -1;
156
+ }
157
+ } else if ("name" in b) {
158
+ return 1;
159
+ }
160
+ if ("index" in a) {
161
+ if ("index" in b) {
162
+ if (/** @type {number} */ (a.index) < /** @type {number} */ (b.index)) {
163
+ return -1;
164
+ }
165
+ if (/** @type {number} */ (a.index) > /** @type {number} */ (b.index)) {
166
+ return 1;
167
+ }
168
+ } else {
169
+ return -1;
170
+ }
171
+ } else if ("index" in b) {
172
+ return 1;
173
+ }
174
+ return 0;
175
+ };
71
176
 
72
177
  /**
73
178
  * @param {ChunkGraph} chunkGraph the chunk graph
74
179
  * @param {Module} a module
75
180
  * @param {Module} b module
76
- * @returns {-1|0|1} compare result
181
+ * @returns {-1 | 0 | 1} compare result
77
182
  */
78
183
  const compareModulesById = (chunkGraph, a, b) =>
79
184
  compareIds(
80
185
  /** @type {ModuleId} */ (chunkGraph.getModuleId(a)),
81
186
  /** @type {ModuleId} */ (chunkGraph.getModuleId(b))
82
187
  );
83
- /** @type {ParameterizedComparator<ChunkGraph, Module>} */
84
- module.exports.compareModulesById =
85
- createCachedParameterizedComparator(compareModulesById);
86
188
 
87
189
  /**
88
190
  * @param {number} a number
89
191
  * @param {number} b number
90
- * @returns {-1|0|1} compare result
192
+ * @returns {-1 | 0 | 1} compare result
91
193
  */
92
194
  const compareNumbers = (a, b) => {
93
195
  if (typeof a !== typeof b) {
@@ -97,12 +199,11 @@ const compareNumbers = (a, b) => {
97
199
  if (a > b) return 1;
98
200
  return 0;
99
201
  };
100
- module.exports.compareNumbers = compareNumbers;
101
202
 
102
203
  /**
103
204
  * @param {string} a string
104
205
  * @param {string} b string
105
- * @returns {-1|0|1} compare result
206
+ * @returns {-1 | 0 | 1} compare result
106
207
  */
107
208
  const compareStringsNumeric = (a, b) => {
108
209
  const aLength = a.length;
@@ -169,13 +270,12 @@ const compareStringsNumeric = (a, b) => {
169
270
 
170
271
  return 0;
171
272
  };
172
- module.exports.compareStringsNumeric = compareStringsNumeric;
173
273
 
174
274
  /**
175
275
  * @param {ModuleGraph} moduleGraph the module graph
176
276
  * @param {Module} a module
177
277
  * @param {Module} b module
178
- * @returns {-1|0|1} compare result
278
+ * @returns {-1 | 0 | 1} compare result
179
279
  */
180
280
  const compareModulesByPostOrderIndexOrIdentifier = (moduleGraph, a, b) => {
181
281
  const cmp = compareNumbers(
@@ -185,17 +285,12 @@ const compareModulesByPostOrderIndexOrIdentifier = (moduleGraph, a, b) => {
185
285
  if (cmp !== 0) return cmp;
186
286
  return compareIds(a.identifier(), b.identifier());
187
287
  };
188
- /** @type {ParameterizedComparator<ModuleGraph, Module>} */
189
- module.exports.compareModulesByPostOrderIndexOrIdentifier =
190
- createCachedParameterizedComparator(
191
- compareModulesByPostOrderIndexOrIdentifier
192
- );
193
288
 
194
289
  /**
195
290
  * @param {ModuleGraph} moduleGraph the module graph
196
291
  * @param {Module} a module
197
292
  * @param {Module} b module
198
- * @returns {-1|0|1} compare result
293
+ * @returns {-1 | 0 | 1} compare result
199
294
  */
200
295
  const compareModulesByPreOrderIndexOrIdentifier = (moduleGraph, a, b) => {
201
296
  const cmp = compareNumbers(
@@ -205,17 +300,12 @@ const compareModulesByPreOrderIndexOrIdentifier = (moduleGraph, a, b) => {
205
300
  if (cmp !== 0) return cmp;
206
301
  return compareIds(a.identifier(), b.identifier());
207
302
  };
208
- /** @type {ParameterizedComparator<ModuleGraph, Module>} */
209
- module.exports.compareModulesByPreOrderIndexOrIdentifier =
210
- createCachedParameterizedComparator(
211
- compareModulesByPreOrderIndexOrIdentifier
212
- );
213
303
 
214
304
  /**
215
305
  * @param {ChunkGraph} chunkGraph the chunk graph
216
306
  * @param {Module} a module
217
307
  * @param {Module} b module
218
- * @returns {-1|0|1} compare result
308
+ * @returns {-1 | 0 | 1} compare result
219
309
  */
220
310
  const compareModulesByIdOrIdentifier = (chunkGraph, a, b) => {
221
311
  const cmp = compareIds(
@@ -225,41 +315,19 @@ const compareModulesByIdOrIdentifier = (chunkGraph, a, b) => {
225
315
  if (cmp !== 0) return cmp;
226
316
  return compareIds(a.identifier(), b.identifier());
227
317
  };
228
- /** @type {ParameterizedComparator<ChunkGraph, Module>} */
229
- module.exports.compareModulesByIdOrIdentifier =
230
- createCachedParameterizedComparator(compareModulesByIdOrIdentifier);
231
318
 
232
319
  /**
233
320
  * @param {ChunkGraph} chunkGraph the chunk graph
234
321
  * @param {Chunk} a chunk
235
322
  * @param {Chunk} b chunk
236
- * @returns {-1|0|1} compare result
323
+ * @returns {-1 | 0 | 1} compare result
237
324
  */
238
325
  const compareChunks = (chunkGraph, a, b) => chunkGraph.compareChunks(a, b);
239
- /** @type {ParameterizedComparator<ChunkGraph, Chunk>} */
240
- module.exports.compareChunks =
241
- createCachedParameterizedComparator(compareChunks);
242
-
243
- /**
244
- * @param {string|number} a first id
245
- * @param {string|number} b second id
246
- * @returns {-1|0|1} compare result
247
- */
248
- const compareIds = (a, b) => {
249
- if (typeof a !== typeof b) {
250
- return typeof a < typeof b ? -1 : 1;
251
- }
252
- if (a < b) return -1;
253
- if (a > b) return 1;
254
- return 0;
255
- };
256
-
257
- module.exports.compareIds = compareIds;
258
326
 
259
327
  /**
260
328
  * @param {string} a first string
261
329
  * @param {string} b second string
262
- * @returns {-1|0|1} compare result
330
+ * @returns {-1 | 0 | 1} compare result
263
331
  */
264
332
  const compareStrings = (a, b) => {
265
333
  if (a < b) return -1;
@@ -267,27 +335,24 @@ const compareStrings = (a, b) => {
267
335
  return 0;
268
336
  };
269
337
 
270
- module.exports.compareStrings = compareStrings;
271
-
272
338
  /**
273
339
  * @param {ChunkGroup} a first chunk group
274
340
  * @param {ChunkGroup} b second chunk group
275
- * @returns {-1|0|1} compare result
341
+ * @returns {-1 | 0 | 1} compare result
276
342
  */
277
343
  const compareChunkGroupsByIndex = (a, b) =>
278
344
  /** @type {number} */ (a.index) < /** @type {number} */ (b.index) ? -1 : 1;
279
- module.exports.compareChunkGroupsByIndex = compareChunkGroupsByIndex;
280
345
 
281
346
  /**
282
- * @template K1 {Object}
283
- * @template K2
347
+ * @template {EXPECTED_OBJECT} K1
348
+ * @template {EXPECTED_OBJECT} K2
284
349
  * @template T
285
350
  */
286
351
  class TwoKeyWeakMap {
287
352
  constructor() {
288
353
  /**
289
354
  * @private
290
- * @type {WeakMap<any, WeakMap<any, T | undefined>>}
355
+ * @type {WeakMap<K1, WeakMap<K2, T | undefined>>}
291
356
  */
292
357
  this._map = new WeakMap();
293
358
  }
@@ -321,7 +386,7 @@ class TwoKeyWeakMap {
321
386
  }
322
387
  }
323
388
 
324
- /** @type {TwoKeyWeakMap<Comparator<any>, Comparator<any>, Comparator<any>>}} */
389
+ /** @type {TwoKeyWeakMap<Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>>}} */
325
390
  const concatComparatorsCache = new TwoKeyWeakMap();
326
391
 
327
392
  /**
@@ -343,7 +408,7 @@ const concatComparators = (c1, c2, ...cRest) => {
343
408
  /**
344
409
  * @param {T} a first value
345
410
  * @param {T} b second value
346
- * @returns {-1|0|1} compare result
411
+ * @returns {-1 | 0 | 1} compare result
347
412
  */
348
413
  const result = (a, b) => {
349
414
  const res = c1(a, b);
@@ -353,14 +418,13 @@ const concatComparators = (c1, c2, ...cRest) => {
353
418
  concatComparatorsCache.set(c1, c2, result);
354
419
  return result;
355
420
  };
356
- module.exports.concatComparators = concatComparators;
357
421
 
358
422
  /**
359
423
  * @template A, B
360
424
  * @typedef {(input: A) => B | undefined | null} Selector
361
425
  */
362
426
 
363
- /** @type {TwoKeyWeakMap<Selector<any, any>, Comparator<any>, Comparator<any>>}} */
427
+ /** @type {TwoKeyWeakMap<Selector<EXPECTED_ANY, EXPECTED_ANY>, Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>>}} */
364
428
  const compareSelectCache = new TwoKeyWeakMap();
365
429
 
366
430
  /**
@@ -376,7 +440,7 @@ const compareSelect = (getter, comparator) => {
376
440
  /**
377
441
  * @param {T} a first value
378
442
  * @param {T} b second value
379
- * @returns {-1|0|1} compare result
443
+ * @returns {-1 | 0 | 1} compare result
380
444
  */
381
445
  const result = (a, b) => {
382
446
  const aValue = getter(a);
@@ -395,44 +459,10 @@ const compareSelect = (getter, comparator) => {
395
459
  compareSelectCache.set(getter, comparator, result);
396
460
  return result;
397
461
  };
398
- module.exports.compareSelect = compareSelect;
399
462
 
400
- /** @type {WeakMap<Comparator<any>, Comparator<Iterable<any>>>} */
463
+ /** @type {WeakMap<Comparator<EXPECTED_ANY>, Comparator<Iterable<EXPECTED_ANY>>>} */
401
464
  const compareIteratorsCache = new WeakMap();
402
465
 
403
- /**
404
- * @template T
405
- * @param {Comparator<T>} elementComparator comparator for elements
406
- * @returns {Comparator<Iterable<T>>} comparator for iterables of elements
407
- */
408
- const compareIterables = elementComparator => {
409
- const cacheEntry = compareIteratorsCache.get(elementComparator);
410
- if (cacheEntry !== undefined) return cacheEntry;
411
- /**
412
- * @param {Iterable<T>} a first value
413
- * @param {Iterable<T>} b second value
414
- * @returns {-1|0|1} compare result
415
- */
416
- const result = (a, b) => {
417
- const aI = a[Symbol.iterator]();
418
- const bI = b[Symbol.iterator]();
419
- while (true) {
420
- const aItem = aI.next();
421
- const bItem = bI.next();
422
- if (aItem.done) {
423
- return bItem.done ? 0 : -1;
424
- } else if (bItem.done) {
425
- return 1;
426
- }
427
- const res = elementComparator(aItem.value, bItem.value);
428
- if (res !== 0) return res;
429
- }
430
- };
431
- compareIteratorsCache.set(elementComparator, result);
432
- return result;
433
- };
434
- module.exports.compareIterables = compareIterables;
435
-
436
466
  // TODO this is no longer needed when minimum node.js version is >= 12
437
467
  // since these versions ship with a stable sort function
438
468
  /**
@@ -440,7 +470,7 @@ module.exports.compareIterables = compareIterables;
440
470
  * @param {Iterable<T>} iterable original ordered list
441
471
  * @returns {Comparator<T>} comparator
442
472
  */
443
- module.exports.keepOriginalOrder = iterable => {
473
+ const keepOriginalOrder = (iterable) => {
444
474
  /** @type {Map<T, number>} */
445
475
  const map = new Map();
446
476
  let i = 0;
@@ -458,65 +488,138 @@ module.exports.keepOriginalOrder = iterable => {
458
488
  * @param {ChunkGraph} chunkGraph the chunk graph
459
489
  * @returns {Comparator<Chunk>} comparator
460
490
  */
461
- module.exports.compareChunksNatural = chunkGraph => {
491
+ const compareChunksNatural = (chunkGraph) => {
462
492
  const cmpFn = module.exports.compareModulesById(chunkGraph);
463
493
  const cmpIterableFn = compareIterables(cmpFn);
464
494
  return concatComparators(
465
- compareSelect(
466
- chunk => /** @type {string|number} */ (chunk.name),
467
- compareIds
468
- ),
469
- compareSelect(chunk => chunk.runtime, compareRuntime),
495
+ compareSelect((chunk) => /** @type {ChunkName} */ (chunk.name), compareIds),
496
+ compareSelect((chunk) => chunk.runtime, compareRuntime),
470
497
  compareSelect(
471
498
  /**
472
499
  * @param {Chunk} chunk a chunk
473
500
  * @returns {Iterable<Module>} modules
474
501
  */
475
- chunk => chunkGraph.getOrderedChunkModulesIterable(chunk, cmpFn),
502
+ (chunk) => chunkGraph.getOrderedChunkModulesIterable(chunk, cmpFn),
476
503
  cmpIterableFn
477
504
  )
478
505
  );
479
506
  };
480
507
 
481
508
  /**
482
- * Compare two locations
483
- * @param {DependencyLocation} a A location node
484
- * @param {DependencyLocation} b A location node
485
- * @returns {-1|0|1} sorting comparator value
509
+ * For HarmonyImportSideEffectDependency and HarmonyImportSpecifierDependency, we should prioritize import order to match the behavior of running modules directly in a JS engine without a bundler.
510
+ * For other types like ConstDependency, we can instead prioritize usage order.
511
+ * https://github.com/webpack/webpack/pull/19686
512
+ * @param {Dependency[]} dependencies dependencies
513
+ * @param {WeakMap<Dependency, DependencySourceOrder>} dependencySourceOrderMap dependency source order map
514
+ * @param {((dep: Dependency, index: number) => void)=} onDependencyReSort optional callback to set index for each dependency
515
+ * @returns {void}
486
516
  */
487
- module.exports.compareLocations = (a, b) => {
488
- const isObjectA = typeof a === "object" && a !== null;
489
- const isObjectB = typeof b === "object" && b !== null;
490
- if (!isObjectA || !isObjectB) {
491
- if (isObjectA) return 1;
492
- if (isObjectB) return -1;
493
- return 0;
517
+ const sortWithSourceOrder = (
518
+ dependencies,
519
+ dependencySourceOrderMap,
520
+ onDependencyReSort
521
+ ) => {
522
+ /** @type {{dep: Dependency, main: number, sub: number}[]} */
523
+ const withSourceOrder = [];
524
+ /** @type {number[]} */
525
+ const positions = [];
526
+
527
+ for (let i = 0; i < dependencies.length; i++) {
528
+ const dep = dependencies[i];
529
+ const cached = dependencySourceOrderMap.get(dep);
530
+
531
+ if (cached) {
532
+ positions.push(i);
533
+ withSourceOrder.push({
534
+ dep,
535
+ main: cached.main,
536
+ sub: cached.sub
537
+ });
538
+ } else {
539
+ const sourceOrder = /** @type {number | undefined} */ (
540
+ /** @type {ModuleDependency} */ (dep).sourceOrder
541
+ );
542
+ if (typeof sourceOrder === "number") {
543
+ positions.push(i);
544
+ withSourceOrder.push({
545
+ dep,
546
+ main: sourceOrder,
547
+ sub: 0
548
+ });
549
+ }
550
+ }
551
+ }
552
+
553
+ if (withSourceOrder.length <= 1) {
554
+ return;
555
+ }
556
+
557
+ withSourceOrder.sort((a, b) => {
558
+ if (a.main !== b.main) {
559
+ return compareNumbers(a.main, b.main);
560
+ }
561
+ return compareNumbers(a.sub, b.sub);
562
+ });
563
+
564
+ // Second pass: place sorted deps back to original positions
565
+ for (let i = 0; i < positions.length; i++) {
566
+ const depIndex = positions[i];
567
+ dependencies[depIndex] = withSourceOrder[i].dep;
568
+ if (onDependencyReSort) {
569
+ onDependencyReSort(dependencies[depIndex], depIndex);
570
+ }
494
571
  }
495
- if ("start" in a) {
496
- if ("start" in b) {
497
- const ap = a.start;
498
- const bp = b.start;
499
- if (ap.line < bp.line) return -1;
500
- if (ap.line > bp.line) 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;
505
- } else return -1;
506
- } else if ("start" in b) return 1;
507
- if ("name" in a) {
508
- if ("name" in b) {
509
- if (a.name < b.name) return -1;
510
- if (a.name > b.name) return 1;
511
- } else return -1;
512
- } else if ("name" in b) return 1;
513
- if ("index" in a) {
514
- if ("index" in b) {
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;
519
- } else return -1;
520
- } else if ("index" in b) return 1;
521
- return 0;
522
572
  };
573
+
574
+ module.exports.compareChunkGroupsByIndex = compareChunkGroupsByIndex;
575
+ /** @type {ParameterizedComparator<ChunkGraph, Chunk>} */
576
+ module.exports.compareChunks =
577
+ createCachedParameterizedComparator(compareChunks);
578
+ /**
579
+ * @param {Chunk} a chunk
580
+ * @param {Chunk} b chunk
581
+ * @returns {-1 | 0 | 1} compare result
582
+ */
583
+ module.exports.compareChunksById = (a, b) =>
584
+ compareIds(/** @type {ChunkId} */ (a.id), /** @type {ChunkId} */ (b.id));
585
+ module.exports.compareChunksNatural = compareChunksNatural;
586
+
587
+ module.exports.compareIds = compareIds;
588
+
589
+ module.exports.compareIterables = compareIterables;
590
+
591
+ module.exports.compareLocations = compareLocations;
592
+
593
+ /** @type {ParameterizedComparator<ChunkGraph, Module>} */
594
+ module.exports.compareModulesById =
595
+ createCachedParameterizedComparator(compareModulesById);
596
+ /** @type {ParameterizedComparator<ChunkGraph, Module>} */
597
+ module.exports.compareModulesByIdOrIdentifier =
598
+ createCachedParameterizedComparator(compareModulesByIdOrIdentifier);
599
+ /**
600
+ * @param {Module} a module
601
+ * @param {Module} b module
602
+ * @returns {-1 | 0 | 1} compare result
603
+ */
604
+ module.exports.compareModulesByIdentifier = (a, b) =>
605
+ compareIds(a.identifier(), b.identifier());
606
+ /** @type {ParameterizedComparator<ModuleGraph, Module>} */
607
+ module.exports.compareModulesByPostOrderIndexOrIdentifier =
608
+ createCachedParameterizedComparator(
609
+ compareModulesByPostOrderIndexOrIdentifier
610
+ );
611
+ /** @type {ParameterizedComparator<ModuleGraph, Module>} */
612
+ module.exports.compareModulesByPreOrderIndexOrIdentifier =
613
+ createCachedParameterizedComparator(
614
+ compareModulesByPreOrderIndexOrIdentifier
615
+ );
616
+
617
+ module.exports.compareNumbers = compareNumbers;
618
+ module.exports.compareSelect = compareSelect;
619
+ module.exports.compareStrings = compareStrings;
620
+ module.exports.compareStringsNumeric = compareStringsNumeric;
621
+
622
+ module.exports.concatComparators = concatComparators;
623
+
624
+ module.exports.keepOriginalOrder = keepOriginalOrder;
625
+ module.exports.sortWithSourceOrder = sortWithSourceOrder;