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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -9,9 +9,15 @@ const {
9
9
  JAVASCRIPT_MODULE_TYPE_AUTO,
10
10
  JAVASCRIPT_MODULE_TYPE_ESM
11
11
  } = require("../ModuleTypeConstants");
12
+ const RuntimeGlobals = require("../RuntimeGlobals");
13
+ const {
14
+ harmonySpecifierTag
15
+ } = require("../dependencies/HarmonyImportDependencyParserPlugin");
16
+ const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
12
17
  const PureExpressionDependency = require("../dependencies/PureExpressionDependency");
13
- const InnerGraph = require("./InnerGraph");
18
+ const { getInnerGraphUtils, topLevelSymbolTag } = require("./InnerGraph");
14
19
 
20
+ /** @typedef {import("estree").CallExpression} CallExpression */
15
21
  /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
16
22
  /** @typedef {import("estree").ClassExpression} ClassExpression */
17
23
  /** @typedef {import("estree").Expression} Expression */
@@ -20,19 +26,22 @@ const InnerGraph = require("./InnerGraph");
20
26
  /** @typedef {import("estree").Node} Node */
21
27
  /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
22
28
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
29
+ /** @typedef {import("../Compilation")} Compilation */
23
30
  /** @typedef {import("../Compiler")} Compiler */
31
+ /** @typedef {import("../Dependency")} Dependency */
24
32
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
33
+ /** @typedef {import("../Module")} Module */
34
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
25
35
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
26
36
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
27
37
  /** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
28
38
 
29
- const { topLevelSymbolTag } = InnerGraph;
30
-
31
39
  const PLUGIN_NAME = "InnerGraphPlugin";
40
+ const impureVariableDeclarationKinds = new Set(["using", "await using"]);
32
41
 
33
42
  class InnerGraphPlugin {
34
43
  /**
35
- * Apply the plugin
44
+ * Applies the plugin by registering its hooks on the compiler.
36
45
  * @param {Compiler} compiler the compiler instance
37
46
  * @returns {void}
38
47
  */
@@ -41,6 +50,7 @@ class InnerGraphPlugin {
41
50
  PLUGIN_NAME,
42
51
  (compilation, { normalModuleFactory }) => {
43
52
  const logger = compilation.getLogger("webpack.InnerGraphPlugin");
53
+ const innerGraph = getInnerGraphUtils(compilation);
44
54
 
45
55
  compilation.dependencyTemplates.set(
46
56
  PureExpressionDependency,
@@ -48,16 +58,32 @@ class InnerGraphPlugin {
48
58
  );
49
59
 
50
60
  /**
61
+ * Adds pure dependency added after parsing, with parents set so it survives persistent caching.
62
+ * @param {Module} module module
63
+ * @param {Dependency} dep pure dependency
64
+ * @returns {void}
65
+ */
66
+ const addPureDependency = (module, dep) => {
67
+ compilation.moduleGraph.setParents(dep, module, module, -1);
68
+ module.addDependency(dep);
69
+ };
70
+
71
+ /**
72
+ * Handles the hook callback for this code path.
51
73
  * @param {JavascriptParser} parser the parser
52
74
  * @param {JavascriptParserOptions} parserOptions options
53
75
  * @returns {void}
54
76
  */
55
77
  const handler = (parser, parserOptions) => {
56
78
  /**
79
+ * Processes the provided sup.
57
80
  * @param {Expression} sup sup
58
81
  */
59
82
  const onUsageSuper = (sup) => {
60
- InnerGraph.onUsage(parser.state, (usedByExports) => {
83
+ // the callback fires after parsing, when the parser can no
84
+ // longer map offsets — take the location now
85
+ const loc = parser.getLocation(sup);
86
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
61
87
  switch (usedByExports) {
62
88
  case undefined:
63
89
  case true:
@@ -67,9 +93,9 @@ class InnerGraphPlugin {
67
93
  /** @type {Range} */
68
94
  (sup.range)
69
95
  );
70
- dep.loc = /** @type {DependencyLocation} */ (sup.loc);
96
+ dep.loc = loc;
71
97
  dep.usedByExports = usedByExports;
72
- parser.state.module.addDependency(dep);
98
+ addPureDependency(module, dep);
73
99
  break;
74
100
  }
75
101
  }
@@ -77,21 +103,14 @@ class InnerGraphPlugin {
77
103
  };
78
104
 
79
105
  parser.hooks.program.tap(PLUGIN_NAME, () => {
80
- InnerGraph.enable(parser.state);
106
+ innerGraph.enable(parser.state);
81
107
 
82
108
  statementWithTopLevelSymbol = new WeakMap();
83
109
  statementPurePart = new WeakMap();
84
110
  classWithTopLevelSymbol = new WeakMap();
85
111
  declWithTopLevelSymbol = new WeakMap();
86
112
  pureDeclarators = new WeakSet();
87
- });
88
-
89
- parser.hooks.finish.tap(PLUGIN_NAME, () => {
90
- if (!InnerGraph.isEnabled(parser.state)) return;
91
-
92
- logger.time("infer dependency usage");
93
- InnerGraph.inferDependencyUsage(parser.state);
94
- logger.timeAggregate("infer dependency usage");
113
+ pureConditionByCallExpr = new WeakMap();
95
114
  });
96
115
 
97
116
  // During prewalking the following datastructures are filled with
@@ -116,75 +135,157 @@ class InnerGraphPlugin {
116
135
  /** @type {WeakSet<VariableDeclarator>} */
117
136
  let pureDeclarators = new WeakSet();
118
137
 
138
+ /** @type {WeakMap<CallExpression, (compilation: Compilation, module: Module) => boolean>} */
139
+ let pureConditionByCallExpr = new WeakMap();
140
+
141
+ parser.hooks.isPure.for("CallExpression").tap(
142
+ {
143
+ name: PLUGIN_NAME,
144
+ stage: -10
145
+ },
146
+ (expression) => {
147
+ const expr = /** @type {CallExpression} */ (expression);
148
+ const callee = expr.callee;
149
+ /** @type {Node} */
150
+ let root;
151
+ /** @type {string[]} */
152
+ let chainMembers;
153
+ if (callee.type === "Identifier") {
154
+ root = callee;
155
+ chainMembers = [];
156
+ } else if (callee.type === "MemberExpression") {
157
+ const chain = parser.extractMemberExpressionChain(callee);
158
+ // optional chaining short-circuits and breaks straight purity
159
+ if (chain.membersOptionals.some(Boolean)) return;
160
+ root = /** @type {Node} */ (chain.object);
161
+ // extractMemberExpressionChain returns members in reverse
162
+ chainMembers = [...chain.members].reverse();
163
+ } else {
164
+ return;
165
+ }
166
+ if (root.type !== "Identifier") return;
167
+ const harmonySettings =
168
+ /** @type {{ source: string, ids: string[] } | undefined} */ (
169
+ parser.getTagData(root.name, harmonySpecifierTag)
170
+ );
171
+ if (!harmonySettings) return;
172
+ const ids = [...harmonySettings.ids, ...chainMembers];
173
+ if (ids.length === 0) return;
174
+ let pos = /** @type {Range} */ (callee.range)[1];
175
+ for (const arg of expr.arguments) {
176
+ if (arg.type === "SpreadElement") return;
177
+ if (!parser.isPure(arg, pos)) return;
178
+ pos = /** @type {Range} */ (arg.range)[1];
179
+ }
180
+ const source = harmonySettings.source;
181
+ pureConditionByCallExpr.set(expr, (compilation, module) => {
182
+ const moduleGraph = compilation.moduleGraph;
183
+ for (const dep of module.dependencies) {
184
+ if (
185
+ dep instanceof HarmonyImportSideEffectDependency &&
186
+ dep.request === source
187
+ ) {
188
+ const m = moduleGraph.getModule(dep);
189
+ if (!m) return false;
190
+ const exportInfo = moduleGraph
191
+ .getExportsInfo(m)
192
+ .getReadOnlyExportInfoRecursive(ids);
193
+ if (!exportInfo) return false;
194
+ const target = exportInfo.getTarget(moduleGraph);
195
+ const final =
196
+ target && target.export
197
+ ? moduleGraph
198
+ .getExportsInfo(target.module)
199
+ .getReadOnlyExportInfoRecursive(target.export)
200
+ : exportInfo;
201
+ return final !== undefined && final.pureProvide === true;
202
+ }
203
+ }
204
+ return false;
205
+ });
206
+ }
207
+ );
208
+
119
209
  // The following hooks are used during prewalking:
120
210
 
121
- parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
122
- if (!InnerGraph.isEnabled(parser.state)) return;
211
+ parser.hooks.preStatementByType
212
+ .for("FunctionDeclaration")
213
+ .tap(PLUGIN_NAME, (statement) => {
214
+ if (!innerGraph.isEnabled(parser.state)) return;
123
215
 
124
- if (
125
- parser.scope.topLevelScope === true &&
126
- statement.type === "FunctionDeclaration"
127
- ) {
128
- const name = statement.id ? statement.id.name : "*default*";
129
- const symbol =
130
- /** @type {TopLevelSymbol} */
131
- (InnerGraph.tagTopLevelSymbol(parser, name));
132
- statementWithTopLevelSymbol.set(statement, symbol);
133
- return true;
134
- }
135
- });
216
+ if (
217
+ parser.scope.topLevelScope === true &&
218
+ statement.type === "FunctionDeclaration"
219
+ ) {
220
+ const name = statement.id ? statement.id.name : "*default*";
221
+ const symbol = /** @type {TopLevelSymbol} */ (
222
+ innerGraph.tagTopLevelSymbol(
223
+ parser,
224
+ name,
225
+ parser.isPure(
226
+ statement,
227
+ /** @type {Range} */ (statement.range)[0]
228
+ )
229
+ )
230
+ );
231
+ statementWithTopLevelSymbol.set(statement, symbol);
232
+ return true;
233
+ }
234
+ });
136
235
 
137
- parser.hooks.blockPreStatement.tap(PLUGIN_NAME, (statement) => {
138
- if (!InnerGraph.isEnabled(parser.state)) return;
236
+ /**
237
+ * @param {import("estree").Statement | import("estree").ModuleDeclaration | import("estree").MaybeNamedFunctionDeclaration | import("estree").MaybeNamedClassDeclaration} statement statement
238
+ * @returns {boolean | void} true when handled
239
+ */
240
+ const blockPreStatementHandler = (statement) => {
241
+ if (!innerGraph.isEnabled(parser.state)) return;
139
242
 
140
243
  if (parser.scope.topLevelScope === true) {
141
- if (
142
- statement.type === "ClassDeclaration" &&
143
- parser.isPure(
244
+ if (statement.type === "ClassDeclaration") {
245
+ const name = statement.id ? statement.id.name : "*default*";
246
+ const pure = parser.isPure(
144
247
  statement,
145
248
  /** @type {Range} */ (statement.range)[0]
146
- )
147
- ) {
148
- const name = statement.id ? statement.id.name : "*default*";
249
+ );
149
250
  const symbol = /** @type {TopLevelSymbol} */ (
150
- InnerGraph.tagTopLevelSymbol(parser, name)
251
+ innerGraph.tagTopLevelSymbol(parser, name, pure)
151
252
  );
152
253
  classWithTopLevelSymbol.set(statement, symbol);
153
254
  return true;
154
255
  }
155
256
  if (statement.type === "ExportDefaultDeclaration") {
156
257
  const name = "*default*";
258
+ const decl = statement.declaration;
259
+ /** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
260
+ let pure = parser.isPure(
261
+ decl,
262
+ /** @type {Range} */ (statement.range)[0]
263
+ );
264
+ if (!pure && decl.type === "CallExpression") {
265
+ const deferred = pureConditionByCallExpr.get(decl);
266
+ if (deferred) pure = deferred;
267
+ }
157
268
  const symbol =
158
269
  /** @type {TopLevelSymbol} */
159
- (InnerGraph.tagTopLevelSymbol(parser, name));
160
- const decl = statement.declaration;
270
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
161
271
  if (
162
- (decl.type === "ClassExpression" ||
163
- decl.type === "ClassDeclaration") &&
164
- parser.isPure(
165
- /** @type {ClassExpression | ClassDeclaration} */
166
- (decl),
167
- /** @type {Range} */
168
- (decl.range)[0]
169
- )
272
+ decl.type === "ClassExpression" ||
273
+ decl.type === "ClassDeclaration"
170
274
  ) {
171
275
  classWithTopLevelSymbol.set(
172
276
  /** @type {ClassExpression | ClassDeclaration} */
173
277
  (decl),
174
278
  symbol
175
279
  );
176
- } else if (
177
- parser.isPure(
178
- /** @type {Expression} */
179
- (decl),
180
- /** @type {Range} */
181
- (statement.range)[0]
182
- )
183
- ) {
280
+ } else {
184
281
  statementWithTopLevelSymbol.set(statement, symbol);
185
282
  if (
283
+ pure &&
284
+ // body deferred to call-time, no eager read
186
285
  !decl.type.endsWith("FunctionExpression") &&
286
+ // only FunctionDeclaration here (classes routed above), body deferred
187
287
  !decl.type.endsWith("Declaration") &&
288
+ // literal references nothing
188
289
  decl.type !== "Literal"
189
290
  ) {
190
291
  statementPurePart.set(
@@ -196,38 +297,52 @@ class InnerGraphPlugin {
196
297
  }
197
298
  }
198
299
  }
199
- });
200
-
201
- parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, _statement) => {
202
- if (!InnerGraph.isEnabled(parser.state)) return;
300
+ };
301
+ parser.hooks.blockPreStatementByType
302
+ .for("ClassDeclaration")
303
+ .tap(PLUGIN_NAME, blockPreStatementHandler);
304
+ parser.hooks.blockPreStatementByType
305
+ .for("ExportDefaultDeclaration")
306
+ .tap(PLUGIN_NAME, blockPreStatementHandler);
307
+
308
+ parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
309
+ if (!innerGraph.isEnabled(parser.state)) return;
310
+ if (impureVariableDeclarationKinds.has(statement.kind)) return;
203
311
  if (
204
312
  parser.scope.topLevelScope === true &&
205
313
  decl.init &&
206
314
  decl.id.type === "Identifier"
207
315
  ) {
208
316
  const name = decl.id.name;
317
+ // Skip webpack runtime variables handled by CompatibilityPlugin
209
318
  if (
210
- decl.init.type === "ClassExpression" &&
211
- parser.isPure(
212
- decl.init,
213
- /** @type {Range} */ (decl.id.range)[1]
214
- )
319
+ name === RuntimeGlobals.require ||
320
+ name === RuntimeGlobals.exports
215
321
  ) {
322
+ return;
323
+ }
324
+ /** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
325
+ let pure = parser.isPure(
326
+ decl.init,
327
+ /** @type {Range} */ (decl.id.range)[1]
328
+ );
329
+ if (!pure && decl.init.type === "CallExpression") {
330
+ const deferred = pureConditionByCallExpr.get(decl.init);
331
+ if (deferred) pure = deferred;
332
+ }
333
+
334
+ if (decl.init.type === "ClassExpression") {
216
335
  const symbol =
217
336
  /** @type {TopLevelSymbol} */
218
- (InnerGraph.tagTopLevelSymbol(parser, name));
337
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
219
338
  classWithTopLevelSymbol.set(decl.init, symbol);
220
- } else if (
221
- parser.isPure(
222
- decl.init,
223
- /** @type {Range} */ (decl.id.range)[1]
224
- )
225
- ) {
339
+ } else {
226
340
  const symbol =
227
341
  /** @type {TopLevelSymbol} */
228
- (InnerGraph.tagTopLevelSymbol(parser, name));
342
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
229
343
  declWithTopLevelSymbol.set(decl, symbol);
230
344
  if (
345
+ pure &&
231
346
  !decl.init.type.endsWith("FunctionExpression") &&
232
347
  decl.init.type !== "Literal"
233
348
  ) {
@@ -254,16 +369,19 @@ class InnerGraphPlugin {
254
369
  // The following hooks are called during walking:
255
370
 
256
371
  parser.hooks.statement.tap(PLUGIN_NAME, (statement) => {
257
- if (!InnerGraph.isEnabled(parser.state)) return;
372
+ if (!innerGraph.isEnabled(parser.state)) return;
258
373
  if (parser.scope.topLevelScope === true) {
259
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
374
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
260
375
 
261
376
  const symbol = statementWithTopLevelSymbol.get(statement);
262
377
  if (symbol) {
263
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
378
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
264
379
  const purePart = statementPurePart.get(statement);
265
380
  if (purePart) {
266
- InnerGraph.onUsage(parser.state, (usedByExports) => {
381
+ // the callback fires after parsing, when the parser can no
382
+ // longer map offsets — take the location now
383
+ const loc = parser.getLocation(statement);
384
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
267
385
  switch (usedByExports) {
268
386
  case undefined:
269
387
  case true:
@@ -272,11 +390,9 @@ class InnerGraphPlugin {
272
390
  const dep = new PureExpressionDependency(
273
391
  /** @type {Range} */ (purePart.range)
274
392
  );
275
- dep.loc =
276
- /** @type {DependencyLocation} */
277
- (statement.loc);
393
+ dep.loc = loc;
278
394
  dep.usedByExports = usedByExports;
279
- parser.state.module.addDependency(dep);
395
+ addPureDependency(module, dep);
280
396
  break;
281
397
  }
282
398
  }
@@ -289,7 +405,7 @@ class InnerGraphPlugin {
289
405
  parser.hooks.classExtendsExpression.tap(
290
406
  PLUGIN_NAME,
291
407
  (expr, statement) => {
292
- if (!InnerGraph.isEnabled(parser.state)) return;
408
+ if (!innerGraph.isEnabled(parser.state)) return;
293
409
  if (parser.scope.topLevelScope === true) {
294
410
  const symbol = classWithTopLevelSymbol.get(statement);
295
411
  if (
@@ -301,7 +417,7 @@ class InnerGraphPlugin {
301
417
  : /** @type {Range} */ (statement.range)[0]
302
418
  )
303
419
  ) {
304
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
420
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
305
421
  onUsageSuper(expr);
306
422
  }
307
423
  }
@@ -311,11 +427,11 @@ class InnerGraphPlugin {
311
427
  parser.hooks.classBodyElement.tap(
312
428
  PLUGIN_NAME,
313
429
  (element, classDefinition) => {
314
- if (!InnerGraph.isEnabled(parser.state)) return;
430
+ if (!innerGraph.isEnabled(parser.state)) return;
315
431
  if (parser.scope.topLevelScope === true) {
316
432
  const symbol = classWithTopLevelSymbol.get(classDefinition);
317
433
  if (symbol) {
318
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
434
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
319
435
  }
320
436
  }
321
437
  }
@@ -324,7 +440,7 @@ class InnerGraphPlugin {
324
440
  parser.hooks.classBodyValue.tap(
325
441
  PLUGIN_NAME,
326
442
  (expression, element, classDefinition) => {
327
- if (!InnerGraph.isEnabled(parser.state)) return;
443
+ if (!innerGraph.isEnabled(parser.state)) return;
328
444
  if (parser.scope.topLevelScope === true) {
329
445
  const symbol = classWithTopLevelSymbol.get(classDefinition);
330
446
  if (symbol) {
@@ -337,29 +453,33 @@ class InnerGraphPlugin {
337
453
  : /** @type {Range} */ (element.range)[0]
338
454
  )
339
455
  ) {
340
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
456
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
341
457
  if (element.type !== "MethodDefinition" && element.static) {
342
- InnerGraph.onUsage(parser.state, (usedByExports) => {
343
- switch (usedByExports) {
344
- case undefined:
345
- case true:
346
- return;
347
- default: {
348
- const dep = new PureExpressionDependency(
349
- /** @type {Range} */ (expression.range)
350
- );
351
- dep.loc =
352
- /** @type {DependencyLocation} */
353
- (expression.loc);
354
- dep.usedByExports = usedByExports;
355
- parser.state.module.addDependency(dep);
356
- break;
458
+ // the callback fires after parsing, when the parser can
459
+ // no longer map offsets — take the location now
460
+ const loc = parser.getLocation(expression);
461
+ innerGraph.onUsage(
462
+ parser.state,
463
+ (usedByExports, module) => {
464
+ switch (usedByExports) {
465
+ case undefined:
466
+ case true:
467
+ return;
468
+ default: {
469
+ const dep = new PureExpressionDependency(
470
+ /** @type {Range} */ (expression.range)
471
+ );
472
+ dep.loc = loc;
473
+ dep.usedByExports = usedByExports;
474
+ addPureDependency(module, dep);
475
+ break;
476
+ }
357
477
  }
358
478
  }
359
- });
479
+ );
360
480
  }
361
481
  } else {
362
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
482
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
363
483
  }
364
484
  }
365
485
  }
@@ -367,11 +487,11 @@ class InnerGraphPlugin {
367
487
  );
368
488
 
369
489
  parser.hooks.declarator.tap(PLUGIN_NAME, (decl, _statement) => {
370
- if (!InnerGraph.isEnabled(parser.state)) return;
490
+ if (!innerGraph.isEnabled(parser.state)) return;
371
491
  const symbol = declWithTopLevelSymbol.get(decl);
372
492
 
373
493
  if (symbol) {
374
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
494
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
375
495
  if (pureDeclarators.has(decl)) {
376
496
  if (
377
497
  /** @type {ClassExpression} */
@@ -381,7 +501,10 @@ class InnerGraphPlugin {
381
501
  onUsageSuper(decl.init.superClass);
382
502
  }
383
503
  } else {
384
- InnerGraph.onUsage(parser.state, (usedByExports) => {
504
+ // the callback fires after parsing, when the parser can no
505
+ // longer map offsets — take the location now
506
+ const loc = parser.getLocation(decl);
507
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
385
508
  switch (usedByExports) {
386
509
  case undefined:
387
510
  case true:
@@ -393,9 +516,9 @@ class InnerGraphPlugin {
393
516
  (decl.init).range
394
517
  )
395
518
  );
396
- dep.loc = /** @type {DependencyLocation} */ (decl.loc);
519
+ dep.loc = loc;
397
520
  dep.usedByExports = usedByExports;
398
- parser.state.module.addDependency(dep);
521
+ addPureDependency(module, dep);
399
522
  break;
400
523
  }
401
524
  }
@@ -407,7 +530,7 @@ class InnerGraphPlugin {
407
530
  decl.init
408
531
  )
409
532
  );
410
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
533
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
411
534
  return true;
412
535
  } else if (
413
536
  decl.id.type === "Identifier" &&
@@ -416,7 +539,7 @@ class InnerGraphPlugin {
416
539
  classWithTopLevelSymbol.has(decl.init)
417
540
  ) {
418
541
  parser.walkExpression(decl.init);
419
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
542
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
420
543
  return true;
421
544
  }
422
545
  });
@@ -427,10 +550,10 @@ class InnerGraphPlugin {
427
550
  const topLevelSymbol = /** @type {TopLevelSymbol} */ (
428
551
  parser.currentTagData
429
552
  );
430
- const currentTopLevelSymbol = InnerGraph.getTopLevelSymbol(
553
+ const currentTopLevelSymbol = innerGraph.getTopLevelSymbol(
431
554
  parser.state
432
555
  );
433
- InnerGraph.addUsage(
556
+ innerGraph.addUsage(
434
557
  parser.state,
435
558
  topLevelSymbol,
436
559
  currentTopLevelSymbol || true
@@ -439,7 +562,7 @@ class InnerGraphPlugin {
439
562
  parser.hooks.assign
440
563
  .for(topLevelSymbolTag)
441
564
  .tap(PLUGIN_NAME, (expr) => {
442
- if (!InnerGraph.isEnabled(parser.state)) return;
565
+ if (!innerGraph.isEnabled(parser.state)) return;
443
566
  if (expr.operator === "=") return true;
444
567
  });
445
568
  };
@@ -450,8 +573,14 @@ class InnerGraphPlugin {
450
573
  .for(JAVASCRIPT_MODULE_TYPE_ESM)
451
574
  .tap(PLUGIN_NAME, handler);
452
575
 
453
- compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {
454
- logger.timeAggregateEnd("infer dependency usage");
576
+ compilation.hooks.finishModules.tap(PLUGIN_NAME, (modules) => {
577
+ logger.time("infer dependency usage");
578
+ for (const module of modules) {
579
+ innerGraph.inferDependencyUsage(module);
580
+ // state is dead after inference; release it to not retain ASTs via callbacks
581
+ innerGraph.release(module);
582
+ }
583
+ logger.timeEnd("infer dependency usage");
455
584
  });
456
585
  }
457
586
  );
@@ -14,6 +14,7 @@ const { compareChunks } = require("../util/comparators");
14
14
  /** @typedef {import("../Compiler")} Compiler */
15
15
 
16
16
  /**
17
+ * Defines the chunk combination type used by this module.
17
18
  * @typedef {object} ChunkCombination
18
19
  * @property {boolean} deleted this is set to true when combination was removed
19
20
  * @property {number} sizeDiff
@@ -27,6 +28,7 @@ const { compareChunks } = require("../util/comparators");
27
28
  */
28
29
 
29
30
  /**
31
+ * Adds the provided map to this object.
30
32
  * @template K, V
31
33
  * @param {Map<K, Set<V>>} map map
32
34
  * @param {K} key key
@@ -45,6 +47,7 @@ const PLUGIN_NAME = "LimitChunkCountPlugin";
45
47
 
46
48
  class LimitChunkCountPlugin {
47
49
  /**
50
+ * Creates an instance of LimitChunkCountPlugin.
48
51
  * @param {LimitChunkCountPluginOptions=} options options object
49
52
  */
50
53
  constructor(options = { maxChunks: 1 }) {
@@ -53,6 +56,7 @@ class LimitChunkCountPlugin {
53
56
  }
54
57
 
55
58
  /**
59
+ * Applies the plugin by registering its hooks on the compiler.
56
60
  * @param {Compiler} compiler the webpack compiler
57
61
  * @returns {void}
58
62
  */
@@ -105,11 +109,13 @@ class LimitChunkCountPlugin {
105
109
 
106
110
  // Layer 2: ordered by smallest combined size
107
111
  /**
112
+ * Handles the stage callback for this hook.
108
113
  * @param {ChunkCombination} c combination
109
114
  * @returns {number} integrated size
110
115
  */
111
116
  (c) => c.integratedSize,
112
117
  /**
118
+ * Handles the callback logic for this hook.
113
119
  * @param {number} a a
114
120
  * @param {number} b b
115
121
  * @returns {number} result
@@ -118,11 +124,13 @@ class LimitChunkCountPlugin {
118
124
 
119
125
  // Layer 3: ordered by position difference in orderedChunk (-> to be deterministic)
120
126
  /**
127
+ * Handles the callback logic for this hook.
121
128
  * @param {ChunkCombination} c combination
122
129
  * @returns {number} position difference
123
130
  */
124
131
  (c) => c.bIdx - c.aIdx,
125
132
  /**
133
+ * Handles the callback logic for this hook.
126
134
  * @param {number} a a
127
135
  * @param {number} b b
128
136
  * @returns {number} result
@@ -131,6 +139,7 @@ class LimitChunkCountPlugin {
131
139
 
132
140
  // Layer 4: ordered by position in orderedChunk (-> to be deterministic)
133
141
  /**
142
+ * Handles the callback logic for this hook.
134
143
  * @param {ChunkCombination} a a
135
144
  * @param {ChunkCombination} b b
136
145
  * @returns {number} result