webpack 5.111.0 → 5.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/README.md +1 -1
  2. package/lib/Chunk.js +3 -966
  3. package/lib/Compilation.js +237 -138
  4. package/lib/Compiler.js +23 -24
  5. package/lib/Dependency.js +3 -551
  6. package/lib/DependencyTemplate.js +3 -69
  7. package/lib/EntryPlugin.js +3 -68
  8. package/lib/Entrypoint.js +3 -121
  9. package/lib/ExternalsPlugin.js +3 -92
  10. package/lib/FileSystemInfo.js +3 -4629
  11. package/lib/InitFragment.js +3 -204
  12. package/lib/LibraryTemplatePlugin.js +3 -46
  13. package/lib/ModuleFilenameHelpers.js +3 -400
  14. package/lib/ModuleNotFoundError.js +2 -2
  15. package/lib/MultiCompiler.js +43 -24
  16. package/lib/NormalModule.js +3 -2190
  17. package/lib/NullFactory.js +3 -22
  18. package/lib/ProgressPlugin.js +3 -908
  19. package/lib/RawModule.js +3 -197
  20. package/lib/RequestShortener.js +3 -37
  21. package/lib/SingleEntryPlugin.js +1 -1
  22. package/lib/WebpackError.js +2 -2
  23. package/lib/asset/AssetBytesGenerator.js +15 -9
  24. package/lib/asset/AssetBytesParser.js +3 -3
  25. package/lib/asset/AssetGenerator.js +61 -38
  26. package/lib/asset/AssetModule.js +2 -2
  27. package/lib/asset/AssetModulesPlugin.js +6 -9
  28. package/lib/asset/AssetParser.js +3 -3
  29. package/lib/asset/AssetSourceGenerator.js +15 -9
  30. package/lib/asset/AssetSourceParser.js +3 -3
  31. package/lib/asset/RawDataUrlModule.js +17 -10
  32. package/lib/asset/WebManifestGenerator.js +7 -7
  33. package/lib/asset/WebManifestParser.js +5 -5
  34. package/lib/async-modules/AsyncModuleHelpers.js +6 -5
  35. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  36. package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
  37. package/lib/async-modules/isGeneratorLowered.js +3 -3
  38. package/lib/bun/BunTargetPlugin.js +1 -1
  39. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  40. package/lib/{Cache.js → cache/Cache.js} +1 -1
  41. package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
  42. package/lib/cache/IdleFileCachePlugin.js +2 -2
  43. package/lib/cache/MemoryCachePlugin.js +6 -6
  44. package/lib/cache/MemoryWithGcCachePlugin.js +9 -10
  45. package/lib/cache/PackFileCacheStrategy.js +11 -28
  46. package/lib/cache/ResolverCachePlugin.js +8 -4
  47. package/lib/cache/getLazyHashedEtag.js +3 -5
  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 +3 -9
  54. package/lib/{cli.js → config/cli.js} +5 -158
  55. package/lib/config/defaults.js +192 -122
  56. package/lib/config/getClaimedAssetTypes.js +28 -21
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +13 -4
  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/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  76. package/lib/{ContextModule.js → context/ContextModule.js} +50 -36
  77. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +25 -24
  78. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  79. package/lib/css/CssGenerator.js +57 -42
  80. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  81. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  82. package/lib/css/CssModule.js +27 -29
  83. package/lib/css/CssModulesPlugin.js +128 -44
  84. package/lib/css/CssParser.js +700 -311
  85. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  86. package/lib/css/cssMinify.js +130 -54
  87. package/lib/css/data.js +7017 -4648
  88. package/lib/css/syntax-parser.js +19873 -0
  89. package/lib/css/syntax-printer.js +6037 -0
  90. package/lib/css/syntax.js +37 -17370
  91. package/lib/debug/ProfilingPlugin.js +55 -23
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +25 -29
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +176 -44
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +39 -35
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +19 -20
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +34 -18
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -100
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +26 -22
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +26 -21
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +40 -41
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +22 -21
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +62 -93
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +83 -49
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +136 -122
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +68 -43
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +68 -65
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +199 -97
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +86 -43
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +110 -61
  188. package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
  189. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  190. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
  191. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
  192. package/lib/{util → dependencies/helpers}/chainedImports.js +8 -9
  193. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  194. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  195. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  196. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  197. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +125 -243
  200. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
  201. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +72 -23
  202. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +53 -19
  203. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  204. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  205. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  206. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  207. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
  208. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  209. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  210. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  211. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  212. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  213. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +126 -107
  214. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  215. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  216. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  217. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  218. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +34 -25
  219. package/lib/{url → dependencies/url}/URLParserPlugin.js +22 -26
  220. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  221. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  222. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  223. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  224. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +46 -54
  225. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +28 -20
  226. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +25 -27
  227. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  228. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  229. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  230. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  231. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +207 -129
  232. package/lib/{util → devtool}/generateDebugId.js +1 -1
  233. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  234. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  235. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  236. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  237. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  238. package/lib/dll/DelegatedModule.js +20 -18
  239. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  240. package/lib/dll/DelegatedPlugin.js +1 -1
  241. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  242. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  243. package/lib/dll/DllEntryPlugin.js +3 -3
  244. package/lib/dll/DllModule.js +11 -9
  245. package/lib/dll/DllModuleFactory.js +3 -3
  246. package/lib/dll/DllPlugin.js +18 -6
  247. package/lib/dll/DllReferencePlugin.js +102 -26
  248. package/lib/dll/LibManifestPlugin.js +9 -7
  249. package/lib/electron/ElectronTargetPlugin.js +2 -2
  250. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  251. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  252. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  253. package/lib/entry/EntryPlugin.js +75 -0
  254. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  255. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  256. package/lib/errors/BuildCycleError.js +1 -1
  257. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  258. package/lib/errors/ChunkRenderError.js +1 -1
  259. package/lib/errors/CodeGenerationError.js +1 -1
  260. package/lib/errors/CommentCompilationWarning.js +1 -1
  261. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  262. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  263. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  264. package/lib/errors/DllManifestError.js +26 -0
  265. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  266. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  267. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  268. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  269. package/lib/errors/ErrorHelpers.js +222 -0
  270. package/lib/errors/ExternalStarReexportError.js +2 -2
  271. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  272. package/lib/errors/HookWebpackError.js +6 -5
  273. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  274. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  275. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  276. package/lib/errors/ModuleBuildError.js +1 -1
  277. package/lib/errors/ModuleDependencyError.js +2 -2
  278. package/lib/errors/ModuleDependencyWarning.js +2 -2
  279. package/lib/errors/ModuleError.js +1 -1
  280. package/lib/errors/ModuleHashingError.js +1 -1
  281. package/lib/errors/ModuleNotFoundError.js +3 -3
  282. package/lib/errors/ModuleParseError.js +1 -1
  283. package/lib/errors/ModuleRestoreError.js +1 -1
  284. package/lib/errors/ModuleStoreError.js +1 -1
  285. package/lib/errors/ModuleWarning.js +1 -1
  286. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  287. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  288. package/lib/errors/NodeStuffInWebError.js +7 -2
  289. package/lib/errors/PathVariableError.js +31 -0
  290. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  291. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  292. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  293. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  294. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  295. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  296. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  297. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  298. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  299. package/lib/errors/WebpackError.js +12 -3
  300. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  301. package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
  302. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  303. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  304. package/lib/{ExternalModule.js → externals/ExternalModule.js} +85 -63
  305. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
  306. package/lib/externals/ExternalsPlugin.js +99 -0
  307. package/lib/fs/FileSystemInfo.js +4642 -0
  308. package/lib/{util → fs}/fs.js +22 -9
  309. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  310. package/lib/graph/Chunk.js +985 -0
  311. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
  312. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  313. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  314. package/lib/graph/Dependency.js +628 -0
  315. package/lib/graph/Entrypoint.js +136 -0
  316. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +151 -99
  317. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  318. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +36 -39
  319. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  320. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +163 -72
  321. package/lib/{util → graph}/findGraphRoots.js +20 -21
  322. package/lib/graph/isDependencyKind.js +23 -0
  323. package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
  324. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +49 -47
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  326. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
  327. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  328. package/lib/hmr/LazyCompilationPlugin.js +34 -26
  329. package/lib/html/HtmlGenerator.js +168 -125
  330. package/lib/html/HtmlModule.js +6 -2
  331. package/lib/html/HtmlModulesPlugin.js +260 -215
  332. package/lib/html/HtmlParser.js +598 -292
  333. package/lib/html/builtinEmbeddedRenderer.js +60 -13
  334. package/lib/html/data.js +23 -1
  335. package/lib/html/htmlMinify.js +120 -51
  336. package/lib/html/syntax-parser.js +15796 -0
  337. package/lib/html/syntax-printer.js +1034 -0
  338. package/lib/html/syntax.js +37 -14062
  339. package/lib/html/xmlMinify.js +67 -0
  340. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  341. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  342. package/lib/ids/HashedModuleIdsPlugin.js +31 -4
  343. package/lib/ids/IdHelpers.js +4 -4
  344. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  345. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  346. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  347. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  348. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  349. package/lib/{util → ids}/numberHash.js +1 -1
  350. package/lib/index.js +348 -99
  351. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +29 -30
  352. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  353. package/lib/javascript/BasicEvaluatedExpression.js +4 -4
  354. package/lib/javascript/ChunkHelpers.js +64 -4
  355. package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
  356. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +10 -11
  357. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +90 -139
  358. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  359. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  360. package/lib/javascript/JavascriptGenerator.js +25 -18
  361. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
  362. package/lib/javascript/JavascriptModule.js +4 -3
  363. package/lib/javascript/JavascriptModulesPlugin.js +458 -256
  364. package/lib/javascript/JavascriptParser.js +916 -287
  365. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  366. package/lib/javascript/MergedEntryExports.js +196 -0
  367. package/lib/javascript/ScopeAnalyzer.js +3840 -5
  368. package/lib/javascript/StartupHelpers.js +6 -6
  369. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
  370. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  371. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  372. package/lib/javascript/data.js +533 -122
  373. package/lib/javascript/jsMinify.js +272 -0
  374. package/lib/javascript/regexp.js +67 -32
  375. package/lib/javascript/syntax-parser.js +18561 -0
  376. package/lib/javascript/syntax-printer-data.js +933 -0
  377. package/lib/javascript/syntax-printer.js +47106 -0
  378. package/lib/javascript/syntax.js +20 -10946
  379. package/lib/json/JsonData.js +1 -1
  380. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  381. package/lib/json/JsonGenerator.js +17 -11
  382. package/lib/json/JsonModule.js +2 -2
  383. package/lib/json/JsonModulesPlugin.js +1 -1
  384. package/lib/json/JsonParser.js +5 -5
  385. package/lib/json/jsonMinify.js +69 -0
  386. package/lib/library/AbstractLibraryPlugin.js +28 -15
  387. package/lib/library/AmdLibraryPlugin.js +4 -4
  388. package/lib/library/AssignLibraryPlugin.js +27 -11
  389. package/lib/library/EnableLibraryPlugin.js +1 -1
  390. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  391. package/lib/library/JsonpLibraryPlugin.js +1 -1
  392. package/lib/library/LibraryTemplatePlugin.js +53 -0
  393. package/lib/library/ModuleLibraryPlugin.js +207 -285
  394. package/lib/library/SystemLibraryPlugin.js +6 -8
  395. package/lib/library/UmdLibraryPlugin.js +3 -4
  396. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  397. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  398. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  399. package/lib/{dependencies → loaders}/LoaderPlugin.js +27 -2
  400. package/lib/loaders/LoaderRunner.js +160 -22
  401. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  402. package/lib/logging/Logger.js +7 -9
  403. package/lib/logging/ProgressPlugin.js +957 -0
  404. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  405. package/lib/{Generator.js → module/Generator.js} +38 -14
  406. package/lib/{Module.js → module/Module.js} +122 -54
  407. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  408. package/lib/module/NormalModule.js +2348 -0
  409. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
  410. package/lib/module/NullFactory.js +29 -0
  411. package/lib/{Parser.js → module/Parser.js} +3 -3
  412. package/lib/module/RawModule.js +208 -0
  413. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  414. package/lib/{util → module}/extractSourceMap.js +2 -2
  415. package/lib/{util → module}/findCaseMismatch.js +2 -2
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  417. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  418. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
  419. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  420. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  421. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  422. package/lib/node/NodeTargetPlugin.js +1 -1
  423. package/lib/node/NodeWatchFileSystem.js +61 -15
  424. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  425. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
  426. package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
  427. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  428. package/lib/node/nodeConsole.js +2 -4
  429. package/lib/optimize/AggressiveMergingPlugin.js +5 -7
  430. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  431. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
  432. package/lib/optimize/ConcatenatedModule.js +305 -309
  433. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  434. package/lib/optimize/ConstExportsPlugin.js +7 -7
  435. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  436. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  437. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +25 -30
  438. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +26 -30
  439. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  440. package/lib/optimize/FlagIncludedChunksPlugin.js +5 -13
  441. package/lib/optimize/InlineExports.js +11 -3
  442. package/lib/optimize/InnerGraph.js +5 -13
  443. package/lib/optimize/InnerGraphPlugin.js +17 -23
  444. package/lib/optimize/LazyBarrels.js +584 -0
  445. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  446. package/lib/optimize/LimitChunkCountPlugin.js +21 -15
  447. package/lib/optimize/MangleExportsPlugin.js +8 -9
  448. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  449. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  450. package/lib/optimize/ModuleConcatenationPlugin.js +23 -16
  451. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  452. package/lib/optimize/RealContentHashPlugin.js +16 -7
  453. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  454. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  455. package/lib/optimize/SideEffectsFlagPlugin.js +25 -37
  456. package/lib/optimize/SplitChunksPlugin.js +715 -159
  457. package/lib/{util → optimize}/TupleQueue.js +9 -9
  458. package/lib/optimize/chunkSetIntersections.js +437 -0
  459. package/lib/{util → optimize}/deterministicGrouping.js +25 -30
  460. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  461. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
  462. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
  463. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  464. package/lib/output/SSRManifestPlugin.js +349 -0
  465. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  466. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  467. package/lib/performance/BroadContextsPlugin.js +4 -4
  468. package/lib/performance/CacheEffectivenessPlugin.js +5 -7
  469. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  470. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  471. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  472. package/lib/performance/DynamicExportsPlugin.js +2 -2
  473. package/lib/performance/EvalUsagePlugin.js +3 -3
  474. package/lib/performance/HotspotsPlugin.js +11 -10
  475. package/lib/performance/LargeModulesPlugin.js +2 -3
  476. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  477. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  478. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  479. package/lib/performance/PureAnnotationsPlugin.js +3 -3
  480. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  481. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  482. package/lib/performance/SizeLimitsPlugin.js +13 -16
  483. package/lib/performance/TopLevelThisPlugin.js +8 -7
  484. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  485. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  486. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  487. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  488. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  489. package/lib/performance/UnusedFederationPlugin.js +2 -4
  490. package/lib/performance/UnusedModulesPlugin.js +5 -4
  491. package/lib/performance/getModuleSize.js +1 -1
  492. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  493. package/lib/performance/isOnlyReexported.js +7 -6
  494. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  495. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  496. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +7 -9
  497. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  498. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  499. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  500. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  501. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  502. package/lib/prefetch/ResourceHintPlugin.js +82 -65
  503. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  504. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -13
  505. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  506. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  507. package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
  508. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  509. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  510. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  511. package/lib/resolve/getResolveOptionsKey.js +59 -0
  512. package/lib/rules/RuleSetCompiler.js +27 -46
  513. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  514. package/lib/runtime/AsyncModuleRuntimeModule.js +10 -9
  515. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  516. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  517. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  518. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  519. package/lib/runtime/CompatRuntimeModule.js +4 -4
  520. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  521. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  522. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  523. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  524. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  525. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  526. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  527. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -10
  528. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  529. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  530. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  531. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  532. package/lib/runtime/GlobalRuntimeModule.js +5 -7
  533. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  534. package/lib/runtime/HelperRuntimeModule.js +16 -1
  535. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  536. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +135 -102
  537. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  538. package/lib/runtime/NonceRuntimeModule.js +2 -2
  539. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  540. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  541. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  542. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
  543. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  544. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  545. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
  546. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  547. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  548. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  549. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  550. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  551. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  552. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  553. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  554. package/lib/runtime/baseUri.js +1 -1
  555. package/lib/schemes/DataUriPlugin.js +4 -7
  556. package/lib/schemes/HttpUriPlugin.js +67 -11
  557. package/lib/schemes/VirtualUrlPlugin.js +50 -16
  558. package/lib/serialization/AggregateErrorSerializer.js +2 -2
  559. package/lib/serialization/BinaryMiddleware.js +9 -9
  560. package/lib/serialization/FileMiddleware.js +19 -19
  561. package/lib/serialization/ObjectMiddleware.js +77 -49
  562. package/lib/serialization/SerializerMiddleware.js +2 -2
  563. package/lib/serialization/SingleItemMiddleware.js +4 -2
  564. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  565. package/lib/sharing/ConsumeSharedModule.js +18 -14
  566. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  567. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  568. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  569. package/lib/sharing/ProvideSharedDependency.js +1 -1
  570. package/lib/sharing/ProvideSharedModule.js +11 -9
  571. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  572. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  573. package/lib/sharing/SharePlugin.js +102 -9
  574. package/lib/sharing/ShareRuntimeModule.js +6 -6
  575. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  576. package/lib/{util → sharing}/semver.js +19 -19
  577. package/lib/sharing/utils.js +59 -2
  578. package/lib/stats/DefaultStatsFactoryPlugin.js +25 -23
  579. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  580. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
  581. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  582. package/lib/{Stats.js → stats/Stats.js} +4 -4
  583. package/lib/stats/StatsFactory.js +14 -13
  584. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  585. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  586. package/lib/template/DependencyTemplate.js +77 -0
  587. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  588. package/lib/template/InitFragment.js +223 -0
  589. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  590. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  591. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  592. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +178 -106
  593. package/lib/{Template.js → template/Template.js} +13 -11
  594. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +35 -82
  595. package/lib/typescript/TypeScriptPlugin.js +5 -6
  596. package/lib/util/LocConverter.js +4 -7
  597. package/lib/util/RequestShortener.js +44 -0
  598. package/lib/util/SortableSet.js +87 -22
  599. package/lib/util/SourceProcessor.js +364 -66
  600. package/lib/util/TupleSet.js +27 -27
  601. package/lib/util/WeakTupleMap.js +10 -12
  602. package/lib/util/buildDiagnostics.js +2 -2
  603. package/lib/util/comparators.js +10 -10
  604. package/lib/util/concatenate.js +32 -151
  605. package/lib/util/createHooksRegistry.js +1 -2
  606. package/lib/util/createMappings.js +111 -0
  607. package/lib/util/dataURL.js +96 -18
  608. package/lib/util/deprecation.js +1 -1
  609. package/lib/util/extractComments.js +118 -0
  610. package/lib/util/formatLocation.js +1 -1
  611. package/lib/util/globUtils.js +197 -16
  612. package/lib/util/haltVisitors.js +51 -0
  613. package/lib/util/handlerKeys.js +2 -2
  614. package/lib/util/hash/wasm-hash.js +3 -4
  615. package/lib/util/identifier.js +117 -1
  616. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  617. package/lib/util/internalSerializables.js +295 -103
  618. package/lib/util/magicComment.js +12 -7
  619. package/lib/util/makeSerializable.js +23 -4
  620. package/lib/util/parseJson.js +1 -1
  621. package/lib/util/preloadModuleType.js +5 -2
  622. package/lib/util/registerExternalSerializer.js +2 -2
  623. package/lib/util/removeBOM.js +1 -1
  624. package/lib/util/runtime.js +1 -1
  625. package/lib/util/serialization.js +4 -1
  626. package/lib/util/source.js +2 -2
  627. package/lib/util/terminalColors.js +161 -0
  628. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  629. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  630. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
  631. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +11 -6
  632. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +16 -11
  633. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  634. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
  635. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  636. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
  637. package/lib/wasm/wasmModuleFilename.js +2 -2
  638. package/lib/wasm-sync/SyncWasmModule.js +3 -3
  639. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +11 -12
  640. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  641. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -9
  642. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +19 -16
  643. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  644. package/lib/wasm-sync/WebAssemblyParser.js +6 -6
  645. package/lib/wasm-sync/WebAssemblyUtils.js +8 -9
  646. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  647. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  648. package/lib/{Watching.js → watch/Watching.js} +8 -8
  649. package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
  650. package/lib/web/FetchCompileWasmPlugin.js +6 -4
  651. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  652. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  653. package/lib/web/JsonpTemplatePlugin.js +1 -1
  654. package/lib/webpack.js +27 -17
  655. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  656. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  657. package/package.json +70 -40
  658. package/schemas/WebpackOptions.check.js +2 -1
  659. package/schemas/WebpackOptions.d.json.ts +2 -0
  660. package/schemas/WebpackOptions.json +294 -74
  661. package/schemas/plugins/BannerPlugin.check.js +2 -1
  662. package/schemas/plugins/BannerPlugin.json +29 -2
  663. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
  664. package/schemas/plugins/HtmlParserOptions.check.js +2 -1
  665. package/schemas/plugins/IgnorePlugin.check.js +1 -0
  666. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  667. package/schemas/plugins/IgnorePlugin.json +1 -1
  668. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
  669. package/schemas/plugins/ManifestPlugin.check.js +1 -0
  670. package/schemas/plugins/ManifestPlugin.json +3 -3
  671. package/schemas/plugins/ProgressPlugin.check.js +2 -1
  672. package/schemas/plugins/ProgressPlugin.json +2 -7
  673. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  674. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  675. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
  676. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  677. package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
  678. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  679. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
  680. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
  681. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
  682. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
  683. package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
  684. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  685. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
  686. package/schemas/plugins/container/ExternalsType.check.js +1 -0
  687. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
  688. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  689. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
  690. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
  691. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
  692. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
  693. package/schemas/plugins/css/CssParserOptions.check.js +1 -0
  694. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
  695. package/schemas/plugins/dll/DllPlugin.check.js +1 -0
  696. package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
  697. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  698. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
  699. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
  700. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
  701. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
  702. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
  703. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
  704. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
  705. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
  706. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
  707. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
  708. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
  709. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
  710. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  711. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
  712. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  713. package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
  714. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  715. package/types.d.ts +13915 -8414
  716. package/lib/ErrorHelpers.js +0 -107
  717. package/lib/LazyBarrel.js +0 -388
  718. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  719. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  720. package/lib/javascript/ChunkFormatHelpers.js +0 -71
  721. package/lib/javascript/grammar.js +0 -5546
  722. package/lib/javascript/parser.js +0 -1494
  723. package/lib/javascript/regexpData.js +0 -51
  724. package/lib/performance/getSourceModules.js +0 -22
  725. package/lib/util/Semaphore.js +0 -65
  726. package/lib/util/objectToMap.js +0 -15
  727. package/schemas/WebpackOptions.check.d.ts +0 -7
  728. package/schemas/_container.json +0 -155
  729. package/schemas/_sharing.json +0 -118
  730. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  731. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  732. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  733. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  734. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  735. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  736. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  737. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  738. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  739. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  740. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  741. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  742. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  743. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  745. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  746. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  747. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  748. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  749. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  750. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  751. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  752. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  753. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  754. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  755. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  756. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  758. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  759. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  760. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  761. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  762. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  763. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  764. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  765. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  768. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  769. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  770. /package/lib/{util → css}/conventions.js +0 -0
  771. /package/lib/{util → css}/topologicalSort.js +0 -0
  772. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  773. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  774. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  775. /package/lib/{util → javascript}/StackedMap.js +0 -0
  776. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  777. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  778. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  779. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  780. /package/lib/{util → optimize}/Queue.js +0 -0
  781. /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,43 +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 { RuntimeSpec } from "../util/runtime" */
82
- /** @import ModuleGraph from "../ModuleGraph" */
83
- /** @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" */
84
88
  /** @import WebpackError from "../errors/WebpackError" */
85
89
  /** @import { Range } from "../javascript/JavascriptParser" */
86
90
  /** @import Hash from "../util/Hash" */
@@ -254,6 +258,8 @@ const printGeneratedCodeForStack = (module, code) => {
254
258
  * @property {boolean=} inlined inlined
255
259
  * @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE
256
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
257
263
  */
258
264
 
259
265
  /**
@@ -332,18 +338,6 @@ const createCompilationHooks = () => ({
332
338
  * @since 5.22.0
333
339
  */
334
340
  inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
335
- /**
336
- * Offers a module's rendered export-definition call to a consumer that can place
337
- * it better — a library whose entry exports the same bindings natively takes it
338
- * over and emits it only where the module is wrapped. Return true to take it.
339
- * @type {SyncBailHook<[Module, RuntimeSpec, string, boolean], boolean | void>}
340
- */
341
- onDemandExportsGeneration: new SyncBailHook([
342
- "module",
343
- "runtime",
344
- "source",
345
- "placeAtEnd"
346
- ]),
347
341
  /**
348
342
  * @type {SyncBailHook<[Module, RenderContext], string | void>}
349
343
  * @since 5.22.0
@@ -375,20 +369,22 @@ const createCompilationHooks = () => ({
375
369
  * in `allUsedNames`. Lets inlined modules be emitted without a per-entry/per-chunk
376
370
  * IIFE by resolving name collisions instead of isolating each module.
377
371
  * @param {InstanceType<typeof import("webpack-sources").ReplaceSource>} source the module source to edit
378
- * @param {Program} ast the parsed module AST
372
+ * @param {Set<number>} shorthandIdentifierStarts where each shorthand property's identifier starts
379
373
  * @param {Variable} variable the top-level variable to check/rename
380
374
  * @param {string} moduleIdentifier the module identifier (for scope caching)
381
375
  * @param {string} readableIdentifier the readable module identifier (for new names)
382
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)
383
378
  * @returns {void}
384
379
  */
385
380
  const renameInlinedModuleVariable = (
386
381
  source,
387
- ast,
382
+ shorthandIdentifierStarts,
388
383
  variable,
389
384
  moduleIdentifier,
390
385
  readableIdentifier,
391
- allUsedNames
386
+ allUsedNames,
387
+ renamedDeclarations
392
388
  ) => {
393
389
  /** @type {UsedNamesInScopeInfo} */
394
390
  const usedNamesInScopeInfo = new Map();
@@ -419,18 +415,12 @@ const renameInlinedModuleVariable = (
419
415
  readableIdentifier
420
416
  );
421
417
  allUsedNames.add(newName);
418
+ renamedDeclarations.set(name, newName);
422
419
  for (const identifier of allIdentifiers) {
423
420
  const r = /** @type {Range} */ (identifier.range);
424
- const path = getPathInAst(ast, identifier);
425
- if (path && path.length > 1) {
426
- const maybeProperty =
427
- path[1].type === "AssignmentPattern" && path[1].left === path[0]
428
- ? path[2]
429
- : path[1];
430
- if (maybeProperty.type === "Property" && maybeProperty.shorthand) {
431
- source.insert(r[1], `: ${newName}`);
432
- continue;
433
- }
421
+ if (shorthandIdentifierStarts.has(r[0])) {
422
+ source.insert(r[1], `: ${newName}`);
423
+ continue;
434
424
  }
435
425
  source.replace(r[0], r[1] - 1, newName);
436
426
  }
@@ -440,13 +430,28 @@ const renameInlinedModuleVariable = (
440
430
 
441
431
  const PLUGIN_NAME = "JavascriptModulesPlugin";
442
432
 
443
- /** @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
+ */
444
445
 
445
446
  class JavascriptModulesPlugin {
446
447
  constructor(options = {}) {
447
448
  this.options = options;
448
- /** @type {WeakMap<Source, { source: Source, needModule: boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
449
+ /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
449
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();
450
455
  }
451
456
 
452
457
  /**
@@ -459,6 +464,9 @@ class JavascriptModulesPlugin {
459
464
  // drop them when the build ends so an idle process retains no parser state
460
465
  compiler.hooks.done.tap(PLUGIN_NAME, releaseParserCaches);
461
466
  compiler.hooks.failed.tap(PLUGIN_NAME, releaseParserCaches);
467
+ compiler.hooks.afterEmit.tap(PLUGIN_NAME, (compilation) => {
468
+ this._releaseRenderedModuleFactorySources(compilation);
469
+ });
462
470
  compiler.hooks.compilation.tap(
463
471
  PLUGIN_NAME,
464
472
  (compilation, { normalModuleFactory }) => {
@@ -534,7 +542,7 @@ class JavascriptModulesPlugin {
534
542
  codeGenerationResults
535
543
  } = options;
536
544
 
537
- const hotUpdateChunk = chunk instanceof HotUpdateChunk ? chunk : null;
545
+ const hotUpdateChunk = chunk.isHotUpdate() ? chunk : null;
538
546
  const filenameTemplate =
539
547
  JavascriptModulesPlugin.getChunkFilenameTemplate(
540
548
  chunk,
@@ -703,16 +711,93 @@ class JavascriptModulesPlugin {
703
711
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
704
712
  PLUGIN_NAME,
705
713
  (chunk, set, { chunkGraph }) => {
706
- if (
707
- !set.has(RuntimeGlobals.startupNoDefault) &&
708
- chunkGraph.hasChunkEntryDependentChunks(chunk)
709
- ) {
714
+ if (set.has(RuntimeGlobals.startupNoDefault)) return;
715
+ if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
710
716
  set.add(RuntimeGlobals.onChunksLoaded);
711
717
  set.add(RuntimeGlobals.exports);
712
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);
713
733
  }
714
734
  }
715
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
+ });
716
801
  compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
717
802
  const source =
718
803
  options.codeGenerationResult.sources.get(JAVASCRIPT_TYPE);
@@ -790,7 +875,7 @@ class JavascriptModulesPlugin {
790
875
  static getChunkFilenameTemplate(chunk, outputOptions) {
791
876
  if (chunk.filenameTemplate) {
792
877
  return chunk.filenameTemplate;
793
- } else if (chunk instanceof HotUpdateChunk) {
878
+ } else if (chunk.isHotUpdate()) {
794
879
  return outputOptions.hotUpdateChunkFilename;
795
880
  }
796
881
  const entryOptions = chunk.getEntryOptions();
@@ -804,6 +889,39 @@ class JavascriptModulesPlugin {
804
889
  return outputOptions.chunkFilename;
805
890
  }
806
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
+
807
925
  /**
808
926
  * Renders the newly generated source from rendering.
809
927
  * @param {Module} module the rendered module
@@ -856,54 +974,41 @@ class JavascriptModulesPlugin {
856
974
  const needStrict =
857
975
  /** @type {BuildInfo} */
858
976
  (module.buildInfo).strict && !strictMode;
977
+ const renderShorthand =
978
+ renderInObject === true && runtimeTemplate.supportsMethodShorthand();
859
979
  const cacheEntry = this._moduleFactoryCache.get(
860
980
  moduleSourcePostContent
861
981
  );
862
- const renderShorthand =
863
- renderInObject === true && runtimeTemplate.supportsMethodShorthand();
864
- /** @type {Source} */
982
+ /** @type {Source | undefined} */
865
983
  let source;
866
- if (
867
- cacheEntry &&
868
- cacheEntry.needModule === needModule &&
869
- cacheEntry.needExports === needExports &&
870
- cacheEntry.needRequire === needRequire &&
871
- cacheEntry.needThisAsExports === needThisAsExports &&
872
- cacheEntry.needStrict === needStrict &&
873
- cacheEntry.renderShorthand === renderShorthand
874
- ) {
875
- source = cacheEntry.source;
876
- } else {
877
- const factorySource = new ConcatSource();
878
- /** @type {string[]} */
879
- const args = [];
880
- if (needExports || needRequire || needModule) {
881
- args.push(
882
- needModule
883
- ? module.moduleArgument
884
- : `__unused_webpack_${module.moduleArgument}`
885
- );
886
- }
887
- if (needExports || needRequire) {
888
- args.push(
889
- needExports
890
- ? module.exportsArgument
891
- : `__unused_webpack_${module.exportsArgument}`
892
- );
893
- }
894
- if (needRequire) args.push(RuntimeGlobals.require);
895
-
896
- if (renderShorthand) {
897
- // we can optimize function to methodShorthand if render module factory in object
898
- factorySource.add(`(${args.join(", ")}) {\n\n`);
899
- } else if (
900
- !needThisAsExports &&
901
- 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
902
994
  ) {
903
- factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
904
- } else {
905
- factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
995
+ source = entry.source;
996
+ break;
906
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
+ );
907
1012
 
908
1013
  if (needStrict) {
909
1014
  factorySource.add('"use strict";\n');
@@ -918,9 +1023,23 @@ class JavascriptModulesPlugin {
918
1023
  needRequire,
919
1024
  needThisAsExports,
920
1025
  needStrict,
921
- renderShorthand
1026
+ renderShorthand,
1027
+ next: cacheEntry
922
1028
  });
923
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);
924
1043
  moduleSourcePostContainer = tryRunOrWebpackError(
925
1044
  () => hooks.renderModuleContainer.call(source, module, renderContext),
926
1045
  "JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer"
@@ -980,10 +1099,8 @@ class JavascriptModulesPlugin {
980
1099
  // ESM entry chunk whose runtime lives in a separate chunk: inline the
981
1100
  // single entry module at the top level (instead of the module registry)
982
1101
  // so its own top-level declarations stay live ESM bindings for consumers.
983
- const inlinedEntryModule = this._getEsmEntryModuleToInline(
984
- renderContext,
985
- allModules
986
- );
1102
+ const inlinedEntryModule =
1103
+ JavascriptModulesPlugin._getEsmEntryModuleToInline(renderContext);
987
1104
  let registryModules = allModules;
988
1105
  if (inlinedEntryModule) {
989
1106
  const inlinedEntrySource = this.renderModule(
@@ -1049,18 +1166,20 @@ class JavascriptModulesPlugin {
1049
1166
  * its exports as live ESM bindings. Only a self-contained ESM entry whose
1050
1167
  * top-level declarations can be lifted into the chunk scope qualifies;
1051
1168
  * otherwise `undefined` is returned and the registry path is used.
1052
- * @param {RenderContext} renderContext render context
1053
- * @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
1054
1173
  * @returns {Module | undefined} the entry module to inline, if any
1055
1174
  */
1056
- _getEsmEntryModuleToInline(renderContext, allModules) {
1175
+ static _getEsmEntryModuleToInline(context) {
1057
1176
  const {
1058
1177
  chunk,
1059
1178
  chunkGraph,
1060
1179
  moduleGraph,
1061
1180
  runtimeTemplate,
1062
1181
  codeGenerationResults
1063
- } = renderContext;
1182
+ } = context;
1064
1183
 
1065
1184
  // Only a single ESM entry whose runtime lives in a separate chunk.
1066
1185
  if (
@@ -1285,7 +1404,7 @@ class JavascriptModulesPlugin {
1285
1404
  const startupSource = new ConcatSource();
1286
1405
 
1287
1406
  const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
1288
- /** @type {Map<Module, Source> | false} */
1407
+ /** @type {RenamedInlinedModules | false} */
1289
1408
  let renamedInlinedModule = false;
1290
1409
  let inlinedInIIFE = false;
1291
1410
 
@@ -1329,7 +1448,7 @@ class JavascriptModulesPlugin {
1329
1448
  }
1330
1449
 
1331
1450
  const renderedModule = renamedInlinedModule
1332
- ? renamedInlinedModule.get(m)
1451
+ ? renamedInlinedModule.sources.get(m)
1333
1452
  : this.renderModule(
1334
1453
  m,
1335
1454
  {
@@ -1386,7 +1505,10 @@ class JavascriptModulesPlugin {
1386
1505
  ...renderContext,
1387
1506
  inlined: true,
1388
1507
  inlinedInIIFE,
1389
- needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports)
1508
+ needExportsDeclaration: runtimeRequirements.has(RuntimeGlobals.exports),
1509
+ renamedDeclarations: renamedInlinedModule
1510
+ ? renamedInlinedModule.renamedDeclarations.get(lastInlinedModule)
1511
+ : undefined
1390
1512
  };
1391
1513
  let renderedStartup = hooks.renderStartup.call(
1392
1514
  startupSource,
@@ -1448,7 +1570,8 @@ class JavascriptModulesPlugin {
1448
1570
  {
1449
1571
  ...renderContext,
1450
1572
  inlined: false,
1451
- needExportsDeclaration: true
1573
+ needExportsDeclaration: true,
1574
+ exportsAwaited: bootstrap.exportsAwaited
1452
1575
  }
1453
1576
  ),
1454
1577
  toSource(bootstrap.afterStartup, "webpack/after-startup"),
@@ -1560,14 +1683,15 @@ class JavascriptModulesPlugin {
1560
1683
  requireFunction || interceptModuleExecution || moduleUsed;
1561
1684
 
1562
1685
  /**
1563
- * @type {{ startup: string[], beforeStartup: string[], header: string[], afterStartup: string[], allowInlineStartup: boolean }}
1686
+ * @type {Bootstrap}
1564
1687
  */
1565
1688
  const result = {
1566
1689
  header: [],
1567
1690
  beforeStartup: [],
1568
1691
  startup: [],
1569
1692
  afterStartup: [],
1570
- allowInlineStartup: true
1693
+ allowInlineStartup: true,
1694
+ exportsAwaited: false
1571
1695
  };
1572
1696
 
1573
1697
  const { header: buf, startup, beforeStartup, afterStartup } = result;
@@ -1597,17 +1721,14 @@ class JavascriptModulesPlugin {
1597
1721
  }
1598
1722
 
1599
1723
  if (runtimeRequirements.has(RuntimeGlobals.makeDeferredNamespaceObject)) {
1600
- // in order to optimize of DeferredNamespaceObject, we remove all proxy handlers after the module initialize
1601
- // (see MakeDeferredNamespaceObjectRuntimeModule)
1602
- // This requires all deferred imports to a module can get the module export object before the module
1603
- // is evaluated.
1724
+ // The deferred namespace drops its proxy handlers once the module has
1725
+ // initialized, which needs every deferred import of it to reach the exports
1726
+ // object before evaluation.
1604
1727
  buf.push("// The deferred module cache");
1605
1728
  buf.push(`${bootstrapCst} __webpack_module_deferred_exports__ = {};`);
1606
- // Per the TC39 import-defer spec, every defer-import call site for
1607
- // the same module must yield the same Deferred Module Namespace
1608
- // Exotic Object (and a distinct one from any eager namespace).
1609
- // Cache the deferred namespace proxy here so calls from different
1610
- // files share identity.
1729
+ // Every defer-import site for one module must yield the same Deferred
1730
+ // Module Namespace, distinct from any eager one, so the proxy is cached
1731
+ // here for call sites in different files to share.
1611
1732
  buf.push("// The deferred namespace cache");
1612
1733
  buf.push(
1613
1734
  `${bootstrapCst} __webpack_module_deferred_namespace_cache__ = {};`
@@ -1674,22 +1795,32 @@ class JavascriptModulesPlugin {
1674
1795
  entryOptions && entryOptions.library !== undefined
1675
1796
  ? entryOptions.library
1676
1797
  : runtimeTemplate.outputOptions.library;
1677
- // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1678
- const awaitedByLibrary =
1679
- library !== undefined && library.type === "module";
1798
+ const mergedModules = mergedEntryModulesOfLibrary(
1799
+ library,
1800
+ chunk,
1801
+ chunkGraph
1802
+ );
1803
+ const merge = mergedModules !== undefined;
1680
1804
  // `await` is legal only at an ESM chunk's top level, never in the
1681
1805
  // startup function below, and only where the target parses it.
1682
1806
  const canAwaitEntry =
1683
1807
  runtimeTemplate.isModule() &&
1684
1808
  runtimeTemplate.supportsTopLevelAwait() &&
1685
- !awaitedByLibrary &&
1686
1809
  !runtimeRequirements.has(RuntimeGlobals.startup) &&
1687
1810
  !(
1688
1811
  runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1689
1812
  runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1690
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
+ }
1691
1820
  /** @type {string[]} */
1692
1821
  const awaitedEntries = [];
1822
+ /** @type {Map<Module, string>} */
1823
+ const mergedTargets = new Map();
1693
1824
  let i = jsEntries.length;
1694
1825
  for (const [entryModule, entrypoint] of jsEntries) {
1695
1826
  const chunks =
@@ -1718,6 +1849,12 @@ class JavascriptModulesPlugin {
1718
1849
  buf2.push(
1719
1850
  "// This entry module is referenced by other modules so it can't be inlined"
1720
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
+ );
1721
1858
  result.allowInlineStartup = false;
1722
1859
  }
1723
1860
 
@@ -1797,32 +1934,36 @@ class JavascriptModulesPlugin {
1797
1934
  result.allowInlineStartup = false;
1798
1935
  }
1799
1936
 
1800
- // `__webpack_exports__` may be reassigned later — by the
1801
- // `onChunksLoaded` wrapper below, by an inlined entry
1802
- // module that uses top-level `await` (the emitted
1803
- // bridge reassigns `__webpack_exports__` to the awaited
1804
- // value), or by other downstream codegen. Always declare
1805
- // with `let` (or `var` if `let` is unsupported) so
1806
- // reassignment is allowed.
1937
+ // `__webpack_exports__` may be reassigned later, by the
1938
+ // `onChunksLoaded` wrapper, a top-level `await` bridge or other
1939
+ // codegen, so it is never declared as a constant.
1807
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);
1808
1948
  if (chunks.length > 0) {
1809
1949
  const awaitEntry =
1810
1950
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1811
- const target =
1812
- i === 0
1813
- ? RuntimeGlobals.exports
1814
- : `${RuntimeGlobals.exports}_${i}`;
1815
1951
  // The wrapper hands back nothing until the flush below runs the
1816
- // entry, so an awaited one is caught by the entry call itself.
1817
- 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
+ }
1818
1957
  const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1819
1958
  buf2.push(
1820
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1821
- RuntimeGlobals.onChunksLoaded
1822
- }(undefined, ${JSON.stringify(
1959
+ `${
1960
+ i === 0 && !merge
1961
+ ? `${exportsDecl} ${RuntimeGlobals.exports} = `
1962
+ : ""
1963
+ }${RuntimeGlobals.onChunksLoaded}(undefined, ${JSON.stringify(
1823
1964
  chunks.map((c) => c.id)
1824
1965
  )}, ${runtimeTemplate.returningFunction(
1825
- awaitEntry ? `(${target} = ${entryCall})` : entryCall
1966
+ capture ? `(${target} = ${entryCall})` : entryCall
1826
1967
  )})`
1827
1968
  );
1828
1969
  if (awaitEntry) awaitedEntries.push(target);
@@ -1831,18 +1972,14 @@ class JavascriptModulesPlugin {
1831
1972
  // which orphans its rejection.
1832
1973
  const awaitEntry =
1833
1974
  canAwaitEntry && moduleGraph.isAsync(entryModule);
1834
- const target =
1835
- i === 0
1836
- ? RuntimeGlobals.exports
1837
- : `${RuntimeGlobals.exports}_${i}`;
1838
- const needsDecl = i === 0 || awaitEntry;
1975
+ const needsDecl = i === 0 || awaitEntry || merge;
1839
1976
  buf2.push(
1840
1977
  `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1841
1978
  );
1842
1979
  if (awaitEntry) awaitedEntries.push(target);
1843
1980
  } else {
1844
- if (i === 0) {
1845
- buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
1981
+ if (i === 0 || merge) {
1982
+ buf2.push(`${exportsDecl} ${target} = {};`);
1846
1983
  }
1847
1984
  const needThisAsExports = entryRuntimeRequirements.has(
1848
1985
  RuntimeGlobals.thisAsExports
@@ -1854,7 +1991,7 @@ class JavascriptModulesPlugin {
1854
1991
  requireScopeUsed ||
1855
1992
  entryRuntimeRequirements.has(RuntimeGlobals.exports)
1856
1993
  ) {
1857
- const exportsArg = i === 0 ? RuntimeGlobals.exports : "{}";
1994
+ const exportsArg = i === 0 || merge ? target : "{}";
1858
1995
  args.push("0", exportsArg);
1859
1996
  if (requireScopeUsed) {
1860
1997
  args.push(RuntimeGlobals.require);
@@ -1866,7 +2003,7 @@ class JavascriptModulesPlugin {
1866
2003
  if (needThisAsExports) {
1867
2004
  const comma = args.length ? "," : "";
1868
2005
  return `__webpack_modules__[${moduleIdExpr}].call(${
1869
- RuntimeGlobals.exports
2006
+ merge ? target : RuntimeGlobals.exports
1870
2007
  }${comma}${args.join(",")});`;
1871
2008
  }
1872
2009
  return `__webpack_modules__[${moduleIdExpr}](${args.join(
@@ -1879,10 +2016,43 @@ class JavascriptModulesPlugin {
1879
2016
  }
1880
2017
  if (runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)) {
1881
2018
  buf2.push(
1882
- `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
2019
+ merge
2020
+ ? `${RuntimeGlobals.onChunksLoaded}();`
2021
+ : `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1883
2022
  );
1884
2023
  }
1885
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
+ }
1886
2056
  if (
1887
2057
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1888
2058
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
@@ -2012,11 +2182,9 @@ class JavascriptModulesPlugin {
2012
2182
  const needModuleDefer = runtimeRequirements.has(
2013
2183
  RuntimeGlobals.makeDeferredNamespaceObject
2014
2184
  );
2015
- // Both deferred-namespace runtimes re-invoke `__webpack_require__` on
2016
- // access, so a module's evaluation error must be retained and re-thrown
2017
- // (a Cyclic Module Record's [[EvaluationError]]); the optimized variant
2018
- // does not use `__webpack_module_deferred_exports__`, so it is tracked
2019
- // separately from `needModuleDefer`.
2185
+ // Both deferred-namespace runtimes re-invoke `__webpack_require__` on access,
2186
+ // so an evaluation error must be retained and re-thrown. The optimized one
2187
+ // skips the deferred exports object, hence the separate flag.
2020
2188
  const needModuleDeferAny =
2021
2189
  needModuleDefer ||
2022
2190
  runtimeRequirements.has(
@@ -2127,7 +2295,7 @@ class JavascriptModulesPlugin {
2127
2295
  * @param {CompilationHooks} hooks hooks
2128
2296
  * @param {boolean | undefined} allStrict allStrict
2129
2297
  * @param {boolean} hasChunkModules hasChunkModules
2130
- * @returns {Map<Module, Source> | false} renamed inlined modules
2298
+ * @returns {RenamedInlinedModules | false} renamed inlined modules
2131
2299
  */
2132
2300
  _getRenamedInlineModule(
2133
2301
  compilation,
@@ -2144,28 +2312,31 @@ class JavascriptModulesPlugin {
2144
2312
  allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
2145
2313
  const isMultipleEntries = inlinedModules.size > 1;
2146
2314
  const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
2147
- // This step is before the IIFE reason calculation; it only runs for the
2148
- // cases whose IIFE reason it can remove: multiple inlined entry modules, or a
2149
- // single inlined entry alongside other chunk modules. The remaining reason
2150
- // ('it uses a non-standard name for the exports') is not handled here.
2315
+ // Runs before the IIFE reason is calculated, and only for the cases whose
2316
+ // reason it can remove: several inlined entries, or one beside other chunk
2317
+ // modules. A non-standard exports name is not handled here.
2151
2318
  if (innerStrict || (!isMultipleEntries && !singleEntryWithModules)) {
2152
2319
  return false;
2153
2320
  }
2154
2321
 
2155
2322
  /** @type {Map<Module, Source>} */
2156
2323
  const renamedInlinedModules = new Map();
2324
+ /** @type {Map<Module, Map<string, string>>} */
2325
+ const renamedDeclarations = new Map();
2157
2326
  const { runtimeTemplate } = renderContext;
2158
2327
 
2159
- /** @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 */
2160
2329
  /** @type {Map<Module, Info>} */
2161
2330
  const inlinedModulesToInfo = new Map();
2162
2331
  /** @type {Set<string>} */
2163
2332
  const nonInlinedModuleThroughIdentifiers = new Set();
2164
2333
  /** @type {Map<Module, Source>} */
2165
2334
  const inlinedModuleSources = new Map();
2335
+ const { codeGenerationResults, chunk } = renderContext;
2166
2336
 
2167
2337
  for (const m of allModules) {
2168
2338
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
2339
+
2169
2340
  const moduleSource = this.renderModule(
2170
2341
  m,
2171
2342
  {
@@ -2183,6 +2354,47 @@ class JavascriptModulesPlugin {
2183
2354
  inlinedModuleSources.set(m, moduleSource);
2184
2355
  continue;
2185
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) => {
2186
2398
  const code = /** @type {string} */ (moduleSource.source());
2187
2399
 
2188
2400
  const { experiments } = compilation.options;
@@ -2196,37 +2408,71 @@ class JavascriptModulesPlugin {
2196
2408
  experiments.deferImport || experiments.sourceImport
2197
2409
  )
2198
2410
  },
2199
- JavascriptParser._getModuleParseFunction(compilation, m)
2411
+ JavascriptParser._getModuleParseFunction(compilation, module)
2200
2412
  );
2201
2413
 
2202
2414
  const analysis = analyzeScope(ast);
2203
2415
 
2204
- for (const ref of analysis.unresolvedReferences) {
2205
- 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
+ );
2206
2447
  }
2207
- }
2448
+ renamedInlinedModules.set(info.module, source);
2449
+ if (renamed.size > 0) renamedDeclarations.set(info.module, renamed);
2450
+ };
2208
2451
 
2209
- // Fast path: codegen reports each inlined entry's rendered top-level
2210
- // declarations and free names (post-concatenation), so when no declaration
2211
- // collides with a free name of any other module, another entry's
2212
- // declarations, or a reserved name, no renaming is needed and the entries
2213
- // don't have to 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.
2214
2454
  fastPath: {
2215
- const { codeGenerationResults, chunk } = renderContext;
2216
2455
  /** @type {Set<string>} */
2217
2456
  const usedNames = new Set(nonInlinedModuleThroughIdentifiers);
2218
2457
  for (const name of RESERVED_NAMES) usedNames.add(name);
2219
- /** @type {Set<string>[]} */
2220
- const declarationsList = [];
2221
- 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) {
2222
2462
  if (!codeGenerationResults.has(m, chunk.runtime)) break fastPath;
2223
2463
  const result = codeGenerationResults.get(m, chunk.runtime);
2224
2464
  const data = result.data;
2225
2465
  if (!data) break fastPath;
2226
2466
  const declarations = data.get("topLevelDeclarations");
2227
2467
  if (!declarations) break fastPath;
2228
- declarationsList.push(declarations);
2468
+ declarationsByModule.set(m, declarations);
2229
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);
2230
2476
  // Entries share the startup scope: an entry's free names and runtime
2231
2477
  // globals must not be shadowed by another entry's declarations.
2232
2478
  const freeNames = data.get("freeNames");
@@ -2239,49 +2485,26 @@ class JavascriptModulesPlugin {
2239
2485
  }
2240
2486
  }
2241
2487
  }
2242
- for (const declarations of declarationsList) {
2243
- for (const name of declarations) {
2244
- 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);
2245
2498
  }
2246
- // earlier entries' declarations join the used set so later entries
2247
- // are checked against them
2248
- for (const name of declarations) usedNames.add(name);
2249
2499
  }
2250
- for (const [m, moduleSource] of inlinedModuleSources) {
2251
- renamedInlinedModules.set(m, moduleSource);
2252
- }
2253
- return renamedInlinedModules;
2500
+ return {
2501
+ sources: renamedInlinedModules,
2502
+ renamedDeclarations
2503
+ };
2254
2504
  }
2255
2505
 
2256
2506
  for (const [m, moduleSource] of inlinedModuleSources) {
2257
- const code = /** @type {string} */ (moduleSource.source());
2258
-
2259
- const { experiments } = compilation.options;
2260
- const { ast } = JavascriptParser._parse(
2261
- code,
2262
- {
2263
- sourceType: "auto",
2264
- ranges: true,
2265
- // generated code contains phase imports when the experiments are on
2266
- importPhases: Boolean(
2267
- experiments.deferImport || experiments.sourceImport
2268
- )
2269
- },
2270
- JavascriptParser._getModuleParseFunction(compilation, m)
2271
- );
2272
-
2273
- const analysis = analyzeScope(ast);
2274
-
2275
- const moduleScope = analysis.moduleScope;
2276
- inlinedModulesToInfo.set(m, {
2277
- source: moduleSource,
2278
- ast,
2279
- module: m,
2280
- variables: new Set(moduleScope.variables),
2281
- through: new Set(analysis.unresolvedReferences),
2282
- usedInNonInlined: new Set(),
2283
- moduleScope
2284
- });
2507
+ inlinedModulesToInfo.set(m, getModuleInfo(m, moduleSource));
2285
2508
  }
2286
2509
 
2287
2510
  for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
@@ -2295,11 +2518,9 @@ class JavascriptModulesPlugin {
2295
2518
  }
2296
2519
  }
2297
2520
 
2298
- // Multiple inlined entry modules share the chunk's startup scope. Rename any
2299
- // top-level declaration that would collide with another inlined module's
2300
- // declaration, with any inlined or non-inlined module's free (global)
2301
- // reference, or with a reserved name, so the modules can be emitted without a
2302
- // per-entry IIFE.
2521
+ // Several inlined entries share the chunk's startup scope, so any top-level
2522
+ // declaration colliding with another's declaration, any module's free
2523
+ // reference or a reserved name is renamed, sparing them a per-entry IIFE.
2303
2524
  if (isMultipleEntries) {
2304
2525
  /** @type {Set<string>} */
2305
2526
  const allUsedNames = new Set(nonInlinedModuleThroughIdentifiers);
@@ -2307,56 +2528,37 @@ class JavascriptModulesPlugin {
2307
2528
  for (const { through } of inlinedModulesToInfo.values()) {
2308
2529
  for (const ref of through) allUsedNames.add(ref.identifier.name);
2309
2530
  }
2310
- for (const [m, moduleInfo] of inlinedModulesToInfo) {
2311
- const { ast, source: _source } = moduleInfo;
2312
- const source = new ReplaceSource(_source);
2313
- for (const variable of moduleInfo.variables) {
2314
- renameInlinedModuleVariable(
2315
- source,
2316
- ast,
2317
- variable,
2318
- moduleInfo.module.identifier(),
2319
- m.readableIdentifier(runtimeTemplate.requestShortener),
2320
- allUsedNames
2321
- );
2322
- }
2323
- renamedInlinedModules.set(m, source);
2531
+ for (const moduleInfo of inlinedModulesToInfo.values()) {
2532
+ renameModule(moduleInfo, allUsedNames);
2324
2533
  }
2325
- return renamedInlinedModules;
2534
+ return {
2535
+ sources: renamedInlinedModules,
2536
+ renamedDeclarations
2537
+ };
2326
2538
  }
2327
2539
 
2328
2540
  for (const [m, moduleInfo] of inlinedModulesToInfo) {
2329
- const { ast, source: _source, usedInNonInlined } = moduleInfo;
2330
- const source = new ReplaceSource(_source);
2541
+ const { usedInNonInlined } = moduleInfo;
2331
2542
  if (usedInNonInlined.size === 0) {
2332
- renamedInlinedModules.set(m, source);
2543
+ renamedInlinedModules.set(m, new ReplaceSource(moduleInfo.source));
2333
2544
  continue;
2334
2545
  }
2335
2546
 
2336
- const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
2337
2547
  const allUsedNames = new Set(
2338
- Array.from(info.through, (v) => v.identifier.name)
2548
+ Array.from(moduleInfo.through, (v) => v.identifier.name)
2339
2549
  );
2340
2550
 
2341
2551
  for (const variable of usedInNonInlined) {
2342
2552
  allUsedNames.add(variable.name);
2343
2553
  }
2344
2554
 
2345
- for (const variable of info.variables) {
2346
- renameInlinedModuleVariable(
2347
- source,
2348
- ast,
2349
- variable,
2350
- info.module.identifier(),
2351
- m.readableIdentifier(runtimeTemplate.requestShortener),
2352
- allUsedNames
2353
- );
2354
- }
2355
-
2356
- renamedInlinedModules.set(m, source);
2555
+ renameModule(moduleInfo, allUsedNames);
2357
2556
  }
2358
2557
 
2359
- return renamedInlinedModules;
2558
+ return {
2559
+ sources: renamedInlinedModules,
2560
+ renamedDeclarations
2561
+ };
2360
2562
  }
2361
2563
  }
2362
2564