webpack 5.111.1 → 5.112.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/README.md +1 -1
  2. package/bin/webpack.js +13 -7
  3. package/lib/Chunk.js +3 -966
  4. package/lib/Compilation.js +373 -163
  5. package/lib/Compiler.js +31 -44
  6. package/lib/Dependency.js +3 -551
  7. package/lib/DependencyTemplate.js +3 -70
  8. package/lib/EntryPlugin.js +3 -68
  9. package/lib/Entrypoint.js +3 -121
  10. package/lib/ExternalsPlugin.js +3 -92
  11. package/lib/FileSystemInfo.js +3 -4629
  12. package/lib/InitFragment.js +3 -204
  13. package/lib/LibraryTemplatePlugin.js +3 -46
  14. package/lib/ModuleFilenameHelpers.js +3 -400
  15. package/lib/ModuleNotFoundError.js +2 -2
  16. package/lib/MultiCompiler.js +37 -8
  17. package/lib/NormalModule.js +3 -2242
  18. package/lib/NullFactory.js +3 -22
  19. package/lib/ProgressPlugin.js +3 -908
  20. package/lib/RawModule.js +3 -197
  21. package/lib/RequestShortener.js +3 -37
  22. package/lib/SingleEntryPlugin.js +1 -1
  23. package/lib/WebpackError.js +2 -2
  24. package/lib/asset/AssetBytesGenerator.js +21 -13
  25. package/lib/asset/AssetBytesParser.js +12 -10
  26. package/lib/asset/AssetGenerator.js +71 -69
  27. package/lib/asset/AssetModule.js +13 -2
  28. package/lib/asset/AssetModulesPlugin.js +10 -12
  29. package/lib/asset/AssetParser.js +10 -10
  30. package/lib/asset/AssetSourceGenerator.js +23 -15
  31. package/lib/asset/AssetSourceParser.js +12 -10
  32. package/lib/asset/RawDataUrlModule.js +17 -10
  33. package/lib/asset/WebManifestGenerator.js +17 -12
  34. package/lib/asset/WebManifestParser.js +8 -8
  35. package/lib/async-modules/AsyncModuleHelpers.js +12 -5
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  37. package/lib/async-modules/InferAsyncModulesPlugin.js +9 -3
  38. package/lib/async-modules/isGeneratorLowered.js +3 -3
  39. package/lib/bun/BunTargetPlugin.js +1 -1
  40. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  41. package/lib/{Cache.js → cache/Cache.js} +1 -1
  42. package/lib/{CacheFacade.js → cache/CacheFacade.js} +6 -6
  43. package/lib/cache/IdleFileCachePlugin.js +2 -2
  44. package/lib/cache/MemoryCachePlugin.js +2 -2
  45. package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
  46. package/lib/cache/PackFileCacheStrategy.js +13 -19
  47. package/lib/cache/ResolverCachePlugin.js +65 -11
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +209 -212
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +1 -1
  54. package/lib/{cli.js → config/cli.js} +14 -164
  55. package/lib/config/defaults.js +166 -59
  56. package/lib/config/getClaimedAssetTypes.js +22 -14
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +11 -1
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/context/ContextModule.js +37 -26
  76. package/lib/context/ContextModuleFactory.js +14 -11
  77. package/lib/context/ContextReplacementPlugin.js +6 -12
  78. package/lib/css/CssGenerator.js +78 -68
  79. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  80. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  81. package/lib/css/CssModule.js +37 -29
  82. package/lib/css/CssModulesPlugin.js +129 -45
  83. package/lib/css/CssParser.js +714 -322
  84. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  85. package/lib/{util → css}/conventions.js +1 -1
  86. package/lib/css/cssMinify.js +110 -37
  87. package/lib/css/data.js +6990 -5125
  88. package/lib/css/syntax-parser.js +20734 -0
  89. package/lib/css/syntax-printer.js +6092 -0
  90. package/lib/css/syntax.js +37 -18686
  91. package/lib/debug/ProfilingPlugin.js +106 -51
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -11
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +14 -11
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -36
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +9 -6
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +10 -11
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +7 -10
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +21 -17
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -99
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +25 -22
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +20 -20
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +146 -133
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
  188. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  189. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  190. package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
  191. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  192. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
  193. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
  194. package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
  195. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  196. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  197. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  200. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  201. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +52 -151
  202. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
  203. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
  204. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
  205. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  206. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  207. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  208. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  209. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +22 -25
  210. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  211. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  212. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  213. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  214. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  215. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +122 -103
  216. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  217. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  218. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  219. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  220. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
  221. package/lib/{url → dependencies/url}/URLParserPlugin.js +17 -19
  222. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  223. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  224. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  225. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  226. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +82 -53
  227. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
  228. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
  229. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  230. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  231. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  232. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  233. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +155 -27
  234. package/lib/{util → devtool}/generateDebugId.js +1 -1
  235. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  236. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  237. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  238. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  239. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  240. package/lib/dll/DelegatedModule.js +23 -21
  241. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  242. package/lib/dll/DelegatedPlugin.js +1 -1
  243. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  244. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  245. package/lib/dll/DllEntryPlugin.js +3 -3
  246. package/lib/dll/DllModule.js +14 -10
  247. package/lib/dll/DllModuleFactory.js +3 -3
  248. package/lib/dll/DllPlugin.js +18 -6
  249. package/lib/dll/DllReferencePlugin.js +103 -30
  250. package/lib/dll/LibManifestPlugin.js +9 -7
  251. package/lib/electron/ElectronTargetPlugin.js +2 -2
  252. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  253. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  254. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  255. package/lib/entry/EntryPlugin.js +75 -0
  256. package/lib/errors/AbstractMethodError.js +1 -1
  257. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  258. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  259. package/lib/errors/BuildCycleError.js +1 -1
  260. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  261. package/lib/errors/ChunkRenderError.js +1 -1
  262. package/lib/errors/CodeGenerationError.js +1 -1
  263. package/lib/errors/CommentCompilationWarning.js +1 -1
  264. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  265. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  266. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  267. package/lib/errors/DllManifestError.js +26 -0
  268. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  269. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  270. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  271. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  272. package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +9 -6
  273. package/lib/errors/ExternalStarReexportError.js +2 -2
  274. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  275. package/lib/errors/HookWebpackError.js +6 -5
  276. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  277. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  278. package/lib/errors/JSONParseError.js +4 -4
  279. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  280. package/lib/errors/ModuleBuildError.js +1 -1
  281. package/lib/errors/ModuleDependencyError.js +2 -2
  282. package/lib/errors/ModuleDependencyWarning.js +2 -2
  283. package/lib/errors/ModuleError.js +1 -1
  284. package/lib/errors/ModuleHashingError.js +1 -1
  285. package/lib/errors/ModuleNotFoundError.js +3 -3
  286. package/lib/errors/ModuleParseError.js +1 -1
  287. package/lib/errors/ModuleRestoreError.js +1 -1
  288. package/lib/errors/ModuleStoreError.js +1 -1
  289. package/lib/errors/ModuleWarning.js +1 -1
  290. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  291. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  292. package/lib/errors/NodeStuffInWebError.js +7 -2
  293. package/lib/errors/PathVariableError.js +31 -0
  294. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  295. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  296. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  297. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  298. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  299. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  300. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  301. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  302. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  303. package/lib/errors/WebpackError.js +13 -3
  304. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  305. package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
  306. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  307. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  308. package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
  309. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
  310. package/lib/externals/ExternalsPlugin.js +99 -0
  311. package/lib/fs/FileSystemInfo.js +4642 -0
  312. package/lib/{util → fs}/fs.js +22 -9
  313. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  314. package/lib/graph/Chunk.js +985 -0
  315. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +192 -80
  316. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  317. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  318. package/lib/graph/Dependency.js +634 -0
  319. package/lib/graph/Entrypoint.js +136 -0
  320. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
  321. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  322. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
  323. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  324. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
  325. package/lib/{util → graph}/findGraphRoots.js +15 -9
  326. package/lib/graph/isDependencyKind.js +23 -0
  327. package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
  328. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
  329. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  330. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
  331. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  332. package/lib/hmr/LazyCompilationPlugin.js +32 -28
  333. package/lib/html/HtmlGenerator.js +132 -60
  334. package/lib/html/HtmlModule.js +16 -2
  335. package/lib/html/HtmlModulesPlugin.js +184 -87
  336. package/lib/html/HtmlParser.js +511 -160
  337. package/lib/html/builtinEmbeddedRenderer.js +70 -25
  338. package/lib/html/data.js +44 -22
  339. package/lib/html/htmlMinify.js +114 -41
  340. package/lib/html/syntax-parser.js +15795 -0
  341. package/lib/html/syntax-printer.js +1033 -0
  342. package/lib/html/syntax.js +37 -13952
  343. package/lib/html/xmlMinify.js +70 -0
  344. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  345. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  346. package/lib/ids/HashedModuleIdsPlugin.js +32 -5
  347. package/lib/ids/IdHelpers.js +4 -4
  348. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  349. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  350. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  351. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  352. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  353. package/lib/{util → ids}/numberHash.js +1 -1
  354. package/lib/index.js +312 -105
  355. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
  356. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  357. package/lib/javascript/BasicEvaluatedExpression.js +9 -9
  358. package/lib/javascript/ChunkHelpers.js +64 -4
  359. package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
  360. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
  361. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
  362. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  363. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  364. package/lib/javascript/JavascriptGenerator.js +32 -27
  365. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
  366. package/lib/javascript/JavascriptModule.js +14 -3
  367. package/lib/javascript/JavascriptModulesPlugin.js +441 -214
  368. package/lib/javascript/JavascriptParser.js +318 -144
  369. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  370. package/lib/javascript/MergedEntryExports.js +196 -0
  371. package/lib/javascript/ScopeAnalyzer.js +3924 -13
  372. package/lib/javascript/StartupHelpers.js +6 -6
  373. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
  374. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  375. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  376. package/lib/javascript/data.js +533 -122
  377. package/lib/javascript/jsMinify.js +272 -0
  378. package/lib/javascript/regexp.js +67 -32
  379. package/lib/javascript/syntax-parser.js +19169 -0
  380. package/lib/javascript/syntax-printer-data.js +1099 -0
  381. package/lib/javascript/syntax-printer.js +53878 -0
  382. package/lib/javascript/syntax.js +20 -11274
  383. package/lib/json/JsonData.js +1 -1
  384. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  385. package/lib/json/JsonGenerator.js +24 -16
  386. package/lib/json/JsonModule.js +13 -2
  387. package/lib/json/JsonModulesPlugin.js +1 -1
  388. package/lib/json/JsonParser.js +11 -10
  389. package/lib/json/jsonMinify.js +69 -0
  390. package/lib/library/AbstractLibraryPlugin.js +28 -15
  391. package/lib/library/AmdLibraryPlugin.js +4 -4
  392. package/lib/library/AssignLibraryPlugin.js +28 -12
  393. package/lib/library/EnableLibraryPlugin.js +1 -1
  394. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  395. package/lib/library/JsonpLibraryPlugin.js +2 -2
  396. package/lib/library/LibraryTemplatePlugin.js +53 -0
  397. package/lib/library/ModuleLibraryPlugin.js +557 -187
  398. package/lib/library/SystemLibraryPlugin.js +6 -8
  399. package/lib/library/UmdLibraryPlugin.js +3 -4
  400. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  401. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  402. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  403. package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
  404. package/lib/loaders/LoaderRunner.js +94 -46
  405. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  406. package/lib/loaders/loadLoader.js +16 -10
  407. package/lib/logging/Logger.js +7 -9
  408. package/lib/logging/ProgressPlugin.js +957 -0
  409. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  410. package/lib/{Generator.js → module/Generator.js} +33 -23
  411. package/lib/{Module.js → module/Module.js} +121 -53
  412. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  413. package/lib/module/NormalModule.js +2350 -0
  414. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
  415. package/lib/module/NullFactory.js +29 -0
  416. package/lib/{Parser.js → module/Parser.js} +12 -5
  417. package/lib/module/RawModule.js +208 -0
  418. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  419. package/lib/{util → module}/extractSourceMap.js +71 -20
  420. package/lib/{util → module}/findCaseMismatch.js +4 -4
  421. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  422. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  423. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
  424. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  425. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  426. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  427. package/lib/node/NodeTargetPlugin.js +1 -1
  428. package/lib/node/NodeWatchFileSystem.js +58 -6
  429. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  430. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -19
  431. package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
  432. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  433. package/lib/node/nodeConsole.js +6 -7
  434. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  435. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  436. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
  437. package/lib/optimize/ConcatenatedModule.js +231 -220
  438. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  439. package/lib/optimize/ConstExportsPlugin.js +7 -7
  440. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  441. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  442. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +23 -28
  443. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
  444. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  445. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  446. package/lib/optimize/InlineExports.js +12 -7
  447. package/lib/optimize/InnerGraph.js +5 -13
  448. package/lib/optimize/InnerGraphPlugin.js +10 -10
  449. package/lib/optimize/LazyBarrels.js +620 -0
  450. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  451. package/lib/optimize/LimitChunkCountPlugin.js +16 -7
  452. package/lib/optimize/MangleExportsPlugin.js +5 -5
  453. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  454. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  455. package/lib/optimize/ModuleConcatenationPlugin.js +28 -22
  456. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  457. package/lib/optimize/RealContentHashPlugin.js +18 -13
  458. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  459. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  460. package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
  461. package/lib/optimize/SplitChunksPlugin.js +719 -174
  462. package/lib/{util → optimize}/TupleQueue.js +9 -9
  463. package/lib/optimize/chunkSetIntersections.js +437 -0
  464. package/lib/{util → optimize}/deterministicGrouping.js +17 -17
  465. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  466. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +69 -25
  467. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
  468. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  469. package/lib/output/SSRManifestPlugin.js +349 -0
  470. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  471. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  472. package/lib/performance/BroadContextsPlugin.js +4 -4
  473. package/lib/performance/CacheEffectivenessPlugin.js +2 -3
  474. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  475. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  476. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  477. package/lib/performance/DynamicExportsPlugin.js +2 -2
  478. package/lib/performance/EvalUsagePlugin.js +4 -6
  479. package/lib/performance/HotspotsPlugin.js +39 -14
  480. package/lib/performance/LargeModulesPlugin.js +2 -3
  481. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  482. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  483. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  484. package/lib/performance/PureAnnotationsPlugin.js +19 -13
  485. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  486. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  487. package/lib/performance/SizeLimitsPlugin.js +11 -12
  488. package/lib/performance/TopLevelThisPlugin.js +22 -13
  489. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  490. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  491. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  492. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  493. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  494. package/lib/performance/UnusedFederationPlugin.js +2 -4
  495. package/lib/performance/UnusedModulesPlugin.js +5 -4
  496. package/lib/performance/getModuleSize.js +1 -1
  497. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  498. package/lib/performance/isOnlyReexported.js +7 -6
  499. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  500. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  501. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  502. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  503. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  504. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  505. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  506. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  507. package/lib/prefetch/ResourceHintPlugin.js +66 -45
  508. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  509. package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
  510. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  511. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  512. package/lib/{dependencies → provide}/ProvidedDependency.js +50 -17
  513. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  514. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  515. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  516. package/lib/resolve/getResolveOptionsKey.js +59 -0
  517. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  518. package/lib/rules/RuleSetCompiler.js +42 -51
  519. package/lib/rules/UseEffectRulePlugin.js +1 -3
  520. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  521. package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
  522. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  523. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  524. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  525. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  526. package/lib/runtime/CompatRuntimeModule.js +4 -4
  527. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  528. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  529. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  530. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  531. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  532. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  533. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  534. package/lib/runtime/GetChunkFilenameRuntimeModule.js +7 -11
  535. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  536. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  537. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  538. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  539. package/lib/runtime/GlobalRuntimeModule.js +3 -3
  540. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  541. package/lib/runtime/HelperRuntimeModule.js +16 -1
  542. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  543. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
  544. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  545. package/lib/runtime/NonceRuntimeModule.js +2 -2
  546. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  547. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  548. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  549. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +24 -1
  550. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  551. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  552. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -50
  553. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  554. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  555. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  556. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  557. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  558. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  559. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  560. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  561. package/lib/runtime/baseUri.js +1 -1
  562. package/lib/schemes/DataUriPlugin.js +1 -1
  563. package/lib/schemes/HttpUriPlugin.js +68 -13
  564. package/lib/schemes/VirtualUrlPlugin.js +52 -16
  565. package/lib/serialization/AggregateErrorSerializer.js +4 -4
  566. package/lib/serialization/BinaryMiddleware.js +4 -1
  567. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  568. package/lib/serialization/FileMiddleware.js +3 -3
  569. package/lib/serialization/ObjectMiddleware.js +62 -29
  570. package/lib/serialization/PlainObjectSerializer.js +3 -7
  571. package/lib/serialization/Serializer.js +21 -11
  572. package/lib/serialization/SerializerMiddleware.js +10 -8
  573. package/lib/serialization/SingleItemMiddleware.js +4 -2
  574. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  575. package/lib/sharing/ConsumeSharedModule.js +18 -14
  576. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  577. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  578. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  579. package/lib/sharing/ProvideSharedDependency.js +1 -1
  580. package/lib/sharing/ProvideSharedModule.js +11 -9
  581. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  582. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  583. package/lib/sharing/SharePlugin.js +102 -9
  584. package/lib/sharing/ShareRuntimeModule.js +6 -6
  585. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  586. package/lib/{util → sharing}/semver.js +14 -16
  587. package/lib/sharing/utils.js +59 -2
  588. package/lib/stats/DefaultStatsFactoryPlugin.js +57 -54
  589. package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
  590. package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
  591. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  592. package/lib/{Stats.js → stats/Stats.js} +4 -4
  593. package/lib/stats/StatsFactory.js +208 -37
  594. package/lib/stats/StatsPrinter.js +126 -13
  595. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  596. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  597. package/lib/template/DependencyTemplate.js +77 -0
  598. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  599. package/lib/template/InitFragment.js +223 -0
  600. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  601. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  602. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  603. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +158 -95
  604. package/lib/{Template.js → template/Template.js} +14 -12
  605. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
  606. package/lib/typescript/TypeScriptPlugin.js +3 -3
  607. package/lib/util/RequestShortener.js +44 -0
  608. package/lib/util/SortableSet.js +87 -22
  609. package/lib/util/SourceProcessor.js +439 -51
  610. package/lib/util/TupleSet.js +27 -27
  611. package/lib/util/WeakTupleMap.js +20 -16
  612. package/lib/util/buildDiagnostics.js +2 -2
  613. package/lib/util/cleverMerge.js +61 -33
  614. package/lib/util/comparators.js +19 -15
  615. package/lib/util/concatenate.js +28 -147
  616. package/lib/util/createMappings.js +111 -0
  617. package/lib/util/dataURL.js +96 -15
  618. package/lib/util/deprecation.js +5 -4
  619. package/lib/util/extractComments.js +118 -0
  620. package/lib/util/formatLocation.js +1 -1
  621. package/lib/util/globUtils.js +198 -20
  622. package/lib/util/haltVisitors.js +51 -0
  623. package/lib/util/handlerKeys.js +2 -2
  624. package/lib/util/identifier.js +117 -1
  625. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  626. package/lib/util/internalSerializables.js +296 -102
  627. package/lib/util/magicComment.js +12 -7
  628. package/lib/util/makeSerializable.js +28 -7
  629. package/lib/util/memoize.js +1 -1
  630. package/lib/util/parseJson.js +2 -2
  631. package/lib/util/preloadModuleType.js +5 -2
  632. package/lib/util/registerExternalSerializer.js +2 -2
  633. package/lib/util/removeBOM.js +1 -1
  634. package/lib/util/runtime.js +1 -1
  635. package/lib/util/serialization.js +35 -28
  636. package/lib/util/source.js +2 -2
  637. package/lib/util/terminalColors.js +161 -0
  638. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  639. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  640. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +19 -5
  641. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
  642. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
  643. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  644. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
  645. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  646. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
  647. package/lib/wasm/wasmModuleFilename.js +2 -2
  648. package/lib/wasm-sync/SyncWasmModule.js +18 -3
  649. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
  650. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  651. package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
  652. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
  653. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  654. package/lib/wasm-sync/WebAssemblyParser.js +15 -17
  655. package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
  656. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  657. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  658. package/lib/{Watching.js → watch/Watching.js} +8 -8
  659. package/lib/web/FetchCompileAsyncWasmPlugin.js +12 -18
  660. package/lib/web/FetchCompileWasmPlugin.js +8 -10
  661. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  662. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  663. package/lib/web/JsonpTemplatePlugin.js +1 -1
  664. package/lib/webpack.js +27 -17
  665. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  666. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  667. package/package.json +57 -36
  668. package/schemas/WebpackOptions.check.js +4 -3
  669. package/schemas/WebpackOptions.d.json.ts +2 -0
  670. package/schemas/WebpackOptions.json +295 -75
  671. package/schemas/plugins/BannerPlugin.check.js +4 -3
  672. package/schemas/plugins/BannerPlugin.json +29 -2
  673. package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
  674. package/schemas/plugins/HtmlParserOptions.check.js +4 -3
  675. package/schemas/plugins/IgnorePlugin.check.js +4 -3
  676. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  677. package/schemas/plugins/IgnorePlugin.json +1 -1
  678. package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
  679. package/schemas/plugins/ManifestPlugin.check.js +4 -3
  680. package/schemas/plugins/ManifestPlugin.json +3 -3
  681. package/schemas/plugins/ProgressPlugin.check.js +4 -3
  682. package/schemas/plugins/ProgressPlugin.json +2 -7
  683. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  684. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  685. package/schemas/plugins/SourceMapDevToolPlugin.check.js +4 -3
  686. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  687. package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
  688. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  689. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
  690. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
  691. package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
  692. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
  693. package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
  694. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  695. package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
  696. package/schemas/plugins/container/ExternalsType.check.js +4 -3
  697. package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
  698. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  699. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
  700. package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
  701. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
  702. package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
  703. package/schemas/plugins/css/CssParserOptions.check.js +4 -3
  704. package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
  705. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  706. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  707. package/schemas/plugins/dll/DllPlugin.check.js +4 -3
  708. package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
  709. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  710. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
  711. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
  712. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
  713. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
  714. package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
  715. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
  716. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
  717. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
  718. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
  719. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  720. package/schemas/plugins/output/CleanOptions.json +3 -0
  721. package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
  722. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
  723. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
  724. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  725. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
  726. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  727. package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
  728. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  729. package/types.d.ts +20780 -14174
  730. package/lib/LazyBarrel.js +0 -388
  731. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  732. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  733. package/lib/javascript/ChunkFormatHelpers.js +0 -72
  734. package/lib/javascript/grammar.js +0 -5546
  735. package/lib/javascript/parser.js +0 -1500
  736. package/lib/javascript/regexpData.js +0 -51
  737. package/lib/performance/getSourceModules.js +0 -22
  738. package/lib/util/Semaphore.js +0 -65
  739. package/lib/util/objectToMap.js +0 -15
  740. package/schemas/WebpackOptions.check.d.ts +0 -7
  741. package/schemas/_container.json +0 -155
  742. package/schemas/_sharing.json +0 -118
  743. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  745. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  746. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  747. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  748. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  749. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  750. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  751. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  752. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  753. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  754. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  755. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  756. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  758. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  759. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  760. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  761. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  762. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  763. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  764. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  765. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  768. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  769. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  770. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  771. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  772. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  773. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  774. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  775. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  776. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  777. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  778. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  779. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  780. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  781. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  782. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  783. /package/lib/{util → css}/topologicalSort.js +0 -0
  784. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  785. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  786. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  787. /package/lib/{util → javascript}/StackedMap.js +0 -0
  788. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  789. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  790. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  791. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  792. /package/lib/{util → optimize}/Queue.js +0 -0
  793. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -6,27 +6,40 @@
6
6
  "use strict";
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
- const { UsageState } = require("../ExportsInfo");
10
- const ExternalModule = require("../ExternalModule");
11
- const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
12
- const RuntimeGlobals = require("../RuntimeGlobals");
13
- const Template = require("../Template");
14
- const HarmonyExportExpressionDependency = require("../dependencies/HarmonyExportExpressionDependency");
15
- const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
16
- const HarmonyExportSpecifierDependency = require("../dependencies/HarmonyExportSpecifierDependency");
9
+ const ESMLiveExportDependency = require("../dependencies/esm/ESMLiveExportDependency");
10
+ const ESMLiveExportParserPlugin = require("../dependencies/esm/ESMLiveExportParserPlugin");
17
11
  const ExternalStarReexportError = require("../errors/ExternalStarReexportError");
12
+ const { UsageState } = require("../graph/ExportsInfo");
13
+ const isDependencyKind = require("../graph/isDependencyKind");
18
14
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
19
- const ConcatenatedModule = require("../optimize/ConcatenatedModule");
20
- const { InlinedUsedName } = require("../optimize/InlineExports");
21
- const { toJsStringLiteral } = require("../util/identifier");
22
15
  const {
23
- RESERVED_IDENTIFIER,
24
- SAFE_IDENTIFIER,
25
- propertyAccess
26
- } = require("../util/property");
27
- const { getEntryRuntime } = require("../util/runtime");
16
+ getMergedExports,
17
+ mergedEntryModules
18
+ } = require("../javascript/MergedEntryExports");
19
+ const { JAVASCRIPT_TYPE } = require("../module/ModuleSourceTypeConstants");
20
+ const {
21
+ JAVASCRIPT_MODULE_TYPE_AUTO,
22
+ JAVASCRIPT_MODULE_TYPE_ESM
23
+ } = require("../module/ModuleTypeConstants");
24
+ const { isInlinedUsedName } = require("../optimize/InlineExports");
25
+ const RuntimeGlobals = require("../runtime/RuntimeGlobals");
26
+ const Template = require("../template/Template");
27
+ const { someInIterable } = require("../util/IterableHelpers");
28
+ const { renameIdentifiers } = require("../util/concatenate");
29
+ const { SAFE_IDENTIFIER, propertyAccess } = require("../util/property");
30
+ const {
31
+ getEntryRuntime,
32
+ getRuntimeKey,
33
+ intersectRuntime
34
+ } = require("../util/runtime");
28
35
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
29
36
 
37
+ /** @import ExternalModule from "../externals/ExternalModule" */
38
+ /** @import { ExportInfo } from "../graph/ExportsInfo" */
39
+ /** @import Chunk from "../graph/Chunk" */
40
+ /** @import ESMExportSpecifierDependency from "../dependencies/esm/ESMExportSpecifierDependency" */
41
+ /** @import NormalModuleFactory from "../module/NormalModuleFactory" */
42
+ /** @import { InlinedUsedName } from "../optimize/InlineExports" */
30
43
  /** @import { Source } from "webpack-sources" */
31
44
  /**
32
45
  * @import {
@@ -35,18 +48,19 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
35
48
  * LibraryExport
36
49
  * } from "../../declarations/WebpackOptions"
37
50
  */
38
- /** @import Chunk from "../Chunk" */
51
+ /** @import CodeGenerationResults from "../module/CodeGenerationResults" */
39
52
  /** @import Compilation from "../Compilation" */
40
53
  /** @import Compiler from "../Compiler" */
41
- /** @import ModuleGraph from "../ModuleGraph" */
42
- /** @import Module from "../Module" */
54
+ /** @import ModuleGraph, { LiveBinding } from "../graph/ModuleGraph" */
55
+ /** @import Module from "../module/Module" */
56
+ /** @import ChunkGraph from "../graph/ChunkGraph" */
57
+ /** @import RuntimeTemplate from "../template/RuntimeTemplate" */
43
58
  /**
44
59
  * @import {
45
60
  * StartupRenderContext,
46
61
  * ModuleRenderContext
47
62
  * } from "../javascript/JavascriptModulesPlugin"
48
63
  */
49
- /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
50
64
  /** @import { RuntimeSpec } from "../util/runtime" */
51
65
  /**
52
66
  * @import {
@@ -83,37 +97,115 @@ const PLUGIN_NAME = "ModuleLibraryPlugin";
83
97
  const libraryEntryModules = new WeakMap();
84
98
 
85
99
  /**
86
- * Whether every export the module defines is a binding the library can export
87
- * natively, so the definitions written into the exports object are read by nobody.
88
- * A re-export or a renamed import is not: `renderStartup` reads those back off the
89
- * object, and `treatAsCommonJs` hands the object out as the default export.
100
+ * @typedef {object} ChunkLiveExports
101
+ * @property {string[]} names the names the chunk's scope declares
102
+ * @property {Map<InstanceType<ExportInfo>, string>} exports the name each live export binds to
103
+ * @property {[string, string, string, string | false, boolean][]} setters the module id, local name, declared name, used export name and async status of each binding a module writes through a setter
104
+ * @property {boolean} hasAsync whether any setter belongs to an async module
105
+ */
106
+
107
+ /**
108
+ * @typedef {object} LiveExportCandidate
109
+ * @property {Module} module the module declaring the binding
110
+ * @property {ESMLiveExportDependency} declaration its declaration
111
+ * @property {InstanceType<ExportInfo>} exportInfo the library's export of it
112
+ * @property {string} localName the local name the export binds to
113
+ * @property {boolean} mirrored whether the module keeps its declaration and mirrors each write
114
+ */
115
+
116
+ /** @type {WeakMap<Chunk, ChunkLiveExports>} */
117
+ const chunkLiveExports = new WeakMap();
118
+
119
+ /** @type {WeakSet<NormalModuleFactory>} */
120
+ const liveExportFactories = new WeakSet();
121
+
122
+ /** @type {WeakMap<Compilation, Set<string>>} */
123
+ const hoistedNames = new WeakMap();
124
+
125
+ /**
126
+ * @typedef {object} ModuleLocalExports
127
+ * @property {Map<string, ESMExportSpecifierDependency>} specifiers each local export by its name
128
+ * @property {Map<string, ESMLiveExportDependency>} declarations each live `let` by a name it declares
129
+ */
130
+
131
+ /**
132
+ * Indexes the local exports and live `let` declarations of a module, once per module.
133
+ * @param {Module} module the module
134
+ * @param {Map<Module, ModuleLocalExports>} cache the indexes built so far
135
+ * @returns {ModuleLocalExports} the module's index
136
+ */
137
+ const getModuleLocalExports = (module, cache) => {
138
+ let result = cache.get(module);
139
+ if (result !== undefined) return result;
140
+ result = { specifiers: new Map(), declarations: new Map() };
141
+ for (const dependency of module.dependencies) {
142
+ if (isDependencyKind(dependency, "esm-export-specifier")) {
143
+ result.specifiers.set(dependency.name, dependency);
144
+ } else if (isDependencyKind(dependency, "esm-live-export")) {
145
+ for (const name of dependency.names) {
146
+ result.declarations.set(name, dependency);
147
+ }
148
+ }
149
+ }
150
+ cache.set(module, result);
151
+ return result;
152
+ };
153
+
154
+ /**
155
+ * Why a module's exported module-level bindings cannot move to the chunk's scope.
156
+ * @param {Module} module the module declaring them
157
+ * @param {Module} entry the entry module exporting them
158
+ * @param {ESMLiveExportDependency} declaration one of its declarations
159
+ * @returns {string | null} the reason they stay and mirror, empty where they are live already, null where they can move
160
+ */
161
+ const getHoistRefusal = (module, entry, declaration) => {
162
+ // A concatenation puts its modules' bindings in one scope already.
163
+ if (
164
+ module.is("concatenated") ||
165
+ (entry !== module &&
166
+ someInIterable(entry.getSourceModules(), (source) => source === module))
167
+ ) {
168
+ return "";
169
+ }
170
+ if (declaration.readByEval) {
171
+ return "the module calls eval(), and a function it creates may write a binding later";
172
+ }
173
+ return null;
174
+ };
175
+
176
+ /**
177
+ * Whether a module's code runs where the chunk's scope is not: in a hot update, or in
178
+ * another chunk of the runtime, so it can reach the declared names only through setters.
179
+ * @param {Module} module the module declaring them
180
+ * @param {ESMLiveExportDependency} declaration one of its declarations
181
+ * @param {Chunk} chunk the library's chunk
182
+ * @param {ChunkGraph} chunkGraph the chunk graph
183
+ * @returns {boolean} true when the module needs the setters
184
+ */
185
+ const needsSetters = (module, declaration, chunk, chunkGraph) =>
186
+ declaration.hot ||
187
+ !chunkGraph.isModuleInChunk(module, chunk) ||
188
+ someInIterable(
189
+ chunkGraph.getModuleChunksIterable(module),
190
+ (other) =>
191
+ other !== chunk &&
192
+ intersectRuntime(other.runtime, chunk.runtime) !== undefined
193
+ );
194
+
195
+ /**
196
+ * Whether the library reads every export of the entry off its exports object, never
197
+ * binding one to a declaration of the inlined body, so no definition can be left out.
90
198
  * @param {Module} module the entry module
91
199
  * @param {ModuleGraph} moduleGraph the module graph
92
- * @returns {boolean} true when the definitions may be taken over
200
+ * @returns {boolean} true when the entry has no export the library exposes natively
93
201
  */
94
- const definesOnlyNativeExports = (module, moduleGraph) => {
202
+ const noNativeExports = (module, moduleGraph) => {
95
203
  const buildMeta = /** @type {JavascriptModuleBuildMeta} */ (module.buildMeta);
96
- if (buildMeta && buildMeta.treatAsCommonJs) return false;
204
+ if (buildMeta && buildMeta.treatAsCommonJs) return true;
97
205
  // A top-level `await` wraps the body in `__webpack_require__.a`, and the
98
206
  // definitions read declarations inside that wrapper — re-emitting them after the
99
207
  // module would put them out of scope.
100
- if (moduleGraph.isAsync(module)) return false;
101
- const topLevelDeclarations =
102
- module.buildInfo && module.buildInfo.topLevelDeclarations;
103
- if (!topLevelDeclarations) return false;
104
- for (const dep of module.dependencies) {
105
- // A re-export or an `export default` has no declaration of its own to bind to,
106
- // so `renderStartup` reads its value back off the exports object.
107
- if (
108
- dep instanceof HarmonyExportImportedSpecifierDependency ||
109
- dep instanceof HarmonyExportExpressionDependency
110
- ) {
111
- return false;
112
- }
113
- if (!(dep instanceof HarmonyExportSpecifierDependency)) continue;
114
- if (!topLevelDeclarations.has(dep.id)) return false;
115
- }
116
- return true;
208
+ return moduleGraph.isAsync(module);
117
209
  };
118
210
 
119
211
  /**
@@ -125,26 +217,6 @@ const definesOnlyNativeExports = (module, moduleGraph) => {
125
217
  const toExportName = (name) =>
126
218
  SAFE_IDENTIFIER.test(name) ? name : JSON.stringify(name);
127
219
 
128
- /**
129
- * Renders the import attributes of a reexport in the syntax the author wrote,
130
- * since a legacy `assert` clause and a `with` clause are not interchangeable.
131
- * @param {ImportAttributes | undefined} attributes the import attributes
132
- * @returns {string} the attributes clause, empty when there are none
133
- */
134
- const toAttributesClause = (attributes) => {
135
- if (!attributes) return "";
136
- const { _isLegacyAssert: isLegacyAssert, ...values } = attributes;
137
- return ` ${isLegacyAssert ? "assert" : "with"} ${JSON.stringify(values)}`;
138
- };
139
-
140
- /**
141
- * Whether the export name can also be used as the declared binding name.
142
- * @param {string} name export name
143
- * @returns {boolean} true, when the name can be declared
144
- */
145
- const isDeclarableExportName = (name) =>
146
- SAFE_IDENTIFIER.test(name) && !RESERVED_IDENTIFIER.has(name);
147
-
148
220
  /**
149
221
  * Represents the module library plugin runtime component.
150
222
  * @typedef {ModuleLibraryPluginParsed} T
@@ -170,10 +242,34 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
170
242
  apply(compiler) {
171
243
  super.apply(compiler);
172
244
 
245
+ // Both library types apply this plugin, and one parser tap records everything.
246
+ compiler.hooks.normalModuleFactory.tap(
247
+ PLUGIN_NAME,
248
+ (normalModuleFactory) => {
249
+ if (liveExportFactories.has(normalModuleFactory)) return;
250
+ liveExportFactories.add(normalModuleFactory);
251
+ for (const type of [
252
+ JAVASCRIPT_MODULE_TYPE_AUTO,
253
+ JAVASCRIPT_MODULE_TYPE_ESM
254
+ ]) {
255
+ normalModuleFactory.hooks.parser
256
+ .for(type)
257
+ .tap(PLUGIN_NAME, (parser) => {
258
+ new ESMLiveExportParserPlugin().apply(parser);
259
+ });
260
+ }
261
+ }
262
+ );
263
+
173
264
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
174
265
  const javascriptHooks =
175
266
  JavascriptModulesPlugin.getCompilationHooks(compilation);
176
267
 
268
+ compilation.dependencyTemplates.set(
269
+ ESMLiveExportDependency,
270
+ new ESMLiveExportDependency.Template()
271
+ );
272
+
177
273
  compilation.hooks.beforeCodeGeneration.tap(PLUGIN_NAME, () => {
178
274
  const entries = libraryEntryModules.get(compilation);
179
275
  if (entries === undefined) return;
@@ -182,13 +278,9 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
182
278
  for (const dep of dependencies) {
183
279
  const module = dep && moduleGraph.getModule(dep);
184
280
  if (!module) continue;
185
- const root =
186
- module instanceof ConcatenatedModule ? module.rootModule : module;
281
+ const root = module.getRootModule();
187
282
  if (!entries.has(root)) continue;
188
- if (
189
- root === module &&
190
- !definesOnlyNativeExports(module, moduleGraph)
191
- ) {
283
+ if (root === module && noNativeExports(module, moduleGraph)) {
192
284
  continue;
193
285
  }
194
286
  moduleGraph.getMeta(module).onDemandExports = true;
@@ -196,11 +288,218 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
196
288
  }
197
289
  });
198
290
 
291
+ // An exported module-level `let` or `var` of a module the chunk runs as a function
292
+ // moves to the chunk's scope under a reserved name, which the library then
293
+ // exports itself; decided before hashing, as the module's code changes.
294
+ compilation.hooks.beforeModuleHash.tap(PLUGIN_NAME, () => {
295
+ const entries = libraryEntryModules.get(compilation);
296
+ if (entries === undefined) return;
297
+ const { chunkGraph, moduleGraph } = compilation;
298
+ /** @type {Map<Module, ModuleLocalExports>} */
299
+ const localExports = new Map();
300
+ // Both library types name bindings in one compilation, so they share it.
301
+ let usedNames = hoistedNames.get(compilation);
302
+ if (usedNames === undefined) {
303
+ usedNames = new Set();
304
+ hoistedNames.set(compilation, usedNames);
305
+ }
306
+ /** @type {Map<Module, Set<string>>} */
307
+ const registeredRuntimes = new Map();
308
+ /** @type {{ chunk: Chunk, runtimeKey: string, candidates: LiveExportCandidate[] }[]} */
309
+ const chunkCandidates = [];
310
+ for (const chunk of compilation.chunks) {
311
+ if (chunkGraph.getNumberOfEntryModules(chunk) === 0) continue;
312
+ const entryOptions = chunk.getEntryOptions();
313
+ const library =
314
+ entryOptions && entryOptions.library !== undefined
315
+ ? entryOptions.library
316
+ : compilation.outputOptions.library;
317
+ if (this._parseOptionsCached(library) === false) continue;
318
+ const runtimeKey = getRuntimeKey(chunk.runtime);
319
+ /** @type {LiveExportCandidate[]} */
320
+ const candidates = [];
321
+ // why each module keeps its bindings, null where they move
322
+ /** @type {Map<Module, string | null>} */
323
+ const refusals = new Map();
324
+ for (const entry of chunkGraph.getChunkEntryModulesIterable(chunk)) {
325
+ if (!entries.has(entry.getRootModule())) continue;
326
+ for (const exportInfo of moduleGraph.getExportsInfo(entry)
327
+ .orderedExports) {
328
+ if (!exportInfo.provided) continue;
329
+ const target = exportInfo.getTarget(moduleGraph);
330
+ if (target && (!target.export || target.export.length !== 1)) {
331
+ continue;
332
+ }
333
+ const module = target ? target.module : entry;
334
+ const { specifiers, declarations } = getModuleLocalExports(
335
+ module,
336
+ localExports
337
+ );
338
+ const local = specifiers.get(
339
+ target
340
+ ? /** @type {string[]} */ (target.export)[0]
341
+ : exportInfo.name
342
+ );
343
+ const declaration = local && declarations.get(local.id);
344
+ if (!declaration) continue;
345
+ let refusal = refusals.get(module);
346
+ if (refusal === undefined) {
347
+ refusal = getHoistRefusal(module, entry, declaration);
348
+ refusals.set(module, refusal);
349
+ if (refusal) {
350
+ compilation.runtimeTemplate.analyzableBailout(
351
+ module,
352
+ `a module library may export a stale binding, since ${refusal}`
353
+ );
354
+ }
355
+ }
356
+ if (refusal === "") continue;
357
+ candidates.push({
358
+ module,
359
+ declaration,
360
+ exportInfo,
361
+ localName: local.id,
362
+ mirrored: declaration.earlyUse || refusal !== null
363
+ });
364
+ // A module runs once per runtime, so one library of it needing the
365
+ // setters makes every library of that runtime register them.
366
+ if (needsSetters(module, declaration, chunk, chunkGraph)) {
367
+ let runtimes = registeredRuntimes.get(module);
368
+ if (runtimes === undefined) {
369
+ runtimes = new Set();
370
+ registeredRuntimes.set(module, runtimes);
371
+ }
372
+ runtimes.add(runtimeKey);
373
+ }
374
+ }
375
+ }
376
+ if (candidates.length > 0) {
377
+ chunkCandidates.push({ chunk, runtimeKey, candidates });
378
+ }
379
+ }
380
+ for (const { chunk, runtimeKey, candidates } of chunkCandidates) {
381
+ /** @type {string[]} */
382
+ const names = [];
383
+ /** @type {Set<LiveBinding>} */
384
+ const declared = new Set();
385
+ /** @type {ChunkLiveExports["exports"]} */
386
+ const exports = new Map();
387
+ /** @type {ChunkLiveExports["setters"]} */
388
+ const setters = [];
389
+ /** @type {Map<Module, { runtimeKeys: string[], usedExports: Map<string, string> }>} */
390
+ const moduleRuntimeInfo = new Map();
391
+ let hasAsync = false;
392
+ for (const {
393
+ module,
394
+ declaration,
395
+ exportInfo,
396
+ localName,
397
+ mirrored
398
+ } of candidates) {
399
+ const runtimes = registeredRuntimes.get(module);
400
+ const registered =
401
+ runtimes !== undefined && runtimes.has(runtimeKey);
402
+ const isAsync = registered && moduleGraph.isAsync(module);
403
+ const meta = moduleGraph.getMeta(module);
404
+ // Renaming takes the module's own declaration, which an early use needs in
405
+ // order to throw and eval() to read, so such a module mirrors each write.
406
+ const bindings =
407
+ registered || mirrored
408
+ ? meta.liveSetters || (meta.liveSetters = new Map())
409
+ : meta.liveBindings || (meta.liveBindings = new Map());
410
+ for (const name of declaration.names) {
411
+ let binding = bindings.get(name);
412
+ if (binding === undefined) {
413
+ let hoisted = `__webpack_live_${name}__`;
414
+ for (let i = 1; usedNames.has(hoisted); i++) {
415
+ hoisted = `__webpack_live_${name}_${i}__`;
416
+ }
417
+ usedNames.add(hoisted);
418
+ binding = {
419
+ name: hoisted,
420
+ runtimes: new Set(),
421
+ registered: new Set()
422
+ };
423
+ bindings.set(name, binding);
424
+ }
425
+ if (declared.has(binding)) continue;
426
+ declared.add(binding);
427
+ binding.runtimes.add(runtimeKey);
428
+ names.push(binding.name);
429
+ if (!registered) continue;
430
+ binding.registered.add(runtimeKey);
431
+ let runtimeInfo = moduleRuntimeInfo.get(module);
432
+ if (runtimeInfo === undefined) {
433
+ runtimeInfo = { runtimeKeys: [], usedExports: new Map() };
434
+ // Shared chunks generate the module for a union of runtimes;
435
+ // guarded setters apply when any of them registers this binding.
436
+ for (const runtime of chunkGraph.getModuleRuntimes(module)) {
437
+ if (intersectRuntime(runtime, chunk.runtime) === undefined) {
438
+ continue;
439
+ }
440
+ runtimeInfo.runtimeKeys.push(getRuntimeKey(runtime));
441
+ }
442
+ const exportsInfo = moduleGraph.getExportsInfo(module);
443
+ for (const [exportName, specifier] of getModuleLocalExports(
444
+ module,
445
+ localExports
446
+ ).specifiers) {
447
+ // A module that already ran seeds the binding from its first used alias.
448
+ if (runtimeInfo.usedExports.has(specifier.id)) continue;
449
+ const usedName = exportsInfo.getUsedName(
450
+ exportName,
451
+ chunk.runtime
452
+ );
453
+ if (typeof usedName === "string") {
454
+ runtimeInfo.usedExports.set(specifier.id, usedName);
455
+ }
456
+ }
457
+ moduleRuntimeInfo.set(module, runtimeInfo);
458
+ }
459
+ for (const key of runtimeInfo.runtimeKeys) {
460
+ binding.runtimes.add(key);
461
+ binding.registered.add(key);
462
+ }
463
+ const used = runtimeInfo.usedExports.get(name);
464
+ hasAsync = hasAsync || isAsync;
465
+ setters.push([
466
+ JSON.stringify(chunkGraph.getModuleId(module)),
467
+ name,
468
+ binding.name,
469
+ used === undefined ? false : used,
470
+ isAsync
471
+ ]);
472
+ }
473
+ exports.set(
474
+ exportInfo,
475
+ /** @type {LiveBinding} */ (bindings.get(localName)).name
476
+ );
477
+ }
478
+ if (names.length > 0) {
479
+ chunkLiveExports.set(chunk, { names, exports, setters, hasAsync });
480
+ }
481
+ }
482
+ });
483
+
199
484
  // The stashed exports source is re-emitted only where the entry is wrapped;
200
485
  // inlined directly, the helpers it pulled in have no reader and can go.
486
+ compilation.hooks.additionalChunkRuntimeRequirements.tap(
487
+ PLUGIN_NAME,
488
+ (chunk, set) => {
489
+ const live = chunkLiveExports.get(chunk);
490
+ if (live && live.setters.length > 0) {
491
+ set.add(RuntimeGlobals.moduleCache);
492
+ if (live.hasAsync) {
493
+ set.add(RuntimeGlobals.asyncModuleExportSymbol);
494
+ }
495
+ }
496
+ }
497
+ );
498
+
201
499
  compilation.hooks.additionalChunkRuntimeRequirements.tap(
202
500
  PLUGIN_NAME,
203
501
  (chunk, set, { chunkGraph, codeGenerationResults }) => {
502
+ const { moduleGraph, runtimeTemplate } = compilation;
204
503
  if (!set.has(RuntimeGlobals.definePropertyGetters)) return;
205
504
  if (chunkGraph.getNumberOfEntryModules(chunk) !== 1) return;
206
505
  if (
@@ -215,6 +514,48 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
215
514
  if (javascriptHooks.inlineInRuntimeBailout.isUsed()) return;
216
515
 
217
516
  const [module] = chunkGraph.getChunkEntryModulesIterable(chunk);
517
+ if (chunk.hasRuntime()) {
518
+ // The startup inlines the entry only where nothing else loads with
519
+ // it: another chunk of the entrypoint delays the execution, and a
520
+ // module reading the entry needs it in the registry.
521
+ for (const [
522
+ ,
523
+ entrypoint
524
+ ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
525
+ if (entrypoint && entrypoint.chunks.some((c) => c !== chunk)) {
526
+ return;
527
+ }
528
+ }
529
+ if (
530
+ someInIterable(
531
+ moduleGraph.getIncomingConnectionsByOriginModule(module),
532
+ ([originModule, connections]) =>
533
+ originModule &&
534
+ originModule !== module &&
535
+ connections.some((c) => c.isTargetActive(chunk.runtime)) &&
536
+ someInIterable(
537
+ chunkGraph.getModuleRuntimes(originModule),
538
+ (runtime) =>
539
+ intersectRuntime(runtime, chunk.runtime) !== undefined
540
+ )
541
+ )
542
+ ) {
543
+ return;
544
+ }
545
+ } else if (
546
+ // A chunk whose runtime is elsewhere lifts its entry to the top
547
+ // level under the same conditions, and renders it into the module
548
+ // registry otherwise.
549
+ JavascriptModulesPlugin._getEsmEntryModuleToInline({
550
+ chunk,
551
+ chunkGraph,
552
+ moduleGraph,
553
+ runtimeTemplate,
554
+ codeGenerationResults
555
+ }) !== module
556
+ ) {
557
+ return;
558
+ }
218
559
  const codeGenResult = codeGenerationResults.get(
219
560
  module,
220
561
  chunk.runtime
@@ -243,45 +584,32 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
243
584
  }
244
585
  }
245
586
 
246
- // The helpers land in the runtime, not in this chunk, so what still
247
- // needs them is asked of every chunk sharing the entrypoint — the
248
- // runtime chunk, and whatever `splitChunks` moved out of the entry.
249
- /** @type {Set<Chunk>} */
250
- const siblings = new Set([chunk]);
251
- for (const [
252
- ,
253
- entrypoint
254
- ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
255
- if (!entrypoint) continue;
256
- for (const sibling of entrypoint.chunks) siblings.add(sibling);
257
- }
258
-
587
+ // The entrypoint loads as this chunk alone, so what still needs the
588
+ // helpers is whatever else it holds beside the entry.
259
589
  let otherNeedsDefine = false;
260
590
  let otherNeedsNamespaceObject = false;
261
591
  let otherNeedsExports = false;
262
592
  let otherNeedsRequireScope = false;
263
- outer: for (const sibling of siblings) {
264
- for (const m of chunkGraph.getChunkModulesIterable(sibling)) {
265
- if (m === module) continue;
266
- const requirements = chunkGraph.getModuleRuntimeRequirements(
267
- m,
268
- sibling.runtime
269
- );
270
- if (!requirements) continue;
271
- if (requirements.has(RuntimeGlobals.definePropertyGetters)) {
272
- otherNeedsDefine = true;
273
- }
274
- if (requirements.has(RuntimeGlobals.makeNamespaceObject)) {
275
- otherNeedsNamespaceObject = true;
276
- }
277
- if (requirements.has(RuntimeGlobals.exports)) {
278
- otherNeedsExports = true;
279
- }
280
- if (requirements.has(RuntimeGlobals.requireScope)) {
281
- otherNeedsRequireScope = true;
282
- }
283
- if (otherNeedsDefine) break outer;
593
+ for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
594
+ if (m === module) continue;
595
+ const requirements = chunkGraph.getModuleRuntimeRequirements(
596
+ m,
597
+ chunk.runtime
598
+ );
599
+ if (!requirements) continue;
600
+ if (requirements.has(RuntimeGlobals.definePropertyGetters)) {
601
+ otherNeedsDefine = true;
602
+ }
603
+ if (requirements.has(RuntimeGlobals.makeNamespaceObject)) {
604
+ otherNeedsNamespaceObject = true;
605
+ }
606
+ if (requirements.has(RuntimeGlobals.exports)) {
607
+ otherNeedsExports = true;
284
608
  }
609
+ if (requirements.has(RuntimeGlobals.requireScope)) {
610
+ otherNeedsRequireScope = true;
611
+ }
612
+ if (otherNeedsDefine) break;
285
613
  }
286
614
 
287
615
  if (otherNeedsDefine) return;
@@ -368,7 +696,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
368
696
 
369
697
  // Only handle star-reexport statement
370
698
  if (
371
- !(dep instanceof HarmonyExportImportedSpecifierDependency) ||
699
+ dep === null ||
700
+ !isDependencyKind(dep, "esm-reexport") ||
372
701
  dep.name !== null
373
702
  ) {
374
703
  continue;
@@ -382,7 +711,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
382
711
  ) {
383
712
  continue;
384
713
  }
385
- if (importedModule instanceof ExternalModule) {
714
+ if (importedModule.is("external")) {
386
715
  const request = importedModule.getResolvedRequest();
387
716
  if (Array.isArray(request) && request.length > 1) {
388
717
  unsupportedExternals.add(importedModule);
@@ -426,6 +755,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
426
755
  * @param {Module} module module
427
756
  * @param {ModuleGraph} moduleGraph moduleGraph
428
757
  * @param {RuntimeSpec} runtime chunk runtime
758
+ * @param {CodeGenerationResults} codeGenerationResults the code generation results
429
759
  * @param {[string, string][]} exports exports
430
760
  * @param {Set<string>} alreadyRenderedExports already rendered exports
431
761
  * @returns {ConcatSource} source with null provided exports
@@ -435,6 +765,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
435
765
  module,
436
766
  moduleGraph,
437
767
  runtime,
768
+ codeGenerationResults,
438
769
  exports,
439
770
  alreadyRenderedExports
440
771
  ) {
@@ -458,7 +789,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
458
789
 
459
790
  // Only handle star-reexport statement
460
791
  if (
461
- dep instanceof HarmonyExportImportedSpecifierDependency &&
792
+ dep !== null &&
793
+ isDependencyKind(dep, "esm-reexport") &&
462
794
  dep.name === null
463
795
  ) {
464
796
  const importedModule = connection.resolvedModule;
@@ -472,21 +804,15 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
472
804
  importedModuleExportsInfo._otherExportsInfo.provided === null
473
805
  ) {
474
806
  // Handle export * from 'external'
475
- if (importedModule instanceof ExternalModule) {
476
- const request = importedModule.getResolvedRequest();
477
- // A property path is reported by `_checkStarReexportedExternals`,
478
- // and an absent one by the external's own build
479
- const specifier =
480
- typeof request === "string"
481
- ? request
482
- : Array.isArray(request) && request.length === 1
483
- ? request[0]
484
- : undefined;
485
- if (specifier !== undefined) {
486
- externalReexports.add(
487
- `export * from ${toJsStringLiteral(specifier)}${toAttributesClause(dep.attributes)};\n`
488
- );
489
- }
807
+ if (importedModule.is("external")) {
808
+ const from = codeGenerationResults.has(importedModule, runtime)
809
+ ? codeGenerationResults.getData(
810
+ importedModule,
811
+ runtime,
812
+ "externalReexport"
813
+ )
814
+ : undefined;
815
+ if (from) externalReexports.add(`export * ${from};\n`);
490
816
  } else if (!visitedReexportModules.has(importedModule)) {
491
817
  visitedReexportModules.add(importedModule);
492
818
  resolveDynamicStarReexport(importedModule, true);
@@ -522,7 +848,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
522
848
  for (const [origin, used] of unknownProvidedExports) {
523
849
  exports.push([
524
850
  origin,
525
- used instanceof InlinedUsedName
851
+ isInlinedUsedName(used)
526
852
  ? used.render(
527
853
  Template.toNormalComment(
528
854
  `inlined export ${propertyAccess([origin])}`
@@ -547,12 +873,26 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
547
873
  const {
548
874
  moduleGraph,
549
875
  chunk,
876
+ chunkGraph,
550
877
  codeGenerationResults,
551
878
  inlined,
552
879
  inlinedInIIFE,
880
+ exportsAwaited,
553
881
  runtimeTemplate
554
882
  } = renderContext;
555
- let result = new ConcatSource(source);
883
+ const live = chunkLiveExports.get(chunk);
884
+ // Declared before the startup runs the module functions assigning them
885
+ let result = live
886
+ ? new ConcatSource(
887
+ `${runtimeTemplate.renderLet()} ${live.names.join(", ")};\n`,
888
+ this._renderLiveExportSetters(live, runtimeTemplate),
889
+ source
890
+ )
891
+ : new ConcatSource(source);
892
+ // A merged entry exposes what its modules expose together, so the ESM
893
+ // export list is theirs rather than the last module's alone.
894
+ const mergedModules = mergedEntryModules(chunk, chunkGraph, compilation);
895
+ const exportedModules = mergedModules || [module];
556
896
  const exportInfos = options.export
557
897
  ? [
558
898
  moduleGraph.getExportInfo(
@@ -560,15 +900,36 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
560
900
  Array.isArray(options.export) ? options.export[0] : options.export
561
901
  )
562
902
  ]
563
- : moduleGraph.getExportsInfo(module).orderedExports;
903
+ : mergedModules
904
+ ? getMergedExports(
905
+ mergedModules,
906
+ moduleGraph,
907
+ chunk.runtime
908
+ ).exports.map(({ name, module: from }) =>
909
+ moduleGraph.getExportInfo(from, name)
910
+ )
911
+ : moduleGraph.getExportsInfo(module).orderedExports;
564
912
 
565
913
  const { data } = codeGenerationResults.get(module, chunk.runtime);
566
914
 
567
915
  const isInlinedEntryWithoutIIFE = inlined && !inlinedInIIFE;
568
- // Direct export bindings from on-demand concatenation
916
+ // The binding each export left out on demand reads, exported directly
569
917
  /** @type {Record<string, string>} */
570
- const definitions =
918
+ let definitions =
571
919
  (isInlinedEntryWithoutIIFE && data && data.get("exportsFinalName")) || {};
920
+ // Inlined beside other modules, the entry's colliding declarations were renamed
921
+ const { renamedDeclarations } = renderContext;
922
+ if (renamedDeclarations) {
923
+ /** @type {Record<string, string>} */
924
+ const renamed = {};
925
+ for (const usedName of Object.keys(definitions)) {
926
+ renamed[usedName] = renameIdentifiers(
927
+ definitions[usedName],
928
+ renamedDeclarations
929
+ );
930
+ }
931
+ definitions = renamed;
932
+ }
572
933
 
573
934
  /** @type {string[]} */
574
935
  const shortHandedExports = [];
@@ -594,40 +955,17 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
594
955
  return name;
595
956
  };
596
957
 
597
- const isAsync = moduleGraph.isAsync(module);
598
-
599
- const treatAsCommonJs =
600
- module.buildMeta &&
601
- /** @type {JavascriptModuleBuildMeta} */ (module.buildMeta)
602
- .treatAsCommonJs;
603
- const skipRenderDefaultExport = Boolean(treatAsCommonJs);
604
-
605
- // A single inlined entry renders at the top level, so its declarations are
606
- // bindings that can be exported directly, keeping ESM live bindings rather
607
- // than snapshotting them into a `const`.
608
- /** @type {Map<string, string> | undefined} */
609
- let directBindings;
610
- if (isInlinedEntryWithoutIIFE && !treatAsCommonJs) {
611
- const topLevelDeclarations =
612
- (data && data.get("topLevelDeclarations")) ||
613
- (module.buildInfo && module.buildInfo.topLevelDeclarations);
614
- if (topLevelDeclarations) {
615
- for (const dep of module.dependencies) {
616
- if (
617
- dep instanceof HarmonyExportSpecifierDependency &&
618
- topLevelDeclarations.has(dep.id)
619
- ) {
620
- (directBindings || (directBindings = new Map())).set(
621
- dep.name,
622
- dep.id
623
- );
624
- }
625
- }
626
- }
627
- }
958
+ // A merged entry is awaited in the bootstrap, so the object here is settled.
959
+ const isAsync = !mergedModules && moduleGraph.isAsync(module);
628
960
 
629
- const bindingsTakenOver =
630
- data !== undefined && data.has("exportsBindingSource");
961
+ // One ES module among the merged ones still provides a real `default`, and
962
+ // the synthetic one below would then be a second export of that name.
963
+ const treatAsCommonJs = exportedModules.every((m) =>
964
+ Boolean(
965
+ m.buildMeta &&
966
+ /** @type {JavascriptModuleBuildMeta} */ (m.buildMeta).treatAsCommonJs
967
+ )
968
+ );
631
969
 
632
970
  const moduleExportsInfo = moduleGraph.getExportsInfo(module);
633
971
 
@@ -642,7 +980,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
642
980
  let needExportsDeclaration =
643
981
  !isInlinedEntryWithoutIIFE || isAsync || needHarmonyCompatibilityFlag;
644
982
 
645
- if (isAsync) {
983
+ // The startup awaits the entry wherever top-level `await` reaches it.
984
+ if (isAsync && !exportsAwaited) {
646
985
  result.add(
647
986
  `${RuntimeGlobals.exports} = await ${RuntimeGlobals.exports};\n`
648
987
  );
@@ -654,7 +993,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
654
993
 
655
994
  const originalName = exportInfo.name;
656
995
  // Skip rendering the default export in some cases
657
- if (skipRenderDefaultExport && originalName === "default") continue;
996
+ if (treatAsCommonJs && originalName === "default") continue;
658
997
 
659
998
  // Try to find all exports from the reexported modules
660
999
  const target = exportInfo.getTarget(moduleGraph);
@@ -674,7 +1013,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
674
1013
 
675
1014
  if (
676
1015
  target &&
677
- target.module instanceof ExternalModule &&
1016
+ target.module.is("external") &&
678
1017
  target.export &&
679
1018
  target.export.length === 1 &&
680
1019
  codeGenerationResults.has(target.module, chunk.runtime)
@@ -685,7 +1024,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
685
1024
  "externalReexport"
686
1025
  );
687
1026
  if (reexport) {
688
- if (!bindingsTakenOver) needExportsDeclaration = true;
1027
+ // The getter stays in the body, written into the object
1028
+ needExportsDeclaration = true;
689
1029
  result.add(
690
1030
  `export { ${toExportName(target.export[0])} as ${toExportName(originalName)} } ${reexport};\n`
691
1031
  );
@@ -694,28 +1034,25 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
694
1034
  }
695
1035
  }
696
1036
 
697
- // The exports of entry module are never inlined
698
- const usedName =
699
- /** @type {string} */
700
- (exportInfo.getUsedName(originalName, chunk.runtime));
1037
+ // The exports of entry module are never inlined, and a merged exports
1038
+ // object is keyed by the original names rather than the mangled ones.
1039
+ const usedName = mergedModules
1040
+ ? originalName
1041
+ : /** @type {string} */
1042
+ (exportInfo.getUsedName(originalName, chunk.runtime));
701
1043
  /** @type {string | undefined} */
702
1044
  const definition = definitions[usedName];
703
1045
  /** @type {string | undefined} */
704
- const directLocal =
705
- definition === undefined && directBindings
706
- ? directBindings.get(originalName)
707
- : undefined;
708
- /** @type {string | undefined} */
709
1046
  let finalName;
710
1047
 
711
- if (definition) {
1048
+ const liveName = live && live.exports.get(exportInfo);
1049
+
1050
+ if (liveName) {
1051
+ finalName = liveName;
1052
+ // the body still defines an export it does not leave out on the object
1053
+ if (!definition) needExportsDeclaration = true;
1054
+ } else if (definition) {
712
1055
  finalName = definition;
713
- } else if (directLocal !== undefined) {
714
- // Live binding to the inlined entry's own top-level declaration
715
- finalName = directLocal;
716
- // The declaration is only there for the definitions written into it; with
717
- // those taken over (and not re-emitted here) nothing reads the object.
718
- if (!bindingsTakenOver) needExportsDeclaration = true;
719
1056
  } else {
720
1057
  // Fallback to `__webpack_exports__` property access
721
1058
  // when no direct export binding was found
@@ -778,18 +1115,14 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
778
1115
  module,
779
1116
  moduleGraph,
780
1117
  chunk.runtime,
1118
+ codeGenerationResults,
781
1119
  exports,
782
1120
  alreadyRenderedExports
783
1121
  );
784
1122
 
785
1123
  for (const [exportName, final] of exports) {
786
- if (isDeclarableExportName(exportName)) {
787
- result.add(
788
- `export ${runtimeTemplate.renderConst()} ${exportName} = ${final};\n`
789
- );
790
- continue;
791
- }
792
- // Bind to a generated name, the export name can't be declared
1124
+ // A declaration under the export's own name would shadow a global of that
1125
+ // name every module of the chunk may read, so a generated name binds it.
793
1126
  const name = toLocalName(exportName);
794
1127
  result.add(
795
1128
  `${runtimeTemplate.renderConst()} ${name} = ${final};\nexport { ${name} as ${toExportName(exportName)} };\n`
@@ -803,6 +1136,43 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
803
1136
  return result;
804
1137
  }
805
1138
 
1139
+ /**
1140
+ * Renders the setters through which hot modules, an update included, write the
1141
+ * bindings the chunk's scope declares; a list per name, as several libraries may.
1142
+ * A module that ran before the chunk loaded hands over its value through its exports.
1143
+ * @param {ChunkLiveExports} live the chunk's live bindings
1144
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
1145
+ * @returns {string} the registrations
1146
+ */
1147
+ _renderLiveExportSetters({ setters, hasAsync }, runtimeTemplate) {
1148
+ if (setters.length === 0) return "";
1149
+ const exports = hasAsync
1150
+ ? `(isAsync ? module.exports[${RuntimeGlobals.asyncModuleExportSymbol}] : module.exports)`
1151
+ : "module.exports";
1152
+ const register = "__webpack_live_register__";
1153
+ return Template.asString([
1154
+ `var ${register} = ${runtimeTemplate.basicFunction(
1155
+ hasAsync ? "id, name, set, key, isAsync" : "id, name, set, key",
1156
+ [
1157
+ `var setters = ${RuntimeGlobals.liveExportSetters} = ${RuntimeGlobals.liveExportSetters} || {};`,
1158
+ "setters = setters[id] = setters[id] || {};",
1159
+ "(setters[name] = setters[name] || []).push(set);",
1160
+ `var module = ${RuntimeGlobals.moduleCache}[id];`,
1161
+ // A module still before its declaration throws, and hands the value over later.
1162
+ `if (module && key) try { set(${exports}[key]); } catch (e) {}`
1163
+ ]
1164
+ )};`,
1165
+ ...setters.map(
1166
+ ([id, name, hoisted, used, isAsync]) =>
1167
+ `${register}(${id}, ${JSON.stringify(name)}, ${runtimeTemplate.basicFunction(
1168
+ "value",
1169
+ `${hoisted} = value;`
1170
+ )}${used ? `, ${JSON.stringify(used)}${isAsync ? ", 1" : ""}` : ""});`
1171
+ ),
1172
+ ""
1173
+ ]);
1174
+ }
1175
+
806
1176
  /**
807
1177
  * Renders module content.
808
1178
  * @param {Source} source source