@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
@@ -16,20 +16,27 @@ const HarmonyLinkingError = require("./HarmonyLinkingError");
16
16
  const { ImportPhase, ImportPhaseUtils } = require("./ImportPhase");
17
17
  const ModuleDependency = require("./ModuleDependency");
18
18
 
19
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
20
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
21
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
22
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
23
- /** @typedef {import("../ExportsInfo")} ExportsInfo */
24
- /** @typedef {import("../Module")} Module */
25
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
26
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
27
- /** @typedef {import("../errors/WebpackError")} WebpackError */
28
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
29
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
30
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
32
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
+ /** @import { ReplaceSource } from "webpack-sources" */
20
+ /**
21
+ * @import {
22
+ * JavascriptParserOptions
23
+ * } from "../../declarations/WebpackOptions"
24
+ */
25
+ /** @import { ReferencedExports } from "../Dependency" */
26
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
27
+ /** @import ExportsInfo from "../ExportsInfo" */
28
+ /** @import Module, { BuildMeta } from "../Module" */
29
+ /** @import ModuleGraph from "../ModuleGraph" */
30
+ /** @import WebpackError from "../errors/WebpackError" */
31
+ /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
32
+ /** @import { ImportPhaseType } from "./ImportPhase" */
33
+ /**
34
+ * @import {
35
+ * ObjectDeserializerContext,
36
+ * ObjectSerializerContext
37
+ * } from "../serialization/ObjectMiddleware"
38
+ */
39
+ /** @import { RuntimeSpec } from "../util/runtime" */
33
40
 
34
41
  /** @typedef {0 | 1 | 2 | 3} ExportPresenceMode */
35
42
 
@@ -135,9 +142,10 @@ class HarmonyImportDependency extends ModuleDependency {
135
142
 
136
143
  /**
137
144
  * Returns true if this dependency can be concatenated
145
+ * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
138
146
  * @returns {boolean} true if this dependency can be concatenated
139
147
  */
140
- canConcatenate() {
148
+ canConcatenate(concatenateCommonJsModules) {
141
149
  return true;
142
150
  }
143
151
 
@@ -191,7 +199,7 @@ class HarmonyImportDependency extends ModuleDependency {
191
199
 
192
200
  let importVar = importVarMap.get(importedModule);
193
201
  if (importVar) return importVar;
194
- importVar = `${Template.toIdentifier(`${this.userRequest}`)}__WEBPACK_${
202
+ importVar = `${Template.toIdentifier(this.userRequest)}__WEBPACK_${
195
203
  isDeferred ? "DEFERRED_" : ""
196
204
  }IMPORTED_MODULE_${importVarMap.size}__`;
197
205
  importVarMap.set(importedModule, importVar);
@@ -384,8 +392,6 @@ class HarmonyImportDependency extends ModuleDependency {
384
392
  }
385
393
  }
386
394
 
387
- module.exports = HarmonyImportDependency;
388
-
389
395
  /** @type {WeakMap<Module, WeakMap<Module, RuntimeSpec | boolean>>} */
390
396
  const importEmittedMap = new WeakMap();
391
397
 
@@ -524,5 +530,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
524
530
  }
525
531
  };
526
532
 
527
- module.exports.ExportPresenceModes = ExportPresenceModes;
528
- module.exports.getNonOptionalPart = getNonOptionalPart;
533
+ HarmonyImportDependency.ExportPresenceModes = ExportPresenceModes;
534
+ HarmonyImportDependency.getNonOptionalPart = getNonOptionalPart;
535
+
536
+ module.exports = HarmonyImportDependency;
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const HotModuleReplacementPlugin = require("../HotModuleReplacementPlugin");
9
8
  const WebpackError = require("../errors/WebpackError");
9
+ const getParserHooks = require("../hmr/parserHooks");
10
10
  const {
11
11
  VariableInfo,
12
12
  getImportAttributes
@@ -29,25 +29,30 @@ const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDepe
29
29
  const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
30
30
  const { ImportPhaseUtils, createGetImportPhase } = require("./ImportPhase");
31
31
 
32
- /** @typedef {import("estree").Expression} Expression */
33
- /** @typedef {import("estree").PrivateIdentifier} PrivateIdentifier */
34
- /** @typedef {import("estree").Identifier} Identifier */
35
- /** @typedef {import("estree").MemberExpression} MemberExpression */
36
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
37
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
38
- /** @typedef {import("../Module")} Module */
39
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
40
- /** @typedef {import("../javascript/JavascriptParser").ExportAllDeclaration} ExportAllDeclaration */
41
- /** @typedef {import("../javascript/JavascriptParser").ExportNamedDeclaration} ExportNamedDeclaration */
42
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
43
- /** @typedef {import("../javascript/JavascriptParser").ImportDeclaration} ImportDeclaration */
44
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
45
- /** @typedef {import("../javascript/JavascriptParser").Members} Members */
46
- /** @typedef {import("../javascript/JavascriptParser").MembersOptionals} MembersOptionals */
47
- /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
48
- /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
49
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
50
- /** @typedef {import("./HarmonyImportGuard").GuardFrame} GuardFrame */
32
+ /**
33
+ * @import {
34
+ * Expression,
35
+ * PrivateIdentifier,
36
+ * Identifier,
37
+ * MemberExpression
38
+ * } from "estree"
39
+ */
40
+ /**
41
+ * @import {
42
+ * JavascriptParserOptions
43
+ * } from "../../declarations/WebpackOptions"
44
+ */
45
+ /** @import Module from "../Module" */
46
+ /**
47
+ * @import JavascriptParser, {
48
+ * ImportAttributes,
49
+ * Range,
50
+ * Members
51
+ * } from "../javascript/JavascriptParser"
52
+ */
53
+ /** @import { Ids, ExportPresenceMode } from "./HarmonyImportDependency" */
54
+ /** @import { ImportPhaseType } from "./ImportPhase" */
55
+ /** @import { GuardFrame } from "./HarmonyImportGuard" */
51
56
 
52
57
  const harmonySpecifierTag = Symbol("harmony import");
53
58
 
@@ -147,7 +152,7 @@ const findImportSpecifier = (parser, node) => {
147
152
  }
148
153
  };
149
154
 
150
- module.exports = class HarmonyImportDependencyParserPlugin {
155
+ class HarmonyImportDependencyParserPlugin {
151
156
  /**
152
157
  * Creates an instance of HarmonyImportDependencyParserPlugin.
153
158
  * @param {JavascriptParserOptions} options options
@@ -496,7 +501,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
496
501
  return true;
497
502
  });
498
503
  const { hotAcceptCallback, hotAcceptWithoutCallback } =
499
- HotModuleReplacementPlugin.getParserHooks(parser);
504
+ getParserHooks(parser);
500
505
  hotAcceptCallback.tap(PLUGIN_NAME, (expr, requests) => {
501
506
  if (!HarmonyExports.isEnabled(parser.state)) {
502
507
  // This is not a harmony module, skip it
@@ -567,6 +572,8 @@ module.exports = class HarmonyImportDependencyParserPlugin {
567
572
  return { consequent, alternate };
568
573
  });
569
574
  }
570
- };
575
+ }
576
+
577
+ HarmonyImportDependencyParserPlugin.harmonySpecifierTag = harmonySpecifierTag;
571
578
 
572
- module.exports.harmonySpecifierTag = harmonySpecifierTag;
579
+ module.exports = HarmonyImportDependencyParserPlugin;
@@ -6,18 +6,18 @@
6
6
  "use strict";
7
7
 
8
8
  const { InlinedUsedName } = require("../optimize/InlineExports");
9
- const memoize = require("../util/memoize");
10
9
 
11
- /** @typedef {import("estree").Expression} Expression */
12
- /** @typedef {import("../Dependency")} Dependency */
13
- /** @typedef {import("../Module")} Module */
14
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
16
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
17
- /** @typedef {import("./CommonJsRequireDependency")} CommonJsRequireDependency */
18
- /** @typedef {import("./HarmonyEvaluatedImportSpecifierDependency")} HarmonyEvaluatedImportSpecifierDependency */
19
- /** @typedef {import("./HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
20
- /** @typedef {import("./ImportDependency")} ImportDependency */
10
+ /** @import { Expression } from "estree" */
11
+ /** @import Dependency from "../Dependency" */
12
+ /** @import Module from "../Module" */
13
+ /** @import ModuleGraph from "../ModuleGraph" */
14
+ /** @import JavascriptParser from "../javascript/JavascriptParser" */
15
+ /** @import { RuntimeSpec } from "../util/runtime" */
16
+ /** @import CommonJsFullRequireDependency from "./CommonJsFullRequireDependency" */
17
+ /** @import CommonJsRequireDependency from "./CommonJsRequireDependency" */
18
+ /** @import HarmonyEvaluatedImportSpecifierDependency from "./HarmonyEvaluatedImportSpecifierDependency" */
19
+ /** @import HarmonyImportSpecifierDependency from "./HarmonyImportSpecifierDependency" */
20
+ /** @import ImportDependency from "./ImportDependency" */
21
21
 
22
22
  // Tuple-encoded boolean formula over guard dependencies. Split into per-shape
23
23
  // aliases so the recursive references resolve through array/object types.
@@ -29,7 +29,7 @@ const memoize = require("../util/memoize");
29
29
  /** @typedef {["&&" | "||" | "??", GuardFormula, GuardFormula]} GuardLogical */
30
30
  /** @typedef {GuardAtom | GuardPresenceAtom | GuardUnknown | GuardNot | GuardLogical} GuardFormula */
31
31
  /** @typedef {{ formula: GuardFormula, value: boolean }} DependencyGuard branch guard: the dependency is live only when the formula evaluates to `value` */
32
- /** @typedef {HarmonyImportSpecifierDependency | CommonJsRequireDependency | ImportDependency} GuardableDependency */
32
+ /** @typedef {HarmonyImportSpecifierDependency | CommonJsRequireDependency | CommonJsFullRequireDependency | ImportDependency} GuardableDependency */
33
33
 
34
34
  /**
35
35
  * A guard frame pushed onto `parser.state.guardStack` for the duration of one
@@ -43,13 +43,6 @@ const memoize = require("../util/memoize");
43
43
  * @property {GuardFormula | null=} presenceFormula memoized presence formula (null = no presence atom)
44
44
  */
45
45
 
46
- const getHarmonyImportSpecifierDependency = memoize(() =>
47
- require("./HarmonyImportSpecifierDependency")
48
- );
49
- const getHarmonyEvaluatedImportSpecifierDependency = memoize(() =>
50
- require("./HarmonyEvaluatedImportSpecifierDependency")
51
- );
52
-
53
46
  // Tri-state truthiness: UNKNOWN means not statically known.
54
47
  const UNKNOWN = 0;
55
48
  const FALSE = 1;
@@ -213,19 +206,17 @@ const isDeadByGuards = (guards, moduleGraph, runtime) => {
213
206
  * @returns {GuardFormula | null} formula, or null when it has no knowable atom
214
207
  */
215
208
  const buildFrameLivenessFormula = (parser, frame) => {
216
- const HarmonyImportSpecifierDependency =
217
- getHarmonyImportSpecifierDependency();
218
- const HarmonyEvaluatedImportSpecifierDependency =
219
- getHarmonyEvaluatedImportSpecifierDependency();
220
209
  const deps = /** @type {Module} */ (parser.state.module).dependencies;
221
210
  /** @type {Map<number, HarmonyImportSpecifierDependency>} */
222
211
  const depByRangeStart = new Map();
223
212
  for (let i = /** @type {number} */ (frame.depStart); i < deps.length; i++) {
224
- const dep = deps[i];
213
+ const dep = /** @type {HarmonyEvaluatedImportSpecifierDependency} */ (
214
+ deps[i]
215
+ );
225
216
  // Exclude `"x" in ns` evaluated deps; those feed the presence formula only.
226
217
  if (
227
- dep instanceof HarmonyImportSpecifierDependency &&
228
- !(dep instanceof HarmonyEvaluatedImportSpecifierDependency) &&
218
+ dep.isHarmonyImportSpecifier === true &&
219
+ dep.isHarmonyEvaluatedImportSpecifier !== true &&
229
220
  dep.range
230
221
  ) {
231
222
  depByRangeStart.set(dep.range[0], dep);
@@ -340,14 +331,14 @@ const evalPresenceFormula = (formula, name, member, needTruthy) => {
340
331
  * @returns {GuardFormula | null} formula, or null when it has no presence atom
341
332
  */
342
333
  const buildFramePresenceFormula = (parser, frame) => {
343
- const HarmonyEvaluatedImportSpecifierDependency =
344
- getHarmonyEvaluatedImportSpecifierDependency();
345
334
  const deps = /** @type {Module} */ (parser.state.module).dependencies;
346
335
  /** @type {Map<number, HarmonyEvaluatedImportSpecifierDependency>} */
347
336
  const depByRangeStart = new Map();
348
337
  for (let i = /** @type {number} */ (frame.depStart); i < deps.length; i++) {
349
- const dep = deps[i];
350
- if (dep instanceof HarmonyEvaluatedImportSpecifierDependency && dep.range) {
338
+ const dep = /** @type {HarmonyEvaluatedImportSpecifierDependency} */ (
339
+ deps[i]
340
+ );
341
+ if (dep.isHarmonyEvaluatedImportSpecifier === true && dep.range) {
351
342
  depByRangeStart.set(dep.range[0], dep);
352
343
  }
353
344
  }
@@ -6,19 +6,20 @@
6
6
  "use strict";
7
7
 
8
8
  const Dependency = require("../Dependency");
9
+ const InitFragment = require("../InitFragment");
9
10
  const Module = require("../Module");
10
11
  const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
  const HarmonyImportDependency = require("./HarmonyImportDependency");
14
+ const { ImportPhaseUtils } = require("./ImportPhase");
13
15
 
14
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
15
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
16
- /** @typedef {import("../Dependency").LazyUntil} LazyUntil */
17
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
20
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
21
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
16
+ /** @import { ReplaceSource } from "webpack-sources" */
17
+ /** @import { GetConditionFn, LazyUntil } from "../Dependency" */
18
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
19
+ /** @import ModuleGraph from "../ModuleGraph" */
20
+ /** @import { ConnectionState } from "../ModuleGraphConnection" */
21
+ /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
22
+ /** @import { ImportPhaseType } from "./ImportPhase" */
22
23
 
23
24
  class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
24
25
  /**
@@ -93,7 +94,8 @@ HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDepend
93
94
  * @returns {void}
94
95
  */
95
96
  apply(dependency, source, templateContext) {
96
- const { moduleGraph, concatenationScope } = templateContext;
97
+ const { moduleGraph, concatenationScope, runtime, initFragments } =
98
+ templateContext;
97
99
 
98
100
  const module = /** @type {Module} */ (moduleGraph.getModule(dependency));
99
101
 
@@ -103,6 +105,33 @@ HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDepend
103
105
  }
104
106
 
105
107
  if (concatenationScope && concatenationScope.isModuleInScope(module)) {
108
+ if (concatenationScope.isModuleWrapped(module)) {
109
+ const dep = /** @type {HarmonyImportSideEffectDependency} */ (
110
+ dependency
111
+ );
112
+ if (ImportPhaseUtils.isDefer(dep.phase)) return;
113
+ const connection = moduleGraph.getConnection(dep);
114
+ if (!connection || !connection.isTargetActive(runtime)) return;
115
+ // A hoisted body cannot be deferred, so its imports evaluate at their
116
+ // own slots; calling from here would run them after everything hoisted
117
+ // in between. Eagerness stops at one level: a module is generated
118
+ // before its importers, so it never learns whether it is itself eager.
119
+ if (concatenationScope.isWrapped()) {
120
+ initFragments.push(
121
+ new InitFragment(
122
+ `${concatenationScope.createModuleReference(module, {
123
+ moduleExportsAccess: true,
124
+ asiSafe: true
125
+ })};\n`,
126
+ InitFragment.STAGE_HARMONY_IMPORTS,
127
+ /** @type {number} */ (dep.sourceOrder),
128
+ `cjs eager init ${module.identifier()}`
129
+ )
130
+ );
131
+ } else {
132
+ concatenationScope.registerEagerModule(module);
133
+ }
134
+ }
106
135
  return;
107
136
  }
108
137
  super.apply(dependency, source, templateContext);
@@ -11,6 +11,7 @@ const Template = require("../Template");
11
11
  const {
12
12
  InlinedUsedName,
13
13
  isExportInlined,
14
+ isInlineEnabled,
14
15
  isInlineExportsEnabled
15
16
  } = require("../optimize/InlineExports");
16
17
  const {
@@ -18,37 +19,48 @@ const {
18
19
  } = require("../optimize/InnerGraph");
19
20
  const { getTrimmedIdsAndRange } = require("../util/chainedImports");
20
21
  const makeSerializable = require("../util/makeSerializable");
21
- const memoize = require("../util/memoize");
22
22
  const { propertyAccess } = require("../util/property");
23
23
  const traverseDestructuringAssignmentProperties = require("../util/traverseDestructuringAssignmentProperties");
24
24
  const HarmonyImportDependency = require("./HarmonyImportDependency");
25
+ const HarmonyImportGuard = require("./HarmonyImportGuard");
25
26
  const { ImportPhaseUtils } = require("./ImportPhase");
26
27
 
27
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
28
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
29
- /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
30
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
31
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
32
- /** @typedef {import("../Module")} Module */
33
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
34
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
35
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
36
- /** @typedef {import("../errors/WebpackError")} WebpackError */
37
- /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
38
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
39
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
40
- /** @typedef {import("../optimize/InnerGraph").UsedByExports} UsedByExports */
41
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
42
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
43
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
44
- /** @typedef {import("../util/chainedImports").IdRanges} IdRanges */
45
- /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
28
+ /** @import { ReplaceSource } from "webpack-sources" */
29
+ /** @import { GetConditionFn, ReferencedExports } from "../Dependency" */
30
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
31
+ /** @import Module, { BuildMeta } from "../Module" */
32
+ /** @import ModuleGraph from "../ModuleGraph" */
33
+ /**
34
+ * @import ModuleGraphConnection, {
35
+ * ConnectionState
36
+ * } from "../ModuleGraphConnection"
37
+ */
38
+ /** @import WebpackError from "../errors/WebpackError" */
39
+ /**
40
+ * @import {
41
+ * DestructuringAssignmentProperties,
42
+ * ImportAttributes,
43
+ * Range
44
+ * } from "../javascript/JavascriptParser"
45
+ */
46
+ /** @import { UsedByExports } from "../optimize/InnerGraph" */
47
+ /**
48
+ * @import {
49
+ * ObjectDeserializerContext,
50
+ * ObjectSerializerContext
51
+ * } from "../serialization/ObjectMiddleware"
52
+ */
53
+ /** @import { RuntimeSpec } from "../util/runtime" */
54
+ /** @import { IdRanges } from "../util/chainedImports" */
55
+ /** @import { ExportPresenceMode } from "./HarmonyImportDependency" */
46
56
  /** @typedef {HarmonyImportDependency.Ids} Ids */
47
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
48
- /** @typedef {import("./HarmonyImportGuard").DependencyGuard} DependencyGuard */
49
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
50
-
51
- const getHarmonyImportGuard = memoize(() => require("./HarmonyImportGuard"));
57
+ /** @import { ImportPhaseType } from "./ImportPhase" */
58
+ /** @import { DependencyGuard } from "./HarmonyImportGuard" */
59
+ /**
60
+ * @import {
61
+ * JavascriptModuleBuildMeta
62
+ * } from "../javascript/JavascriptModule"
63
+ */
52
64
 
53
65
  const idsSymbol = /** @type {symbol} */ (
54
66
  Symbol("HarmonyImportSpecifierDependency.ids")
@@ -56,7 +68,22 @@ const idsSymbol = /** @type {symbol} */ (
56
68
 
57
69
  const { ExportPresenceModes } = HarmonyImportDependency;
58
70
 
71
+ /**
72
+ * One condition closure per module graph and variant rather than per dependency.
73
+ * The dependency the condition was built for is always the one on the connection
74
+ * it is called with, since `ModuleGraph#setResolvedModule` is the only caller of
75
+ * `getCondition` and pairs the two. Indexed by
76
+ * `(usedByExports ? 1 : 0) | (inlineEnabled ? 2 : 0)`.
77
+ * @type {WeakMap<ModuleGraph, (GetConditionFn | undefined)[]>}
78
+ */
79
+ const conditionsByModuleGraph = new WeakMap();
80
+
59
81
  class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
82
+ // read by `HarmonyImportGuard` in place of `instanceof`, which would cycle
83
+ get isHarmonyImportSpecifier() {
84
+ return true;
85
+ }
86
+
60
87
  /**
61
88
  * Creates an instance of HarmonyImportSpecifierDependency.
62
89
  * @param {string} request request
@@ -180,36 +207,59 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
180
207
  moduleGraph
181
208
  );
182
209
  if (usedByExportsCondition === false) return false;
210
+ const inlineEnabled = isInlineExportsEnabled(moduleGraph);
183
211
  // Keep the connection unconditional (fast path) when nothing can deactivate it
184
212
  if (
185
213
  usedByExportsCondition === null &&
186
214
  this.branchGuards === undefined &&
187
- !isInlineExportsEnabled(moduleGraph)
215
+ !inlineEnabled
188
216
  ) {
189
217
  return null;
190
218
  }
191
- const dep = this;
192
- return (connection, runtime) => {
219
+ // Everything the condition still needs is either per module graph or on
220
+ // the connection it is called with, so one closure per variant serves the
221
+ // whole graph instead of one per dependency.
222
+ const slot =
223
+ (usedByExportsCondition === null ? 0 : 1) | (inlineEnabled ? 2 : 0);
224
+ let variants = conditionsByModuleGraph.get(moduleGraph);
225
+ if (variants === undefined) {
226
+ variants = [undefined, undefined, undefined, undefined];
227
+ conditionsByModuleGraph.set(moduleGraph, variants);
228
+ }
229
+ const cached = variants[slot];
230
+ if (cached !== undefined) return cached;
231
+ /** @type {GetConditionFn} */
232
+ const condition = (connection, runtime) => {
233
+ const dep = /** @type {HarmonyImportSpecifierDependency} */ (
234
+ connection.dependency
235
+ );
193
236
  if (usedByExportsCondition !== null) {
194
237
  const result = usedByExportsCondition(connection, runtime);
195
238
  if (result === false) return false;
196
239
  }
197
- const ids = dep.getIds(moduleGraph);
198
- if (
199
- ids.length > 0 &&
200
- isExportInlined(moduleGraph, connection.module, ids, runtime)
201
- ) {
202
- return false;
240
+ // `isInlineEnabled` is the cheap module-level precondition of
241
+ // `isExportInlined`; checking it here keeps the id lookup off the hot
242
+ // path for the common target module that has no inlined exports
243
+ if (inlineEnabled && isInlineEnabled(connection.module)) {
244
+ const ids = dep.getIds(moduleGraph);
245
+ if (
246
+ ids.length > 0 &&
247
+ isExportInlined(moduleGraph, connection.module, ids, runtime)
248
+ ) {
249
+ return false;
250
+ }
203
251
  }
204
252
  const guards = dep.branchGuards;
205
253
  if (
206
254
  guards !== undefined &&
207
- getHarmonyImportGuard().isDeadByGuards(guards, moduleGraph, runtime)
255
+ HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
208
256
  ) {
209
257
  return false;
210
258
  }
211
259
  return true;
212
260
  };
261
+ variants[slot] = condition;
262
+ return condition;
213
263
  }
214
264
 
215
265
  /**
@@ -286,21 +336,19 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
286
336
  */
287
337
  _getReferencedExportsInDestructuring(ids) {
288
338
  if (this.referencedPropertiesInDestructuring) {
289
- /** @type {RawReferencedExports} */
290
- const refsInDestructuring = [];
339
+ /** @type {ReferencedExports} */
340
+ const refs = [];
291
341
  traverseDestructuringAssignmentProperties(
292
342
  this.referencedPropertiesInDestructuring,
293
- (stack) => refsInDestructuring.push(stack.map((p) => p.id))
343
+ (stack) => {
344
+ const idsInDestructuring = stack.map((p) => p.id);
345
+ // Destructuring consumer can't accept an inlined literal
346
+ refs.push({
347
+ name: ids ? [...ids, ...idsInDestructuring] : idsInDestructuring,
348
+ canInline: false
349
+ });
350
+ }
294
351
  );
295
- /** @type {ReferencedExports} */
296
- const refs = [];
297
- for (const idsInDestructuring of refsInDestructuring) {
298
- // Destructuring consumer can't accept an inlined literal
299
- refs.push({
300
- name: ids ? [...ids, ...idsInDestructuring] : idsInDestructuring,
301
- canInline: false
302
- });
303
- }
304
352
  return refs;
305
353
  }
306
354
  return ids
@@ -475,7 +523,8 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
475
523
  dep,
476
524
  source,
477
525
  templateContext,
478
- trimmedIds
526
+ trimmedIds,
527
+ connection
479
528
  );
480
529
  if (dep.shorthand) {
481
530
  source.insert(trimmedRangeEnd, `: ${exportExpr}`);
@@ -521,13 +570,14 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
521
570
  });
522
571
  }
523
572
  );
573
+ // loop-invariant: resolve the imported module's exports info once
574
+ const destructuredExportsInfo = moduleGraph.getExportsInfo(
575
+ /** @type {Module} */ (moduleGraph.getModule(dep))
576
+ );
524
577
  for (const { ids, shorthand, range } of replacementsInDestructuring) {
525
578
  /** @type {Ids} */
526
579
  const concatedIds = [...prefixedIds, ...ids];
527
- const module = /** @type {Module} */ (moduleGraph.getModule(dep));
528
- const used = moduleGraph
529
- .getExportsInfo(module)
530
- .getUsedName(concatedIds, runtime);
580
+ const used = destructuredExportsInfo.getUsedName(concatedIds, runtime);
531
581
  if (!used) {
532
582
  return;
533
583
  } else if (used instanceof InlinedUsedName) {
@@ -559,12 +609,12 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
559
609
  * @param {ReplaceSource} source source
560
610
  * @param {DependencyTemplateContext} templateContext context
561
611
  * @param {Ids} ids ids
612
+ * @param {ModuleGraphConnection | undefined} connection the resolved connection for dep
562
613
  * @returns {string} generated code
563
614
  */
564
- _getCodeForIds(dep, source, templateContext, ids) {
615
+ _getCodeForIds(dep, source, templateContext, ids, connection) {
565
616
  const { moduleGraph, module, runtime, concatenationScope } =
566
617
  templateContext;
567
- const connection = moduleGraph.getConnection(dep);
568
618
  /** @type {string} */
569
619
  let exportExpr;
570
620
 
@@ -640,5 +690,6 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
640
690
  }
641
691
  };
642
692
 
693
+ HarmonyImportSpecifierDependency.idsSymbol = idsSymbol;
694
+
643
695
  module.exports = HarmonyImportSpecifierDependency;
644
- module.exports.idsSymbol = idsSymbol;
@@ -27,9 +27,13 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
27
27
  const HarmonyTopLevelThisParserPlugin = require("./HarmonyTopLevelThisParserPlugin");
28
28
  const TopLevelAwaitDependency = require("./TopLevelAwaitDependency");
29
29
 
30
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
31
- /** @typedef {import("../Compiler")} Compiler */
32
- /** @typedef {import("../javascript/JavascriptParser")} Parser */
30
+ /**
31
+ * @import {
32
+ * JavascriptParserOptions
33
+ * } from "../../declarations/WebpackOptions"
34
+ */
35
+ /** @import Compiler from "../Compiler" */
36
+ /** @import Parser from "../javascript/JavascriptParser" */
33
37
 
34
38
  /**
35
39
  * Defines the harmony modules plugin options type used by this module.
@@ -8,9 +8,7 @@
8
8
  const ConstDependency = require("./ConstDependency");
9
9
  const HarmonyExports = require("./HarmonyExports");
10
10
 
11
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
12
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
13
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
11
+ /** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
14
12
 
15
13
  const PLUGIN_NAME = "HarmonyTopLevelThisParserPlugin";
16
14