@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
@@ -34,41 +34,53 @@ const HarmonyLinkingError = require("./HarmonyLinkingError");
34
34
  const { ImportPhaseUtils } = require("./ImportPhase");
35
35
  const processExportInfo = require("./processExportInfo");
36
36
 
37
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
38
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
39
- /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
40
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
41
- /** @typedef {import("../Dependency").LazyUntil} LazyUntil */
42
- /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
43
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
44
- /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
45
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
46
- /** @typedef {import("../ExportsInfo")} ExportsInfo */
47
- /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
48
- /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
49
- /** @typedef {import("../ExportsInfo").UsedName} UsedName */
50
- /** @typedef {import("../Generator").GenerateContext} GenerateContext */
51
- /** @typedef {import("../Module")} Module */
52
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
53
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
54
- /** @typedef {import("../Module").ExportsType} ExportsType */
55
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
56
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
57
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
58
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
59
- /** @typedef {import("../errors/WebpackError")} WebpackError */
60
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
37
+ /** @import { ReplaceSource } from "webpack-sources" */
38
+ /** @import ChunkGraph from "../ChunkGraph" */
39
+ /**
40
+ * @import {
41
+ * ExportsSpec,
42
+ * GetConditionFn,
43
+ * LazyUntil,
44
+ * RawReferencedExports,
45
+ * ReferencedExports,
46
+ * TRANSITIVE,
47
+ * ExportInfoName
48
+ * } from "../Dependency"
49
+ */
50
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
51
+ /** @import ExportsInfo, { ExportInfo, UsedName } from "../ExportsInfo" */
52
+ /** @import { GenerateContext } from "../Generator" */
53
+ /**
54
+ * @import Module, {
55
+ * BuildMeta,
56
+ * RuntimeRequirements,
57
+ * ExportsType
58
+ * } from "../Module"
59
+ */
60
+ /** @import ModuleGraph from "../ModuleGraph" */
61
+ /**
62
+ * @import ModuleGraphConnection, {
63
+ * ConnectionState
64
+ * } from "../ModuleGraphConnection"
65
+ */
66
+ /** @import RuntimeTemplate from "../RuntimeTemplate" */
67
+ /** @import WebpackError from "../errors/WebpackError" */
68
+ /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
61
69
  /** @typedef {[Ids, string | null, Set<string>, ReadonlyArray<HarmonyExportImportedSpecifierDependency> | null, ExportPresenceMode, HarmonyStarExportsList | null]} SerializedData */
62
70
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<SerializedData>} ObjectDeserializerContext */
63
71
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<SerializedData>} ObjectSerializerContext */
64
72
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[HarmonyExportImportedSpecifierDependency[]]>} StarListDeserializerContext */
65
73
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[HarmonyExportImportedSpecifierDependency[]]>} StarListSerializerContext */
66
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
67
- /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
68
- /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
69
- /** @typedef {import("./HarmonyExportInitFragment").ExportMap} ExportMap */
70
- /** @typedef {import("../dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
71
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
74
+ /** @import { RuntimeSpec } from "../util/runtime" */
75
+ /** @import { Ids, ExportPresenceMode } from "./HarmonyImportDependency" */
76
+ /** @import { ExportMap } from "./HarmonyExportInitFragment" */
77
+ /** @import { ImportPhaseType } from "../dependencies/ImportPhase" */
78
+ /**
79
+ * @import {
80
+ * JavascriptModuleBuildMeta
81
+ * } from "../javascript/JavascriptModule"
82
+ */
83
+ /** @import ConcatenationScope from "../ConcatenationScope" */
72
84
 
73
85
  /** @typedef {"missing" | "unused" | "empty-star" | "reexport-dynamic-default" | "reexport-named-default" | "reexport-namespace-object" | "reexport-fake-namespace-object" | "reexport-undefined" | "normal-reexport" | "dynamic-reexport"} ExportModeType */
74
86
 
@@ -83,7 +95,7 @@ class NormalReexportItem {
83
95
  * Creates an instance of NormalReexportItem.
84
96
  * @param {string} name export name
85
97
  * @param {Ids} ids reexported ids from other module
86
- * @param {ExportInfo} exportInfo export info from other module
98
+ * @param {InstanceType<ExportInfo>} exportInfo export info from other module
87
99
  * @param {boolean} checked true, if it should be checked at runtime if this export exists
88
100
  * @param {boolean} hidden true, if it is hidden behind another active export in the same module
89
101
  */
@@ -92,7 +104,7 @@ class NormalReexportItem {
92
104
  this.name = name;
93
105
  /** @type {Ids} */
94
106
  this.ids = ids;
95
- /** @type {ExportInfo} */
107
+ /** @type {InstanceType<ExportInfo>} */
96
108
  this.exportInfo = exportInfo;
97
109
  /** @type {boolean} */
98
110
  this.checked = checked;
@@ -120,9 +132,14 @@ class ExportMode {
120
132
  // for "reexport-named-default" | "reexport-fake-namespace-object" | "reexport-namespace-object"
121
133
  /** @type {string | null} */
122
134
  this.name = null;
123
- /** @type {ExportInfo | null} */
135
+ /** @type {InstanceType<ExportInfo> | null} */
124
136
  this.partialNamespaceExportInfo = null;
125
137
 
138
+ // for "reexport-undefined": the name resolves through a circular
139
+ // reexport chain rather than being absent from a non-harmony module
140
+ /** @type {boolean} */
141
+ this.circular = false;
142
+
126
143
  // for "dynamic-reexport":
127
144
  /** @type {ExportModeIgnored | null} */
128
145
  this.ignored = null;
@@ -163,7 +180,7 @@ const RETURNS_TRUE = () => true;
163
180
  * unrelated cycles in the graph that would otherwise loop forever inside
164
181
  * `_findTarget`.
165
182
  * @param {ModuleGraph} moduleGraph the module graph
166
- * @param {ExportInfo} exportInfo export info on the imported module
183
+ * @param {InstanceType<ExportInfo>} exportInfo export info on the imported module
167
184
  * @param {Module} parentModule the module that contains the star reexport
168
185
  * @returns {boolean} true when this export reexports back to the parent module under the same name
169
186
  */
@@ -194,7 +211,7 @@ const isStarReexportBackToParent = (moduleGraph, exportInfo, parentModule) => {
194
211
  // Allocated lazily: a single-extra-hop chain that terminates (the common
195
212
  // `barrel -> leaf local binding` case) returns before `next` is ever
196
213
  // computed, so the visited set is pure waste there.
197
- /** @type {Set<ExportInfo> | undefined} */
214
+ /** @type {Set<InstanceType<ExportInfo>> | undefined} */
198
215
  let visited;
199
216
  for (;;) {
200
217
  const target = current.findTarget(moduleGraph, RETURNS_TRUE);
@@ -220,12 +237,28 @@ const isStarReexportBackToParent = (moduleGraph, exportInfo, parentModule) => {
220
237
  }
221
238
  };
222
239
 
240
+ /**
241
+ * Two `export *` sources are ambiguous for a name when they resolve to
242
+ * different bindings; a diamond re-export of the same binding is not.
243
+ * @param {ModuleGraph} moduleGraph module graph
244
+ * @param {InstanceType<ExportInfo>} previous export info of the star source that first provided the name
245
+ * @param {InstanceType<ExportInfo>} exportInfo export info of a later star source providing the same name
246
+ * @returns {boolean} true when the two sources provide different bindings
247
+ */
248
+ const isAmbiguousWith = (moduleGraph, previous, exportInfo) => {
249
+ const previousBinding = previous.getTerminalBinding(moduleGraph);
250
+ if (!previousBinding) return false;
251
+ const binding = exportInfo.getTerminalBinding(moduleGraph);
252
+ if (!binding) return false;
253
+ return previousBinding !== binding;
254
+ };
255
+
223
256
  /**
224
257
  * Determine export assignments.
225
258
  * @param {ModuleGraph} moduleGraph module graph
226
259
  * @param {HarmonyExportImportedSpecifierDependency[]} dependencies dependencies
227
260
  * @param {HarmonyExportImportedSpecifierDependency=} additionalDependency additional dependency
228
- * @returns {{ names: ExportInfoName[], dependencyIndices: DependencyIndices }} result
261
+ * @returns {{ names: ExportInfoName[], dependencyIndices: DependencyIndices, conflicting: Set<ExportInfoName> | undefined }} result
229
262
  */
230
263
  const determineExportAssignments = (
231
264
  moduleGraph,
@@ -236,6 +269,10 @@ const determineExportAssignments = (
236
269
  const names = new Set();
237
270
  /** @type {DependencyIndices} */
238
271
  const dependencyIndices = [];
272
+ /** @type {Map<ExportInfoName, InstanceType<ExportInfo>>} */
273
+ const firstProvider = new Map();
274
+ /** @type {Set<ExportInfoName> | undefined} */
275
+ let conflicting;
239
276
 
240
277
  if (additionalDependency) {
241
278
  dependencies = [...dependencies, additionalDependency];
@@ -253,24 +290,42 @@ const determineExportAssignments = (
253
290
  if (otherImportedModule) {
254
291
  const exportsInfo = moduleGraph.getExportsInfo(otherImportedModule);
255
292
  for (const exportInfo of exportsInfo.exports) {
293
+ if (exportInfo.provided !== true || exportInfo.name === "default") {
294
+ continue;
295
+ }
296
+ if (names.has(exportInfo.name)) {
297
+ const previous =
298
+ /** @type {InstanceType<ExportInfo>} */
299
+ (firstProvider.get(exportInfo.name));
300
+ if (
301
+ isAmbiguousWith(moduleGraph, previous, exportInfo) &&
302
+ // A cyclic contribution resolves to nothing, so it never competes
303
+ // with the binding a sibling `export *` provides.
304
+ !(
305
+ parentModule &&
306
+ isStarReexportBackToParent(moduleGraph, exportInfo, parentModule)
307
+ )
308
+ ) {
309
+ if (conflicting === undefined) conflicting = new Set();
310
+ conflicting.add(exportInfo.name);
311
+ }
312
+ continue;
313
+ }
256
314
  if (
257
- exportInfo.provided === true &&
258
- exportInfo.name !== "default" &&
259
- !names.has(exportInfo.name) &&
260
- !(
261
- parentModule &&
262
- isStarReexportBackToParent(moduleGraph, exportInfo, parentModule)
263
- )
315
+ parentModule &&
316
+ isStarReexportBackToParent(moduleGraph, exportInfo, parentModule)
264
317
  ) {
265
- names.add(exportInfo.name);
266
- dependencyIndices[i] = names.size;
318
+ continue;
267
319
  }
320
+ names.add(exportInfo.name);
321
+ firstProvider.set(exportInfo.name, exportInfo);
322
+ dependencyIndices[i] = names.size;
268
323
  }
269
324
  }
270
325
  }
271
326
  dependencyIndices.push(names.size);
272
327
 
273
- return { names: [...names], dependencyIndices };
328
+ return { names: [...names], dependencyIndices, conflicting };
274
329
  };
275
330
 
276
331
  /**
@@ -384,6 +439,14 @@ const getMode = (moduleGraph, dep, runtimeKey) => {
384
439
  mode.name = name;
385
440
  break;
386
441
  default:
442
+ // forwarding to a circular chain would recurse until the stack
443
+ // blows, so the name resolves to undefined like a missing one
444
+ if (exportInfo.hasCircularTarget(moduleGraph)) {
445
+ mode = new ExportMode("reexport-undefined");
446
+ mode.name = name;
447
+ mode.circular = true;
448
+ break;
449
+ }
387
450
  mode = new ExportMode("normal-reexport");
388
451
  mode.items = [
389
452
  new NormalReexportItem(name, ids, exportInfo, false, false)
@@ -641,6 +704,12 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
641
704
  /** @type {IgnoredExports} */
642
705
  const ignoredExports = new Set(this.activeExports);
643
706
  ignoredExports.add("default");
707
+ // An ambiguous name resolves to no binding at all, so no `export *` in this
708
+ // module may contribute it — not even the first one.
709
+ const conflicting = this._getConflictingStarExportNames(moduleGraph);
710
+ if (conflicting !== undefined) {
711
+ for (const name of conflicting) ignoredExports.add(name);
712
+ }
644
713
 
645
714
  /** @type {Hidden | undefined} */
646
715
  let hiddenExports;
@@ -798,7 +867,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
798
867
  runtime,
799
868
  referencedExports,
800
869
  [],
801
- /** @type {ExportInfo} */ (mode.partialNamespaceExportInfo)
870
+ /** @type {InstanceType<ExportInfo>} */ (
871
+ mode.partialNamespaceExportInfo
872
+ )
802
873
  );
803
874
  return referencedExports;
804
875
  }
@@ -814,7 +885,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
814
885
  runtime,
815
886
  referencedExports,
816
887
  [],
817
- /** @type {ExportInfo} */ (mode.partialNamespaceExportInfo),
888
+ /** @type {InstanceType<ExportInfo>} */ (
889
+ mode.partialNamespaceExportInfo
890
+ ),
818
891
  mode.type === "reexport-fake-namespace-object"
819
892
  );
820
893
  return referencedExports;
@@ -842,6 +915,21 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
842
915
  }
843
916
  }
844
917
 
918
+ /**
919
+ * Names this module's `export *` sources provide with conflicting bindings.
920
+ * @param {ModuleGraph} moduleGraph the module graph
921
+ * @returns {Set<ExportInfoName> | undefined} ambiguous names, or nothing when there are none
922
+ */
923
+ _getConflictingStarExportNames(moduleGraph) {
924
+ // Every `export *` carries the module's full star list; a lone one has
925
+ // nothing to be ambiguous with, so skip the walk.
926
+ if (!this.allStarExports) return;
927
+ const { dependencies } = this.allStarExports;
928
+ if (dependencies.length < 2) return;
929
+ return moduleGraph.cached(determineExportAssignments, dependencies)
930
+ .conflicting;
931
+ }
932
+
845
933
  /**
846
934
  * Discover active exports from other star exports.
847
935
  * @param {ModuleGraph} moduleGraph the module graph
@@ -1043,10 +1131,54 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
1043
1131
  */
1044
1132
  getWarnings(moduleGraph) {
1045
1133
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
1134
+ const circular =
1135
+ this._getCircularReexportPresenceLevel() === ExportPresenceModes.WARN
1136
+ ? this._getCircularReexportErrors(moduleGraph)
1137
+ : undefined;
1046
1138
  if (exportsPresence === ExportPresenceModes.WARN) {
1047
- return this._getErrors(moduleGraph);
1139
+ const errors = this._getErrors(moduleGraph);
1140
+ if (!circular) return errors;
1141
+ return errors ? [...errors, ...circular] : circular;
1048
1142
  }
1049
- return null;
1143
+ return circular;
1144
+ }
1145
+
1146
+ /**
1147
+ * Reporting level for a circular reexport chain. It skips the promotion to
1148
+ * an error that AUTO gives a strict harmony module — a cycle warns by
1149
+ * default — but an explicit setting still says whether and how to report.
1150
+ * @returns {ExportPresenceMode} effective mode
1151
+ */
1152
+ _getCircularReexportPresenceLevel() {
1153
+ return this.exportPresenceMode === ExportPresenceModes.AUTO
1154
+ ? ExportPresenceModes.WARN
1155
+ : this.exportPresenceMode;
1156
+ }
1157
+
1158
+ /**
1159
+ * Returns errors for a name resolving through a circular reexport chain.
1160
+ * @param {ModuleGraph} moduleGraph module graph
1161
+ * @returns {WebpackError[] | undefined} errors
1162
+ */
1163
+ _getCircularReexportErrors(moduleGraph) {
1164
+ const ids = this.getIds(moduleGraph);
1165
+ if (ids.length === 0 || !this.name) return;
1166
+ const parentModule = /** @type {Module} */ (
1167
+ moduleGraph.getParentModule(this)
1168
+ );
1169
+ const exportInfo = moduleGraph
1170
+ .getExportsInfo(parentModule)
1171
+ .getReadOnlyExportInfo(this.name);
1172
+ if (!exportInfo.hasCircularTarget(moduleGraph)) return;
1173
+ return [
1174
+ new HarmonyLinkingError(
1175
+ `export '${ids.join(".")}' (reexported as '${
1176
+ this.name
1177
+ }') is part of a circular reexport chain in '${
1178
+ this.userRequest
1179
+ }' and is undefined`
1180
+ )
1181
+ ];
1050
1182
  }
1051
1183
 
1052
1184
  /**
@@ -1056,10 +1188,18 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
1056
1188
  */
1057
1189
  getErrors(moduleGraph) {
1058
1190
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
1059
- if (exportsPresence === ExportPresenceModes.ERROR) {
1060
- return this._getErrors(moduleGraph);
1191
+ const errors =
1192
+ exportsPresence === ExportPresenceModes.ERROR
1193
+ ? this._getErrors(moduleGraph)
1194
+ : null;
1195
+ if (
1196
+ this._getCircularReexportPresenceLevel() !== ExportPresenceModes.ERROR
1197
+ ) {
1198
+ return errors;
1061
1199
  }
1062
- return null;
1200
+ const circular = this._getCircularReexportErrors(moduleGraph);
1201
+ if (!circular) return errors;
1202
+ return errors ? [...errors, ...circular] : circular;
1063
1203
  }
1064
1204
 
1065
1205
  /**
@@ -1212,7 +1352,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1212
1352
 
1213
1353
  const mode = dep.getMode(moduleGraph, runtime);
1214
1354
 
1215
- if (concatenationScope) {
1355
+ // a wrapped module has no shared-scope symbols to redirect reexports to
1356
+ if (concatenationScope && !concatenationScope.isWrapped()) {
1216
1357
  switch (mode.type) {
1217
1358
  case "reexport-undefined":
1218
1359
  concatenationScope.registerRawExport(
@@ -1224,7 +1365,15 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1224
1365
  }
1225
1366
 
1226
1367
  if (mode.type !== "unused" && mode.type !== "empty-star") {
1227
- super.apply(dependency, source, templateContext);
1368
+ const importedModule = moduleGraph.getModule(dep);
1369
+ // an in-scope target has no standalone module left to import from
1370
+ if (
1371
+ concatenationScope === undefined ||
1372
+ importedModule === null ||
1373
+ !concatenationScope.isModuleInScope(importedModule)
1374
+ ) {
1375
+ super.apply(dependency, source, templateContext);
1376
+ }
1228
1377
 
1229
1378
  this._addExportFragments(
1230
1379
  templateContext.initFragments,
@@ -1235,7 +1384,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1235
1384
  templateContext.chunkGraph,
1236
1385
  runtime,
1237
1386
  templateContext.runtimeTemplate,
1238
- templateContext.runtimeRequirements
1387
+ templateContext.runtimeRequirements,
1388
+ concatenationScope
1239
1389
  );
1240
1390
  }
1241
1391
  }
@@ -1251,6 +1401,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1251
1401
  * @param {RuntimeSpec} runtime the runtime
1252
1402
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
1253
1403
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
1404
+ * @param {ConcatenationScope=} concatenationScope concatenation scope of a wrapped module
1254
1405
  * @returns {void}
1255
1406
  */
1256
1407
  _addExportFragments(
@@ -1262,10 +1413,28 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1262
1413
  chunkGraph,
1263
1414
  runtime,
1264
1415
  runtimeTemplate,
1265
- runtimeRequirements
1416
+ runtimeRequirements,
1417
+ concatenationScope
1266
1418
  ) {
1267
1419
  const importedModule = /** @type {Module} */ (moduleGraph.getModule(dep));
1268
- const importVar = dep.getImportVar(moduleGraph);
1420
+ // an in-scope target has no import statement, read it through a reference
1421
+ const inScope =
1422
+ concatenationScope !== undefined &&
1423
+ concatenationScope.isModuleInScope(importedModule);
1424
+ const importVar = inScope
1425
+ ? /** @type {ConcatenationScope} */ (
1426
+ concatenationScope
1427
+ ).createModuleReference(importedModule, { asiSafe: true })
1428
+ : dep.getImportVar(moduleGraph);
1429
+ // whole-namespace modes need the original export names, not mangled ones
1430
+ const namespaceImportVar = inScope
1431
+ ? /** @type {ConcatenationScope} */ (
1432
+ concatenationScope
1433
+ ).createModuleReference(importedModule, {
1434
+ asiSafe: true,
1435
+ mangleableNamespace: true
1436
+ })
1437
+ : importVar;
1269
1438
  const isDeferred =
1270
1439
  ImportPhaseUtils.isDefer(dep.phase) &&
1271
1440
  !(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
@@ -1282,7 +1451,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1282
1451
  moduleGraph
1283
1452
  .getExportsInfo(module)
1284
1453
  .getUsedName(mode.name ? mode.name : [], runtime),
1285
- importVar,
1454
+ namespaceImportVar,
1286
1455
  importedModule.getExportsType(
1287
1456
  moduleGraph,
1288
1457
  module.buildMeta &&
@@ -1318,7 +1487,18 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1318
1487
  );
1319
1488
  break;
1320
1489
 
1321
- case "reexport-dynamic-default":
1490
+ case "reexport-dynamic-default": {
1491
+ // `${importVar}_default` names the interop variable that the import
1492
+ // statement declares. An in-scope target has no import statement, so
1493
+ // reference its default export and let the concatenation resolve it.
1494
+ const defaultAccess = inScope
1495
+ ? /** @type {ConcatenationScope} */ (
1496
+ concatenationScope
1497
+ ).createModuleReference(importedModule, {
1498
+ ids: ["default"],
1499
+ asiSafe: true
1500
+ })
1501
+ : importVar;
1322
1502
  initFragments.push(
1323
1503
  this.getReexportFragment(
1324
1504
  module,
@@ -1326,32 +1506,56 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1326
1506
  moduleGraph
1327
1507
  .getExportsInfo(module)
1328
1508
  .getUsedName(/** @type {string} */ (mode.name), runtime),
1329
- importVar,
1330
- null,
1509
+ defaultAccess,
1510
+ inScope ? "" : null,
1331
1511
  runtimeRequirements
1332
1512
  )
1333
1513
  );
1334
1514
  break;
1515
+ }
1335
1516
 
1336
1517
  case "reexport-fake-namespace-object":
1337
- initFragments.push(
1338
- ...this.getReexportFakeNamespaceObjectFragments(
1339
- module,
1340
- moduleGraph
1341
- .getExportsInfo(module)
1342
- .getUsedName(/** @type {string} */ (mode.name), runtime),
1343
- importVar,
1344
- mode.fakeType,
1345
- runtimeRequirements
1346
- )
1347
- );
1518
+ // `${name}_namespace_cache` needs an identifier to suffix, but an
1519
+ // in-scope target is an expression. The concatenation already builds
1520
+ // the same object, memoized: its interop namespace picks the mode from
1521
+ // the exports type, which is what `fakeType` mirrors.
1522
+ if (inScope) {
1523
+ initFragments.push(
1524
+ this.getReexportFragment(
1525
+ module,
1526
+ "reexport fake namespace object from non-harmony",
1527
+ moduleGraph
1528
+ .getExportsInfo(module)
1529
+ .getUsedName(/** @type {string} */ (mode.name), runtime),
1530
+ /** @type {ConcatenationScope} */ (
1531
+ concatenationScope
1532
+ ).createModuleReference(importedModule, { asiSafe: true }),
1533
+ "",
1534
+ runtimeRequirements
1535
+ )
1536
+ );
1537
+ } else {
1538
+ initFragments.push(
1539
+ ...this.getReexportFakeNamespaceObjectFragments(
1540
+ module,
1541
+ moduleGraph
1542
+ .getExportsInfo(module)
1543
+ .getUsedName(/** @type {string} */ (mode.name), runtime),
1544
+ namespaceImportVar,
1545
+ mode.fakeType,
1546
+ runtimeRequirements
1547
+ )
1548
+ );
1549
+ }
1348
1550
  break;
1349
1551
 
1350
1552
  case "reexport-undefined":
1351
1553
  initFragments.push(
1352
1554
  this.getReexportFragment(
1353
1555
  module,
1354
- "reexport non-default export from non-harmony",
1556
+ mode.circular
1557
+ ? "reexport circular"
1558
+ : "reexport non-default export from non-harmony",
1355
1559
  moduleGraph
1356
1560
  .getExportsInfo(module)
1357
1561
  .getUsedName(/** @type {string} */ (mode.name), runtime),
@@ -1385,7 +1589,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1385
1589
  moduleGraph
1386
1590
  .getExportsInfo(module)
1387
1591
  .getUsedName(/** @type {string} */ (mode.name), runtime),
1388
- importVar,
1592
+ namespaceImportVar,
1389
1593
  "",
1390
1594
  runtimeRequirements
1391
1595
  )
@@ -1456,7 +1660,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1456
1660
  : /** @type {ExportModeIgnored} */ (mode.ignored);
1457
1661
  let content =
1458
1662
  "/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n" +
1459
- `/* harmony reexport (unknown) */ for(${runtimeTemplate.renderConst()} __WEBPACK_IMPORT_KEY__ in ${importVar}) `;
1663
+ `/* harmony reexport (unknown) */ for(${runtimeTemplate.renderConst()} __WEBPACK_IMPORT_KEY__ in ${namespaceImportVar}) `;
1460
1664
 
1461
1665
  // Filter out exports which are defined by other exports
1462
1666
  // and filter out default export because it cannot be reexported with *
@@ -1474,8 +1678,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1474
1678
  content +=
1475
1679
  runtimeTemplate.supportsArrowFunction() &&
1476
1680
  runtimeTemplate.supportsConst()
1477
- ? `() => ${importVar}[__WEBPACK_IMPORT_KEY__]`
1478
- : `function(key) { return ${importVar}[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)`;
1681
+ ? `() => ${namespaceImportVar}[__WEBPACK_IMPORT_KEY__]`
1682
+ : `function(key) { return ${namespaceImportVar}[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)`;
1479
1683
 
1480
1684
  runtimeRequirements.add(RuntimeGlobals.exports);
1481
1685
  runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
@@ -1723,6 +1927,8 @@ makeSerializable(
1723
1927
  "HarmonyStarExportsList"
1724
1928
  );
1725
1929
 
1930
+ HarmonyExportImportedSpecifierDependency.HarmonyStarExportsList =
1931
+ HarmonyStarExportsList;
1932
+ HarmonyExportImportedSpecifierDependency.idsSymbol = idsSymbol;
1933
+
1726
1934
  module.exports = HarmonyExportImportedSpecifierDependency;
1727
- module.exports.HarmonyStarExportsList = HarmonyStarExportsList;
1728
- module.exports.idsSymbol = idsSymbol;
@@ -10,9 +10,9 @@ const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const { first } = require("../util/SetHelpers");
11
11
  const { propertyName } = require("../util/property");
12
12
 
13
- /** @typedef {import("webpack-sources").Source} Source */
14
- /** @typedef {import("../Generator").GenerateContext} GenerateContext */
15
- /** @typedef {import("../ExportsInfo").UsedName} UsedName */
13
+ /** @import { Source } from "webpack-sources" */
14
+ /** @import { GenerateContext } from "../Generator" */
15
+ /** @import { UsedName } from "../ExportsInfo" */
16
16
 
17
17
  /**
18
18
  * Join iterable with comma.
@@ -37,6 +37,7 @@ const joinIterableWithComma = (iterable) => {
37
37
 
38
38
  /** @typedef {Map<UsedName, string>} ExportMap */
39
39
  /** @typedef {Set<string>} UnusedExports */
40
+ /** @import { OnDemandGeneration } from "./ExportBindingInitFragment" */
40
41
 
41
42
  /** @type {ExportMap} */
42
43
  const EMPTY_MAP = new Map();
@@ -53,11 +54,13 @@ class HarmonyExportInitFragment extends InitFragment {
53
54
  * @param {string} exportsArgument the exports identifier
54
55
  * @param {ExportMap} exportMap mapping from used name to exposed variable name
55
56
  * @param {UnusedExports} unusedExports list of unused export names
57
+ * @param {OnDemandGeneration=} onDemand offered the call instead of emitting it
56
58
  */
57
59
  constructor(
58
60
  exportsArgument,
59
61
  exportMap = EMPTY_MAP,
60
- unusedExports = EMPTY_SET
62
+ unusedExports = EMPTY_SET,
63
+ onDemand = undefined
61
64
  ) {
62
65
  super(undefined, InitFragment.STAGE_HARMONY_EXPORTS, 1, "harmony-exports");
63
66
  /** @type {string} */
@@ -66,6 +69,8 @@ class HarmonyExportInitFragment extends InitFragment {
66
69
  this.exportMap = exportMap;
67
70
  /** @type {UnusedExports} */
68
71
  this.unusedExports = unusedExports;
72
+ /** @type {OnDemandGeneration | undefined} */
73
+ this.onDemand = onDemand;
69
74
  }
70
75
 
71
76
  /**
@@ -114,7 +119,8 @@ class HarmonyExportInitFragment extends InitFragment {
114
119
  return new HarmonyExportInitFragment(
115
120
  this.exportsArgument,
116
121
  exportMap,
117
- unusedExports
122
+ unusedExports,
123
+ this.onDemand
118
124
  );
119
125
  }
120
126
 
@@ -151,7 +157,8 @@ class HarmonyExportInitFragment extends InitFragment {
151
157
  return new HarmonyExportInitFragment(
152
158
  this.exportsArgument,
153
159
  exportMap,
154
- unusedExports
160
+ unusedExports,
161
+ this.onDemand || other.onDemand
155
162
  );
156
163
  }
157
164
 
@@ -184,6 +191,8 @@ class HarmonyExportInitFragment extends InitFragment {
184
191
  )}: ${runtimeTemplate.returningFunction(value)}`
185
192
  );
186
193
  }
194
+ // Requested even when the call is taken over below: whoever took it may still
195
+ // emit it, and by then the requirement set is closed.
187
196
  runtimeRequirements.add(RuntimeGlobals.exports);
188
197
  runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
189
198
  definePart = `/* harmony export */ ${
@@ -191,6 +200,9 @@ class HarmonyExportInitFragment extends InitFragment {
191
200
  }(${this.exportsArgument}, {${definitions.join(
192
201
  ","
193
202
  )}\n/* harmony export */ });\n`;
203
+ if (this.onDemand !== undefined && this.onDemand(definePart, false)) {
204
+ definePart = "";
205
+ }
194
206
  }
195
207
  return `${definePart}${unusedPart}`;
196
208
  }