@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -0,0 +1,164 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const InitFragment = require("../InitFragment");
9
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
+
11
+ /** @typedef {import("webpack-sources").Source} Source */
12
+ /** @typedef {import("../Generator").GenerateContext} GenerateContext */
13
+ /** @typedef {import("../ExportsInfo").UsedName} UsedName */
14
+
15
+ /**
16
+ * @typedef {object} ExportBinding
17
+ * @property {UsedName} name the used export name
18
+ * @property {string} value the variable expression
19
+ * @property {"getter" | "value"=} bindingType "value" for value binding, defaults to "getter"
20
+ */
21
+
22
+ /**
23
+ * Init fragment for const export bindings.
24
+ * Generates a flat-array __webpack_require__.d() call.
25
+ * Getter bindings: "key", () => expr (2 items).
26
+ * Value bindings: "key", 0, expr (3 items, 0 is sentinel).
27
+ *
28
+ * Uses a separate key ("harmony-export-bindings") from HarmonyExportInitFragment
29
+ * so the two fragment types do not merge and cannot interfere with each
30
+ * other's placement (top vs bottom).
31
+ * @extends {InitFragment<GenerateContext>} Context
32
+ */
33
+ class ExportBindingInitFragment extends InitFragment {
34
+ /**
35
+ * @param {string} exportsArgument the exports identifier
36
+ * @param {ExportBinding[]} bindings list of export bindings
37
+ * @param {boolean=} placeAtEnd when true, place the d() call at the end of the module
38
+ */
39
+ constructor(exportsArgument, bindings, placeAtEnd = false) {
40
+ super(
41
+ undefined,
42
+ InitFragment.STAGE_HARMONY_EXPORTS,
43
+ 1,
44
+ "harmony-export-bindings"
45
+ );
46
+ /** @type {string} */
47
+ this.exportsArgument = exportsArgument;
48
+ /** @type {ExportBinding[]} */
49
+ this.bindings = bindings;
50
+ /** @type {boolean} */
51
+ this.placeAtEnd = placeAtEnd;
52
+ }
53
+
54
+ /**
55
+ * @param {ExportBindingInitFragment[]} fragments all fragments to merge
56
+ * @returns {ExportBindingInitFragment} merged fragment
57
+ */
58
+ mergeAll(fragments) {
59
+ /** @type {ExportBinding[]} */
60
+ const bindings = [];
61
+ /** @type {Set<string>} */
62
+ const seenNames = new Set();
63
+ let placeAtEnd = false;
64
+
65
+ for (const fragment of fragments) {
66
+ for (const binding of fragment.bindings) {
67
+ const key = /** @type {string} */ (binding.name);
68
+ if (!seenNames.has(key)) {
69
+ seenNames.add(key);
70
+ bindings.push(binding);
71
+ }
72
+ }
73
+ if (fragment.placeAtEnd) placeAtEnd = true;
74
+ }
75
+ return new ExportBindingInitFragment(
76
+ this.exportsArgument,
77
+ bindings,
78
+ placeAtEnd
79
+ );
80
+ }
81
+
82
+ /**
83
+ * @param {ExportBindingInitFragment} other other
84
+ * @returns {ExportBindingInitFragment} merged result
85
+ */
86
+ merge(other) {
87
+ /** @type {ExportBinding[]} */
88
+ const bindings = [];
89
+ /** @type {Set<string>} */
90
+ const seenNames = new Set();
91
+ for (const binding of other.bindings) {
92
+ const key = /** @type {string} */ (binding.name);
93
+ seenNames.add(key);
94
+ bindings.push(binding);
95
+ }
96
+ for (const binding of this.bindings) {
97
+ const key = /** @type {string} */ (binding.name);
98
+ if (!seenNames.has(key)) {
99
+ seenNames.add(key);
100
+ bindings.push(binding);
101
+ }
102
+ }
103
+ return new ExportBindingInitFragment(
104
+ this.exportsArgument,
105
+ bindings,
106
+ this.placeAtEnd || other.placeAtEnd
107
+ );
108
+ }
109
+
110
+ /**
111
+ * @param {GenerateContext} context context
112
+ * @returns {string} the d() call or empty string
113
+ */
114
+ _generateDefinition({ runtimeTemplate, runtimeRequirements }) {
115
+ if (this.bindings.length === 0) return "";
116
+
117
+ const sorted = [...this.bindings].sort((a, b) =>
118
+ /** @type {string} */ (a.name) < /** @type {string} */ (b.name) ? -1 : 1
119
+ );
120
+
121
+ /** @type {string[]} */
122
+ const items = [];
123
+ for (const binding of sorted) {
124
+ const key = JSON.stringify(/** @type {string} */ (binding.name));
125
+ if (binding.bindingType === "value") {
126
+ items.push(`\n/* harmony export */ ${key}, 0, ${binding.value}`);
127
+ } else {
128
+ items.push(
129
+ `\n/* harmony export */ ${key}, ${runtimeTemplate.returningFunction(binding.value)}`
130
+ );
131
+ }
132
+ }
133
+
134
+ runtimeRequirements.add(RuntimeGlobals.exports);
135
+ runtimeRequirements.add(RuntimeGlobals.definePropertyGetters);
136
+ return `/* harmony export */ ${RuntimeGlobals.definePropertyGetters}(${
137
+ this.exportsArgument
138
+ }, [${items.join(",")}\n/* harmony export */ ]);\n`;
139
+ }
140
+
141
+ /**
142
+ * Returns the source code that will be included as initialization code.
143
+ * @param {GenerateContext} context context
144
+ * @returns {string | Source | undefined} the source code that will be included as initialization code
145
+ */
146
+ getContent(context) {
147
+ if (this.placeAtEnd) return undefined;
148
+ return this._generateDefinition(context);
149
+ }
150
+
151
+ /**
152
+ * Returns the source code that will be included at the end of the module.
153
+ * @param {GenerateContext} context context
154
+ * @returns {string | Source | undefined} the source code that will be included at the end of the module
155
+ */
156
+ getEndContent(context) {
157
+ if (!this.placeAtEnd) return undefined;
158
+ const definePart = this._generateDefinition(context);
159
+ if (!definePart) return undefined;
160
+ return `\n${definePart}`;
161
+ }
162
+ }
163
+
164
+ module.exports = ExportBindingInitFragment;
@@ -16,16 +16,18 @@ const NullDependency = require("./NullDependency");
16
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
17
  /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
18
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
20
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
19
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, ExportInfoName[] | null, string | null]>} ObjectDeserializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, ExportInfoName[] | null, string | null]>} ObjectSerializerContext */
22
22
 
23
23
  /**
24
+ * Defines the sortable set type used by this module.
24
25
  * @template T
25
26
  * @typedef {import("../util/SortableSet")<T>} SortableSet
26
27
  */
27
28
 
28
29
  /**
30
+ * Returns value of the property.
29
31
  * @param {ModuleGraph} moduleGraph the module graph
30
32
  * @param {Module} module the module
31
33
  * @param {ExportInfoName[] | null} exportName_ name of the export if any
@@ -89,6 +91,7 @@ const getProperty = (moduleGraph, module, exportName_, property, runtime) => {
89
91
 
90
92
  class ExportsInfoDependency extends NullDependency {
91
93
  /**
94
+ * Creates an instance of ExportsInfoDependency.
92
95
  * @param {Range} range range
93
96
  * @param {ExportInfoName[] | null} exportName export name
94
97
  * @param {string | null} property property
@@ -96,32 +99,34 @@ class ExportsInfoDependency extends NullDependency {
96
99
  constructor(range, exportName, property) {
97
100
  super();
98
101
  this.range = range;
102
+ /** @type {string[] | null} */
99
103
  this.exportName = exportName;
104
+ /** @type {string | null} */
100
105
  this.property = property;
101
106
  }
102
107
 
103
108
  /**
109
+ * Serializes this instance into the provided serializer context.
104
110
  * @param {ObjectSerializerContext} context context
105
111
  */
106
112
  serialize(context) {
107
- const { write } = context;
108
- write(this.range);
109
- write(this.exportName);
110
- write(this.property);
113
+ context.write(this.range).write(this.exportName).write(this.property);
111
114
  super.serialize(context);
112
115
  }
113
116
 
114
117
  /**
118
+ * Restores this instance from the provided deserializer context.
115
119
  * @param {ObjectDeserializerContext} context context
116
120
  * @returns {ExportsInfoDependency} ExportsInfoDependency
117
121
  */
118
122
  static deserialize(context) {
119
- const obj = new ExportsInfoDependency(
120
- context.read(),
121
- context.read(),
122
- context.read()
123
- );
124
- obj.deserialize(context);
123
+ const range = context.read();
124
+ const c1 = context.rest;
125
+ const exportName = c1.read();
126
+ const c2 = c1.rest;
127
+ const property = c2.read();
128
+ const obj = new ExportsInfoDependency(range, exportName, property);
129
+ obj.deserialize(c2.rest);
125
130
  return obj;
126
131
  }
127
132
  }
@@ -135,6 +140,7 @@ ExportsInfoDependency.Template = class ExportsInfoDependencyTemplate extends (
135
140
  NullDependency.Template
136
141
  ) {
137
142
  /**
143
+ * Applies the plugin by registering its hooks on the compiler.
138
144
  * @param {Dependency} dependency the dependency for which the template should be applied
139
145
  * @param {ReplaceSource} source the current replace source which can be modified
140
146
  * @param {DependencyTemplateContext} templateContext the context object
@@ -14,11 +14,12 @@ const ExternalModuleInitFragment = require("./ExternalModuleInitFragment");
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
15
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
16
16
  /** @typedef {import("../dependencies/ExternalModuleInitFragment").ArrayImportSpecifiers} ArrayImportSpecifiers */
17
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<(string | ArrayImportSpecifiers | undefined)[]>} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<(string | ArrayImportSpecifiers | undefined)[]>} ObjectSerializerContext */
19
19
 
20
20
  class ExternalModuleDependency extends CachedConstDependency {
21
21
  /**
22
+ * Creates an instance of ExternalModuleDependency.
22
23
  * @param {string} module module
23
24
  * @param {ArrayImportSpecifiers} importSpecifiers import specifiers
24
25
  * @param {string | undefined} defaultImport default import
@@ -38,12 +39,16 @@ class ExternalModuleDependency extends CachedConstDependency {
38
39
  ) {
39
40
  super(expression, range, identifier, place);
40
41
 
42
+ /** @type {string} */
41
43
  this.importedModule = module;
44
+ /** @type {ArrayImportSpecifiers} */
42
45
  this.specifiers = importSpecifiers;
46
+ /** @type {string | undefined} */
43
47
  this.default = defaultImport;
44
48
  }
45
49
 
46
50
  /**
51
+ * Create hash update.
47
52
  * @returns {string} hash update
48
53
  */
49
54
  _createHashUpdate() {
@@ -53,6 +58,7 @@ class ExternalModuleDependency extends CachedConstDependency {
53
58
  }
54
59
 
55
60
  /**
61
+ * Serializes this instance into the provided serializer context.
56
62
  * @param {ObjectSerializerContext} context context
57
63
  */
58
64
  serialize(context) {
@@ -64,14 +70,15 @@ class ExternalModuleDependency extends CachedConstDependency {
64
70
  }
65
71
 
66
72
  /**
73
+ * Restores this instance from the provided deserializer context.
67
74
  * @param {ObjectDeserializerContext} context context
68
75
  */
69
76
  deserialize(context) {
70
77
  super.deserialize(context);
71
78
  const { read } = context;
72
- this.importedModule = read();
73
- this.specifiers = read();
74
- this.default = read();
79
+ this.importedModule = /** @type {string} */ (read());
80
+ this.specifiers = /** @type {ArrayImportSpecifiers} */ (read());
81
+ this.default = /** @type {string | undefined} */ (read());
75
82
  }
76
83
  }
77
84
 
@@ -84,6 +91,7 @@ ExternalModuleDependency.Template = class ExternalModuleDependencyTemplate exten
84
91
  CachedConstDependency.Template
85
92
  ) {
86
93
  /**
94
+ * Applies the plugin by registering its hooks on the compiler.
87
95
  * @param {Dependency} dependency the dependency for which the template should be applied
88
96
  * @param {ReplaceSource} source the current replace source which can be modified
89
97
  * @param {DependencyTemplateContext} templateContext the context object
@@ -10,11 +10,11 @@ const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  /** @typedef {import("webpack-sources").Source} Source */
12
12
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
13
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
13
  /** @typedef {{ name: string, value?: string }[]} ArrayImportSpecifiers */
16
14
  /** @typedef {Set<string>} ImportSpecifier */
17
15
  /** @typedef {Map<string, ImportSpecifier>} ImportSpecifiers */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<(string | ArrayImportSpecifiers | ImportSpecifiers | undefined)[]>} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<(string | ArrayImportSpecifiers | ImportSpecifiers | undefined)[]>} ObjectSerializerContext */
18
18
 
19
19
  /**
20
20
  * @extends {InitFragment<GenerateContext>}
@@ -32,6 +32,7 @@ class ExternalModuleInitFragment extends InitFragment {
32
32
  0,
33
33
  `external module imports|${importedModule}|${defaultImport || "null"}`
34
34
  );
35
+ /** @type {string} */
35
36
  this.importedModule = importedModule;
36
37
  if (Array.isArray(specifiers)) {
37
38
  /** @type {ImportSpecifiers} */
@@ -48,6 +49,7 @@ class ExternalModuleInitFragment extends InitFragment {
48
49
  } else {
49
50
  this.specifiers = specifiers;
50
51
  }
52
+ /** @type {string | undefined} */
51
53
  this.defaultImport = defaultImport;
52
54
  }
53
55
 
@@ -75,6 +77,7 @@ class ExternalModuleInitFragment extends InitFragment {
75
77
  }
76
78
 
77
79
  /**
80
+ * Returns the source code that will be included as initialization code.
78
81
  * @param {GenerateContext} context context
79
82
  * @returns {string | Source | undefined} the source code that will be included as initialization code
80
83
  */
@@ -107,6 +110,7 @@ class ExternalModuleInitFragment extends InitFragment {
107
110
  }
108
111
 
109
112
  /**
113
+ * Serializes this instance into the provided serializer context.
110
114
  * @param {ObjectSerializerContext} context context
111
115
  */
112
116
  serialize(context) {
@@ -118,14 +122,15 @@ class ExternalModuleInitFragment extends InitFragment {
118
122
  }
119
123
 
120
124
  /**
125
+ * Restores this instance from the provided deserializer context.
121
126
  * @param {ObjectDeserializerContext} context context
122
127
  */
123
128
  deserialize(context) {
124
129
  super.deserialize(context);
125
130
  const { read } = context;
126
- this.importedModule = read();
127
- this.specifiers = read();
128
- this.defaultImport = read();
131
+ this.importedModule = /** @type {string} */ (read());
132
+ this.specifiers = /** @type {ImportSpecifiers} */ (read());
133
+ this.defaultImport = /** @type {string | undefined} */ (read());
129
134
  }
130
135
  }
131
136
 
@@ -15,52 +15,59 @@ const NullDependency = require("./NullDependency");
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
16
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
17
  /** @typedef {import("../dependencies/ExternalModuleInitFragment").ArrayImportSpecifiers} ArrayImportSpecifiers */
18
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, ArrayImportSpecifiers, string | undefined]>} ObjectDeserializerContext */
19
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, ArrayImportSpecifiers, string | undefined]>} ObjectSerializerContext */
20
20
 
21
21
  class ExternalModuleInitFragmentDependency extends NullDependency {
22
22
  /**
23
+ * Creates an instance of ExternalModuleInitFragmentDependency.
23
24
  * @param {string} module module
24
25
  * @param {ArrayImportSpecifiers} importSpecifiers import specifiers
25
26
  * @param {string | undefined} defaultImport default import
26
27
  */
27
28
  constructor(module, importSpecifiers, defaultImport) {
28
29
  super();
30
+ /** @type {string} */
29
31
  this.importedModule = module;
32
+ /** @type {ArrayImportSpecifiers} */
30
33
  this.specifiers = importSpecifiers;
34
+ /** @type {string | undefined} */
31
35
  this.default = defaultImport;
32
36
  }
33
37
 
34
38
  /**
39
+ * Serializes this instance into the provided serializer context.
35
40
  * @param {ObjectSerializerContext} context context
36
41
  */
37
42
  serialize(context) {
38
- const { write } = context;
39
- write(this.importedModule);
40
- write(this.specifiers);
41
- write(this.default);
43
+ context
44
+ .write(this.importedModule)
45
+ .write(this.specifiers)
46
+ .write(this.default);
42
47
  }
43
48
 
44
49
  /**
50
+ * Restores this instance from the provided deserializer context.
45
51
  * @param {ObjectDeserializerContext} context context
46
52
  */
47
53
  deserialize(context) {
48
- const { read } = context;
49
- this.importedModule = read();
50
- this.specifiers = read();
51
- this.default = read();
54
+ this.importedModule = context.read();
55
+ const c1 = context.rest;
56
+ this.specifiers = c1.read();
57
+ this.default = c1.rest.read();
52
58
  }
53
59
  }
54
60
 
55
61
  makeSerializable(
56
62
  ExternalModuleInitFragmentDependency,
57
- "webpack/lib/dependencies/ExternalModuleConstDependency"
63
+ "webpack/lib/dependencies/ExternalModuleInitFragmentDependency"
58
64
  );
59
65
 
60
- ExternalModuleInitFragmentDependency.Template = class ExternalModuleConstDependencyTemplate extends (
66
+ ExternalModuleInitFragmentDependency.Template = class ExternalModuleInitFragmentDependencyTemplate extends (
61
67
  DependencyTemplate
62
68
  ) {
63
69
  /**
70
+ * Applies the plugin by registering its hooks on the compiler.
64
71
  * @param {Dependency} dependency the dependency for which the template should be applied
65
72
  * @param {ReplaceSource} source the current replace source which can be modified
66
73
  * @param {DependencyTemplateContext} templateContext the context object
@@ -16,14 +16,13 @@ const NullDependency = require("./NullDependency");
16
16
  /** @typedef {import("../Dependency")} Dependency */
17
17
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
20
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
19
  /** @typedef {import("./HarmonyAcceptImportDependency")} HarmonyAcceptImportDependency */
22
- /** @typedef {import("../Module")} Module */
23
- /** @typedef {import("../Module").ModuleId} ModuleId */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, HarmonyAcceptImportDependency[], boolean]>} ObjectDeserializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, HarmonyAcceptImportDependency[], boolean]>} ObjectSerializerContext */
24
22
 
25
23
  class HarmonyAcceptDependency extends NullDependency {
26
24
  /**
25
+ * Creates an instance of HarmonyAcceptDependency.
27
26
  * @param {Range} range expression range
28
27
  * @param {HarmonyAcceptImportDependency[]} dependencies import dependencies
29
28
  * @param {boolean} hasCallback true, if the range wraps an existing callback
@@ -31,7 +30,9 @@ class HarmonyAcceptDependency extends NullDependency {
31
30
  constructor(range, dependencies, hasCallback) {
32
31
  super();
33
32
  this.range = range;
33
+ /** @type {HarmonyAcceptImportDependency[]} */
34
34
  this.dependencies = dependencies;
35
+ /** @type {boolean} */
35
36
  this.hasCallback = hasCallback;
36
37
  }
37
38
 
@@ -40,25 +41,25 @@ class HarmonyAcceptDependency extends NullDependency {
40
41
  }
41
42
 
42
43
  /**
44
+ * Serializes this instance into the provided serializer context.
43
45
  * @param {ObjectSerializerContext} context context
44
46
  */
45
47
  serialize(context) {
46
- const { write } = context;
47
- write(this.range);
48
- write(this.dependencies);
49
- write(this.hasCallback);
48
+ context.write(this.range).write(this.dependencies).write(this.hasCallback);
50
49
  super.serialize(context);
51
50
  }
52
51
 
53
52
  /**
53
+ * Restores this instance from the provided deserializer context.
54
54
  * @param {ObjectDeserializerContext} context context
55
55
  */
56
56
  deserialize(context) {
57
- const { read } = context;
58
- this.range = read();
59
- this.dependencies = read();
60
- this.hasCallback = read();
61
- super.deserialize(context);
57
+ this.range = context.read();
58
+ const c1 = context.rest;
59
+ this.dependencies = c1.read();
60
+ const c2 = c1.rest;
61
+ this.hasCallback = c2.read();
62
+ super.deserialize(c2.rest);
62
63
  }
63
64
  }
64
65
 
@@ -71,6 +72,7 @@ HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate extends
71
72
  NullDependency.Template
72
73
  ) {
73
74
  /**
75
+ * Applies the plugin by registering its hooks on the compiler.
74
76
  * @param {Dependency} dependency the dependency for which the template should be applied
75
77
  * @param {ReplaceSource} source the current replace source which can be modified
76
78
  * @param {DependencyTemplateContext} templateContext the context object
@@ -88,23 +90,19 @@ HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate extends
88
90
  } = templateContext;
89
91
 
90
92
  /**
91
- * @param {Dependency} dependency the dependency to get module id for
92
- * @returns {ModuleId | null} the module id or null if not found
93
- */
94
- const getDependencyModuleId = (dependency) =>
95
- chunkGraph.getModuleId(
96
- /** @type {Module} */ (moduleGraph.getModule(dependency))
97
- );
98
-
99
- /**
93
+ * Checks whether this harmony accept dependency is related harmony import dependency.
100
94
  * @param {Dependency} a the first dependency
101
95
  * @param {Dependency} b the second dependency
102
96
  * @returns {boolean} true if the dependencies are related
103
97
  */
104
- const isRelatedHarmonyImportDependency = (a, b) =>
105
- a !== b &&
106
- b instanceof HarmonyImportDependency &&
107
- getDependencyModuleId(a) === getDependencyModuleId(b);
98
+ const isRelatedHarmonyImportDependency = (a, b) => {
99
+ if (a === b || !(b instanceof HarmonyImportDependency)) return false;
100
+ // Compare modules by reference: an unresolved import (ignored/failed, or a
101
+ // deferred lazy-barrel re-export) has no module, and a module not in any
102
+ // chunk has a null id — so comparing ids would crash or miss real matches.
103
+ const moduleA = moduleGraph.getModule(a);
104
+ return moduleA !== null && moduleA === moduleGraph.getModule(b);
105
+ };
108
106
 
109
107
  /**
110
108
  * HarmonyAcceptImportDependency lacks a lot of information, such as the defer property.
@@ -12,10 +12,12 @@ const NullDependency = require("./NullDependency");
12
12
 
13
13
  class HarmonyAcceptImportDependency extends HarmonyImportDependency {
14
14
  /**
15
+ * Creates an instance of HarmonyAcceptImportDependency.
15
16
  * @param {string} request the request string
16
17
  */
17
18
  constructor(request) {
18
19
  super(request, Infinity, ImportPhase.Evaluation);
20
+ /** @type {boolean} */
19
21
  this.weak = true;
20
22
  }
21
23
 
@@ -8,6 +8,7 @@
8
8
  const { UsageState } = require("../ExportsInfo");
9
9
  const InitFragment = require("../InitFragment");
10
10
  const RuntimeGlobals = require("../RuntimeGlobals");
11
+ const isGeneratorLowered = require("../async-modules/isGeneratorLowered");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
  const NullDependency = require("./NullDependency");
13
14
 
@@ -31,6 +32,7 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
31
32
  NullDependency.Template
32
33
  ) {
33
34
  /**
35
+ * Applies the plugin by registering its hooks on the compiler.
34
36
  * @param {Dependency} dependency the dependency for which the template should be applied
35
37
  * @param {ReplaceSource} source the current replace source which can be modified
36
38
  * @param {DependencyTemplateContext} templateContext the context object
@@ -70,20 +72,37 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
70
72
  }
71
73
  if (moduleGraph.isAsync(module)) {
72
74
  runtimeRequirements.add(RuntimeGlobals.module);
73
- runtimeRequirements.add(RuntimeGlobals.asyncModule);
74
- initFragments.push(
75
- new InitFragment(
76
- runtimeTemplate.supportsArrowFunction()
77
- ? `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n`
78
- : `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {\n`,
79
- InitFragment.STAGE_ASYNC_BOUNDARY,
80
- 0,
81
- undefined,
82
- `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
83
- /** @type {BuildMeta} */ (module.buildMeta).async ? ", 1" : ""
84
- });`
85
- )
86
- );
75
+ const hasAwait = /** @type {BuildMeta} */ (module.buildMeta).async
76
+ ? ", 1"
77
+ : "";
78
+ // Target has no `async`/`await` but has generators: drive the body as a
79
+ // generator so `await` becomes `yield`, keeping the module in a single
80
+ // scope (unlike a `.then` callback) without transpiling to a state machine.
81
+ if (isGeneratorLowered(module, moduleGraph, runtimeTemplate)) {
82
+ runtimeRequirements.add(RuntimeGlobals.asyncModuleGenerator);
83
+ initFragments.push(
84
+ new InitFragment(
85
+ `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, ${RuntimeGlobals.asyncModuleGenerator}(function* (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {\n`,
86
+ InitFragment.STAGE_ASYNC_BOUNDARY,
87
+ 0,
88
+ undefined,
89
+ `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } })${hasAwait});`
90
+ )
91
+ );
92
+ } else {
93
+ runtimeRequirements.add(RuntimeGlobals.asyncModule);
94
+ initFragments.push(
95
+ new InitFragment(
96
+ runtimeTemplate.supportsArrowFunction()
97
+ ? `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n`
98
+ : `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {\n`,
99
+ InitFragment.STAGE_ASYNC_BOUNDARY,
100
+ 0,
101
+ undefined,
102
+ `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${hasAwait});`
103
+ )
104
+ );
105
+ }
87
106
  }
88
107
  }
89
108
  };