@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -11,13 +11,16 @@
11
11
 
12
12
  class SelfModuleFactory {
13
13
  /**
14
+ * Creates an instance of SelfModuleFactory.
14
15
  * @param {ModuleGraph} moduleGraph module graph
15
16
  */
16
17
  constructor(moduleGraph) {
18
+ /** @type {ModuleGraph} */
17
19
  this.moduleGraph = moduleGraph;
18
20
  }
19
21
 
20
22
  /**
23
+ * Processes the provided data.
21
24
  * @param {ModuleFactoryCreateData} data data object
22
25
  * @param {ModuleFactoryCallback} callback callback
23
26
  * @returns {void}
@@ -14,6 +14,7 @@ const PLUGIN_NAME = "SourceMapDevToolModuleOptionsPlugin";
14
14
 
15
15
  class SourceMapDevToolModuleOptionsPlugin {
16
16
  /**
17
+ * Creates an instance of SourceMapDevToolModuleOptionsPlugin.
17
18
  * @param {SourceMapDevToolPluginOptions=} options options
18
19
  */
19
20
  constructor(options = {}) {
@@ -22,6 +23,7 @@ class SourceMapDevToolModuleOptionsPlugin {
22
23
  }
23
24
 
24
25
  /**
26
+ * Applies the plugin by registering its hooks on the compiler.
25
27
  * @param {Compilation} compilation the compiler instance
26
28
  * @returns {void}
27
29
  */
@@ -11,6 +11,7 @@ const Compilation = require("./Compilation");
11
11
  const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
12
12
  const ProgressPlugin = require("./ProgressPlugin");
13
13
  const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
14
+ const { getPresentKinds } = require("./TemplatedPathPlugin");
14
15
  const createHash = require("./util/createHash");
15
16
  const { dirname, relative } = require("./util/fs");
16
17
  const generateDebugId = require("./util/generateDebugId");
@@ -30,22 +31,22 @@ const { makePathsAbsolute } = require("./util/identifier");
30
31
  /** @typedef {import("./Compiler")} Compiler */
31
32
  /** @typedef {import("./Module")} Module */
32
33
  /** @typedef {import("./NormalModule").RawSourceMap} RawSourceMap */
33
- /** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
34
+ /** @typedef {import("./TemplatedPathPlugin").TemplatePath} SourceMappingURLComment */
34
35
  /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
35
36
 
36
37
  /**
38
+ * Defines the source map task type used by this module.
37
39
  * @typedef {object} SourceMapTask
38
- * @property {Source} asset
39
40
  * @property {AssetInfo} assetInfo
40
41
  * @property {(string | Module)[]} modules
41
42
  * @property {string} source
42
43
  * @property {string} file
43
44
  * @property {RawSourceMap} sourceMap
45
+ * @property {Source} mapSource the Source instance whose `sourceAndMap` we called (the current asset or, when its map was already stripped, the pinned original from `originalSources`) — what `clearCache` should target
44
46
  * @property {ItemCacheFacade} cacheItem cache item
45
47
  */
46
48
 
47
49
  const METACHARACTERS_REGEXP = /[-[\]\\/{}()*+?.^$|]/g;
48
- const CONTENT_HASH_DETECT_REGEXP = /\[contenthash(?::\w+)?\]/;
49
50
  const CSS_AND_JS_MODULE_EXTENSIONS_REGEXP = /\.((c|m)?js|css)($|\?)/i;
50
51
  const CSS_EXTENSION_DETECT_REGEXP = /\.css(?:$|\?)/i;
51
52
  const MAP_URL_COMMENT_REGEXP = /\[map\]/g;
@@ -69,6 +70,93 @@ const resetRegexpState = (regexp) => {
69
70
  */
70
71
  const quoteMeta = (str) => str.replace(METACHARACTERS_REGEXP, "\\$&");
71
72
 
73
+ /**
74
+ * Compilation-scoped registry of original asset sources for multi-plugin
75
+ * cooperation. The first SourceMapDevToolPlugin instance to see a file pins a
76
+ * reference to the asset's still-unwrapped {@link Source} object; later
77
+ * instances whose `asset.source.sourceAndMap()` would now return `null` (the
78
+ * earlier instance replaced the asset with a `RawSource`) can re-extract the
79
+ * map from this pinned reference. We keep the registry on a module-scoped
80
+ * `WeakMap` so the entries are reclaimed automatically when the compilation
81
+ * itself becomes unreachable; we never store anything on the compilation
82
+ * object directly.
83
+ *
84
+ * Stashing the `Source` object itself rather than an extracted map keeps the
85
+ * fast path free of cloning and source-map serialization work — the
86
+ * extraction only happens if a subsequent plugin actually needs the map.
87
+ * @type {WeakMap<Compilation, Map<string, Source>>}
88
+ */
89
+ const originalSourceRegistry = new WeakMap();
90
+
91
+ /**
92
+ * Returns (creating if necessary) the per-compilation registry of original
93
+ * asset {@link Source} objects.
94
+ * @param {Compilation} compilation compilation
95
+ * @returns {Map<string, Source>} registry
96
+ */
97
+ const getOriginalSourceRegistry = (compilation) => {
98
+ let registry = originalSourceRegistry.get(compilation);
99
+ if (registry === undefined) {
100
+ registry = new Map();
101
+ originalSourceRegistry.set(compilation, registry);
102
+ }
103
+ return registry;
104
+ };
105
+
106
+ /**
107
+ * Extracts source and source map from a Source object, falling back to a
108
+ * registered original source for assets that another SourceMapDevToolPlugin
109
+ * instance has already wrapped (whose internal map is now `null`).
110
+ *
111
+ * The returned source is read from the asset as it currently stands — that way
112
+ * any `sourceMappingURL` comments appended by earlier plugin instances survive
113
+ * — while the map is taken from the pinned original Source when the current
114
+ * one no longer carries it. `mapSource` identifies which Source instance was
115
+ * actually queried for the map (the current asset, or the pinned original);
116
+ * that's the one whose internal caches the caller should release.
117
+ * @param {string} file file name
118
+ * @param {Source} asset source object as currently held by the compilation
119
+ * @param {MapOptions} options map extraction options
120
+ * @param {Map<string, Source>} registry compilation-scoped original-source registry
121
+ * @returns {{ source: string, sourceMap: RawSourceMap, mapSource: Source } | undefined} extracted pair or `undefined` when no map is recoverable
122
+ */
123
+ const extractSourceAndMap = (file, asset, options, registry) => {
124
+ /** @type {string | Buffer} */
125
+ let source;
126
+ /** @type {null | RawSourceMap} */
127
+ let sourceMap;
128
+ if (asset.sourceAndMap) {
129
+ const sourceAndMap = asset.sourceAndMap(options);
130
+ source = sourceAndMap.source;
131
+ sourceMap = sourceAndMap.map;
132
+ } else {
133
+ source = asset.source();
134
+ sourceMap = asset.map(options);
135
+ }
136
+ // Bail before touching the registry if we can't return a usable string
137
+ // source — pinning a non-string-producing asset would only waste the slot.
138
+ if (typeof source !== "string") return;
139
+ if (sourceMap) {
140
+ // The current asset still owns the original map — pin a reference so
141
+ // that a later plugin instance (which will see a rewrapped asset
142
+ // without a map) can recover it on demand.
143
+ if (!registry.has(file)) registry.set(file, asset);
144
+ return { source, sourceMap, mapSource: asset };
145
+ }
146
+ // The current asset (typically a `RawSource` left by an earlier
147
+ // SourceMapDevToolPlugin instance) has no internal map. Re-extract
148
+ // the map from the original Source we pinned earlier. We keep using
149
+ // `source` from the current asset so that any prior wrappers (e.g.
150
+ // appended sourceMappingURL comments) are preserved.
151
+ const original = registry.get(file);
152
+ if (!original) return;
153
+ sourceMap = original.sourceAndMap
154
+ ? original.sourceAndMap(options).map
155
+ : original.map(options);
156
+ if (!sourceMap) return;
157
+ return { source, sourceMap, mapSource: original };
158
+ };
159
+
72
160
  /**
73
161
  * Creating {@link SourceMapTask} for given file
74
162
  * @param {string} file current compiled file
@@ -77,6 +165,7 @@ const quoteMeta = (str) => str.replace(METACHARACTERS_REGEXP, "\\$&");
77
165
  * @param {MapOptions} options source map options
78
166
  * @param {Compilation} compilation compilation instance
79
167
  * @param {ItemCacheFacade} cacheItem cache item
168
+ * @param {Map<string, Source>} registry compilation-scoped original-source registry
80
169
  * @returns {SourceMapTask | undefined} created task instance or `undefined`
81
170
  */
82
171
  const getTaskForFile = (
@@ -85,24 +174,12 @@ const getTaskForFile = (
85
174
  assetInfo,
86
175
  options,
87
176
  compilation,
88
- cacheItem
177
+ cacheItem,
178
+ registry
89
179
  ) => {
90
- /** @type {string | Buffer} */
91
- let source;
92
- /** @type {null | RawSourceMap} */
93
- let sourceMap;
94
- /**
95
- * Check if asset can build source map
96
- */
97
- if (asset.sourceAndMap) {
98
- const sourceAndMap = asset.sourceAndMap(options);
99
- sourceMap = sourceAndMap.map;
100
- source = sourceAndMap.source;
101
- } else {
102
- sourceMap = asset.map(options);
103
- source = asset.source();
104
- }
105
- if (!sourceMap || typeof source !== "string") return;
180
+ const extracted = extractSourceAndMap(file, asset, options, registry);
181
+ if (!extracted) return;
182
+ const { source, sourceMap, mapSource } = extracted;
106
183
  const context = compilation.options.context;
107
184
  const root = compilation.compiler.root;
108
185
  const cachedAbsolutify = makePathsAbsolute.bindContextCache(context, root);
@@ -115,10 +192,10 @@ const getTaskForFile = (
115
192
 
116
193
  return {
117
194
  file,
118
- asset,
119
- source,
195
+ source: /** @type {string} */ (source),
120
196
  assetInfo,
121
197
  sourceMap,
198
+ mapSource,
122
199
  modules,
123
200
  cacheItem
124
201
  };
@@ -126,15 +203,39 @@ const getTaskForFile = (
126
203
 
127
204
  const PLUGIN_NAME = "SourceMapDevToolPlugin";
128
205
 
206
+ /**
207
+ * Maps a configuration value (string, RegExp, function, nullish, or array of
208
+ * such) into a JSON-serializable form. Functions and RegExps are turned into
209
+ * their `.toString()` representation so that changes to inline callbacks
210
+ * invalidate caches; everything else is returned as-is so that the surrounding
211
+ * `JSON.stringify` does the escaping.
212
+ *
213
+ * The result is used through `JSON.stringify` to build cache identifiers, so
214
+ * we deliberately avoid any homemade `|` / `,` separators that could collide
215
+ * with characters appearing inside user-provided values such as `publicPath`,
216
+ * template strings, or `sourceRoot`.
217
+ * @param {EXPECTED_ANY} value option value
218
+ * @returns {EXPECTED_ANY} JSON-serializable representation
219
+ */
220
+ const toCacheKeyValue = (value) => {
221
+ if (value === undefined || value === null) return value;
222
+ if (Array.isArray(value)) return value.map(toCacheKeyValue);
223
+ if (value instanceof RegExp || typeof value === "function") {
224
+ return value.toString();
225
+ }
226
+ return value;
227
+ };
228
+
129
229
  class SourceMapDevToolPlugin {
130
230
  /**
231
+ * Creates an instance of SourceMapDevToolPlugin.
131
232
  * @param {SourceMapDevToolPluginOptions=} options options object
132
233
  * @throws {Error} throws error, if got more than 1 arguments
133
234
  */
134
235
  constructor(options = {}) {
135
236
  /** @type {undefined | null | false | string} */
136
237
  this.sourceMapFilename = options.filename;
137
- /** @type {false | TemplatePath} */
238
+ /** @type {false | SourceMappingURLComment} */
138
239
  this.sourceMappingURLComment =
139
240
  options.append === false
140
241
  ? false
@@ -151,10 +252,32 @@ class SourceMapDevToolPlugin {
151
252
  this.namespace = options.namespace || "";
152
253
  /** @type {SourceMapDevToolPluginOptions} */
153
254
  this.options = options;
255
+ // Cache salt derived from output-affecting options, so that two
256
+ // SourceMapDevToolPlugin instances (or `devtool` + a plugin) operating
257
+ // on the same asset don't share a cache entry. We serialize via
258
+ // `JSON.stringify` rather than a homemade separator so that any
259
+ // special characters (e.g. `|` inside a publicPath or sourceRoot)
260
+ // can't accidentally make two different option sets collide.
261
+ /** @type {string} */
262
+ this._cacheSalt = JSON.stringify([
263
+ toCacheKeyValue(options.filename),
264
+ toCacheKeyValue(options.append),
265
+ toCacheKeyValue(this.moduleFilenameTemplate),
266
+ toCacheKeyValue(this.fallbackModuleFilenameTemplate),
267
+ toCacheKeyValue(this.namespace),
268
+ options.module !== false,
269
+ options.columns !== false,
270
+ Boolean(options.noSources),
271
+ Boolean(options.debugIds),
272
+ options.sourceRoot || "",
273
+ toCacheKeyValue(options.ignoreList),
274
+ options.publicPath || "",
275
+ options.fileContext || ""
276
+ ]);
154
277
  }
155
278
 
156
279
  /**
157
- * Apply the plugin
280
+ * Applies the plugin by registering its hooks on the compiler.
158
281
  * @param {Compiler} compiler compiler instance
159
282
  * @returns {void}
160
283
  */
@@ -193,6 +316,14 @@ class SourceMapDevToolPlugin {
193
316
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
194
317
  new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
195
318
 
319
+ // All SourceMapDevToolPlugin instances on the same compilation share
320
+ // a registry of pristine asset sources, so the second instance to
321
+ // run can still recover the original map after the first instance
322
+ // has replaced the asset with a `RawSource`. The registry lives on a
323
+ // module-scoped `WeakMap` keyed by compilation so it is released
324
+ // automatically and never pollutes the compilation object.
325
+ const originalSources = getOriginalSourceRegistry(compilation);
326
+
196
327
  compilation.hooks.processAssets.tapAsync(
197
328
  {
198
329
  name: PLUGIN_NAME,
@@ -231,24 +362,47 @@ class SourceMapDevToolPlugin {
231
362
  const tasks = [];
232
363
  let fileIndex = 0;
233
364
 
365
+ // Shared deduplication set for `Source#clearCache` calls below.
366
+ // Webpack chunks routinely share module-level `CachedSource`
367
+ // instances. A per-call WeakSet would re-walk those shared
368
+ // subtrees once per chunk — 50 chunks × thousands of shared
369
+ // modules in dev/non-minified setups — and worse, every
370
+ // chunk's `sourceAndMap` would have to recompute the cleared
371
+ // caches, churning allocations (measured: +700 MB peak RSS,
372
+ // +6 s wall time on a 50×1000 synthetic build).
373
+ //
374
+ // Sharing one set lets each shared subtree be walked exactly
375
+ // once. The trade-off is that subsequent chunks' `sourceAndMap`
376
+ // calls can repopulate a shared module's `_cachedMaps` after
377
+ // its own clear was skipped (because the module is already in
378
+ // the visited set), leaving at most one populated cache entry
379
+ // per shared module at the end of the run — bounded to a few
380
+ // MB even at the scale of #20961. That's strictly preferable
381
+ // to the alternative's hundreds of MB of transient peak RSS.
382
+ const clearCacheVisited = new WeakSet();
383
+
234
384
  asyncLib.each(
235
385
  files,
236
386
  (file, callback) => {
237
387
  const asset =
238
388
  /** @type {Readonly<Asset>} */
239
389
  (compilation.getAsset(file));
240
- if (asset.info.related && asset.info.related.sourceMap) {
241
- fileIndex++;
242
- return callback();
243
- }
244
390
 
245
391
  const chunk = fileToChunk.get(file);
246
392
  const sourceMapNamespace = compilation.getPath(this.namespace, {
247
393
  chunk
248
394
  });
249
395
 
396
+ // The cache item identifier must include the per-instance
397
+ // salt so two SourceMapDevToolPlugin instances that target
398
+ // the same `file` don't collide in the persistent cache —
399
+ // they'd otherwise write different content to the same key
400
+ // and invalidate every pack on each build. We encode via
401
+ // `JSON.stringify` so that special characters (e.g. `|`)
402
+ // in an asset filename can't be spoofed to collide with the
403
+ // salt portion of the identifier.
250
404
  const cacheItem = cache.getItemCache(
251
- file,
405
+ JSON.stringify([file, this._cacheSalt]),
252
406
  cache.mergeEtags(
253
407
  cache.getLazyHashedEtag(asset.source),
254
408
  sourceMapNamespace
@@ -263,6 +417,16 @@ class SourceMapDevToolPlugin {
263
417
  * If presented in cache, reassigns assets. Cache assets already have source maps.
264
418
  */
265
419
  if (cacheEntry) {
420
+ // Pin the still-unwrapped asset source in the registry
421
+ // before `compilation.updateAsset` replaces it. This is a
422
+ // pointer assignment — no source-map extraction work — and
423
+ // it lets a subsequent SourceMapDevToolPlugin instance
424
+ // extract the original map on demand even though the
425
+ // persistent cache hit lets us skip processing here.
426
+ if (!originalSources.has(file)) {
427
+ originalSources.set(file, asset.source);
428
+ }
429
+
266
430
  const { assets, assetsInfo } = cacheEntry;
267
431
  for (const cachedFile of Object.keys(assets)) {
268
432
  if (cachedFile === file) {
@@ -311,9 +475,48 @@ class SourceMapDevToolPlugin {
311
475
  columns: options.columns
312
476
  },
313
477
  compilation,
314
- cacheItem
478
+ cacheItem,
479
+ originalSources
315
480
  );
316
481
 
482
+ // Release the per-instance caches that `sourceAndMap`
483
+ // just populated. The composed map (and, for
484
+ // `SourceMapSource`, the parsed `_sourceMapAsObject` /
485
+ // `_innerSourceMapAsObject`) otherwise sit on the
486
+ // CachedSource — and every shared child — until phase
487
+ // 2 replaces the asset, which is what causes the OOM
488
+ // spike on builds with thousands of chunks
489
+ // (webpack#20961). Keep `source` since downstream
490
+ // consumers reading the original asset still need it;
491
+ // `hash`/`size` default to retained because they're
492
+ // cheap to keep but expensive to rebuild.
493
+ // `clearCacheVisited` is shared across every call (see
494
+ // its declaration above for the rationale).
495
+ //
496
+ // Target `task.mapSource` (not `asset.source`): when
497
+ // `extractSourceAndMap` falls back to the pinned
498
+ // original (the current asset is a `RawSource` left
499
+ // by an earlier plugin instance), the `sourceAndMap`
500
+ // call populated the original's caches, not the
501
+ // current asset's.
502
+ //
503
+ // Feature-detected: `clearCache` landed in
504
+ // `webpack-sources` 3.5, but `compilation.assets` may
505
+ // hold `Source`-like instances from a third-party
506
+ // plugin built against an older copy of
507
+ // `webpack-sources` (or a hand-rolled implementation).
508
+ // Calling it unconditionally would throw on those.
509
+ if (task && typeof task.mapSource.clearCache === "function") {
510
+ task.mapSource.clearCache(
511
+ {
512
+ maps: true,
513
+ source: false,
514
+ parsedMap: true
515
+ },
516
+ clearCacheVisited
517
+ );
518
+ }
519
+
317
520
  if (task) {
318
521
  const modules = task.modules;
319
522
 
@@ -444,12 +647,21 @@ class SourceMapDevToolPlugin {
444
647
  "attach SourceMap"
445
648
  );
446
649
 
447
- const moduleFilenames = modules.map((m) =>
448
- moduleToSourceNameMapping.get(m)
449
- );
450
- sourceMap.sources = /** @type {string[]} */ (moduleFilenames);
650
+ const moduleFilenames =
651
+ /** @type {string[]} */
652
+ (modules.map((m) => moduleToSourceNameMapping.get(m)));
653
+ // We deliberately do NOT mutate `sourceMap` in place: the
654
+ // task's `sourceMap` reference may be shared with a
655
+ // `SourceMapSource` whose internal map cache is the same
656
+ // object (webpack-sources keeps it cached). A second
657
+ // `SourceMapDevToolPlugin` instance that reads the original
658
+ // source through the registry would otherwise see our
659
+ // rewrites. Instead we build a fresh `outputSourceMap` for
660
+ // the .map file and leave the original alone.
661
+ /** @type {number[] | undefined} */
662
+ let ignoreList;
451
663
  if (options.ignoreList) {
452
- const ignoreList = sourceMap.sources.reduce(
664
+ const list = moduleFilenames.reduce(
453
665
  /** @type {(acc: number[], sourceName: string, idx: number) => number[]} */ (
454
666
  (acc, sourceName, idx) => {
455
667
  const rule = /** @type {Rules} */ (
@@ -465,35 +677,27 @@ class SourceMapDevToolPlugin {
465
677
  ),
466
678
  []
467
679
  );
468
- if (ignoreList.length > 0) {
469
- sourceMap.ignoreList = ignoreList;
470
- }
680
+ if (list.length > 0) ignoreList = list;
471
681
  }
472
682
 
473
- if (options.noSources) {
474
- sourceMap.sourcesContent = undefined;
475
- }
476
- sourceMap.sourceRoot = options.sourceRoot || "";
477
- sourceMap.file = file;
478
683
  const usesContentHash =
479
- sourceMapFilename &&
480
- CONTENT_HASH_DETECT_REGEXP.test(sourceMapFilename);
481
-
482
- resetRegexpState(CONTENT_HASH_DETECT_REGEXP);
684
+ typeof sourceMapFilename === "string" &&
685
+ getPresentKinds(sourceMapFilename).has("contenthash");
483
686
 
687
+ let outputFile = file;
484
688
  // If SourceMap and asset uses contenthash, avoid a circular dependency by hiding hash in `file`
485
689
  if (usesContentHash && task.assetInfo.contenthash) {
486
690
  const contenthash = task.assetInfo.contenthash;
487
691
  const pattern = Array.isArray(contenthash)
488
692
  ? contenthash.map(quoteMeta).join("|")
489
693
  : quoteMeta(contenthash);
490
- sourceMap.file = sourceMap.file.replace(
694
+ outputFile = outputFile.replace(
491
695
  new RegExp(pattern, "g"),
492
696
  (m) => "x".repeat(m.length)
493
697
  );
494
698
  }
495
699
 
496
- /** @type {false | TemplatePath} */
700
+ /** @type {false | SourceMappingURLComment} */
497
701
  let currentSourceMappingURLComment = sourceMappingURLComment;
498
702
  const cssExtensionDetected =
499
703
  CSS_EXTENSION_DETECT_REGEXP.test(file);
@@ -510,23 +714,64 @@ class SourceMapDevToolPlugin {
510
714
  );
511
715
  }
512
716
 
717
+ /** @type {string | undefined} */
718
+ let debugIdValue;
513
719
  if (options.debugIds) {
514
- const debugId = generateDebugId(source, sourceMap.file);
515
- sourceMap.debugId = debugId;
720
+ const debugId = generateDebugId(source, outputFile);
721
+ debugIdValue = debugId;
516
722
 
517
723
  const debugIdComment = `\n//# debugId=${debugId}`;
518
- currentSourceMappingURLComment =
519
- currentSourceMappingURLComment
520
- ? `${debugIdComment}${currentSourceMappingURLComment}`
521
- : debugIdComment;
724
+ if (currentSourceMappingURLComment === false) {
725
+ currentSourceMappingURLComment = debugIdComment;
726
+ } else if (
727
+ typeof currentSourceMappingURLComment === "function"
728
+ ) {
729
+ // Wrap the user's append function so the debug-id
730
+ // comment is prepended at call time. Template-string
731
+ // concatenation would coerce the function to a string
732
+ // and lose its dynamic behavior.
733
+ const wrappedFn = currentSourceMappingURLComment;
734
+ currentSourceMappingURLComment = (pathData, assetInfo) =>
735
+ `${debugIdComment}${wrappedFn(pathData, assetInfo)}`;
736
+ } else {
737
+ currentSourceMappingURLComment = `${debugIdComment}${currentSourceMappingURLComment}`;
738
+ }
739
+ }
740
+
741
+ /** @type {RawSourceMap} */
742
+ const outputSourceMap = {
743
+ ...sourceMap,
744
+ sources: moduleFilenames,
745
+ sourceRoot: options.sourceRoot || "",
746
+ file: outputFile
747
+ };
748
+ if (ignoreList !== undefined) {
749
+ outputSourceMap.ignoreList = ignoreList;
750
+ }
751
+ if (options.noSources) {
752
+ outputSourceMap.sourcesContent = undefined;
753
+ }
754
+ if (debugIdValue !== undefined) {
755
+ outputSourceMap.debugId = debugIdValue;
522
756
  }
523
757
 
524
- const sourceMapString = JSON.stringify(sourceMap);
525
758
  if (sourceMapFilename) {
759
+ // External `.map` file: hold the serialized map as a
760
+ // `Buffer` instead of a V8 string. `RawSource` accepts
761
+ // a buffer directly, and the emitted asset stays in
762
+ // `compilation.assets` until the build finishes — so
763
+ // storing the bytes off the V8 heap (where Buffers
764
+ // live, accounted as `external` memory) avoids keeping
765
+ // a large V8 string alive for the rest of the build
766
+ // and reduces heap pressure on `--max-old-space-size`.
767
+ const sourceMapBuffer = Buffer.from(
768
+ JSON.stringify(outputSourceMap),
769
+ "utf8"
770
+ );
526
771
  const filename = file;
527
772
  const sourceMapContentHash = usesContentHash
528
773
  ? createHash(compilation.outputOptions.hashFunction)
529
- .update(sourceMapString)
774
+ .update(sourceMapBuffer)
530
775
  .digest("hex")
531
776
  : undefined;
532
777
 
@@ -565,14 +810,40 @@ class SourceMapDevToolPlugin {
565
810
  })
566
811
  );
567
812
  }
813
+ // Preserve any existing related.sourceMap entries from
814
+ // earlier SourceMapDevToolPlugin runs on the same asset so
815
+ // that all generated maps remain discoverable via asset
816
+ // info (the schema allows string or string[]).
817
+ const existingSourceMap =
818
+ task.assetInfo.related &&
819
+ task.assetInfo.related.sourceMap;
820
+ /** @type {string | string[]} */
821
+ let relatedSourceMap;
822
+ if (
823
+ existingSourceMap === undefined ||
824
+ existingSourceMap === null
825
+ ) {
826
+ relatedSourceMap = sourceMapFile;
827
+ } else if (Array.isArray(existingSourceMap)) {
828
+ relatedSourceMap = existingSourceMap.includes(
829
+ sourceMapFile
830
+ )
831
+ ? existingSourceMap
832
+ : [...existingSourceMap, sourceMapFile];
833
+ } else {
834
+ relatedSourceMap =
835
+ existingSourceMap === sourceMapFile
836
+ ? existingSourceMap
837
+ : [existingSourceMap, sourceMapFile];
838
+ }
568
839
  const assetInfo = {
569
- related: { sourceMap: sourceMapFile }
840
+ related: { sourceMap: relatedSourceMap }
570
841
  };
571
842
  assets[file] = asset;
572
843
  assetsInfo[file] = assetInfo;
573
844
  compilation.updateAsset(file, asset, assetInfo);
574
845
  // Add source map file to compilation assets and chunk files
575
- const sourceMapAsset = new RawSource(sourceMapString);
846
+ const sourceMapAsset = new RawSource(sourceMapBuffer);
576
847
  const sourceMapAssetInfo = {
577
848
  ...sourceMapInfo,
578
849
  development: true
@@ -598,6 +869,16 @@ class SourceMapDevToolPlugin {
598
869
  `${PLUGIN_NAME}: append can't be a function when no filename is provided`
599
870
  );
600
871
  }
872
+ // Inline data-URL form: `[map]` gets the raw JSON, `[url]`
873
+ // gets the same JSON base64-encoded. `URL_COMMENT_REGEXP`
874
+ // is a `/g` regex, so a user `append` template with more
875
+ // than one `[url]` placeholder would otherwise re-encode
876
+ // the same JSON per match. Pre-compute both once.
877
+ const sourceMapString = JSON.stringify(outputSourceMap);
878
+ const sourceMapBase64 = Buffer.from(
879
+ sourceMapString,
880
+ "utf8"
881
+ ).toString("base64");
601
882
  /**
602
883
  * Add source map as data url to asset
603
884
  */
@@ -608,10 +889,7 @@ class SourceMapDevToolPlugin {
608
889
  .replace(
609
890
  URL_COMMENT_REGEXP,
610
891
  () =>
611
- `data:application/json;charset=utf-8;base64,${Buffer.from(
612
- sourceMapString,
613
- "utf8"
614
- ).toString("base64")}`
892
+ `data:application/json;charset=utf-8;base64,${sourceMapBase64}`
615
893
  )
616
894
  );
617
895
  assets[file] = asset;
package/lib/Stats.js CHANGED
@@ -12,9 +12,11 @@
12
12
 
13
13
  class Stats {
14
14
  /**
15
+ * Creates an instance of Stats.
15
16
  * @param {Compilation} compilation webpack compilation
16
17
  */
17
18
  constructor(compilation) {
19
+ /** @type {Compilation} */
18
20
  this.compilation = compilation;
19
21
  }
20
22
 
@@ -31,6 +33,7 @@ class Stats {
31
33
  }
32
34
 
33
35
  /**
36
+ * Checks whether this stats has warnings.
34
37
  * @returns {boolean} true if the compilation had a warning
35
38
  */
36
39
  hasWarnings() {
@@ -41,6 +44,7 @@ class Stats {
41
44
  }
42
45
 
43
46
  /**
47
+ * Checks whether this stats has errors.
44
48
  * @returns {boolean} true if the compilation encountered an error
45
49
  */
46
50
  hasErrors() {
@@ -51,6 +55,7 @@ class Stats {
51
55
  }
52
56
 
53
57
  /**
58
+ * Returns json output.
54
59
  * @param {StatsValue=} options stats options
55
60
  * @returns {StatsCompilation} json output
56
61
  */
@@ -67,6 +72,7 @@ class Stats {
67
72
  }
68
73
 
69
74
  /**
75
+ * Returns a string representation.
70
76
  * @param {StatsValue=} options stats options
71
77
  * @returns {string} string output
72
78
  */