@depup/webpack 5.109.2-depup.0 → 5.110.3-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -6,22 +6,26 @@
6
6
  "use strict";
7
7
 
8
8
  const ModuleGraphConnection = require("./ModuleGraphConnection");
9
- const AsyncDependencyToInitialChunkError = require("./errors/AsyncDependencyToInitialChunkError");
9
+ const memoize = require("./util/memoize");
10
+
10
11
  const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
11
12
 
12
- /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
13
- /** @typedef {import("./Chunk")} Chunk */
14
- /** @typedef {import("./ChunkGroup")} ChunkGroup */
15
- /** @typedef {import("./Compilation")} Compilation */
16
- /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
17
- /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
18
- /** @typedef {import("./Entrypoint")} Entrypoint */
19
- /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
20
- /** @typedef {import("./Module")} Module */
21
- /** @typedef {import("./ModuleGraph")} ModuleGraph */
22
- /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
23
- /** @typedef {import("./logging/Logger").Logger} Logger */
24
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
13
+ const getAsyncDependencyToInitialChunkError = memoize(() =>
14
+ require("./errors/AsyncDependencyToInitialChunkError")
15
+ );
16
+
17
+ /** @import AsyncDependenciesBlock from "./AsyncDependenciesBlock" */
18
+ /** @import Chunk from "./Chunk" */
19
+ /** @import ChunkGroup from "./ChunkGroup" */
20
+ /** @import Compilation from "./Compilation" */
21
+ /** @import DependenciesBlock from "./DependenciesBlock" */
22
+ /** @import { DependencyLocation } from "./Dependency" */
23
+ /** @import Entrypoint, { EntryOptions } from "./Entrypoint" */
24
+ /** @import Module from "./Module" */
25
+ /** @import ModuleGraph from "./ModuleGraph" */
26
+ /** @import { ConnectionState } from "./ModuleGraphConnection" */
27
+ /** @import { Logger } from "./logging/Logger" */
28
+ /** @import { RuntimeSpec } from "./util/runtime" */
25
29
 
26
30
  /**
27
31
  * Defines the queue item type used by this module.
@@ -723,7 +727,7 @@ const visitModules = (
723
727
  c = cgi.chunkGroup;
724
728
  if (c.isInitial()) {
725
729
  compilation.errors.push(
726
- new AsyncDependencyToInitialChunkError(
730
+ new (getAsyncDependencyToInitialChunkError())(
727
731
  /** @type {string} */ (chunkName),
728
732
  module,
729
733
  /** @type {DependencyLocation} */ (b.loc)
@@ -845,26 +849,28 @@ const visitModules = (
845
849
  chunkGroupInfo.skippedModuleConnections = skippedModuleConnections =
846
850
  new Set();
847
851
  }
848
- for (let i = skipConnectionBuffer.length - 1; i >= 0; i--) {
849
- skippedModuleConnections.add(skipConnectionBuffer[i]);
852
+ // Drained by popping (still reverse order): `length = 0` would drop
853
+ // the buffer's backing store, so the next push reallocates one.
854
+ while (skipConnectionBuffer.length > 0) {
855
+ skippedModuleConnections.add(
856
+ /** @type {[Module, ModuleGraphConnection[]]} */
857
+ (skipConnectionBuffer.pop())
858
+ );
850
859
  }
851
- skipConnectionBuffer.length = 0;
852
860
  }
853
861
  if (skipBuffer.length > 0) {
854
862
  let { skippedItems } = chunkGroupInfo;
855
863
  if (skippedItems === undefined) {
856
864
  chunkGroupInfo.skippedItems = skippedItems = new Set();
857
865
  }
858
- for (let i = skipBuffer.length - 1; i >= 0; i--) {
859
- skippedItems.add(skipBuffer[i]);
866
+ while (skipBuffer.length > 0) {
867
+ skippedItems.add(/** @type {Module} */ (skipBuffer.pop()));
860
868
  }
861
- skipBuffer.length = 0;
862
869
  }
863
870
  if (queueBuffer.length > 0) {
864
- for (let i = queueBuffer.length - 1; i >= 0; i--) {
865
- queue.push(queueBuffer[i]);
871
+ while (queueBuffer.length > 0) {
872
+ queue.push(/** @type {QueueItem} */ (queueBuffer.pop()));
866
873
  }
867
- queueBuffer.length = 0;
868
874
  }
869
875
  }
870
876
 
@@ -1076,7 +1082,12 @@ const visitModules = (
1076
1082
 
1077
1083
  statMergedAvailableModuleSets += availableModulesToBeMerged.length;
1078
1084
 
1079
- for (const availableModules of availableModulesToBeMerged) {
1085
+ // Drained by popping: the fold is commutative, and `length = 0` would
1086
+ // drop the backing store that the next enqueue then reallocates.
1087
+ while (availableModulesToBeMerged.length > 0) {
1088
+ const availableModules =
1089
+ /** @type {bigint} */
1090
+ (availableModulesToBeMerged.pop());
1080
1091
  if (minAvailableModules === undefined) {
1081
1092
  minAvailableModules = availableModules;
1082
1093
  } else {
@@ -1085,8 +1096,6 @@ const visitModules = (
1085
1096
  }
1086
1097
 
1087
1098
  const changed = minAvailableModules !== cachedMinAvailableModules;
1088
-
1089
- availableModulesToBeMerged.length = 0;
1090
1099
  if (changed) {
1091
1100
  info.minAvailableModules = minAvailableModules;
1092
1101
  info.resultingAvailableModules = undefined;
@@ -8,7 +8,7 @@
8
8
  const ExternalsPlugin = require("../ExternalsPlugin");
9
9
  const { coreModules } = require("../node/nodeBuiltins");
10
10
 
11
- /** @typedef {import("../Compiler")} Compiler */
11
+ /** @import Compiler from "../Compiler" */
12
12
 
13
13
  // Bun exposes the node.js core modules; externalize them with the `node:`
14
14
  // specifier (Bun resolves both forms) like the deno target.
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Compiler")} Compiler */
8
+ /** @import Compiler from "../Compiler" */
9
9
 
10
10
  const PLUGIN_NAME = "AddBuildDependenciesPlugin";
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Compiler")} Compiler */
8
+ /** @import Compiler from "../Compiler" */
9
9
 
10
10
  class AddManagedPathsPlugin {
11
11
  /**
@@ -8,8 +8,8 @@
8
8
  const Cache = require("../Cache");
9
9
  const ProgressPlugin = require("../ProgressPlugin");
10
10
 
11
- /** @typedef {import("../Compiler")} Compiler */
12
- /** @typedef {import("./PackFileCacheStrategy")} PackFileCacheStrategy */
11
+ /** @import Compiler from "../Compiler" */
12
+ /** @import PackFileCacheStrategy from "./PackFileCacheStrategy" */
13
13
 
14
14
  const BUILD_DEPENDENCIES_KEY = Symbol("build dependencies key");
15
15
  const PLUGIN_NAME = "IdleFileCachePlugin";
@@ -7,9 +7,8 @@
7
7
 
8
8
  const Cache = require("../Cache");
9
9
 
10
- /** @typedef {import("../Cache").Data} Data */
11
- /** @typedef {import("../Cache").Etag} Etag */
12
- /** @typedef {import("../Compiler")} Compiler */
10
+ /** @import { Data, Etag } from "../Cache" */
11
+ /** @import Compiler from "../Compiler" */
13
12
 
14
13
  class MemoryCachePlugin {
15
14
  /**
@@ -30,16 +29,25 @@ class MemoryCachePlugin {
30
29
  { name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
31
30
  (identifier, etag, gotHandlers) => {
32
31
  const cacheEntry = cache.get(identifier);
33
- if (cacheEntry === null) {
34
- return null;
35
- } else if (cacheEntry !== undefined) {
36
- return cacheEntry.etag === etag ? cacheEntry.data : null;
32
+ // A recorded miss: the whole chain was asked for this identifier already.
33
+ if (cacheEntry === null) return null;
34
+ // Etags are compared by identity — a lazy one is interned per source
35
+ // object, so equal content reached through a second object is a
36
+ // different etag. Hashing to tell those apart would cost every hit what
37
+ // laziness saves, so a mismatch falls through to the next stage instead:
38
+ // the file cache compares etags by value and can still answer. Returning
39
+ // `null` here would bail the hook and lose that (`Cache.get` maps it to
40
+ // `undefined` regardless, so it buys the caller nothing).
41
+ if (cacheEntry !== undefined && cacheEntry.etag === etag) {
42
+ return cacheEntry.data;
37
43
  }
38
44
  gotHandlers.push((result, callback) => {
39
- if (result === undefined) {
40
- cache.set(identifier, null);
41
- } else {
45
+ if (result !== undefined) {
42
46
  cache.set(identifier, { etag, data: result });
47
+ } else if (cacheEntry === undefined) {
48
+ // Record the miss only for an identifier nothing was known about:
49
+ // an entry reached with a different etag still answers its own.
50
+ cache.set(identifier, null);
43
51
  }
44
52
  return callback();
45
53
  });
@@ -7,9 +7,8 @@
7
7
 
8
8
  const Cache = require("../Cache");
9
9
 
10
- /** @typedef {import("../Cache").Data} Data */
11
- /** @typedef {import("../Cache").Etag} Etag */
12
- /** @typedef {import("../Compiler")} Compiler */
10
+ /** @import { Data, Etag } from "../Cache" */
11
+ /** @import Compiler from "../Compiler" */
13
12
 
14
13
  /**
15
14
  * Defines the memory with gc cache plugin options type used by this module.
@@ -104,29 +103,42 @@ class MemoryWithGcCachePlugin {
104
103
  { name: PLUGIN_NAME, stage: Cache.STAGE_MEMORY },
105
104
  (identifier, etag, gotHandlers) => {
106
105
  const cacheEntry = cache.get(identifier);
107
- if (cacheEntry === null) {
108
- return null;
109
- } else if (cacheEntry !== undefined) {
110
- return cacheEntry.etag === etag ? cacheEntry.data : null;
111
- }
112
- const oldCacheEntry = oldCache.get(identifier);
113
- if (oldCacheEntry !== undefined) {
114
- const cacheEntry = oldCacheEntry.entry;
115
- if (cacheEntry === null) {
116
- oldCache.delete(identifier);
117
- cache.set(identifier, cacheEntry);
118
- return null;
106
+ // A recorded miss: the whole chain was asked for this identifier already.
107
+ if (cacheEntry === null) return null;
108
+ // Etags are compared by identity — a lazy one is interned per source
109
+ // object, so equal content reached through a second object is a
110
+ // different etag. Hashing to tell those apart would cost every hit what
111
+ // laziness saves, so a mismatch falls through to the next stage instead:
112
+ // the file cache compares etags by value and can still answer. Returning
113
+ // `null` here would bail the hook and lose that (`Cache.get` maps it to
114
+ // `undefined` regardless, so it buys the caller nothing).
115
+ let known = cacheEntry !== undefined;
116
+ if (cacheEntry !== undefined) {
117
+ if (cacheEntry.etag === etag) return cacheEntry.data;
118
+ } else {
119
+ const oldCacheEntry = oldCache.get(identifier);
120
+ if (oldCacheEntry !== undefined) {
121
+ const entry = oldCacheEntry.entry;
122
+ if (entry === null) {
123
+ oldCache.delete(identifier);
124
+ cache.set(identifier, entry);
125
+ return null;
126
+ }
127
+ known = true;
128
+ if (entry.etag === etag) {
129
+ oldCache.delete(identifier);
130
+ cache.set(identifier, entry);
131
+ return entry.data;
132
+ }
119
133
  }
120
- if (cacheEntry.etag !== etag) return null;
121
- oldCache.delete(identifier);
122
- cache.set(identifier, cacheEntry);
123
- return cacheEntry.data;
124
134
  }
125
135
  gotHandlers.push((result, callback) => {
126
- if (result === undefined) {
127
- cache.set(identifier, null);
128
- } else {
136
+ if (result !== undefined) {
129
137
  cache.set(identifier, { etag, data: result });
138
+ } else if (!known) {
139
+ // Record the miss only for an identifier nothing was known about:
140
+ // an entry reached with a different etag still answers its own.
141
+ cache.set(identifier, null);
130
142
  }
131
143
  return callback();
132
144
  });
@@ -18,19 +18,26 @@ const {
18
18
  createFileSerializer
19
19
  } = require("../util/serialization");
20
20
 
21
- /** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
22
- /** @typedef {import("../Compilation").FileSystemDependencies} FileSystemDependencies */
23
- /** @typedef {import("../Cache").Data} Data */
24
- /** @typedef {import("../Cache").Etag} Etag */
25
- /** @typedef {import("../Compiler")} Compiler */
26
- /** @typedef {import("../FileSystemInfo").ResolveBuildDependenciesResult} ResolveBuildDependenciesResult */
27
- /** @typedef {import("../FileSystemInfo").ResolveResults} ResolveResults */
28
- /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
29
- /** @typedef {import("../logging/Logger").Logger} Logger */
30
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
32
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
33
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
21
+ /** @import { SnapshotOptions } from "../../declarations/WebpackOptions" */
22
+ /** @import { FileSystemDependencies } from "../Compilation" */
23
+ /** @import { Data, Etag } from "../Cache" */
24
+ /** @import Compiler from "../Compiler" */
25
+ /**
26
+ * @import {
27
+ * ResolveBuildDependenciesResult,
28
+ * ResolveResults,
29
+ * Snapshot
30
+ * } from "../FileSystemInfo"
31
+ */
32
+ /** @import { Logger } from "../logging/Logger" */
33
+ /**
34
+ * @import {
35
+ * ObjectDeserializerContext,
36
+ * ObjectSerializerContext
37
+ * } from "../serialization/ObjectMiddleware"
38
+ */
39
+ /** @import { HashFunction } from "../util/Hash" */
40
+ /** @import { IntermediateFileSystem } from "../util/fs" */
34
41
 
35
42
  /** @typedef {Set<string>} Items */
36
43
  /** @typedef {Set<string>} BuildDependencies */
@@ -52,10 +59,10 @@ class PackContainer {
52
59
  * Creates an instance of PackContainer.
53
60
  * @param {Pack} data stored data
54
61
  * @param {string} version version identifier
55
- * @param {Snapshot} buildSnapshot snapshot of all build dependencies
62
+ * @param {InstanceType<Snapshot>} buildSnapshot snapshot of all build dependencies
56
63
  * @param {BuildDependencies} buildDependencies list of all unresolved build dependencies captured
57
64
  * @param {ResolveResults} resolveResults result of the resolved build dependencies
58
- * @param {Snapshot} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
65
+ * @param {InstanceType<Snapshot>} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
59
66
  */
60
67
  constructor(
61
68
  data,
@@ -69,13 +76,13 @@ class PackContainer {
69
76
  this.data = data;
70
77
  /** @type {string} */
71
78
  this.version = version;
72
- /** @type {Snapshot} */
79
+ /** @type {InstanceType<Snapshot>} */
73
80
  this.buildSnapshot = buildSnapshot;
74
81
  /** @type {BuildDependencies} */
75
82
  this.buildDependencies = buildDependencies;
76
83
  /** @type {ResolveResults} */
77
84
  this.resolveResults = resolveResults;
78
- /** @type {Snapshot} */
85
+ /** @type {InstanceType<Snapshot>} */
79
86
  this.resolveBuildDependenciesSnapshot = resolveBuildDependenciesSnapshot;
80
87
  }
81
88
 
@@ -1256,11 +1263,11 @@ class PackFileCacheStrategy {
1256
1263
  this.buildDependencies = new Set();
1257
1264
  /** @type {FileSystemDependencies} */
1258
1265
  this.newBuildDependencies = new LazySet();
1259
- /** @type {Snapshot | undefined} */
1266
+ /** @type {InstanceType<Snapshot> | undefined} */
1260
1267
  this.resolveBuildDependenciesSnapshot = undefined;
1261
1268
  /** @type {ResolveResults | undefined} */
1262
1269
  this.resolveResults = undefined;
1263
- /** @type {Snapshot | undefined} */
1270
+ /** @type {InstanceType<Snapshot> | undefined} */
1264
1271
  this.buildSnapshot = undefined;
1265
1272
  /** @type {Promise<Pack> | undefined} */
1266
1273
  this.packPromise = this._openPack();
@@ -1285,13 +1292,13 @@ class PackFileCacheStrategy {
1285
1292
  */
1286
1293
  _openPack() {
1287
1294
  const { logger, profile, cacheLocation, version } = this;
1288
- /** @type {Snapshot} */
1295
+ /** @type {InstanceType<Snapshot>} */
1289
1296
  let buildSnapshot;
1290
1297
  /** @type {BuildDependencies} */
1291
1298
  let buildDependencies;
1292
1299
  /** @type {BuildDependencies} */
1293
1300
  let newBuildDependencies;
1294
- /** @type {Snapshot} */
1301
+ /** @type {InstanceType<Snapshot>} */
1295
1302
  let resolveBuildDependenciesSnapshot;
1296
1303
  /** @type {ResolveResults | undefined} */
1297
1304
  let resolveResults;
@@ -1633,12 +1640,12 @@ class PackFileCacheStrategy {
1633
1640
  const content = new PackContainer(
1634
1641
  pack,
1635
1642
  this.version,
1636
- /** @type {Snapshot} */
1643
+ /** @type {InstanceType<Snapshot>} */
1637
1644
  (this.buildSnapshot),
1638
1645
  updatedBuildDependencies,
1639
1646
  /** @type {ResolveResults} */
1640
1647
  (this.resolveResults),
1641
- /** @type {Snapshot} */
1648
+ /** @type {InstanceType<Snapshot>} */
1642
1649
  (this.resolveBuildDependenciesSnapshot)
1643
1650
  );
1644
1651
  const cleanup = this.fs.unlink !== undefined;
@@ -8,18 +8,29 @@
8
8
  const LazySet = require("../util/LazySet");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
- /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
12
- /** @typedef {import("enhanced-resolve").ResolveOptions} ResolveOptions */
13
- /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
14
- /** @typedef {import("enhanced-resolve").Resolver} Resolver */
15
- /** @typedef {import("../CacheFacade").ItemCacheFacade} ItemCacheFacade */
16
- /** @typedef {import("../Compiler")} Compiler */
17
- /** @typedef {import("../FileSystemInfo")} FileSystemInfo */
18
- /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
19
- /** @typedef {import("../FileSystemInfo").SnapshotOptions} SnapshotOptions */
20
- /** @typedef {import("../ResolverFactory").ResolveOptionsWithDependencyType} ResolveOptionsWithDependencyType */
21
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
11
+ /**
12
+ * @import {
13
+ * ResolveContext,
14
+ * ResolveOptions,
15
+ * ResolveRequest,
16
+ * Resolver
17
+ * } from "enhanced-resolve"
18
+ */
19
+ /** @import { ItemCacheFacade } from "../CacheFacade" */
20
+ /** @import Compiler from "../Compiler" */
21
+ /**
22
+ * @import FileSystemInfo, {
23
+ * Snapshot,
24
+ * SnapshotOptions
25
+ * } from "../FileSystemInfo"
26
+ */
27
+ /** @import { ResolveOptionsWithDependencyType } from "../ResolverFactory" */
28
+ /**
29
+ * @import {
30
+ * ObjectDeserializerContext,
31
+ * ObjectSerializerContext
32
+ * } from "../serialization/ObjectMiddleware"
33
+ */
23
34
 
24
35
  /**
25
36
  * Defines the sync hook type used by this module.
@@ -33,12 +44,12 @@ class CacheEntry {
33
44
  /**
34
45
  * Creates an instance of CacheEntry.
35
46
  * @param {ResolveRequest} result result
36
- * @param {Snapshot} snapshot snapshot
47
+ * @param {InstanceType<Snapshot>} snapshot snapshot
37
48
  */
38
49
  constructor(result, snapshot) {
39
50
  /** @type {ResolveRequest} */
40
51
  this.result = result;
41
- /** @type {Snapshot} */
52
+ /** @type {InstanceType<Snapshot>} */
42
53
  this.snapshot = snapshot;
43
54
  }
44
55
 
@@ -112,7 +123,7 @@ class ResolverCachePlugin {
112
123
  */
113
124
  apply(compiler) {
114
125
  const cache = compiler.getCache(PLUGIN_NAME);
115
- /** @type {FileSystemInfo} */
126
+ /** @type {FileSystemInfo | undefined} */
116
127
  let fileSystemInfo;
117
128
  /** @type {SnapshotOptions | undefined} */
118
129
  let snapshotOptions;
@@ -120,6 +131,12 @@ class ResolverCachePlugin {
120
131
  let cachedResolves = 0;
121
132
  let cacheInvalidResolves = 0;
122
133
  let concurrentResolves = 0;
134
+ // FileSystemInfo reaches the whole Compilation through its logger, so this
135
+ // compiler-lifetime closure would outlive what `Compiler.close()` releases.
136
+ compiler.hooks.shutdown.tap(PLUGIN_NAME, () => {
137
+ fileSystemInfo = undefined;
138
+ snapshotOptions = undefined;
139
+ });
123
140
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
124
141
  snapshotOptions = compilation.options.snapshot.resolve;
125
142
  fileSystemInfo = compilation.fileSystemInfo;
@@ -144,7 +161,7 @@ class ResolverCachePlugin {
144
161
 
145
162
  /**
146
163
  * Processes the provided item cache.
147
- * @param {ItemCacheFacade} itemCache cache
164
+ * @param {InstanceType<ItemCacheFacade>} itemCache cache
148
165
  * @param {Resolver} resolver the resolver
149
166
  * @param {ResolveContext} resolveContext context for resolving meta info
150
167
  * @param {ResolveRequest} request the request info object
@@ -209,7 +226,9 @@ class ResolverCachePlugin {
209
226
  const fileDependencies = newResolveContext.fileDependencies;
210
227
  const contextDependencies = newResolveContext.contextDependencies;
211
228
  const missingDependencies = newResolveContext.missingDependencies;
212
- fileSystemInfo.createSnapshot(
229
+ // Only reachable past the `!fileSystemInfo` guard on the resolve tap.
230
+ const fsInfo = /** @type {FileSystemInfo} */ (fileSystemInfo);
231
+ fsInfo.createSnapshot(
213
232
  resolveTime,
214
233
  /** @type {Dependencies} */
215
234
  (fileDependencies),
@@ -395,7 +414,8 @@ class ResolverCachePlugin {
395
414
 
396
415
  if (cacheEntry) {
397
416
  const { snapshot, result } = cacheEntry;
398
- fileSystemInfo.checkSnapshotValid(snapshot, (err, valid) => {
417
+ const fsInfo = /** @type {FileSystemInfo} */ (fileSystemInfo);
418
+ fsInfo.checkSnapshotValid(snapshot, (err, valid) => {
399
419
  if (err || !valid) {
400
420
  cacheInvalidResolves++;
401
421
  return doRealResolve(
@@ -8,9 +8,8 @@
8
8
  const { DEFAULTS } = require("../config/defaults");
9
9
  const createHash = require("../util/createHash");
10
10
 
11
- /** @typedef {import("../util/Hash")} Hash */
11
+ /** @import Hash, { HashFunction } from "../util/Hash" */
12
12
  /** @typedef {typeof import("../util/Hash")} HashConstructor */
13
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
14
13
 
15
14
  /**
16
15
  * Represents the lazy hashed etag runtime component.
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Cache").Etag} Etag */
8
+ /** @import { Etag } from "../Cache" */
9
9
 
10
10
  class MergedEtag {
11
11
  /**
package/lib/cli.js CHANGED
@@ -11,9 +11,7 @@ const webpackSchema =
11
11
  /** @type {EXPECTED_ANY} */
12
12
  (require("../schemas/WebpackOptions.json"));
13
13
 
14
- /** @typedef {import("json-schema").JSONSchema4} JSONSchema4 */
15
- /** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */
16
- /** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */
14
+ /** @import { JSONSchema4, JSONSchema6, JSONSchema7 } from "json-schema" */
17
15
  /** @typedef {JSONSchema4 | JSONSchema6 | JSONSchema7} JSONSchema */
18
16
  /** @typedef {JSONSchema & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean, description?: string, negatedDescription?: string, resetDescription?: string } }} Schema */
19
17
 
@@ -8,13 +8,23 @@
8
8
  const path = require("path");
9
9
  const browserslist = require("browserslist");
10
10
 
11
- /** @typedef {import("./target").ApiTargetProperties} ApiTargetProperties */
12
- /** @typedef {import("./target").EcmaTargetProperties} EcmaTargetProperties */
13
- /** @typedef {import("./target").PlatformTargetProperties} PlatformTargetProperties */
11
+ /**
12
+ * @import {
13
+ * ApiTargetProperties,
14
+ * EcmaTargetProperties,
15
+ * PlatformTargetProperties
16
+ * } from "./target"
17
+ */
14
18
 
15
19
  // [[C:]/path/to/config][:env]
16
20
  const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i;
17
21
 
22
+ // One resolution per `[input, context]` — several callers ask for the same
23
+ // target, and each miss re-reads the config and re-runs the queries. The list is
24
+ // handed out as it stands, so no caller may write to it.
25
+ /** @type {Map<string, string[] | undefined> | null} */
26
+ const cache = process.env.BROWSERSLIST_DISABLE_CACHE ? null : new Map();
27
+
18
28
  /**
19
29
  * Returns selected browsers.
20
30
  * @param {string | null | undefined} input input string
@@ -22,6 +32,25 @@ const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i;
22
32
  * @returns {string[] | undefined} selected browsers
23
33
  */
24
34
  const load = (input, context) => {
35
+ if (cache === null) return loadBrowsers(input, context);
36
+ // A newline separates the two: an input carries a config path, an env or a
37
+ // query, and a directory carries none.
38
+ const key = `${input || ""}\n${context}`;
39
+ let browsers = cache.get(key);
40
+ if (browsers === undefined && !cache.has(key)) {
41
+ browsers = loadBrowsers(input, context);
42
+ cache.set(key, browsers);
43
+ }
44
+ return browsers;
45
+ };
46
+
47
+ /**
48
+ * Read the selection out of the browserslist config or query.
49
+ * @param {string | null | undefined} input input string
50
+ * @param {string} context the context directory
51
+ * @returns {string[] | undefined} selected browsers
52
+ */
53
+ const loadBrowsers = (input, context) => {
25
54
  // browserslist:path-to-config
26
55
  // browserslist:path-to-config:env
27
56
  if (input && path.isAbsolute(input)) {
@@ -69,8 +98,15 @@ const resolve = (browsers) => {
69
98
  * @param {Record<string, number | [number, number]>} versions first supported version
70
99
  * @returns {boolean} true if supports
71
100
  */
72
- const rawChecker = (versions) =>
73
- browsers.every((v) => {
101
+ const rawChecker = (versions) => checkAll(browsers, versions);
102
+ /**
103
+ * Checks a subset of the list against a version number
104
+ * @param {string[]} list the browsers to check
105
+ * @param {Record<string, number | [number, number]>} versions first supported version
106
+ * @returns {boolean} true if all support
107
+ */
108
+ const checkAll = (list, versions) =>
109
+ list.every((v) => {
74
110
  const [name, parsedVersion] = v.split(" ");
75
111
  if (!name) return false;
76
112
  const requiredVersion = versions[name];