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
@@ -22,19 +22,20 @@ const {
22
22
  * WebpackRequire
23
23
  * } from "../Compilation"
24
24
  */
25
- const HotUpdateChunk = require("../HotUpdateChunk");
26
- const InitFragment = require("../InitFragment");
27
- const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
25
+ const ConflictingEntryExportsWarning = require("../errors/ConflictingEntryExportsWarning");
26
+ const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
27
+ const UnmergeableEntryExportsError = require("../errors/UnmergeableEntryExportsError");
28
+ const { JAVASCRIPT_TYPE } = require("../module/ModuleSourceTypeConstants");
28
29
  const {
29
30
  JAVASCRIPT_MODULE_TYPE_AUTO,
30
31
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
31
32
  JAVASCRIPT_MODULE_TYPE_ESM,
32
33
  WEBPACK_MODULE_TYPE_RUNTIME
33
- } = require("../ModuleTypeConstants");
34
- const NormalModule = require("../NormalModule");
35
- const RuntimeGlobals = require("../RuntimeGlobals");
36
- const Template = require("../Template");
37
- const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
34
+ } = require("../module/ModuleTypeConstants");
35
+ const NormalModule = require("../module/NormalModule");
36
+ const RuntimeGlobals = require("../runtime/RuntimeGlobals");
37
+ const InitFragment = require("../template/InitFragment");
38
+ const Template = require("../template/Template");
38
39
  const { last, someInIterable } = require("../util/IterableHelpers");
39
40
  const StringXor = require("../util/StringXor");
40
41
  const { compareModulesByFullName } = require("../util/comparators");
@@ -44,42 +45,46 @@ const {
44
45
  addScopeSymbols,
45
46
  findNewName,
46
47
  getAllReferences,
47
- getPathInAst,
48
48
  getUsedNamesInScopeInfo
49
49
  } = require("../util/concatenate");
50
50
  const createHash = require("../util/createHash");
51
51
  const createHooksRegistry = require("../util/createHooksRegistry");
52
52
  const { digestNonNumericOnlyWithFull } = require("../util/nonNumericOnlyHash");
53
+ const { propertyAccess } = require("../util/property");
53
54
  const { removeBOMFromResult } = require("../util/removeBOM");
54
55
  const { intersectRuntime } = require("../util/runtime");
55
56
  const { getAllChunks } = require("./ChunkHelpers");
56
57
  const JavascriptGenerator = require("./JavascriptGenerator");
57
58
  const JavascriptModule = require("./JavascriptModule");
58
59
  const JavascriptParser = require("./JavascriptParser");
60
+ const {
61
+ compilationMergesEntryExports,
62
+ getMergedExports,
63
+ mergedEntryModules,
64
+ mergedEntryModulesOfLibrary
65
+ } = require("./MergedEntryExports");
59
66
  const analyzeScope = require("./ScopeAnalyzer");
60
- const { renderAwaitedEntries } = require("./StartupHelpers");
61
- const { releaseParserCaches } = require("./syntax");
67
+ const {
68
+ entryStartupAwaitsChunks,
69
+ renderAwaitedEntries
70
+ } = require("./StartupHelpers");
71
+ const { releaseParserCaches } = require("./syntax-parser");
62
72
 
63
- /**
64
- * @import {
65
- * Program
66
- * } from "estree"
67
- */
68
73
  /** @import { Source } from "webpack-sources" */
69
74
  /**
70
75
  * @import {
71
76
  * OutputNormalizedWithDefaults as OutputOptions
72
77
  * } from "../config/defaults"
73
78
  */
74
- /** @import Chunk, { ChunkFilenameTemplate } from "../Chunk" */
75
- /** @import ChunkGraph, { EntryModuleWithChunkGroup } from "../ChunkGraph" */
76
- /** @import CodeGenerationResults from "../CodeGenerationResults" */
79
+ /** @import Chunk, { ChunkFilenameTemplate } from "../graph/Chunk" */
80
+ /** @import ChunkGraph, { EntryModuleWithChunkGroup } from "../graph/ChunkGraph" */
81
+ /** @import CodeGenerationResults from "../module/CodeGenerationResults" */
77
82
  /** @import Compiler from "../Compiler" */
78
- /** @import DependencyTemplates from "../DependencyTemplates" */
79
- /** @import Entrypoint from "../Entrypoint" */
80
- /** @import Module, { BuildInfo, CodeGenerationResultData } from "../Module" */
81
- /** @import ModuleGraph from "../ModuleGraph" */
82
- /** @import RuntimeTemplate from "../RuntimeTemplate" */
83
+ /** @import DependencyTemplates from "../template/DependencyTemplates" */
84
+ /** @import Entrypoint from "../graph/Entrypoint" */
85
+ /** @import Module, { BuildInfo, CodeGenerationResultData } from "../module/Module" */
86
+ /** @import ModuleGraph from "../graph/ModuleGraph" */
87
+ /** @import RuntimeTemplate from "../template/RuntimeTemplate" */
83
88
  /** @import WebpackError from "../errors/WebpackError" */
84
89
  /** @import { Range } from "../javascript/JavascriptParser" */
85
90
  /** @import Hash from "../util/Hash" */
@@ -253,6 +258,8 @@ const printGeneratedCodeForStack = (module, code) => {
253
258
  * @property {boolean=} inlined inlined
254
259
  * @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE
255
260
  * @property {boolean=} needExportsDeclaration whether the top-level exports declaration needs to be generated
261
+ * @property {Map<string, string>=} renamedDeclarations the inlined entry's top-level declarations renamed to avoid a collision, original to new name
262
+ * @property {boolean=} exportsAwaited the startup already awaited the last entry, so `__webpack_exports__` holds its settled exports
256
263
  */
257
264
 
258
265
  /**
@@ -362,20 +369,22 @@ const createCompilationHooks = () => ({
362
369
  * in `allUsedNames`. Lets inlined modules be emitted without a per-entry/per-chunk
363
370
  * IIFE by resolving name collisions instead of isolating each module.
364
371
  * @param {InstanceType<typeof import("webpack-sources").ReplaceSource>} source the module source to edit
365
- * @param {Program} ast the parsed module AST
372
+ * @param {Set<number>} shorthandIdentifierStarts where each shorthand property's identifier starts
366
373
  * @param {Variable} variable the top-level variable to check/rename
367
374
  * @param {string} moduleIdentifier the module identifier (for scope caching)
368
375
  * @param {string} readableIdentifier the readable module identifier (for new names)
369
376
  * @param {Set<string>} allUsedNames names already used in the shared scope (mutated)
377
+ * @param {Map<string, string>} renamedDeclarations the declarations renamed so far, original to new name (mutated)
370
378
  * @returns {void}
371
379
  */
372
380
  const renameInlinedModuleVariable = (
373
381
  source,
374
- ast,
382
+ shorthandIdentifierStarts,
375
383
  variable,
376
384
  moduleIdentifier,
377
385
  readableIdentifier,
378
- allUsedNames
386
+ allUsedNames,
387
+ renamedDeclarations
379
388
  ) => {
380
389
  /** @type {UsedNamesInScopeInfo} */
381
390
  const usedNamesInScopeInfo = new Map();
@@ -406,18 +415,12 @@ const renameInlinedModuleVariable = (
406
415
  readableIdentifier
407
416
  );
408
417
  allUsedNames.add(newName);
418
+ renamedDeclarations.set(name, newName);
409
419
  for (const identifier of allIdentifiers) {
410
420
  const r = /** @type {Range} */ (identifier.range);
411
- const path = getPathInAst(ast, identifier);
412
- if (path && path.length > 1) {
413
- const maybeProperty =
414
- path[1].type === "AssignmentPattern" && path[1].left === path[0]
415
- ? path[2]
416
- : path[1];
417
- if (maybeProperty.type === "Property" && maybeProperty.shorthand) {
418
- source.insert(r[1], `: ${newName}`);
419
- continue;
420
- }
421
+ if (shorthandIdentifierStarts.has(r[0])) {
422
+ source.insert(r[1], `: ${newName}`);
423
+ continue;
421
424
  }
422
425
  source.replace(r[0], r[1] - 1, newName);
423
426
  }
@@ -427,13 +430,28 @@ const renameInlinedModuleVariable = (
427
430
 
428
431
  const PLUGIN_NAME = "JavascriptModulesPlugin";
429
432
 
430
- /** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
433
+ // Drops the redundant string/buffer copy of a source, keeping its map: a
434
+ // parsed map is far more expensive to rebuild than a `toString`.
435
+ const CLEAR_SOURCE_COPIES = { maps: false, source: true };
436
+
437
+ /** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean, exportsAwaited: boolean }} Bootstrap */
438
+ /** @typedef {{ source: Source, needModule: boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean, next: ModuleFactoryCacheEntry | undefined }} ModuleFactoryCacheEntry */
439
+
440
+ /**
441
+ * @typedef {object} RenamedInlinedModules
442
+ * @property {Map<Module, Source>} sources each inlined module's rendered source, renamed where it collided
443
+ * @property {Map<Module, Map<string, string>>} renamedDeclarations each renamed module's declarations, original to new name
444
+ */
431
445
 
432
446
  class JavascriptModulesPlugin {
433
447
  constructor(options = {}) {
434
448
  this.options = options;
435
- /** @type {WeakMap<Source, { source: Source, needModule: boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
449
+ /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
436
450
  this._moduleFactoryCache = new WeakMap();
451
+ /** @type {WeakMap<Source, Set<string>>} */
452
+ this._renderedFreeNamesCache = new WeakMap();
453
+ /** @type {WeakMap<CodeGenerationResults, Set<Source>>} */
454
+ this._renderedModuleFactorySources = new WeakMap();
437
455
  }
438
456
 
439
457
  /**
@@ -446,6 +464,9 @@ class JavascriptModulesPlugin {
446
464
  // drop them when the build ends so an idle process retains no parser state
447
465
  compiler.hooks.done.tap(PLUGIN_NAME, releaseParserCaches);
448
466
  compiler.hooks.failed.tap(PLUGIN_NAME, releaseParserCaches);
467
+ compiler.hooks.afterEmit.tap(PLUGIN_NAME, (compilation) => {
468
+ this._releaseRenderedModuleFactorySources(compilation);
469
+ });
449
470
  compiler.hooks.compilation.tap(
450
471
  PLUGIN_NAME,
451
472
  (compilation, { normalModuleFactory }) => {
@@ -521,7 +542,7 @@ class JavascriptModulesPlugin {
521
542
  codeGenerationResults
522
543
  } = options;
523
544
 
524
- const hotUpdateChunk = chunk instanceof HotUpdateChunk ? chunk : null;
545
+ const hotUpdateChunk = chunk.isHotUpdate() ? chunk : null;
525
546
  const filenameTemplate =
526
547
  JavascriptModulesPlugin.getChunkFilenameTemplate(
527
548
  chunk,
@@ -690,16 +711,93 @@ class JavascriptModulesPlugin {
690
711
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
691
712
  PLUGIN_NAME,
692
713
  (chunk, set, { chunkGraph }) => {
693
- if (
694
- !set.has(RuntimeGlobals.startupNoDefault) &&
695
- chunkGraph.hasChunkEntryDependentChunks(chunk)
696
- ) {
714
+ if (set.has(RuntimeGlobals.startupNoDefault)) return;
715
+ if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
697
716
  set.add(RuntimeGlobals.onChunksLoaded);
698
717
  set.add(RuntimeGlobals.exports);
699
718
  set.add(RuntimeGlobals.require);
719
+ return;
720
+ }
721
+ const merged = mergedEntryModules(chunk, chunkGraph, compilation);
722
+ if (merged === undefined) return;
723
+ const { exports, namespace } = getMergedExports(
724
+ merged,
725
+ compilation.moduleGraph,
726
+ chunk.runtime
727
+ );
728
+ set.add(RuntimeGlobals.exports);
729
+ if (namespace) set.add(RuntimeGlobals.makeNamespaceObject);
730
+ if (exports.length > 0) {
731
+ set.add(RuntimeGlobals.definePropertyGetters);
732
+ set.add(RuntimeGlobals.definePropertyGettersFromArray);
700
733
  }
701
734
  }
702
735
  );
736
+ compilation.hooks.afterChunks.tap(PLUGIN_NAME, (chunks) => {
737
+ if (!compilationMergesEntryExports(compilation)) return;
738
+ const { chunkGraph, moduleGraph, runtimeTemplate } = compilation;
739
+ for (const chunk of chunks) {
740
+ const merged = mergedEntryModules(chunk, chunkGraph, compilation);
741
+ if (merged === undefined) continue;
742
+ // Merging reads each entry back right after it ran, which
743
+ // only the bootstrap of the runtime-carrying chunk can do.
744
+ if (
745
+ !chunk.hasRuntime() ||
746
+ chunkGraph.hasChunkEntryDependentChunks(chunk) ||
747
+ entryStartupAwaitsChunks(chunkGraph, chunk)
748
+ ) {
749
+ compilation.errors.push(
750
+ new UnmergeableEntryExportsError(
751
+ chunk,
752
+ "they don't all run when this chunk starts up"
753
+ )
754
+ );
755
+ continue;
756
+ }
757
+ // An async entry hands back a promise the merged object would
758
+ // read names off, so it has to be awaited before the merge.
759
+ if (
760
+ !(
761
+ runtimeTemplate.isModule() &&
762
+ runtimeTemplate.supportsTopLevelAwait()
763
+ ) &&
764
+ merged.some((module) => moduleGraph.isAsync(module))
765
+ ) {
766
+ compilation.errors.push(
767
+ new UnmergeableEntryExportsError(
768
+ chunk,
769
+ "one of them is async and this output can't await it at the top level (see 'output.environment.topLevelAwait')"
770
+ )
771
+ );
772
+ continue;
773
+ }
774
+ const { conflicting, unknownExports } = getMergedExports(
775
+ merged,
776
+ moduleGraph,
777
+ chunk.runtime
778
+ );
779
+ if (unknownExports.length > 0) {
780
+ compilation.errors.push(
781
+ new UnmergeableEntryExportsError(
782
+ chunk,
783
+ `webpack can't tell what ${unknownExports
784
+ .map((module) =>
785
+ module.readableIdentifier(
786
+ runtimeTemplate.requestShortener
787
+ )
788
+ )
789
+ .join(", ")} exports`
790
+ )
791
+ );
792
+ continue;
793
+ }
794
+ if (conflicting.length > 0) {
795
+ compilation.warnings.push(
796
+ new ConflictingEntryExportsWarning(chunk, conflicting)
797
+ );
798
+ }
799
+ }
800
+ });
703
801
  compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
704
802
  const source =
705
803
  options.codeGenerationResult.sources.get(JAVASCRIPT_TYPE);
@@ -777,7 +875,7 @@ class JavascriptModulesPlugin {
777
875
  static getChunkFilenameTemplate(chunk, outputOptions) {
778
876
  if (chunk.filenameTemplate) {
779
877
  return chunk.filenameTemplate;
780
- } else if (chunk instanceof HotUpdateChunk) {
878
+ } else if (chunk.isHotUpdate()) {
781
879
  return outputOptions.hotUpdateChunkFilename;
782
880
  }
783
881
  const entryOptions = chunk.getEntryOptions();
@@ -791,6 +889,39 @@ class JavascriptModulesPlugin {
791
889
  return outputOptions.chunkFilename;
792
890
  }
793
891
 
892
+ /**
893
+ * Releases the flattened text the module factory sources memoized while the
894
+ * chunk assets were read. Clearing is only a hint, so a later read re-renders.
895
+ * @param {Compilation} compilation the compilation that emitted its assets
896
+ * @returns {void}
897
+ */
898
+ _releaseRenderedModuleFactorySources(compilation) {
899
+ // A child compiler never inherits `afterEmit` and its assets are copied
900
+ // into this compilation, which keeps the child reachable through
901
+ // `children`, so the parent's emit is where its sources are released too.
902
+ for (const child of compilation.children) {
903
+ this._releaseRenderedModuleFactorySources(child);
904
+ }
905
+ const { codeGenerationResults } = compilation;
906
+ if (codeGenerationResults === undefined) return;
907
+ const renderedSources = this._renderedModuleFactorySources.get(
908
+ codeGenerationResults
909
+ );
910
+ if (renderedSources === undefined) return;
911
+ this._renderedModuleFactorySources.delete(codeGenerationResults);
912
+ // WHY: the factory sources wrap the code generation ones, so one walk with
913
+ // a shared `visited` clears both layers and reaches a source shared by
914
+ // several chunks once. Feature-detected, since `clearCache` landed in
915
+ // webpack-sources 3.5 and a plugin may hand us an older `Source`.
916
+ /** @type {WeakSet<Source>} */
917
+ const visited = new WeakSet();
918
+ for (const source of renderedSources) {
919
+ if (typeof source.clearCache === "function") {
920
+ source.clearCache(CLEAR_SOURCE_COPIES, visited);
921
+ }
922
+ }
923
+ }
924
+
794
925
  /**
795
926
  * Renders the newly generated source from rendering.
796
927
  * @param {Module} module the rendered module
@@ -843,54 +974,41 @@ class JavascriptModulesPlugin {
843
974
  const needStrict =
844
975
  /** @type {BuildInfo} */
845
976
  (module.buildInfo).strict && !strictMode;
977
+ const renderShorthand =
978
+ renderInObject === true && runtimeTemplate.supportsMethodShorthand();
846
979
  const cacheEntry = this._moduleFactoryCache.get(
847
980
  moduleSourcePostContent
848
981
  );
849
- const renderShorthand =
850
- renderInObject === true && runtimeTemplate.supportsMethodShorthand();
851
- /** @type {Source} */
982
+ /** @type {Source | undefined} */
852
983
  let source;
853
- if (
854
- cacheEntry &&
855
- cacheEntry.needModule === needModule &&
856
- cacheEntry.needExports === needExports &&
857
- cacheEntry.needRequire === needRequire &&
858
- cacheEntry.needThisAsExports === needThisAsExports &&
859
- cacheEntry.needStrict === needStrict &&
860
- cacheEntry.renderShorthand === renderShorthand
861
- ) {
862
- source = cacheEntry.source;
863
- } else {
864
- const factorySource = new ConcatSource();
865
- /** @type {string[]} */
866
- const args = [];
867
- if (needExports || needRequire || needModule) {
868
- args.push(
869
- needModule
870
- ? module.moduleArgument
871
- : `__unused_webpack_${module.moduleArgument}`
872
- );
873
- }
874
- if (needExports || needRequire) {
875
- args.push(
876
- needExports
877
- ? module.exportsArgument
878
- : `__unused_webpack_${module.exportsArgument}`
879
- );
880
- }
881
- if (needRequire) args.push(RuntimeGlobals.require);
882
-
883
- if (renderShorthand) {
884
- // we can optimize function to methodShorthand if render module factory in object
885
- factorySource.add(`(${args.join(", ")}) {\n\n`);
886
- } else if (
887
- !needThisAsExports &&
888
- runtimeTemplate.supportsArrowFunction()
984
+ // The chunk renders a method shorthand where the entry-IIFE rename
985
+ // needs a standalone function, so a source can have both shapes.
986
+ for (let entry = cacheEntry; entry; entry = entry.next) {
987
+ if (
988
+ entry.needModule === needModule &&
989
+ entry.needExports === needExports &&
990
+ entry.needRequire === needRequire &&
991
+ entry.needThisAsExports === needThisAsExports &&
992
+ entry.needStrict === needStrict &&
993
+ entry.renderShorthand === renderShorthand
889
994
  ) {
890
- factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
891
- } else {
892
- factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
995
+ source = entry.source;
996
+ break;
893
997
  }
998
+ }
999
+ if (source === undefined) {
1000
+ const factorySource = new ConcatSource();
1001
+ const header = runtimeTemplate.moduleFactoryFnHeader({
1002
+ module,
1003
+ needModule,
1004
+ needExports,
1005
+ needRequire,
1006
+ needThisAsExports,
1007
+ shorthand: renderShorthand
1008
+ });
1009
+ factorySource.add(
1010
+ renderShorthand ? `${header}\n\n` : `/***/ (${header}\n\n`
1011
+ );
894
1012
 
895
1013
  if (needStrict) {
896
1014
  factorySource.add('"use strict";\n');
@@ -905,9 +1023,23 @@ class JavascriptModulesPlugin {
905
1023
  needRequire,
906
1024
  needThisAsExports,
907
1025
  needStrict,
908
- renderShorthand
1026
+ renderShorthand,
1027
+ next: cacheEntry
909
1028
  });
910
1029
  }
1030
+ // Also on a cache hit: this compilation reads the assets again, so it
1031
+ // memoizes into a source an earlier one already released.
1032
+ let renderedSources = this._renderedModuleFactorySources.get(
1033
+ codeGenerationResults
1034
+ );
1035
+ if (renderedSources === undefined) {
1036
+ renderedSources = new Set();
1037
+ this._renderedModuleFactorySources.set(
1038
+ codeGenerationResults,
1039
+ renderedSources
1040
+ );
1041
+ }
1042
+ renderedSources.add(source);
911
1043
  moduleSourcePostContainer = tryRunOrWebpackError(
912
1044
  () => hooks.renderModuleContainer.call(source, module, renderContext),
913
1045
  "JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer"
@@ -967,10 +1099,8 @@ class JavascriptModulesPlugin {
967
1099
  // ESM entry chunk whose runtime lives in a separate chunk: inline the
968
1100
  // single entry module at the top level (instead of the module registry)
969
1101
  // so its own top-level declarations stay live ESM bindings for consumers.
970
- const inlinedEntryModule = this._getEsmEntryModuleToInline(
971
- renderContext,
972
- allModules
973
- );
1102
+ const inlinedEntryModule =
1103
+ JavascriptModulesPlugin._getEsmEntryModuleToInline(renderContext);
974
1104
  let registryModules = allModules;
975
1105
  if (inlinedEntryModule) {
976
1106
  const inlinedEntrySource = this.renderModule(
@@ -1036,18 +1166,20 @@ class JavascriptModulesPlugin {
1036
1166
  * its exports as live ESM bindings. Only a self-contained ESM entry whose
1037
1167
  * top-level declarations can be lifted into the chunk scope qualifies;
1038
1168
  * otherwise `undefined` is returned and the registry path is used.
1039
- * @param {RenderContext} renderContext render context
1040
- * @param {Module[]} allModules all javascript modules of the chunk
1169
+ *
1170
+ * Static so that a plugin can decide before the chunk is rendered what it may
1171
+ * leave out of the inlined entry's source and put back in the registry.
1172
+ * @param {Pick<RenderContext, "chunk" | "chunkGraph" | "moduleGraph" | "runtimeTemplate" | "codeGenerationResults">} context chunk, graphs and code generation results
1041
1173
  * @returns {Module | undefined} the entry module to inline, if any
1042
1174
  */
1043
- _getEsmEntryModuleToInline(renderContext, allModules) {
1175
+ static _getEsmEntryModuleToInline(context) {
1044
1176
  const {
1045
1177
  chunk,
1046
1178
  chunkGraph,
1047
1179
  moduleGraph,
1048
1180
  runtimeTemplate,
1049
1181
  codeGenerationResults
1050
- } = renderContext;
1182
+ } = context;
1051
1183
 
1052
1184
  // Only a single ESM entry whose runtime lives in a separate chunk.
1053
1185
  if (
@@ -1197,9 +1329,7 @@ class JavascriptModulesPlugin {
1197
1329
  const chunkModules = Template.renderChunkModules(
1198
1330
  chunkRenderContext,
1199
1331
  inlinedModules
1200
- ? allModules.filter(
1201
- (m) => !(/** @type {Set<Module>} */ (inlinedModules).has(m))
1202
- )
1332
+ ? allModules.filter((m) => !inlinedModules.has(m))
1203
1333
  : allModules,
1204
1334
  (module, renderInObject) =>
1205
1335
  this.renderModule(
@@ -1272,7 +1402,7 @@ class JavascriptModulesPlugin {
1272
1402
  const startupSource = new ConcatSource();
1273
1403
 
1274
1404
  const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
1275
- /** @type {Map<Module, Source> | false} */
1405
+ /** @type {RenamedInlinedModules | false} */
1276
1406
  let renamedInlinedModule = false;
1277
1407
  let inlinedInIIFE = false;
1278
1408
 
@@ -1316,7 +1446,7 @@ class JavascriptModulesPlugin {
1316
1446
  }
1317
1447
 
1318
1448
  const renderedModule = renamedInlinedModule
1319
- ? renamedInlinedModule.get(m)
1449
+ ? renamedInlinedModule.sources.get(m)
1320
1450
  : this.renderModule(
1321
1451
  m,
1322
1452
  {
@@ -1373,7 +1503,10 @@ class JavascriptModulesPlugin {
1373
1503
  ...renderContext,
1374
1504
  inlined: true,
1375
1505
  inlinedInIIFE,
1376
- needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports)
1506
+ needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports),
1507
+ renamedDeclarations: renamedInlinedModule
1508
+ ? renamedInlinedModule.renamedDeclarations.get(lastInlinedModule)
1509
+ : undefined
1377
1510
  };
1378
1511
  let renderedStartup = hooks.renderStartup.call(
1379
1512
  startupSource,
@@ -1435,7 +1568,8 @@ class JavascriptModulesPlugin {
1435
1568
  {
1436
1569
  ...renderContext,
1437
1570
  inlined: false,
1438
- needExportsDeclaration: true
1571
+ needExportsDeclaration: true,
1572
+ exportsAwaited: bootstrap.exportsAwaited
1439
1573
  }
1440
1574
  ),
1441
1575
  toSource(bootstrap.afterStartup, "webpack/after-startup"),
@@ -1547,14 +1681,15 @@ class JavascriptModulesPlugin {
1547
1681
  requireFunction || interceptModuleExecution || moduleUsed;
1548
1682
 
1549
1683
  /**
1550
- * @type {{ startup: string[], beforeStartup: string[], header: string[], afterStartup: string[], allowInlineStartup: boolean }}
1684
+ * @type {Bootstrap}
1551
1685
  */
1552
1686
  const result = {
1553
1687
  header: [],
1554
1688
  beforeStartup: [],
1555
1689
  startup: [],
1556
1690
  afterStartup: [],
1557
- allowInlineStartup: true
1691
+ allowInlineStartup: true,
1692
+ exportsAwaited: false
1558
1693
  };
1559
1694
 
1560
1695
  const { header: buf, startup, beforeStartup, afterStartup } = result;
@@ -1658,22 +1793,32 @@ class JavascriptModulesPlugin {
1658
1793
  entryOptions && entryOptions.library !== undefined
1659
1794
  ? entryOptions.library
1660
1795
  : runtimeTemplate.outputOptions.library;
1661
- // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1662
- const awaitedByLibrary =
1663
- library !== undefined && library.type === "module";
1796
+ const mergedModules = mergedEntryModulesOfLibrary(
1797
+ library,
1798
+ chunk,
1799
+ chunkGraph
1800
+ );
1801
+ const merge = mergedModules !== undefined;
1664
1802
  // `await` is legal only at an ESM chunk's top level, never in the
1665
1803
  // startup function below, and only where the target parses it.
1666
1804
  const canAwaitEntry =
1667
1805
  runtimeTemplate.isModule() &&
1668
1806
  runtimeTemplate.supportsTopLevelAwait() &&
1669
- !awaitedByLibrary &&
1670
1807
  !runtimeRequirements.has(RuntimeGlobals.startup) &&
1671
1808
  !(
1672
1809
  runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1673
1810
  runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1674
1811
  );
1812
+ if (merge && result.allowInlineStartup) {
1813
+ buf2.push(
1814
+ "// The exports of the entry modules are merged so they can't be inlined"
1815
+ );
1816
+ result.allowInlineStartup = false;
1817
+ }
1675
1818
  /** @type {string[]} */
1676
1819
  const awaitedEntries = [];
1820
+ /** @type {Map<Module, string>} */
1821
+ const mergedTargets = new Map();
1677
1822
  let i = jsEntries.length;
1678
1823
  for (const [entryModule, entrypoint] of jsEntries) {
1679
1824
  const chunks =
@@ -1702,6 +1847,12 @@ class JavascriptModulesPlugin {
1702
1847
  buf2.push(
1703
1848
  "// This entry module is referenced by other modules so it can't be inlined"
1704
1849
  );
1850
+ // Its exports are then read off the exports object, and a property
1851
+ // read is not something a consumer of the bundle can drop.
1852
+ runtimeTemplate.analyzableBailout(
1853
+ entryModule,
1854
+ "the entry is referenced by other modules, so its exports are read off the exports object and a consumer cannot drop them"
1855
+ );
1705
1856
  result.allowInlineStartup = false;
1706
1857
  }
1707
1858
 
@@ -1785,24 +1936,32 @@ class JavascriptModulesPlugin {
1785
1936
  // `onChunksLoaded` wrapper, a top-level `await` bridge or other
1786
1937
  // codegen, so it is never declared as a constant.
1787
1938
  const exportsDecl = runtimeTemplate.renderLet();
1939
+ // Merging reads every entry back, so each one needs a variable of
1940
+ // its own; without it only the last entry (`i === 0`) is exported.
1941
+ const target =
1942
+ i === 0 && !merge
1943
+ ? RuntimeGlobals.exports
1944
+ : `${RuntimeGlobals.exports}_${i}`;
1945
+ if (merge) mergedTargets.set(entryModule, target);
1788
1946
  if (chunks.length > 0) {
1789
1947
  const awaitEntry =
1790
1948
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1791
- const target =
1792
- i === 0
1793
- ? RuntimeGlobals.exports
1794
- : `${RuntimeGlobals.exports}_${i}`;
1795
1949
  // The wrapper hands back nothing until the flush below runs the
1796
- // entry, so an awaited one is caught by the entry call itself.
1797
- if (awaitEntry && i !== 0) buf2.push(`${exportsDecl} ${target};`);
1950
+ // entry, so a captured one is caught by the entry call itself.
1951
+ const capture = awaitEntry || merge;
1952
+ if (capture && target !== RuntimeGlobals.exports) {
1953
+ buf2.push(`${exportsDecl} ${target};`);
1954
+ }
1798
1955
  const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1799
1956
  buf2.push(
1800
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1801
- RuntimeGlobals.onChunksLoaded
1802
- }(undefined, ${JSON.stringify(
1957
+ `${
1958
+ i === 0 && !merge
1959
+ ? `${exportsDecl} ${RuntimeGlobals.exports} = `
1960
+ : ""
1961
+ }${RuntimeGlobals.onChunksLoaded}(undefined, ${JSON.stringify(
1803
1962
  chunks.map((c) => c.id)
1804
1963
  )}, ${runtimeTemplate.returningFunction(
1805
- awaitEntry ? `(${target} = ${entryCall})` : entryCall
1964
+ capture ? `(${target} = ${entryCall})` : entryCall
1806
1965
  )})`
1807
1966
  );
1808
1967
  if (awaitEntry) awaitedEntries.push(target);
@@ -1811,18 +1970,14 @@ class JavascriptModulesPlugin {
1811
1970
  // which orphans its rejection.
1812
1971
  const awaitEntry =
1813
1972
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1814
- const target =
1815
- i === 0
1816
- ? RuntimeGlobals.exports
1817
- : `${RuntimeGlobals.exports}_${i}`;
1818
- const needsDecl = i === 0 || awaitEntry;
1973
+ const needsDecl = i === 0 || awaitEntry || merge;
1819
1974
  buf2.push(
1820
1975
  `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1821
1976
  );
1822
1977
  if (awaitEntry) awaitedEntries.push(target);
1823
1978
  } else {
1824
- if (i === 0) {
1825
- buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
1979
+ if (i === 0 || merge) {
1980
+ buf2.push(`${exportsDecl} ${target} = {};`);
1826
1981
  }
1827
1982
  const needThisAsExports = entryRuntimeRequirements.has(
1828
1983
  RuntimeGlobals.thisAsExports
@@ -1834,7 +1989,7 @@ class JavascriptModulesPlugin {
1834
1989
  requireScopeUsed ||
1835
1990
  entryRuntimeRequirements.has(RuntimeGlobals.exports)
1836
1991
  ) {
1837
- const exportsArg = i === 0 ? RuntimeGlobals.exports : "{}";
1992
+ const exportsArg = i === 0 || merge ? target : "{}";
1838
1993
  args.push("0", exportsArg);
1839
1994
  if (requireScopeUsed) {
1840
1995
  args.push(RuntimeGlobals.require);
@@ -1846,7 +2001,7 @@ class JavascriptModulesPlugin {
1846
2001
  if (needThisAsExports) {
1847
2002
  const comma = args.length ? "," : "";
1848
2003
  return `__webpack_modules__[${moduleIdExpr}].call(${
1849
- RuntimeGlobals.exports
2004
+ merge ? target : RuntimeGlobals.exports
1850
2005
  }${comma}${args.join(",")});`;
1851
2006
  }
1852
2007
  return `__webpack_modules__[${moduleIdExpr}](${args.join(
@@ -1859,10 +2014,43 @@ class JavascriptModulesPlugin {
1859
2014
  }
1860
2015
  if (runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)) {
1861
2016
  buf2.push(
1862
- `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
2017
+ merge
2018
+ ? `${RuntimeGlobals.onChunksLoaded}();`
2019
+ : `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1863
2020
  );
1864
2021
  }
1865
2022
  buf2.push(...renderAwaitedEntries(awaitedEntries));
2023
+ result.exportsAwaited = awaitedEntries.includes(RuntimeGlobals.exports);
2024
+ // Every entry has run by now, and the getters below read through to
2025
+ // whichever one provides each name.
2026
+ if (merge) {
2027
+ const { exports, namespace } = getMergedExports(
2028
+ mergedModules,
2029
+ moduleGraph,
2030
+ chunk.runtime
2031
+ );
2032
+ buf2.push(
2033
+ `${runtimeTemplate.renderLet()} ${RuntimeGlobals.exports} = {};`
2034
+ );
2035
+ if (namespace) {
2036
+ buf2.push(
2037
+ `${RuntimeGlobals.makeNamespaceObject}(${RuntimeGlobals.exports});`
2038
+ );
2039
+ }
2040
+ if (exports.length > 0) {
2041
+ const bindings = exports.map(
2042
+ ({ name, module, usedName }) =>
2043
+ `${JSON.stringify(name)}, ${runtimeTemplate.returningFunction(
2044
+ `${mergedTargets.get(module)}${propertyAccess([usedName])}`
2045
+ )}`
2046
+ );
2047
+ buf2.push(
2048
+ `${RuntimeGlobals.definePropertyGetters}(${
2049
+ RuntimeGlobals.exports
2050
+ }, [${bindings.join(", ")}]);`
2051
+ );
2052
+ }
2053
+ }
1866
2054
  if (
1867
2055
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1868
2056
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
@@ -2105,7 +2293,7 @@ class JavascriptModulesPlugin {
2105
2293
  * @param {CompilationHooks} hooks hooks
2106
2294
  * @param {boolean | undefined} allStrict allStrict
2107
2295
  * @param {boolean} hasChunkModules hasChunkModules
2108
- * @returns {Map<Module, Source> | false} renamed inlined modules
2296
+ * @returns {RenamedInlinedModules | false} renamed inlined modules
2109
2297
  */
2110
2298
  _getRenamedInlineModule(
2111
2299
  compilation,
@@ -2131,18 +2319,22 @@ class JavascriptModulesPlugin {
2131
2319
 
2132
2320
  /** @type {Map<Module, Source>} */
2133
2321
  const renamedInlinedModules = new Map();
2322
+ /** @type {Map<Module, Map<string, string>>} */
2323
+ const renamedDeclarations = new Map();
2134
2324
  const { runtimeTemplate } = renderContext;
2135
2325
 
2136
- /** @typedef {{ source: Source, module: Module, ast: Program, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
2326
+ /** @typedef {{ source: Source, module: Module, shorthandIdentifierStarts: Set<number>, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
2137
2327
  /** @type {Map<Module, Info>} */
2138
2328
  const inlinedModulesToInfo = new Map();
2139
2329
  /** @type {Set<string>} */
2140
2330
  const nonInlinedModuleThroughIdentifiers = new Set();
2141
2331
  /** @type {Map<Module, Source>} */
2142
2332
  const inlinedModuleSources = new Map();
2333
+ const { codeGenerationResults, chunk } = renderContext;
2143
2334
 
2144
2335
  for (const m of allModules) {
2145
2336
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
2337
+
2146
2338
  const moduleSource = this.renderModule(
2147
2339
  m,
2148
2340
  {
@@ -2160,6 +2352,47 @@ class JavascriptModulesPlugin {
2160
2352
  inlinedModuleSources.set(m, moduleSource);
2161
2353
  continue;
2162
2354
  }
2355
+ // The render hooks add free names, so only the source they left behind
2356
+ // can be analysed; keying on it lets a rebuild skip the parse.
2357
+ let freeNames = this._renderedFreeNamesCache.get(moduleSource);
2358
+
2359
+ if (freeNames === undefined) {
2360
+ const code = /** @type {string} */ (moduleSource.source());
2361
+
2362
+ const { experiments } = compilation.options;
2363
+ const { ast } = JavascriptParser._parse(
2364
+ code,
2365
+ {
2366
+ sourceType: "auto",
2367
+ ranges: true,
2368
+ // generated code contains phase imports when the experiments are on
2369
+ importPhases: Boolean(
2370
+ experiments.deferImport || experiments.sourceImport
2371
+ )
2372
+ },
2373
+ JavascriptParser._getModuleParseFunction(compilation, m)
2374
+ );
2375
+
2376
+ const analysis = analyzeScope(ast);
2377
+
2378
+ freeNames = new Set();
2379
+ for (const ref of analysis.unresolvedReferences) {
2380
+ freeNames.add(ref.identifier.name);
2381
+ }
2382
+ this._renderedFreeNamesCache.set(moduleSource, freeNames);
2383
+ }
2384
+
2385
+ for (const name of freeNames) {
2386
+ nonInlinedModuleThroughIdentifiers.add(name);
2387
+ }
2388
+ }
2389
+
2390
+ /**
2391
+ * @param {Module} module the inlined entry
2392
+ * @param {Source} moduleSource its rendered source
2393
+ * @returns {Info} scope information for renaming
2394
+ */
2395
+ const getModuleInfo = (module, moduleSource) => {
2163
2396
  const code = /** @type {string} */ (moduleSource.source());
2164
2397
 
2165
2398
  const { experiments } = compilation.options;
@@ -2173,35 +2406,71 @@ class JavascriptModulesPlugin {
2173
2406
  experiments.deferImport || experiments.sourceImport
2174
2407
  )
2175
2408
  },
2176
- JavascriptParser._getModuleParseFunction(compilation, m)
2409
+ JavascriptParser._getModuleParseFunction(compilation, module)
2177
2410
  );
2178
2411
 
2179
2412
  const analysis = analyzeScope(ast);
2180
2413
 
2181
- for (const ref of analysis.unresolvedReferences) {
2182
- nonInlinedModuleThroughIdentifiers.add(ref.identifier.name);
2414
+ const moduleScope = analysis.moduleScope;
2415
+ return {
2416
+ source: moduleSource,
2417
+ shorthandIdentifierStarts: analysis.shorthandIdentifierStarts,
2418
+ module,
2419
+ variables: new Set(moduleScope.variables),
2420
+ through: new Set(analysis.unresolvedReferences),
2421
+ usedInNonInlined: new Set(),
2422
+ moduleScope
2423
+ };
2424
+ };
2425
+
2426
+ /**
2427
+ * @param {Info} info scope information for the entry
2428
+ * @param {Set<string>} usedNames names unavailable to its declarations
2429
+ * @returns {void}
2430
+ */
2431
+ const renameModule = (info, usedNames) => {
2432
+ const source = new ReplaceSource(info.source);
2433
+ /** @type {Map<string, string>} */
2434
+ const renamed = new Map();
2435
+ for (const variable of info.variables) {
2436
+ renameInlinedModuleVariable(
2437
+ source,
2438
+ info.shorthandIdentifierStarts,
2439
+ variable,
2440
+ info.module.identifier(),
2441
+ info.module.readableIdentifier(runtimeTemplate.requestShortener),
2442
+ usedNames,
2443
+ renamed
2444
+ );
2183
2445
  }
2184
- }
2446
+ renamedInlinedModules.set(info.module, source);
2447
+ if (renamed.size > 0) renamedDeclarations.set(info.module, renamed);
2448
+ };
2185
2449
 
2186
- // Codegen reports each inlined entry's rendered top-level declarations and
2187
- // free names, so where nothing collides there is no renaming to do and the
2188
- // entries need not be parsed at all.
2450
+ // Codegen reports declarations and free names; only entries whose names
2451
+ // collide need parsing to locate their declarations and references.
2189
2452
  fastPath: {
2190
- const { codeGenerationResults, chunk } = renderContext;
2191
2453
  /** @type {Set<string>} */
2192
2454
  const usedNames = new Set(nonInlinedModuleThroughIdentifiers);
2193
2455
  for (const name of RESERVED_NAMES) usedNames.add(name);
2194
- /** @type {Set<string>[]} */
2195
- const declarationsList = [];
2196
- for (const m of inlinedModuleSources.keys()) {
2456
+ /** @type {Map<Module, Set<string>>} */
2457
+ const declarationsByModule = new Map();
2458
+ let canRenameSelectively = isMultipleEntries;
2459
+ for (const [m, moduleSource] of inlinedModuleSources) {
2197
2460
  if (!codeGenerationResults.has(m, chunk.runtime)) break fastPath;
2198
2461
  const result = codeGenerationResults.get(m, chunk.runtime);
2199
2462
  const data = result.data;
2200
2463
  if (!data) break fastPath;
2201
2464
  const declarations = data.get("topLevelDeclarations");
2202
2465
  if (!declarations) break fastPath;
2203
- declarationsList.push(declarations);
2466
+ declarationsByModule.set(m, declarations);
2204
2467
  if (!isMultipleEntries) continue;
2468
+ // Mixing cached names with fresh scope analysis requires unchanged
2469
+ // sources and the same parser that produced the cached names.
2470
+ canRenameSelectively =
2471
+ canRenameSelectively &&
2472
+ result.sources.get(JAVASCRIPT_TYPE) === moduleSource &&
2473
+ !JavascriptParser._getModuleParseFunction(compilation, m);
2205
2474
  // Entries share the startup scope: an entry's free names and runtime
2206
2475
  // globals must not be shadowed by another entry's declarations.
2207
2476
  const freeNames = data.get("freeNames");
@@ -2214,49 +2483,26 @@ class JavascriptModulesPlugin {
2214
2483
  }
2215
2484
  }
2216
2485
  }
2217
- for (const declarations of declarationsList) {
2218
- for (const name of declarations) {
2219
- if (usedNames.has(name)) break fastPath;
2486
+ for (const [m, declarations] of declarationsByModule) {
2487
+ const moduleSource = /** @type {Source} */ (
2488
+ inlinedModuleSources.get(m)
2489
+ );
2490
+ if (someInIterable(declarations, (name) => usedNames.has(name))) {
2491
+ if (!canRenameSelectively) break fastPath;
2492
+ renameModule(getModuleInfo(m, moduleSource), usedNames);
2493
+ } else {
2494
+ for (const name of declarations) usedNames.add(name);
2495
+ renamedInlinedModules.set(m, moduleSource);
2220
2496
  }
2221
- // earlier entries' declarations join the used set so later entries
2222
- // are checked against them
2223
- for (const name of declarations) usedNames.add(name);
2224
- }
2225
- for (const [m, moduleSource] of inlinedModuleSources) {
2226
- renamedInlinedModules.set(m, moduleSource);
2227
2497
  }
2228
- return renamedInlinedModules;
2498
+ return {
2499
+ sources: renamedInlinedModules,
2500
+ renamedDeclarations
2501
+ };
2229
2502
  }
2230
2503
 
2231
2504
  for (const [m, moduleSource] of inlinedModuleSources) {
2232
- const code = /** @type {string} */ (moduleSource.source());
2233
-
2234
- const { experiments } = compilation.options;
2235
- const { ast } = JavascriptParser._parse(
2236
- code,
2237
- {
2238
- sourceType: "auto",
2239
- ranges: true,
2240
- // generated code contains phase imports when the experiments are on
2241
- importPhases: Boolean(
2242
- experiments.deferImport || experiments.sourceImport
2243
- )
2244
- },
2245
- JavascriptParser._getModuleParseFunction(compilation, m)
2246
- );
2247
-
2248
- const analysis = analyzeScope(ast);
2249
-
2250
- const moduleScope = analysis.moduleScope;
2251
- inlinedModulesToInfo.set(m, {
2252
- source: moduleSource,
2253
- ast,
2254
- module: m,
2255
- variables: new Set(moduleScope.variables),
2256
- through: new Set(analysis.unresolvedReferences),
2257
- usedInNonInlined: new Set(),
2258
- moduleScope
2259
- });
2505
+ inlinedModulesToInfo.set(m, getModuleInfo(m, moduleSource));
2260
2506
  }
2261
2507
 
2262
2508
  for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
@@ -2280,56 +2526,37 @@ class JavascriptModulesPlugin {
2280
2526
  for (const { through } of inlinedModulesToInfo.values()) {
2281
2527
  for (const ref of through) allUsedNames.add(ref.identifier.name);
2282
2528
  }
2283
- for (const [m, moduleInfo] of inlinedModulesToInfo) {
2284
- const { ast, source: _source } = moduleInfo;
2285
- const source = new ReplaceSource(_source);
2286
- for (const variable of moduleInfo.variables) {
2287
- renameInlinedModuleVariable(
2288
- source,
2289
- ast,
2290
- variable,
2291
- moduleInfo.module.identifier(),
2292
- m.readableIdentifier(runtimeTemplate.requestShortener),
2293
- allUsedNames
2294
- );
2295
- }
2296
- renamedInlinedModules.set(m, source);
2529
+ for (const moduleInfo of inlinedModulesToInfo.values()) {
2530
+ renameModule(moduleInfo, allUsedNames);
2297
2531
  }
2298
- return renamedInlinedModules;
2532
+ return {
2533
+ sources: renamedInlinedModules,
2534
+ renamedDeclarations
2535
+ };
2299
2536
  }
2300
2537
 
2301
2538
  for (const [m, moduleInfo] of inlinedModulesToInfo) {
2302
- const { ast, source: _source, usedInNonInlined } = moduleInfo;
2303
- const source = new ReplaceSource(_source);
2539
+ const { usedInNonInlined } = moduleInfo;
2304
2540
  if (usedInNonInlined.size === 0) {
2305
- renamedInlinedModules.set(m, source);
2541
+ renamedInlinedModules.set(m, new ReplaceSource(moduleInfo.source));
2306
2542
  continue;
2307
2543
  }
2308
2544
 
2309
- const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
2310
2545
  const allUsedNames = new Set(
2311
- Array.from(info.through, (v) => v.identifier.name)
2546
+ Array.from(moduleInfo.through, (v) => v.identifier.name)
2312
2547
  );
2313
2548
 
2314
2549
  for (const variable of usedInNonInlined) {
2315
2550
  allUsedNames.add(variable.name);
2316
2551
  }
2317
2552
 
2318
- for (const variable of info.variables) {
2319
- renameInlinedModuleVariable(
2320
- source,
2321
- ast,
2322
- variable,
2323
- info.module.identifier(),
2324
- m.readableIdentifier(runtimeTemplate.requestShortener),
2325
- allUsedNames
2326
- );
2327
- }
2328
-
2329
- renamedInlinedModules.set(m, source);
2553
+ renameModule(moduleInfo, allUsedNames);
2330
2554
  }
2331
2555
 
2332
- return renamedInlinedModules;
2556
+ return {
2557
+ sources: renamedInlinedModules,
2558
+ renamedDeclarations
2559
+ };
2333
2560
  }
2334
2561
  }
2335
2562