webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -5,12 +5,16 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
8
9
  const { equals } = require("./util/ArrayHelpers");
9
10
  const SortableSet = require("./util/SortableSet");
10
11
  const makeSerializable = require("./util/makeSerializable");
11
12
  const { forEachRuntime } = require("./util/runtime");
12
13
 
14
+ /** @typedef {import("./Dependency")} Dependency */
13
15
  /** @typedef {import("./Dependency").RuntimeSpec} RuntimeSpec */
16
+ /** @typedef {import("./Dependency").ExportsSpecExcludeExports} ExportsSpecExcludeExports */
17
+ /** @typedef {import("./dependencies/HarmonyImportDependency")} HarmonyImportDependency */
14
18
  /** @typedef {import("./Module")} Module */
15
19
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
16
20
  /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
@@ -21,6 +25,32 @@ const { forEachRuntime } = require("./util/runtime");
21
25
  /** @typedef {typeof UsageState.OnlyPropertiesUsed | typeof UsageState.NoInfo | typeof UsageState.Unknown | typeof UsageState.Used} RuntimeUsageStateType */
22
26
  /** @typedef {typeof UsageState.Unused | RuntimeUsageStateType} UsageStateType */
23
27
 
28
+ /** @typedef {string} ExportInfoName */
29
+
30
+ /** @typedef {Map<string, RuntimeUsageStateType>} UsedInRuntime */
31
+ /** @typedef {{ module: Module, export: ExportInfoName[], deferred: boolean }} TargetItemWithoutConnection */
32
+ /** @typedef {{ module: Module, connection: ModuleGraphConnection, export: ExportInfoName[] | undefined }} TargetItemWithConnection */
33
+ /** @typedef {(target: TargetItemWithConnection) => boolean} ResolveTargetFilter */
34
+ /** @typedef {(module: Module) => boolean} ValidTargetModuleFilter */
35
+ /** @typedef {{ connection: ModuleGraphConnection, export: ExportInfoName[], priority: number }} TargetItem */
36
+ /** @typedef {Map<Dependency | undefined, TargetItem>} Target */
37
+
38
+ /** @typedef {string | null} ExportInfoUsedName */
39
+ /** @typedef {boolean | null} ExportInfoProvided */
40
+
41
+ /** @typedef {Map<ExportInfoName, ExportInfo>} Exports */
42
+ /** @typedef {string | string[] | false} UsedName */
43
+ /** @typedef {Set<ExportInfo>} AlreadyVisitedExportInfo */
44
+
45
+ /**
46
+ * @typedef {object} RestoreProvidedDataExports
47
+ * @property {ExportInfoName} name
48
+ * @property {ExportInfo["provided"]} provided
49
+ * @property {ExportInfo["canMangleProvide"]} canMangleProvide
50
+ * @property {ExportInfo["terminalBinding"]} terminalBinding
51
+ * @property {RestoreProvidedData | undefined} exportsInfo
52
+ */
53
+
24
54
  const UsageState = Object.freeze({
25
55
  Unused: /** @type {0} */ (0),
26
56
  OnlyPropertiesUsed: /** @type {1} */ (1),
@@ -34,6 +64,12 @@ const RETURNS_TRUE = () => true;
34
64
  const CIRCULAR = Symbol("circular target");
35
65
 
36
66
  class RestoreProvidedData {
67
+ /**
68
+ * @param {RestoreProvidedDataExports[]} exports exports
69
+ * @param {ExportInfo["provided"]} otherProvided other provided
70
+ * @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
71
+ * @param {ExportInfo["terminalBinding"]} otherTerminalBinding other terminal binding
72
+ */
37
73
  constructor(
38
74
  exports,
39
75
  otherProvided,
@@ -71,9 +107,6 @@ makeSerializable(
71
107
  "RestoreProvidedData"
72
108
  );
73
109
 
74
- /** @typedef {Map<string, ExportInfo>} Exports */
75
- /** @typedef {string | string[] | false} UsedName */
76
-
77
110
  class ExportsInfo {
78
111
  constructor() {
79
112
  /** @type {Exports} */
@@ -124,8 +157,9 @@ class ExportsInfo {
124
157
  this._sortExports();
125
158
  }
126
159
  if (this._redirectTo !== undefined) {
160
+ /** @type {Exports} */
127
161
  const map = new Map(
128
- Array.from(this._redirectTo.orderedExports, item => [item.name, item])
162
+ Array.from(this._redirectTo.orderedExports, (item) => [item.name, item])
129
163
  );
130
164
  for (const [key, value] of this._exports) {
131
165
  map.set(key, value);
@@ -142,8 +176,9 @@ class ExportsInfo {
142
176
  * @returns {ExportInfo} the export info of unlisted exports
143
177
  */
144
178
  get otherExportsInfo() {
145
- if (this._redirectTo !== undefined)
179
+ if (this._redirectTo !== undefined) {
146
180
  return this._redirectTo.otherExportsInfo;
181
+ }
147
182
  return this._otherExportsInfo;
148
183
  }
149
184
 
@@ -153,6 +188,7 @@ class ExportsInfo {
153
188
  */
154
189
  _sortExportsMap(exports) {
155
190
  if (exports.size > 1) {
191
+ /** @type {ExportInfoName[]} */
156
192
  const namesInOrder = [];
157
193
  for (const entry of exports.values()) {
158
194
  namesInOrder.push(entry.name);
@@ -222,7 +258,7 @@ class ExportsInfo {
222
258
  }
223
259
 
224
260
  /**
225
- * @param {string} name export name
261
+ * @param {ExportInfoName} name export name
226
262
  * @returns {ExportInfo} export info for this name
227
263
  */
228
264
  getOwnExportInfo(name) {
@@ -235,14 +271,15 @@ class ExportsInfo {
235
271
  }
236
272
 
237
273
  /**
238
- * @param {string} name export name
274
+ * @param {ExportInfoName} name export name
239
275
  * @returns {ExportInfo} export info for this name
240
276
  */
241
277
  getExportInfo(name) {
242
278
  const info = this._exports.get(name);
243
279
  if (info !== undefined) return info;
244
- if (this._redirectTo !== undefined)
280
+ if (this._redirectTo !== undefined) {
245
281
  return this._redirectTo.getExportInfo(name);
282
+ }
246
283
  const newInfo = new ExportInfo(name, this._otherExportsInfo);
247
284
  this._exports.set(name, newInfo);
248
285
  this._exportsAreOrdered = false;
@@ -250,19 +287,20 @@ class ExportsInfo {
250
287
  }
251
288
 
252
289
  /**
253
- * @param {string} name export name
290
+ * @param {ExportInfoName} name export name
254
291
  * @returns {ExportInfo} export info for this name
255
292
  */
256
293
  getReadOnlyExportInfo(name) {
257
294
  const info = this._exports.get(name);
258
295
  if (info !== undefined) return info;
259
- if (this._redirectTo !== undefined)
296
+ if (this._redirectTo !== undefined) {
260
297
  return this._redirectTo.getReadOnlyExportInfo(name);
298
+ }
261
299
  return this._otherExportsInfo;
262
300
  }
263
301
 
264
302
  /**
265
- * @param {string[]} name export name
303
+ * @param {ExportInfoName[]} name export name
266
304
  * @returns {ExportInfo | undefined} export info for this name
267
305
  */
268
306
  getReadOnlyExportInfoRecursive(name) {
@@ -273,7 +311,7 @@ class ExportsInfo {
273
311
  }
274
312
 
275
313
  /**
276
- * @param {string[]=} name the export name
314
+ * @param {ExportInfoName[]=} name the export name
277
315
  * @returns {ExportsInfo | undefined} the nested exports info
278
316
  */
279
317
  getNestedExportsInfo(name) {
@@ -287,8 +325,8 @@ class ExportsInfo {
287
325
 
288
326
  /**
289
327
  * @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
290
- * @param {Set<string>=} excludeExports list of unaffected exports
291
- * @param {any=} targetKey use this as key for the target
328
+ * @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
329
+ * @param {Dependency=} targetKey use this as key for the target
292
330
  * @param {ModuleGraphConnection=} targetModule set this module as target
293
331
  * @param {number=} priority priority
294
332
  * @returns {boolean} true, if this call changed something
@@ -320,7 +358,8 @@ class ExportsInfo {
320
358
  if (targetKey) {
321
359
  exportInfo.setTarget(
322
360
  targetKey,
323
- /** @type {ModuleGraphConnection} */ (targetModule),
361
+ /** @type {ModuleGraphConnection} */
362
+ (targetModule),
324
363
  [exportInfo.name],
325
364
  -1
326
365
  );
@@ -380,7 +419,7 @@ class ExportsInfo {
380
419
  } else {
381
420
  if (
382
421
  this._otherExportsInfo.setUsedConditionally(
383
- used => used < UsageState.Unknown,
422
+ (used) => used < UsageState.Unknown,
384
423
  UsageState.Unknown,
385
424
  runtime
386
425
  )
@@ -443,7 +482,7 @@ class ExportsInfo {
443
482
  */
444
483
  setUsedForSideEffectsOnly(runtime) {
445
484
  return this._sideEffectsOnlyInfo.setUsedConditionally(
446
- used => used === UsageState.Unused,
485
+ (used) => used === UsageState.Unused,
447
486
  UsageState.Used,
448
487
  runtime
449
488
  );
@@ -475,27 +514,27 @@ class ExportsInfo {
475
514
  */
476
515
  isModuleUsed(runtime) {
477
516
  if (this.isUsed(runtime)) return true;
478
- if (this._sideEffectsOnlyInfo.getUsed(runtime) !== UsageState.Unused)
517
+ if (this._sideEffectsOnlyInfo.getUsed(runtime) !== UsageState.Unused) {
479
518
  return true;
519
+ }
480
520
  return false;
481
521
  }
482
522
 
483
523
  /**
484
524
  * @param {RuntimeSpec} runtime the runtime
485
- * @returns {SortableSet<string> | boolean | null} set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown)
525
+ * @returns {SortableSet<ExportInfoName> | boolean | null} set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown)
486
526
  */
487
527
  getUsedExports(runtime) {
488
- // eslint-disable-next-line no-constant-binary-expression
489
- if (!this._redirectTo !== undefined) {
490
- switch (this._otherExportsInfo.getUsed(runtime)) {
491
- case UsageState.NoInfo:
492
- return null;
493
- case UsageState.Unknown:
494
- case UsageState.OnlyPropertiesUsed:
495
- case UsageState.Used:
496
- return true;
497
- }
528
+ switch (this._otherExportsInfo.getUsed(runtime)) {
529
+ case UsageState.NoInfo:
530
+ return null;
531
+ case UsageState.Unknown:
532
+ case UsageState.OnlyPropertiesUsed:
533
+ case UsageState.Used:
534
+ return true;
498
535
  }
536
+
537
+ /** @type {ExportInfoName[]} */
499
538
  const array = [];
500
539
  if (!this._exportsAreOrdered) this._sortExports();
501
540
  for (const exportInfo of this._exports.values()) {
@@ -527,24 +566,23 @@ class ExportsInfo {
527
566
  return false;
528
567
  }
529
568
  }
530
- return /** @type {SortableSet<string>} */ (new SortableSet(array));
569
+ return /** @type {SortableSet<ExportInfoName>} */ (new SortableSet(array));
531
570
  }
532
571
 
533
572
  /**
534
- * @returns {null | true | string[]} list of exports when known
573
+ * @returns {null | true | ExportInfoName[]} list of exports when known
535
574
  */
536
575
  getProvidedExports() {
537
- // eslint-disable-next-line no-constant-binary-expression
538
- if (!this._redirectTo !== undefined) {
539
- switch (this._otherExportsInfo.provided) {
540
- case undefined:
541
- return null;
542
- case null:
543
- return true;
544
- case true:
545
- return true;
546
- }
576
+ switch (this._otherExportsInfo.provided) {
577
+ case undefined:
578
+ return null;
579
+ case null:
580
+ return true;
581
+ case true:
582
+ return true;
547
583
  }
584
+
585
+ /** @type {ExportInfoName[]} */
548
586
  const array = [];
549
587
  if (!this._exportsAreOrdered) this._sortExports();
550
588
  for (const exportInfo of this._exports.values()) {
@@ -597,7 +635,7 @@ class ExportsInfo {
597
635
  }
598
636
 
599
637
  /**
600
- * @param {string | string[]} name the name of the export
638
+ * @param {ExportInfoName | ExportInfoName[]} name the name of the export
601
639
  * @returns {boolean | undefined | null} if the export is provided
602
640
  */
603
641
  isExportProvided(name) {
@@ -651,14 +689,15 @@ class ExportsInfo {
651
689
  return false;
652
690
  }
653
691
  for (const exportInfo of this.ownedExports) {
654
- if (exportInfo.getUsed(runtimeA) !== exportInfo.getUsed(runtimeB))
692
+ if (exportInfo.getUsed(runtimeA) !== exportInfo.getUsed(runtimeB)) {
655
693
  return false;
694
+ }
656
695
  }
657
696
  return true;
658
697
  }
659
698
 
660
699
  /**
661
- * @param {string | string[]} name export name
700
+ * @param {ExportInfoName | ExportInfoName[]} name export name
662
701
  * @param {RuntimeSpec} runtime check usage for this runtime only
663
702
  * @returns {UsageStateType} usage status
664
703
  */
@@ -676,7 +715,7 @@ class ExportsInfo {
676
715
  }
677
716
 
678
717
  /**
679
- * @param {string | string[]} name the export name
718
+ * @param {ExportInfoName | ExportInfoName[]} name the export name
680
719
  * @param {RuntimeSpec} runtime check usage for this runtime only
681
720
  * @returns {UsedName} the used name
682
721
  */
@@ -691,7 +730,7 @@ class ExportsInfo {
691
730
  const x = info.getUsedName(name[0], runtime);
692
731
  if (x === false) return false;
693
732
  const arr =
694
- /** @type {string[]} */
733
+ /** @type {ExportInfoName[]} */
695
734
  (x === name[0] && name.length === 1 ? name : [x]);
696
735
  if (name.length === 1) {
697
736
  return arr;
@@ -702,9 +741,9 @@ class ExportsInfo {
702
741
  ) {
703
742
  const nested = info.exportsInfo.getUsedName(name.slice(1), runtime);
704
743
  if (!nested) return false;
705
- return arr.concat(nested);
744
+ return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
706
745
  }
707
- return arr.concat(name.slice(1));
746
+ return [...arr, ...name.slice(1)];
708
747
  }
709
748
  const info = this.getReadOnlyExportInfo(name);
710
749
  const usedName = info.getUsedName(name, runtime);
@@ -748,6 +787,7 @@ class ExportsInfo {
748
787
  const otherProvided = this._otherExportsInfo.provided;
749
788
  const otherCanMangleProvide = this._otherExportsInfo.canMangleProvide;
750
789
  const otherTerminalBinding = this._otherExportsInfo.terminalBinding;
790
+ /** @type {RestoreProvidedDataExports[]} */
751
791
  const exports = [];
752
792
  for (const exportInfo of this.orderedExports) {
753
793
  if (
@@ -777,7 +817,7 @@ class ExportsInfo {
777
817
  }
778
818
 
779
819
  /**
780
- * @param {{ otherProvided: any, otherCanMangleProvide: any, otherTerminalBinding: any, exports: any }} data data
820
+ * @param {RestoreProvidedData} data data
781
821
  */
782
822
  restoreProvided({
783
823
  otherProvided,
@@ -809,21 +849,17 @@ class ExportsInfo {
809
849
  }
810
850
  }
811
851
 
812
- /** @typedef {{ module: Module, export: string[] }} TargetItemWithoutConnection */
813
- /** @typedef {{ module: Module, connection: ModuleGraphConnection, export: string[] | undefined }} TargetItem */
814
- /** @typedef {Map<any, { connection: ModuleGraphConnection | null, export: string[], priority: number }>} Target */
815
-
816
852
  class ExportInfo {
817
853
  /**
818
- * @param {string} name the original name of the export
854
+ * @param {ExportInfoName | null} name the original name of the export
819
855
  * @param {ExportInfo=} initFrom init values from this ExportInfo
820
856
  */
821
857
  constructor(name, initFrom) {
822
- /** @type {string} */
823
- this.name = name;
858
+ /** @type {ExportInfoName} */
859
+ this.name = /** @type {ExportInfoName} */ (name);
824
860
  /**
825
861
  * @private
826
- * @type {string | null}
862
+ * @type {ExportInfoUsedName}
827
863
  */
828
864
  this._usedName = initFrom ? initFrom._usedName : null;
829
865
  /**
@@ -833,7 +869,7 @@ class ExportInfo {
833
869
  this._globalUsed = initFrom ? initFrom._globalUsed : undefined;
834
870
  /**
835
871
  * @private
836
- * @type {Map<string, RuntimeUsageStateType>}
872
+ * @type {UsedInRuntime | undefined}
837
873
  */
838
874
  this._usedInRuntime =
839
875
  initFrom && initFrom._usedInRuntime
@@ -851,7 +887,7 @@ class ExportInfo {
851
887
  * false: it is not provided
852
888
  * null: only the runtime knows if it is provided
853
889
  * undefined: it was not determined if it is provided
854
- * @type {boolean | null | undefined}
890
+ * @type {ExportInfoProvided | undefined}
855
891
  */
856
892
  this.provided = initFrom ? initFrom.provided : undefined;
857
893
  /**
@@ -896,7 +932,7 @@ class ExportInfo {
896
932
  // TODO webpack 5 remove
897
933
  /**
898
934
  * @private
899
- * @param {*} v v
935
+ * @param {EXPECTED_ANY} v v
900
936
  */
901
937
  set used(v) {
902
938
  throw new Error("REMOVED");
@@ -911,7 +947,7 @@ class ExportInfo {
911
947
  // TODO webpack 5 remove
912
948
  /**
913
949
  * @private
914
- * @param {*} v v
950
+ * @param {EXPECTED_ANY} v v
915
951
  */
916
952
  set usedName(v) {
917
953
  throw new Error("REMOVED");
@@ -952,7 +988,7 @@ class ExportInfo {
952
988
  let changed = false;
953
989
  if (
954
990
  this.setUsedConditionally(
955
- used => used < UsageState.Unknown,
991
+ (used) => used < UsageState.Unknown,
956
992
  UsageState.Unknown,
957
993
  runtime
958
994
  )
@@ -996,7 +1032,7 @@ class ExportInfo {
996
1032
  }
997
1033
 
998
1034
  /**
999
- * @param {function(UsageStateType): boolean} condition compare with old value
1035
+ * @param {(condition: UsageStateType) => boolean} condition compare with old value
1000
1036
  * @param {UsageStateType} newValue set when condition is true
1001
1037
  * @param {RuntimeSpec} runtime only apply to this runtime
1002
1038
  * @returns {boolean} true when something has changed
@@ -1014,24 +1050,28 @@ class ExportInfo {
1014
1050
  } else if (this._usedInRuntime === undefined) {
1015
1051
  if (newValue !== UsageState.Unused && condition(UsageState.Unused)) {
1016
1052
  this._usedInRuntime = new Map();
1017
- forEachRuntime(runtime, runtime =>
1018
- this._usedInRuntime.set(/** @type {string} */ (runtime), newValue)
1053
+ forEachRuntime(runtime, (runtime) =>
1054
+ /** @type {UsedInRuntime} */
1055
+ (this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
1019
1056
  );
1020
1057
  return true;
1021
1058
  }
1022
1059
  } else {
1023
1060
  let changed = false;
1024
- forEachRuntime(runtime, _runtime => {
1025
- const runtime = /** @type {string} */ (_runtime);
1061
+ forEachRuntime(runtime, (runtime_) => {
1062
+ const runtime = /** @type {string} */ (runtime_);
1063
+ const usedInRuntime =
1064
+ /** @type {UsedInRuntime} */
1065
+ (this._usedInRuntime);
1026
1066
  let oldValue =
1027
1067
  /** @type {UsageStateType} */
1028
- (this._usedInRuntime.get(runtime));
1068
+ (usedInRuntime.get(runtime));
1029
1069
  if (oldValue === undefined) oldValue = UsageState.Unused;
1030
1070
  if (newValue !== oldValue && condition(oldValue)) {
1031
1071
  if (newValue === UsageState.Unused) {
1032
- this._usedInRuntime.delete(runtime);
1072
+ usedInRuntime.delete(runtime);
1033
1073
  } else {
1034
- this._usedInRuntime.set(runtime, newValue);
1074
+ usedInRuntime.set(runtime, newValue);
1035
1075
  }
1036
1076
  changed = true;
1037
1077
  }
@@ -1058,24 +1098,28 @@ class ExportInfo {
1058
1098
  } else if (this._usedInRuntime === undefined) {
1059
1099
  if (newValue !== UsageState.Unused) {
1060
1100
  this._usedInRuntime = new Map();
1061
- forEachRuntime(runtime, runtime =>
1062
- this._usedInRuntime.set(/** @type {string} */ (runtime), newValue)
1101
+ forEachRuntime(runtime, (runtime) =>
1102
+ /** @type {UsedInRuntime} */
1103
+ (this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
1063
1104
  );
1064
1105
  return true;
1065
1106
  }
1066
1107
  } else {
1067
1108
  let changed = false;
1068
- forEachRuntime(runtime, _runtime => {
1109
+ forEachRuntime(runtime, (_runtime) => {
1069
1110
  const runtime = /** @type {string} */ (_runtime);
1111
+ const usedInRuntime =
1112
+ /** @type {UsedInRuntime} */
1113
+ (this._usedInRuntime);
1070
1114
  let oldValue =
1071
1115
  /** @type {UsageStateType} */
1072
- (this._usedInRuntime.get(runtime));
1116
+ (usedInRuntime.get(runtime));
1073
1117
  if (oldValue === undefined) oldValue = UsageState.Unused;
1074
1118
  if (newValue !== oldValue) {
1075
1119
  if (newValue === UsageState.Unused) {
1076
- this._usedInRuntime.delete(runtime);
1120
+ usedInRuntime.delete(runtime);
1077
1121
  } else {
1078
- this._usedInRuntime.set(runtime, newValue);
1122
+ usedInRuntime.set(runtime, newValue);
1079
1123
  }
1080
1124
  changed = true;
1081
1125
  }
@@ -1089,7 +1133,7 @@ class ExportInfo {
1089
1133
  }
1090
1134
 
1091
1135
  /**
1092
- * @param {any} key the key
1136
+ * @param {Dependency} key the key
1093
1137
  * @returns {boolean} true, if something has changed
1094
1138
  */
1095
1139
  unsetTarget(key) {
@@ -1102,9 +1146,9 @@ class ExportInfo {
1102
1146
  }
1103
1147
 
1104
1148
  /**
1105
- * @param {any} key the key
1149
+ * @param {Dependency} key the key
1106
1150
  * @param {ModuleGraphConnection} connection the target module if a single one
1107
- * @param {(string[] | null)=} exportName the exported name
1151
+ * @param {ExportInfoName[] | null=} exportName the exported name
1108
1152
  * @param {number=} priority priority
1109
1153
  * @returns {boolean} true, if something has changed
1110
1154
  */
@@ -1114,7 +1158,7 @@ class ExportInfo {
1114
1158
  this._target = new Map();
1115
1159
  this._target.set(key, {
1116
1160
  connection,
1117
- export: /** @type {string[]} */ (exportName),
1161
+ export: /** @type {ExportInfoName[]} */ (exportName),
1118
1162
  priority
1119
1163
  });
1120
1164
  return true;
@@ -1124,7 +1168,7 @@ class ExportInfo {
1124
1168
  if (oldTarget === null && !connection) return false;
1125
1169
  this._target.set(key, {
1126
1170
  connection,
1127
- export: /** @type {string[]} */ (exportName),
1171
+ export: /** @type {ExportInfoName[]} */ (exportName),
1128
1172
  priority
1129
1173
  });
1130
1174
  this._maxTarget = undefined;
@@ -1138,7 +1182,7 @@ class ExportInfo {
1138
1182
  : oldTarget.export)
1139
1183
  ) {
1140
1184
  oldTarget.connection = connection;
1141
- oldTarget.export = /** @type {string[]} */ (exportName);
1185
+ oldTarget.export = /** @type {ExportInfoName[]} */ (exportName);
1142
1186
  oldTarget.priority = priority;
1143
1187
  this._maxTarget = undefined;
1144
1188
  return true;
@@ -1202,8 +1246,9 @@ class ExportInfo {
1202
1246
  }
1203
1247
  } else if (
1204
1248
  runtime !== undefined &&
1205
- Array.from(runtime).every(
1206
- runtime => !this._usedInRuntime.has(runtime)
1249
+ [...runtime].every(
1250
+ (runtime) =>
1251
+ !(/** @type {UsedInRuntime} */ (this._usedInRuntime).has(runtime))
1207
1252
  )
1208
1253
  ) {
1209
1254
  return false;
@@ -1232,7 +1277,7 @@ class ExportInfo {
1232
1277
 
1233
1278
  /**
1234
1279
  * @param {ModuleGraph} moduleGraph the module graph
1235
- * @param {function(TargetItem): boolean} resolveTargetFilter filter function to further resolve target
1280
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1236
1281
  * @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
1237
1282
  */
1238
1283
  getTerminalBinding(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
@@ -1250,8 +1295,9 @@ class ExportInfo {
1250
1295
 
1251
1296
  _getMaxTarget() {
1252
1297
  if (this._maxTarget !== undefined) return this._maxTarget;
1253
- if (/** @type {Target} */ (this._target).size <= 1)
1298
+ if (/** @type {Target} */ (this._target).size <= 1) {
1254
1299
  return (this._maxTarget = this._target);
1300
+ }
1255
1301
  let maxPriority = -Infinity;
1256
1302
  let minPriority = Infinity;
1257
1303
  for (const { priority } of /** @type {Target} */ (this._target).values()) {
@@ -1262,6 +1308,7 @@ class ExportInfo {
1262
1308
  if (maxPriority === minPriority) return (this._maxTarget = this._target);
1263
1309
 
1264
1310
  // This is an edge case
1311
+ /** @type {Target} */
1265
1312
  const map = new Map();
1266
1313
  for (const [key, value] of /** @type {Target} */ (this._target)) {
1267
1314
  if (maxPriority === value.priority) {
@@ -1274,7 +1321,7 @@ class ExportInfo {
1274
1321
 
1275
1322
  /**
1276
1323
  * @param {ModuleGraph} moduleGraph the module graph
1277
- * @param {function(Module): boolean} validTargetModuleFilter a valid target module
1324
+ * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1278
1325
  * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
1279
1326
  */
1280
1327
  findTarget(moduleGraph, validTargetModuleFilter) {
@@ -1283,8 +1330,8 @@ class ExportInfo {
1283
1330
 
1284
1331
  /**
1285
1332
  * @param {ModuleGraph} moduleGraph the module graph
1286
- * @param {function(Module): boolean} validTargetModuleFilter a valid target module
1287
- * @param {Set<ExportInfo>} alreadyVisited set of already visited export info to avoid circular references
1333
+ * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1334
+ * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1288
1335
  * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
1289
1336
  */
1290
1337
  _findTarget(moduleGraph, validTargetModuleFilter, alreadyVisited) {
@@ -1296,7 +1343,15 @@ class ExportInfo {
1296
1343
  /** @type {TargetItemWithoutConnection} */
1297
1344
  let target = {
1298
1345
  module: rawTarget.connection.module,
1299
- export: rawTarget.export
1346
+ export: rawTarget.export,
1347
+ deferred: Boolean(
1348
+ rawTarget.connection.dependency &&
1349
+ ImportPhaseUtils.isDefer(
1350
+ /** @type {HarmonyImportDependency} */ (
1351
+ rawTarget.connection.dependency
1352
+ ).phase
1353
+ )
1354
+ )
1300
1355
  };
1301
1356
  for (;;) {
1302
1357
  if (validTargetModuleFilter(target.module)) return target;
@@ -1315,8 +1370,9 @@ class ExportInfo {
1315
1370
  target = {
1316
1371
  module: newTarget.module,
1317
1372
  export: newTarget.export
1318
- ? newTarget.export.concat(target.export.slice(1))
1319
- : target.export.slice(1)
1373
+ ? [...newTarget.export, ...target.export.slice(1)]
1374
+ : target.export.slice(1),
1375
+ deferred: newTarget.deferred
1320
1376
  };
1321
1377
  }
1322
1378
  }
@@ -1324,8 +1380,8 @@ class ExportInfo {
1324
1380
 
1325
1381
  /**
1326
1382
  * @param {ModuleGraph} moduleGraph the module graph
1327
- * @param {function(TargetItem): boolean} resolveTargetFilter filter function to further resolve target
1328
- * @returns {TargetItem | undefined} the target
1383
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1384
+ * @returns {TargetItemWithConnection | undefined} the target
1329
1385
  */
1330
1386
  getTarget(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
1331
1387
  const result = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
@@ -1335,15 +1391,15 @@ class ExportInfo {
1335
1391
 
1336
1392
  /**
1337
1393
  * @param {ModuleGraph} moduleGraph the module graph
1338
- * @param {function(TargetItem): boolean} resolveTargetFilter filter function to further resolve target
1339
- * @param {Set<ExportInfo> | undefined} alreadyVisited set of already visited export info to avoid circular references
1340
- * @returns {TargetItem | CIRCULAR | undefined} the target
1394
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1395
+ * @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
1396
+ * @returns {TargetItemWithConnection | CIRCULAR | undefined} the target
1341
1397
  */
1342
1398
  _getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
1343
1399
  /**
1344
- * @param {TargetItem | null} inputTarget unresolved target
1345
- * @param {Set<ExportInfo>} alreadyVisited set of already visited export info to avoid circular references
1346
- * @returns {TargetItem | CIRCULAR | null} resolved target
1400
+ * @param {TargetItem | undefined | null} inputTarget unresolved target
1401
+ * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1402
+ * @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
1347
1403
  */
1348
1404
  const resolveTarget = (inputTarget, alreadyVisited) => {
1349
1405
  if (!inputTarget) return null;
@@ -1354,7 +1410,7 @@ class ExportInfo {
1354
1410
  export: undefined
1355
1411
  };
1356
1412
  }
1357
- /** @type {TargetItem} */
1413
+ /** @type {TargetItemWithConnection} */
1358
1414
  let target = {
1359
1415
  module: inputTarget.connection.module,
1360
1416
  connection: inputTarget.connection,
@@ -1365,7 +1421,7 @@ class ExportInfo {
1365
1421
  for (;;) {
1366
1422
  const exportsInfo = moduleGraph.getExportsInfo(target.module);
1367
1423
  const exportInfo = exportsInfo.getExportInfo(
1368
- /** @type {NonNullable<TargetItem["export"]>} */
1424
+ /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1369
1425
  (target.export)[0]
1370
1426
  );
1371
1427
  if (!exportInfo) return target;
@@ -1378,7 +1434,7 @@ class ExportInfo {
1378
1434
  if (newTarget === CIRCULAR) return CIRCULAR;
1379
1435
  if (!newTarget) return target;
1380
1436
  if (
1381
- /** @type {NonNullable<TargetItem["export"]>} */
1437
+ /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1382
1438
  (target.export).length === 1
1383
1439
  ) {
1384
1440
  target = newTarget;
@@ -1388,11 +1444,12 @@ class ExportInfo {
1388
1444
  module: newTarget.module,
1389
1445
  connection: newTarget.connection,
1390
1446
  export: newTarget.export
1391
- ? newTarget.export.concat(
1392
- /** @type {NonNullable<TargetItem["export"]>} */
1447
+ ? [
1448
+ ...newTarget.export,
1449
+ .../** @type {NonNullable<TargetItemWithConnection["export"]>} */
1393
1450
  (target.export).slice(1)
1394
- )
1395
- : /** @type {NonNullable<TargetItem["export"]>} */
1451
+ ]
1452
+ : /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1396
1453
  (target.export).slice(1)
1397
1454
  };
1398
1455
  }
@@ -1423,8 +1480,9 @@ class ExportInfo {
1423
1480
  if (
1424
1481
  target.export &&
1425
1482
  !equals(/** @type {ArrayLike<string>} */ (t.export), target.export)
1426
- )
1483
+ ) {
1427
1484
  return;
1485
+ }
1428
1486
  result = values.next();
1429
1487
  }
1430
1488
  return target;
@@ -1433,17 +1491,20 @@ class ExportInfo {
1433
1491
  /**
1434
1492
  * Move the target forward as long resolveTargetFilter is fulfilled
1435
1493
  * @param {ModuleGraph} moduleGraph the module graph
1436
- * @param {function(TargetItem): boolean} resolveTargetFilter filter function to further resolve target
1437
- * @param {function(TargetItem): ModuleGraphConnection=} updateOriginalConnection updates the original connection instead of using the target connection
1438
- * @returns {TargetItem | undefined} the resolved target when moved
1494
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1495
+ * @param {(target: TargetItemWithConnection) => ModuleGraphConnection=} updateOriginalConnection updates the original connection instead of using the target connection
1496
+ * @returns {TargetItemWithConnection | undefined} the resolved target when moved
1439
1497
  */
1440
1498
  moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
1441
1499
  const target = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
1442
1500
  if (target === CIRCULAR) return;
1443
1501
  if (!target) return;
1444
1502
  const originalTarget =
1445
- /** @type {Target} */
1446
- (this._getMaxTarget()).values().next().value;
1503
+ /** @type {TargetItem} */
1504
+ (
1505
+ /** @type {Target} */
1506
+ (this._getMaxTarget()).values().next().value
1507
+ );
1447
1508
  if (
1448
1509
  originalTarget.connection === target.connection &&
1449
1510
  originalTarget.export === target.export
@@ -1457,7 +1518,9 @@ class ExportInfo {
1457
1518
  connection: updateOriginalConnection
1458
1519
  ? updateOriginalConnection(target)
1459
1520
  : target.connection,
1460
- export: /** @type {NonNullable<TargetItem["export"]>} */ (target.export),
1521
+ export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
1522
+ target.export
1523
+ ),
1461
1524
  priority: 0
1462
1525
  });
1463
1526
  return target;
@@ -1467,8 +1530,9 @@ class ExportInfo {
1467
1530
  * @returns {ExportsInfo} an exports info
1468
1531
  */
1469
1532
  createNestedExportsInfo() {
1470
- if (this.exportsInfoOwned)
1533
+ if (this.exportsInfoOwned) {
1471
1534
  return /** @type {ExportsInfo} */ (this.exportsInfo);
1535
+ }
1472
1536
  this.exportsInfoOwned = true;
1473
1537
  const oldExportsInfo = this.exportsInfo;
1474
1538
  this.exportsInfo = new ExportsInfo();
@@ -1621,4 +1685,5 @@ class ExportInfo {
1621
1685
 
1622
1686
  module.exports = ExportsInfo;
1623
1687
  module.exports.ExportInfo = ExportInfo;
1688
+ module.exports.RestoreProvidedData = RestoreProvidedData;
1624
1689
  module.exports.UsageState = UsageState;