@depup/webpack 5.111.1-depup.2 → 5.112.0-depup.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 (775) hide show
  1. package/README.md +6 -8
  2. package/changes.json +8 -16
  3. package/lib/Chunk.js +3 -966
  4. package/lib/Compilation.js +224 -106
  5. package/lib/Compiler.js +19 -19
  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 +8 -8
  25. package/lib/asset/AssetBytesParser.js +3 -3
  26. package/lib/asset/AssetGenerator.js +36 -22
  27. package/lib/asset/AssetModule.js +2 -2
  28. package/lib/asset/AssetModulesPlugin.js +6 -9
  29. package/lib/asset/AssetParser.js +3 -3
  30. package/lib/asset/AssetSourceGenerator.js +8 -8
  31. package/lib/asset/AssetSourceParser.js +3 -3
  32. package/lib/asset/RawDataUrlModule.js +17 -10
  33. package/lib/asset/WebManifestGenerator.js +7 -7
  34. package/lib/asset/WebManifestParser.js +5 -5
  35. package/lib/async-modules/AsyncModuleHelpers.js +6 -5
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  37. package/lib/async-modules/InferAsyncModulesPlugin.js +4 -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} +5 -5
  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 +8 -10
  47. package/lib/cache/ResolverCachePlugin.js +8 -4
  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} +217 -200
  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} +5 -158
  55. package/lib/config/defaults.js +144 -48
  56. package/lib/config/getClaimedAssetTypes.js +21 -13
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +10 -0
  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 +36 -25
  76. package/lib/context/ContextModuleFactory.js +13 -10
  77. package/lib/context/ContextReplacementPlugin.js +3 -3
  78. package/lib/css/CssGenerator.js +38 -31
  79. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  80. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  81. package/lib/css/CssModule.js +27 -29
  82. package/lib/css/CssModulesPlugin.js +128 -44
  83. package/lib/css/CssParser.js +682 -291
  84. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  85. package/lib/css/cssMinify.js +110 -37
  86. package/lib/css/data.js +6985 -5125
  87. package/lib/css/syntax-parser.js +19873 -0
  88. package/lib/css/syntax-printer.js +6037 -0
  89. package/lib/css/syntax.js +37 -18686
  90. package/lib/debug/ProfilingPlugin.js +52 -19
  91. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
  92. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +9 -9
  93. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
  94. package/lib/deno/DenoTargetPlugin.js +1 -1
  95. package/lib/dependencies/ConstDependency.js +3 -120
  96. package/lib/dependencies/ContextElementDependency.js +5 -172
  97. package/lib/dependencies/NullDependency.js +3 -37
  98. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  99. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
  100. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  101. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  102. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  103. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  104. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
  105. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  106. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  107. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  108. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  109. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  110. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  111. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  112. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  113. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  114. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -33
  115. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  116. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
  117. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  118. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +35 -30
  119. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
  120. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
  121. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  122. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  123. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
  124. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  125. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  126. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
  127. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  128. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  129. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  130. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  131. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  132. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  133. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  134. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  135. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  136. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  137. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  138. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  139. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
  140. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  141. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  142. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  143. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  144. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
  145. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  146. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  147. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
  148. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
  149. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  150. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  151. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  152. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
  153. package/lib/dependencies/core/ConstDependency.js +131 -0
  154. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  155. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  156. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  157. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  158. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  159. package/lib/dependencies/core/NullDependency.js +44 -0
  160. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  161. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  162. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +369 -92
  163. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +23 -16
  164. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  165. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  166. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +23 -16
  167. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  168. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  169. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  170. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
  171. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +19 -17
  172. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  173. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
  174. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
  175. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  176. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  177. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +133 -118
  178. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
  179. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +60 -36
  180. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
  181. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  182. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
  183. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +99 -84
  184. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
  185. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
  186. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +94 -59
  187. package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
  188. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  189. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
  190. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
  191. package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
  192. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  193. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  194. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  195. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  196. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  197. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  198. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +51 -141
  199. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
  200. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -19
  201. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -15
  202. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  203. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  204. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  205. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  206. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
  207. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  208. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  209. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  210. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  211. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  212. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +119 -98
  213. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  214. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  215. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  216. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  217. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
  218. package/lib/{url → dependencies/url}/URLParserPlugin.js +16 -18
  219. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  220. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  221. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  222. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  223. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +31 -33
  224. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
  225. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
  226. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  227. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  228. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  229. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  230. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +154 -26
  231. package/lib/{util → devtool}/generateDebugId.js +1 -1
  232. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  233. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  234. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  235. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  236. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  237. package/lib/dll/DelegatedModule.js +20 -18
  238. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  239. package/lib/dll/DelegatedPlugin.js +1 -1
  240. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  241. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  242. package/lib/dll/DllEntryPlugin.js +3 -3
  243. package/lib/dll/DllModule.js +11 -9
  244. package/lib/dll/DllModuleFactory.js +3 -3
  245. package/lib/dll/DllPlugin.js +18 -6
  246. package/lib/dll/DllReferencePlugin.js +102 -26
  247. package/lib/dll/LibManifestPlugin.js +9 -7
  248. package/lib/electron/ElectronTargetPlugin.js +2 -2
  249. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  250. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  251. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  252. package/lib/entry/EntryPlugin.js +75 -0
  253. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  254. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  255. package/lib/errors/BuildCycleError.js +1 -1
  256. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  257. package/lib/errors/ChunkRenderError.js +1 -1
  258. package/lib/errors/CodeGenerationError.js +1 -1
  259. package/lib/errors/CommentCompilationWarning.js +1 -1
  260. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  261. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  262. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  263. package/lib/errors/DllManifestError.js +26 -0
  264. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  265. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  266. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  267. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  268. package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +7 -5
  269. package/lib/errors/ExternalStarReexportError.js +2 -2
  270. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  271. package/lib/errors/HookWebpackError.js +4 -4
  272. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  273. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  274. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  275. package/lib/errors/ModuleBuildError.js +1 -1
  276. package/lib/errors/ModuleDependencyError.js +2 -2
  277. package/lib/errors/ModuleDependencyWarning.js +2 -2
  278. package/lib/errors/ModuleError.js +1 -1
  279. package/lib/errors/ModuleHashingError.js +1 -1
  280. package/lib/errors/ModuleNotFoundError.js +3 -3
  281. package/lib/errors/ModuleParseError.js +1 -1
  282. package/lib/errors/ModuleRestoreError.js +1 -1
  283. package/lib/errors/ModuleStoreError.js +1 -1
  284. package/lib/errors/ModuleWarning.js +1 -1
  285. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  286. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  287. package/lib/errors/NodeStuffInWebError.js +7 -2
  288. package/lib/errors/PathVariableError.js +31 -0
  289. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  290. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  291. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  292. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  293. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  294. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  295. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  296. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  297. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  298. package/lib/errors/WebpackError.js +12 -3
  299. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  300. package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
  301. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  302. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  303. package/lib/{ExternalModule.js → externals/ExternalModule.js} +79 -55
  304. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
  305. package/lib/externals/ExternalsPlugin.js +99 -0
  306. package/lib/fs/FileSystemInfo.js +4642 -0
  307. package/lib/{util → fs}/fs.js +22 -9
  308. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  309. package/lib/graph/Chunk.js +985 -0
  310. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
  311. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  312. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  313. package/lib/graph/Dependency.js +628 -0
  314. package/lib/graph/Entrypoint.js +136 -0
  315. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +130 -82
  316. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  317. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +30 -30
  318. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  319. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +152 -57
  320. package/lib/{util → graph}/findGraphRoots.js +14 -8
  321. package/lib/graph/isDependencyKind.js +23 -0
  322. package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
  323. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +47 -47
  324. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  325. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
  326. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  327. package/lib/hmr/LazyCompilationPlugin.js +31 -21
  328. package/lib/html/HtmlGenerator.js +107 -43
  329. package/lib/html/HtmlModule.js +6 -2
  330. package/lib/html/HtmlModulesPlugin.js +172 -76
  331. package/lib/html/HtmlParser.js +503 -153
  332. package/lib/html/builtinEmbeddedRenderer.js +60 -13
  333. package/lib/html/data.js +2 -1
  334. package/lib/html/htmlMinify.js +111 -41
  335. package/lib/html/syntax-parser.js +15796 -0
  336. package/lib/html/syntax-printer.js +1034 -0
  337. package/lib/html/syntax.js +37 -13952
  338. package/lib/html/xmlMinify.js +67 -0
  339. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  340. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  341. package/lib/ids/HashedModuleIdsPlugin.js +31 -4
  342. package/lib/ids/IdHelpers.js +4 -4
  343. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  344. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  345. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  346. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  347. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  348. package/lib/{util → ids}/numberHash.js +1 -1
  349. package/lib/index.js +303 -97
  350. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +25 -25
  351. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  352. package/lib/javascript/BasicEvaluatedExpression.js +4 -4
  353. package/lib/javascript/ChunkHelpers.js +64 -4
  354. package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
  355. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
  356. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +74 -7
  357. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  358. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  359. package/lib/javascript/JavascriptGenerator.js +17 -17
  360. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
  361. package/lib/javascript/JavascriptModule.js +4 -3
  362. package/lib/javascript/JavascriptModulesPlugin.js +440 -211
  363. package/lib/javascript/JavascriptParser.js +220 -134
  364. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  365. package/lib/javascript/MergedEntryExports.js +196 -0
  366. package/lib/javascript/ScopeAnalyzer.js +3840 -5
  367. package/lib/javascript/StartupHelpers.js +6 -6
  368. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
  369. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  370. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  371. package/lib/javascript/data.js +533 -122
  372. package/lib/javascript/jsMinify.js +272 -0
  373. package/lib/javascript/regexp.js +67 -32
  374. package/lib/javascript/syntax-parser.js +18561 -0
  375. package/lib/javascript/syntax-printer-data.js +933 -0
  376. package/lib/javascript/syntax-printer.js +47106 -0
  377. package/lib/javascript/syntax.js +20 -11274
  378. package/lib/json/JsonData.js +1 -1
  379. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  380. package/lib/json/JsonGenerator.js +10 -10
  381. package/lib/json/JsonModule.js +2 -2
  382. package/lib/json/JsonModulesPlugin.js +1 -1
  383. package/lib/json/JsonParser.js +5 -5
  384. package/lib/json/jsonMinify.js +69 -0
  385. package/lib/library/AbstractLibraryPlugin.js +28 -15
  386. package/lib/library/AmdLibraryPlugin.js +4 -4
  387. package/lib/library/AssignLibraryPlugin.js +27 -11
  388. package/lib/library/EnableLibraryPlugin.js +1 -1
  389. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  390. package/lib/library/JsonpLibraryPlugin.js +1 -1
  391. package/lib/library/LibraryTemplatePlugin.js +53 -0
  392. package/lib/library/ModuleLibraryPlugin.js +160 -166
  393. package/lib/library/SystemLibraryPlugin.js +6 -8
  394. package/lib/library/UmdLibraryPlugin.js +3 -4
  395. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  396. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  397. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  398. package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
  399. package/lib/loaders/LoaderRunner.js +31 -21
  400. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  401. package/lib/logging/Logger.js +7 -9
  402. package/lib/logging/ProgressPlugin.js +957 -0
  403. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  404. package/lib/{Generator.js → module/Generator.js} +16 -14
  405. package/lib/{Module.js → module/Module.js} +119 -51
  406. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  407. package/lib/module/NormalModule.js +2348 -0
  408. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
  409. package/lib/module/NullFactory.js +29 -0
  410. package/lib/{Parser.js → module/Parser.js} +3 -3
  411. package/lib/module/RawModule.js +208 -0
  412. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  413. package/lib/{util → module}/extractSourceMap.js +2 -2
  414. package/lib/{util → module}/findCaseMismatch.js +2 -2
  415. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  416. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  417. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
  418. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  419. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  420. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  421. package/lib/node/NodeTargetPlugin.js +1 -1
  422. package/lib/node/NodeWatchFileSystem.js +58 -6
  423. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  424. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
  425. package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
  426. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  427. package/lib/node/nodeConsole.js +2 -4
  428. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  429. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  430. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
  431. package/lib/optimize/ConcatenatedModule.js +229 -214
  432. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  433. package/lib/optimize/ConstExportsPlugin.js +7 -7
  434. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  435. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  436. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +17 -17
  437. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +17 -17
  438. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  439. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  440. package/lib/optimize/InlineExports.js +11 -3
  441. package/lib/optimize/InnerGraph.js +5 -13
  442. package/lib/optimize/InnerGraphPlugin.js +10 -10
  443. package/lib/optimize/LazyBarrels.js +584 -0
  444. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  445. package/lib/optimize/LimitChunkCountPlugin.js +16 -7
  446. package/lib/optimize/MangleExportsPlugin.js +5 -5
  447. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  448. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  449. package/lib/optimize/ModuleConcatenationPlugin.js +20 -12
  450. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  451. package/lib/optimize/RealContentHashPlugin.js +16 -7
  452. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  453. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  454. package/lib/optimize/SideEffectsFlagPlugin.js +18 -18
  455. package/lib/optimize/SplitChunksPlugin.js +713 -155
  456. package/lib/{util → optimize}/TupleQueue.js +9 -9
  457. package/lib/optimize/chunkSetIntersections.js +437 -0
  458. package/lib/{util → optimize}/deterministicGrouping.js +17 -17
  459. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  460. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
  461. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
  462. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  463. package/lib/output/SSRManifestPlugin.js +349 -0
  464. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  465. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  466. package/lib/performance/BroadContextsPlugin.js +4 -4
  467. package/lib/performance/CacheEffectivenessPlugin.js +2 -3
  468. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  469. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  470. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  471. package/lib/performance/DynamicExportsPlugin.js +2 -2
  472. package/lib/performance/EvalUsagePlugin.js +3 -3
  473. package/lib/performance/HotspotsPlugin.js +11 -10
  474. package/lib/performance/LargeModulesPlugin.js +2 -3
  475. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  476. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  477. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  478. package/lib/performance/PureAnnotationsPlugin.js +3 -3
  479. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  480. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  481. package/lib/performance/SizeLimitsPlugin.js +11 -12
  482. package/lib/performance/TopLevelThisPlugin.js +8 -7
  483. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  484. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  485. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  486. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  487. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  488. package/lib/performance/UnusedFederationPlugin.js +2 -4
  489. package/lib/performance/UnusedModulesPlugin.js +5 -4
  490. package/lib/performance/getModuleSize.js +1 -1
  491. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  492. package/lib/performance/isOnlyReexported.js +7 -6
  493. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  494. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  495. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  496. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  497. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  498. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  499. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  500. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  501. package/lib/prefetch/ResourceHintPlugin.js +65 -44
  502. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  503. package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
  504. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  505. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  506. package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
  507. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  508. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  509. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  510. package/lib/resolve/getResolveOptionsKey.js +59 -0
  511. package/lib/rules/RuleSetCompiler.js +27 -46
  512. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  513. package/lib/runtime/AsyncModuleRuntimeModule.js +7 -4
  514. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  515. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  516. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  517. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  518. package/lib/runtime/CompatRuntimeModule.js +4 -4
  519. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  520. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  521. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  522. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  523. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  524. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  525. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  526. package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
  527. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  528. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  529. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  530. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  531. package/lib/runtime/GlobalRuntimeModule.js +3 -3
  532. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  533. package/lib/runtime/HelperRuntimeModule.js +16 -1
  534. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  535. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
  536. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  537. package/lib/runtime/NonceRuntimeModule.js +2 -2
  538. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  539. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  540. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  541. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
  542. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  543. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  544. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
  545. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  546. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  547. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  548. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  549. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  550. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  551. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  552. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  553. package/lib/runtime/baseUri.js +1 -1
  554. package/lib/schemes/DataUriPlugin.js +1 -1
  555. package/lib/schemes/HttpUriPlugin.js +67 -11
  556. package/lib/schemes/VirtualUrlPlugin.js +50 -16
  557. package/lib/serialization/AggregateErrorSerializer.js +2 -2
  558. package/lib/serialization/FileMiddleware.js +3 -3
  559. package/lib/serialization/ObjectMiddleware.js +47 -16
  560. package/lib/serialization/SerializerMiddleware.js +2 -2
  561. package/lib/serialization/SingleItemMiddleware.js +4 -2
  562. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  563. package/lib/sharing/ConsumeSharedModule.js +18 -14
  564. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  565. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  566. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  567. package/lib/sharing/ProvideSharedDependency.js +1 -1
  568. package/lib/sharing/ProvideSharedModule.js +11 -9
  569. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  570. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  571. package/lib/sharing/SharePlugin.js +102 -9
  572. package/lib/sharing/ShareRuntimeModule.js +6 -6
  573. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  574. package/lib/{util → sharing}/semver.js +14 -16
  575. package/lib/sharing/utils.js +59 -2
  576. package/lib/stats/DefaultStatsFactoryPlugin.js +22 -19
  577. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  578. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
  579. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  580. package/lib/{Stats.js → stats/Stats.js} +4 -4
  581. package/lib/stats/StatsFactory.js +14 -13
  582. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  583. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  584. package/lib/template/DependencyTemplate.js +77 -0
  585. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  586. package/lib/template/InitFragment.js +223 -0
  587. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  588. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  589. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  590. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +145 -63
  591. package/lib/{Template.js → template/Template.js} +13 -11
  592. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
  593. package/lib/typescript/TypeScriptPlugin.js +3 -3
  594. package/lib/util/RequestShortener.js +44 -0
  595. package/lib/util/SortableSet.js +87 -22
  596. package/lib/util/SourceProcessor.js +349 -44
  597. package/lib/util/TupleSet.js +27 -27
  598. package/lib/util/WeakTupleMap.js +10 -12
  599. package/lib/util/buildDiagnostics.js +2 -2
  600. package/lib/util/comparators.js +10 -10
  601. package/lib/util/concatenate.js +28 -147
  602. package/lib/util/createMappings.js +111 -0
  603. package/lib/util/dataURL.js +94 -15
  604. package/lib/util/deprecation.js +1 -1
  605. package/lib/util/extractComments.js +118 -0
  606. package/lib/util/formatLocation.js +1 -1
  607. package/lib/util/globUtils.js +197 -16
  608. package/lib/util/haltVisitors.js +51 -0
  609. package/lib/util/handlerKeys.js +2 -2
  610. package/lib/util/identifier.js +117 -1
  611. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  612. package/lib/util/internalSerializables.js +294 -102
  613. package/lib/util/magicComment.js +12 -7
  614. package/lib/util/makeSerializable.js +23 -4
  615. package/lib/util/parseJson.js +1 -1
  616. package/lib/util/preloadModuleType.js +5 -2
  617. package/lib/util/registerExternalSerializer.js +2 -2
  618. package/lib/util/removeBOM.js +1 -1
  619. package/lib/util/runtime.js +1 -1
  620. package/lib/util/serialization.js +4 -1
  621. package/lib/util/source.js +2 -2
  622. package/lib/util/terminalColors.js +161 -0
  623. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  624. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  625. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
  626. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +5 -5
  627. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +11 -10
  628. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  629. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
  630. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  631. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
  632. package/lib/wasm/wasmModuleFilename.js +2 -2
  633. package/lib/wasm-sync/SyncWasmModule.js +3 -3
  634. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
  635. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  636. package/lib/wasm-sync/WebAssemblyGenerator.js +9 -8
  637. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +14 -15
  638. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  639. package/lib/wasm-sync/WebAssemblyParser.js +6 -6
  640. package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
  641. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  642. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  643. package/lib/{Watching.js → watch/Watching.js} +8 -8
  644. package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
  645. package/lib/web/FetchCompileWasmPlugin.js +6 -4
  646. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  647. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  648. package/lib/web/JsonpTemplatePlugin.js +1 -1
  649. package/lib/webpack.js +27 -17
  650. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  651. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  652. package/package.json +55 -40
  653. package/schemas/WebpackOptions.check.js +2 -1
  654. package/schemas/WebpackOptions.d.json.ts +2 -0
  655. package/schemas/WebpackOptions.json +294 -74
  656. package/schemas/plugins/BannerPlugin.check.js +2 -1
  657. package/schemas/plugins/BannerPlugin.json +29 -2
  658. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
  659. package/schemas/plugins/HtmlParserOptions.check.js +2 -1
  660. package/schemas/plugins/IgnorePlugin.check.js +1 -0
  661. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  662. package/schemas/plugins/IgnorePlugin.json +1 -1
  663. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
  664. package/schemas/plugins/ManifestPlugin.check.js +1 -0
  665. package/schemas/plugins/ManifestPlugin.json +3 -3
  666. package/schemas/plugins/ProgressPlugin.check.js +2 -1
  667. package/schemas/plugins/ProgressPlugin.json +2 -7
  668. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  669. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  670. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
  671. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  672. package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
  673. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  674. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
  675. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
  676. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
  677. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
  678. package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
  679. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  680. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
  681. package/schemas/plugins/container/ExternalsType.check.js +1 -0
  682. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
  683. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  684. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
  685. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
  686. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
  687. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
  688. package/schemas/plugins/css/CssParserOptions.check.js +1 -0
  689. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
  690. package/schemas/plugins/dll/DllPlugin.check.js +1 -0
  691. package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
  692. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  693. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
  694. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
  695. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
  696. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
  697. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
  698. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
  699. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
  700. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
  701. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
  702. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
  703. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
  704. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
  705. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  706. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
  707. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  708. package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
  709. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  710. package/types.d.ts +19355 -13873
  711. package/lib/LazyBarrel.js +0 -388
  712. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  713. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  714. package/lib/javascript/ChunkFormatHelpers.js +0 -72
  715. package/lib/javascript/grammar.js +0 -5546
  716. package/lib/javascript/parser.js +0 -1500
  717. package/lib/javascript/regexpData.js +0 -51
  718. package/lib/performance/getSourceModules.js +0 -22
  719. package/lib/util/Semaphore.js +0 -65
  720. package/lib/util/objectToMap.js +0 -15
  721. package/schemas/WebpackOptions.check.d.ts +0 -7
  722. package/schemas/_container.json +0 -155
  723. package/schemas/_sharing.json +0 -118
  724. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  725. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  726. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  727. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  728. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  729. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  730. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  731. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  732. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  733. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  734. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  735. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  736. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  737. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  738. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  739. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  740. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  741. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  742. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  743. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  744. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  745. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  746. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  747. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  748. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  749. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  750. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  751. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  752. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  753. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  754. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  755. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  756. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  758. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  759. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  760. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  761. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  762. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  763. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  764. /package/lib/{util → css}/conventions.js +0 -0
  765. /package/lib/{util → css}/topologicalSort.js +0 -0
  766. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  767. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  768. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  769. /package/lib/{util → javascript}/StackedMap.js +0 -0
  770. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  771. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  772. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  773. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  774. /package/lib/{util → optimize}/Queue.js +0 -0
  775. /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 (
@@ -1272,7 +1404,7 @@ class JavascriptModulesPlugin {
1272
1404
  const startupSource = new ConcatSource();
1273
1405
 
1274
1406
  const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
1275
- /** @type {Map<Module, Source> | false} */
1407
+ /** @type {RenamedInlinedModules | false} */
1276
1408
  let renamedInlinedModule = false;
1277
1409
  let inlinedInIIFE = false;
1278
1410
 
@@ -1316,7 +1448,7 @@ class JavascriptModulesPlugin {
1316
1448
  }
1317
1449
 
1318
1450
  const renderedModule = renamedInlinedModule
1319
- ? renamedInlinedModule.get(m)
1451
+ ? renamedInlinedModule.sources.get(m)
1320
1452
  : this.renderModule(
1321
1453
  m,
1322
1454
  {
@@ -1373,7 +1505,10 @@ class JavascriptModulesPlugin {
1373
1505
  ...renderContext,
1374
1506
  inlined: true,
1375
1507
  inlinedInIIFE,
1376
- needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports)
1508
+ needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports),
1509
+ renamedDeclarations: renamedInlinedModule
1510
+ ? renamedInlinedModule.renamedDeclarations.get(lastInlinedModule)
1511
+ : undefined
1377
1512
  };
1378
1513
  let renderedStartup = hooks.renderStartup.call(
1379
1514
  startupSource,
@@ -1435,7 +1570,8 @@ class JavascriptModulesPlugin {
1435
1570
  {
1436
1571
  ...renderContext,
1437
1572
  inlined: false,
1438
- needExportsDeclaration: true
1573
+ needExportsDeclaration: true,
1574
+ exportsAwaited: bootstrap.exportsAwaited
1439
1575
  }
1440
1576
  ),
1441
1577
  toSource(bootstrap.afterStartup, "webpack/after-startup"),
@@ -1547,14 +1683,15 @@ class JavascriptModulesPlugin {
1547
1683
  requireFunction || interceptModuleExecution || moduleUsed;
1548
1684
 
1549
1685
  /**
1550
- * @type {{ startup: string[], beforeStartup: string[], header: string[], afterStartup: string[], allowInlineStartup: boolean }}
1686
+ * @type {Bootstrap}
1551
1687
  */
1552
1688
  const result = {
1553
1689
  header: [],
1554
1690
  beforeStartup: [],
1555
1691
  startup: [],
1556
1692
  afterStartup: [],
1557
- allowInlineStartup: true
1693
+ allowInlineStartup: true,
1694
+ exportsAwaited: false
1558
1695
  };
1559
1696
 
1560
1697
  const { header: buf, startup, beforeStartup, afterStartup } = result;
@@ -1658,22 +1795,32 @@ class JavascriptModulesPlugin {
1658
1795
  entryOptions && entryOptions.library !== undefined
1659
1796
  ? entryOptions.library
1660
1797
  : runtimeTemplate.outputOptions.library;
1661
- // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1662
- const awaitedByLibrary =
1663
- library !== undefined && library.type === "module";
1798
+ const mergedModules = mergedEntryModulesOfLibrary(
1799
+ library,
1800
+ chunk,
1801
+ chunkGraph
1802
+ );
1803
+ const merge = mergedModules !== undefined;
1664
1804
  // `await` is legal only at an ESM chunk's top level, never in the
1665
1805
  // startup function below, and only where the target parses it.
1666
1806
  const canAwaitEntry =
1667
1807
  runtimeTemplate.isModule() &&
1668
1808
  runtimeTemplate.supportsTopLevelAwait() &&
1669
- !awaitedByLibrary &&
1670
1809
  !runtimeRequirements.has(RuntimeGlobals.startup) &&
1671
1810
  !(
1672
1811
  runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1673
1812
  runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1674
1813
  );
1814
+ if (merge && result.allowInlineStartup) {
1815
+ buf2.push(
1816
+ "// The exports of the entry modules are merged so they can't be inlined"
1817
+ );
1818
+ result.allowInlineStartup = false;
1819
+ }
1675
1820
  /** @type {string[]} */
1676
1821
  const awaitedEntries = [];
1822
+ /** @type {Map<Module, string>} */
1823
+ const mergedTargets = new Map();
1677
1824
  let i = jsEntries.length;
1678
1825
  for (const [entryModule, entrypoint] of jsEntries) {
1679
1826
  const chunks =
@@ -1702,6 +1849,12 @@ class JavascriptModulesPlugin {
1702
1849
  buf2.push(
1703
1850
  "// This entry module is referenced by other modules so it can't be inlined"
1704
1851
  );
1852
+ // Its exports are then read off the exports object, and a property
1853
+ // read is not something a consumer of the bundle can drop.
1854
+ runtimeTemplate.analyzableBailout(
1855
+ entryModule,
1856
+ "the entry is referenced by other modules, so its exports are read off the exports object and a consumer cannot drop them"
1857
+ );
1705
1858
  result.allowInlineStartup = false;
1706
1859
  }
1707
1860
 
@@ -1785,24 +1938,32 @@ class JavascriptModulesPlugin {
1785
1938
  // `onChunksLoaded` wrapper, a top-level `await` bridge or other
1786
1939
  // codegen, so it is never declared as a constant.
1787
1940
  const exportsDecl = runtimeTemplate.renderLet();
1941
+ // Merging reads every entry back, so each one needs a variable of
1942
+ // its own; without it only the last entry (`i === 0`) is exported.
1943
+ const target =
1944
+ i === 0 && !merge
1945
+ ? RuntimeGlobals.exports
1946
+ : `${RuntimeGlobals.exports}_${i}`;
1947
+ if (merge) mergedTargets.set(entryModule, target);
1788
1948
  if (chunks.length > 0) {
1789
1949
  const awaitEntry =
1790
1950
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1791
- const target =
1792
- i === 0
1793
- ? RuntimeGlobals.exports
1794
- : `${RuntimeGlobals.exports}_${i}`;
1795
1951
  // 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};`);
1952
+ // entry, so a captured one is caught by the entry call itself.
1953
+ const capture = awaitEntry || merge;
1954
+ if (capture && target !== RuntimeGlobals.exports) {
1955
+ buf2.push(`${exportsDecl} ${target};`);
1956
+ }
1798
1957
  const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1799
1958
  buf2.push(
1800
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1801
- RuntimeGlobals.onChunksLoaded
1802
- }(undefined, ${JSON.stringify(
1959
+ `${
1960
+ i === 0 && !merge
1961
+ ? `${exportsDecl} ${RuntimeGlobals.exports} = `
1962
+ : ""
1963
+ }${RuntimeGlobals.onChunksLoaded}(undefined, ${JSON.stringify(
1803
1964
  chunks.map((c) => c.id)
1804
1965
  )}, ${runtimeTemplate.returningFunction(
1805
- awaitEntry ? `(${target} = ${entryCall})` : entryCall
1966
+ capture ? `(${target} = ${entryCall})` : entryCall
1806
1967
  )})`
1807
1968
  );
1808
1969
  if (awaitEntry) awaitedEntries.push(target);
@@ -1811,18 +1972,14 @@ class JavascriptModulesPlugin {
1811
1972
  // which orphans its rejection.
1812
1973
  const awaitEntry =
1813
1974
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1814
- const target =
1815
- i === 0
1816
- ? RuntimeGlobals.exports
1817
- : `${RuntimeGlobals.exports}_${i}`;
1818
- const needsDecl = i === 0 || awaitEntry;
1975
+ const needsDecl = i === 0 || awaitEntry || merge;
1819
1976
  buf2.push(
1820
1977
  `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1821
1978
  );
1822
1979
  if (awaitEntry) awaitedEntries.push(target);
1823
1980
  } else {
1824
- if (i === 0) {
1825
- buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
1981
+ if (i === 0 || merge) {
1982
+ buf2.push(`${exportsDecl} ${target} = {};`);
1826
1983
  }
1827
1984
  const needThisAsExports = entryRuntimeRequirements.has(
1828
1985
  RuntimeGlobals.thisAsExports
@@ -1834,7 +1991,7 @@ class JavascriptModulesPlugin {
1834
1991
  requireScopeUsed ||
1835
1992
  entryRuntimeRequirements.has(RuntimeGlobals.exports)
1836
1993
  ) {
1837
- const exportsArg = i === 0 ? RuntimeGlobals.exports : "{}";
1994
+ const exportsArg = i === 0 || merge ? target : "{}";
1838
1995
  args.push("0", exportsArg);
1839
1996
  if (requireScopeUsed) {
1840
1997
  args.push(RuntimeGlobals.require);
@@ -1846,7 +2003,7 @@ class JavascriptModulesPlugin {
1846
2003
  if (needThisAsExports) {
1847
2004
  const comma = args.length ? "," : "";
1848
2005
  return `__webpack_modules__[${moduleIdExpr}].call(${
1849
- RuntimeGlobals.exports
2006
+ merge ? target : RuntimeGlobals.exports
1850
2007
  }${comma}${args.join(",")});`;
1851
2008
  }
1852
2009
  return `__webpack_modules__[${moduleIdExpr}](${args.join(
@@ -1859,10 +2016,43 @@ class JavascriptModulesPlugin {
1859
2016
  }
1860
2017
  if (runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)) {
1861
2018
  buf2.push(
1862
- `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
2019
+ merge
2020
+ ? `${RuntimeGlobals.onChunksLoaded}();`
2021
+ : `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1863
2022
  );
1864
2023
  }
1865
2024
  buf2.push(...renderAwaitedEntries(awaitedEntries));
2025
+ result.exportsAwaited = awaitedEntries.includes(RuntimeGlobals.exports);
2026
+ // Every entry has run by now, and the getters below read through to
2027
+ // whichever one provides each name.
2028
+ if (merge) {
2029
+ const { exports, namespace } = getMergedExports(
2030
+ /** @type {Module[]} */ (mergedModules),
2031
+ moduleGraph,
2032
+ chunk.runtime
2033
+ );
2034
+ buf2.push(
2035
+ `${runtimeTemplate.renderLet()} ${RuntimeGlobals.exports} = {};`
2036
+ );
2037
+ if (namespace) {
2038
+ buf2.push(
2039
+ `${RuntimeGlobals.makeNamespaceObject}(${RuntimeGlobals.exports});`
2040
+ );
2041
+ }
2042
+ if (exports.length > 0) {
2043
+ const bindings = exports.map(
2044
+ ({ name, module, usedName }) =>
2045
+ `${JSON.stringify(name)}, ${runtimeTemplate.returningFunction(
2046
+ `${mergedTargets.get(module)}${propertyAccess([usedName])}`
2047
+ )}`
2048
+ );
2049
+ buf2.push(
2050
+ `${RuntimeGlobals.definePropertyGetters}(${
2051
+ RuntimeGlobals.exports
2052
+ }, [${bindings.join(", ")}]);`
2053
+ );
2054
+ }
2055
+ }
1866
2056
  if (
1867
2057
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1868
2058
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
@@ -2105,7 +2295,7 @@ class JavascriptModulesPlugin {
2105
2295
  * @param {CompilationHooks} hooks hooks
2106
2296
  * @param {boolean | undefined} allStrict allStrict
2107
2297
  * @param {boolean} hasChunkModules hasChunkModules
2108
- * @returns {Map<Module, Source> | false} renamed inlined modules
2298
+ * @returns {RenamedInlinedModules | false} renamed inlined modules
2109
2299
  */
2110
2300
  _getRenamedInlineModule(
2111
2301
  compilation,
@@ -2131,18 +2321,22 @@ class JavascriptModulesPlugin {
2131
2321
 
2132
2322
  /** @type {Map<Module, Source>} */
2133
2323
  const renamedInlinedModules = new Map();
2324
+ /** @type {Map<Module, Map<string, string>>} */
2325
+ const renamedDeclarations = new Map();
2134
2326
  const { runtimeTemplate } = renderContext;
2135
2327
 
2136
- /** @typedef {{ source: Source, module: Module, ast: Program, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
2328
+ /** @typedef {{ source: Source, module: Module, shorthandIdentifierStarts: Set<number>, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
2137
2329
  /** @type {Map<Module, Info>} */
2138
2330
  const inlinedModulesToInfo = new Map();
2139
2331
  /** @type {Set<string>} */
2140
2332
  const nonInlinedModuleThroughIdentifiers = new Set();
2141
2333
  /** @type {Map<Module, Source>} */
2142
2334
  const inlinedModuleSources = new Map();
2335
+ const { codeGenerationResults, chunk } = renderContext;
2143
2336
 
2144
2337
  for (const m of allModules) {
2145
2338
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
2339
+
2146
2340
  const moduleSource = this.renderModule(
2147
2341
  m,
2148
2342
  {
@@ -2160,6 +2354,47 @@ class JavascriptModulesPlugin {
2160
2354
  inlinedModuleSources.set(m, moduleSource);
2161
2355
  continue;
2162
2356
  }
2357
+ // The render hooks add free names, so only the source they left behind
2358
+ // can be analysed; keying on it lets a rebuild skip the parse.
2359
+ let freeNames = this._renderedFreeNamesCache.get(moduleSource);
2360
+
2361
+ if (freeNames === undefined) {
2362
+ const code = /** @type {string} */ (moduleSource.source());
2363
+
2364
+ const { experiments } = compilation.options;
2365
+ const { ast } = JavascriptParser._parse(
2366
+ code,
2367
+ {
2368
+ sourceType: "auto",
2369
+ ranges: true,
2370
+ // generated code contains phase imports when the experiments are on
2371
+ importPhases: Boolean(
2372
+ experiments.deferImport || experiments.sourceImport
2373
+ )
2374
+ },
2375
+ JavascriptParser._getModuleParseFunction(compilation, m)
2376
+ );
2377
+
2378
+ const analysis = analyzeScope(ast);
2379
+
2380
+ freeNames = new Set();
2381
+ for (const ref of analysis.unresolvedReferences) {
2382
+ freeNames.add(ref.identifier.name);
2383
+ }
2384
+ this._renderedFreeNamesCache.set(moduleSource, freeNames);
2385
+ }
2386
+
2387
+ for (const name of freeNames) {
2388
+ nonInlinedModuleThroughIdentifiers.add(name);
2389
+ }
2390
+ }
2391
+
2392
+ /**
2393
+ * @param {Module} module the inlined entry
2394
+ * @param {Source} moduleSource its rendered source
2395
+ * @returns {Info} scope information for renaming
2396
+ */
2397
+ const getModuleInfo = (module, moduleSource) => {
2163
2398
  const code = /** @type {string} */ (moduleSource.source());
2164
2399
 
2165
2400
  const { experiments } = compilation.options;
@@ -2173,35 +2408,71 @@ class JavascriptModulesPlugin {
2173
2408
  experiments.deferImport || experiments.sourceImport
2174
2409
  )
2175
2410
  },
2176
- JavascriptParser._getModuleParseFunction(compilation, m)
2411
+ JavascriptParser._getModuleParseFunction(compilation, module)
2177
2412
  );
2178
2413
 
2179
2414
  const analysis = analyzeScope(ast);
2180
2415
 
2181
- for (const ref of analysis.unresolvedReferences) {
2182
- nonInlinedModuleThroughIdentifiers.add(ref.identifier.name);
2416
+ const moduleScope = analysis.moduleScope;
2417
+ return {
2418
+ source: moduleSource,
2419
+ shorthandIdentifierStarts: analysis.shorthandIdentifierStarts,
2420
+ module,
2421
+ variables: new Set(moduleScope.variables),
2422
+ through: new Set(analysis.unresolvedReferences),
2423
+ usedInNonInlined: new Set(),
2424
+ moduleScope
2425
+ };
2426
+ };
2427
+
2428
+ /**
2429
+ * @param {Info} info scope information for the entry
2430
+ * @param {Set<string>} usedNames names unavailable to its declarations
2431
+ * @returns {void}
2432
+ */
2433
+ const renameModule = (info, usedNames) => {
2434
+ const source = new ReplaceSource(info.source);
2435
+ /** @type {Map<string, string>} */
2436
+ const renamed = new Map();
2437
+ for (const variable of info.variables) {
2438
+ renameInlinedModuleVariable(
2439
+ source,
2440
+ info.shorthandIdentifierStarts,
2441
+ variable,
2442
+ info.module.identifier(),
2443
+ info.module.readableIdentifier(runtimeTemplate.requestShortener),
2444
+ usedNames,
2445
+ renamed
2446
+ );
2183
2447
  }
2184
- }
2448
+ renamedInlinedModules.set(info.module, source);
2449
+ if (renamed.size > 0) renamedDeclarations.set(info.module, renamed);
2450
+ };
2185
2451
 
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.
2452
+ // Codegen reports declarations and free names; only entries whose names
2453
+ // collide need parsing to locate their declarations and references.
2189
2454
  fastPath: {
2190
- const { codeGenerationResults, chunk } = renderContext;
2191
2455
  /** @type {Set<string>} */
2192
2456
  const usedNames = new Set(nonInlinedModuleThroughIdentifiers);
2193
2457
  for (const name of RESERVED_NAMES) usedNames.add(name);
2194
- /** @type {Set<string>[]} */
2195
- const declarationsList = [];
2196
- for (const m of inlinedModuleSources.keys()) {
2458
+ /** @type {Map<Module, Set<string>>} */
2459
+ const declarationsByModule = new Map();
2460
+ let canRenameSelectively = isMultipleEntries;
2461
+ for (const [m, moduleSource] of inlinedModuleSources) {
2197
2462
  if (!codeGenerationResults.has(m, chunk.runtime)) break fastPath;
2198
2463
  const result = codeGenerationResults.get(m, chunk.runtime);
2199
2464
  const data = result.data;
2200
2465
  if (!data) break fastPath;
2201
2466
  const declarations = data.get("topLevelDeclarations");
2202
2467
  if (!declarations) break fastPath;
2203
- declarationsList.push(declarations);
2468
+ declarationsByModule.set(m, declarations);
2204
2469
  if (!isMultipleEntries) continue;
2470
+ // Mixing cached names with fresh scope analysis requires unchanged
2471
+ // sources and the same parser that produced the cached names.
2472
+ canRenameSelectively =
2473
+ canRenameSelectively &&
2474
+ result.sources.get(JAVASCRIPT_TYPE) === moduleSource &&
2475
+ !JavascriptParser._getModuleParseFunction(compilation, m);
2205
2476
  // Entries share the startup scope: an entry's free names and runtime
2206
2477
  // globals must not be shadowed by another entry's declarations.
2207
2478
  const freeNames = data.get("freeNames");
@@ -2214,49 +2485,26 @@ class JavascriptModulesPlugin {
2214
2485
  }
2215
2486
  }
2216
2487
  }
2217
- for (const declarations of declarationsList) {
2218
- for (const name of declarations) {
2219
- if (usedNames.has(name)) break fastPath;
2488
+ for (const [m, declarations] of declarationsByModule) {
2489
+ const moduleSource = /** @type {Source} */ (
2490
+ inlinedModuleSources.get(m)
2491
+ );
2492
+ if (someInIterable(declarations, (name) => usedNames.has(name))) {
2493
+ if (!canRenameSelectively) break fastPath;
2494
+ renameModule(getModuleInfo(m, moduleSource), usedNames);
2495
+ } else {
2496
+ for (const name of declarations) usedNames.add(name);
2497
+ renamedInlinedModules.set(m, moduleSource);
2220
2498
  }
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
2499
  }
2228
- return renamedInlinedModules;
2500
+ return {
2501
+ sources: renamedInlinedModules,
2502
+ renamedDeclarations
2503
+ };
2229
2504
  }
2230
2505
 
2231
2506
  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
- });
2507
+ inlinedModulesToInfo.set(m, getModuleInfo(m, moduleSource));
2260
2508
  }
2261
2509
 
2262
2510
  for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
@@ -2280,56 +2528,37 @@ class JavascriptModulesPlugin {
2280
2528
  for (const { through } of inlinedModulesToInfo.values()) {
2281
2529
  for (const ref of through) allUsedNames.add(ref.identifier.name);
2282
2530
  }
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);
2531
+ for (const moduleInfo of inlinedModulesToInfo.values()) {
2532
+ renameModule(moduleInfo, allUsedNames);
2297
2533
  }
2298
- return renamedInlinedModules;
2534
+ return {
2535
+ sources: renamedInlinedModules,
2536
+ renamedDeclarations
2537
+ };
2299
2538
  }
2300
2539
 
2301
2540
  for (const [m, moduleInfo] of inlinedModulesToInfo) {
2302
- const { ast, source: _source, usedInNonInlined } = moduleInfo;
2303
- const source = new ReplaceSource(_source);
2541
+ const { usedInNonInlined } = moduleInfo;
2304
2542
  if (usedInNonInlined.size === 0) {
2305
- renamedInlinedModules.set(m, source);
2543
+ renamedInlinedModules.set(m, new ReplaceSource(moduleInfo.source));
2306
2544
  continue;
2307
2545
  }
2308
2546
 
2309
- const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
2310
2547
  const allUsedNames = new Set(
2311
- Array.from(info.through, (v) => v.identifier.name)
2548
+ Array.from(moduleInfo.through, (v) => v.identifier.name)
2312
2549
  );
2313
2550
 
2314
2551
  for (const variable of usedInNonInlined) {
2315
2552
  allUsedNames.add(variable.name);
2316
2553
  }
2317
2554
 
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);
2555
+ renameModule(moduleInfo, allUsedNames);
2330
2556
  }
2331
2557
 
2332
- return renamedInlinedModules;
2558
+ return {
2559
+ sources: renamedInlinedModules,
2560
+ renamedDeclarations
2561
+ };
2333
2562
  }
2334
2563
  }
2335
2564