@depup/webpack 5.109.0-depup.0 → 5.110.1-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 (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  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/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. 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,7 +132,7 @@ 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
 
126
138
  // for "dynamic-reexport":
@@ -163,7 +175,7 @@ const RETURNS_TRUE = () => true;
163
175
  * unrelated cycles in the graph that would otherwise loop forever inside
164
176
  * `_findTarget`.
165
177
  * @param {ModuleGraph} moduleGraph the module graph
166
- * @param {ExportInfo} exportInfo export info on the imported module
178
+ * @param {InstanceType<ExportInfo>} exportInfo export info on the imported module
167
179
  * @param {Module} parentModule the module that contains the star reexport
168
180
  * @returns {boolean} true when this export reexports back to the parent module under the same name
169
181
  */
@@ -191,8 +203,11 @@ const isStarReexportBackToParent = (moduleGraph, exportInfo, parentModule) => {
191
203
  let current = moduleGraph
192
204
  .getExportsInfo(firstTarget.module)
193
205
  .getReadOnlyExportInfo(firstTarget.export[0]);
194
- /** @type {Set<ExportInfo>} */
195
- const visited = new Set([exportInfo, current]);
206
+ // Allocated lazily: a single-extra-hop chain that terminates (the common
207
+ // `barrel -> leaf local binding` case) returns before `next` is ever
208
+ // computed, so the visited set is pure waste there.
209
+ /** @type {Set<InstanceType<ExportInfo>> | undefined} */
210
+ let visited;
196
211
  for (;;) {
197
212
  const target = current.findTarget(moduleGraph, RETURNS_TRUE);
198
213
  if (!target || typeof target !== "object") return false;
@@ -210,6 +225,7 @@ const isStarReexportBackToParent = (moduleGraph, exportInfo, parentModule) => {
210
225
  const next = moduleGraph
211
226
  .getExportsInfo(target.module)
212
227
  .getReadOnlyExportInfo(target.export[0]);
228
+ if (visited === undefined) visited = new Set([exportInfo, current]);
213
229
  if (visited.has(next)) return false;
214
230
  visited.add(next);
215
231
  current = next;
@@ -635,7 +651,8 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
635
651
  exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused;
636
652
 
637
653
  /** @type {IgnoredExports} */
638
- const ignoredExports = new Set(["default", ...this.activeExports]);
654
+ const ignoredExports = new Set(this.activeExports);
655
+ ignoredExports.add("default");
639
656
 
640
657
  /** @type {Hidden | undefined} */
641
658
  let hiddenExports;
@@ -793,7 +810,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
793
810
  runtime,
794
811
  referencedExports,
795
812
  [],
796
- /** @type {ExportInfo} */ (mode.partialNamespaceExportInfo)
813
+ /** @type {InstanceType<ExportInfo>} */ (
814
+ mode.partialNamespaceExportInfo
815
+ )
797
816
  );
798
817
  return referencedExports;
799
818
  }
@@ -809,7 +828,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
809
828
  runtime,
810
829
  referencedExports,
811
830
  [],
812
- /** @type {ExportInfo} */ (mode.partialNamespaceExportInfo),
831
+ /** @type {InstanceType<ExportInfo>} */ (
832
+ mode.partialNamespaceExportInfo
833
+ ),
813
834
  mode.type === "reexport-fake-namespace-object"
814
835
  );
815
836
  return referencedExports;
@@ -1207,7 +1228,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1207
1228
 
1208
1229
  const mode = dep.getMode(moduleGraph, runtime);
1209
1230
 
1210
- if (concatenationScope) {
1231
+ // a wrapped module has no shared-scope symbols to redirect reexports to
1232
+ if (concatenationScope && !concatenationScope.isWrapped()) {
1211
1233
  switch (mode.type) {
1212
1234
  case "reexport-undefined":
1213
1235
  concatenationScope.registerRawExport(
@@ -1219,7 +1241,15 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1219
1241
  }
1220
1242
 
1221
1243
  if (mode.type !== "unused" && mode.type !== "empty-star") {
1222
- super.apply(dependency, source, templateContext);
1244
+ const importedModule = moduleGraph.getModule(dep);
1245
+ // an in-scope target has no standalone module left to import from
1246
+ if (
1247
+ concatenationScope === undefined ||
1248
+ importedModule === null ||
1249
+ !concatenationScope.isModuleInScope(importedModule)
1250
+ ) {
1251
+ super.apply(dependency, source, templateContext);
1252
+ }
1223
1253
 
1224
1254
  this._addExportFragments(
1225
1255
  templateContext.initFragments,
@@ -1230,7 +1260,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1230
1260
  templateContext.chunkGraph,
1231
1261
  runtime,
1232
1262
  templateContext.runtimeTemplate,
1233
- templateContext.runtimeRequirements
1263
+ templateContext.runtimeRequirements,
1264
+ concatenationScope
1234
1265
  );
1235
1266
  }
1236
1267
  }
@@ -1246,6 +1277,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1246
1277
  * @param {RuntimeSpec} runtime the runtime
1247
1278
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
1248
1279
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
1280
+ * @param {ConcatenationScope=} concatenationScope concatenation scope of a wrapped module
1249
1281
  * @returns {void}
1250
1282
  */
1251
1283
  _addExportFragments(
@@ -1257,10 +1289,28 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1257
1289
  chunkGraph,
1258
1290
  runtime,
1259
1291
  runtimeTemplate,
1260
- runtimeRequirements
1292
+ runtimeRequirements,
1293
+ concatenationScope
1261
1294
  ) {
1262
1295
  const importedModule = /** @type {Module} */ (moduleGraph.getModule(dep));
1263
- const importVar = dep.getImportVar(moduleGraph);
1296
+ // an in-scope target has no import statement, read it through a reference
1297
+ const inScope =
1298
+ concatenationScope !== undefined &&
1299
+ concatenationScope.isModuleInScope(importedModule);
1300
+ const importVar = inScope
1301
+ ? /** @type {ConcatenationScope} */ (
1302
+ concatenationScope
1303
+ ).createModuleReference(importedModule, { asiSafe: true })
1304
+ : dep.getImportVar(moduleGraph);
1305
+ // whole-namespace modes need the original export names, not mangled ones
1306
+ const namespaceImportVar = inScope
1307
+ ? /** @type {ConcatenationScope} */ (
1308
+ concatenationScope
1309
+ ).createModuleReference(importedModule, {
1310
+ asiSafe: true,
1311
+ mangleableNamespace: true
1312
+ })
1313
+ : importVar;
1264
1314
  const isDeferred =
1265
1315
  ImportPhaseUtils.isDefer(dep.phase) &&
1266
1316
  !(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
@@ -1277,7 +1327,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1277
1327
  moduleGraph
1278
1328
  .getExportsInfo(module)
1279
1329
  .getUsedName(mode.name ? mode.name : [], runtime),
1280
- importVar,
1330
+ namespaceImportVar,
1281
1331
  importedModule.getExportsType(
1282
1332
  moduleGraph,
1283
1333
  module.buildMeta &&
@@ -1313,7 +1363,18 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1313
1363
  );
1314
1364
  break;
1315
1365
 
1316
- case "reexport-dynamic-default":
1366
+ case "reexport-dynamic-default": {
1367
+ // `${importVar}_default` names the interop variable that the import
1368
+ // statement declares. An in-scope target has no import statement, so
1369
+ // reference its default export and let the concatenation resolve it.
1370
+ const defaultAccess = inScope
1371
+ ? /** @type {ConcatenationScope} */ (
1372
+ concatenationScope
1373
+ ).createModuleReference(importedModule, {
1374
+ ids: ["default"],
1375
+ asiSafe: true
1376
+ })
1377
+ : importVar;
1317
1378
  initFragments.push(
1318
1379
  this.getReexportFragment(
1319
1380
  module,
@@ -1321,25 +1382,47 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1321
1382
  moduleGraph
1322
1383
  .getExportsInfo(module)
1323
1384
  .getUsedName(/** @type {string} */ (mode.name), runtime),
1324
- importVar,
1325
- null,
1385
+ defaultAccess,
1386
+ inScope ? "" : null,
1326
1387
  runtimeRequirements
1327
1388
  )
1328
1389
  );
1329
1390
  break;
1391
+ }
1330
1392
 
1331
1393
  case "reexport-fake-namespace-object":
1332
- initFragments.push(
1333
- ...this.getReexportFakeNamespaceObjectFragments(
1334
- module,
1335
- moduleGraph
1336
- .getExportsInfo(module)
1337
- .getUsedName(/** @type {string} */ (mode.name), runtime),
1338
- importVar,
1339
- mode.fakeType,
1340
- runtimeRequirements
1341
- )
1342
- );
1394
+ // `${name}_namespace_cache` needs an identifier to suffix, but an
1395
+ // in-scope target is an expression. The concatenation already builds
1396
+ // the same object, memoized: its interop namespace picks the mode from
1397
+ // the exports type, which is what `fakeType` mirrors.
1398
+ if (inScope) {
1399
+ initFragments.push(
1400
+ this.getReexportFragment(
1401
+ module,
1402
+ "reexport fake namespace object from non-harmony",
1403
+ moduleGraph
1404
+ .getExportsInfo(module)
1405
+ .getUsedName(/** @type {string} */ (mode.name), runtime),
1406
+ /** @type {ConcatenationScope} */ (
1407
+ concatenationScope
1408
+ ).createModuleReference(importedModule, { asiSafe: true }),
1409
+ "",
1410
+ runtimeRequirements
1411
+ )
1412
+ );
1413
+ } else {
1414
+ initFragments.push(
1415
+ ...this.getReexportFakeNamespaceObjectFragments(
1416
+ module,
1417
+ moduleGraph
1418
+ .getExportsInfo(module)
1419
+ .getUsedName(/** @type {string} */ (mode.name), runtime),
1420
+ namespaceImportVar,
1421
+ mode.fakeType,
1422
+ runtimeRequirements
1423
+ )
1424
+ );
1425
+ }
1343
1426
  break;
1344
1427
 
1345
1428
  case "reexport-undefined":
@@ -1380,14 +1463,19 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1380
1463
  moduleGraph
1381
1464
  .getExportsInfo(module)
1382
1465
  .getUsedName(/** @type {string} */ (mode.name), runtime),
1383
- importVar,
1466
+ namespaceImportVar,
1384
1467
  "",
1385
1468
  runtimeRequirements
1386
1469
  )
1387
1470
  );
1388
1471
  break;
1389
1472
 
1390
- case "normal-reexport":
1473
+ case "normal-reexport": {
1474
+ // loop-invariants hoisted out of the per-item loop below (a barrel
1475
+ // re-exporting N names otherwise repeats these lookups N times)
1476
+ const connection = moduleGraph.getConnection(dep);
1477
+ const selfExportsInfo = moduleGraph.getExportsInfo(module);
1478
+ const importedExportsInfo = moduleGraph.getExportsInfo(importedModule);
1391
1479
  for (const {
1392
1480
  name,
1393
1481
  ids,
@@ -1396,7 +1484,6 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1396
1484
  } of /** @type {NormalReexportItem[]} */ (mode.items)) {
1397
1485
  if (hidden) continue;
1398
1486
  if (checked) {
1399
- const connection = moduleGraph.getConnection(dep);
1400
1487
  const key = `harmony reexport (checked) ${importVar} ${name}`;
1401
1488
  const runtimeCondition = dep.weak
1402
1489
  ? false
@@ -1425,11 +1512,9 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1425
1512
  this.getReexportFragment(
1426
1513
  module,
1427
1514
  "reexport safe",
1428
- moduleGraph.getExportsInfo(module).getUsedName(name, runtime),
1515
+ selfExportsInfo.getUsedName(name, runtime),
1429
1516
  importVar,
1430
- moduleGraph
1431
- .getExportsInfo(importedModule)
1432
- .getUsedName(ids, runtime),
1517
+ importedExportsInfo.getUsedName(ids, runtime),
1433
1518
  runtimeRequirements,
1434
1519
  ids
1435
1520
  )
@@ -1437,6 +1522,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1437
1522
  }
1438
1523
  }
1439
1524
  break;
1525
+ }
1440
1526
 
1441
1527
  case "dynamic-reexport": {
1442
1528
  const ignored = mode.hidden
@@ -1448,7 +1534,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1448
1534
  : /** @type {ExportModeIgnored} */ (mode.ignored);
1449
1535
  let content =
1450
1536
  "/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n" +
1451
- `/* harmony reexport (unknown) */ for(${runtimeTemplate.renderConst()} __WEBPACK_IMPORT_KEY__ in ${importVar}) `;
1537
+ `/* harmony reexport (unknown) */ for(${runtimeTemplate.renderConst()} __WEBPACK_IMPORT_KEY__ in ${namespaceImportVar}) `;
1452
1538
 
1453
1539
  // Filter out exports which are defined by other exports
1454
1540
  // and filter out default export because it cannot be reexported with *
@@ -1466,8 +1552,8 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1466
1552
  content +=
1467
1553
  runtimeTemplate.supportsArrowFunction() &&
1468
1554
  runtimeTemplate.supportsConst()
1469
- ? `() => ${importVar}[__WEBPACK_IMPORT_KEY__]`
1470
- : `function(key) { return ${importVar}[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)`;
1555
+ ? `() => ${namespaceImportVar}[__WEBPACK_IMPORT_KEY__]`
1556
+ : `function(key) { return ${namespaceImportVar}[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)`;
1471
1557
 
1472
1558
  runtimeRequirements.add(RuntimeGlobals.exports);
1473
1559
  runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
@@ -1715,6 +1801,8 @@ makeSerializable(
1715
1801
  "HarmonyStarExportsList"
1716
1802
  );
1717
1803
 
1804
+ HarmonyExportImportedSpecifierDependency.HarmonyStarExportsList =
1805
+ HarmonyStarExportsList;
1806
+ HarmonyExportImportedSpecifierDependency.idsSymbol = idsSymbol;
1807
+
1718
1808
  module.exports = HarmonyExportImportedSpecifierDependency;
1719
- module.exports.HarmonyStarExportsList = HarmonyStarExportsList;
1720
- 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
  }
@@ -8,22 +8,30 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const { InlinedUsedName } = require("../optimize/InlineExports");
10
10
  const makeSerializable = require("../util/makeSerializable");
11
+ const memoize = require("../util/memoize");
11
12
  const ExportBindingInitFragment = require("./ExportBindingInitFragment");
12
13
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
13
14
  const NullDependency = require("./NullDependency");
14
15
 
15
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
16
- /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
17
- /** @typedef {import("../Dependency").LazyUntil} LazyUntil */
18
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
21
- /** @typedef {import("../optimize/InlineExports").InlinedValue} InlinedValue */
16
+ /** @import { ReplaceSource } from "webpack-sources" */
17
+ /** @import { ExportsSpec, LazyUntil } from "../Dependency" */
18
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
19
+ /** @import ModuleGraph from "../ModuleGraph" */
20
+ /** @import { ConnectionState } from "../ModuleGraphConnection" */
21
+ /** @import { InlinedValue } from "../optimize/InlineExports" */
22
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, InlinedValue | null | undefined]>} ObjectDeserializerContext */
23
23
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, string, InlinedValue | null | undefined]>} ObjectSerializerContext */
24
- /** @typedef {import("./HarmonyExportInitFragment").UnusedExports} UnusedExports */
25
- /** @typedef {import("./HarmonyExportInitFragment").ExportMap} ExportMap */
26
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
24
+ /** @import { UnusedExports, ExportMap } from "./HarmonyExportInitFragment" */
25
+ /**
26
+ * @import {
27
+ * JavascriptModuleBuildInfo
28
+ * } from "../javascript/JavascriptModule"
29
+ */
30
+
31
+ // Required here rather than at the top: the plugin reaches back into the dependencies.
32
+ const getJavascriptModulesPlugin = memoize(() =>
33
+ require("../javascript/JavascriptModulesPlugin")
34
+ );
27
35
 
28
36
  class HarmonyExportSpecifierDependency extends NullDependency {
29
37
  /**
@@ -139,10 +147,18 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
139
147
  apply(
140
148
  dependency,
141
149
  source,
142
- { module, moduleGraph, initFragments, runtime, concatenationScope }
150
+ {
151
+ module,
152
+ moduleGraph,
153
+ initFragments,
154
+ runtime,
155
+ runtimeTemplate,
156
+ concatenationScope
157
+ }
143
158
  ) {
144
159
  const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency);
145
- if (concatenationScope) {
160
+ // a wrapped module's bindings stay inside the wrapper, not in the shared scope
161
+ if (concatenationScope && !concatenationScope.isWrapped()) {
146
162
  concatenationScope.registerExport(dep.name, dep.id);
147
163
  return;
148
164
  }
@@ -169,6 +185,21 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
169
185
  /** @type {import("../Module").BuildInfo} */ (module.buildInfo)
170
186
  .isCircular === false;
171
187
 
188
+ // A library exporting the same bindings natively reads none of them back off the
189
+ // exports object, so it takes the call over and emits it only where wrapped.
190
+ const hooks = getJavascriptModulesPlugin().getCompilationHooks(
191
+ runtimeTemplate.compilation
192
+ );
193
+ const onDemand = hooks.onDemandExportsGeneration.isUsed()
194
+ ? (/** @type {string} */ definition, /** @type {boolean} */ placeAtEnd) =>
195
+ hooks.onDemandExportsGeneration.call(
196
+ module,
197
+ runtime,
198
+ definition,
199
+ placeAtEnd
200
+ ) === true
201
+ : undefined;
202
+
172
203
  if (canUseValueBinding) {
173
204
  initFragments.push(
174
205
  new ExportBindingInitFragment(
@@ -180,7 +211,8 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
180
211
  bindingType: "value"
181
212
  }
182
213
  ],
183
- true
214
+ true,
215
+ onDemand
184
216
  )
185
217
  );
186
218
  } else {
@@ -188,7 +220,12 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
188
220
  const map = new Map();
189
221
  map.set(used, `/* binding */ ${dep.id}`);
190
222
  initFragments.push(
191
- new HarmonyExportInitFragment(module.exportsArgument, map, undefined)
223
+ new HarmonyExportInitFragment(
224
+ module.exportsArgument,
225
+ map,
226
+ undefined,
227
+ onDemand
228
+ )
192
229
  );
193
230
  }
194
231
  }
@@ -7,10 +7,13 @@
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
 
10
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
11
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
12
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
13
- /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
10
+ /** @import { BuildInfo } from "../Module" */
11
+ /**
12
+ * @import {
13
+ * JavascriptModuleBuildMeta
14
+ * } from "../javascript/JavascriptModule"
15
+ */
16
+ /** @import { JavascriptParserState } from "../javascript/JavascriptParser" */
14
17
 
15
18
  /** @type {WeakMap<JavascriptParserState, boolean>} */
16
19
  const parserStateExportsState = new WeakMap();