@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
@@ -16,20 +16,28 @@ const ImportDependency = require("./dependencies/ImportDependency");
16
16
  const { coreModules } = require("./node/nodeBuiltins");
17
17
  const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
18
18
 
19
- /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
20
- /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
21
- /** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
22
- /** @typedef {import("../declarations/WebpackOptions").ExternalItem} ExternalItem */
23
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemValue} ExternalItemValue */
24
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectKnown} ExternalItemObjectKnown */
25
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectUnknown} ExternalItemObjectUnknown */
26
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemInterop} ExternalItemInterop */
27
- /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
28
- /** @typedef {import("./Dependency")} Dependency */
29
- /** @typedef {import("./ExternalModule").DependencyMeta} DependencyMeta */
30
- /** @typedef {import("./ModuleFactory").IssuerLayer} IssuerLayer */
31
- /** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
32
- /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
19
+ /** @import { ResolveContext } from "enhanced-resolve" */
20
+ /**
21
+ * @import {
22
+ * ResolveOptions,
23
+ * ExternalsType,
24
+ * ExternalItem,
25
+ * ExternalItemValue,
26
+ * ExternalItemObjectKnown,
27
+ * ExternalItemObjectUnknown,
28
+ * ExternalItemInterop,
29
+ * Externals
30
+ * } from "../declarations/WebpackOptions"
31
+ */
32
+ /** @import Dependency from "./Dependency" */
33
+ /** @import { DependencyMeta, ExternalModuleRequest } from "./ExternalModule" */
34
+ /**
35
+ * @import {
36
+ * IssuerLayer,
37
+ * ModuleFactoryCreateDataContextInfo
38
+ * } from "./ModuleFactory"
39
+ */
40
+ /** @import NormalModuleFactory from "./NormalModuleFactory" */
33
41
 
34
42
  /** @typedef {((context: string, request: string, callback: (err?: Error | null, result?: string | false, resolveRequest?: import("enhanced-resolve").ResolveRequest) => void) => void)} ExternalItemFunctionDataGetResolveCallbackResult */
35
43
  /** @typedef {((context: string, request: string) => Promise<string>)} ExternalItemFunctionDataGetResolveResult */
@@ -43,6 +51,7 @@ const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
43
51
  * @property {string} dependencyType the category of the referencing dependency
44
52
  * @property {ExternalItemFunctionDataGetResolve} getResolve get a resolve function with the current resolver options
45
53
  * @property {string} request the request as written by the user in the require/import expression/statement
54
+ * @property {string} originalRequest same as `request`, except for an element of a context module (a request containing an expression), where it is the request as written by the user instead of the one relative to the resolved context directory
46
55
  */
47
56
 
48
57
  /** @typedef {((data: ExternalItemFunctionData, callback: (err?: (Error | null), result?: ExternalItemValue) => void) => void)} ExternalItemFunctionCallback */
@@ -115,7 +124,12 @@ const resolveLayer = (obj, layer) => {
115
124
  return result;
116
125
  };
117
126
 
118
- /** @typedef {string | string[] | boolean | Record<string, string | string[]>} ExternalValue */
127
+ // the keys `ExternalItemValueWithOptions` allows, mirroring the schema
128
+ const OPTIONS_FORM_KEYS = new Set(["external", "sideEffects"]);
129
+
130
+ /** @typedef {string | string[] | boolean | Record<string, string | string[]>} ExternalTargetValue */
131
+ /** @typedef {{ external: ExternalTargetValue, sideEffects?: boolean }} ExternalValueWithOptions */
132
+ /** @typedef {ExternalTargetValue | ExternalValueWithOptions} ExternalValue */
119
133
 
120
134
  const PLUGIN_NAME = "ExternalModuleFactoryPlugin";
121
135
 
@@ -145,6 +159,14 @@ class ExternalModuleFactoryPlugin {
145
159
  const contextInfo = data.contextInfo;
146
160
  const dependency = data.dependencies[0];
147
161
  const dependencyType = data.dependencyType;
162
+ const request = dependency.request;
163
+ // a context element's request is relative to the resolved directory
164
+ // (`./file.mjs`), externals are written against what the user wrote
165
+ const originalRequest =
166
+ dependency instanceof ContextElementDependency
167
+ ? dependency.originalRequest
168
+ : request;
169
+ const hasOriginalRequest = originalRequest !== request;
148
170
 
149
171
  /** @typedef {(err?: Error | null, externalModule?: ExternalModule) => void} HandleExternalCallback */
150
172
 
@@ -156,12 +178,33 @@ class ExternalModuleFactoryPlugin {
156
178
  * @returns {void}
157
179
  */
158
180
  const handleExternal = (value, type, callback) => {
159
- if (value === false) {
181
+ /** @type {boolean | undefined} */
182
+ let sideEffects;
183
+ /** @type {ExternalTargetValue} */
184
+ let target;
185
+ // the options form carries the target under `external`; a target
186
+ // map holding an `external` type key keeps its own meaning
187
+ if (
188
+ typeof value === "object" &&
189
+ value !== null &&
190
+ !Array.isArray(value) &&
191
+ Object.prototype.hasOwnProperty.call(value, "external") &&
192
+ Object.keys(value).every((key) => OPTIONS_FORM_KEYS.has(key))
193
+ ) {
194
+ const withOptions =
195
+ /** @type {ExternalValueWithOptions} */
196
+ (value);
197
+ sideEffects = withOptions.sideEffects;
198
+ target = withOptions.external;
199
+ } else {
200
+ target = /** @type {ExternalTargetValue} */ (value);
201
+ }
202
+ if (target === false) {
160
203
  // Not externals, fallback to original factory
161
204
  return callback();
162
205
  }
163
- /** @type {ExternalValue} */
164
- let externalConfig = value === true ? dependency.request : value;
206
+ /** @type {ExternalModuleRequest} */
207
+ let externalConfig = target === true ? originalRequest : target;
165
208
  // `interop` is a reserved key on the object form, not a target;
166
209
  // pull it out so the rest stays a pure externalsType->request map.
167
210
  /** @type {ExternalItemInterop | undefined} */
@@ -244,8 +287,12 @@ class ExternalModuleFactoryPlugin {
244
287
  };
245
288
  }
246
289
 
290
+ // a css `url()` reads the url out of the external: no js wrapper
291
+ // TODO webpack 6 drop "css-url" once the alias is removed
247
292
  if (
248
- resolvedType === "asset" &&
293
+ (resolvedType === "asset" ||
294
+ resolvedType === ASSET_URL_TYPE ||
295
+ resolvedType === "css-url") &&
249
296
  dependency instanceof CssUrlDependency
250
297
  ) {
251
298
  dependencyMeta = { sourceType: ASSET_URL_TYPE };
@@ -256,9 +303,10 @@ class ExternalModuleFactoryPlugin {
256
303
  new ExternalModule(
257
304
  externalConfig,
258
305
  resolvedType,
259
- dependency.request,
306
+ originalRequest,
260
307
  dependencyMeta,
261
- interop
308
+ interop,
309
+ sideEffects
262
310
  )
263
311
  );
264
312
  };
@@ -272,10 +320,11 @@ class ExternalModuleFactoryPlugin {
272
320
  const handleExternals = (externals, callback) => {
273
321
  if (typeof externals === "string") {
274
322
  if (
275
- externals === dependency.request ||
276
- externals === getAlternateCoreModuleRequest(dependency.request)
323
+ externals === request ||
324
+ (hasOriginalRequest && externals === originalRequest) ||
325
+ externals === getAlternateCoreModuleRequest(request)
277
326
  ) {
278
- return handleExternal(dependency.request, undefined, callback);
327
+ return handleExternal(originalRequest, undefined, callback);
279
328
  }
280
329
  } else if (Array.isArray(externals)) {
281
330
  let i = 0;
@@ -311,8 +360,11 @@ class ExternalModuleFactoryPlugin {
311
360
  next();
312
361
  return;
313
362
  } else if (externals instanceof RegExp) {
314
- if (externals.test(dependency.request)) {
315
- return handleExternal(dependency.request, undefined, callback);
363
+ if (
364
+ externals.test(request) ||
365
+ (hasOriginalRequest && externals.test(originalRequest))
366
+ ) {
367
+ return handleExternal(originalRequest, undefined, callback);
316
368
  }
317
369
  } else if (typeof externals === "function") {
318
370
  /**
@@ -332,17 +384,13 @@ class ExternalModuleFactoryPlugin {
332
384
  };
333
385
  if (externals.length === 3) {
334
386
  // TODO webpack 6 remove this
335
- callDeprecatedExternals(
336
- externals,
337
- context,
338
- dependency.request,
339
- cb
340
- );
387
+ callDeprecatedExternals(externals, context, request, cb);
341
388
  } else {
342
389
  const promise = externals(
343
390
  {
344
391
  context,
345
- request: dependency.request,
392
+ request,
393
+ originalRequest,
346
394
  dependencyType,
347
395
  contextInfo,
348
396
  getResolve: (options) => (context, request, callback) => {
@@ -401,21 +449,29 @@ class ExternalModuleFactoryPlugin {
401
449
  (contextInfo.issuerLayer)
402
450
  );
403
451
  if (
452
+ Object.prototype.hasOwnProperty.call(resolvedExternals, request)
453
+ ) {
454
+ return handleExternal(
455
+ resolvedExternals[request],
456
+ undefined,
457
+ callback
458
+ );
459
+ }
460
+ if (
461
+ hasOriginalRequest &&
404
462
  Object.prototype.hasOwnProperty.call(
405
463
  resolvedExternals,
406
- dependency.request
464
+ originalRequest
407
465
  )
408
466
  ) {
409
467
  return handleExternal(
410
- resolvedExternals[dependency.request],
468
+ resolvedExternals[originalRequest],
411
469
  undefined,
412
470
  callback
413
471
  );
414
472
  }
415
473
  // Fall back to the `node:`-prefixed/unprefixed core module form.
416
- const alternateRequest = getAlternateCoreModuleRequest(
417
- dependency.request
418
- );
474
+ const alternateRequest = getAlternateCoreModuleRequest(request);
419
475
  if (
420
476
  alternateRequest !== undefined &&
421
477
  Object.prototype.hasOwnProperty.call(
@@ -439,4 +495,7 @@ class ExternalModuleFactoryPlugin {
439
495
  }
440
496
  }
441
497
 
498
+ ExternalModuleFactoryPlugin.getAlternateCoreModuleRequest =
499
+ getAlternateCoreModuleRequest;
500
+
442
501
  module.exports = ExternalModuleFactoryPlugin;
@@ -9,11 +9,15 @@ const { ModuleExternalInitFragment } = require("./ExternalModule");
9
9
  const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
10
10
  const ConcatenatedModule = require("./optimize/ConcatenatedModule");
11
11
 
12
- /** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
13
- /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
14
- /** @typedef {import("./Compiler")} Compiler */
15
- /** @typedef {import("./ExternalModule").Imported} Imported */
16
- /** @typedef {import("./Dependency")} Dependency */
12
+ /**
13
+ * @import {
14
+ * ExternalsType,
15
+ * Externals
16
+ * } from "../declarations/WebpackOptions"
17
+ */
18
+ /** @import Compiler from "./Compiler" */
19
+ /** @import { Imported } from "./ExternalModule" */
20
+ /** @import Dependency from "./Dependency" */
17
21
 
18
22
  const PLUGIN_NAME = "ExternalsPlugin";
19
23
 
@@ -53,7 +57,7 @@ class ExternalsPlugin {
53
57
 
54
58
  const chunkInitFragments = moduleInfo.chunkInitFragments;
55
59
  const moduleExternalInitFragments =
56
- /** @type {ModuleExternalInitFragment[]} */
60
+ /** @type {InstanceType<ModuleExternalInitFragment>[]} */
57
61
  (
58
62
  chunkInitFragments
59
63
  ? /** @type {unknown[]} */
@@ -10,6 +10,7 @@ const { isAbsolute } = require("path");
10
10
  const { create: createResolver } = require("enhanced-resolve");
11
11
  const asyncLib = require("neo-async");
12
12
  const { DEFAULTS } = require("./config/defaults");
13
+ const { collectCjsRequireSpecifiers } = require("./javascript/syntax");
13
14
  const AsyncQueue = require("./util/AsyncQueue");
14
15
  const StackedCacheMap = require("./util/StackedCacheMap");
15
16
  const createHash = require("./util/createHash");
@@ -18,16 +19,20 @@ const makeSerializable = require("./util/makeSerializable");
18
19
  const memoize = require("./util/memoize");
19
20
  const processAsyncTree = require("./util/processAsyncTree");
20
21
 
21
- /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
22
- /** @typedef {import("enhanced-resolve").ResolveFunctionAsync} ResolveFunctionAsync */
23
- /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
24
- /** @typedef {import("./logging/Logger").Logger} Logger */
25
- /** @typedef {import("./errors/WebpackError")} WebpackError */
26
- /** @typedef {import("./util/fs").JsonObject} JsonObject */
27
- /** @typedef {import("./util/fs").IStats} IStats */
28
- /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
29
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
30
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
+ // only the mjs build-dependency walk needs it
23
+ const getEsModuleLexer = memoize(() => require("es-module-lexer"));
24
+
25
+ /** @import { ResolveRequest, ResolveFunctionAsync } from "enhanced-resolve" */
26
+ /** @import { HashFunction } from "../declarations/WebpackOptions" */
27
+ /** @import { Logger } from "./logging/Logger" */
28
+ /** @import WebpackError from "./errors/WebpackError" */
29
+ /** @import { JsonObject, IStats, InputFileSystem } from "./util/fs" */
30
+ /**
31
+ * @import {
32
+ * ObjectDeserializerContext,
33
+ * ObjectSerializerContext
34
+ * } from "./serialization/ObjectMiddleware"
35
+ */
31
36
  /**
32
37
  * Defines the processor callback type used by this module.
33
38
  * @template T
@@ -1202,6 +1207,15 @@ const getManagedItem = (managedPath, path) => {
1202
1207
  return path.slice(0, i);
1203
1208
  };
1204
1209
 
1210
+ /**
1211
+ * The managed directory a `snapshot.managedPaths` RegExp matched. The schema
1212
+ * documents it as matching that directory, so a capture-less pattern is it.
1213
+ * @param {RegExpExecArray} match a match of a managed path RegExp
1214
+ * @returns {string} the managed directory
1215
+ */
1216
+ const getManagedPathFromMatch = (match) =>
1217
+ match[1] === undefined ? match[0] : match[1];
1218
+
1205
1219
  /**
1206
1220
  * Gets resolved timestamp.
1207
1221
  * @template {ContextFileSystemInfoEntry | ContextTimestampAndHash} T
@@ -1235,60 +1249,10 @@ const addAll = (source, target) => {
1235
1249
  for (const key of source) target.add(key);
1236
1250
  };
1237
1251
 
1238
- const getEsModuleLexer = memoize(() => require("es-module-lexer"));
1239
-
1240
- const getAcorn = memoize(/* istanbul ignore next */ () => require("acorn"));
1241
-
1242
1252
  // Bun doesn't populate `require.cache` `module.children`, so the CJS build-dependency
1243
1253
  // walk needs a source-parsing fallback there. Node/Deno populate it — never pay for it.
1244
1254
  const IS_BUN = Boolean(process.versions.bun);
1245
1255
 
1246
- /**
1247
- * Collects static `require("literal")` specifiers from CommonJS source. Used as a
1248
- * fallback where `require.cache` children aren't populated (e.g. Bun), so build
1249
- * dependencies of a CJS file are still tracked. Dynamic requires can't be seen here.
1250
- * @param {string} source source
1251
- * @returns {Set<string>} required specifiers
1252
- */
1253
- // Bun-only: exercised by BuildDependencies.longtest under the Bun CI job (no coverage upload).
1254
- /* istanbul ignore next */
1255
- const parseCjsRequires = (source) => {
1256
- /** @type {Set<string>} */
1257
- const requires = new Set();
1258
- const ast = getAcorn().parse(source, {
1259
- ecmaVersion: "latest",
1260
- sourceType: "script",
1261
- allowReturnOutsideFunction: true
1262
- });
1263
- /** @type {EXPECTED_ANY[]} */
1264
- const stack = [ast];
1265
- while (stack.length > 0) {
1266
- const node = stack.pop();
1267
- if (!node || typeof node.type !== "string") continue;
1268
- if (
1269
- node.type === "CallExpression" &&
1270
- node.callee.type === "Identifier" &&
1271
- node.callee.name === "require" &&
1272
- node.arguments.length === 1 &&
1273
- node.arguments[0].type === "Literal" &&
1274
- typeof node.arguments[0].value === "string"
1275
- ) {
1276
- requires.add(node.arguments[0].value);
1277
- }
1278
- for (const key of Object.keys(node)) {
1279
- const value = node[key];
1280
- if (Array.isArray(value)) {
1281
- for (const item of value) {
1282
- if (item && typeof item.type === "string") stack.push(item);
1283
- }
1284
- } else if (value && typeof value.type === "string") {
1285
- stack.push(value);
1286
- }
1287
- }
1288
- }
1289
- return requires;
1290
- };
1291
-
1292
1256
  /** @typedef {Set<string>} LoggedPaths */
1293
1257
 
1294
1258
  /** @typedef {FileSystemInfoEntry | ExistenceOnlyTimeEntry | "ignore" | null} FileTimestamp */
@@ -2290,12 +2254,11 @@ class FileSystemInfo {
2290
2254
  try {
2291
2255
  const context = dirname(this.fs, path);
2292
2256
  const source = /** @type {Buffer} */ (content).toString();
2293
- /** @type {Set<string>} */
2294
- const added = new Set();
2295
- for (const dependency of parseCjsRequires(source)) {
2257
+ for (const dependency of collectCjsRequireSpecifiers(
2258
+ source
2259
+ )) {
2296
2260
  if (dependency.startsWith("node:")) continue;
2297
2261
  if (builtinModules.has(dependency)) continue;
2298
- if (added.has(dependency)) continue;
2299
2262
  push({
2300
2263
  type: RBDT_RESOLVE_CJS_FILE,
2301
2264
  context,
@@ -2304,7 +2267,6 @@ class FileSystemInfo {
2304
2267
  expected: false,
2305
2268
  issuer: job
2306
2269
  });
2307
- added.add(dependency);
2308
2270
  }
2309
2271
  } catch (_err) {
2310
2272
  // Source we can't parse as CommonJS — ignore its dependencies.
@@ -2710,7 +2672,10 @@ class FileSystemInfo {
2710
2672
  for (const managedPath of this.managedPathsRegExps) {
2711
2673
  const match = managedPath.exec(path);
2712
2674
  if (match) {
2713
- const managedItem = getManagedItem(match[1], path);
2675
+ const managedItem = getManagedItem(
2676
+ getManagedPathFromMatch(match),
2677
+ path
2678
+ );
2714
2679
  if (managedItem) {
2715
2680
  classificationCache.set(path, managedItem);
2716
2681
  managedItems.add(managedItem);
@@ -3968,7 +3933,10 @@ class FileSystemInfo {
3968
3933
  for (const managedPath of this.managedPathsRegExps) {
3969
3934
  const match = managedPath.exec(path);
3970
3935
  if (match) {
3971
- const managedItem = getManagedItem(match[1], path);
3936
+ const managedItem = getManagedItem(
3937
+ getManagedPathFromMatch(match),
3938
+ path
3939
+ );
3972
3940
  if (managedItem) {
3973
3941
  // construct timestampHash from managed info
3974
3942
  return this.managedItemQueue.add(managedItem, (err, info) => {
@@ -4332,12 +4300,17 @@ class FileSystemInfo {
4332
4300
  /**
4333
4301
  * Processes the provided timestamp.
4334
4302
  * @param {ContextTimestamp} timestamp timestamp
4335
- * @param {ContextHash} hash hash
4303
+ * @param {ContextHash | null} hash hash
4336
4304
  */
4337
4305
  const finalize = (timestamp, hash) => {
4306
+ // Merging two `null` reads yields `{}`, which reads as "exists, no hash" (#21636)
4338
4307
  const result =
4339
4308
  /** @type {ContextTimestampAndHash} */
4340
- (timestamp === "ignore" ? hash : { ...timestamp, ...hash });
4309
+ (
4310
+ hash === null || timestamp === "ignore"
4311
+ ? hash
4312
+ : { ...timestamp, ...hash }
4313
+ );
4341
4314
  this._contextTshs.set(path, result);
4342
4315
  callback(null, result);
4343
4316
  };
@@ -4655,5 +4628,6 @@ class FileSystemInfo {
4655
4628
  }
4656
4629
  }
4657
4630
 
4631
+ FileSystemInfo.Snapshot = Snapshot;
4632
+
4658
4633
  module.exports = FileSystemInfo;
4659
- module.exports.Snapshot = Snapshot;
@@ -7,9 +7,8 @@
7
7
 
8
8
  const { getEntryRuntime, mergeRuntimeOwned } = require("./util/runtime");
9
9
 
10
- /** @typedef {import("./Compiler")} Compiler */
11
- /** @typedef {import("./Module").FactoryMeta} FactoryMeta */
12
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
10
+ /** @import Compiler from "./Compiler" */
11
+ /** @import { RuntimeSpec } from "./util/runtime" */
13
12
 
14
13
  const PLUGIN_NAME = "FlagAllModulesAsUsedPlugin";
15
14
  class FlagAllModulesAsUsedPlugin {
@@ -7,25 +7,27 @@
7
7
 
8
8
  const asyncLib = require("neo-async");
9
9
  const Queue = require("./util/Queue");
10
+ const { compareModulesByIdentifier } = require("./util/comparators");
10
11
  const createHash = require("./util/createHash");
11
12
 
12
- /** @typedef {import("./Compiler")} Compiler */
13
- /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
14
- /** @typedef {import("./Dependency")} Dependency */
15
- /** @typedef {import("./Dependency").ExportSpec} ExportSpec */
16
- /** @typedef {import("./Dependency").ExportsSpec} ExportsSpec */
17
- /** @typedef {import("./ExportsInfo")} ExportsInfo */
18
- /** @typedef {import("./ExportsInfo").ExportInfoName} ExportInfoName */
19
- /** @typedef {import("./ExportsInfo").RestoreProvidedData} RestoreProvidedData */
20
- /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
21
- /** @typedef {import("./LazyBarrel")} LazyBarrelController */
22
- /** @typedef {import("./Module")} Module */
23
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
13
+ /** @import Compiler from "./Compiler" */
14
+ /** @import DependenciesBlock from "./DependenciesBlock" */
15
+ /**
16
+ * @import Dependency, {
17
+ * ExportSpec,
18
+ * ExportsSpec,
19
+ * ExportInfoName
20
+ * } from "./Dependency"
21
+ */
22
+ /** @import ExportsInfo, { RestoreProvidedData } from "./ExportsInfo" */
23
+ /** @import { HashFunction } from "../declarations/WebpackOptions" */
24
+ /** @import LazyBarrelController from "./LazyBarrel" */
25
+ /** @import Module, { BuildInfo } from "./Module" */
24
26
 
25
27
  const PLUGIN_NAME = "FlagDependencyExportsPlugin";
26
28
  const PLUGIN_LOGGER_NAME = `webpack.${PLUGIN_NAME}`;
27
29
 
28
- /** @typedef {{ etag: string, data: RestoreProvidedData }} MemCacheEntry */
30
+ /** @typedef {{ etag: string, data: InstanceType<RestoreProvidedData> }} MemCacheEntry */
29
31
 
30
32
  /**
31
33
  * @param {Module} module the module
@@ -70,6 +72,8 @@ class FlagDependencyExportsPlugin {
70
72
 
71
73
  /** @type {Queue<Module>} */
72
74
  const queue = new Queue();
75
+ /** @type {Set<Module>} */
76
+ const modulesToAnalyse = new Set();
73
77
 
74
78
  // Step 1: Try to restore cached provided export info from cache
75
79
  logger.time("restore cached provided exports");
@@ -97,8 +101,8 @@ class FlagDependencyExportsPlugin {
97
101
  "string"
98
102
  ) {
99
103
  statFlaggedUncached++;
100
- // Enqueue uncacheable module for determining the exports
101
- queue.enqueue(module);
104
+ // Determined below, in a stable order
105
+ modulesToAnalyse.add(module);
102
106
  exportsInfo.setHasProvideInfo();
103
107
  return callback();
104
108
  }
@@ -133,8 +137,8 @@ class FlagDependencyExportsPlugin {
133
137
  exportsInfo.restoreProvided(result);
134
138
  } else {
135
139
  statNotCached++;
136
- // Without cached info enqueue module for determining the exports
137
- queue.enqueue(module);
140
+ // Without cached info determine the exports below
141
+ modulesToAnalyse.add(module);
138
142
  exportsInfo.setHasProvideInfo();
139
143
  }
140
144
  callback();
@@ -145,6 +149,59 @@ class FlagDependencyExportsPlugin {
145
149
  logger.timeEnd("restore cached provided exports");
146
150
  if (err) return callback(err);
147
151
 
152
+ // Seed the queue with targets before the modules that read
153
+ // them. Enqueueing at the two branches above ordered the work by
154
+ // how fast each cache lookup answered — one is synchronous, the
155
+ // other a `cache.get` callback — so the persistent cache decided
156
+ // it. A module analysed before the module it re-exports from
157
+ // reads exports that are not determined yet and over-estimates,
158
+ // and this loop can add exports info but never retract it, so
159
+ // the over-estimate survives the pass that corrects it. The
160
+ // roots are sorted so the walk is stable, and post-order visits
161
+ // each module after everything it points at.
162
+ /** @type {Set<Module>} */
163
+ const visited = new Set();
164
+ /** @type {Module[]} */
165
+ const stack = [];
166
+ /** @type {Set<Module>} */
167
+ const expanded = new Set();
168
+ for (const root of [...modulesToAnalyse].sort(
169
+ compareModulesByIdentifier
170
+ )) {
171
+ if (visited.has(root)) continue;
172
+ stack.push(root);
173
+ while (stack.length > 0) {
174
+ const current = stack[stack.length - 1];
175
+ if (expanded.has(current)) {
176
+ stack.pop();
177
+ if (!visited.has(current)) {
178
+ visited.add(current);
179
+ if (modulesToAnalyse.has(current)) {
180
+ queue.enqueue(current);
181
+ }
182
+ }
183
+ continue;
184
+ }
185
+ expanded.add(current);
186
+ for (const connection of moduleGraph.getOutgoingConnections(
187
+ current
188
+ )) {
189
+ const target = connection.module;
190
+ // A module restored from cache is already final, so
191
+ // nothing has to be ordered before it and the walk stops
192
+ // there — on an incremental build that is most of them.
193
+ if (
194
+ target !== undefined &&
195
+ target !== null &&
196
+ modulesToAnalyse.has(target) &&
197
+ !expanded.has(target)
198
+ ) {
199
+ stack.push(target);
200
+ }
201
+ }
202
+ }
203
+ }
204
+
148
205
  /** @type {Set<Module>} */
149
206
  const modulesToStore = new Set();
150
207
 
@@ -489,7 +546,7 @@ class FlagDependencyExportsPlugin {
489
546
  }
490
547
  );
491
548
 
492
- /** @type {WeakMap<Module, RestoreProvidedData>} */
549
+ /** @type {WeakMap<Module, InstanceType<RestoreProvidedData>>} */
493
550
  const providedExportsCache = new WeakMap();
494
551
  compilation.hooks.rebuildModule.tap(PLUGIN_NAME, (module) => {
495
552
  providedExportsCache.set(
@@ -499,7 +556,7 @@ class FlagDependencyExportsPlugin {
499
556
  });
500
557
  compilation.hooks.finishRebuildingModule.tap(PLUGIN_NAME, (module) => {
501
558
  moduleGraph.getExportsInfo(module).restoreProvided(
502
- /** @type {RestoreProvidedData} */
559
+ /** @type {InstanceType<RestoreProvidedData>} */
503
560
  (providedExportsCache.get(module))
504
561
  );
505
562
  });