@depup/webpack 5.105.4-depup.37

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 (709) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +38 -0
  3. package/bin/webpack.js +196 -0
  4. package/hot/dev-server.js +90 -0
  5. package/hot/emitter-event-target.js +7 -0
  6. package/hot/emitter.js +2 -0
  7. package/hot/lazy-compilation-node.js +66 -0
  8. package/hot/lazy-compilation-universal.js +18 -0
  9. package/hot/lazy-compilation-web.js +93 -0
  10. package/hot/load-http.js +7 -0
  11. package/hot/log-apply-result.js +49 -0
  12. package/hot/log.js +78 -0
  13. package/hot/only-dev-server.js +118 -0
  14. package/hot/poll.js +41 -0
  15. package/hot/signal.js +66 -0
  16. package/lib/APIPlugin.js +392 -0
  17. package/lib/AbstractMethodError.js +56 -0
  18. package/lib/AsyncDependenciesBlock.js +128 -0
  19. package/lib/AsyncDependencyToInitialChunkError.js +34 -0
  20. package/lib/AutomaticPrefetchPlugin.js +66 -0
  21. package/lib/BannerPlugin.js +138 -0
  22. package/lib/Cache.js +168 -0
  23. package/lib/CacheFacade.js +349 -0
  24. package/lib/CaseSensitiveModulesWarning.js +72 -0
  25. package/lib/Chunk.js +899 -0
  26. package/lib/ChunkGraph.js +1968 -0
  27. package/lib/ChunkGroup.js +615 -0
  28. package/lib/ChunkRenderError.js +38 -0
  29. package/lib/ChunkTemplate.js +181 -0
  30. package/lib/CleanPlugin.js +495 -0
  31. package/lib/CodeGenerationError.js +35 -0
  32. package/lib/CodeGenerationResults.js +167 -0
  33. package/lib/CommentCompilationWarning.js +33 -0
  34. package/lib/CompatibilityPlugin.js +240 -0
  35. package/lib/Compilation.js +5876 -0
  36. package/lib/Compiler.js +1413 -0
  37. package/lib/ConcatenationScope.js +181 -0
  38. package/lib/ConcurrentCompilationError.js +18 -0
  39. package/lib/ConditionalInitFragment.js +120 -0
  40. package/lib/ConstPlugin.js +567 -0
  41. package/lib/ContextExclusionPlugin.js +33 -0
  42. package/lib/ContextModule.js +1411 -0
  43. package/lib/ContextModuleFactory.js +514 -0
  44. package/lib/ContextReplacementPlugin.js +227 -0
  45. package/lib/CssModule.js +179 -0
  46. package/lib/DefinePlugin.js +878 -0
  47. package/lib/DelegatedModule.js +279 -0
  48. package/lib/DelegatedModuleFactoryPlugin.js +116 -0
  49. package/lib/DelegatedPlugin.js +49 -0
  50. package/lib/DependenciesBlock.js +120 -0
  51. package/lib/Dependency.js +390 -0
  52. package/lib/DependencyTemplate.js +71 -0
  53. package/lib/DependencyTemplates.js +67 -0
  54. package/lib/DllEntryPlugin.js +76 -0
  55. package/lib/DllModule.js +175 -0
  56. package/lib/DllModuleFactory.js +38 -0
  57. package/lib/DllPlugin.js +73 -0
  58. package/lib/DllReferencePlugin.js +189 -0
  59. package/lib/DotenvPlugin.js +468 -0
  60. package/lib/DynamicEntryPlugin.js +93 -0
  61. package/lib/EntryOptionPlugin.js +98 -0
  62. package/lib/EntryPlugin.js +72 -0
  63. package/lib/Entrypoint.js +120 -0
  64. package/lib/EnvironmentNotSupportAsyncWarning.js +51 -0
  65. package/lib/EnvironmentPlugin.js +74 -0
  66. package/lib/ErrorHelpers.js +100 -0
  67. package/lib/EvalDevToolModulePlugin.js +135 -0
  68. package/lib/EvalSourceMapDevToolPlugin.js +252 -0
  69. package/lib/ExportsInfo.js +1663 -0
  70. package/lib/ExportsInfoApiPlugin.js +87 -0
  71. package/lib/ExternalModule.js +1169 -0
  72. package/lib/ExternalModuleFactoryPlugin.js +370 -0
  73. package/lib/ExternalsPlugin.js +93 -0
  74. package/lib/FalseIIFEUmdWarning.js +20 -0
  75. package/lib/FileSystemInfo.js +4131 -0
  76. package/lib/FlagAllModulesAsUsedPlugin.js +55 -0
  77. package/lib/FlagDependencyExportsPlugin.js +437 -0
  78. package/lib/FlagDependencyUsagePlugin.js +348 -0
  79. package/lib/FlagEntryExportAsUsedPlugin.js +56 -0
  80. package/lib/Generator.js +188 -0
  81. package/lib/GraphHelpers.js +46 -0
  82. package/lib/HarmonyLinkingError.js +17 -0
  83. package/lib/HookWebpackError.js +121 -0
  84. package/lib/HotModuleReplacementPlugin.js +930 -0
  85. package/lib/HotUpdateChunk.js +16 -0
  86. package/lib/IgnoreErrorModuleFactory.js +39 -0
  87. package/lib/IgnorePlugin.js +105 -0
  88. package/lib/IgnoreWarningsPlugin.js +41 -0
  89. package/lib/InitFragment.js +204 -0
  90. package/lib/InvalidDependenciesModuleWarning.js +44 -0
  91. package/lib/JavascriptMetaInfoPlugin.js +78 -0
  92. package/lib/LibManifestPlugin.js +144 -0
  93. package/lib/LibraryTemplatePlugin.js +48 -0
  94. package/lib/LoaderOptionsPlugin.js +81 -0
  95. package/lib/LoaderTargetPlugin.js +39 -0
  96. package/lib/MainTemplate.js +371 -0
  97. package/lib/ManifestPlugin.js +242 -0
  98. package/lib/Module.js +1319 -0
  99. package/lib/ModuleBuildError.js +83 -0
  100. package/lib/ModuleDependencyError.js +44 -0
  101. package/lib/ModuleDependencyWarning.js +49 -0
  102. package/lib/ModuleError.js +69 -0
  103. package/lib/ModuleFactory.js +57 -0
  104. package/lib/ModuleFilenameHelpers.js +388 -0
  105. package/lib/ModuleGraph.js +1024 -0
  106. package/lib/ModuleGraphConnection.js +199 -0
  107. package/lib/ModuleHashingError.js +31 -0
  108. package/lib/ModuleInfoHeaderPlugin.js +318 -0
  109. package/lib/ModuleNotFoundError.js +90 -0
  110. package/lib/ModuleParseError.js +125 -0
  111. package/lib/ModuleProfile.js +108 -0
  112. package/lib/ModuleRestoreError.js +46 -0
  113. package/lib/ModuleSourceTypeConstants.js +179 -0
  114. package/lib/ModuleStoreError.js +45 -0
  115. package/lib/ModuleTemplate.js +173 -0
  116. package/lib/ModuleTypeConstants.js +190 -0
  117. package/lib/ModuleWarning.js +68 -0
  118. package/lib/MultiCompiler.js +678 -0
  119. package/lib/MultiStats.js +213 -0
  120. package/lib/MultiWatching.js +77 -0
  121. package/lib/NoEmitOnErrorsPlugin.js +30 -0
  122. package/lib/NoModeWarning.js +23 -0
  123. package/lib/NodeStuffInWebError.js +35 -0
  124. package/lib/NodeStuffPlugin.js +587 -0
  125. package/lib/NormalModule.js +1798 -0
  126. package/lib/NormalModuleFactory.js +1455 -0
  127. package/lib/NormalModuleReplacementPlugin.js +75 -0
  128. package/lib/NullFactory.js +24 -0
  129. package/lib/OptimizationStages.js +10 -0
  130. package/lib/OptionsApply.js +24 -0
  131. package/lib/Parser.js +40 -0
  132. package/lib/PlatformPlugin.js +41 -0
  133. package/lib/PrefetchPlugin.js +56 -0
  134. package/lib/ProgressPlugin.js +712 -0
  135. package/lib/ProvidePlugin.js +121 -0
  136. package/lib/RawModule.js +180 -0
  137. package/lib/RecordIdsPlugin.js +216 -0
  138. package/lib/RequestShortener.js +36 -0
  139. package/lib/RequireJsStuffPlugin.js +84 -0
  140. package/lib/ResolverFactory.js +156 -0
  141. package/lib/RuntimeGlobals.js +450 -0
  142. package/lib/RuntimeModule.js +242 -0
  143. package/lib/RuntimePlugin.js +547 -0
  144. package/lib/RuntimeTemplate.js +1288 -0
  145. package/lib/SelfModuleFactory.js +33 -0
  146. package/lib/SingleEntryPlugin.js +8 -0
  147. package/lib/SizeFormatHelpers.js +25 -0
  148. package/lib/SourceMapDevToolModuleOptionsPlugin.js +52 -0
  149. package/lib/SourceMapDevToolPlugin.js +646 -0
  150. package/lib/Stats.js +89 -0
  151. package/lib/Template.js +427 -0
  152. package/lib/TemplatedPathPlugin.js +400 -0
  153. package/lib/UnhandledSchemeError.js +34 -0
  154. package/lib/UnsupportedFeatureWarning.js +35 -0
  155. package/lib/UseStrictPlugin.js +81 -0
  156. package/lib/WarnCaseSensitiveModulesPlugin.js +64 -0
  157. package/lib/WarnDeprecatedOptionPlugin.js +60 -0
  158. package/lib/WarnNoModeSetPlugin.js +27 -0
  159. package/lib/WatchIgnorePlugin.js +155 -0
  160. package/lib/Watching.js +531 -0
  161. package/lib/WebpackError.js +81 -0
  162. package/lib/WebpackIsIncludedPlugin.js +93 -0
  163. package/lib/WebpackOptionsApply.js +941 -0
  164. package/lib/WebpackOptionsDefaulter.js +26 -0
  165. package/lib/asset/AssetBytesGenerator.js +172 -0
  166. package/lib/asset/AssetBytesParser.js +37 -0
  167. package/lib/asset/AssetGenerator.js +816 -0
  168. package/lib/asset/AssetModulesPlugin.js +358 -0
  169. package/lib/asset/AssetParser.js +73 -0
  170. package/lib/asset/AssetSourceGenerator.js +171 -0
  171. package/lib/asset/AssetSourceParser.js +37 -0
  172. package/lib/asset/RawDataUrlModule.js +179 -0
  173. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  174. package/lib/async-modules/AwaitDependenciesInitFragment.js +90 -0
  175. package/lib/async-modules/InferAsyncModulesPlugin.js +54 -0
  176. package/lib/buildChunkGraph.js +1392 -0
  177. package/lib/cache/AddBuildDependenciesPlugin.js +32 -0
  178. package/lib/cache/AddManagedPathsPlugin.js +40 -0
  179. package/lib/cache/IdleFileCachePlugin.js +242 -0
  180. package/lib/cache/MemoryCachePlugin.js +57 -0
  181. package/lib/cache/MemoryWithGcCachePlugin.js +142 -0
  182. package/lib/cache/PackFileCacheStrategy.js +1600 -0
  183. package/lib/cache/ResolverCachePlugin.js +450 -0
  184. package/lib/cache/getLazyHashedEtag.js +91 -0
  185. package/lib/cache/mergeEtags.js +71 -0
  186. package/lib/cli.js +859 -0
  187. package/lib/config/browserslistTargetHandler.js +388 -0
  188. package/lib/config/defaults.js +2086 -0
  189. package/lib/config/normalization.js +681 -0
  190. package/lib/config/target.js +389 -0
  191. package/lib/container/ContainerEntryDependency.js +50 -0
  192. package/lib/container/ContainerEntryModule.js +303 -0
  193. package/lib/container/ContainerEntryModuleFactory.js +27 -0
  194. package/lib/container/ContainerExposedDependency.js +62 -0
  195. package/lib/container/ContainerPlugin.js +118 -0
  196. package/lib/container/ContainerReferencePlugin.js +139 -0
  197. package/lib/container/FallbackDependency.js +66 -0
  198. package/lib/container/FallbackItemDependency.js +34 -0
  199. package/lib/container/FallbackModule.js +193 -0
  200. package/lib/container/FallbackModuleFactory.js +27 -0
  201. package/lib/container/HoistContainerReferencesPlugin.js +256 -0
  202. package/lib/container/ModuleFederationPlugin.js +131 -0
  203. package/lib/container/RemoteModule.js +225 -0
  204. package/lib/container/RemoteRuntimeModule.js +144 -0
  205. package/lib/container/RemoteToExternalDependency.js +33 -0
  206. package/lib/container/options.js +105 -0
  207. package/lib/css/CssGenerator.js +587 -0
  208. package/lib/css/CssLoadingRuntimeModule.js +513 -0
  209. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  210. package/lib/css/CssModulesPlugin.js +939 -0
  211. package/lib/css/CssParser.js +2621 -0
  212. package/lib/css/walkCssTokens.js +1740 -0
  213. package/lib/debug/ProfilingPlugin.js +589 -0
  214. package/lib/dependencies/AMDDefineDependency.js +267 -0
  215. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +504 -0
  216. package/lib/dependencies/AMDPlugin.js +243 -0
  217. package/lib/dependencies/AMDRequireArrayDependency.js +124 -0
  218. package/lib/dependencies/AMDRequireContextDependency.js +69 -0
  219. package/lib/dependencies/AMDRequireDependenciesBlock.js +28 -0
  220. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +425 -0
  221. package/lib/dependencies/AMDRequireDependency.js +189 -0
  222. package/lib/dependencies/AMDRequireItemDependency.js +41 -0
  223. package/lib/dependencies/AMDRuntimeModules.js +50 -0
  224. package/lib/dependencies/CachedConstDependency.js +135 -0
  225. package/lib/dependencies/CommonJsDependencyHelpers.js +65 -0
  226. package/lib/dependencies/CommonJsExportRequireDependency.js +416 -0
  227. package/lib/dependencies/CommonJsExportsDependency.js +184 -0
  228. package/lib/dependencies/CommonJsExportsParserPlugin.js +425 -0
  229. package/lib/dependencies/CommonJsFullRequireDependency.js +162 -0
  230. package/lib/dependencies/CommonJsImportsParserPlugin.js +611 -0
  231. package/lib/dependencies/CommonJsPlugin.js +316 -0
  232. package/lib/dependencies/CommonJsRequireContextDependency.js +73 -0
  233. package/lib/dependencies/CommonJsRequireDependency.js +42 -0
  234. package/lib/dependencies/CommonJsSelfReferenceDependency.js +156 -0
  235. package/lib/dependencies/ConstDependency.js +118 -0
  236. package/lib/dependencies/ContextDependency.js +183 -0
  237. package/lib/dependencies/ContextDependencyHelpers.js +277 -0
  238. package/lib/dependencies/ContextDependencyTemplateAsId.js +63 -0
  239. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +62 -0
  240. package/lib/dependencies/ContextElementDependency.js +147 -0
  241. package/lib/dependencies/CreateRequireParserPlugin.js +356 -0
  242. package/lib/dependencies/CreateScriptUrlDependency.js +75 -0
  243. package/lib/dependencies/CriticalDependencyWarning.js +29 -0
  244. package/lib/dependencies/CssIcssExportDependency.js +539 -0
  245. package/lib/dependencies/CssIcssImportDependency.js +183 -0
  246. package/lib/dependencies/CssIcssSymbolDependency.js +131 -0
  247. package/lib/dependencies/CssImportDependency.js +120 -0
  248. package/lib/dependencies/CssUrlDependency.js +189 -0
  249. package/lib/dependencies/DelegatedSourceDependency.js +33 -0
  250. package/lib/dependencies/DllEntryDependency.js +61 -0
  251. package/lib/dependencies/DynamicExports.js +73 -0
  252. package/lib/dependencies/EntryDependency.js +30 -0
  253. package/lib/dependencies/ExportsInfoDependency.js +161 -0
  254. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  255. package/lib/dependencies/ExternalModuleInitFragment.js +137 -0
  256. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +87 -0
  257. package/lib/dependencies/HarmonyAcceptDependency.js +237 -0
  258. package/lib/dependencies/HarmonyAcceptImportDependency.js +37 -0
  259. package/lib/dependencies/HarmonyCompatibilityDependency.js +91 -0
  260. package/lib/dependencies/HarmonyDetectionParserPlugin.js +103 -0
  261. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +165 -0
  262. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +254 -0
  263. package/lib/dependencies/HarmonyExportExpressionDependency.js +211 -0
  264. package/lib/dependencies/HarmonyExportHeaderDependency.js +78 -0
  265. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +1494 -0
  266. package/lib/dependencies/HarmonyExportInitFragment.js +191 -0
  267. package/lib/dependencies/HarmonyExportSpecifierDependency.js +127 -0
  268. package/lib/dependencies/HarmonyExports.js +46 -0
  269. package/lib/dependencies/HarmonyImportDependency.js +459 -0
  270. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +576 -0
  271. package/lib/dependencies/HarmonyImportSideEffectDependency.js +91 -0
  272. package/lib/dependencies/HarmonyImportSpecifierDependency.js +514 -0
  273. package/lib/dependencies/HarmonyModulesPlugin.js +158 -0
  274. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +39 -0
  275. package/lib/dependencies/ImportContextDependency.js +81 -0
  276. package/lib/dependencies/ImportDependency.js +158 -0
  277. package/lib/dependencies/ImportEagerDependency.js +76 -0
  278. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  279. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +312 -0
  280. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  281. package/lib/dependencies/ImportMetaHotAcceptDependency.js +41 -0
  282. package/lib/dependencies/ImportMetaHotDeclineDependency.js +42 -0
  283. package/lib/dependencies/ImportMetaPlugin.js +447 -0
  284. package/lib/dependencies/ImportParserPlugin.js +602 -0
  285. package/lib/dependencies/ImportPhase.js +125 -0
  286. package/lib/dependencies/ImportPlugin.js +98 -0
  287. package/lib/dependencies/ImportWeakDependency.js +74 -0
  288. package/lib/dependencies/JsonExportsDependency.js +137 -0
  289. package/lib/dependencies/LoaderDependency.js +38 -0
  290. package/lib/dependencies/LoaderImportDependency.js +39 -0
  291. package/lib/dependencies/LoaderPlugin.js +294 -0
  292. package/lib/dependencies/LocalModule.js +60 -0
  293. package/lib/dependencies/LocalModuleDependency.js +84 -0
  294. package/lib/dependencies/LocalModulesHelpers.js +68 -0
  295. package/lib/dependencies/ModuleDecoratorDependency.js +136 -0
  296. package/lib/dependencies/ModuleDependency.js +100 -0
  297. package/lib/dependencies/ModuleDependencyTemplateAsId.js +35 -0
  298. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +39 -0
  299. package/lib/dependencies/ModuleHotAcceptDependency.js +41 -0
  300. package/lib/dependencies/ModuleHotDeclineDependency.js +42 -0
  301. package/lib/dependencies/ModuleInitFragmentDependency.js +87 -0
  302. package/lib/dependencies/NullDependency.js +42 -0
  303. package/lib/dependencies/PrefetchDependency.js +27 -0
  304. package/lib/dependencies/ProvidedDependency.js +156 -0
  305. package/lib/dependencies/PureExpressionDependency.js +161 -0
  306. package/lib/dependencies/RequireContextDependency.js +38 -0
  307. package/lib/dependencies/RequireContextDependencyParserPlugin.js +69 -0
  308. package/lib/dependencies/RequireContextPlugin.js +167 -0
  309. package/lib/dependencies/RequireEnsureDependenciesBlock.js +29 -0
  310. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +145 -0
  311. package/lib/dependencies/RequireEnsureDependency.js +115 -0
  312. package/lib/dependencies/RequireEnsureItemDependency.js +36 -0
  313. package/lib/dependencies/RequireEnsurePlugin.js +86 -0
  314. package/lib/dependencies/RequireHeaderDependency.js +70 -0
  315. package/lib/dependencies/RequireIncludeDependency.js +79 -0
  316. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +100 -0
  317. package/lib/dependencies/RequireIncludePlugin.js +63 -0
  318. package/lib/dependencies/RequireResolveContextDependency.js +67 -0
  319. package/lib/dependencies/RequireResolveDependency.js +58 -0
  320. package/lib/dependencies/RequireResolveHeaderDependency.js +81 -0
  321. package/lib/dependencies/RuntimeRequirementsDependency.js +85 -0
  322. package/lib/dependencies/StaticExportsDependency.js +72 -0
  323. package/lib/dependencies/SystemPlugin.js +168 -0
  324. package/lib/dependencies/SystemRuntimeModule.js +35 -0
  325. package/lib/dependencies/URLContextDependency.js +65 -0
  326. package/lib/dependencies/URLDependency.js +165 -0
  327. package/lib/dependencies/URLPlugin.js +67 -0
  328. package/lib/dependencies/UnsupportedDependency.js +82 -0
  329. package/lib/dependencies/WebAssemblyExportImportedDependency.js +93 -0
  330. package/lib/dependencies/WebAssemblyImportDependency.js +108 -0
  331. package/lib/dependencies/WebpackIsIncludedDependency.js +84 -0
  332. package/lib/dependencies/WorkerDependency.js +141 -0
  333. package/lib/dependencies/WorkerPlugin.js +565 -0
  334. package/lib/dependencies/getFunctionExpression.js +66 -0
  335. package/lib/dependencies/processExportInfo.js +67 -0
  336. package/lib/electron/ElectronTargetPlugin.js +71 -0
  337. package/lib/errors/BuildCycleError.js +30 -0
  338. package/lib/esm/ExportWebpackRequireRuntimeModule.js +30 -0
  339. package/lib/esm/ModuleChunkFormatPlugin.js +273 -0
  340. package/lib/esm/ModuleChunkLoadingPlugin.js +143 -0
  341. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +426 -0
  342. package/lib/formatLocation.js +67 -0
  343. package/lib/hmr/HotModuleReplacement.runtime.js +419 -0
  344. package/lib/hmr/HotModuleReplacementRuntimeModule.js +42 -0
  345. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +471 -0
  346. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  347. package/lib/hmr/LazyCompilationPlugin.js +473 -0
  348. package/lib/hmr/lazyCompilationBackend.js +167 -0
  349. package/lib/ids/ChunkModuleIdRangePlugin.js +94 -0
  350. package/lib/ids/DeterministicChunkIdsPlugin.js +73 -0
  351. package/lib/ids/DeterministicModuleIdsPlugin.js +98 -0
  352. package/lib/ids/HashedModuleIdsPlugin.js +85 -0
  353. package/lib/ids/IdHelpers.js +492 -0
  354. package/lib/ids/NamedChunkIdsPlugin.js +92 -0
  355. package/lib/ids/NamedModuleIdsPlugin.js +68 -0
  356. package/lib/ids/NaturalChunkIdsPlugin.js +35 -0
  357. package/lib/ids/NaturalModuleIdsPlugin.js +40 -0
  358. package/lib/ids/OccurrenceChunkIdsPlugin.js +86 -0
  359. package/lib/ids/OccurrenceModuleIdsPlugin.js +168 -0
  360. package/lib/ids/SyncModuleIdsPlugin.js +161 -0
  361. package/lib/index.js +681 -0
  362. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +153 -0
  363. package/lib/javascript/BasicEvaluatedExpression.js +603 -0
  364. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  365. package/lib/javascript/ChunkHelpers.js +45 -0
  366. package/lib/javascript/CommonJsChunkFormatPlugin.js +148 -0
  367. package/lib/javascript/EnableChunkLoadingPlugin.js +127 -0
  368. package/lib/javascript/JavascriptGenerator.js +277 -0
  369. package/lib/javascript/JavascriptModulesPlugin.js +1905 -0
  370. package/lib/javascript/JavascriptParser.js +5476 -0
  371. package/lib/javascript/JavascriptParserHelpers.js +129 -0
  372. package/lib/javascript/StartupHelpers.js +178 -0
  373. package/lib/json/JsonData.js +74 -0
  374. package/lib/json/JsonGenerator.js +234 -0
  375. package/lib/json/JsonModulesPlugin.js +66 -0
  376. package/lib/json/JsonParser.js +93 -0
  377. package/lib/library/AbstractLibraryPlugin.js +339 -0
  378. package/lib/library/AmdLibraryPlugin.js +181 -0
  379. package/lib/library/AssignLibraryPlugin.js +445 -0
  380. package/lib/library/EnableLibraryPlugin.js +306 -0
  381. package/lib/library/ExportPropertyLibraryPlugin.js +116 -0
  382. package/lib/library/JsonpLibraryPlugin.js +92 -0
  383. package/lib/library/ModuleLibraryPlugin.js +438 -0
  384. package/lib/library/SystemLibraryPlugin.js +256 -0
  385. package/lib/library/UmdLibraryPlugin.js +355 -0
  386. package/lib/logging/Logger.js +223 -0
  387. package/lib/logging/createConsoleLogger.js +217 -0
  388. package/lib/logging/runtime.js +45 -0
  389. package/lib/logging/truncateArgs.js +83 -0
  390. package/lib/node/CommonJsChunkLoadingPlugin.js +120 -0
  391. package/lib/node/NodeEnvironmentPlugin.js +73 -0
  392. package/lib/node/NodeSourcePlugin.js +19 -0
  393. package/lib/node/NodeTargetPlugin.js +102 -0
  394. package/lib/node/NodeTemplatePlugin.js +42 -0
  395. package/lib/node/NodeWatchFileSystem.js +198 -0
  396. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +286 -0
  397. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +123 -0
  398. package/lib/node/ReadFileCompileWasmPlugin.js +127 -0
  399. package/lib/node/RequireChunkLoadingRuntimeModule.js +239 -0
  400. package/lib/node/nodeConsole.js +185 -0
  401. package/lib/optimize/AggressiveMergingPlugin.js +98 -0
  402. package/lib/optimize/AggressiveSplittingPlugin.js +352 -0
  403. package/lib/optimize/ConcatenatedModule.js +2290 -0
  404. package/lib/optimize/EnsureChunkConditionsPlugin.js +88 -0
  405. package/lib/optimize/FlagIncludedChunksPlugin.js +137 -0
  406. package/lib/optimize/InnerGraph.js +368 -0
  407. package/lib/optimize/InnerGraphPlugin.js +455 -0
  408. package/lib/optimize/LimitChunkCountPlugin.js +302 -0
  409. package/lib/optimize/MangleExportsPlugin.js +194 -0
  410. package/lib/optimize/MergeDuplicateChunksPlugin.js +138 -0
  411. package/lib/optimize/MinChunkSizePlugin.js +121 -0
  412. package/lib/optimize/MinMaxSizeWarning.js +35 -0
  413. package/lib/optimize/ModuleConcatenationPlugin.js +971 -0
  414. package/lib/optimize/RealContentHashPlugin.js +488 -0
  415. package/lib/optimize/RemoveEmptyChunksPlugin.js +60 -0
  416. package/lib/optimize/RemoveParentModulesPlugin.js +216 -0
  417. package/lib/optimize/RuntimeChunkPlugin.js +52 -0
  418. package/lib/optimize/SideEffectsFlagPlugin.js +417 -0
  419. package/lib/optimize/SplitChunksPlugin.js +1836 -0
  420. package/lib/performance/AssetsOverSizeLimitWarning.js +37 -0
  421. package/lib/performance/EntrypointsOverSizeLimitWarning.js +40 -0
  422. package/lib/performance/NoAsyncChunksWarning.js +21 -0
  423. package/lib/performance/SizeLimitsPlugin.js +183 -0
  424. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +46 -0
  425. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +95 -0
  426. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +56 -0
  427. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +52 -0
  428. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +46 -0
  429. package/lib/rules/BasicEffectRulePlugin.js +56 -0
  430. package/lib/rules/BasicMatcherRulePlugin.js +68 -0
  431. package/lib/rules/ObjectMatcherRulePlugin.js +79 -0
  432. package/lib/rules/RuleSetCompiler.js +447 -0
  433. package/lib/rules/UseEffectRulePlugin.js +236 -0
  434. package/lib/runtime/AsyncModuleRuntimeModule.js +199 -0
  435. package/lib/runtime/AutoPublicPathRuntimeModule.js +90 -0
  436. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  437. package/lib/runtime/ChunkNameRuntimeModule.js +28 -0
  438. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +40 -0
  439. package/lib/runtime/CompatRuntimeModule.js +83 -0
  440. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +69 -0
  441. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  442. package/lib/runtime/CreateScriptUrlRuntimeModule.js +38 -0
  443. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +42 -0
  444. package/lib/runtime/EnsureChunkRuntimeModule.js +69 -0
  445. package/lib/runtime/GetChunkFilenameRuntimeModule.js +299 -0
  446. package/lib/runtime/GetFullHashRuntimeModule.js +31 -0
  447. package/lib/runtime/GetMainFilenameRuntimeModule.js +49 -0
  448. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +99 -0
  449. package/lib/runtime/GlobalRuntimeModule.js +47 -0
  450. package/lib/runtime/HasOwnPropertyRuntimeModule.js +35 -0
  451. package/lib/runtime/HelperRuntimeModule.js +18 -0
  452. package/lib/runtime/LoadScriptRuntimeModule.js +174 -0
  453. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +232 -0
  454. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +39 -0
  455. package/lib/runtime/NonceRuntimeModule.js +24 -0
  456. package/lib/runtime/OnChunksLoadedRuntimeModule.js +78 -0
  457. package/lib/runtime/PublicPathRuntimeModule.js +38 -0
  458. package/lib/runtime/RelativeUrlRuntimeModule.js +44 -0
  459. package/lib/runtime/RuntimeIdRuntimeModule.js +33 -0
  460. package/lib/runtime/StartupChunkDependenciesPlugin.js +88 -0
  461. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +77 -0
  462. package/lib/runtime/StartupEntrypointRuntimeModule.js +54 -0
  463. package/lib/runtime/SystemContextRuntimeModule.js +23 -0
  464. package/lib/runtime/ToBinaryRuntimeModule.js +72 -0
  465. package/lib/schemes/DataUriPlugin.js +47 -0
  466. package/lib/schemes/FileUriPlugin.js +54 -0
  467. package/lib/schemes/HttpUriPlugin.js +1410 -0
  468. package/lib/schemes/VirtualUrlPlugin.js +248 -0
  469. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  470. package/lib/serialization/ArraySerializer.js +38 -0
  471. package/lib/serialization/BinaryMiddleware.js +1164 -0
  472. package/lib/serialization/DateObjectSerializer.js +28 -0
  473. package/lib/serialization/ErrorObjectSerializer.js +49 -0
  474. package/lib/serialization/FileMiddleware.js +766 -0
  475. package/lib/serialization/MapObjectSerializer.js +48 -0
  476. package/lib/serialization/NullPrototypeObjectSerializer.js +53 -0
  477. package/lib/serialization/ObjectMiddleware.js +877 -0
  478. package/lib/serialization/PlainObjectSerializer.js +119 -0
  479. package/lib/serialization/RegExpObjectSerializer.js +29 -0
  480. package/lib/serialization/Serializer.js +82 -0
  481. package/lib/serialization/SerializerMiddleware.js +226 -0
  482. package/lib/serialization/SetObjectSerializer.js +40 -0
  483. package/lib/serialization/SingleItemMiddleware.js +36 -0
  484. package/lib/serialization/types.js +13 -0
  485. package/lib/sharing/ConsumeSharedFallbackDependency.js +33 -0
  486. package/lib/sharing/ConsumeSharedModule.js +344 -0
  487. package/lib/sharing/ConsumeSharedPlugin.js +380 -0
  488. package/lib/sharing/ConsumeSharedRuntimeModule.js +358 -0
  489. package/lib/sharing/ProvideForSharedDependency.js +33 -0
  490. package/lib/sharing/ProvideSharedDependency.js +80 -0
  491. package/lib/sharing/ProvideSharedModule.js +196 -0
  492. package/lib/sharing/ProvideSharedModuleFactory.js +37 -0
  493. package/lib/sharing/ProvideSharedPlugin.js +248 -0
  494. package/lib/sharing/SharePlugin.js +91 -0
  495. package/lib/sharing/ShareRuntimeModule.js +152 -0
  496. package/lib/sharing/resolveMatchedConfigs.js +106 -0
  497. package/lib/sharing/utils.js +421 -0
  498. package/lib/stats/DefaultStatsFactoryPlugin.js +2791 -0
  499. package/lib/stats/DefaultStatsPresetPlugin.js +417 -0
  500. package/lib/stats/DefaultStatsPrinterPlugin.js +1860 -0
  501. package/lib/stats/StatsFactory.js +406 -0
  502. package/lib/stats/StatsPrinter.js +300 -0
  503. package/lib/url/URLParserPlugin.js +266 -0
  504. package/lib/util/AppendOnlyStackedSet.js +78 -0
  505. package/lib/util/ArrayHelpers.js +46 -0
  506. package/lib/util/ArrayQueue.js +104 -0
  507. package/lib/util/AsyncQueue.js +411 -0
  508. package/lib/util/Hash.js +68 -0
  509. package/lib/util/IterableHelpers.js +46 -0
  510. package/lib/util/LazyBucketSortedSet.js +272 -0
  511. package/lib/util/LazySet.js +236 -0
  512. package/lib/util/MapHelpers.js +34 -0
  513. package/lib/util/ParallelismFactorCalculator.js +70 -0
  514. package/lib/util/Queue.js +52 -0
  515. package/lib/util/Semaphore.js +51 -0
  516. package/lib/util/SetHelpers.js +94 -0
  517. package/lib/util/SortableSet.js +176 -0
  518. package/lib/util/StackedCacheMap.js +140 -0
  519. package/lib/util/StackedMap.js +164 -0
  520. package/lib/util/StringXor.js +103 -0
  521. package/lib/util/TupleQueue.js +70 -0
  522. package/lib/util/TupleSet.js +185 -0
  523. package/lib/util/URLAbsoluteSpecifier.js +86 -0
  524. package/lib/util/WeakTupleMap.js +227 -0
  525. package/lib/util/binarySearchBounds.js +136 -0
  526. package/lib/util/chainedImports.js +99 -0
  527. package/lib/util/cleverMerge.js +676 -0
  528. package/lib/util/comparators.js +645 -0
  529. package/lib/util/compileBooleanMatcher.js +313 -0
  530. package/lib/util/concatenate.js +232 -0
  531. package/lib/util/conventions.js +126 -0
  532. package/lib/util/create-schema-validation.js +41 -0
  533. package/lib/util/createHash.js +91 -0
  534. package/lib/util/dataURL.js +39 -0
  535. package/lib/util/deprecation.js +350 -0
  536. package/lib/util/deterministicGrouping.js +561 -0
  537. package/lib/util/extractSourceMap.js +318 -0
  538. package/lib/util/extractUrlAndGlobal.js +18 -0
  539. package/lib/util/findGraphRoots.js +211 -0
  540. package/lib/util/fs.js +675 -0
  541. package/lib/util/generateDebugId.js +33 -0
  542. package/lib/util/hash/BatchedHash.js +115 -0
  543. package/lib/util/hash/BulkUpdateHash.js +145 -0
  544. package/lib/util/hash/DebugHash.js +75 -0
  545. package/lib/util/hash/hash-digest.js +217 -0
  546. package/lib/util/hash/md4.js +20 -0
  547. package/lib/util/hash/wasm-hash.js +232 -0
  548. package/lib/util/hash/xxhash64.js +20 -0
  549. package/lib/util/identifier.js +471 -0
  550. package/lib/util/internalSerializables.js +222 -0
  551. package/lib/util/magicComment.js +25 -0
  552. package/lib/util/makeSerializable.js +60 -0
  553. package/lib/util/memoize.js +36 -0
  554. package/lib/util/nonNumericOnlyHash.js +22 -0
  555. package/lib/util/numberHash.js +95 -0
  556. package/lib/util/objectToMap.js +15 -0
  557. package/lib/util/processAsyncTree.js +68 -0
  558. package/lib/util/propertyAccess.js +30 -0
  559. package/lib/util/propertyName.js +76 -0
  560. package/lib/util/registerExternalSerializer.js +334 -0
  561. package/lib/util/removeBOM.js +25 -0
  562. package/lib/util/runtime.js +717 -0
  563. package/lib/util/semver.js +604 -0
  564. package/lib/util/serialization.js +153 -0
  565. package/lib/util/smartGrouping.js +221 -0
  566. package/lib/util/source.js +62 -0
  567. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  568. package/lib/validateSchema.js +177 -0
  569. package/lib/wasm/EnableWasmLoadingPlugin.js +146 -0
  570. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +154 -0
  571. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +74 -0
  572. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +212 -0
  573. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +209 -0
  574. package/lib/wasm-async/AsyncWebAssemblyParser.js +80 -0
  575. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +107 -0
  576. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +20 -0
  577. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +422 -0
  578. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +91 -0
  579. package/lib/wasm-sync/WebAssemblyGenerator.js +535 -0
  580. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +111 -0
  581. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +236 -0
  582. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +151 -0
  583. package/lib/wasm-sync/WebAssemblyParser.js +201 -0
  584. package/lib/wasm-sync/WebAssemblyUtils.js +66 -0
  585. package/lib/web/FetchCompileAsyncWasmPlugin.js +70 -0
  586. package/lib/web/FetchCompileWasmPlugin.js +86 -0
  587. package/lib/web/JsonpChunkLoadingPlugin.js +101 -0
  588. package/lib/web/JsonpChunkLoadingRuntimeModule.js +455 -0
  589. package/lib/web/JsonpTemplatePlugin.js +37 -0
  590. package/lib/webpack.js +227 -0
  591. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +110 -0
  592. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +231 -0
  593. package/lib/webworker/WebWorkerTemplatePlugin.js +26 -0
  594. package/module.d.ts +238 -0
  595. package/package.json +258 -0
  596. package/schemas/WebpackOptions.check.d.ts +7 -0
  597. package/schemas/WebpackOptions.check.js +6 -0
  598. package/schemas/WebpackOptions.json +6179 -0
  599. package/schemas/_container.json +155 -0
  600. package/schemas/_sharing.json +118 -0
  601. package/schemas/plugins/BannerPlugin.check.d.ts +7 -0
  602. package/schemas/plugins/BannerPlugin.check.js +6 -0
  603. package/schemas/plugins/BannerPlugin.json +115 -0
  604. package/schemas/plugins/DllPlugin.check.d.ts +7 -0
  605. package/schemas/plugins/DllPlugin.check.js +6 -0
  606. package/schemas/plugins/DllPlugin.json +36 -0
  607. package/schemas/plugins/DllReferencePlugin.check.d.ts +7 -0
  608. package/schemas/plugins/DllReferencePlugin.check.js +6 -0
  609. package/schemas/plugins/DllReferencePlugin.json +206 -0
  610. package/schemas/plugins/IgnorePlugin.check.d.ts +7 -0
  611. package/schemas/plugins/IgnorePlugin.check.js +6 -0
  612. package/schemas/plugins/IgnorePlugin.json +34 -0
  613. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +7 -0
  614. package/schemas/plugins/LoaderOptionsPlugin.check.js +6 -0
  615. package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
  616. package/schemas/plugins/ManifestPlugin.check.d.ts +7 -0
  617. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  618. package/schemas/plugins/ManifestPlugin.json +98 -0
  619. package/schemas/plugins/ProgressPlugin.check.d.ts +7 -0
  620. package/schemas/plugins/ProgressPlugin.check.js +6 -0
  621. package/schemas/plugins/ProgressPlugin.json +65 -0
  622. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +7 -0
  623. package/schemas/plugins/SourceMapDevToolPlugin.check.js +6 -0
  624. package/schemas/plugins/SourceMapDevToolPlugin.json +168 -0
  625. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +7 -0
  626. package/schemas/plugins/WatchIgnorePlugin.check.js +6 -0
  627. package/schemas/plugins/WatchIgnorePlugin.json +25 -0
  628. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +7 -0
  629. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +6 -0
  630. package/schemas/plugins/asset/AssetGeneratorOptions.json +3 -0
  631. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +7 -0
  632. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +6 -0
  633. package/schemas/plugins/asset/AssetInlineGeneratorOptions.json +3 -0
  634. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +7 -0
  635. package/schemas/plugins/asset/AssetParserOptions.check.js +6 -0
  636. package/schemas/plugins/asset/AssetParserOptions.json +3 -0
  637. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +7 -0
  638. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +6 -0
  639. package/schemas/plugins/asset/AssetResourceGeneratorOptions.json +3 -0
  640. package/schemas/plugins/container/ContainerPlugin.check.d.ts +7 -0
  641. package/schemas/plugins/container/ContainerPlugin.check.js +6 -0
  642. package/schemas/plugins/container/ContainerPlugin.json +294 -0
  643. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +7 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +6 -0
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +132 -0
  646. package/schemas/plugins/container/ExternalsType.check.d.ts +7 -0
  647. package/schemas/plugins/container/ExternalsType.check.js +6 -0
  648. package/schemas/plugins/container/ExternalsType.json +3 -0
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +7 -0
  650. package/schemas/plugins/container/ModuleFederationPlugin.check.js +6 -0
  651. package/schemas/plugins/container/ModuleFederationPlugin.json +525 -0
  652. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  653. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  654. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  655. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  656. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  657. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  658. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  659. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  660. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  661. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  662. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  663. package/schemas/plugins/css/CssParserOptions.json +3 -0
  664. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +7 -0
  665. package/schemas/plugins/debug/ProfilingPlugin.check.js +6 -0
  666. package/schemas/plugins/debug/ProfilingPlugin.json +12 -0
  667. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  668. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  669. package/schemas/plugins/ids/HashedModuleIdsPlugin.json +57 -0
  670. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +7 -0
  671. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +6 -0
  672. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.json +11 -0
  673. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +7 -0
  674. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +6 -0
  675. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.json +11 -0
  676. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +7 -0
  677. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  678. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  679. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +7 -0
  680. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  681. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  682. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +7 -0
  683. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +6 -0
  684. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
  685. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +7 -0
  686. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +6 -0
  687. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +21 -0
  688. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +7 -0
  689. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +6 -0
  690. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.json +11 -0
  691. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +7 -0
  692. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +6 -0
  693. package/schemas/plugins/optimize/MinChunkSizePlugin.json +20 -0
  694. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +7 -0
  695. package/schemas/plugins/schemes/HttpUriPlugin.check.js +6 -0
  696. package/schemas/plugins/schemes/HttpUriPlugin.json +74 -0
  697. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  698. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  699. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  700. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +7 -0
  701. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +6 -0
  702. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +120 -0
  703. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +7 -0
  704. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +6 -0
  705. package/schemas/plugins/sharing/ProvideSharedPlugin.json +94 -0
  706. package/schemas/plugins/sharing/SharePlugin.check.d.ts +7 -0
  707. package/schemas/plugins/sharing/SharePlugin.check.js +6 -0
  708. package/schemas/plugins/sharing/SharePlugin.json +133 -0
  709. package/types.d.ts +20217 -0
@@ -0,0 +1,1600 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const FileSystemInfo = require("../FileSystemInfo");
9
+ const ProgressPlugin = require("../ProgressPlugin");
10
+ const { formatSize } = require("../SizeFormatHelpers");
11
+ const SerializerMiddleware = require("../serialization/SerializerMiddleware");
12
+ const LazySet = require("../util/LazySet");
13
+ const makeSerializable = require("../util/makeSerializable");
14
+ const memoize = require("../util/memoize");
15
+ const {
16
+ NOT_SERIALIZABLE,
17
+ createFileSerializer
18
+ } = require("../util/serialization");
19
+
20
+ /** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
21
+ /** @typedef {import("../Compilation").FileSystemDependencies} FileSystemDependencies */
22
+ /** @typedef {import("../Cache").Data} Data */
23
+ /** @typedef {import("../Cache").Etag} Etag */
24
+ /** @typedef {import("../Compiler")} Compiler */
25
+ /** @typedef {import("../FileSystemInfo").ResolveBuildDependenciesResult} ResolveBuildDependenciesResult */
26
+ /** @typedef {import("../FileSystemInfo").ResolveResults} ResolveResults */
27
+ /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
28
+ /** @typedef {import("../logging/Logger").Logger} Logger */
29
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
30
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
31
+ /** @typedef {import("../util/Hash").HashFunction} HashFunction */
32
+ /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
33
+
34
+ /** @typedef {Set<string>} Items */
35
+ /** @typedef {Set<string>} BuildDependencies */
36
+ /** @typedef {Map<string, PackItemInfo>} ItemInfo */
37
+
38
+ class PackContainer {
39
+ /**
40
+ * @param {Pack} data stored data
41
+ * @param {string} version version identifier
42
+ * @param {Snapshot} buildSnapshot snapshot of all build dependencies
43
+ * @param {BuildDependencies} buildDependencies list of all unresolved build dependencies captured
44
+ * @param {ResolveResults} resolveResults result of the resolved build dependencies
45
+ * @param {Snapshot} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
46
+ */
47
+ constructor(
48
+ data,
49
+ version,
50
+ buildSnapshot,
51
+ buildDependencies,
52
+ resolveResults,
53
+ resolveBuildDependenciesSnapshot
54
+ ) {
55
+ /** @type {Pack | (() => Pack)} */
56
+ this.data = data;
57
+ /** @type {string} */
58
+ this.version = version;
59
+ /** @type {Snapshot} */
60
+ this.buildSnapshot = buildSnapshot;
61
+ /** @type {BuildDependencies} */
62
+ this.buildDependencies = buildDependencies;
63
+ /** @type {ResolveResults} */
64
+ this.resolveResults = resolveResults;
65
+ /** @type {Snapshot} */
66
+ this.resolveBuildDependenciesSnapshot = resolveBuildDependenciesSnapshot;
67
+ }
68
+
69
+ /**
70
+ * @param {ObjectSerializerContext} context context
71
+ */
72
+ serialize({ write, writeLazy }) {
73
+ write(this.version);
74
+ write(this.buildSnapshot);
75
+ write(this.buildDependencies);
76
+ write(this.resolveResults);
77
+ write(this.resolveBuildDependenciesSnapshot);
78
+ /** @type {NonNullable<ObjectSerializerContext["writeLazy"]>} */
79
+ (writeLazy)(this.data);
80
+ }
81
+
82
+ /**
83
+ * @param {ObjectDeserializerContext} context context
84
+ */
85
+ deserialize({ read }) {
86
+ this.version = read();
87
+ this.buildSnapshot = read();
88
+ this.buildDependencies = read();
89
+ this.resolveResults = read();
90
+ this.resolveBuildDependenciesSnapshot = read();
91
+ this.data = read();
92
+ }
93
+ }
94
+
95
+ makeSerializable(
96
+ PackContainer,
97
+ "webpack/lib/cache/PackFileCacheStrategy",
98
+ "PackContainer"
99
+ );
100
+
101
+ const MIN_CONTENT_SIZE = 1024 * 1024; // 1 MB
102
+ const CONTENT_COUNT_TO_MERGE = 10;
103
+ const MIN_ITEMS_IN_FRESH_PACK = 100;
104
+ const MAX_ITEMS_IN_FRESH_PACK = 50000;
105
+ const MAX_TIME_IN_FRESH_PACK = 1 * 60 * 1000; // 1 min
106
+
107
+ class PackItemInfo {
108
+ /**
109
+ * @param {string} identifier identifier of item
110
+ * @param {string | null | undefined} etag etag of item
111
+ * @param {Data} value fresh value of item
112
+ */
113
+ constructor(identifier, etag, value) {
114
+ /** @type {string} */
115
+ this.identifier = identifier;
116
+ /** @type {string | null | undefined} */
117
+ this.etag = etag;
118
+ /** @type {number} */
119
+ this.location = -1;
120
+ /** @type {number} */
121
+ this.lastAccess = Date.now();
122
+ /** @type {Data} */
123
+ this.freshValue = value;
124
+ }
125
+ }
126
+
127
+ class Pack {
128
+ /**
129
+ * @param {Logger} logger a logger
130
+ * @param {number} maxAge max age of cache items
131
+ */
132
+ constructor(logger, maxAge) {
133
+ /** @type {ItemInfo} */
134
+ this.itemInfo = new Map();
135
+ /** @type {(string | undefined)[]} */
136
+ this.requests = [];
137
+ /** @type {undefined | NodeJS.Timeout} */
138
+ this.requestsTimeout = undefined;
139
+ /** @type {ItemInfo} */
140
+ this.freshContent = new Map();
141
+ /** @type {(undefined | PackContent)[]} */
142
+ this.content = [];
143
+ /** @type {boolean} */
144
+ this.invalid = false;
145
+ /** @type {Logger} */
146
+ this.logger = logger;
147
+ /** @type {number} */
148
+ this.maxAge = maxAge;
149
+ }
150
+
151
+ /**
152
+ * @param {string} identifier identifier
153
+ */
154
+ _addRequest(identifier) {
155
+ this.requests.push(identifier);
156
+ if (this.requestsTimeout === undefined) {
157
+ this.requestsTimeout = setTimeout(() => {
158
+ this.requests.push(undefined);
159
+ this.requestsTimeout = undefined;
160
+ }, MAX_TIME_IN_FRESH_PACK);
161
+ if (this.requestsTimeout.unref) this.requestsTimeout.unref();
162
+ }
163
+ }
164
+
165
+ stopCapturingRequests() {
166
+ if (this.requestsTimeout !== undefined) {
167
+ clearTimeout(this.requestsTimeout);
168
+ this.requestsTimeout = undefined;
169
+ }
170
+ }
171
+
172
+ /**
173
+ * @param {string} identifier unique name for the resource
174
+ * @param {string | null} etag etag of the resource
175
+ * @returns {Data} cached content
176
+ */
177
+ get(identifier, etag) {
178
+ const info = this.itemInfo.get(identifier);
179
+ this._addRequest(identifier);
180
+ if (info === undefined) {
181
+ return;
182
+ }
183
+ if (info.etag !== etag) return null;
184
+ info.lastAccess = Date.now();
185
+ const loc = info.location;
186
+ if (loc === -1) {
187
+ return info.freshValue;
188
+ }
189
+ if (!this.content[loc]) {
190
+ return;
191
+ }
192
+ return /** @type {PackContent} */ (this.content[loc]).get(identifier);
193
+ }
194
+
195
+ /**
196
+ * @param {string} identifier unique name for the resource
197
+ * @param {string | null} etag etag of the resource
198
+ * @param {Data} data cached content
199
+ * @returns {void}
200
+ */
201
+ set(identifier, etag, data) {
202
+ if (!this.invalid) {
203
+ this.invalid = true;
204
+ this.logger.log(`Pack got invalid because of write to: ${identifier}`);
205
+ }
206
+ const info = this.itemInfo.get(identifier);
207
+ if (info === undefined) {
208
+ const newInfo = new PackItemInfo(identifier, etag, data);
209
+ this.itemInfo.set(identifier, newInfo);
210
+ this._addRequest(identifier);
211
+ this.freshContent.set(identifier, newInfo);
212
+ } else {
213
+ const loc = info.location;
214
+ if (loc >= 0) {
215
+ this._addRequest(identifier);
216
+ this.freshContent.set(identifier, info);
217
+ const content = /** @type {PackContent} */ (this.content[loc]);
218
+ content.delete(identifier);
219
+ if (content.items.size === 0) {
220
+ this.content[loc] = undefined;
221
+ this.logger.debug("Pack %d got empty and is removed", loc);
222
+ }
223
+ }
224
+ info.freshValue = data;
225
+ info.lastAccess = Date.now();
226
+ info.etag = etag;
227
+ info.location = -1;
228
+ }
229
+ }
230
+
231
+ getContentStats() {
232
+ let count = 0;
233
+ let size = 0;
234
+ for (const content of this.content) {
235
+ if (content !== undefined) {
236
+ count++;
237
+ const s = content.getSize();
238
+ if (s > 0) {
239
+ size += s;
240
+ }
241
+ }
242
+ }
243
+ return { count, size };
244
+ }
245
+
246
+ /**
247
+ * @returns {number} new location of data entries
248
+ */
249
+ _findLocation() {
250
+ /** @type {number} */
251
+ let i;
252
+ for (i = 0; i < this.content.length && this.content[i] !== undefined; i++);
253
+ return i;
254
+ }
255
+
256
+ /**
257
+ * @private
258
+ * @param {Items} items items
259
+ * @param {Items} usedItems used items
260
+ * @param {number} newLoc new location
261
+ */
262
+ _gcAndUpdateLocation(items, usedItems, newLoc) {
263
+ let count = 0;
264
+ /** @type {undefined | string} */
265
+ let lastGC;
266
+ const now = Date.now();
267
+ for (const identifier of items) {
268
+ const info = /** @type {PackItemInfo} */ (this.itemInfo.get(identifier));
269
+ if (now - info.lastAccess > this.maxAge) {
270
+ this.itemInfo.delete(identifier);
271
+ items.delete(identifier);
272
+ usedItems.delete(identifier);
273
+ count++;
274
+ lastGC = identifier;
275
+ } else {
276
+ info.location = newLoc;
277
+ }
278
+ }
279
+ if (count > 0) {
280
+ this.logger.log(
281
+ "Garbage Collected %d old items at pack %d (%d items remaining) e. g. %s",
282
+ count,
283
+ newLoc,
284
+ items.size,
285
+ lastGC
286
+ );
287
+ }
288
+ }
289
+
290
+ _persistFreshContent() {
291
+ /** @typedef {{ items: Items, map: Content, loc: number }} PackItem */
292
+ const itemsCount = this.freshContent.size;
293
+ if (itemsCount > 0) {
294
+ const packCount = Math.ceil(itemsCount / MAX_ITEMS_IN_FRESH_PACK);
295
+ const itemsPerPack = Math.ceil(itemsCount / packCount);
296
+ /** @type {PackItem[]} */
297
+ const packs = [];
298
+ let i = 0;
299
+ let ignoreNextTimeTick = false;
300
+ const createNextPack = () => {
301
+ const loc = this._findLocation();
302
+ this.content[loc] = /** @type {EXPECTED_ANY} */ (null); // reserve
303
+ /** @type {PackItem} */
304
+ const pack = {
305
+ items: new Set(),
306
+ map: new Map(),
307
+ loc
308
+ };
309
+ packs.push(pack);
310
+ return pack;
311
+ };
312
+ let pack = createNextPack();
313
+ if (this.requestsTimeout !== undefined) {
314
+ clearTimeout(this.requestsTimeout);
315
+ }
316
+ for (const identifier of this.requests) {
317
+ if (identifier === undefined) {
318
+ if (ignoreNextTimeTick) {
319
+ ignoreNextTimeTick = false;
320
+ } else if (pack.items.size >= MIN_ITEMS_IN_FRESH_PACK) {
321
+ i = 0;
322
+ pack = createNextPack();
323
+ }
324
+ continue;
325
+ }
326
+ const info = this.freshContent.get(identifier);
327
+ if (info === undefined) continue;
328
+ pack.items.add(identifier);
329
+ pack.map.set(identifier, info.freshValue);
330
+ info.location = pack.loc;
331
+ info.freshValue = undefined;
332
+ this.freshContent.delete(identifier);
333
+ if (++i > itemsPerPack) {
334
+ i = 0;
335
+ pack = createNextPack();
336
+ ignoreNextTimeTick = true;
337
+ }
338
+ }
339
+ this.requests.length = 0;
340
+ for (const pack of packs) {
341
+ this.content[pack.loc] = new PackContent(
342
+ pack.items,
343
+ new Set(pack.items),
344
+ new PackContentItems(pack.map)
345
+ );
346
+ }
347
+ this.logger.log(
348
+ `${itemsCount} fresh items in cache put into pack ${
349
+ packs.length > 1
350
+ ? packs
351
+ .map((pack) => `${pack.loc} (${pack.items.size} items)`)
352
+ .join(", ")
353
+ : packs[0].loc
354
+ }`
355
+ );
356
+ }
357
+ }
358
+
359
+ /**
360
+ * Merges small content files to a single content file
361
+ */
362
+ _optimizeSmallContent() {
363
+ // 1. Find all small content files
364
+ // Treat unused content files separately to avoid
365
+ // a merge-split cycle
366
+ /** @type {number[]} */
367
+ const smallUsedContents = [];
368
+ /** @type {number} */
369
+ let smallUsedContentSize = 0;
370
+ /** @type {number[]} */
371
+ const smallUnusedContents = [];
372
+ /** @type {number} */
373
+ let smallUnusedContentSize = 0;
374
+ for (let i = 0; i < this.content.length; i++) {
375
+ const content = this.content[i];
376
+ if (content === undefined) continue;
377
+ if (content.outdated) continue;
378
+ const size = content.getSize();
379
+ if (size < 0 || size > MIN_CONTENT_SIZE) continue;
380
+ if (content.used.size > 0) {
381
+ smallUsedContents.push(i);
382
+ smallUsedContentSize += size;
383
+ } else {
384
+ smallUnusedContents.push(i);
385
+ smallUnusedContentSize += size;
386
+ }
387
+ }
388
+
389
+ // 2. Check if minimum number is reached
390
+ /** @type {number[]} */
391
+ let mergedIndices;
392
+ if (
393
+ smallUsedContents.length >= CONTENT_COUNT_TO_MERGE ||
394
+ smallUsedContentSize > MIN_CONTENT_SIZE
395
+ ) {
396
+ mergedIndices = smallUsedContents;
397
+ } else if (
398
+ smallUnusedContents.length >= CONTENT_COUNT_TO_MERGE ||
399
+ smallUnusedContentSize > MIN_CONTENT_SIZE
400
+ ) {
401
+ mergedIndices = smallUnusedContents;
402
+ } else {
403
+ return;
404
+ }
405
+
406
+ /** @type {PackContent[]} */
407
+ const mergedContent = [];
408
+
409
+ // 3. Remove old content entries
410
+ for (const i of mergedIndices) {
411
+ mergedContent.push(/** @type {PackContent} */ (this.content[i]));
412
+ this.content[i] = undefined;
413
+ }
414
+
415
+ // 4. Determine merged items
416
+ /** @type {Items} */
417
+ const mergedItems = new Set();
418
+ /** @type {Items} */
419
+ const mergedUsedItems = new Set();
420
+ /** @type {((map: Content) => Promise<void>)[]} */
421
+ const addToMergedMap = [];
422
+ for (const content of mergedContent) {
423
+ for (const identifier of content.items) {
424
+ mergedItems.add(identifier);
425
+ }
426
+ for (const identifier of content.used) {
427
+ mergedUsedItems.add(identifier);
428
+ }
429
+ addToMergedMap.push(async (map) => {
430
+ // unpack existing content
431
+ // after that values are accessible in .content
432
+ await content.unpack(
433
+ "it should be merged with other small pack contents"
434
+ );
435
+ for (const [identifier, value] of /** @type {Content} */ (
436
+ content.content
437
+ )) {
438
+ map.set(identifier, value);
439
+ }
440
+ });
441
+ }
442
+
443
+ // 5. GC and update location of merged items
444
+ const newLoc = this._findLocation();
445
+ this._gcAndUpdateLocation(mergedItems, mergedUsedItems, newLoc);
446
+
447
+ // 6. If not empty, store content somewhere
448
+ if (mergedItems.size > 0) {
449
+ this.content[newLoc] = new PackContent(
450
+ mergedItems,
451
+ mergedUsedItems,
452
+ memoize(async () => {
453
+ /** @type {Content} */
454
+ const map = new Map();
455
+ await Promise.all(addToMergedMap.map((fn) => fn(map)));
456
+ return new PackContentItems(map);
457
+ })
458
+ );
459
+ this.logger.log(
460
+ "Merged %d small files with %d cache items into pack %d",
461
+ mergedContent.length,
462
+ mergedItems.size,
463
+ newLoc
464
+ );
465
+ }
466
+ }
467
+
468
+ /**
469
+ * Split large content files with used and unused items
470
+ * into two parts to separate used from unused items
471
+ */
472
+ _optimizeUnusedContent() {
473
+ // 1. Find a large content file with used and unused items
474
+ for (let i = 0; i < this.content.length; i++) {
475
+ const content = this.content[i];
476
+ if (content === undefined) continue;
477
+ const size = content.getSize();
478
+ if (size < MIN_CONTENT_SIZE) continue;
479
+ const used = content.used.size;
480
+ const total = content.items.size;
481
+ if (used > 0 && used < total) {
482
+ // 2. Remove this content
483
+ this.content[i] = undefined;
484
+
485
+ // 3. Determine items for the used content file
486
+ const usedItems = new Set(content.used);
487
+ const newLoc = this._findLocation();
488
+ this._gcAndUpdateLocation(usedItems, usedItems, newLoc);
489
+
490
+ // 4. Create content file for used items
491
+ if (usedItems.size > 0) {
492
+ this.content[newLoc] = new PackContent(
493
+ usedItems,
494
+ new Set(usedItems),
495
+ async () => {
496
+ await content.unpack(
497
+ "it should be splitted into used and unused items"
498
+ );
499
+ /** @type {Content} */
500
+ const map = new Map();
501
+ for (const identifier of usedItems) {
502
+ map.set(
503
+ identifier,
504
+ /** @type {Content} */
505
+ (content.content).get(identifier)
506
+ );
507
+ }
508
+ return new PackContentItems(map);
509
+ }
510
+ );
511
+ }
512
+
513
+ // 5. Determine items for the unused content file
514
+ const unusedItems = new Set(content.items);
515
+ /** @type {Items} */
516
+ const usedOfUnusedItems = new Set();
517
+ for (const identifier of usedItems) {
518
+ unusedItems.delete(identifier);
519
+ }
520
+ const newUnusedLoc = this._findLocation();
521
+ this._gcAndUpdateLocation(unusedItems, usedOfUnusedItems, newUnusedLoc);
522
+
523
+ // 6. Create content file for unused items
524
+ if (unusedItems.size > 0) {
525
+ this.content[newUnusedLoc] = new PackContent(
526
+ unusedItems,
527
+ usedOfUnusedItems,
528
+ async () => {
529
+ await content.unpack(
530
+ "it should be splitted into used and unused items"
531
+ );
532
+ /** @type {Content} */
533
+ const map = new Map();
534
+ for (const identifier of unusedItems) {
535
+ map.set(
536
+ identifier,
537
+ /** @type {Content} */
538
+ (content.content).get(identifier)
539
+ );
540
+ }
541
+ return new PackContentItems(map);
542
+ }
543
+ );
544
+ }
545
+
546
+ this.logger.log(
547
+ "Split pack %d into pack %d with %d used items and pack %d with %d unused items",
548
+ i,
549
+ newLoc,
550
+ usedItems.size,
551
+ newUnusedLoc,
552
+ unusedItems.size
553
+ );
554
+
555
+ // optimizing only one of them is good enough and
556
+ // reduces the amount of serialization needed
557
+ return;
558
+ }
559
+ }
560
+ }
561
+
562
+ /**
563
+ * Find the content with the oldest item and run GC on that.
564
+ * Only runs for one content to avoid large invalidation.
565
+ */
566
+ _gcOldestContent() {
567
+ /** @type {PackItemInfo | undefined} */
568
+ let oldest;
569
+ for (const info of this.itemInfo.values()) {
570
+ if (oldest === undefined || info.lastAccess < oldest.lastAccess) {
571
+ oldest = info;
572
+ }
573
+ }
574
+ if (
575
+ Date.now() - /** @type {PackItemInfo} */ (oldest).lastAccess >
576
+ this.maxAge
577
+ ) {
578
+ const loc = /** @type {PackItemInfo} */ (oldest).location;
579
+ if (loc < 0) return;
580
+ const content = /** @type {PackContent} */ (this.content[loc]);
581
+ const items = new Set(content.items);
582
+ const usedItems = new Set(content.used);
583
+ this._gcAndUpdateLocation(items, usedItems, loc);
584
+
585
+ this.content[loc] =
586
+ items.size > 0
587
+ ? new PackContent(items, usedItems, async () => {
588
+ await content.unpack(
589
+ "it contains old items that should be garbage collected"
590
+ );
591
+ /** @type {Content} */
592
+ const map = new Map();
593
+ for (const identifier of items) {
594
+ map.set(
595
+ identifier,
596
+ /** @type {Content} */
597
+ (content.content).get(identifier)
598
+ );
599
+ }
600
+ return new PackContentItems(map);
601
+ })
602
+ : undefined;
603
+ }
604
+ }
605
+
606
+ /**
607
+ * @param {ObjectSerializerContext} context context
608
+ */
609
+ serialize({ write, writeSeparate }) {
610
+ this._persistFreshContent();
611
+ this._optimizeSmallContent();
612
+ this._optimizeUnusedContent();
613
+ this._gcOldestContent();
614
+ for (const identifier of this.itemInfo.keys()) {
615
+ write(identifier);
616
+ }
617
+ write(null); // null as marker of the end of keys
618
+ for (const info of this.itemInfo.values()) {
619
+ write(info.etag);
620
+ }
621
+ for (const info of this.itemInfo.values()) {
622
+ write(info.lastAccess);
623
+ }
624
+ for (let i = 0; i < this.content.length; i++) {
625
+ const content = this.content[i];
626
+ if (content !== undefined) {
627
+ write(content.items);
628
+ content.writeLazy((lazy) =>
629
+ /** @type {NonNullable<ObjectSerializerContext["writeSeparate"]>} */
630
+ (writeSeparate)(lazy, { name: `${i}` })
631
+ );
632
+ } else {
633
+ write(undefined); // undefined marks an empty content slot
634
+ }
635
+ }
636
+ write(null); // null as marker of the end of items
637
+ }
638
+
639
+ /**
640
+ * @param {ObjectDeserializerContext & { logger: Logger }} context context
641
+ */
642
+ deserialize({ read, logger }) {
643
+ this.logger = logger;
644
+ {
645
+ const items = [];
646
+ let item = read();
647
+ while (item !== null) {
648
+ items.push(item);
649
+ item = read();
650
+ }
651
+ this.itemInfo.clear();
652
+ const infoItems = items.map((identifier) => {
653
+ const info = new PackItemInfo(identifier, undefined, undefined);
654
+ this.itemInfo.set(identifier, info);
655
+ return info;
656
+ });
657
+ for (const info of infoItems) {
658
+ info.etag = read();
659
+ }
660
+ for (const info of infoItems) {
661
+ info.lastAccess = read();
662
+ }
663
+ }
664
+ this.content.length = 0;
665
+ let items = read();
666
+ while (items !== null) {
667
+ if (items === undefined) {
668
+ this.content.push(items);
669
+ } else {
670
+ const idx = this.content.length;
671
+ const lazy = read();
672
+ this.content.push(
673
+ new PackContent(
674
+ items,
675
+ new Set(),
676
+ lazy,
677
+ logger,
678
+ `${this.content.length}`
679
+ )
680
+ );
681
+ for (const identifier of items) {
682
+ /** @type {PackItemInfo} */
683
+ (this.itemInfo.get(identifier)).location = idx;
684
+ }
685
+ }
686
+ items = read();
687
+ }
688
+ }
689
+ }
690
+
691
+ makeSerializable(Pack, "webpack/lib/cache/PackFileCacheStrategy", "Pack");
692
+
693
+ /** @typedef {Map<string, Data>} Content */
694
+
695
+ class PackContentItems {
696
+ /**
697
+ * @param {Content} map items
698
+ */
699
+ constructor(map) {
700
+ this.map = map;
701
+ }
702
+
703
+ /**
704
+ * @param {ObjectSerializerContext & { logger: Logger, profile: boolean | undefined }} context context
705
+ */
706
+ serialize({ write, snapshot, rollback, logger, profile }) {
707
+ if (profile) {
708
+ write(false);
709
+ for (const [key, value] of this.map) {
710
+ const s = snapshot();
711
+ try {
712
+ write(key);
713
+ const start = process.hrtime();
714
+ write(value);
715
+ const durationHr = process.hrtime(start);
716
+ const duration = durationHr[0] * 1000 + durationHr[1] / 1e6;
717
+ if (duration > 1) {
718
+ if (duration > 500) {
719
+ logger.error(`Serialization of '${key}': ${duration} ms`);
720
+ } else if (duration > 50) {
721
+ logger.warn(`Serialization of '${key}': ${duration} ms`);
722
+ } else if (duration > 10) {
723
+ logger.info(`Serialization of '${key}': ${duration} ms`);
724
+ } else if (duration > 5) {
725
+ logger.log(`Serialization of '${key}': ${duration} ms`);
726
+ } else {
727
+ logger.debug(`Serialization of '${key}': ${duration} ms`);
728
+ }
729
+ }
730
+ } catch (err) {
731
+ rollback(s);
732
+ if (err === NOT_SERIALIZABLE) continue;
733
+ const msg = "Skipped not serializable cache item";
734
+ const notSerializableErr = /** @type {Error} */ (err);
735
+ if (notSerializableErr.message.includes("ModuleBuildError")) {
736
+ logger.log(
737
+ `${msg} (in build error): ${notSerializableErr.message}`
738
+ );
739
+ logger.debug(
740
+ `${msg} '${key}' (in build error): ${notSerializableErr.stack}`
741
+ );
742
+ } else {
743
+ logger.warn(`${msg}: ${notSerializableErr.message}`);
744
+ logger.debug(`${msg} '${key}': ${notSerializableErr.stack}`);
745
+ }
746
+ }
747
+ }
748
+ write(null);
749
+ return;
750
+ }
751
+ // Try to serialize all at once
752
+ const s = snapshot();
753
+ try {
754
+ write(true);
755
+ write(this.map);
756
+ } catch (_err) {
757
+ rollback(s);
758
+
759
+ // Try to serialize each item on it's own
760
+ write(false);
761
+ for (const [key, value] of this.map) {
762
+ const s = snapshot();
763
+ try {
764
+ write(key);
765
+ write(value);
766
+ } catch (err) {
767
+ rollback(s);
768
+ if (err === NOT_SERIALIZABLE) continue;
769
+ const notSerializableErr = /** @type {Error} */ (err);
770
+ logger.warn(
771
+ `Skipped not serializable cache item '${key}': ${notSerializableErr.message}`
772
+ );
773
+ logger.debug(notSerializableErr.stack);
774
+ }
775
+ }
776
+ write(null);
777
+ }
778
+ }
779
+
780
+ /**
781
+ * @param {ObjectDeserializerContext & { logger: Logger, profile: boolean | undefined }} context context
782
+ */
783
+ deserialize({ read, logger, profile }) {
784
+ if (read()) {
785
+ this.map = read();
786
+ } else if (profile) {
787
+ /** @type {Map<EXPECTED_ANY, EXPECTED_ANY>} */
788
+ const map = new Map();
789
+ let key = read();
790
+ while (key !== null) {
791
+ const start = process.hrtime();
792
+ const value = read();
793
+ const durationHr = process.hrtime(start);
794
+ const duration = durationHr[0] * 1000 + durationHr[1] / 1e6;
795
+ if (duration > 1) {
796
+ if (duration > 100) {
797
+ logger.error(`Deserialization of '${key}': ${duration} ms`);
798
+ } else if (duration > 20) {
799
+ logger.warn(`Deserialization of '${key}': ${duration} ms`);
800
+ } else if (duration > 5) {
801
+ logger.info(`Deserialization of '${key}': ${duration} ms`);
802
+ } else if (duration > 2) {
803
+ logger.log(`Deserialization of '${key}': ${duration} ms`);
804
+ } else {
805
+ logger.debug(`Deserialization of '${key}': ${duration} ms`);
806
+ }
807
+ }
808
+ map.set(key, value);
809
+ key = read();
810
+ }
811
+ this.map = map;
812
+ } else {
813
+ /** @type {Map<EXPECTED_ANY, EXPECTED_ANY>} */
814
+ const map = new Map();
815
+ let key = read();
816
+ while (key !== null) {
817
+ map.set(key, read());
818
+ key = read();
819
+ }
820
+ this.map = map;
821
+ }
822
+ }
823
+ }
824
+
825
+ makeSerializable(
826
+ PackContentItems,
827
+ "webpack/lib/cache/PackFileCacheStrategy",
828
+ "PackContentItems"
829
+ );
830
+
831
+ /** @typedef {(() => Promise<PackContentItems> | PackContentItems) & Partial<{ options: { size?: number } }>} LazyFunction */
832
+
833
+ class PackContent {
834
+ /*
835
+ This class can be in these states:
836
+ | this.lazy | this.content | this.outdated | state
837
+ A1 | undefined | Map | false | fresh content
838
+ A2 | undefined | Map | true | (will not happen)
839
+ B1 | lazy () => {} | undefined | false | not deserialized
840
+ B2 | lazy () => {} | undefined | true | not deserialized, but some items has been removed
841
+ C1 | lazy* () => {} | Map | false | deserialized
842
+ C2 | lazy* () => {} | Map | true | deserialized, and some items has been removed
843
+
844
+ this.used is a subset of this.items.
845
+ this.items is a subset of this.content.keys() resp. this.lazy().map.keys()
846
+ When this.outdated === false, this.items === this.content.keys() resp. this.lazy().map.keys()
847
+ When this.outdated === true, this.items should be used to recreated this.lazy/this.content.
848
+ When this.lazy and this.content is set, they contain the same data.
849
+ this.get must only be called with a valid item from this.items.
850
+ In state C this.lazy is unMemoized
851
+ */
852
+
853
+ /**
854
+ * @param {Items} items keys
855
+ * @param {Items} usedItems used keys
856
+ * @param {PackContentItems | (() => Promise<PackContentItems>)} dataOrFn sync or async content
857
+ * @param {Logger=} logger logger for logging
858
+ * @param {string=} lazyName name of dataOrFn for logging
859
+ */
860
+ constructor(items, usedItems, dataOrFn, logger, lazyName) {
861
+ /** @type {Items} */
862
+ this.items = items;
863
+ /** @type {LazyFunction | undefined} */
864
+ this.lazy = typeof dataOrFn === "function" ? dataOrFn : undefined;
865
+ /** @type {Content | undefined} */
866
+ this.content = typeof dataOrFn === "function" ? undefined : dataOrFn.map;
867
+ /** @type {boolean} */
868
+ this.outdated = false;
869
+ /** @type {Items} */
870
+ this.used = usedItems;
871
+ /** @type {Logger | undefined} */
872
+ this.logger = logger;
873
+ /** @type {string | undefined} */
874
+ this.lazyName = lazyName;
875
+ }
876
+
877
+ /**
878
+ * @param {string} identifier identifier
879
+ * @returns {string | Promise<string>} result
880
+ */
881
+ get(identifier) {
882
+ this.used.add(identifier);
883
+ if (this.content) {
884
+ return this.content.get(identifier);
885
+ }
886
+
887
+ const logger = /** @type {Logger} */ (this.logger);
888
+ // We are in state B
889
+ const { lazyName } = this;
890
+ /** @type {string | undefined} */
891
+ let timeMessage;
892
+ if (lazyName) {
893
+ // only log once
894
+ this.lazyName = undefined;
895
+ timeMessage = `restore cache content ${lazyName} (${formatSize(
896
+ this.getSize()
897
+ )})`;
898
+ logger.log(
899
+ `starting to restore cache content ${lazyName} (${formatSize(
900
+ this.getSize()
901
+ )}) because of request to: ${identifier}`
902
+ );
903
+ logger.time(timeMessage);
904
+ }
905
+ const value = /** @type {LazyFunction} */ (this.lazy)();
906
+ if ("then" in value) {
907
+ return value.then((data) => {
908
+ const map = data.map;
909
+ if (timeMessage) {
910
+ logger.timeEnd(timeMessage);
911
+ }
912
+ // Move to state C
913
+ this.content = map;
914
+ this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
915
+ return map.get(identifier);
916
+ });
917
+ }
918
+
919
+ const map = value.map;
920
+ if (timeMessage) {
921
+ logger.timeEnd(timeMessage);
922
+ }
923
+ // Move to state C
924
+ this.content = map;
925
+ this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
926
+ return map.get(identifier);
927
+ }
928
+
929
+ /**
930
+ * @param {string} reason explanation why unpack is necessary
931
+ * @returns {void | Promise<void>} maybe a promise if lazy
932
+ */
933
+ unpack(reason) {
934
+ if (this.content) return;
935
+
936
+ const logger = /** @type {Logger} */ (this.logger);
937
+ // Move from state B to C
938
+ if (this.lazy) {
939
+ const { lazyName } = this;
940
+ /** @type {string | undefined} */
941
+ let timeMessage;
942
+ if (lazyName) {
943
+ // only log once
944
+ this.lazyName = undefined;
945
+ timeMessage = `unpack cache content ${lazyName} (${formatSize(
946
+ this.getSize()
947
+ )})`;
948
+ logger.log(
949
+ `starting to unpack cache content ${lazyName} (${formatSize(
950
+ this.getSize()
951
+ )}) because ${reason}`
952
+ );
953
+ logger.time(timeMessage);
954
+ }
955
+ const value =
956
+ /** @type {PackContentItems | Promise<PackContentItems>} */
957
+ (this.lazy());
958
+ if ("then" in value) {
959
+ return value.then((data) => {
960
+ if (timeMessage) {
961
+ logger.timeEnd(timeMessage);
962
+ }
963
+ this.content = data.map;
964
+ });
965
+ }
966
+ if (timeMessage) {
967
+ logger.timeEnd(timeMessage);
968
+ }
969
+ this.content = value.map;
970
+ }
971
+ }
972
+
973
+ /**
974
+ * @returns {number} size of the content or -1 if not known
975
+ */
976
+ getSize() {
977
+ if (!this.lazy) return -1;
978
+ const options =
979
+ /** @type {{ options: { size?: number } }} */
980
+ (this.lazy).options;
981
+ if (!options) return -1;
982
+ const size = options.size;
983
+ if (typeof size !== "number") return -1;
984
+ return size;
985
+ }
986
+
987
+ /**
988
+ * @param {string} identifier identifier
989
+ */
990
+ delete(identifier) {
991
+ this.items.delete(identifier);
992
+ this.used.delete(identifier);
993
+ this.outdated = true;
994
+ }
995
+
996
+ /**
997
+ * @param {(lazy: LazyFunction) => (() => PackContentItems | Promise<PackContentItems>)} write write function
998
+ * @returns {void}
999
+ */
1000
+ writeLazy(write) {
1001
+ if (!this.outdated && this.lazy) {
1002
+ // State B1 or C1
1003
+ // this.lazy is still the valid deserialized version
1004
+ write(this.lazy);
1005
+ return;
1006
+ }
1007
+ if (!this.outdated && this.content) {
1008
+ // State A1
1009
+ const map = new Map(this.content);
1010
+ // Move to state C1
1011
+ this.lazy = SerializerMiddleware.unMemoizeLazy(
1012
+ write(() => new PackContentItems(map))
1013
+ );
1014
+ return;
1015
+ }
1016
+ if (this.content) {
1017
+ // State A2 or C2
1018
+ /** @type {Content} */
1019
+ const map = new Map();
1020
+ for (const item of this.items) {
1021
+ map.set(item, this.content.get(item));
1022
+ }
1023
+ // Move to state C1
1024
+ this.outdated = false;
1025
+ this.content = map;
1026
+ this.lazy = SerializerMiddleware.unMemoizeLazy(
1027
+ write(() => new PackContentItems(map))
1028
+ );
1029
+ return;
1030
+ }
1031
+ const logger = /** @type {Logger} */ (this.logger);
1032
+ // State B2
1033
+ const { lazyName } = this;
1034
+ /** @type {string | undefined} */
1035
+ let timeMessage;
1036
+ if (lazyName) {
1037
+ // only log once
1038
+ this.lazyName = undefined;
1039
+ timeMessage = `unpack cache content ${lazyName} (${formatSize(
1040
+ this.getSize()
1041
+ )})`;
1042
+ logger.log(
1043
+ `starting to unpack cache content ${lazyName} (${formatSize(
1044
+ this.getSize()
1045
+ )}) because it's outdated and need to be serialized`
1046
+ );
1047
+ logger.time(timeMessage);
1048
+ }
1049
+ const value = /** @type {LazyFunction} */ (this.lazy)();
1050
+ this.outdated = false;
1051
+ if ("then" in value) {
1052
+ // Move to state B1
1053
+ this.lazy = write(() =>
1054
+ value.then((data) => {
1055
+ if (timeMessage) {
1056
+ logger.timeEnd(timeMessage);
1057
+ }
1058
+ const oldMap = data.map;
1059
+ /** @type {Content} */
1060
+ const map = new Map();
1061
+ for (const item of this.items) {
1062
+ map.set(item, oldMap.get(item));
1063
+ }
1064
+ // Move to state C1 (or maybe C2)
1065
+ this.content = map;
1066
+ this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
1067
+
1068
+ return new PackContentItems(map);
1069
+ })
1070
+ );
1071
+ } else {
1072
+ // Move to state C1
1073
+ if (timeMessage) {
1074
+ logger.timeEnd(timeMessage);
1075
+ }
1076
+ const oldMap = value.map;
1077
+ /** @type {Content} */
1078
+ const map = new Map();
1079
+ for (const item of this.items) {
1080
+ map.set(item, oldMap.get(item));
1081
+ }
1082
+ this.content = map;
1083
+ this.lazy = write(() => new PackContentItems(map));
1084
+ }
1085
+ }
1086
+ }
1087
+
1088
+ /**
1089
+ * @param {Buffer} buf buffer
1090
+ * @returns {Buffer} buffer that can be collected
1091
+ */
1092
+ const allowCollectingMemory = (buf) => {
1093
+ const wasted = buf.buffer.byteLength - buf.byteLength;
1094
+ if (wasted > 8192 && (wasted > 1048576 || wasted > buf.byteLength)) {
1095
+ return Buffer.from(buf);
1096
+ }
1097
+ return buf;
1098
+ };
1099
+
1100
+ class PackFileCacheStrategy {
1101
+ /**
1102
+ * @param {object} options options
1103
+ * @param {Compiler} options.compiler the compiler
1104
+ * @param {IntermediateFileSystem} options.fs the filesystem
1105
+ * @param {string} options.context the context directory
1106
+ * @param {string} options.cacheLocation the location of the cache data
1107
+ * @param {string} options.version version identifier
1108
+ * @param {Logger} options.logger a logger
1109
+ * @param {SnapshotOptions} options.snapshot options regarding snapshotting
1110
+ * @param {number} options.maxAge max age of cache items
1111
+ * @param {boolean=} options.profile track and log detailed timing information for individual cache items
1112
+ * @param {boolean=} options.allowCollectingMemory allow to collect unused memory created during deserialization
1113
+ * @param {false | "gzip" | "brotli"=} options.compression compression used
1114
+ * @param {boolean=} options.readonly disable storing cache into filesystem
1115
+ */
1116
+ constructor({
1117
+ compiler,
1118
+ fs,
1119
+ context,
1120
+ cacheLocation,
1121
+ version,
1122
+ logger,
1123
+ snapshot,
1124
+ maxAge,
1125
+ profile,
1126
+ allowCollectingMemory,
1127
+ compression,
1128
+ readonly
1129
+ }) {
1130
+ /** @type {import("../serialization/Serializer")<PackContainer, null, EXPECTED_OBJECT>} */
1131
+ this.fileSerializer = createFileSerializer(
1132
+ fs,
1133
+ /** @type {HashFunction} */
1134
+ (compiler.options.output.hashFunction)
1135
+ );
1136
+ /** @type {FileSystemInfo} */
1137
+ this.fileSystemInfo = new FileSystemInfo(fs, {
1138
+ managedPaths: snapshot.managedPaths,
1139
+ immutablePaths: snapshot.immutablePaths,
1140
+ logger: logger.getChildLogger("webpack.FileSystemInfo"),
1141
+ hashFunction: compiler.options.output.hashFunction
1142
+ });
1143
+ /** @type {Compiler} */
1144
+ this.compiler = compiler;
1145
+ /** @type {string} */
1146
+ this.context = context;
1147
+ /** @type {string} */
1148
+ this.cacheLocation = cacheLocation;
1149
+ /** @type {string} */
1150
+ this.version = version;
1151
+ /** @type {Logger} */
1152
+ this.logger = logger;
1153
+ /** @type {number} */
1154
+ this.maxAge = maxAge;
1155
+ /** @type {boolean | undefined} */
1156
+ this.profile = profile;
1157
+ /** @type {boolean | undefined} */
1158
+ this.readonly = readonly;
1159
+ /** @type {boolean | undefined} */
1160
+ this.allowCollectingMemory = allowCollectingMemory;
1161
+ /** @type {false | "gzip" | "brotli" | undefined} */
1162
+ this.compression = compression;
1163
+ /** @type {string} */
1164
+ this._extension =
1165
+ compression === "brotli"
1166
+ ? ".pack.br"
1167
+ : compression === "gzip"
1168
+ ? ".pack.gz"
1169
+ : ".pack";
1170
+ /** @type {SnapshotOptions} */
1171
+ this.snapshot = snapshot;
1172
+ /** @type {BuildDependencies} */
1173
+ this.buildDependencies = new Set();
1174
+ /** @type {FileSystemDependencies} */
1175
+ this.newBuildDependencies = new LazySet();
1176
+ /** @type {Snapshot | undefined} */
1177
+ this.resolveBuildDependenciesSnapshot = undefined;
1178
+ /** @type {ResolveResults | undefined} */
1179
+ this.resolveResults = undefined;
1180
+ /** @type {Snapshot | undefined} */
1181
+ this.buildSnapshot = undefined;
1182
+ /** @type {Promise<Pack> | undefined} */
1183
+ this.packPromise = this._openPack();
1184
+ /** @type {Promise<void>} */
1185
+ this.storePromise = Promise.resolve();
1186
+ }
1187
+
1188
+ /**
1189
+ * @returns {Promise<Pack>} pack
1190
+ */
1191
+ _getPack() {
1192
+ if (this.packPromise === undefined) {
1193
+ this.packPromise = this.storePromise.then(() => this._openPack());
1194
+ }
1195
+ return this.packPromise;
1196
+ }
1197
+
1198
+ /**
1199
+ * @returns {Promise<Pack>} the pack
1200
+ */
1201
+ _openPack() {
1202
+ const { logger, profile, cacheLocation, version } = this;
1203
+ /** @type {Snapshot} */
1204
+ let buildSnapshot;
1205
+ /** @type {BuildDependencies} */
1206
+ let buildDependencies;
1207
+ /** @type {BuildDependencies} */
1208
+ let newBuildDependencies;
1209
+ /** @type {Snapshot} */
1210
+ let resolveBuildDependenciesSnapshot;
1211
+ /** @type {ResolveResults | undefined} */
1212
+ let resolveResults;
1213
+ logger.time("restore cache container");
1214
+ return this.fileSerializer
1215
+ .deserialize(null, {
1216
+ filename: `${cacheLocation}/index${this._extension}`,
1217
+ extension: `${this._extension}`,
1218
+ logger,
1219
+ profile,
1220
+ retainedBuffer: this.allowCollectingMemory
1221
+ ? allowCollectingMemory
1222
+ : undefined
1223
+ })
1224
+ .catch((err) => {
1225
+ if (err.code !== "ENOENT") {
1226
+ logger.warn(
1227
+ `Restoring pack failed from ${cacheLocation}${this._extension}: ${err}`
1228
+ );
1229
+ logger.debug(err.stack);
1230
+ } else {
1231
+ logger.debug(
1232
+ `No pack exists at ${cacheLocation}${this._extension}: ${err}`
1233
+ );
1234
+ }
1235
+ return undefined;
1236
+ })
1237
+ .then((packContainer) => {
1238
+ logger.timeEnd("restore cache container");
1239
+ if (!packContainer) return;
1240
+ if (!(packContainer instanceof PackContainer)) {
1241
+ logger.warn(
1242
+ `Restored pack from ${cacheLocation}${this._extension}, but contained content is unexpected.`,
1243
+ packContainer
1244
+ );
1245
+ return;
1246
+ }
1247
+ if (packContainer.version !== version) {
1248
+ logger.log(
1249
+ `Restored pack from ${cacheLocation}${this._extension}, but version doesn't match.`
1250
+ );
1251
+ return;
1252
+ }
1253
+ logger.time("check build dependencies");
1254
+ return Promise.all([
1255
+ new Promise((resolve, _reject) => {
1256
+ this.fileSystemInfo.checkSnapshotValid(
1257
+ packContainer.buildSnapshot,
1258
+ (err, valid) => {
1259
+ if (err) {
1260
+ logger.log(
1261
+ `Restored pack from ${cacheLocation}${this._extension}, but checking snapshot of build dependencies errored: ${err}.`
1262
+ );
1263
+ logger.debug(err.stack);
1264
+ return resolve(false);
1265
+ }
1266
+ if (!valid) {
1267
+ logger.log(
1268
+ `Restored pack from ${cacheLocation}${this._extension}, but build dependencies have changed.`
1269
+ );
1270
+ return resolve(false);
1271
+ }
1272
+ buildSnapshot = packContainer.buildSnapshot;
1273
+ return resolve(true);
1274
+ }
1275
+ );
1276
+ }),
1277
+ new Promise((resolve, _reject) => {
1278
+ this.fileSystemInfo.checkSnapshotValid(
1279
+ packContainer.resolveBuildDependenciesSnapshot,
1280
+ (err, valid) => {
1281
+ if (err) {
1282
+ logger.log(
1283
+ `Restored pack from ${cacheLocation}${this._extension}, but checking snapshot of resolving of build dependencies errored: ${err}.`
1284
+ );
1285
+ logger.debug(err.stack);
1286
+ return resolve(false);
1287
+ }
1288
+ if (valid) {
1289
+ resolveBuildDependenciesSnapshot =
1290
+ packContainer.resolveBuildDependenciesSnapshot;
1291
+ buildDependencies = packContainer.buildDependencies;
1292
+ resolveResults = packContainer.resolveResults;
1293
+ return resolve(true);
1294
+ }
1295
+ logger.log(
1296
+ "resolving of build dependencies is invalid, will re-resolve build dependencies"
1297
+ );
1298
+ this.fileSystemInfo.checkResolveResultsValid(
1299
+ packContainer.resolveResults,
1300
+ (err, valid) => {
1301
+ if (err) {
1302
+ logger.log(
1303
+ `Restored pack from ${cacheLocation}${this._extension}, but resolving of build dependencies errored: ${err}.`
1304
+ );
1305
+ logger.debug(err.stack);
1306
+ return resolve(false);
1307
+ }
1308
+ if (valid) {
1309
+ newBuildDependencies = packContainer.buildDependencies;
1310
+ resolveResults = packContainer.resolveResults;
1311
+ return resolve(true);
1312
+ }
1313
+ logger.log(
1314
+ `Restored pack from ${cacheLocation}${this._extension}, but build dependencies resolve to different locations.`
1315
+ );
1316
+ return resolve(false);
1317
+ }
1318
+ );
1319
+ }
1320
+ );
1321
+ })
1322
+ ])
1323
+ .catch((err) => {
1324
+ logger.timeEnd("check build dependencies");
1325
+ throw err;
1326
+ })
1327
+ .then(([buildSnapshotValid, resolveValid]) => {
1328
+ logger.timeEnd("check build dependencies");
1329
+ if (buildSnapshotValid && resolveValid) {
1330
+ logger.time("restore cache content metadata");
1331
+ const d =
1332
+ /** @type {() => Pack} */
1333
+ (packContainer.data)();
1334
+ logger.timeEnd("restore cache content metadata");
1335
+ return d;
1336
+ }
1337
+ return undefined;
1338
+ });
1339
+ })
1340
+ .then((pack) => {
1341
+ if (pack) {
1342
+ pack.maxAge = this.maxAge;
1343
+ this.buildSnapshot = buildSnapshot;
1344
+ if (buildDependencies) this.buildDependencies = buildDependencies;
1345
+ if (newBuildDependencies) {
1346
+ this.newBuildDependencies.addAll(newBuildDependencies);
1347
+ }
1348
+ this.resolveResults = resolveResults;
1349
+ this.resolveBuildDependenciesSnapshot =
1350
+ resolveBuildDependenciesSnapshot;
1351
+ return pack;
1352
+ }
1353
+ return new Pack(logger, this.maxAge);
1354
+ })
1355
+ .catch((err) => {
1356
+ this.logger.warn(
1357
+ `Restoring pack from ${cacheLocation}${this._extension} failed: ${err}`
1358
+ );
1359
+ this.logger.debug(err.stack);
1360
+ return new Pack(logger, this.maxAge);
1361
+ });
1362
+ }
1363
+
1364
+ /**
1365
+ * @param {string} identifier unique name for the resource
1366
+ * @param {Etag | null} etag etag of the resource
1367
+ * @param {Data} data cached content
1368
+ * @returns {Promise<void>} promise
1369
+ */
1370
+ store(identifier, etag, data) {
1371
+ if (this.readonly) return Promise.resolve();
1372
+
1373
+ return this._getPack().then((pack) => {
1374
+ pack.set(identifier, etag === null ? null : etag.toString(), data);
1375
+ });
1376
+ }
1377
+
1378
+ /**
1379
+ * @param {string} identifier unique name for the resource
1380
+ * @param {Etag | null} etag etag of the resource
1381
+ * @returns {Promise<Data>} promise to the cached content
1382
+ */
1383
+ restore(identifier, etag) {
1384
+ return this._getPack()
1385
+ .then((pack) =>
1386
+ pack.get(identifier, etag === null ? null : etag.toString())
1387
+ )
1388
+ .catch((err) => {
1389
+ if (err && err.code !== "ENOENT") {
1390
+ this.logger.warn(
1391
+ `Restoring failed for ${identifier} from pack: ${err}`
1392
+ );
1393
+ this.logger.debug(err.stack);
1394
+ }
1395
+ });
1396
+ }
1397
+
1398
+ /**
1399
+ * @param {FileSystemDependencies | Iterable<string>} dependencies dependencies to store
1400
+ */
1401
+ storeBuildDependencies(dependencies) {
1402
+ if (this.readonly) return;
1403
+ this.newBuildDependencies.addAll(dependencies);
1404
+ }
1405
+
1406
+ afterAllStored() {
1407
+ const packPromise = this.packPromise;
1408
+ if (packPromise === undefined) return Promise.resolve();
1409
+ const reportProgress = ProgressPlugin.getReporter(this.compiler);
1410
+ return (this.storePromise = packPromise
1411
+ .then((pack) => {
1412
+ pack.stopCapturingRequests();
1413
+ if (!pack.invalid) return;
1414
+ this.packPromise = undefined;
1415
+ this.logger.log("Storing pack...");
1416
+ /** @type {undefined | Promise<void>} */
1417
+ let promise;
1418
+ /** @type {Set<string>} */
1419
+ const newBuildDependencies = new Set();
1420
+ for (const dep of this.newBuildDependencies) {
1421
+ if (!this.buildDependencies.has(dep)) {
1422
+ newBuildDependencies.add(dep);
1423
+ }
1424
+ }
1425
+ if (newBuildDependencies.size > 0 || !this.buildSnapshot) {
1426
+ if (reportProgress) reportProgress(0.5, "resolve build dependencies");
1427
+ this.logger.debug(
1428
+ `Capturing build dependencies... (${[...newBuildDependencies].join(", ")})`
1429
+ );
1430
+ promise = new Promise(
1431
+ /**
1432
+ * @param {(value?: undefined) => void} resolve resolve
1433
+ * @param {(reason?: Error) => void} reject reject
1434
+ */
1435
+ (resolve, reject) => {
1436
+ this.logger.time("resolve build dependencies");
1437
+ this.fileSystemInfo.resolveBuildDependencies(
1438
+ this.context,
1439
+ newBuildDependencies,
1440
+ (err, result) => {
1441
+ this.logger.timeEnd("resolve build dependencies");
1442
+ if (err) return reject(err);
1443
+
1444
+ this.logger.time("snapshot build dependencies");
1445
+ const {
1446
+ files,
1447
+ directories,
1448
+ missing,
1449
+ resolveResults,
1450
+ resolveDependencies
1451
+ } = /** @type {ResolveBuildDependenciesResult} */ (result);
1452
+ if (this.resolveResults) {
1453
+ for (const [key, value] of resolveResults) {
1454
+ this.resolveResults.set(key, value);
1455
+ }
1456
+ } else {
1457
+ this.resolveResults = resolveResults;
1458
+ }
1459
+ if (reportProgress) {
1460
+ reportProgress(
1461
+ 0.6,
1462
+ "snapshot build dependencies",
1463
+ "resolving"
1464
+ );
1465
+ }
1466
+ this.fileSystemInfo.createSnapshot(
1467
+ undefined,
1468
+ resolveDependencies.files,
1469
+ resolveDependencies.directories,
1470
+ resolveDependencies.missing,
1471
+ this.snapshot.resolveBuildDependencies,
1472
+ (err, snapshot) => {
1473
+ if (err) {
1474
+ this.logger.timeEnd("snapshot build dependencies");
1475
+ return reject(err);
1476
+ }
1477
+ if (!snapshot) {
1478
+ this.logger.timeEnd("snapshot build dependencies");
1479
+ return reject(
1480
+ new Error("Unable to snapshot resolve dependencies")
1481
+ );
1482
+ }
1483
+ if (this.resolveBuildDependenciesSnapshot) {
1484
+ this.resolveBuildDependenciesSnapshot =
1485
+ this.fileSystemInfo.mergeSnapshots(
1486
+ this.resolveBuildDependenciesSnapshot,
1487
+ snapshot
1488
+ );
1489
+ } else {
1490
+ this.resolveBuildDependenciesSnapshot = snapshot;
1491
+ }
1492
+ if (reportProgress) {
1493
+ reportProgress(
1494
+ 0.7,
1495
+ "snapshot build dependencies",
1496
+ "modules"
1497
+ );
1498
+ }
1499
+ this.fileSystemInfo.createSnapshot(
1500
+ undefined,
1501
+ files,
1502
+ directories,
1503
+ missing,
1504
+ this.snapshot.buildDependencies,
1505
+ (err, snapshot) => {
1506
+ this.logger.timeEnd("snapshot build dependencies");
1507
+ if (err) return reject(err);
1508
+ if (!snapshot) {
1509
+ return reject(
1510
+ new Error("Unable to snapshot build dependencies")
1511
+ );
1512
+ }
1513
+ this.logger.debug("Captured build dependencies");
1514
+
1515
+ if (this.buildSnapshot) {
1516
+ this.buildSnapshot =
1517
+ this.fileSystemInfo.mergeSnapshots(
1518
+ this.buildSnapshot,
1519
+ snapshot
1520
+ );
1521
+ } else {
1522
+ this.buildSnapshot = snapshot;
1523
+ }
1524
+
1525
+ resolve();
1526
+ }
1527
+ );
1528
+ }
1529
+ );
1530
+ }
1531
+ );
1532
+ }
1533
+ );
1534
+ } else {
1535
+ promise = Promise.resolve();
1536
+ }
1537
+ return promise.then(() => {
1538
+ if (reportProgress) reportProgress(0.8, "serialize pack");
1539
+ this.logger.time("store pack");
1540
+ const updatedBuildDependencies = new Set(this.buildDependencies);
1541
+ for (const dep of newBuildDependencies) {
1542
+ updatedBuildDependencies.add(dep);
1543
+ }
1544
+ const content = new PackContainer(
1545
+ pack,
1546
+ this.version,
1547
+ /** @type {Snapshot} */
1548
+ (this.buildSnapshot),
1549
+ updatedBuildDependencies,
1550
+ /** @type {ResolveResults} */
1551
+ (this.resolveResults),
1552
+ /** @type {Snapshot} */
1553
+ (this.resolveBuildDependenciesSnapshot)
1554
+ );
1555
+ return this.fileSerializer
1556
+ .serialize(content, {
1557
+ filename: `${this.cacheLocation}/index${this._extension}`,
1558
+ extension: `${this._extension}`,
1559
+ logger: this.logger,
1560
+ profile: this.profile
1561
+ })
1562
+ .then(() => {
1563
+ for (const dep of newBuildDependencies) {
1564
+ this.buildDependencies.add(dep);
1565
+ }
1566
+ this.newBuildDependencies.clear();
1567
+ this.logger.timeEnd("store pack");
1568
+ const stats = pack.getContentStats();
1569
+ this.logger.log(
1570
+ "Stored pack (%d items, %d files, %d MiB)",
1571
+ pack.itemInfo.size,
1572
+ stats.count,
1573
+ Math.round(stats.size / 1024 / 1024)
1574
+ );
1575
+ })
1576
+ .catch((err) => {
1577
+ this.logger.timeEnd("store pack");
1578
+ this.logger.warn(`Caching failed for pack: ${err}`);
1579
+ this.logger.debug(err.stack);
1580
+ });
1581
+ });
1582
+ })
1583
+ .catch((err) => {
1584
+ this.logger.warn(`Caching failed for pack: ${err}`);
1585
+ this.logger.debug(err.stack);
1586
+ }));
1587
+ }
1588
+
1589
+ clear() {
1590
+ this.fileSystemInfo.clear();
1591
+ this.buildDependencies.clear();
1592
+ this.newBuildDependencies.clear();
1593
+ this.resolveBuildDependenciesSnapshot = undefined;
1594
+ this.resolveResults = undefined;
1595
+ this.buildSnapshot = undefined;
1596
+ this.packPromise = undefined;
1597
+ }
1598
+ }
1599
+
1600
+ module.exports = PackFileCacheStrategy;