@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -9,33 +9,34 @@ const Compiler = require("./Compiler");
9
9
  const MultiCompiler = require("./MultiCompiler");
10
10
  const NormalModule = require("./NormalModule");
11
11
  const { contextify } = require("./util/identifier");
12
+ const memoize = require("./util/memoize");
13
+
14
+ const getColors = memoize(() => {
15
+ const cli = require("./cli");
16
+
17
+ return cli.createColors({ useColor: cli.isColorSupported() });
18
+ });
19
+
20
+ const BAR_LENGTH = 25;
21
+ const BLOCK_CHAR = "━";
22
+ const BULLET_ICON = "●";
12
23
 
13
24
  /** @typedef {import("tapable").Tap} Tap */
14
25
  /**
26
+ * Defines the hook type used by this module.
15
27
  * @template T, R, AdditionalOptions
16
28
  * @typedef {import("tapable").Hook<T, R, AdditionalOptions>} Hook
17
29
  */
18
30
  /** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginArgument} ProgressPluginArgument */
19
31
  /** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginOptions} ProgressPluginOptions */
20
- /** @typedef {import("./Compilation").FactorizeModuleOptions} FactorizeModuleOptions */
21
32
  /** @typedef {import("./Dependency")} Dependency */
22
33
  /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
23
34
  /** @typedef {import("./Module")} Module */
24
- /** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
25
35
  /** @typedef {import("./logging/Logger").Logger} Logger */
36
+ /** @typedef {import("./cli").Colors} Colors */
26
37
 
27
38
  /**
28
- * @template T, K, R
29
- * @typedef {import("./util/AsyncQueue")<T, K, R>} AsyncQueue
30
- */
31
-
32
- /**
33
- * @typedef {object} CountsData
34
- * @property {number} modulesCount modules count
35
- * @property {number} dependenciesCount dependencies count
36
- */
37
-
38
- /**
39
+ * Returns median.
39
40
  * @param {number} a a
40
41
  * @param {number} b b
41
42
  * @param {number} c c
@@ -46,82 +47,260 @@ const median3 = (a, b, c) => a + b + c - Math.max(a, b, c) - Math.min(a, b, c);
46
47
  /** @typedef {(percentage: number, msg: string, ...args: string[]) => void} HandlerFn */
47
48
 
48
49
  /**
50
+ * @param {Logger} logger logger
51
+ * @param {{ value: string | undefined, time: number }[]} lastStateInfo mutable state
52
+ * @param {number} percentage percentage
53
+ * @param {string} msg msg
54
+ * @param {string[]} args args
55
+ */
56
+ const reportProfile = (logger, lastStateInfo, percentage, msg, args) => {
57
+ if (percentage === 0) {
58
+ lastStateInfo.length = 0;
59
+ }
60
+ const fullState = [msg, ...args];
61
+ const state = fullState.map((s) => s.replace(/\d+\/\d+ /g, ""));
62
+ const now = Date.now();
63
+ const len = Math.max(state.length, lastStateInfo.length);
64
+ for (let i = len; i >= 0; i--) {
65
+ const stateItem = i < state.length ? state[i] : undefined;
66
+ const lastStateItem =
67
+ i < lastStateInfo.length ? lastStateInfo[i] : undefined;
68
+ if (lastStateItem) {
69
+ if (stateItem !== lastStateItem.value) {
70
+ const diff = now - lastStateItem.time;
71
+ if (lastStateItem.value) {
72
+ let reportState = lastStateItem.value;
73
+ if (i > 0) {
74
+ reportState = `${lastStateInfo[i - 1].value} > ${reportState}`;
75
+ }
76
+ const stateMsg = `${" | ".repeat(i)}${diff} ms ${reportState}`;
77
+ const d = diff;
78
+ // This depends on timing so we ignore it for coverage
79
+ /* eslint-disable no-lone-blocks */
80
+ /* istanbul ignore next */
81
+ {
82
+ if (d > 10000) {
83
+ logger.error(stateMsg);
84
+ } else if (d > 1000) {
85
+ logger.warn(stateMsg);
86
+ } else if (d > 10) {
87
+ logger.info(stateMsg);
88
+ } else if (d > 5) {
89
+ logger.log(stateMsg);
90
+ } else {
91
+ logger.debug(stateMsg);
92
+ }
93
+ }
94
+ /* eslint-enable no-lone-blocks */
95
+ }
96
+ if (stateItem === undefined) {
97
+ lastStateInfo.length = i;
98
+ } else {
99
+ lastStateItem.value = stateItem;
100
+ lastStateItem.time = now;
101
+ lastStateInfo.length = i + 1;
102
+ }
103
+ }
104
+ } else {
105
+ lastStateInfo[i] = {
106
+ value: stateItem,
107
+ time: now
108
+ };
109
+ }
110
+ }
111
+ };
112
+
113
+ /**
114
+ * @param {number} ms milliseconds
115
+ * @returns {string} human readable duration
116
+ */
117
+ const formatTime = (ms) => {
118
+ if (ms < 1000) return `${Math.round(ms)}ms`;
119
+ const seconds = Math.floor(ms / 1000);
120
+ if (seconds < 60) return `${seconds}s`;
121
+ const minutes = Math.floor(seconds / 60);
122
+ if (minutes < 60) return `${minutes}m ${seconds % 60}s`;
123
+ const hours = Math.floor(minutes / 60);
124
+ return `${hours}h ${minutes % 60}m`;
125
+ };
126
+
127
+ /**
128
+ * @param {string} name progress bar name
129
+ * @param {string} color progress bar color
130
+ * @param {number} width progress bar width in characters
131
+ * @returns {(percentage: number) => string} bar renderer
132
+ */
133
+ const createReportBar = (name, color, width) => {
134
+ const c = getColors();
135
+ const colorFn = color in c ? c[/** @type {keyof Colors} */ (color)] : c.green;
136
+ // The bar only changes when the filled width does, so cache it between steps.
137
+ let lastFilled = -1;
138
+ let lastBar = "";
139
+
140
+ return (percentage) => {
141
+ const filled = Math.round(percentage * width);
142
+ if (filled === lastFilled) return lastBar;
143
+ lastFilled = filled;
144
+ const filledStr = BLOCK_CHAR.repeat(filled);
145
+ const emptyStr = BLOCK_CHAR.repeat(width - filled);
146
+ lastBar = `${[BULLET_ICON, name, filledStr].map(colorFn).join(" ")}${c.white(
147
+ emptyStr
148
+ )}`;
149
+ return lastBar;
150
+ };
151
+ };
152
+
153
+ /** @typedef {Required<Exclude<NonNullable<ProgressPluginOptions["progressBar"]>, boolean | "auto">>} ProgressBarOptions */
154
+
155
+ /** @type {ProgressBarOptions} */
156
+ const DEFAULT_PROGRESS_BAR = {
157
+ name: "Build",
158
+ color: "green",
159
+ width: BAR_LENGTH
160
+ };
161
+
162
+ /** @typedef {{ progressBar?: ProgressBarOptions | false, estimatedTime?: boolean, phaseTimings?: boolean }} DefaultHandlerOptions */
163
+
164
+ /**
165
+ * Creates a default handler.
49
166
  * @param {boolean | null | undefined} profile need profile
50
167
  * @param {Logger} logger logger
168
+ * @param {DefaultHandlerOptions=} options display options
51
169
  * @returns {HandlerFn} default handler
52
170
  */
53
- const createDefaultHandler = (profile, logger) => {
171
+ const createDefaultHandler = (profile, logger, options = {}) => {
172
+ const {
173
+ progressBar = false,
174
+ estimatedTime = false,
175
+ phaseTimings = false
176
+ } = options;
177
+ const trackTime = estimatedTime || phaseTimings;
178
+
54
179
  /** @type {{ value: string | undefined, time: number }[]} */
55
180
  const lastStateInfo = [];
181
+ let buildStart = 0;
182
+ // Exponential moving average of the estimated total build time (0 = unset).
183
+ let smoothedTotal = 0;
184
+ /** @type {Map<string, number>} accumulated ms per phase (msg) */
185
+ const phaseTimes = new Map();
186
+ /** @type {string | undefined} */
187
+ let currentPhase;
188
+ let currentPhaseStart = 0;
189
+ let summaryReported = false;
190
+ /** @type {((percentage: number) => string) | undefined} */
191
+ let reportBar;
192
+
193
+ /**
194
+ * @param {number} now current timestamp
195
+ * @returns {void}
196
+ */
197
+ const reportPhaseSummary = (now) => {
198
+ if (!phaseTimings || summaryReported || phaseTimes.size === 0) return;
199
+ summaryReported = true;
200
+ // Flush the phase still running at completion.
201
+ if (currentPhase !== undefined) {
202
+ phaseTimes.set(
203
+ currentPhase,
204
+ (phaseTimes.get(currentPhase) || 0) + (now - currentPhaseStart)
205
+ );
206
+ }
207
+ const total = now - buildStart;
208
+ logger.info(`Build completed in ${formatTime(total)}`);
209
+ logger.info("Phase breakdown:");
210
+ for (const [phase, duration] of phaseTimes) {
211
+ if (duration > 0) {
212
+ const percent = total > 0 ? Math.round((duration / total) * 100) : 0;
213
+ logger.info(` ${phase}: ${formatTime(duration)} (${percent}%)`);
214
+ }
215
+ }
216
+ };
56
217
 
57
218
  /** @type {HandlerFn} */
58
219
  const defaultHandler = (percentage, msg, ...args) => {
59
220
  if (profile) {
60
- if (percentage === 0) {
61
- lastStateInfo.length = 0;
221
+ reportProfile(logger, lastStateInfo, percentage, msg, args);
222
+ }
223
+
224
+ const now = trackTime ? Date.now() : 0;
225
+
226
+ if (trackTime && percentage === 0) {
227
+ buildStart = now;
228
+ smoothedTotal = 0;
229
+ summaryReported = false;
230
+ phaseTimes.clear();
231
+ currentPhase = undefined;
232
+ currentPhaseStart = now;
233
+ }
234
+
235
+ // Accumulate time under the previous phase whenever the top-level message changes.
236
+ if (phaseTimings && msg && msg !== currentPhase) {
237
+ if (currentPhase !== undefined) {
238
+ phaseTimes.set(
239
+ currentPhase,
240
+ (phaseTimes.get(currentPhase) || 0) + (now - currentPhaseStart)
241
+ );
62
242
  }
63
- const fullState = [msg, ...args];
64
- const state = fullState.map((s) => s.replace(/\d+\/\d+ /g, ""));
65
- const now = Date.now();
66
- const len = Math.max(state.length, lastStateInfo.length);
67
- for (let i = len; i >= 0; i--) {
68
- const stateItem = i < state.length ? state[i] : undefined;
69
- const lastStateItem =
70
- i < lastStateInfo.length ? lastStateInfo[i] : undefined;
71
- if (lastStateItem) {
72
- if (stateItem !== lastStateItem.value) {
73
- const diff = now - lastStateItem.time;
74
- if (lastStateItem.value) {
75
- let reportState = lastStateItem.value;
76
- if (i > 0) {
77
- reportState = `${lastStateInfo[i - 1].value} > ${reportState}`;
78
- }
79
- const stateMsg = `${" | ".repeat(i)}${diff} ms ${reportState}`;
80
- const d = diff;
81
- // This depends on timing so we ignore it for coverage
82
- /* eslint-disable no-lone-blocks */
83
- /* istanbul ignore next */
84
- {
85
- if (d > 10000) {
86
- logger.error(stateMsg);
87
- } else if (d > 1000) {
88
- logger.warn(stateMsg);
89
- } else if (d > 10) {
90
- logger.info(stateMsg);
91
- } else if (d > 5) {
92
- logger.log(stateMsg);
93
- } else {
94
- logger.debug(stateMsg);
95
- }
96
- }
97
- /* eslint-enable no-lone-blocks */
98
- }
99
- if (stateItem === undefined) {
100
- lastStateInfo.length = i;
101
- } else {
102
- lastStateItem.value = stateItem;
103
- lastStateItem.time = now;
104
- lastStateInfo.length = i + 1;
105
- }
106
- }
107
- } else {
108
- lastStateInfo[i] = {
109
- value: stateItem,
110
- time: now
111
- };
112
- }
243
+ currentPhase = msg;
244
+ currentPhaseStart = now;
245
+ }
246
+
247
+ /** @type {string | undefined} */
248
+ let eta;
249
+ if (estimatedTime && percentage > 0.05 && percentage < 1) {
250
+ const elapsed = now - buildStart;
251
+ const rawTotal = elapsed / percentage;
252
+ smoothedTotal =
253
+ smoothedTotal > 0 ? smoothedTotal * 0.7 + rawTotal * 0.3 : rawTotal;
254
+ const remaining = smoothedTotal - elapsed;
255
+ if (remaining > 0) eta = `ETA: ${formatTime(remaining)}`;
256
+ }
257
+
258
+ if (progressBar) {
259
+ // Build the bar renderer once, then reuse it across every step.
260
+ if (reportBar === undefined) {
261
+ reportBar = createReportBar(
262
+ progressBar.name,
263
+ progressBar.color,
264
+ progressBar.width
265
+ );
266
+ }
267
+ const c = getColors();
268
+ /** @type {string} */
269
+ const currentBar = reportBar(percentage);
270
+ const suffix = eta ? ` ${eta}` : "";
271
+
272
+ if (percentage === 1) {
273
+ logger.status();
274
+ reportPhaseSummary(now);
275
+ } else if (msg) {
276
+ logger.status(
277
+ `${currentBar} (${Math.floor(percentage * 100)}%)${suffix}`,
278
+ `\n${[msg, ...args].map(c.gray).join(" ")}`
279
+ );
280
+ } else {
281
+ logger.status(
282
+ `${currentBar} (${Math.floor(percentage * 100)}%)${suffix}`
283
+ );
113
284
  }
285
+ return;
286
+ }
287
+
288
+ if (eta) {
289
+ logger.status(`${Math.floor(percentage * 100)}%`, msg, ...args, eta);
290
+ } else {
291
+ logger.status(`${Math.floor(percentage * 100)}%`, msg, ...args);
292
+ }
293
+ if (percentage === 1 || (!msg && args.length === 0)) {
294
+ if (percentage === 1) reportPhaseSummary(now);
295
+ logger.status();
114
296
  }
115
- logger.status(`${Math.floor(percentage * 100)}%`, msg, ...args);
116
- if (percentage === 1 || (!msg && args.length === 0)) logger.status();
117
297
  };
118
298
 
119
299
  return defaultHandler;
120
300
  };
121
301
 
122
- const SKIPPED_QUEUE_CONTEXTS = ["import-module", "load-module"];
123
-
124
302
  /**
303
+ * Defines the report progress callback.
125
304
  * @callback ReportProgress
126
305
  * @param {number} p percentage
127
306
  * @param {...string} args additional arguments
@@ -142,11 +321,40 @@ const DEFAULT_OPTIONS = {
142
321
  dependencies: true,
143
322
  activeModules: false,
144
323
  entries: true,
145
- percentBy: null
324
+ percentBy: null,
325
+ progressBar: false,
326
+ estimatedTime: false,
327
+ phaseTimings: false
328
+ };
329
+
330
+ /**
331
+ * Whether progress can be rendered in place (interactive TTY). The bar is only
332
+ * useful here; in append-only output every update becomes a new line.
333
+ * @param {Compiler | MultiCompiler} compiler compiler
334
+ * @returns {boolean} true when output is an interactive terminal
335
+ */
336
+ const isInteractive = (compiler) => {
337
+ const c =
338
+ compiler instanceof MultiCompiler ? compiler.compilers[0] : compiler;
339
+ const infrastructureLogging =
340
+ c && c.options && c.options.infrastructureLogging;
341
+ if (
342
+ infrastructureLogging &&
343
+ typeof infrastructureLogging.appendOnly === "boolean"
344
+ ) {
345
+ return !infrastructureLogging.appendOnly;
346
+ }
347
+ const stream =
348
+ (infrastructureLogging && infrastructureLogging.stream) || process.stderr;
349
+ return (
350
+ Boolean(/** @type {NodeJS.WriteStream} */ (stream).isTTY) &&
351
+ process.env.TERM !== "dumb"
352
+ );
146
353
  };
147
354
 
148
355
  class ProgressPlugin {
149
356
  /**
357
+ * Returns a progress reporter, if any.
150
358
  * @param {Compiler} compiler the current compiler
151
359
  * @returns {ReportProgress | undefined} a progress reporter, if any
152
360
  */
@@ -155,6 +363,7 @@ class ProgressPlugin {
155
363
  }
156
364
 
157
365
  /**
366
+ * Creates an instance of ProgressPlugin.
158
367
  * @param {ProgressPluginArgument} options options
159
368
  */
160
369
  constructor(options = {}) {
@@ -167,30 +376,73 @@ class ProgressPlugin {
167
376
  /** @type {ProgressPluginOptions} */
168
377
  this.options = options;
169
378
 
170
- this.profile = options.profile || DEFAULT_OPTIONS.profile;
171
- this.handler = options.handler;
172
- this.modulesCount = options.modulesCount || DEFAULT_OPTIONS.modulesCount;
173
- this.dependenciesCount =
174
- options.dependenciesCount || DEFAULT_OPTIONS.dependenciesCount;
175
- this.showEntries = options.entries || DEFAULT_OPTIONS.entries;
176
- this.showModules = options.modules || DEFAULT_OPTIONS.modules;
177
- this.showDependencies =
178
- options.dependencies || DEFAULT_OPTIONS.dependencies;
179
- this.showActiveModules =
180
- options.activeModules || DEFAULT_OPTIONS.activeModules;
181
- this.percentBy = options.percentBy || DEFAULT_OPTIONS.percentBy;
379
+ const merged = { ...DEFAULT_OPTIONS, ...options };
380
+ /** @type {boolean | null} */
381
+ this.profile = merged.profile;
382
+ /** @type {HandlerFn | undefined} */
383
+ this.handler = merged.handler;
384
+ /** @type {number} */
385
+ this.modulesCount = merged.modulesCount;
386
+ /** @type {number} */
387
+ this.dependenciesCount = merged.dependenciesCount;
388
+ /** @type {boolean} */
389
+ this.showEntries = merged.entries;
390
+ /** @type {boolean} */
391
+ this.showModules = merged.modules;
392
+ /** @type {boolean} */
393
+ this.showDependencies = merged.dependencies;
394
+ /** @type {boolean} */
395
+ this.showActiveModules = merged.activeModules;
396
+ this.percentBy = merged.percentBy;
397
+
398
+ const progressBar = merged.progressBar;
399
+ /** @type {ProgressBarOptions | false | "auto"} */
400
+ this.progressBar =
401
+ progressBar === "auto"
402
+ ? "auto"
403
+ : progressBar
404
+ ? {
405
+ ...DEFAULT_PROGRESS_BAR,
406
+ ...(progressBar === true ? {} : progressBar)
407
+ }
408
+ : false;
409
+ /** @type {boolean} */
410
+ this.estimatedTime = merged.estimatedTime;
411
+ /** @type {boolean} */
412
+ this.phaseTimings = merged.phaseTimings;
182
413
  }
183
414
 
184
415
  /**
416
+ * Applies the plugin by registering its hooks on the compiler.
185
417
  * @param {Compiler | MultiCompiler} compiler webpack compiler
186
418
  * @returns {void}
187
419
  */
188
420
  apply(compiler) {
421
+ let progressBar = this.progressBar;
422
+ // webpack@6 (opt-in today via `experiments.futureDefaults`) turns an unset
423
+ // progressBar into the auto bar; an explicit `false` is still respected.
424
+ if (progressBar === false && this.options.progressBar === undefined) {
425
+ const c =
426
+ compiler instanceof MultiCompiler ? compiler.compilers[0] : compiler;
427
+ if (c && c.options && c.options.experiments.futureDefaults) {
428
+ progressBar = "auto";
429
+ }
430
+ }
431
+ if (progressBar === "auto") {
432
+ progressBar = isInteractive(compiler)
433
+ ? { ...DEFAULT_PROGRESS_BAR }
434
+ : false;
435
+ }
189
436
  const handler =
190
437
  this.handler ||
191
438
  createDefaultHandler(
192
439
  this.profile,
193
- compiler.getInfrastructureLogger("webpack.Progress")
440
+ compiler.getInfrastructureLogger("webpack.Progress"),
441
+ {
442
+ progressBar,
443
+ estimatedTime: this.estimatedTime,
444
+ phaseTimings: this.phaseTimings
445
+ }
194
446
  );
195
447
  if (compiler instanceof MultiCompiler) {
196
448
  this._applyOnMultiCompiler(compiler, handler);
@@ -200,6 +452,7 @@ class ProgressPlugin {
200
452
  }
201
453
 
202
454
  /**
455
+ * Apply on multi compiler.
203
456
  * @param {MultiCompiler} compiler webpack multi-compiler
204
457
  * @param {HandlerFn} handler function that executes for every progress step
205
458
  * @returns {void}
@@ -219,6 +472,7 @@ class ProgressPlugin {
219
472
  }
220
473
 
221
474
  /**
475
+ * Processes the provided compiler.
222
476
  * @param {Compiler} compiler webpack compiler
223
477
  * @param {HandlerFn} handler function that executes for every progress step
224
478
  * @returns {void}
@@ -246,9 +500,7 @@ class ProgressPlugin {
246
500
  let lastDependenciesCount = 0;
247
501
  let lastEntriesCount = 0;
248
502
  let modulesCount = 0;
249
- let skippedModulesCount = 0;
250
503
  let dependenciesCount = 0;
251
- let skippedDependenciesCount = 0;
252
504
  let entriesCount = 1;
253
505
  let doneModules = 0;
254
506
  let doneDependencies = 0;
@@ -332,15 +584,7 @@ class ProgressPlugin {
332
584
  lastUpdate = Date.now();
333
585
  };
334
586
 
335
- /**
336
- * @template T
337
- * @param {AsyncQueue<FactorizeModuleOptions, string, Module | ModuleFactoryResult>} factorizeQueue async queue
338
- * @param {T} _item item
339
- */
340
- const factorizeAdd = (factorizeQueue, _item) => {
341
- if (SKIPPED_QUEUE_CONTEXTS.includes(factorizeQueue.getContext())) {
342
- skippedDependenciesCount++;
343
- }
587
+ const factorizeAdd = () => {
344
588
  dependenciesCount++;
345
589
  if (dependenciesCount < 50 || dependenciesCount % 100 === 0) {
346
590
  updateThrottled();
@@ -354,21 +598,14 @@ class ProgressPlugin {
354
598
  }
355
599
  };
356
600
 
357
- /**
358
- * @template T
359
- * @param {AsyncQueue<Module, string, Module>} addModuleQueue async queue
360
- * @param {T} _item item
361
- */
362
- const moduleAdd = (addModuleQueue, _item) => {
363
- if (SKIPPED_QUEUE_CONTEXTS.includes(addModuleQueue.getContext())) {
364
- skippedModulesCount++;
365
- }
601
+ const moduleAdd = () => {
366
602
  modulesCount++;
367
603
  if (modulesCount < 50 || modulesCount % 100 === 0) updateThrottled();
368
604
  };
369
605
 
370
606
  // only used when showActiveModules is set
371
607
  /**
608
+ * Processes the provided module.
372
609
  * @param {Module} module the module
373
610
  */
374
611
  const moduleBuild = (module) => {
@@ -381,6 +618,7 @@ class ProgressPlugin {
381
618
  };
382
619
 
383
620
  /**
621
+ * Processes the provided entry.
384
622
  * @param {Dependency} entry entry dependency
385
623
  * @param {EntryOptions} options options object
386
624
  */
@@ -390,6 +628,7 @@ class ProgressPlugin {
390
628
  };
391
629
 
392
630
  /**
631
+ * Processes the provided module.
393
632
  * @param {Module} module the module
394
633
  */
395
634
  const moduleDone = (module) => {
@@ -412,6 +651,7 @@ class ProgressPlugin {
412
651
  };
413
652
 
414
653
  /**
654
+ * Processes the provided entry.
415
655
  * @param {Dependency} entry entry dependency
416
656
  * @param {EntryOptions} options options object
417
657
  */
@@ -420,72 +660,20 @@ class ProgressPlugin {
420
660
  update();
421
661
  };
422
662
 
423
- const cache = compiler.getCache(PLUGIN_NAME).getItemCache("counts", null);
424
-
425
- /** @type {Promise<CountsData> | undefined} */
426
- let cacheGetPromise;
427
-
428
- compiler.hooks.beforeCompile.tap(PLUGIN_NAME, () => {
429
- if (!cacheGetPromise) {
430
- cacheGetPromise = cache.getPromise().then(
431
- (data) => {
432
- if (data) {
433
- lastModulesCount = lastModulesCount || data.modulesCount;
434
- lastDependenciesCount =
435
- lastDependenciesCount || data.dependenciesCount;
436
- }
437
- return data;
438
- },
439
- (_err) => {
440
- // Ignore error
441
- }
442
- );
443
- }
444
- });
445
-
446
- compiler.hooks.afterCompile.tapPromise(PLUGIN_NAME, (compilation) => {
447
- if (compilation.compiler.isChild()) return Promise.resolve();
448
- return /** @type {Promise<CountsData>} */ (cacheGetPromise).then(
449
- async (oldData) => {
450
- const realModulesCount = modulesCount - skippedModulesCount;
451
- const realDependenciesCount =
452
- dependenciesCount - skippedDependenciesCount;
453
-
454
- if (
455
- !oldData ||
456
- oldData.modulesCount !== realModulesCount ||
457
- oldData.dependenciesCount !== realDependenciesCount
458
- ) {
459
- await cache.storePromise({
460
- modulesCount: realModulesCount,
461
- dependenciesCount: realDependenciesCount
462
- });
463
- }
464
- }
465
- );
466
- });
467
-
468
663
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
469
664
  if (compilation.compiler.isChild()) return;
665
+ // Carry the previous compilation's counts into the next as an estimate
666
+ // (helps watch rebuilds); not persisted, to avoid cache invalidation.
470
667
  lastModulesCount = modulesCount;
471
668
  lastEntriesCount = entriesCount;
472
669
  lastDependenciesCount = dependenciesCount;
473
- modulesCount =
474
- skippedModulesCount =
475
- dependenciesCount =
476
- skippedDependenciesCount =
477
- entriesCount =
478
- 0;
670
+ modulesCount = dependenciesCount = entriesCount = 0;
479
671
  doneModules = doneDependencies = doneEntries = 0;
480
672
 
481
- compilation.factorizeQueue.hooks.added.tap(PLUGIN_NAME, (item) =>
482
- factorizeAdd(compilation.factorizeQueue, item)
483
- );
673
+ compilation.factorizeQueue.hooks.added.tap(PLUGIN_NAME, factorizeAdd);
484
674
  compilation.factorizeQueue.hooks.result.tap(PLUGIN_NAME, factorizeDone);
485
675
 
486
- compilation.addModuleQueue.hooks.added.tap(PLUGIN_NAME, (item) =>
487
- moduleAdd(compilation.addModuleQueue, item)
488
- );
676
+ compilation.addModuleQueue.hooks.added.tap(PLUGIN_NAME, moduleAdd);
489
677
  compilation.processDependenciesQueue.hooks.result.tap(
490
678
  PLUGIN_NAME,
491
679
  moduleDone
@@ -606,6 +794,7 @@ class ProgressPlugin {
606
794
  }
607
795
  });
608
796
  /**
797
+ * Processes the provided hook.
609
798
  * @template {Hook<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>} T
610
799
  * @param {T} hook hook
611
800
  * @param {number} progress progress from 0 to 1
@@ -629,6 +818,7 @@ class ProgressPlugin {
629
818
  handler(progress, category, name);
630
819
  },
631
820
  /**
821
+ * Processes the provided tap.
632
822
  * @param {Tap} tap tap
633
823
  */
634
824
  tap(tap) {