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
@@ -70,9 +70,11 @@ const getName = (a, b, usedNames) => {
70
70
  return a;
71
71
  };
72
72
 
73
+ /** @typedef {Record<string, number>} Sizes */
74
+
73
75
  /**
74
- * @param {Record<string, number>} total total size
75
- * @param {Record<string, number>} size single size
76
+ * @param {Sizes} total total size
77
+ * @param {Sizes} size single size
76
78
  * @returns {void}
77
79
  */
78
80
  const addSizeTo = (total, size) => {
@@ -82,8 +84,8 @@ const addSizeTo = (total, size) => {
82
84
  };
83
85
 
84
86
  /**
85
- * @param {Record<string, number>} total total size
86
- * @param {Record<string, number>} size single size
87
+ * @param {Sizes} total total size
88
+ * @param {Sizes} size single size
87
89
  * @returns {void}
88
90
  */
89
91
  const subtractSizeFrom = (total, size) => {
@@ -95,9 +97,9 @@ const subtractSizeFrom = (total, size) => {
95
97
  /**
96
98
  * @template T
97
99
  * @param {Iterable<Node<T>>} nodes some nodes
98
- * @returns {Record<string, number>} total size
100
+ * @returns {Sizes} total size
99
101
  */
100
- const sumSize = nodes => {
102
+ const sumSize = (nodes) => {
101
103
  const sum = Object.create(null);
102
104
  for (const node of nodes) {
103
105
  addSizeTo(sum, node.size);
@@ -106,8 +108,8 @@ const sumSize = nodes => {
106
108
  };
107
109
 
108
110
  /**
109
- * @param {Record<string, number>} size size
110
- * @param {Record<string, number>} maxSize minimum size
111
+ * @param {Sizes} size size
112
+ * @param {Sizes} maxSize minimum size
111
113
  * @returns {boolean} true, when size is too big
112
114
  */
113
115
  const isTooBig = (size, maxSize) => {
@@ -121,8 +123,8 @@ const isTooBig = (size, maxSize) => {
121
123
  };
122
124
 
123
125
  /**
124
- * @param {Record<string, number>} size size
125
- * @param {Record<string, number>} minSize minimum size
126
+ * @param {Sizes} size size
127
+ * @param {Sizes} minSize minimum size
126
128
  * @returns {boolean} true, when size is too small
127
129
  */
128
130
  const isTooSmall = (size, minSize) => {
@@ -135,12 +137,15 @@ const isTooSmall = (size, minSize) => {
135
137
  return false;
136
138
  };
137
139
 
140
+ /** @typedef {Set<string>} Types */
141
+
138
142
  /**
139
- * @param {Record<string, number>} size size
140
- * @param {Record<string, number>} minSize minimum size
141
- * @returns {Set<string>} set of types that are too small
143
+ * @param {Sizes} size size
144
+ * @param {Sizes} minSize minimum size
145
+ * @returns {Types} set of types that are too small
142
146
  */
143
147
  const getTooSmallTypes = (size, minSize) => {
148
+ /** @typedef {Types} */
144
149
  const types = new Set();
145
150
  for (const key of Object.keys(size)) {
146
151
  const s = size[key];
@@ -152,22 +157,22 @@ const getTooSmallTypes = (size, minSize) => {
152
157
  };
153
158
 
154
159
  /**
155
- * @template T
156
- * @param {TODO} size size
157
- * @param {Set<string>} types types
160
+ * @template {object} T
161
+ * @param {T} size size
162
+ * @param {Types} types types
158
163
  * @returns {number} number of matching size types
159
164
  */
160
165
  const getNumberOfMatchingSizeTypes = (size, types) => {
161
166
  let i = 0;
162
167
  for (const key of Object.keys(size)) {
163
- if (size[key] !== 0 && types.has(key)) i++;
168
+ if (size[/** @type {keyof T} */ (key)] !== 0 && types.has(key)) i++;
164
169
  }
165
170
  return i;
166
171
  };
167
172
 
168
173
  /**
169
- * @param {Record<string, number>} size size
170
- * @param {Set<string>} types types
174
+ * @param {Sizes} size size
175
+ * @param {Types} types types
171
176
  * @returns {number} selective size sum
172
177
  */
173
178
  const selectiveSizeSum = (size, types) => {
@@ -185,7 +190,7 @@ class Node {
185
190
  /**
186
191
  * @param {T} item item
187
192
  * @param {string} key key
188
- * @param {Record<string, number>} size size
193
+ * @param {Sizes} size size
189
194
  */
190
195
  constructor(item, key, size) {
191
196
  this.item = item;
@@ -194,14 +199,16 @@ class Node {
194
199
  }
195
200
  }
196
201
 
202
+ /** @typedef {number[]} Similarities */
203
+
197
204
  /**
198
205
  * @template T
199
206
  */
200
207
  class Group {
201
208
  /**
202
209
  * @param {Node<T>[]} nodes nodes
203
- * @param {number[] | null} similarities similarities between the nodes (length = nodes.length - 1)
204
- * @param {Record<string, number>=} size size of the group
210
+ * @param {Similarities | null} similarities similarities between the nodes (length = nodes.length - 1)
211
+ * @param {Sizes=} size size of the group
205
212
  */
206
213
  constructor(nodes, similarities, size) {
207
214
  this.nodes = nodes;
@@ -212,7 +219,7 @@ class Group {
212
219
  }
213
220
 
214
221
  /**
215
- * @param {function(Node<T>): boolean} filter filter function
222
+ * @param {(node: Node<T>) => boolean} filter filter function
216
223
  * @returns {Node<T>[] | undefined} removed nodes
217
224
  */
218
225
  popNodes(filter) {
@@ -228,7 +235,7 @@ class Group {
228
235
  if (newNodes.length > 0) {
229
236
  newSimilarities.push(
230
237
  lastNode === this.nodes[i - 1]
231
- ? /** @type {number[]} */ (this.similarities)[i - 1]
238
+ ? /** @type {Similarities} */ (this.similarities)[i - 1]
232
239
  : similarity(/** @type {Node<T>} */ (lastNode).key, node.key)
233
240
  );
234
241
  }
@@ -247,11 +254,11 @@ class Group {
247
254
  /**
248
255
  * @template T
249
256
  * @param {Iterable<Node<T>>} nodes nodes
250
- * @returns {number[]} similarities
257
+ * @returns {Similarities} similarities
251
258
  */
252
- const getSimilarities = nodes => {
259
+ const getSimilarities = (nodes) => {
253
260
  // calculate similarities between lexically adjacent nodes
254
- /** @type {number[]} */
261
+ /** @type {Similarities} */
255
262
  const similarities = [];
256
263
  let last;
257
264
  for (const node of nodes) {
@@ -268,17 +275,17 @@ const getSimilarities = nodes => {
268
275
  * @typedef {object} GroupedItems<T>
269
276
  * @property {string} key
270
277
  * @property {T[]} items
271
- * @property {Record<string, number>} size
278
+ * @property {Sizes} size
272
279
  */
273
280
 
274
281
  /**
275
282
  * @template T
276
283
  * @typedef {object} Options
277
- * @property {Record<string, number>} maxSize maximum size of a group
278
- * @property {Record<string, number>} minSize minimum size of a group (preferred over maximum size)
284
+ * @property {Sizes} maxSize maximum size of a group
285
+ * @property {Sizes} minSize minimum size of a group (preferred over maximum size)
279
286
  * @property {Iterable<T>} items a list of items
280
- * @property {function(T): Record<string, number>} getSize function to get size of an item
281
- * @property {function(T): string} getKey function to get the key of an item
287
+ * @property {(item: T) => Sizes} getSize function to get size of an item
288
+ * @property {(item: T) => string} getKey function to get the key of an item
282
289
  */
283
290
 
284
291
  /**
@@ -292,7 +299,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
292
299
 
293
300
  const nodes = Array.from(
294
301
  items,
295
- item => new Node(item, getKey(item), getSize(item))
302
+ (item) => new Node(item, getKey(item), getSize(item))
296
303
  );
297
304
 
298
305
  /** @type {Node<T>[]} */
@@ -320,7 +327,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
320
327
 
321
328
  /**
322
329
  * @param {Group<T>} group group
323
- * @param {Record<string, number>} consideredSize size of the group to consider
330
+ * @param {Sizes} consideredSize size of the group to consider
324
331
  * @returns {boolean} true, if the group was modified
325
332
  */
326
333
  const removeProblematicNodes = (group, consideredSize = group.size) => {
@@ -329,12 +336,12 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
329
336
  // We hit an edge case where the working set is already smaller than minSize
330
337
  // We merge problematic nodes with the smallest result node to keep minSize intact
331
338
  const problemNodes = group.popNodes(
332
- n => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
339
+ (n) => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
333
340
  );
334
341
  if (problemNodes === undefined) return false;
335
342
  // Only merge it with result nodes that have the problematic size type
336
343
  const possibleResultGroups = result.filter(
337
- n => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
344
+ (n) => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
338
345
  );
339
346
  if (possibleResultGroups.length > 0) {
340
347
  const bestGroup = possibleResultGroups.reduce((min, group) => {
@@ -343,13 +350,15 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
343
350
  group,
344
351
  problemTypes
345
352
  );
346
- if (minMatches !== groupMatches)
353
+ if (minMatches !== groupMatches) {
347
354
  return minMatches < groupMatches ? group : min;
355
+ }
348
356
  if (
349
357
  selectiveSizeSum(min.size, problemTypes) >
350
358
  selectiveSizeSum(group.size, problemTypes)
351
- )
359
+ ) {
352
360
  return group;
361
+ }
353
362
  return min;
354
363
  });
355
364
  for (const node of problemNodes) bestGroup.nodes.push(node);
@@ -453,9 +462,9 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
453
462
  // rightSize ^^^^^^^^^^^^^^^
454
463
 
455
464
  while (pos <= right + 1) {
456
- const similarity = /** @type {number[]} */ (group.similarities)[
457
- pos - 1
458
- ];
465
+ const similarity =
466
+ /** @type {Similarities} */
467
+ (group.similarities)[pos - 1];
459
468
  if (
460
469
  similarity < bestSimilarity &&
461
470
  !isTooSmall(leftSize, minSize) &&
@@ -482,22 +491,22 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
482
491
  // create two new groups for left and right area
483
492
  // and queue them up
484
493
  const rightNodes = [group.nodes[right + 1]];
485
- /** @type {number[]} */
494
+ /** @type {Similarities} */
486
495
  const rightSimilarities = [];
487
496
  for (let i = right + 2; i < group.nodes.length; i++) {
488
497
  rightSimilarities.push(
489
- /** @type {number[]} */ (group.similarities)[i - 1]
498
+ /** @type {Similarities} */ (group.similarities)[i - 1]
490
499
  );
491
500
  rightNodes.push(group.nodes[i]);
492
501
  }
493
502
  queue.push(new Group(rightNodes, rightSimilarities));
494
503
 
495
504
  const leftNodes = [group.nodes[0]];
496
- /** @type {number[]} */
505
+ /** @type {Similarities} */
497
506
  const leftSimilarities = [];
498
507
  for (let i = 1; i < left; i++) {
499
508
  leftSimilarities.push(
500
- /** @type {number[]} */ (group.similarities)[i - 1]
509
+ /** @type {Similarities} */ (group.similarities)[i - 1]
501
510
  );
502
511
  leftNodes.push(group.nodes[i]);
503
512
  }
@@ -529,11 +538,11 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
529
538
 
530
539
  // return the results
531
540
  return result.map(
532
- group =>
541
+ (group) =>
533
542
  /** @type {GroupedItems<T>} */
534
543
  ({
535
544
  key: group.key,
536
- items: group.nodes.map(node => node.item),
545
+ items: group.nodes.map((node) => node.item),
537
546
  size: group.size
538
547
  })
539
548
  );
@@ -0,0 +1,319 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const path = require("path");
9
+ const urlUtils = require("url");
10
+ const { isAbsolute, join } = require("./fs");
11
+
12
+ /** @typedef {import("./fs").InputFileSystem} InputFileSystem */
13
+
14
+ /**
15
+ * @typedef {(input: string | Buffer<ArrayBufferLike>, resourcePath: string, fs: InputFileSystem) => Promise<{source: string | Buffer<ArrayBufferLike>, sourceMap: string | RawSourceMap | undefined, fileDependencies: string[]}>} SourceMapExtractorFunction
16
+ */
17
+
18
+ /** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
19
+
20
+ /**
21
+ * @typedef {(resourcePath: string) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
22
+ */
23
+
24
+ /**
25
+ * @typedef {object} SourceMappingURL
26
+ * @property {string} sourceMappingURL
27
+ * @property {string} replacementString
28
+ */
29
+
30
+ // Matches only the last occurrence of sourceMappingURL
31
+ const innerRegex = /\s*[#@]\s*sourceMappingURL\s*=\s*([^\s'"]*)\s*/;
32
+
33
+ const validProtocolPattern = /^[a-z][a-z0-9+.-]*:/i;
34
+
35
+ const sourceMappingURLRegex = new RegExp(
36
+ "(?:" +
37
+ "/\\*" +
38
+ "(?:\\s*\r?\n(?://)?)?" +
39
+ `(?:${innerRegex.source})` +
40
+ "\\s*" +
41
+ "\\*/" +
42
+ "|" +
43
+ `//(?:${innerRegex.source})` +
44
+ ")" +
45
+ "\\s*"
46
+ );
47
+
48
+ /**
49
+ * Extract source mapping URL from code comments
50
+ * @param {string} code source code content
51
+ * @returns {SourceMappingURL} source mapping information
52
+ */
53
+ function getSourceMappingURL(code) {
54
+ const lines = code.split(/^/m);
55
+ let match;
56
+
57
+ for (let i = lines.length - 1; i >= 0; i--) {
58
+ match = lines[i].match(sourceMappingURLRegex);
59
+ if (match) {
60
+ break;
61
+ }
62
+ }
63
+
64
+ const sourceMappingURL = match ? match[1] || match[2] || "" : "";
65
+
66
+ return {
67
+ sourceMappingURL: sourceMappingURL
68
+ ? decodeURI(sourceMappingURL)
69
+ : sourceMappingURL,
70
+ replacementString: match ? match[0] : ""
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Get absolute path for source file
76
+ * @param {string} context context directory
77
+ * @param {string} request file request
78
+ * @param {string} sourceRoot source root directory
79
+ * @returns {string} absolute path
80
+ */
81
+ function getAbsolutePath(context, request, sourceRoot) {
82
+ if (sourceRoot) {
83
+ if (isAbsolute(sourceRoot)) {
84
+ return join(undefined, sourceRoot, request);
85
+ }
86
+
87
+ return join(undefined, join(undefined, context, sourceRoot), request);
88
+ }
89
+
90
+ return join(undefined, context, request);
91
+ }
92
+
93
+ /**
94
+ * Check if value is a URL
95
+ * @param {string} value string to check
96
+ * @returns {boolean} true if value is a URL
97
+ */
98
+ function isURL(value) {
99
+ return validProtocolPattern.test(value) && !path.win32.isAbsolute(value);
100
+ }
101
+
102
+ /**
103
+ * Fetch from multiple possible file paths
104
+ * @param {ReadResource} readResource read resource function
105
+ * @param {string[]} possibleRequests array of possible file paths
106
+ * @param {string} errorsAccumulator accumulated error messages
107
+ * @returns {Promise<{path: string, data?: string}>} source content promise
108
+ */
109
+ async function fetchPathsFromURL(
110
+ readResource,
111
+ possibleRequests,
112
+ errorsAccumulator = ""
113
+ ) {
114
+ let result;
115
+
116
+ try {
117
+ result = await readResource(possibleRequests[0]);
118
+ } catch (error) {
119
+ errorsAccumulator += `${/** @type {Error} */ (error).message}\n\n`;
120
+
121
+ const [, ...tailPossibleRequests] = possibleRequests;
122
+
123
+ if (tailPossibleRequests.length === 0) {
124
+ /** @type {Error} */ (error).message = errorsAccumulator;
125
+
126
+ throw error;
127
+ }
128
+
129
+ return fetchPathsFromURL(
130
+ readResource,
131
+ tailPossibleRequests,
132
+ errorsAccumulator
133
+ );
134
+ }
135
+
136
+ return {
137
+ path: possibleRequests[0],
138
+ data: result.toString("utf8")
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Fetch source content from URL
144
+ * @param {ReadResource} readResource The read resource function
145
+ * @param {string} context context directory
146
+ * @param {string} url source URL
147
+ * @param {string=} sourceRoot source root directory
148
+ * @param {boolean=} skipReading whether to skip reading file content
149
+ * @returns {Promise<{sourceURL: string, sourceContent?: string | Buffer<ArrayBufferLike>}>} source content promise
150
+ */
151
+ async function fetchFromURL(
152
+ readResource,
153
+ context,
154
+ url,
155
+ sourceRoot,
156
+ skipReading = false
157
+ ) {
158
+ // 1. It's an absolute url and it is not `windows` path like `C:\dir\file`
159
+ if (isURL(url)) {
160
+ // eslint-disable-next-line n/no-deprecated-api
161
+ const { protocol } = urlUtils.parse(url);
162
+ if (protocol === "data:") {
163
+ const sourceContent = skipReading ? "" : await readResource(url);
164
+
165
+ return { sourceURL: "", sourceContent };
166
+ }
167
+
168
+ if (protocol === "file:") {
169
+ const pathFromURL = urlUtils.fileURLToPath(url);
170
+ const sourceURL = path.normalize(pathFromURL);
171
+ const sourceContent = skipReading ? "" : await readResource(sourceURL);
172
+
173
+ return { sourceURL, sourceContent };
174
+ }
175
+
176
+ const sourceContent = skipReading ? "" : await readResource(url);
177
+ return { sourceURL: url, sourceContent };
178
+ }
179
+
180
+ // 3. Absolute path
181
+ if (isAbsolute(url)) {
182
+ let sourceURL = path.normalize(url);
183
+
184
+ let sourceContent;
185
+
186
+ if (!skipReading) {
187
+ const possibleRequests = [sourceURL];
188
+
189
+ if (url.startsWith("/")) {
190
+ possibleRequests.push(
191
+ getAbsolutePath(context, sourceURL.slice(1), sourceRoot || "")
192
+ );
193
+ }
194
+
195
+ const result = await fetchPathsFromURL(readResource, possibleRequests);
196
+
197
+ sourceURL = result.path;
198
+ sourceContent = result.data;
199
+ }
200
+
201
+ return { sourceURL, sourceContent };
202
+ }
203
+
204
+ // 4. Relative path
205
+ const sourceURL = getAbsolutePath(context, url, sourceRoot || "");
206
+ let sourceContent;
207
+
208
+ if (!skipReading) {
209
+ sourceContent = await readResource(sourceURL);
210
+ }
211
+
212
+ return { sourceURL, sourceContent };
213
+ }
214
+
215
+ /**
216
+ * Extract source map from code content
217
+ * @param {string | Buffer<ArrayBufferLike>} stringOrBuffer The input code content as string or buffer
218
+ * @param {string} resourcePath The path to the resource file
219
+ * @param {ReadResource} readResource The read resource function
220
+ * @returns {Promise<{source: string | Buffer<ArrayBufferLike>, sourceMap: string | RawSourceMap | undefined}>} Promise resolving to extracted source map information
221
+ */
222
+ async function extractSourceMap(stringOrBuffer, resourcePath, readResource) {
223
+ const input =
224
+ typeof stringOrBuffer === "string"
225
+ ? stringOrBuffer
226
+ : stringOrBuffer.toString("utf8");
227
+ const inputSourceMap = undefined;
228
+ const output = {
229
+ source: stringOrBuffer,
230
+ sourceMap: inputSourceMap
231
+ };
232
+ const { sourceMappingURL, replacementString } = getSourceMappingURL(input);
233
+
234
+ if (!sourceMappingURL) {
235
+ return output;
236
+ }
237
+
238
+ const baseContext = path.dirname(resourcePath);
239
+
240
+ const { sourceURL, sourceContent } = await fetchFromURL(
241
+ readResource,
242
+ baseContext,
243
+ sourceMappingURL
244
+ );
245
+
246
+ if (!sourceContent) {
247
+ return output;
248
+ }
249
+
250
+ /** @type {RawSourceMap} */
251
+ const map = JSON.parse(
252
+ sourceContent.toString("utf8").replace(/^\)\]\}'/, "")
253
+ );
254
+
255
+ const context = sourceURL ? path.dirname(sourceURL) : baseContext;
256
+
257
+ const resolvedSources = await Promise.all(
258
+ map.sources.map(
259
+ async (/** @type {string} */ source, /** @type {number} */ i) => {
260
+ const originalSourceContent =
261
+ map.sourcesContent &&
262
+ typeof map.sourcesContent[i] !== "undefined" &&
263
+ map.sourcesContent[i] !== null
264
+ ? map.sourcesContent[i]
265
+ : undefined;
266
+ const skipReading = typeof originalSourceContent !== "undefined";
267
+ // We do not skipReading here, because we need absolute paths in sources.
268
+ // This is necessary so that for sourceMaps with the same file structure in sources, name collisions do not occur.
269
+ // https://github.com/webpack-contrib/source-map-loader/issues/51
270
+ let { sourceURL, sourceContent } = await fetchFromURL(
271
+ readResource,
272
+ context,
273
+ source,
274
+ map.sourceRoot,
275
+ skipReading
276
+ );
277
+
278
+ if (skipReading) {
279
+ sourceContent = originalSourceContent;
280
+ }
281
+
282
+ // Return original value of `source` when error happens
283
+ return { sourceURL, sourceContent };
284
+ }
285
+ )
286
+ );
287
+
288
+ /** @type {RawSourceMap} */
289
+ const newMap = { ...map };
290
+
291
+ newMap.sources = [];
292
+ newMap.sourcesContent = [];
293
+
294
+ delete newMap.sourceRoot;
295
+
296
+ for (const source of resolvedSources) {
297
+ const { sourceURL, sourceContent } = source;
298
+
299
+ newMap.sources.push(sourceURL || "");
300
+ newMap.sourcesContent.push(
301
+ sourceContent ? sourceContent.toString("utf8") : ""
302
+ );
303
+ }
304
+
305
+ const sourcesContentIsEmpty =
306
+ newMap.sourcesContent.filter(Boolean).length === 0;
307
+
308
+ if (sourcesContentIsEmpty) {
309
+ delete newMap.sourcesContent;
310
+ }
311
+
312
+ return {
313
+ source: input.replace(replacementString, ""),
314
+ sourceMap: /** @type {RawSourceMap} */ (newMap)
315
+ };
316
+ }
317
+
318
+ module.exports = extractSourceMap;
319
+ module.exports.getSourceMappingURL = getSourceMappingURL;
@@ -14,5 +14,5 @@ module.exports = function extractUrlAndGlobal(urlAndGlobal) {
14
14
  if (index <= 0 || index === urlAndGlobal.length - 1) {
15
15
  throw new Error(`Invalid request "${urlAndGlobal}"`);
16
16
  }
17
- return [urlAndGlobal.substring(index + 1), urlAndGlobal.substring(0, index)];
17
+ return [urlAndGlobal.slice(index + 1), urlAndGlobal.slice(0, index)];
18
18
  };