@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -16,8 +16,7 @@ const {
16
16
  RawSource,
17
17
  ReplaceSource
18
18
  } = require("webpack-sources");
19
- const Compilation = require("../Compilation");
20
- const { tryRunOrWebpackError } = require("../HookWebpackError");
19
+ /** @typedef {import("../Compilation")} Compilation */
21
20
  const HotUpdateChunk = require("../HotUpdateChunk");
22
21
  const InitFragment = require("../InitFragment");
23
22
  const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
@@ -30,6 +29,7 @@ const {
30
29
  const NormalModule = require("../NormalModule");
31
30
  const RuntimeGlobals = require("../RuntimeGlobals");
32
31
  const Template = require("../Template");
32
+ const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
33
33
  const { last, someInIterable } = require("../util/IterableHelpers");
34
34
  const StringXor = require("../util/StringXor");
35
35
  const { compareModulesByFullName } = require("../util/comparators");
@@ -42,16 +42,33 @@ const {
42
42
  getUsedNamesInScopeInfo
43
43
  } = require("../util/concatenate");
44
44
  const createHash = require("../util/createHash");
45
- const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
45
+ const createHooksRegistry = require("../util/createHooksRegistry");
46
+ const { digestNonNumericOnlyWithFull } = require("../util/nonNumericOnlyHash");
46
47
  const removeBOM = require("../util/removeBOM");
47
48
  const { intersectRuntime } = require("../util/runtime");
49
+ const { getAllChunks } = require("./ChunkHelpers");
48
50
  const JavascriptGenerator = require("./JavascriptGenerator");
51
+ const JavascriptModule = require("./JavascriptModule");
49
52
  const JavascriptParser = require("./JavascriptParser");
50
53
 
51
- /** @typedef {import("eslint-scope").Reference} Reference */
52
- /** @typedef {import("eslint-scope").Scope} Scope */
53
- /** @typedef {import("eslint-scope").Variable} Variable */
54
54
  /** @typedef {import("estree").Program} Program */
55
+ /** @typedef {import("estree").Node} Node */
56
+ /** @typedef {import("estree").Identifier} Identifier */
57
+ /** @typedef {import("estree").CatchClause} CatchClause */
58
+ /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
59
+ /** @typedef {import("estree").ClassExpression} ClassExpression */
60
+ /** @typedef {import("estree").FunctionDeclaration} FunctionDeclaration */
61
+ /** @typedef {import("estree").FunctionExpression} FunctionExpression */
62
+ /** @typedef {import("estree").ArrowFunctionExpression} ArrowFunctionExpression */
63
+ /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
64
+ /** @typedef {import("estree").VariableDeclaration} VariableDeclaration */
65
+ /** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
66
+ /** @typedef {import("estree").ImportSpecifier} ImportSpecifier */
67
+ /** @typedef {import("estree").ImportDefaultSpecifier} ImportDefaultSpecifier */
68
+ /** @typedef {import("estree").ImportNamespaceSpecifier} ImportNamespaceSpecifier */
69
+ /** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
70
+ /** @typedef {import("estree").ForInStatement} ForInStatement */
71
+ /** @typedef {import("estree").ForOfStatement} ForOfStatement */
55
72
  /** @typedef {import("webpack-sources").Source} Source */
56
73
  /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
57
74
  /** @typedef {import("../Chunk")} Chunk */
@@ -69,17 +86,73 @@ const JavascriptParser = require("./JavascriptParser");
69
86
  /** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
70
87
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
71
88
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
72
- /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
73
- /** @typedef {import("../WebpackError")} WebpackError */
89
+ /** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
90
+ /** @typedef {import("../errors/WebpackError")} WebpackError */
74
91
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
75
92
  /** @typedef {import("../util/Hash")} Hash */
76
93
  /** @typedef {import("../util/concatenate").ScopeSet} ScopeSet */
77
94
  /** @typedef {import("../util/concatenate").UsedNamesInScopeInfo} UsedNamesInScopeInfo */
78
95
 
96
+ // TODO remove these types when we will update `eslint-scope` to the latest version and import them from `eslint-scope`
97
+ /**
98
+ * @typedef {object} Scope
99
+ * @property {"block" | "catch" | "class" | "class-field-initializer" | "class-static-block" | "for" | "function" | "function-expression-name" | "global" | "module" | "switch" | "with" | "TDZ"} type
100
+ * @property {boolean} isStrict
101
+ * @property {Scope | null} upper
102
+ * @property {Scope[]} childScopes
103
+ * @property {Scope} variableScope
104
+ * @property {Node} block
105
+ * @property {Variable[]} variables
106
+ * @property {Map<string, Variable>} set
107
+ * @property {Reference[]} references
108
+ * @property {Reference[]} through
109
+ * @property {boolean} functionExpressionScope
110
+ * @property {{ variables: Variable[], set: Map<string, Variable> }=} implicit
111
+ */
112
+
113
+ /**
114
+ * @typedef {
115
+ * | { type: "CatchClause", node: CatchClause, parent: null }
116
+ * | { type: "ClassName", node: ClassDeclaration | ClassExpression, parent: null }
117
+ * | { type: "FunctionName", node: FunctionDeclaration | FunctionExpression, parent: null }
118
+ * | { type: "ImplicitGlobalVariable", node: AssignmentExpression | ForInStatement | ForOfStatement, parent: null }
119
+ * | { type: "ImportBinding", node: ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier, parent: ImportDeclaration }
120
+ * | { type: "Parameter", node: FunctionDeclaration | FunctionExpression | ArrowFunctionExpression, parent: null }
121
+ * | { type: "TDZ", node: any, parent: null }
122
+ * | { type: "Variable", node: VariableDeclarator, parent: VariableDeclaration }
123
+ * } DefinitionType
124
+ */
125
+
126
+ /** @typedef {DefinitionType & { name: Identifier }} Definition */
127
+
128
+ /**
129
+ * @typedef {object} Variable
130
+ * @property {string} name
131
+ * @property {Scope} scope
132
+ * @property {Identifier[]} identifiers
133
+ * @property {Reference[]} references
134
+ * @property {Definition[]} defs
135
+ */
136
+
137
+ /**
138
+ * @typedef {object} Reference
139
+ * @property {Identifier} identifier
140
+ * @property {Scope} from
141
+ * @property {Variable | null} resolved
142
+ * @property {Node | null} writeExpr
143
+ * @property {boolean} init
144
+ * @property {() => boolean} isWrite
145
+ * @property {() => boolean} isRead
146
+ * @property {() => boolean} isWriteOnly
147
+ * @property {() => boolean} isReadOnly
148
+ * @property {() => boolean} isReadWrite
149
+ */
150
+
79
151
  /** @type {WeakMap<ChunkGraph, WeakMap<Chunk, boolean>>} */
80
152
  const chunkHasJsCache = new WeakMap();
81
153
 
82
154
  /**
155
+ * Returns true, when a JS file is needed for this chunk.
83
156
  * @param {Chunk} chunk a chunk
84
157
  * @param {ChunkGraph} chunkGraph the chunk graph
85
158
  * @returns {boolean} true, when a JS file is needed for this chunk
@@ -99,6 +172,7 @@ const _chunkHasJs = (chunk, chunkGraph) => {
99
172
  };
100
173
 
101
174
  /**
175
+ * Returns true, when a JS file is needed for this chunk.
102
176
  * @param {Chunk} chunk a chunk
103
177
  * @param {ChunkGraph} chunkGraph the chunk graph
104
178
  * @returns {boolean} true, when a JS file is needed for this chunk
@@ -121,6 +195,7 @@ const chunkHasJs = (chunk, chunkGraph) => {
121
195
  };
122
196
 
123
197
  /**
198
+ * Chunk has runtime or js.
124
199
  * @param {Chunk} chunk a chunk
125
200
  * @param {ChunkGraph} chunkGraph the chunk graph
126
201
  * @returns {boolean} true, when a JS file is needed for this chunk
@@ -148,6 +223,7 @@ const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
148
223
  };
149
224
 
150
225
  /**
226
+ * Print generated code for stack.
151
227
  * @param {Module} module a module
152
228
  * @param {string} code the code
153
229
  * @returns {string} generated code for the stack
@@ -158,6 +234,7 @@ const printGeneratedCodeForStack = (module, code) => {
158
234
  return `\n\nGenerated code for ${module.identifier()}\n${lines
159
235
  .map(
160
236
  /**
237
+ * Handles the callback logic for this hook.
161
238
  * @param {string} line the line
162
239
  * @param {number} i the index
163
240
  * @param {string[]} _lines the lines
@@ -172,6 +249,7 @@ const printGeneratedCodeForStack = (module, code) => {
172
249
  };
173
250
 
174
251
  /**
252
+ * Defines the render context type used by this module.
175
253
  * @typedef {object} RenderContext
176
254
  * @property {Chunk} chunk the chunk
177
255
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -183,6 +261,7 @@ const printGeneratedCodeForStack = (module, code) => {
183
261
  */
184
262
 
185
263
  /**
264
+ * Defines the main render context type used by this module.
186
265
  * @typedef {object} MainRenderContext
187
266
  * @property {Chunk} chunk the chunk
188
267
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -195,6 +274,7 @@ const printGeneratedCodeForStack = (module, code) => {
195
274
  */
196
275
 
197
276
  /**
277
+ * Defines the chunk render context type used by this module.
198
278
  * @typedef {object} ChunkRenderContext
199
279
  * @property {Chunk} chunk the chunk
200
280
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -204,9 +284,12 @@ const printGeneratedCodeForStack = (module, code) => {
204
284
  * @property {CodeGenerationResults} codeGenerationResults results of code generation
205
285
  * @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
206
286
  * @property {boolean | undefined} strictMode rendering in strict context
287
+ * @property {Module=} inlinedEntryModule entry module inlined at the chunk top level instead of the registry
288
+ * @property {Source=} inlinedEntrySource rendered body of the inlined entry module
207
289
  */
208
290
 
209
291
  /**
292
+ * Defines the render bootstrap context type used by this module.
210
293
  * @typedef {object} RenderBootstrapContext
211
294
  * @property {Chunk} chunk the chunk
212
295
  * @property {CodeGenerationResults} codeGenerationResults results of code generation
@@ -217,6 +300,7 @@ const printGeneratedCodeForStack = (module, code) => {
217
300
  */
218
301
 
219
302
  /**
303
+ * Defines the startup render context type used by this module.
220
304
  * @typedef {object} StartupRenderContext
221
305
  * @property {Chunk} chunk the chunk
222
306
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -231,6 +315,7 @@ const printGeneratedCodeForStack = (module, code) => {
231
315
  */
232
316
 
233
317
  /**
318
+ * Defines the module render context type used by this module.
234
319
  * @typedef {object} ModuleRenderContext
235
320
  * @property {Chunk} chunk the chunk
236
321
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -246,6 +331,7 @@ const printGeneratedCodeForStack = (module, code) => {
246
331
  */
247
332
 
248
333
  /**
334
+ * Defines the compilation hooks type used by this module.
249
335
  * @typedef {object} CompilationHooks
250
336
  * @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContent
251
337
  * @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContainer
@@ -263,63 +349,80 @@ const printGeneratedCodeForStack = (module, code) => {
263
349
  * @property {SyncBailHook<[Chunk, RenderContext], boolean | void>} useSourceMap
264
350
  */
265
351
 
266
- /** @type {WeakMap<Compilation, CompilationHooks>} */
267
- const compilationHooksMap = new WeakMap();
352
+ /**
353
+ * Renames an inlined module's top-level declaration (and all its references) when
354
+ * its name is already taken in the shared startup scope, recording the chosen name
355
+ * in `allUsedNames`. Lets inlined modules be emitted without a per-entry/per-chunk
356
+ * IIFE by resolving name collisions instead of isolating each module.
357
+ * @param {InstanceType<typeof import("webpack-sources").ReplaceSource>} source the module source to edit
358
+ * @param {Program} ast the parsed module AST
359
+ * @param {Variable} variable the top-level variable to check/rename
360
+ * @param {string} moduleIdentifier the module identifier (for scope caching)
361
+ * @param {string} readableIdentifier the readable module identifier (for new names)
362
+ * @param {Set<string>} allUsedNames names already used in the shared scope (mutated)
363
+ * @returns {void}
364
+ */
365
+ const renameInlinedModuleVariable = (
366
+ source,
367
+ ast,
368
+ variable,
369
+ moduleIdentifier,
370
+ readableIdentifier,
371
+ allUsedNames
372
+ ) => {
373
+ /** @type {UsedNamesInScopeInfo} */
374
+ const usedNamesInScopeInfo = new Map();
375
+ /** @type {ScopeSet} */
376
+ const ignoredScopes = new Set();
377
+
378
+ const name = variable.name;
379
+ const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
380
+ usedNamesInScopeInfo,
381
+ moduleIdentifier,
382
+ name
383
+ );
384
+
385
+ if (allUsedNames.has(name) || usedNames.has(name)) {
386
+ const references = getAllReferences(variable);
387
+ const allIdentifiers = new Set([
388
+ ...references.map((r) => r.identifier),
389
+ ...variable.identifiers
390
+ ]);
391
+ for (const ref of references) {
392
+ addScopeSymbols(ref.from, usedNames, alreadyCheckedScopes, ignoredScopes);
393
+ }
394
+
395
+ const newName = findNewName(
396
+ name,
397
+ allUsedNames,
398
+ usedNames,
399
+ readableIdentifier
400
+ );
401
+ allUsedNames.add(newName);
402
+ for (const identifier of allIdentifiers) {
403
+ const r = /** @type {Range} */ (identifier.range);
404
+ const path = getPathInAst(ast, identifier);
405
+ if (path && path.length > 1) {
406
+ const maybeProperty =
407
+ path[1].type === "AssignmentPattern" && path[1].left === path[0]
408
+ ? path[2]
409
+ : path[1];
410
+ if (maybeProperty.type === "Property" && maybeProperty.shorthand) {
411
+ source.insert(r[1], `: ${newName}`);
412
+ continue;
413
+ }
414
+ }
415
+ source.replace(r[0], r[1] - 1, newName);
416
+ }
417
+ }
418
+ allUsedNames.add(name);
419
+ };
268
420
 
269
421
  const PLUGIN_NAME = "JavascriptModulesPlugin";
270
422
 
271
423
  /** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
272
424
 
273
425
  class JavascriptModulesPlugin {
274
- /**
275
- * @param {Compilation} compilation the compilation
276
- * @returns {CompilationHooks} the attached hooks
277
- */
278
- static getCompilationHooks(compilation) {
279
- if (!(compilation instanceof Compilation)) {
280
- throw new TypeError(
281
- "The 'compilation' argument must be an instance of Compilation"
282
- );
283
- }
284
- let hooks = compilationHooksMap.get(compilation);
285
- if (hooks === undefined) {
286
- hooks = {
287
- renderModuleContent: new SyncWaterfallHook([
288
- "source",
289
- "module",
290
- "moduleRenderContext"
291
- ]),
292
- renderModuleContainer: new SyncWaterfallHook([
293
- "source",
294
- "module",
295
- "moduleRenderContext"
296
- ]),
297
- renderModulePackage: new SyncWaterfallHook([
298
- "source",
299
- "module",
300
- "moduleRenderContext"
301
- ]),
302
- render: new SyncWaterfallHook(["source", "renderContext"]),
303
- renderContent: new SyncWaterfallHook(["source", "renderContext"]),
304
- renderStartup: new SyncWaterfallHook([
305
- "source",
306
- "module",
307
- "startupRenderContext"
308
- ]),
309
- renderChunk: new SyncWaterfallHook(["source", "renderContext"]),
310
- renderMain: new SyncWaterfallHook(["source", "renderContext"]),
311
- renderRequire: new SyncWaterfallHook(["code", "renderContext"]),
312
- inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
313
- embedInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
314
- strictRuntimeBailout: new SyncBailHook(["renderContext"]),
315
- chunkHash: new SyncHook(["chunk", "hash", "context"]),
316
- useSourceMap: new SyncBailHook(["chunk", "renderContext"])
317
- };
318
- compilationHooksMap.set(compilation, hooks);
319
- }
320
- return hooks;
321
- }
322
-
323
426
  constructor(options = {}) {
324
427
  this.options = options;
325
428
  /** @type {WeakMap<Source, { source: Source, needModule: boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
@@ -327,7 +430,7 @@ class JavascriptModulesPlugin {
327
430
  }
328
431
 
329
432
  /**
330
- * Apply the plugin
433
+ * Applies the plugin by registering its hooks on the compiler.
331
434
  * @param {Compiler} compiler the compiler instance
332
435
  * @returns {void}
333
436
  */
@@ -342,21 +445,44 @@ class JavascriptModulesPlugin {
342
445
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
343
446
  JAVASCRIPT_MODULE_TYPE_ESM
344
447
  ]) {
448
+ normalModuleFactory.hooks.createModuleClass
449
+ .for(type)
450
+ .tap(
451
+ PLUGIN_NAME,
452
+ (createData, _resolveData) => new JavascriptModule(createData)
453
+ );
345
454
  normalModuleFactory.hooks.createParser
346
455
  .for(type)
347
456
  .tap(PLUGIN_NAME, (options) => {
348
457
  switch (type) {
349
458
  case JAVASCRIPT_MODULE_TYPE_AUTO: {
350
- return new JavascriptParser("auto", { parse: options.parse });
459
+ return new JavascriptParser("auto", {
460
+ parse: options.parse,
461
+ typescript: options.typescript,
462
+ importPhases: Boolean(
463
+ options.deferImport || options.sourceImport
464
+ ),
465
+ strictModeViolations: options.strictModeViolations
466
+ });
351
467
  }
352
468
  case JAVASCRIPT_MODULE_TYPE_DYNAMIC: {
353
469
  return new JavascriptParser("script", {
354
- parse: options.parse
470
+ parse: options.parse,
471
+ typescript: options.typescript,
472
+ importPhases: Boolean(
473
+ options.deferImport || options.sourceImport
474
+ ),
475
+ strictModeViolations: options.strictModeViolations
355
476
  });
356
477
  }
357
478
  case JAVASCRIPT_MODULE_TYPE_ESM: {
358
479
  return new JavascriptParser("module", {
359
- parse: options.parse
480
+ parse: options.parse,
481
+ typescript: options.typescript,
482
+ importPhases: Boolean(
483
+ options.deferImport || options.sourceImport
484
+ ),
485
+ strictModeViolations: options.strictModeViolations
360
486
  });
361
487
  }
362
488
  }
@@ -554,11 +680,8 @@ class JavascriptModulesPlugin {
554
680
  }
555
681
  xor.updateHash(hash);
556
682
  }
557
- const digest = hash.digest(hashDigest);
558
- chunk.contentHash.javascript = nonNumericOnlyHash(
559
- digest,
560
- hashDigestLength
561
- );
683
+ [chunk.contentHash.javascript, chunk.contentHashFull.javascript] =
684
+ digestNonNumericOnlyWithFull(hash, hashDigest, hashDigestLength);
562
685
  });
563
686
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
564
687
  PLUGIN_NAME,
@@ -642,15 +765,22 @@ class JavascriptModulesPlugin {
642
765
  }
643
766
 
644
767
  /**
768
+ * Gets chunk filename template.
645
769
  * @param {Chunk} chunk chunk
646
770
  * @param {OutputOptions} outputOptions output options
647
- * @returns {TemplatePath} used filename template
771
+ * @returns {ChunkFilenameTemplate} used filename template
648
772
  */
649
773
  static getChunkFilenameTemplate(chunk, outputOptions) {
650
774
  if (chunk.filenameTemplate) {
651
775
  return chunk.filenameTemplate;
652
776
  } else if (chunk instanceof HotUpdateChunk) {
653
777
  return outputOptions.hotUpdateChunkFilename;
778
+ }
779
+ const entryOptions = chunk.getEntryOptions();
780
+ // A worker entry (`new Worker` or `entry.worker`) uses workerChunkFilename;
781
+ // chunks it loads internally keep `chunkFilename`
782
+ if (entryOptions !== undefined && entryOptions.worker) {
783
+ return outputOptions.workerChunkFilename;
654
784
  } else if (chunk.canBeInitial()) {
655
785
  return outputOptions.filename;
656
786
  }
@@ -658,6 +788,7 @@ class JavascriptModulesPlugin {
658
788
  }
659
789
 
660
790
  /**
791
+ * Renders the newly generated source from rendering.
661
792
  * @param {Module} module the rendered module
662
793
  * @param {ModuleRenderContext} renderContext options object
663
794
  * @param {CompilationHooks} hooks hooks
@@ -797,6 +928,7 @@ class JavascriptModulesPlugin {
797
928
  }
798
929
 
799
930
  /**
931
+ * Renders the rendered source.
800
932
  * @param {RenderContext} renderContext the render context
801
933
  * @param {CompilationHooks} hooks hooks
802
934
  * @returns {Source} the rendered source
@@ -828,10 +960,30 @@ class JavascriptModulesPlugin {
828
960
  chunkInitFragments: [],
829
961
  strictMode: allStrict
830
962
  };
963
+ // ESM entry chunk whose runtime lives in a separate chunk: inline the
964
+ // single entry module at the top level (instead of the module registry)
965
+ // so its own top-level declarations stay live ESM bindings for consumers.
966
+ const inlinedEntryModule = this._getEsmEntryModuleToInline(
967
+ renderContext,
968
+ allModules
969
+ );
970
+ let registryModules = allModules;
971
+ if (inlinedEntryModule) {
972
+ const inlinedEntrySource = this.renderModule(
973
+ inlinedEntryModule,
974
+ { ...chunkRenderContext, factory: false },
975
+ hooks
976
+ );
977
+ if (inlinedEntrySource) {
978
+ registryModules = allModules.filter((m) => m !== inlinedEntryModule);
979
+ chunkRenderContext.inlinedEntryModule = inlinedEntryModule;
980
+ chunkRenderContext.inlinedEntrySource = inlinedEntrySource;
981
+ }
982
+ }
831
983
  const moduleSources =
832
984
  Template.renderChunkModules(
833
985
  chunkRenderContext,
834
- allModules,
986
+ registryModules,
835
987
  (module, renderInObject) =>
836
988
  this.renderModule(
837
989
  module,
@@ -875,6 +1027,93 @@ class JavascriptModulesPlugin {
875
1027
  }
876
1028
 
877
1029
  /**
1030
+ * Returns the chunk's single entry module when it can be inlined at the top
1031
+ * level of an ESM output chunk (instead of the module registry), which keeps
1032
+ * its exports as live ESM bindings. Only a self-contained ESM entry whose
1033
+ * top-level declarations can be lifted into the chunk scope qualifies;
1034
+ * otherwise `undefined` is returned and the registry path is used.
1035
+ * @param {RenderContext} renderContext render context
1036
+ * @param {Module[]} allModules all javascript modules of the chunk
1037
+ * @returns {Module | undefined} the entry module to inline, if any
1038
+ */
1039
+ _getEsmEntryModuleToInline(renderContext, allModules) {
1040
+ const {
1041
+ chunk,
1042
+ chunkGraph,
1043
+ moduleGraph,
1044
+ runtimeTemplate,
1045
+ codeGenerationResults
1046
+ } = renderContext;
1047
+
1048
+ // Only a single ESM entry whose runtime lives in a separate chunk.
1049
+ if (
1050
+ !runtimeTemplate.isModule() ||
1051
+ chunk.hasRuntime() ||
1052
+ chunkGraph.getNumberOfEntryModules(chunk) !== 1
1053
+ ) {
1054
+ return undefined;
1055
+ }
1056
+ const [entryEntry] =
1057
+ chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk);
1058
+ const [entryModule, entrypoint] = /** @type {[Module, Entrypoint]} */ (
1059
+ entryEntry
1060
+ );
1061
+
1062
+ // Module-local safety: the body is lifted verbatim, so it must use the
1063
+ // standard exports binding (not `module`/`this`) and expose top-level
1064
+ // declarations whose names can't collide with runtime/startup identifiers.
1065
+ const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
1066
+ entryModule,
1067
+ chunk.runtime
1068
+ );
1069
+ if (
1070
+ entryModule.exportsArgument !== RuntimeGlobals.exports ||
1071
+ runtimeRequirements.has(RuntimeGlobals.module) ||
1072
+ runtimeRequirements.has(RuntimeGlobals.thisAsExports)
1073
+ ) {
1074
+ return undefined;
1075
+ }
1076
+ const topLevelDeclarations =
1077
+ codeGenerationResults.getData(
1078
+ entryModule,
1079
+ chunk.runtime,
1080
+ "topLevelDeclarations"
1081
+ ) ||
1082
+ (entryModule.buildInfo && entryModule.buildInfo.topLevelDeclarations);
1083
+ if (!topLevelDeclarations || topLevelDeclarations.size === 0) {
1084
+ return undefined;
1085
+ }
1086
+ for (const name of topLevelDeclarations) {
1087
+ if (RESERVED_NAMES.has(name) || name.startsWith("__webpack_")) {
1088
+ return undefined;
1089
+ }
1090
+ }
1091
+
1092
+ // Self-contained: the entry must not be imported by another module (which
1093
+ // needs it in the registry), and must not require other chunks or
1094
+ // `dependOn` parents to execute first.
1095
+ if (
1096
+ entrypoint.getParents().length > 0 ||
1097
+ getAllChunks(entrypoint, chunk, entrypoint.getRuntimeChunk()).size > 0
1098
+ ) {
1099
+ return undefined;
1100
+ }
1101
+ const referenced = someInIterable(
1102
+ moduleGraph.getIncomingConnectionsByOriginModule(entryModule),
1103
+ ([originModule, connections]) =>
1104
+ originModule &&
1105
+ originModule !== entryModule &&
1106
+ connections.some((c) => c.isTargetActive(chunk.runtime)) &&
1107
+ someInIterable(
1108
+ chunkGraph.getModuleRuntimes(originModule),
1109
+ (runtime) => intersectRuntime(runtime, chunk.runtime) !== undefined
1110
+ )
1111
+ );
1112
+ return referenced ? undefined : entryModule;
1113
+ }
1114
+
1115
+ /**
1116
+ * Renders the newly generated source from rendering.
878
1117
  * @param {MainRenderContext} renderContext options object
879
1118
  * @param {CompilationHooks} hooks hooks
880
1119
  * @param {Compilation} compilation the compilation
@@ -926,9 +1165,7 @@ class JavascriptModulesPlugin {
926
1165
  const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
927
1166
  if (strictBailout) {
928
1167
  source.add(
929
- `${
930
- prefix
931
- }// runtime can't be in strict mode because ${strictBailout}.\n`
1168
+ `${prefix}// runtime can't be in strict mode because ${strictBailout}.\n`
932
1169
  );
933
1170
  } else {
934
1171
  allStrict = true;
@@ -1052,10 +1289,8 @@ class JavascriptModulesPlugin {
1052
1289
 
1053
1290
  const iife = innerStrict
1054
1291
  ? "it needs to be in strict mode."
1055
- : inlinedModules.size > 1
1056
- ? // TODO check globals and top-level declarations of other entries and chunk modules
1057
- // to make a better decision
1058
- "it needs to be isolated against other entry modules."
1292
+ : inlinedModules.size > 1 && !renamedInlinedModule
1293
+ ? "it needs to be isolated against other entry modules."
1059
1294
  : chunkModules && !renamedInlinedModule
1060
1295
  ? "it needs to be isolated against other modules in the chunk."
1061
1296
  : exports && !webpackExports
@@ -1099,10 +1334,14 @@ class JavascriptModulesPlugin {
1099
1334
  }
1100
1335
  if (exports) {
1101
1336
  if (m !== lastInlinedModule) {
1102
- startupSource.add(`var ${m.exportsArgument} = {};\n`);
1337
+ startupSource.add(
1338
+ `${runtimeTemplate.renderLet()} ${m.exportsArgument} = {};\n`
1339
+ );
1103
1340
  } else if (m.exportsArgument !== RuntimeGlobals.exports) {
1104
1341
  startupSource.add(
1105
- `var ${m.exportsArgument} = ${RuntimeGlobals.exports};\n`
1342
+ `${runtimeTemplate.renderLet()} ${m.exportsArgument} = ${
1343
+ RuntimeGlobals.exports
1344
+ };\n`
1106
1345
  );
1107
1346
  }
1108
1347
  }
@@ -1145,7 +1384,7 @@ class JavascriptModulesPlugin {
1145
1384
  }
1146
1385
  if (startupRenderContext.needExportsDeclaration) {
1147
1386
  renderedStartup = new ConcatSource(
1148
- `var ${RuntimeGlobals.exports} = {};\n`,
1387
+ `${runtimeTemplate.renderLet()} ${RuntimeGlobals.exports} = {};\n`,
1149
1388
  renderedStartup
1150
1389
  );
1151
1390
  }
@@ -1240,6 +1479,7 @@ class JavascriptModulesPlugin {
1240
1479
  }
1241
1480
 
1242
1481
  /**
1482
+ * Updates hash with bootstrap.
1243
1483
  * @param {Hash} hash the hash to be updated
1244
1484
  * @param {RenderBootstrapContext} renderContext options object
1245
1485
  * @param {CompilationHooks} hooks hooks
@@ -1260,6 +1500,7 @@ class JavascriptModulesPlugin {
1260
1500
  }
1261
1501
 
1262
1502
  /**
1503
+ * Renders the generated source of the bootstrap code.
1263
1504
  * @param {RenderBootstrapContext} renderContext options object
1264
1505
  * @param {CompilationHooks} hooks hooks
1265
1506
  * @returns {Bootstrap} the generated source of the bootstrap code
@@ -1321,9 +1562,10 @@ class JavascriptModulesPlugin {
1321
1562
  result.allowInlineStartup = false;
1322
1563
  }
1323
1564
 
1565
+ const bootstrapCst = runtimeTemplate.renderConst();
1324
1566
  if (useRequire || moduleCache) {
1325
1567
  buf.push("// The module cache");
1326
- buf.push("var __webpack_module_cache__ = {};");
1568
+ buf.push(`${bootstrapCst} __webpack_module_cache__ = {};`);
1327
1569
  buf.push("");
1328
1570
  }
1329
1571
 
@@ -1333,7 +1575,16 @@ class JavascriptModulesPlugin {
1333
1575
  // This requires all deferred imports to a module can get the module export object before the module
1334
1576
  // is evaluated.
1335
1577
  buf.push("// The deferred module cache");
1336
- buf.push("var __webpack_module_deferred_exports__ = {};");
1578
+ buf.push(`${bootstrapCst} __webpack_module_deferred_exports__ = {};`);
1579
+ // Per the TC39 import-defer spec, every defer-import call site for
1580
+ // the same module must yield the same Deferred Module Namespace
1581
+ // Exotic Object (and a distinct one from any eager namespace).
1582
+ // Cache the deferred namespace proxy here so calls from different
1583
+ // files share identity.
1584
+ buf.push("// The deferred namespace cache");
1585
+ buf.push(
1586
+ `${bootstrapCst} __webpack_module_deferred_namespace_cache__ = {};`
1587
+ );
1337
1588
  buf.push("");
1338
1589
  }
1339
1590
 
@@ -1345,7 +1596,7 @@ class JavascriptModulesPlugin {
1345
1596
  buf.push("");
1346
1597
  } else if (runtimeRequirements.has(RuntimeGlobals.requireScope)) {
1347
1598
  buf.push("// The require scope");
1348
- buf.push(`var ${RuntimeGlobals.require} = {};`);
1599
+ buf.push(`${bootstrapCst} ${RuntimeGlobals.require} = {};`);
1349
1600
  buf.push("");
1350
1601
  }
1351
1602
 
@@ -1481,9 +1732,17 @@ class JavascriptModulesPlugin {
1481
1732
  result.allowInlineStartup = false;
1482
1733
  }
1483
1734
 
1735
+ // `__webpack_exports__` may be reassigned later — by the
1736
+ // `onChunksLoaded` wrapper below, by an inlined entry
1737
+ // module that uses top-level `await` (the emitted
1738
+ // bridge reassigns `__webpack_exports__` to the awaited
1739
+ // value), or by other downstream codegen. Always declare
1740
+ // with `let` (or `var` if `let` is unsupported) so
1741
+ // reassignment is allowed.
1742
+ const exportsDecl = runtimeTemplate.renderLet();
1484
1743
  if (chunks.length > 0) {
1485
1744
  buf2.push(
1486
- `${i === 0 ? `var ${RuntimeGlobals.exports} = ` : ""}${
1745
+ `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1487
1746
  RuntimeGlobals.onChunksLoaded
1488
1747
  }(undefined, ${JSON.stringify(
1489
1748
  chunks.map((c) => c.id)
@@ -1493,12 +1752,14 @@ class JavascriptModulesPlugin {
1493
1752
  );
1494
1753
  } else if (useRequire) {
1495
1754
  buf2.push(
1496
- `${i === 0 ? `var ${RuntimeGlobals.exports} = ` : ""}${
1755
+ `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1497
1756
  RuntimeGlobals.require
1498
1757
  }(${moduleIdExpr});`
1499
1758
  );
1500
1759
  } else {
1501
- if (i === 0) buf2.push(`var ${RuntimeGlobals.exports} = {};`);
1760
+ if (i === 0) {
1761
+ buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
1762
+ }
1502
1763
  const needThisAsExports = entryRuntimeRequirements.has(
1503
1764
  RuntimeGlobals.thisAsExports
1504
1765
  );
@@ -1520,9 +1781,13 @@ class JavascriptModulesPlugin {
1520
1781
  (() => {
1521
1782
  if (needThisAsExports) {
1522
1783
  const comma = args.length ? "," : "";
1523
- return `__webpack_modules__[${moduleIdExpr}].call(${RuntimeGlobals.exports}${comma}${args.join(",")});`;
1784
+ return `__webpack_modules__[${moduleIdExpr}].call(${
1785
+ RuntimeGlobals.exports
1786
+ }${comma}${args.join(",")});`;
1524
1787
  }
1525
- return `__webpack_modules__[${moduleIdExpr}](${args.join(",")});`;
1788
+ return `__webpack_modules__[${moduleIdExpr}](${args.join(
1789
+ ","
1790
+ )});`;
1526
1791
  })()
1527
1792
  )
1528
1793
  );
@@ -1605,29 +1870,30 @@ class JavascriptModulesPlugin {
1605
1870
  }
1606
1871
 
1607
1872
  /**
1873
+ * Renders the generated source of the require function.
1608
1874
  * @param {RenderBootstrapContext} renderContext options object
1609
1875
  * @param {CompilationHooks} hooks hooks
1610
1876
  * @returns {string} the generated source of the require function
1611
1877
  */
1612
1878
  renderRequire(renderContext, hooks) {
1613
- const {
1614
- chunk,
1615
- chunkGraph,
1616
- runtimeTemplate: { outputOptions }
1617
- } = renderContext;
1879
+ const { chunk, chunkGraph, runtimeTemplate } = renderContext;
1880
+ const { outputOptions } = runtimeTemplate;
1881
+ const cst = runtimeTemplate.renderConst();
1882
+ const lt = runtimeTemplate.renderLet();
1618
1883
  const runtimeRequirements = chunkGraph.getTreeRuntimeRequirements(chunk);
1619
1884
 
1620
1885
  /**
1886
+ * Renders missing module error.
1621
1887
  * @param {string} condition guard expression
1622
1888
  * @returns {string[]} source
1623
1889
  */
1624
1890
  const renderMissingModuleError = (condition) =>
1625
- outputOptions.pathinfo
1891
+ outputOptions.strictModuleResolution
1626
1892
  ? [
1627
1893
  `if (${condition}) {`,
1628
1894
  Template.indent([
1629
1895
  "delete __webpack_module_cache__[moduleId];",
1630
- 'var e = new Error("Cannot find module \'" + moduleId + "\'");',
1896
+ `${cst} e = new Error("Cannot find module '" + moduleId + "'");`,
1631
1897
  "e.code = 'MODULE_NOT_FOUND';",
1632
1898
  "throw e;"
1633
1899
  ]),
@@ -1639,7 +1905,7 @@ class JavascriptModulesPlugin {
1639
1905
  RuntimeGlobals.interceptModuleExecution
1640
1906
  )
1641
1907
  ? Template.asString([
1642
- `var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: ${RuntimeGlobals.require} };`,
1908
+ `${cst} execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: ${RuntimeGlobals.require} };`,
1643
1909
  `${RuntimeGlobals.interceptModuleExecution}.forEach(function(handler) { handler(execOptions); });`,
1644
1910
  ...renderMissingModuleError("!execOptions.factory"),
1645
1911
  "module = execOptions.module;",
@@ -1661,11 +1927,29 @@ class JavascriptModulesPlugin {
1661
1927
  const needModuleDefer = runtimeRequirements.has(
1662
1928
  RuntimeGlobals.makeDeferredNamespaceObject
1663
1929
  );
1930
+ // Both deferred-namespace runtimes re-invoke `__webpack_require__` on
1931
+ // access, so a module's evaluation error must be retained and re-thrown
1932
+ // (a Cyclic Module Record's [[EvaluationError]]); the optimized variant
1933
+ // does not use `__webpack_module_deferred_exports__`, so it is tracked
1934
+ // separately from `needModuleDefer`.
1935
+ const needModuleDeferAny =
1936
+ needModuleDefer ||
1937
+ runtimeRequirements.has(
1938
+ RuntimeGlobals.makeOptimizedDeferredNamespaceObject
1939
+ );
1940
+ const needModuleErrorCaching =
1941
+ outputOptions.strictModuleErrorHandling || needModuleDeferAny;
1942
+ // `module` is reassigned by the interceptModuleExecution path; use `let`.
1943
+ const moduleDecl = runtimeRequirements.has(
1944
+ RuntimeGlobals.interceptModuleExecution
1945
+ )
1946
+ ? lt
1947
+ : cst;
1664
1948
  const content = Template.asString([
1665
1949
  "// Check if module is in cache",
1666
- "var cachedModule = __webpack_module_cache__[moduleId];",
1950
+ `${cst} cachedModule = __webpack_module_cache__[moduleId];`,
1667
1951
  "if (cachedModule !== undefined) {",
1668
- outputOptions.strictModuleErrorHandling
1952
+ needModuleErrorCaching
1669
1953
  ? Template.indent([
1670
1954
  "if (cachedModule.error !== undefined) throw cachedModule.error;",
1671
1955
  "return cachedModule.exports;"
@@ -1673,7 +1957,7 @@ class JavascriptModulesPlugin {
1673
1957
  : Template.indent("return cachedModule.exports;"),
1674
1958
  "}",
1675
1959
  "// Create a new module (and put it into the cache)",
1676
- "var module = __webpack_module_cache__[moduleId] = {",
1960
+ `${moduleDecl} module = __webpack_module_cache__[moduleId] = {`,
1677
1961
  Template.indent([
1678
1962
  needModuleId ? "id: moduleId," : "// no module.id needed",
1679
1963
  needModuleLoaded ? "loaded: false," : "// no module.loaded needed",
@@ -1683,10 +1967,10 @@ class JavascriptModulesPlugin {
1683
1967
  ]),
1684
1968
  "};",
1685
1969
  "",
1686
- outputOptions.strictModuleExceptionHandling
1970
+ outputOptions.strictModuleExceptionHandling && !needModuleErrorCaching
1687
1971
  ? Template.asString([
1688
1972
  "// Execute the module function",
1689
- "var threw = true;",
1973
+ `${lt} threw = true;`,
1690
1974
  "try {",
1691
1975
  Template.indent([
1692
1976
  moduleExecution,
@@ -1701,20 +1985,27 @@ class JavascriptModulesPlugin {
1701
1985
  ]),
1702
1986
  "}"
1703
1987
  ])
1704
- : outputOptions.strictModuleErrorHandling
1988
+ : needModuleErrorCaching
1705
1989
  ? Template.asString([
1706
1990
  "// Execute the module function",
1991
+ // Mark the module as evaluating so a deferred namespace that
1992
+ // forces evaluation of an already-evaluating module can throw
1993
+ // instead of exposing its partial exports.
1994
+ ...(needModuleDeferAny ? ["module.evaluating = true;"] : []),
1707
1995
  "try {",
1708
- Template.indent(
1709
- needModuleDefer
1710
- ? [
1711
- moduleExecution,
1712
- "delete __webpack_module_deferred_exports__[moduleId];"
1713
- ]
1714
- : moduleExecution
1715
- ),
1996
+ Template.indent([
1997
+ moduleExecution,
1998
+ ...(needModuleDefer
1999
+ ? ["delete __webpack_module_deferred_exports__[moduleId];"]
2000
+ : []),
2001
+ ...(needModuleDeferAny ? ["module.evaluating = false;"] : [])
2002
+ ]),
1716
2003
  "} catch(e) {",
1717
- Template.indent(["module.error = e;", "throw e;"]),
2004
+ Template.indent([
2005
+ ...(needModuleDeferAny ? ["module.evaluating = false;"] : []),
2006
+ "module.error = e;",
2007
+ "throw e;"
2008
+ ]),
1718
2009
  "}"
1719
2010
  ])
1720
2011
  : Template.asString([
@@ -1742,6 +2033,7 @@ class JavascriptModulesPlugin {
1742
2033
  }
1743
2034
 
1744
2035
  /**
2036
+ * Get renamed inline module.
1745
2037
  * @param {Compilation} compilation compilation
1746
2038
  * @param {Module[]} allModules allModules
1747
2039
  * @param {MainRenderContext} renderContext renderContext
@@ -1767,11 +2059,11 @@ class JavascriptModulesPlugin {
1767
2059
  allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
1768
2060
  const isMultipleEntries = inlinedModules.size > 1;
1769
2061
  const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
1770
- // TODO:
1771
- // This step is before the IIFE reason calculation. Ideally, it should only be executed when this function can optimize the
1772
- // IIFE reason. Otherwise, it should directly return false. There are four reasons now, we have skipped two already, the left
1773
- // one is 'it uses a non-standard name for the exports'.
1774
- if (isMultipleEntries || innerStrict || !singleEntryWithModules) {
2062
+ // This step is before the IIFE reason calculation; it only runs for the
2063
+ // cases whose IIFE reason it can remove: multiple inlined entry modules, or a
2064
+ // single inlined entry alongside other chunk modules. The remaining reason
2065
+ // ('it uses a non-standard name for the exports') is not handled here.
2066
+ if (innerStrict || (!isMultipleEntries && !singleEntryWithModules)) {
1775
2067
  return false;
1776
2068
  }
1777
2069
 
@@ -1784,6 +2076,8 @@ class JavascriptModulesPlugin {
1784
2076
  const inlinedModulesToInfo = new Map();
1785
2077
  /** @type {Set<string>} */
1786
2078
  const nonInlinedModuleThroughIdentifiers = new Set();
2079
+ /** @type {Map<Module, Source>} */
2080
+ const inlinedModuleSources = new Map();
1787
2081
 
1788
2082
  for (const m of allModules) {
1789
2083
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
@@ -1798,13 +2092,24 @@ class JavascriptModulesPlugin {
1798
2092
  );
1799
2093
 
1800
2094
  if (!moduleSource) continue;
2095
+ if (isInlinedModule) {
2096
+ // Parsing the inlined entry (often the whole concatenated app) is
2097
+ // expensive; defer it until we know renaming is actually needed.
2098
+ inlinedModuleSources.set(m, moduleSource);
2099
+ continue;
2100
+ }
1801
2101
  const code = /** @type {string} */ (moduleSource.source());
1802
2102
 
2103
+ const { experiments } = compilation.options;
1803
2104
  const { ast } = JavascriptParser._parse(
1804
2105
  code,
1805
2106
  {
1806
2107
  sourceType: "auto",
1807
- ranges: true
2108
+ ranges: true,
2109
+ // generated code contains phase imports when the experiments are on
2110
+ importPhases: Boolean(
2111
+ experiments.deferImport || experiments.sourceImport
2112
+ )
1808
2113
  },
1809
2114
  JavascriptParser._getModuleParseFunction(compilation, m)
1810
2115
  );
@@ -1817,22 +2122,93 @@ class JavascriptModulesPlugin {
1817
2122
  });
1818
2123
 
1819
2124
  const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
1820
- if (inlinedModules && inlinedModules.has(m)) {
1821
- const moduleScope = globalScope.childScopes[0];
1822
- inlinedModulesToInfo.set(m, {
1823
- source: moduleSource,
1824
- ast,
1825
- module: m,
1826
- variables: new Set(moduleScope.variables),
1827
- through: new Set(moduleScope.through),
1828
- usedInNonInlined: new Set(),
1829
- moduleScope
1830
- });
1831
- } else {
1832
- for (const ref of globalScope.through) {
1833
- nonInlinedModuleThroughIdentifiers.add(ref.identifier.name);
2125
+ for (const ref of globalScope.through) {
2126
+ nonInlinedModuleThroughIdentifiers.add(ref.identifier.name);
2127
+ }
2128
+ }
2129
+
2130
+ // Fast path: codegen reports each inlined entry's rendered top-level
2131
+ // declarations and free names (post-concatenation), so when no declaration
2132
+ // collides with a free name of any other module, another entry's
2133
+ // declarations, or a reserved name, no renaming is needed and the entries
2134
+ // don't have to be parsed at all.
2135
+ fastPath: {
2136
+ const { codeGenerationResults, chunk } = renderContext;
2137
+ /** @type {Set<string>} */
2138
+ const usedNames = new Set(nonInlinedModuleThroughIdentifiers);
2139
+ for (const name of RESERVED_NAMES) usedNames.add(name);
2140
+ /** @type {Set<string>[]} */
2141
+ const declarationsList = [];
2142
+ for (const m of inlinedModuleSources.keys()) {
2143
+ if (!codeGenerationResults.has(m, chunk.runtime)) break fastPath;
2144
+ const result = codeGenerationResults.get(m, chunk.runtime);
2145
+ const data = result.data;
2146
+ if (!data) break fastPath;
2147
+ const declarations = data.get("topLevelDeclarations");
2148
+ if (!declarations) break fastPath;
2149
+ declarationsList.push(declarations);
2150
+ if (!isMultipleEntries) continue;
2151
+ // Entries share the startup scope: an entry's free names and runtime
2152
+ // globals must not be shadowed by another entry's declarations.
2153
+ const freeNames = data.get("freeNames");
2154
+ if (!freeNames) break fastPath;
2155
+ for (const name of freeNames) usedNames.add(name);
2156
+ if (result.runtimeRequirements) {
2157
+ for (const req of result.runtimeRequirements) {
2158
+ const dot = req.indexOf(".");
2159
+ usedNames.add(dot === -1 ? req : req.slice(0, dot));
2160
+ }
1834
2161
  }
1835
2162
  }
2163
+ for (const declarations of declarationsList) {
2164
+ for (const name of declarations) {
2165
+ if (usedNames.has(name)) break fastPath;
2166
+ }
2167
+ // earlier entries' declarations join the used set so later entries
2168
+ // are checked against them
2169
+ for (const name of declarations) usedNames.add(name);
2170
+ }
2171
+ for (const [m, moduleSource] of inlinedModuleSources) {
2172
+ renamedInlinedModules.set(m, moduleSource);
2173
+ }
2174
+ return renamedInlinedModules;
2175
+ }
2176
+
2177
+ for (const [m, moduleSource] of inlinedModuleSources) {
2178
+ const code = /** @type {string} */ (moduleSource.source());
2179
+
2180
+ const { experiments } = compilation.options;
2181
+ const { ast } = JavascriptParser._parse(
2182
+ code,
2183
+ {
2184
+ sourceType: "auto",
2185
+ ranges: true,
2186
+ // generated code contains phase imports when the experiments are on
2187
+ importPhases: Boolean(
2188
+ experiments.deferImport || experiments.sourceImport
2189
+ )
2190
+ },
2191
+ JavascriptParser._getModuleParseFunction(compilation, m)
2192
+ );
2193
+
2194
+ const scopeManager = eslintScope.analyze(ast, {
2195
+ ecmaVersion: 6,
2196
+ sourceType: "module",
2197
+ optimistic: true,
2198
+ ignoreEval: true
2199
+ });
2200
+
2201
+ const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
2202
+ const moduleScope = globalScope.childScopes[0];
2203
+ inlinedModulesToInfo.set(m, {
2204
+ source: moduleSource,
2205
+ ast,
2206
+ module: m,
2207
+ variables: new Set(moduleScope.variables),
2208
+ through: new Set(moduleScope.through),
2209
+ usedInNonInlined: new Set(),
2210
+ moduleScope
2211
+ });
1836
2212
  }
1837
2213
 
1838
2214
  for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
@@ -1846,6 +2222,36 @@ class JavascriptModulesPlugin {
1846
2222
  }
1847
2223
  }
1848
2224
 
2225
+ // Multiple inlined entry modules share the chunk's startup scope. Rename any
2226
+ // top-level declaration that would collide with another inlined module's
2227
+ // declaration, with any inlined or non-inlined module's free (global)
2228
+ // reference, or with a reserved name, so the modules can be emitted without a
2229
+ // per-entry IIFE.
2230
+ if (isMultipleEntries) {
2231
+ /** @type {Set<string>} */
2232
+ const allUsedNames = new Set(nonInlinedModuleThroughIdentifiers);
2233
+ for (const name of RESERVED_NAMES) allUsedNames.add(name);
2234
+ for (const { through } of inlinedModulesToInfo.values()) {
2235
+ for (const ref of through) allUsedNames.add(ref.identifier.name);
2236
+ }
2237
+ for (const [m, moduleInfo] of inlinedModulesToInfo) {
2238
+ const { ast, source: _source } = moduleInfo;
2239
+ const source = new ReplaceSource(_source);
2240
+ for (const variable of moduleInfo.variables) {
2241
+ renameInlinedModuleVariable(
2242
+ source,
2243
+ ast,
2244
+ variable,
2245
+ moduleInfo.module.identifier(),
2246
+ m.readableIdentifier(runtimeTemplate.requestShortener),
2247
+ allUsedNames
2248
+ );
2249
+ }
2250
+ renamedInlinedModules.set(m, source);
2251
+ }
2252
+ return renamedInlinedModules;
2253
+ }
2254
+
1849
2255
  for (const [m, moduleInfo] of inlinedModulesToInfo) {
1850
2256
  const { ast, source: _source, usedInNonInlined } = moduleInfo;
1851
2257
  const source = new ReplaceSource(_source);
@@ -1864,60 +2270,14 @@ class JavascriptModulesPlugin {
1864
2270
  }
1865
2271
 
1866
2272
  for (const variable of info.variables) {
1867
- /** @type {UsedNamesInScopeInfo} */
1868
- const usedNamesInScopeInfo = new Map();
1869
- /** @type {ScopeSet} */
1870
- const ignoredScopes = new Set();
1871
-
1872
- const name = variable.name;
1873
- const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
1874
- usedNamesInScopeInfo,
2273
+ renameInlinedModuleVariable(
2274
+ source,
2275
+ ast,
2276
+ variable,
1875
2277
  info.module.identifier(),
1876
- name
2278
+ m.readableIdentifier(runtimeTemplate.requestShortener),
2279
+ allUsedNames
1877
2280
  );
1878
-
1879
- if (allUsedNames.has(name) || usedNames.has(name)) {
1880
- const references = getAllReferences(variable);
1881
- const allIdentifiers = new Set([
1882
- ...references.map((r) => r.identifier),
1883
- ...variable.identifiers
1884
- ]);
1885
- for (const ref of references) {
1886
- addScopeSymbols(
1887
- ref.from,
1888
- usedNames,
1889
- alreadyCheckedScopes,
1890
- ignoredScopes
1891
- );
1892
- }
1893
-
1894
- const newName = findNewName(
1895
- variable.name,
1896
- allUsedNames,
1897
- usedNames,
1898
- m.readableIdentifier(runtimeTemplate.requestShortener)
1899
- );
1900
- allUsedNames.add(newName);
1901
- for (const identifier of allIdentifiers) {
1902
- const r = /** @type {Range} */ (identifier.range);
1903
- const path = getPathInAst(ast, identifier);
1904
- if (path && path.length > 1) {
1905
- const maybeProperty =
1906
- path[1].type === "AssignmentPattern" && path[1].left === path[0]
1907
- ? path[2]
1908
- : path[1];
1909
- if (
1910
- maybeProperty.type === "Property" &&
1911
- maybeProperty.shorthand
1912
- ) {
1913
- source.insert(r[1], `: ${newName}`);
1914
- continue;
1915
- }
1916
- }
1917
- source.replace(r[0], r[1] - 1, newName);
1918
- }
1919
- }
1920
- allUsedNames.add(name);
1921
2281
  }
1922
2282
 
1923
2283
  renamedInlinedModules.set(m, source);
@@ -1927,5 +2287,41 @@ class JavascriptModulesPlugin {
1927
2287
  }
1928
2288
  }
1929
2289
 
2290
+ JavascriptModulesPlugin.getCompilationHooks = createHooksRegistry(
2291
+ () =>
2292
+ /** @type {CompilationHooks} */ ({
2293
+ renderModuleContent: new SyncWaterfallHook([
2294
+ "source",
2295
+ "module",
2296
+ "moduleRenderContext"
2297
+ ]),
2298
+ renderModuleContainer: new SyncWaterfallHook([
2299
+ "source",
2300
+ "module",
2301
+ "moduleRenderContext"
2302
+ ]),
2303
+ renderModulePackage: new SyncWaterfallHook([
2304
+ "source",
2305
+ "module",
2306
+ "moduleRenderContext"
2307
+ ]),
2308
+ render: new SyncWaterfallHook(["source", "renderContext"]),
2309
+ renderContent: new SyncWaterfallHook(["source", "renderContext"]),
2310
+ renderStartup: new SyncWaterfallHook([
2311
+ "source",
2312
+ "module",
2313
+ "startupRenderContext"
2314
+ ]),
2315
+ renderChunk: new SyncWaterfallHook(["source", "renderContext"]),
2316
+ renderMain: new SyncWaterfallHook(["source", "renderContext"]),
2317
+ renderRequire: new SyncWaterfallHook(["code", "renderContext"]),
2318
+ inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
2319
+ embedInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
2320
+ strictRuntimeBailout: new SyncBailHook(["renderContext"]),
2321
+ chunkHash: new SyncHook(["chunk", "hash", "context"]),
2322
+ useSourceMap: new SyncBailHook(["chunk", "renderContext"])
2323
+ })
2324
+ );
2325
+
1930
2326
  module.exports = JavascriptModulesPlugin;
1931
2327
  module.exports.chunkHasJs = chunkHasJs;