@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
@@ -12,6 +12,7 @@ const Cache = require("../Cache");
12
12
  /** @typedef {import("../Compiler")} Compiler */
13
13
 
14
14
  /**
15
+ * Defines the memory with gc cache plugin options type used by this module.
15
16
  * @typedef {object} MemoryWithGcCachePluginOptions
16
17
  * @property {number} maxGenerations max generations
17
18
  */
@@ -20,14 +21,16 @@ const PLUGIN_NAME = "MemoryWithGcCachePlugin";
20
21
 
21
22
  class MemoryWithGcCachePlugin {
22
23
  /**
24
+ * Creates an instance of MemoryWithGcCachePlugin.
23
25
  * @param {MemoryWithGcCachePluginOptions} options options
24
26
  */
25
27
  constructor({ maxGenerations }) {
28
+ /** @type {number} */
26
29
  this._maxGenerations = maxGenerations;
27
30
  }
28
31
 
29
32
  /**
30
- * Apply the plugin
33
+ * Applies the plugin by registering its hooks on the compiler.
31
34
  * @param {Compiler} compiler the compiler instance
32
35
  * @returns {void}
33
36
  */
@@ -7,9 +7,10 @@
7
7
 
8
8
  const FileSystemInfo = require("../FileSystemInfo");
9
9
  const ProgressPlugin = require("../ProgressPlugin");
10
- const { formatSize } = require("../SizeFormatHelpers");
10
+ const { getReferencedFilenames } = require("../serialization/FileMiddleware");
11
11
  const SerializerMiddleware = require("../serialization/SerializerMiddleware");
12
12
  const LazySet = require("../util/LazySet");
13
+ const formatSize = require("../util/formatSize");
13
14
  const makeSerializable = require("../util/makeSerializable");
14
15
  const memoize = require("../util/memoize");
15
16
  const {
@@ -34,9 +35,21 @@ const {
34
35
  /** @typedef {Set<string>} Items */
35
36
  /** @typedef {Set<string>} BuildDependencies */
36
37
  /** @typedef {Map<string, PackItemInfo>} ItemInfo */
38
+ /** @typedef {{ firstSeen: number, size: number }} UnreferencedFile */
39
+ /** @typedef {Map<string, UnreferencedFile>} UnreferencedFiles */
40
+
41
+ // Unreferenced files are kept for this long to not race concurrent builds sharing the cache directory.
42
+ const CLEANUP_GRACE_PERIOD = 30 * 60 * 1000;
43
+ // Records when each unreferenced file was first seen. Aging by recorded time keeps
44
+ // orphans expiring across caches restored with refreshed modification times.
45
+ const UNREFERENCED_FILE = "unreferenced.json";
46
+ // A file written this recently may belong to a concurrent build that reused the name,
47
+ // in which case the recorded time describes the previous file and must not be trusted.
48
+ const CLEANUP_RECENT_WRITE_PERIOD = 60 * 1000;
37
49
 
38
50
  class PackContainer {
39
51
  /**
52
+ * Creates an instance of PackContainer.
40
53
  * @param {Pack} data stored data
41
54
  * @param {string} version version identifier
42
55
  * @param {Snapshot} buildSnapshot snapshot of all build dependencies
@@ -67,6 +80,7 @@ class PackContainer {
67
80
  }
68
81
 
69
82
  /**
83
+ * Serializes this instance into the provided serializer context.
70
84
  * @param {ObjectSerializerContext} context context
71
85
  */
72
86
  serialize({ write, writeLazy }) {
@@ -80,6 +94,7 @@ class PackContainer {
80
94
  }
81
95
 
82
96
  /**
97
+ * Restores this instance from the provided deserializer context.
83
98
  * @param {ObjectDeserializerContext} context context
84
99
  */
85
100
  deserialize({ read }) {
@@ -102,10 +117,11 @@ const MIN_CONTENT_SIZE = 1024 * 1024; // 1 MB
102
117
  const CONTENT_COUNT_TO_MERGE = 10;
103
118
  const MIN_ITEMS_IN_FRESH_PACK = 100;
104
119
  const MAX_ITEMS_IN_FRESH_PACK = 50000;
105
- const MAX_TIME_IN_FRESH_PACK = 1 * 60 * 1000; // 1 min
120
+ const MAX_TIME_IN_FRESH_PACK = 60 * 1000; // 1 min
106
121
 
107
122
  class PackItemInfo {
108
123
  /**
124
+ * Creates an instance of PackItemInfo.
109
125
  * @param {string} identifier identifier of item
110
126
  * @param {string | null | undefined} etag etag of item
111
127
  * @param {Data} value fresh value of item
@@ -126,6 +142,7 @@ class PackItemInfo {
126
142
 
127
143
  class Pack {
128
144
  /**
145
+ * Creates an instance of Pack.
129
146
  * @param {Logger} logger a logger
130
147
  * @param {number} maxAge max age of cache items
131
148
  */
@@ -149,6 +166,7 @@ class Pack {
149
166
  }
150
167
 
151
168
  /**
169
+ * Adds the provided identifier to the pack.
152
170
  * @param {string} identifier identifier
153
171
  */
154
172
  _addRequest(identifier) {
@@ -170,6 +188,7 @@ class Pack {
170
188
  }
171
189
 
172
190
  /**
191
+ * Returns cached content.
173
192
  * @param {string} identifier unique name for the resource
174
193
  * @param {string | null} etag etag of the resource
175
194
  * @returns {Data} cached content
@@ -193,6 +212,7 @@ class Pack {
193
212
  }
194
213
 
195
214
  /**
215
+ * Updates value using the provided identifier.
196
216
  * @param {string} identifier unique name for the resource
197
217
  * @param {string | null} etag etag of the resource
198
218
  * @param {Data} data cached content
@@ -244,6 +264,7 @@ class Pack {
244
264
  }
245
265
 
246
266
  /**
267
+ * Returns new location of data entries.
247
268
  * @returns {number} new location of data entries
248
269
  */
249
270
  _findLocation() {
@@ -254,6 +275,7 @@ class Pack {
254
275
  }
255
276
 
256
277
  /**
278
+ * Gc and update location.
257
279
  * @private
258
280
  * @param {Items} items items
259
281
  * @param {Items} usedItems used items
@@ -559,6 +581,41 @@ class Pack {
559
581
  }
560
582
  }
561
583
 
584
+ /**
585
+ * Drops every content whose items all expired. Unlike a partial collection this
586
+ * never unpacks, so it is not limited to a single content per store and lets a
587
+ * long unused cache shrink in one go instead of one pack per build.
588
+ */
589
+ _gcExpiredContent() {
590
+ const now = Date.now();
591
+ let packCount = 0;
592
+ let itemCount = 0;
593
+ for (let loc = 0; loc < this.content.length; loc++) {
594
+ const content = this.content[loc];
595
+ if (!content) continue;
596
+ let expired = true;
597
+ for (const identifier of content.items) {
598
+ const info = this.itemInfo.get(identifier);
599
+ if (info !== undefined && now - info.lastAccess <= this.maxAge) {
600
+ expired = false;
601
+ break;
602
+ }
603
+ }
604
+ if (!expired) continue;
605
+ for (const identifier of content.items) this.itemInfo.delete(identifier);
606
+ this.content[loc] = undefined;
607
+ packCount++;
608
+ itemCount += content.items.size;
609
+ }
610
+ if (packCount > 0) {
611
+ this.logger.log(
612
+ "Garbage Collected %d completely expired packs with %d items",
613
+ packCount,
614
+ itemCount
615
+ );
616
+ }
617
+ }
618
+
562
619
  /**
563
620
  * Find the content with the oldest item and run GC on that.
564
621
  * Only runs for one content to avoid large invalidation.
@@ -571,11 +628,10 @@ class Pack {
571
628
  oldest = info;
572
629
  }
573
630
  }
574
- if (
575
- Date.now() - /** @type {PackItemInfo} */ (oldest).lastAccess >
576
- this.maxAge
577
- ) {
578
- const loc = /** @type {PackItemInfo} */ (oldest).location;
631
+ // collecting expired content may have left no items at all
632
+ if (oldest === undefined) return;
633
+ if (Date.now() - oldest.lastAccess > this.maxAge) {
634
+ const loc = oldest.location;
579
635
  if (loc < 0) return;
580
636
  const content = /** @type {PackContent} */ (this.content[loc]);
581
637
  const items = new Set(content.items);
@@ -604,12 +660,14 @@ class Pack {
604
660
  }
605
661
 
606
662
  /**
663
+ * Serializes this instance into the provided serializer context.
607
664
  * @param {ObjectSerializerContext} context context
608
665
  */
609
666
  serialize({ write, writeSeparate }) {
610
667
  this._persistFreshContent();
611
668
  this._optimizeSmallContent();
612
669
  this._optimizeUnusedContent();
670
+ this._gcExpiredContent();
613
671
  this._gcOldestContent();
614
672
  for (const identifier of this.itemInfo.keys()) {
615
673
  write(identifier);
@@ -637,6 +695,7 @@ class Pack {
637
695
  }
638
696
 
639
697
  /**
698
+ * Restores this instance from the provided deserializer context.
640
699
  * @param {ObjectDeserializerContext & { logger: Logger }} context context
641
700
  */
642
701
  deserialize({ read, logger }) {
@@ -694,13 +753,16 @@ makeSerializable(Pack, "webpack/lib/cache/PackFileCacheStrategy", "Pack");
694
753
 
695
754
  class PackContentItems {
696
755
  /**
756
+ * Creates an instance of PackContentItems.
697
757
  * @param {Content} map items
698
758
  */
699
759
  constructor(map) {
760
+ /** @type {Content} */
700
761
  this.map = map;
701
762
  }
702
763
 
703
764
  /**
765
+ * Serializes this instance into the provided serializer context.
704
766
  * @param {ObjectSerializerContext & { logger: Logger, profile: boolean | undefined }} context context
705
767
  */
706
768
  serialize({ write, snapshot, rollback, logger, profile }) {
@@ -778,13 +840,14 @@ class PackContentItems {
778
840
  }
779
841
 
780
842
  /**
843
+ * Restores this instance from the provided deserializer context.
781
844
  * @param {ObjectDeserializerContext & { logger: Logger, profile: boolean | undefined }} context context
782
845
  */
783
846
  deserialize({ read, logger, profile }) {
784
847
  if (read()) {
785
848
  this.map = read();
786
849
  } else if (profile) {
787
- /** @type {Map<EXPECTED_ANY, EXPECTED_ANY>} */
850
+ /** @type {Content} */
788
851
  const map = new Map();
789
852
  let key = read();
790
853
  while (key !== null) {
@@ -810,7 +873,7 @@ class PackContentItems {
810
873
  }
811
874
  this.map = map;
812
875
  } else {
813
- /** @type {Map<EXPECTED_ANY, EXPECTED_ANY>} */
876
+ /** @type {Content} */
814
877
  const map = new Map();
815
878
  let key = read();
816
879
  while (key !== null) {
@@ -851,6 +914,7 @@ class PackContent {
851
914
  */
852
915
 
853
916
  /**
917
+ * Creates an instance of PackContent.
854
918
  * @param {Items} items keys
855
919
  * @param {Items} usedItems used keys
856
920
  * @param {PackContentItems | (() => Promise<PackContentItems>)} dataOrFn sync or async content
@@ -875,6 +939,7 @@ class PackContent {
875
939
  }
876
940
 
877
941
  /**
942
+ * Returns result.
878
943
  * @param {string} identifier identifier
879
944
  * @returns {string | Promise<string>} result
880
945
  */
@@ -927,6 +992,7 @@ class PackContent {
927
992
  }
928
993
 
929
994
  /**
995
+ * Returns maybe a promise if lazy.
930
996
  * @param {string} reason explanation why unpack is necessary
931
997
  * @returns {void | Promise<void>} maybe a promise if lazy
932
998
  */
@@ -971,6 +1037,7 @@ class PackContent {
971
1037
  }
972
1038
 
973
1039
  /**
1040
+ * Returns the estimated size for the requested source type.
974
1041
  * @returns {number} size of the content or -1 if not known
975
1042
  */
976
1043
  getSize() {
@@ -985,6 +1052,7 @@ class PackContent {
985
1052
  }
986
1053
 
987
1054
  /**
1055
+ * Processes the provided identifier.
988
1056
  * @param {string} identifier identifier
989
1057
  */
990
1058
  delete(identifier) {
@@ -994,6 +1062,7 @@ class PackContent {
994
1062
  }
995
1063
 
996
1064
  /**
1065
+ * Processes the provided write.
997
1066
  * @param {(lazy: LazyFunction) => (() => PackContentItems | Promise<PackContentItems>)} write write function
998
1067
  * @returns {void}
999
1068
  */
@@ -1086,6 +1155,7 @@ class PackContent {
1086
1155
  }
1087
1156
 
1088
1157
  /**
1158
+ * Allow collecting memory.
1089
1159
  * @param {Buffer} buf buffer
1090
1160
  * @returns {Buffer} buffer that can be collected
1091
1161
  */
@@ -1099,6 +1169,7 @@ const allowCollectingMemory = (buf) => {
1099
1169
 
1100
1170
  class PackFileCacheStrategy {
1101
1171
  /**
1172
+ * Creates an instance of PackFileCacheStrategy.
1102
1173
  * @param {object} options options
1103
1174
  * @param {Compiler} options.compiler the compiler
1104
1175
  * @param {IntermediateFileSystem} options.fs the filesystem
@@ -1110,7 +1181,7 @@ class PackFileCacheStrategy {
1110
1181
  * @param {number} options.maxAge max age of cache items
1111
1182
  * @param {boolean=} options.profile track and log detailed timing information for individual cache items
1112
1183
  * @param {boolean=} options.allowCollectingMemory allow to collect unused memory created during deserialization
1113
- * @param {false | "gzip" | "brotli"=} options.compression compression used
1184
+ * @param {false | "gzip" | "brotli" | "zstd"=} options.compression compression used
1114
1185
  * @param {boolean=} options.readonly disable storing cache into filesystem
1115
1186
  */
1116
1187
  constructor({
@@ -1142,6 +1213,8 @@ class PackFileCacheStrategy {
1142
1213
  });
1143
1214
  /** @type {Compiler} */
1144
1215
  this.compiler = compiler;
1216
+ /** @type {IntermediateFileSystem} */
1217
+ this.fs = fs;
1145
1218
  /** @type {string} */
1146
1219
  this.context = context;
1147
1220
  /** @type {string} */
@@ -1158,15 +1231,25 @@ class PackFileCacheStrategy {
1158
1231
  this.readonly = readonly;
1159
1232
  /** @type {boolean | undefined} */
1160
1233
  this.allowCollectingMemory = allowCollectingMemory;
1161
- /** @type {false | "gzip" | "brotli" | undefined} */
1234
+ // referenced names per on-disk file, versioned by mtime since concurrent
1235
+ // processes may rewrite packs in place under the same name
1236
+ /** @type {Map<string, { mtimeMs: number, referenced: string[] }>} */
1237
+ this._referencedFilesCache = new Map();
1238
+ /** @type {false | "gzip" | "brotli" | "zstd" | undefined} */
1162
1239
  this.compression = compression;
1240
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1241
+ if (compression === "zstd" && !require("zlib").createZstdCompress) {
1242
+ throw new Error("cache.compression: 'zstd' requires Node.js >= 22.15.0");
1243
+ }
1163
1244
  /** @type {string} */
1164
1245
  this._extension =
1165
1246
  compression === "brotli"
1166
1247
  ? ".pack.br"
1167
1248
  : compression === "gzip"
1168
1249
  ? ".pack.gz"
1169
- : ".pack";
1250
+ : compression === "zstd"
1251
+ ? ".pack.zst"
1252
+ : ".pack";
1170
1253
  /** @type {SnapshotOptions} */
1171
1254
  this.snapshot = snapshot;
1172
1255
  /** @type {BuildDependencies} */
@@ -1186,6 +1269,7 @@ class PackFileCacheStrategy {
1186
1269
  }
1187
1270
 
1188
1271
  /**
1272
+ * Returns pack.
1189
1273
  * @returns {Promise<Pack>} pack
1190
1274
  */
1191
1275
  _getPack() {
@@ -1196,6 +1280,7 @@ class PackFileCacheStrategy {
1196
1280
  }
1197
1281
 
1198
1282
  /**
1283
+ * Returns the pack.
1199
1284
  * @returns {Promise<Pack>} the pack
1200
1285
  */
1201
1286
  _openPack() {
@@ -1362,6 +1447,7 @@ class PackFileCacheStrategy {
1362
1447
  }
1363
1448
 
1364
1449
  /**
1450
+ * Returns promise.
1365
1451
  * @param {string} identifier unique name for the resource
1366
1452
  * @param {Etag | null} etag etag of the resource
1367
1453
  * @param {Data} data cached content
@@ -1376,6 +1462,7 @@ class PackFileCacheStrategy {
1376
1462
  }
1377
1463
 
1378
1464
  /**
1465
+ * Returns promise to the cached content.
1379
1466
  * @param {string} identifier unique name for the resource
1380
1467
  * @param {Etag | null} etag etag of the resource
1381
1468
  * @returns {Promise<Data>} promise to the cached content
@@ -1396,6 +1483,7 @@ class PackFileCacheStrategy {
1396
1483
  }
1397
1484
 
1398
1485
  /**
1486
+ * Stores build dependencies.
1399
1487
  * @param {FileSystemDependencies | Iterable<string>} dependencies dependencies to store
1400
1488
  */
1401
1489
  storeBuildDependencies(dependencies) {
@@ -1429,6 +1517,7 @@ class PackFileCacheStrategy {
1429
1517
  );
1430
1518
  promise = new Promise(
1431
1519
  /**
1520
+ * Handles the callback logic for this hook.
1432
1521
  * @param {(value?: undefined) => void} resolve resolve
1433
1522
  * @param {(reason?: Error) => void} reject reject
1434
1523
  */
@@ -1552,10 +1641,17 @@ class PackFileCacheStrategy {
1552
1641
  /** @type {Snapshot} */
1553
1642
  (this.resolveBuildDependenciesSnapshot)
1554
1643
  );
1644
+ const cleanup = this.fs.unlink !== undefined;
1645
+ /** @type {Set<string> | undefined} */
1646
+ const writtenFiles = cleanup ? new Set() : undefined;
1647
+ /** @type {Set<string> | undefined} */
1648
+ const retainedFiles = cleanup ? new Set() : undefined;
1555
1649
  return this.fileSerializer
1556
1650
  .serialize(content, {
1557
1651
  filename: `${this.cacheLocation}/index${this._extension}`,
1558
1652
  extension: `${this._extension}`,
1653
+ writtenFiles,
1654
+ retainedFiles,
1559
1655
  logger: this.logger,
1560
1656
  profile: this.profile
1561
1657
  })
@@ -1572,9 +1668,17 @@ class PackFileCacheStrategy {
1572
1668
  stats.count,
1573
1669
  Math.round(stats.size / 1024 / 1024)
1574
1670
  );
1671
+ if (writtenFiles !== undefined) {
1672
+ return this._cleanupUnusedFiles(
1673
+ writtenFiles,
1674
+ /** @type {Set<string>} */ (retainedFiles)
1675
+ );
1676
+ }
1575
1677
  })
1576
1678
  .catch((err) => {
1577
1679
  this.logger.timeEnd("store pack");
1680
+ // files may be in an unknown state after a failed store
1681
+ this._referencedFilesCache.clear();
1578
1682
  this.logger.warn(`Caching failed for pack: ${err}`);
1579
1683
  this.logger.debug(err.stack);
1580
1684
  });
@@ -1586,6 +1690,192 @@ class PackFileCacheStrategy {
1586
1690
  }));
1587
1691
  }
1588
1692
 
1693
+ /**
1694
+ * Reads when the currently unreferenced files were first seen. A missing or
1695
+ * unreadable file just restarts the grace period for every orphan.
1696
+ * @returns {Promise<UnreferencedFiles>} first seen time and size per file name
1697
+ */
1698
+ _readUnreferencedFiles() {
1699
+ return new Promise((resolve) => {
1700
+ this.fs.readFile(
1701
+ `${this.cacheLocation}/${UNREFERENCED_FILE}`,
1702
+ (err, content) => {
1703
+ /** @type {UnreferencedFiles} */
1704
+ const result = new Map();
1705
+ if (err) return resolve(result);
1706
+ try {
1707
+ const data = JSON.parse(
1708
+ /** @type {Buffer} */ (content).toString("utf8")
1709
+ );
1710
+ for (const [file, entry] of Object.entries(data)) {
1711
+ const { firstSeen, size } = /** @type {UnreferencedFile} */ (
1712
+ entry
1713
+ );
1714
+ if (typeof firstSeen === "number" && typeof size === "number") {
1715
+ result.set(file, { firstSeen, size });
1716
+ }
1717
+ }
1718
+ } catch (_err) {
1719
+ result.clear();
1720
+ }
1721
+ resolve(result);
1722
+ }
1723
+ );
1724
+ });
1725
+ }
1726
+
1727
+ /**
1728
+ * Persists when the still unreferenced files were first seen. Failing to write
1729
+ * only costs the orphans another grace period, so errors are ignored.
1730
+ * @param {UnreferencedFiles} unreferenced first seen time and size per file name
1731
+ * @param {boolean} hadEntries whether a previous state exists that must be replaced
1732
+ * @returns {Promise<void>} promise
1733
+ */
1734
+ _writeUnreferencedFiles(unreferenced, hadEntries) {
1735
+ if (unreferenced.size === 0 && !hadEntries) return Promise.resolve();
1736
+ /** @type {Record<string, UnreferencedFile>} */
1737
+ const data = {};
1738
+ for (const [file, entry] of unreferenced) data[file] = entry;
1739
+ return new Promise((resolve) => {
1740
+ this.fs.writeFile(
1741
+ `${this.cacheLocation}/${UNREFERENCED_FILE}`,
1742
+ JSON.stringify(data),
1743
+ () => resolve()
1744
+ );
1745
+ });
1746
+ }
1747
+
1748
+ /**
1749
+ * Deletes files from the cache directory that are no longer referenced by the
1750
+ * stored pack. Retained files are walked on disk since nested lazy segments
1751
+ * reference files not visible during serialization. Errors only log a warning.
1752
+ * @param {Set<string>} writtenNames names (without extension) written by this store
1753
+ * @param {Set<string>} retainedNames names (without extension) referenced but not rewritten
1754
+ * @returns {Promise<void>} promise
1755
+ */
1756
+ async _cleanupUnusedFiles(writtenNames, retainedNames) {
1757
+ this.logger.time("cleanup unused cache files");
1758
+ const fs = this.fs;
1759
+ const extension = this._extension;
1760
+ const cacheLocation = this.cacheLocation;
1761
+ const referencedFilesCache = this._referencedFilesCache;
1762
+ try {
1763
+ // rewritten files may reference different names now
1764
+ for (const name of writtenNames) referencedFilesCache.delete(name);
1765
+ /** @type {Set<string>} */
1766
+ const liveFiles = new Set([`index${extension}`, UNREFERENCED_FILE]);
1767
+ for (const name of writtenNames) liveFiles.add(`${name}${extension}`);
1768
+ /** @type {string[]} */
1769
+ const queue = [];
1770
+ /**
1771
+ * Marks a file live and queues it for walking its references.
1772
+ * @param {string} name file name without extension
1773
+ */
1774
+ const enqueue = (name) => {
1775
+ const file = `${name}${extension}`;
1776
+ if (liveFiles.has(file)) return;
1777
+ liveFiles.add(file);
1778
+ queue.push(name);
1779
+ };
1780
+ for (const name of retainedNames) enqueue(name);
1781
+ while (queue.length > 0) {
1782
+ const name = /** @type {string} */ (queue.pop());
1783
+ const file = `${cacheLocation}/${name}${extension}`;
1784
+ // an unchanged mtime proves the memo entry still matches the disk
1785
+ const mtimeMs = await new Promise((resolve, reject) => {
1786
+ fs.stat(file, (err, stats) => {
1787
+ if (err) return reject(err);
1788
+ resolve(
1789
+ /** @type {number} */ (
1790
+ /** @type {import("../util/fs").IStats} */ (stats).mtimeMs
1791
+ )
1792
+ );
1793
+ });
1794
+ });
1795
+ const entry = referencedFilesCache.get(name);
1796
+ let referenced;
1797
+ if (entry !== undefined && entry.mtimeMs === mtimeMs) {
1798
+ referenced = entry.referenced;
1799
+ } else {
1800
+ referenced = await getReferencedFilenames(fs, file);
1801
+ referencedFilesCache.set(name, { mtimeMs, referenced });
1802
+ }
1803
+ for (const referencedName of referenced) enqueue(referencedName);
1804
+ }
1805
+ const files = await new Promise((resolve, reject) => {
1806
+ fs.readdir(cacheLocation, (err, files) => {
1807
+ if (err) return reject(err);
1808
+ resolve(/** @type {string[]} */ (files));
1809
+ });
1810
+ });
1811
+ const seenFiles = await this._readUnreferencedFiles();
1812
+ const now = Date.now();
1813
+ // every store rewrites the index backup, so a recorded time would age a file
1814
+ // that is in fact new; renaming carries the previous index mtime onto it
1815
+ const indexBackup = `index${extension}.old`;
1816
+ /** @type {UnreferencedFiles} */
1817
+ const stillUnreferenced = new Map();
1818
+ let deletedCount = 0;
1819
+ for (const file of files) {
1820
+ if (typeof file !== "string" || liveFiles.has(file)) continue;
1821
+ const path = `${cacheLocation}/${file}`;
1822
+ const stats = await new Promise((resolve) => {
1823
+ fs.stat(path, (err, stats) => {
1824
+ resolve(
1825
+ err
1826
+ ? undefined
1827
+ : /** @type {import("../util/fs").IStats} */ (stats)
1828
+ );
1829
+ });
1830
+ });
1831
+ if (stats === undefined || !stats.isFile()) continue;
1832
+ const size = /** @type {number} */ (stats.size);
1833
+ const seen = seenFiles.get(file);
1834
+ // a differing size means the name was rewritten, so it is a new orphan
1835
+ const firstSeen =
1836
+ seen !== undefined && seen.size === size ? seen.firstSeen : now;
1837
+ const expireTime = now - CLEANUP_GRACE_PERIOD;
1838
+ const mtimeMs = /** @type {number} */ (stats.mtimeMs);
1839
+ // either signal is enough: modification times are lost when a cache is
1840
+ // restored, and recorded times are lost when the cache directory is new
1841
+ const expired =
1842
+ mtimeMs <= expireTime ||
1843
+ (file !== indexBackup &&
1844
+ firstSeen <= expireTime &&
1845
+ mtimeMs <= now - CLEANUP_RECENT_WRITE_PERIOD);
1846
+ if (expired) {
1847
+ const deleted = await new Promise((resolve) => {
1848
+ /** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
1849
+ (fs.unlink)(path, (err) => resolve(!err));
1850
+ });
1851
+ if (deleted) {
1852
+ deletedCount++;
1853
+ continue;
1854
+ }
1855
+ }
1856
+ if (file !== indexBackup) {
1857
+ stillUnreferenced.set(file, { firstSeen, size });
1858
+ }
1859
+ }
1860
+ await this._writeUnreferencedFiles(stillUnreferenced, seenFiles.size > 0);
1861
+ // drop entries of files that are no longer alive
1862
+ for (const name of referencedFilesCache.keys()) {
1863
+ if (!liveFiles.has(`${name}${extension}`)) {
1864
+ referencedFilesCache.delete(name);
1865
+ }
1866
+ }
1867
+ if (deletedCount > 0) {
1868
+ this.logger.log("Deleted %d unused cache files", deletedCount);
1869
+ }
1870
+ } catch (err) {
1871
+ this.logger.warn(
1872
+ `Cleanup of unused cache files failed: ${/** @type {Error} */ (err)}`
1873
+ );
1874
+ this.logger.debug(/** @type {Error} */ (err).stack);
1875
+ }
1876
+ this.logger.timeEnd("cleanup unused cache files");
1877
+ }
1878
+
1589
1879
  clear() {
1590
1880
  this.fileSystemInfo.clear();
1591
1881
  this.buildDependencies.clear();