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
package/lib/ChunkGroup.js CHANGED
@@ -8,9 +8,9 @@
8
8
  const util = require("util");
9
9
  const SortableSet = require("./util/SortableSet");
10
10
  const {
11
- compareLocations,
12
11
  compareChunks,
13
- compareIterables
12
+ compareIterables,
13
+ compareLocations
14
14
  } = require("./util/comparators");
15
15
 
16
16
  /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
@@ -21,8 +21,7 @@ const {
21
21
  /** @typedef {import("./Module")} Module */
22
22
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
23
23
 
24
- /** @typedef {{id: number}} HasId */
25
- /** @typedef {{module: Module | null, loc: DependencyLocation, request: string}} OriginRecord */
24
+ /** @typedef {{ module: Module | null, loc: DependencyLocation, request: string }} OriginRecord */
26
25
 
27
26
  /**
28
27
  * @typedef {object} RawChunkGroupOptions
@@ -40,13 +39,13 @@ let debugId = 5000;
40
39
  * @param {SortableSet<T>} set set to convert to array.
41
40
  * @returns {T[]} the array format of existing set
42
41
  */
43
- const getArray = set => Array.from(set);
42
+ const getArray = (set) => [...set];
44
43
 
45
44
  /**
46
45
  * A convenience method used to sort chunks based on their id's
47
46
  * @param {ChunkGroup} a first sorting comparator
48
47
  * @param {ChunkGroup} b second sorting comparator
49
- * @returns {1|0|-1} a sorting index to determine order
48
+ * @returns {1 | 0 | -1} a sorting index to determine order
50
49
  */
51
50
  const sortById = (a, b) => {
52
51
  if (a.id < b.id) return -1;
@@ -57,7 +56,7 @@ const sortById = (a, b) => {
57
56
  /**
58
57
  * @param {OriginRecord} a the first comparator in sort
59
58
  * @param {OriginRecord} b the second comparator in sort
60
- * @returns {1|-1|0} returns sorting order as index
59
+ * @returns {1 | -1| 0} returns sorting order as index
61
60
  */
62
61
  const sortOrigin = (a, b) => {
63
62
  const aIdent = a.module ? a.module.identifier() : "";
@@ -92,16 +91,19 @@ class ChunkGroup {
92
91
  this.chunks = [];
93
92
  /** @type {OriginRecord[]} */
94
93
  this.origins = [];
94
+
95
+ /** @typedef {Map<Module, number>} OrderIndices */
96
+
95
97
  /** Indices in top-down order */
96
98
  /**
97
99
  * @private
98
- * @type {Map<Module, number>}
100
+ * @type {OrderIndices}
99
101
  */
100
102
  this._modulePreOrderIndices = new Map();
101
103
  /** Indices in bottom-up order */
102
104
  /**
103
105
  * @private
104
- * @type {Map<Module, number>}
106
+ * @type {OrderIndices}
105
107
  */
106
108
  this._modulePostOrderIndices = new Map();
107
109
  /** @type {number | undefined} */
@@ -114,17 +116,23 @@ class ChunkGroup {
114
116
  * @returns {void}
115
117
  */
116
118
  addOptions(options) {
117
- for (const _key of Object.keys(options)) {
118
- const key = /** @type {keyof ChunkGroupOptions} */ (_key);
119
+ for (const key of /** @type {(keyof ChunkGroupOptions)[]} */ (
120
+ Object.keys(options)
121
+ )) {
119
122
  if (this.options[key] === undefined) {
120
- /** @type {TODO} */
121
- (this.options)[key] = options[key];
123
+ /** @type {ChunkGroupOptions[keyof ChunkGroupOptions]} */
124
+ (this.options[key]) = options[key];
122
125
  } else if (this.options[key] !== options[key]) {
123
126
  if (key.endsWith("Order")) {
124
- /** @type {TODO} */
125
- (this.options)[key] = Math.max(
126
- /** @type {number} */ (this.options[key]),
127
- /** @type {number} */ (options[key])
127
+ const orderKey =
128
+ /** @type {Exclude<keyof ChunkGroupOptions, "name" | "fetchPriority">} */
129
+ (key);
130
+
131
+ this.options[orderKey] = Math.max(
132
+ /** @type {number} */
133
+ (this.options[orderKey]),
134
+ /** @type {number} */
135
+ (options[orderKey])
128
136
  );
129
137
  } else {
130
138
  throw new Error(
@@ -137,7 +145,7 @@ class ChunkGroup {
137
145
 
138
146
  /**
139
147
  * returns the name of current ChunkGroup
140
- * @returns {string | null | undefined} returns the ChunkGroup name
148
+ * @returns {ChunkGroupOptions["name"]} returns the ChunkGroup name
141
149
  */
142
150
  get name() {
143
151
  return this.options.name;
@@ -158,7 +166,7 @@ class ChunkGroup {
158
166
  * @returns {string} a unique concatenation of chunk debugId's
159
167
  */
160
168
  get debugId() {
161
- return Array.from(this.chunks, x => x.debugId).join("+");
169
+ return Array.from(this.chunks, (x) => x.debugId).join("+");
162
170
  }
163
171
 
164
172
  /**
@@ -166,7 +174,7 @@ class ChunkGroup {
166
174
  * @returns {string} a unique concatenation of chunk ids
167
175
  */
168
176
  get id() {
169
- return Array.from(this.chunks, x => x.id).join("+");
177
+ return Array.from(this.chunks, (x) => x.id).join("+");
170
178
  }
171
179
 
172
180
  /**
@@ -366,7 +374,7 @@ class ChunkGroup {
366
374
  }
367
375
 
368
376
  /**
369
- * @returns {Array<AsyncDependenciesBlock>} an array containing the blocks
377
+ * @returns {AsyncDependenciesBlock[]} an array containing the blocks
370
378
  */
371
379
  getBlocks() {
372
380
  return this._blocks.getFromCache(getArray);
@@ -429,7 +437,7 @@ class ChunkGroup {
429
437
  }
430
438
  }
431
439
 
432
- return Array.from(files);
440
+ return [...files];
433
441
  }
434
442
 
435
443
  /**
@@ -480,7 +488,7 @@ class ChunkGroup {
480
488
  * Sorting values are based off of number of chunks in ChunkGroup.
481
489
  * @param {ChunkGraph} chunkGraph the chunk graph
482
490
  * @param {ChunkGroup} otherGroup the chunkGroup to compare this against
483
- * @returns {-1|0|1} sort position for comparison
491
+ * @returns {-1 | 0 | 1} sort position for comparison
484
492
  */
485
493
  compareTo(chunkGraph, otherGroup) {
486
494
  if (this.chunks.length > otherGroup.chunks.length) return -1;
@@ -526,7 +534,7 @@ class ChunkGroup {
526
534
  if (cmp !== 0) return cmp;
527
535
  return a.group.compareTo(chunkGraph, b.group);
528
536
  });
529
- result[name] = list.map(i => i.group);
537
+ result[name] = list.map((i) => i.group);
530
538
  }
531
539
  return result;
532
540
  }
@@ -9,7 +9,7 @@ const util = require("util");
9
9
  const memoize = require("./util/memoize");
10
10
 
11
11
  /** @typedef {import("tapable").Tap} Tap */
12
- /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */
12
+ /** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptions */
13
13
  /** @typedef {import("./Chunk")} Chunk */
14
14
  /** @typedef {import("./Compilation")} Compilation */
15
15
  /** @typedef {import("./Compilation").ChunkHashContext} ChunkHashContext */
@@ -42,7 +42,7 @@ class ChunkTemplate {
42
42
  /**
43
43
  * @template AdditionalOptions
44
44
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
45
- * @param {function(RenderManifestEntry[], RenderManifestOptions): RenderManifestEntry[]} fn function
45
+ * @param {(renderManifestEntries: RenderManifestEntry[], renderManifestOptions: RenderManifestOptions) => RenderManifestEntry[]} fn function
46
46
  */
47
47
  (options, fn) => {
48
48
  compilation.hooks.renderManifest.tap(
@@ -62,7 +62,7 @@ class ChunkTemplate {
62
62
  /**
63
63
  * @template AdditionalOptions
64
64
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
65
- * @param {function(Source, ModuleTemplate, RenderContext): Source} fn function
65
+ * @param {(source: Source, moduleTemplate: ModuleTemplate, renderContext: RenderContext) => Source} fn function
66
66
  */
67
67
  (options, fn) => {
68
68
  getJavascriptModulesPlugin()
@@ -84,7 +84,7 @@ class ChunkTemplate {
84
84
  /**
85
85
  * @template AdditionalOptions
86
86
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
87
- * @param {function(Source, ModuleTemplate, RenderContext): Source} fn function
87
+ * @param {(source: Source, moduleTemplate: ModuleTemplate, renderContext: RenderContext) => Source} fn function
88
88
  */
89
89
  (options, fn) => {
90
90
  getJavascriptModulesPlugin()
@@ -106,7 +106,7 @@ class ChunkTemplate {
106
106
  /**
107
107
  * @template AdditionalOptions
108
108
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
109
- * @param {function(Source, Chunk): Source} fn function
109
+ * @param {(source: Source, chunk: Chunk) => Source} fn function
110
110
  */
111
111
  (options, fn) => {
112
112
  getJavascriptModulesPlugin()
@@ -132,7 +132,7 @@ class ChunkTemplate {
132
132
  /**
133
133
  * @template AdditionalOptions
134
134
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
135
- * @param {function(Hash): void} fn function
135
+ * @param {(hash: Hash) => void} fn function
136
136
  */
137
137
  (options, fn) => {
138
138
  compilation.hooks.fullHash.tap(options, fn);
@@ -146,7 +146,7 @@ class ChunkTemplate {
146
146
  /**
147
147
  * @template AdditionalOptions
148
148
  * @param {string | Tap & IfSet<AdditionalOptions>} options options
149
- * @param {function(Hash, Chunk, ChunkHashContext): void} fn function
149
+ * @param {(hash: Hash, chunk: Chunk, chunkHashContext: ChunkHashContext) => void} fn function
150
150
  */
151
151
  (options, fn) => {
152
152
  getJavascriptModulesPlugin()
@@ -170,7 +170,7 @@ Object.defineProperty(ChunkTemplate.prototype, "outputOptions", {
170
170
  * @this {ChunkTemplate}
171
171
  * @returns {OutputOptions} output options
172
172
  */
173
- function () {
173
+ function outputOptions() {
174
174
  return this._outputOptions;
175
175
  },
176
176
  "ChunkTemplate.outputOptions is deprecated (use Compilation.outputOptions instead)",
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const path = require("path");
8
9
  const asyncLib = require("neo-async");
9
10
  const { SyncBailHook } = require("tapable");
10
11
  const Compilation = require("./Compilation");
@@ -19,9 +20,7 @@ const processAsyncTree = require("./util/processAsyncTree");
19
20
  /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
20
21
  /** @typedef {import("./util/fs").StatsCallback} StatsCallback */
21
22
 
22
- /** @typedef {(function(string):boolean)|RegExp} IgnoreItem */
23
23
  /** @typedef {Map<string, number>} Assets */
24
- /** @typedef {function(IgnoreItem): void} AddToIgnoreCallback */
25
24
 
26
25
  /**
27
26
  * @typedef {object} CleanPluginCompilationHooks
@@ -31,13 +30,14 @@ const processAsyncTree = require("./util/processAsyncTree");
31
30
  /**
32
31
  * @callback KeepFn
33
32
  * @param {string} path path
34
- * @returns {boolean | void} true, if the path should be kept
33
+ * @returns {boolean | undefined} true, if the path should be kept
35
34
  */
36
35
 
37
36
  const validate = createSchemaValidation(
38
37
  undefined,
39
38
  () => {
40
39
  const { definitions } = require("../schemas/WebpackOptions.json");
40
+
41
41
  return {
42
42
  definitions,
43
43
  oneOf: [{ $ref: "#/definitions/CleanOptions" }]
@@ -51,7 +51,7 @@ const validate = createSchemaValidation(
51
51
  const _10sec = 10 * 1000;
52
52
 
53
53
  /**
54
- * marge assets map 2 into map 1
54
+ * merge assets map 2 into map 1
55
55
  * @param {Assets} as1 assets
56
56
  * @param {Assets} as2 assets
57
57
  * @returns {void}
@@ -63,23 +63,44 @@ const mergeAssets = (as1, as2) => {
63
63
  }
64
64
  };
65
65
 
66
+ /** @typedef {Map<string, number>} CurrentAssets */
67
+
66
68
  /**
67
- * @param {OutputFileSystem} fs filesystem
68
- * @param {string} outputPath output path
69
- * @param {Map<string, number>} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
70
- * @param {function((Error | null)=, Set<string>=): void} callback returns the filenames of the assets that shouldn't be there
71
- * @returns {void}
69
+ * @param {CurrentAssets} assets current assets
70
+ * @returns {Set<string>} Set of directory paths
72
71
  */
73
- const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
72
+ function getDirectories(assets) {
74
73
  const directories = new Set();
74
+ /**
75
+ * @param {string} filename asset filename
76
+ */
77
+ const addDirectory = (filename) => {
78
+ directories.add(path.dirname(filename));
79
+ };
80
+
75
81
  // get directories of assets
76
- for (const [asset] of currentAssets) {
77
- directories.add(asset.replace(/(^|\/)[^/]*$/, ""));
82
+ for (const [asset] of assets) {
83
+ addDirectory(asset);
78
84
  }
79
85
  // and all parent directories
80
86
  for (const directory of directories) {
81
- directories.add(directory.replace(/(^|\/)[^/]*$/, ""));
87
+ addDirectory(directory);
82
88
  }
89
+ return directories;
90
+ }
91
+
92
+ /** @typedef {Set<string>} Diff */
93
+
94
+ /**
95
+ * @param {OutputFileSystem} fs filesystem
96
+ * @param {string} outputPath output path
97
+ * @param {CurrentAssets} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
98
+ * @param {(err?: Error | null, set?: Diff) => void} callback returns the filenames of the assets that shouldn't be there
99
+ * @returns {void}
100
+ */
101
+ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
102
+ const directories = getDirectories(currentAssets);
103
+ /** @type {Diff} */
83
104
  const diff = new Set();
84
105
  asyncLib.forEachLimit(
85
106
  directories,
@@ -97,7 +118,10 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
97
118
  }
98
119
  for (const entry of /** @type {string[]} */ (entries)) {
99
120
  const file = entry;
100
- const filename = directory ? `${directory}/${file}` : file;
121
+ // Since path.normalize("./file") === path.normalize("file"),
122
+ // return file directly when directory === "."
123
+ const filename =
124
+ directory && directory !== "." ? `${directory}/${file}` : file;
101
125
  if (!directories.has(filename) && !currentAssets.has(filename)) {
102
126
  diff.add(filename);
103
127
  }
@@ -105,7 +129,7 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
105
129
  callback();
106
130
  });
107
131
  },
108
- err => {
132
+ (err) => {
109
133
  if (err) return callback(err);
110
134
 
111
135
  callback(null, diff);
@@ -116,7 +140,7 @@ const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
116
140
  /**
117
141
  * @param {Assets} currentAssets assets list
118
142
  * @param {Assets} oldAssets old assets list
119
- * @returns {Set<string>} diff
143
+ * @returns {Diff} diff
120
144
  */
121
145
  const getDiffToOldAssets = (currentAssets, oldAssets) => {
122
146
  const diff = new Set();
@@ -148,16 +172,16 @@ const doStat = (fs, filename, callback) => {
148
172
  * @param {string} outputPath output path
149
173
  * @param {boolean} dry only log instead of fs modification
150
174
  * @param {Logger} logger logger
151
- * @param {Set<string>} diff filenames of the assets that shouldn't be there
152
- * @param {function(string): boolean | void} isKept check if the entry is ignored
153
- * @param {function(Error=, Assets=): void} callback callback
175
+ * @param {Diff} diff filenames of the assets that shouldn't be there
176
+ * @param {KeepFn} isKept check if the entry is ignored
177
+ * @param {(err?: Error, assets?: Assets) => void} callback callback
154
178
  * @returns {void}
155
179
  */
156
180
  const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
157
181
  /**
158
182
  * @param {string} msg message
159
183
  */
160
- const log = msg => {
184
+ const log = (msg) => {
161
185
  if (dry) {
162
186
  logger.info(msg);
163
187
  } else {
@@ -166,7 +190,7 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
166
190
  };
167
191
  /** @typedef {{ type: "check" | "unlink" | "rmdir", filename: string, parent: { remaining: number, job: Job } | undefined }} Job */
168
192
  /** @type {Job[]} */
169
- const jobs = Array.from(diff.keys(), filename => ({
193
+ const jobs = Array.from(diff.keys(), (filename) => ({
170
194
  type: "check",
171
195
  filename,
172
196
  parent: undefined
@@ -177,22 +201,43 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
177
201
  jobs,
178
202
  10,
179
203
  ({ type, filename, parent }, push, callback) => {
204
+ const path = join(fs, outputPath, filename);
180
205
  /**
181
206
  * @param {Error & { code?: string }} err error
182
207
  * @returns {void}
183
208
  */
184
- const handleError = err => {
185
- if (err.code === "ENOENT") {
186
- log(`${filename} was removed during cleaning by something else`);
187
- handleParent();
188
- return callback();
189
- }
190
- return callback(err);
209
+ const handleError = (err) => {
210
+ const isAlreadyRemoved = () =>
211
+ new Promise((resolve) => {
212
+ if (err.code === "ENOENT") {
213
+ resolve(true);
214
+ } else if (err.code === "EPERM") {
215
+ // https://github.com/isaacs/rimraf/blob/main/src/fix-eperm.ts#L37
216
+ // fs.existsSync(path) === false https://github.com/webpack/webpack/actions/runs/15493412975/job/43624272783?pr=19586
217
+ doStat(fs, path, (err) => {
218
+ if (err) {
219
+ resolve(err.code === "ENOENT");
220
+ } else {
221
+ resolve(false);
222
+ }
223
+ });
224
+ } else {
225
+ resolve(false);
226
+ }
227
+ });
228
+
229
+ isAlreadyRemoved().then((isRemoved) => {
230
+ if (isRemoved) {
231
+ log(`${filename} was removed during cleaning by something else`);
232
+ handleParent();
233
+ return callback();
234
+ }
235
+ return callback(err);
236
+ });
191
237
  };
192
238
  const handleParent = () => {
193
239
  if (parent && --parent.remaining === 0) push(parent.job);
194
240
  };
195
- const path = join(fs, outputPath, filename);
196
241
  switch (type) {
197
242
  case "check":
198
243
  if (isKept(filename)) {
@@ -260,7 +305,7 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
260
305
  );
261
306
  return process.nextTick(callback);
262
307
  }
263
- fs.rmdir(path, err => {
308
+ fs.rmdir(path, (err) => {
264
309
  if (err) return handleError(err);
265
310
  handleParent();
266
311
  callback();
@@ -278,7 +323,7 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
278
323
  );
279
324
  return process.nextTick(callback);
280
325
  }
281
- fs.unlink(path, err => {
326
+ fs.unlink(path, (err) => {
282
327
  if (err) return handleError(err);
283
328
  handleParent();
284
329
  callback();
@@ -286,7 +331,7 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
286
331
  break;
287
332
  }
288
333
  },
289
- err => {
334
+ (err) => {
290
335
  if (err) return callback(err);
291
336
  callback(undefined, keptAssets);
292
337
  }
@@ -296,6 +341,8 @@ const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
296
341
  /** @type {WeakMap<Compilation, CleanPluginCompilationHooks>} */
297
342
  const compilationHooksMap = new WeakMap();
298
343
 
344
+ const PLUGIN_NAME = "CleanPlugin";
345
+
299
346
  class CleanPlugin {
300
347
  /**
301
348
  * @param {Compilation} compilation the compilation
@@ -336,31 +383,31 @@ class CleanPlugin {
336
383
  typeof keep === "function"
337
384
  ? keep
338
385
  : typeof keep === "string"
339
- ? path => path.startsWith(keep)
386
+ ? (path) => path.startsWith(keep)
340
387
  : typeof keep === "object" && keep.test
341
- ? path => keep.test(path)
388
+ ? (path) => keep.test(path)
342
389
  : () => false;
343
390
 
344
391
  // We assume that no external modification happens while the compiler is active
345
392
  // So we can store the old assets and only diff to them to avoid fs access on
346
393
  // incremental builds
347
- /** @type {undefined|Assets} */
394
+ /** @type {undefined | Assets} */
348
395
  let oldAssets;
349
396
 
350
397
  compiler.hooks.emit.tapAsync(
351
398
  {
352
- name: "CleanPlugin",
399
+ name: PLUGIN_NAME,
353
400
  stage: 100
354
401
  },
355
402
  (compilation, callback) => {
356
403
  const hooks = CleanPlugin.getCompilationHooks(compilation);
357
- const logger = compilation.getLogger("webpack.CleanPlugin");
404
+ const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`);
358
405
  const fs = /** @type {OutputFileSystem} */ (compiler.outputFileSystem);
359
406
 
360
407
  if (!fs.readdir) {
361
408
  return callback(
362
409
  new Error(
363
- "CleanPlugin: Output filesystem doesn't support listing directories (readdir)"
410
+ `${PLUGIN_NAME}: Output filesystem doesn't support listing directories (readdir)`
364
411
  )
365
412
  );
366
413
  }
@@ -392,9 +439,9 @@ class CleanPlugin {
392
439
 
393
440
  /**
394
441
  * @param {string} path path
395
- * @returns {boolean | void} true, if needs to be kept
442
+ * @returns {boolean | undefined} true, if needs to be kept
396
443
  */
397
- const isKept = path => {
444
+ const isKept = (path) => {
398
445
  const result = hooks.keep.call(path);
399
446
  if (result !== undefined) return result;
400
447
  return keepFn(path);
@@ -402,7 +449,7 @@ class CleanPlugin {
402
449
 
403
450
  /**
404
451
  * @param {(Error | null)=} err err
405
- * @param {Set<string>=} diff diff
452
+ * @param {Diff=} diff diff
406
453
  */
407
454
  const diffCallback = (err, diff) => {
408
455
  if (err) {
@@ -415,7 +462,7 @@ class CleanPlugin {
415
462
  outputPath,
416
463
  dry,
417
464
  logger,
418
- /** @type {Set<string>} */ (diff),
465
+ /** @type {Diff} */ (diff),
419
466
  isKept,
420
467
  (err, keptAssets) => {
421
468
  if (err) {
@@ -441,3 +488,4 @@ class CleanPlugin {
441
488
  }
442
489
 
443
490
  module.exports = CleanPlugin;
491
+ module.exports._getDirectories = getDirectories;
@@ -5,14 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { DEFAULTS } = require("./config/defaults");
8
9
  const { getOrInsert } = require("./util/MapHelpers");
9
10
  const { first } = require("./util/SetHelpers");
10
11
  const createHash = require("./util/createHash");
11
- const { runtimeToString, RuntimeSpecMap } = require("./util/runtime");
12
+ const { RuntimeSpecMap, runtimeToString } = require("./util/runtime");
12
13
 
13
14
  /** @typedef {import("webpack-sources").Source} Source */
14
15
  /** @typedef {import("./Module")} Module */
16
+ /** @typedef {import("./Module").SourceType} SourceType */
15
17
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
18
+ /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
16
19
  /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
17
20
  /** @typedef {typeof import("./util/Hash")} Hash */
18
21
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
@@ -21,7 +24,7 @@ class CodeGenerationResults {
21
24
  /**
22
25
  * @param {string | Hash} hashFunction the hash function to use
23
26
  */
24
- constructor(hashFunction = "md4") {
27
+ constructor(hashFunction = DEFAULTS.HASH_FUNCTION) {
25
28
  /** @type {Map<Module, RuntimeSpecMap<CodeGenerationResult>>} */
26
29
  this.map = new Map();
27
30
  this._hashFunction = hashFunction;
@@ -38,7 +41,7 @@ class CodeGenerationResults {
38
41
  throw new Error(
39
42
  `No code generation entry for ${module.identifier()} (existing entries: ${Array.from(
40
43
  this.map.keys(),
41
- m => m.identifier()
44
+ (m) => m.identifier()
42
45
  ).join(", ")})`
43
46
  );
44
47
  }
@@ -49,7 +52,7 @@ class CodeGenerationResults {
49
52
  throw new Error(
50
53
  `No unique code generation entry for unspecified runtime for ${module.identifier()} (existing runtimes: ${Array.from(
51
54
  entry.keys(),
52
- r => runtimeToString(r)
55
+ (r) => runtimeToString(r)
53
56
  ).join(", ")}).
54
57
  Caller might not support runtime-dependent code generation (opt-out via optimization.usedExports: "global").`
55
58
  );
@@ -65,7 +68,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
65
68
  runtime
66
69
  )} for ${module.identifier()} (existing runtimes: ${Array.from(
67
70
  entry.keys(),
68
- r => runtimeToString(r)
71
+ (r) => runtimeToString(r)
69
72
  ).join(", ")})`
70
73
  );
71
74
  }
@@ -94,7 +97,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
94
97
  /**
95
98
  * @param {Module} module the module
96
99
  * @param {RuntimeSpec} runtime runtime(s)
97
- * @param {string} sourceType the source type
100
+ * @param {SourceType} sourceType the source type
98
101
  * @returns {Source} a source
99
102
  */
100
103
  getSource(module, runtime, sourceType) {
@@ -116,7 +119,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
116
119
  * @param {Module} module the module
117
120
  * @param {RuntimeSpec} runtime runtime(s)
118
121
  * @param {string} key data key
119
- * @returns {any} data generated by code generation
122
+ * @returns {ReturnType<CodeGenerationResultData["get"]>} data generated by code generation
120
123
  */
121
124
  getData(module, runtime, key) {
122
125
  const data = this.get(module, runtime).data;
@@ -126,7 +129,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
126
129
  /**
127
130
  * @param {Module} module the module
128
131
  * @param {RuntimeSpec} runtime runtime(s)
129
- * @returns {any} hash of the code generation
132
+ * @returns {string} hash of the code generation
130
133
  */
131
134
  getHash(module, runtime) {
132
135
  const info = this.get(module, runtime);
@@ -139,7 +142,7 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
139
142
  if (info.runtimeRequirements) {
140
143
  for (const rr of info.runtimeRequirements) hash.update(rr);
141
144
  }
142
- return (info.hash = /** @type {string} */ (hash.digest("hex")));
145
+ return (info.hash = hash.digest("hex"));
143
146
  }
144
147
 
145
148
  /**