@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -6,12 +6,179 @@
6
6
 
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
+ const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
9
10
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
11
 
12
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
+ /** @typedef {import("../Module")} Module */
14
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
11
15
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
12
16
  /** @typedef {import("../Module").ExportsType} ExportsType */
13
17
  /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
14
18
 
19
+ /**
20
+ * @typedef {object} DeferredCycleState
21
+ * @property {Map<Module, Set<Module>>} sccOf strongly-connected component per module (shared object per component)
22
+ * @property {Map<Module, Set<Module> | null>} peers memoized SCC peers (component minus the module) per deferred module
23
+ */
24
+
25
+ /** @type {WeakMap<ModuleGraph, DeferredCycleState>} */
26
+ const deferredCycleCache = new WeakMap();
27
+
28
+ /**
29
+ * Materializes the active harmony-import targets of a module (deferred edges
30
+ * included, matching the spec's `RequestedModules` recursion).
31
+ * @param {ModuleGraph} moduleGraph the module graph
32
+ * @param {Module} module the module
33
+ * @returns {Module[]} imported modules
34
+ */
35
+ function harmonyImportTargets(moduleGraph, module) {
36
+ const connections = moduleGraph.getOutgoingConnectionsByModule(module);
37
+ if (!connections) return [];
38
+ /** @type {Module[]} */
39
+ const targets = [];
40
+ for (const [dep, moduleConnections] of connections) {
41
+ if (
42
+ dep &&
43
+ moduleConnections.some(
44
+ (c) =>
45
+ c.dependency instanceof HarmonyImportDependency &&
46
+ c.isTargetActive(undefined)
47
+ )
48
+ ) {
49
+ targets.push(dep);
50
+ }
51
+ }
52
+ return targets;
53
+ }
54
+
55
+ /**
56
+ * Assigns every module reachable from `seed` (through active harmony imports)
57
+ * to its strongly-connected component via an iterative Tarjan pass, writing the
58
+ * results into `sccOf`. Modules already assigned by an earlier pass are treated
59
+ * as finished, so across all deferred imports every edge is visited once
60
+ * (O(V + E) total) rather than re-walked per import.
61
+ * @param {ModuleGraph} moduleGraph the module graph
62
+ * @param {Module} seed the module to explore from
63
+ * @param {Map<Module, Set<Module>>} sccOf module-to-component map to populate
64
+ * @returns {void}
65
+ */
66
+ function assignStronglyConnectedComponents(moduleGraph, seed, sccOf) {
67
+ if (sccOf.has(seed)) return;
68
+ /** @type {Map<Module, number>} */
69
+ const index = new Map();
70
+ /** @type {Map<Module, number>} */
71
+ const low = new Map();
72
+ /** @type {Set<Module>} */
73
+ const onStack = new Set();
74
+ /** @type {Module[]} */
75
+ const componentStack = [];
76
+ /** @type {{ node: Module, targets: Module[], i: number }[]} */
77
+ const work = [];
78
+ let counter = 0;
79
+ /**
80
+ * @param {Module} node node to open
81
+ */
82
+ const open = (node) => {
83
+ index.set(node, counter);
84
+ low.set(node, counter);
85
+ counter++;
86
+ componentStack.push(node);
87
+ onStack.add(node);
88
+ work.push({ node, targets: harmonyImportTargets(moduleGraph, node), i: 0 });
89
+ };
90
+ open(seed);
91
+ while (work.length > 0) {
92
+ const frame = work[work.length - 1];
93
+ if (frame.i < frame.targets.length) {
94
+ const next = frame.targets[frame.i++];
95
+ // Already in a finished component (from this or a prior pass): skip.
96
+ if (sccOf.has(next)) continue;
97
+ if (!index.has(next)) {
98
+ open(next);
99
+ } else if (onStack.has(next)) {
100
+ const nodeLow = /** @type {number} */ (low.get(frame.node));
101
+ const nextIndex = /** @type {number} */ (index.get(next));
102
+ if (nextIndex < nodeLow) low.set(frame.node, nextIndex);
103
+ }
104
+ continue;
105
+ }
106
+ work.pop();
107
+ const node = frame.node;
108
+ const nodeLow = /** @type {number} */ (low.get(node));
109
+ if (work.length > 0) {
110
+ const parent = work[work.length - 1].node;
111
+ if (nodeLow < /** @type {number} */ (low.get(parent))) {
112
+ low.set(parent, nodeLow);
113
+ }
114
+ }
115
+ if (nodeLow === index.get(node)) {
116
+ /** @type {Set<Module>} */
117
+ const component = new Set();
118
+ let member;
119
+ do {
120
+ member = /** @type {Module} */ (componentStack.pop());
121
+ onStack.delete(member);
122
+ component.add(member);
123
+ } while (member !== node);
124
+ for (const m of component) sccOf.set(m, component);
125
+ }
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Per the TC39 import-defer spec's `ReadyForSyncExecution`, forcing evaluation
131
+ * of a deferred module must throw when any module in its transitive static
132
+ * import closure is currently evaluating. Only a module in `module`'s own
133
+ * strongly-connected component can be evaluating at that point (anything else it
134
+ * imports is either already evaluated or not started), so we emit just the SCC
135
+ * peers instead of the whole (potentially huge) forward closure.
136
+ * @param {ModuleGraph} moduleGraph the module graph
137
+ * @param {Module} module the deferred module
138
+ * @returns {Set<Module> | null} the SCC peers when cyclic, otherwise null
139
+ */
140
+ function getDeferredCycleModules(moduleGraph, module) {
141
+ let state = deferredCycleCache.get(moduleGraph);
142
+ if (state === undefined) {
143
+ state = { sccOf: new Map(), peers: new Map() };
144
+ deferredCycleCache.set(moduleGraph, state);
145
+ }
146
+ const cached = state.peers.get(module);
147
+ if (cached !== undefined) return cached;
148
+ assignStronglyConnectedComponents(moduleGraph, module, state.sccOf);
149
+ const component = state.sccOf.get(module);
150
+ // A trivial component (size 1, no self-cycle peers) means no cycle; a direct
151
+ // self-loop is already covered by the `evaluating` check on `module` itself.
152
+ let result = null;
153
+ if (component !== undefined && component.size > 1) {
154
+ result = new Set(component);
155
+ result.delete(module);
156
+ }
157
+ state.peers.set(module, result);
158
+ return result;
159
+ }
160
+
161
+ /**
162
+ * Maps a defer-cycle closure to the runtime module ids whose `evaluating` flag
163
+ * the deferred namespace must check. `resolveId` maps a closure module to the
164
+ * runtime id that carries its evaluation state (its own id, or the id of the
165
+ * concatenated module that absorbed it); unresolved (`null`) members are
166
+ * dropped. Returns `null` when there is nothing to check.
167
+ * @param {Set<Module> | null} closure closure modules, or null when not cyclic
168
+ * @param {(module: Module) => ModuleId | null} resolveId maps a module to its runtime id
169
+ * @returns {ModuleId[] | null} deduplicated runtime ids, or null
170
+ */
171
+ function getDeferredCycleModuleIds(closure, resolveId) {
172
+ if (closure === null) return null;
173
+ /** @type {Set<ModuleId>} */
174
+ const ids = new Set();
175
+ for (const module of closure) {
176
+ const id = resolveId(module);
177
+ if (id !== null) ids.add(id);
178
+ }
179
+ return ids.size > 0 ? [...ids] : null;
180
+ }
181
+
15
182
  /**
16
183
  * @param {ExportsType} exportsType exports type
17
184
  * @returns {string} mode
@@ -29,6 +196,7 @@ function getMakeDeferredNamespaceModeFromExportsType(exportsType) {
29
196
  * @param {string} moduleId moduleId
30
197
  * @param {ExportsType} exportsType exportsType
31
198
  * @param {(ModuleId | null)[]} asyncDepsIds asyncDepsIds
199
+ * @param {ModuleId[] | null} syncCycleDepsIds transitive static closure ids when the module is part of a defer cycle
32
200
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
33
201
  * @returns {string} call make optimized deferred namespace object
34
202
  */
@@ -36,15 +204,23 @@ function getOptimizedDeferredModule(
36
204
  moduleId,
37
205
  exportsType,
38
206
  asyncDepsIds,
207
+ syncCycleDepsIds,
39
208
  runtimeRequirements
40
209
  ) {
41
210
  runtimeRequirements.add(RuntimeGlobals.makeOptimizedDeferredNamespaceObject);
42
211
  const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
43
- return `${RuntimeGlobals.makeOptimizedDeferredNamespaceObject}(${moduleId}, ${mode}${
44
- asyncDepsIds.length > 0
45
- ? `, ${JSON.stringify(asyncDepsIds.filter((x) => x !== null))}`
46
- : ""
47
- })`;
212
+ const asyncDeps = asyncDepsIds.filter((x) => x !== null);
213
+ const hasSync = syncCycleDepsIds !== null && syncCycleDepsIds.length > 0;
214
+ // `syncDeps` is passed positionally after `asyncDeps`, so a `0` placeholder
215
+ // keeps the slot when the module has cycle deps but no async deps.
216
+ const args = [moduleId, mode];
217
+ if (asyncDeps.length > 0 || hasSync) {
218
+ args.push(asyncDeps.length > 0 ? JSON.stringify(asyncDeps) : "0");
219
+ }
220
+ if (hasSync) args.push(JSON.stringify(syncCycleDepsIds));
221
+ return `${RuntimeGlobals.makeOptimizedDeferredNamespaceObject}(${args.join(
222
+ ", "
223
+ )})`;
48
224
  }
49
225
 
50
226
  class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
@@ -58,23 +234,42 @@ class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeMod
58
234
  }
59
235
 
60
236
  /**
237
+ * Generates runtime code for this runtime module.
61
238
  * @returns {string | null} runtime code
62
239
  */
63
240
  generate() {
64
241
  if (!this.compilation) return null;
242
+ const { runtimeTemplate } = this.compilation;
243
+ const cst = runtimeTemplate.renderConst();
244
+ const lt = runtimeTemplate.renderLet();
65
245
  const fn = RuntimeGlobals.makeOptimizedDeferredNamespaceObject;
66
246
  const hasAsync = this.hasAsyncRuntime;
67
247
  return Template.asString([
68
248
  // Note: must be a function (not arrow), because this is used in body!
69
- `${fn} = function(moduleId, mode${hasAsync ? ", asyncDeps" : ""}) {`,
249
+ // `asyncDeps` keeps a fixed positional slot even without async runtime
250
+ // so the trailing `syncDeps` (defer-cycle closure) always lines up.
251
+ `${fn} = function(moduleId, mode, asyncDeps, syncDeps) {`,
70
252
  Template.indent([
71
- "var r = this;",
72
- hasAsync ? "var isAsync = asyncDeps && asyncDeps.length;" : "",
73
- "var obj = {",
253
+ `${cst} r = this;`,
254
+ hasAsync ? `${cst} isAsync = asyncDeps && asyncDeps.length;` : "",
255
+ `${cst} obj = {`,
74
256
  Template.indent([
75
257
  "get a() {",
76
258
  Template.indent([
77
- "var exports = r(moduleId);",
259
+ // Forcing evaluation of a module that is currently evaluating
260
+ // (a cycle reached through a deferred import) must throw rather
261
+ // than expose its partial exports. `syncDeps` (present only for
262
+ // cyclic deferred modules) carries the transitive static closure,
263
+ // so an evaluating dependency is caught before any evaluation.
264
+ `${cst} cachedModule = __webpack_module_cache__[moduleId];`,
265
+ 'if (cachedModule !== undefined && (cachedModule.evaluating || cachedModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while the module is being evaluated");',
266
+ "if (syncDeps) for (var i = 0; i < syncDeps.length; i++) {",
267
+ Template.indent([
268
+ `${cst} depModule = __webpack_module_cache__[syncDeps[i]];`,
269
+ 'if (depModule !== undefined && (depModule.evaluating || depModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while a dependency is being evaluated");'
270
+ ]),
271
+ "}",
272
+ `${lt} exports = r(moduleId);`,
78
273
  hasAsync
79
274
  ? `if(isAsync) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
80
275
  : "",
@@ -108,30 +303,61 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
108
303
  }
109
304
 
110
305
  /**
306
+ * Generates runtime code for this runtime module.
111
307
  * @returns {string | null} runtime code
112
308
  */
113
309
  generate() {
114
310
  if (!this.compilation) return null;
115
311
  const { runtimeTemplate } = this.compilation;
312
+ const cst = runtimeTemplate.renderConst();
313
+ const lt = runtimeTemplate.renderLet();
116
314
  const fn = RuntimeGlobals.makeDeferredNamespaceObject;
117
315
  const hasAsync = this.hasAsyncRuntime;
118
- const init = runtimeTemplate.supportsOptionalChaining()
119
- ? "init?.();"
120
- : "if (init) init();";
316
+ const init = `${runtimeTemplate.optionalChaining("init", "()")};`;
121
317
  return `${fn} = ${runtimeTemplate.basicFunction("moduleId, mode", [
122
- "var cachedModule = __webpack_module_cache__[moduleId];",
123
- "if (cachedModule && cachedModule.error === undefined) {",
318
+ // Per the TC39 import-defer spec, deferred namespaces are
319
+ // distinct from their eager counterparts and the same module
320
+ // referenced from multiple defer-import sites must yield the
321
+ // same object. Cache the Proxy / fake namespace per-moduleId so
322
+ // repeated calls (including across files) share identity.
323
+ //
324
+ // Bit 16 (`createFakeNamespaceObject`'s "return value when
325
+ // it's Promise-like" flag added by
326
+ // `RuntimeTemplate.moduleNamespacePromise` for dynamic
327
+ // imports) is irrelevant for deferred namespaces — the value
328
+ // passed into `createFakeNamespaceObject` here is always the
329
+ // resolved module exports (after unwrapping the async-module
330
+ // export symbol when present), never a Promise. Strip it
331
+ // once so all downstream behavior, the cache key, and the
332
+ // `createFakeNamespaceObject` call below see the same shape
333
+ // mode. This keeps static defer (mode 8) and dynamic
334
+ // `await import.defer` (mode 8 | 16) sharing the same
335
+ // Deferred Module Namespace object, while still keying by
336
+ // `(moduleId, mode)` so distinct exports-type shapes
337
+ // (e.g. one importer treats a CJS module as
338
+ // "default-with-named", another as "namespace") get
339
+ // distinct cache entries.
340
+ "mode &= ~16;",
341
+ `${lt} byMode = __webpack_module_deferred_namespace_cache__[moduleId];`,
342
+ "if (byMode && byMode[mode] !== undefined) return byMode[mode];",
343
+ "if (!byMode) byMode = __webpack_module_deferred_namespace_cache__[moduleId] = {};",
344
+ `${cst} cachedModule = __webpack_module_cache__[moduleId];`,
345
+ "if (cachedModule && cachedModule.error === undefined && !(mode & 8)) {",
124
346
  Template.indent([
125
- "var exports = cachedModule.exports;",
347
+ `${lt} exports = cachedModule.exports;`,
126
348
  hasAsync
127
349
  ? `if (${RuntimeGlobals.asyncModuleExportSymbol} in exports) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
128
350
  : "",
129
- "if (mode & 8) return exports;",
130
- `return ${RuntimeGlobals.createFakeNamespaceObject}(exports, mode);`
351
+ `return byMode[mode] = ${RuntimeGlobals.createFakeNamespaceObject}(exports, mode);`
131
352
  ]),
132
353
  "}",
133
354
  "",
134
- `var init = ${runtimeTemplate.basicFunction("", [
355
+ `${lt} init = ${runtimeTemplate.basicFunction("", [
356
+ // A deferred namespace that forces evaluation of a module that is
357
+ // already evaluating (a cycle) must throw rather than expose its
358
+ // partial exports.
359
+ `${cst} evaluatingModule = __webpack_module_cache__[moduleId];`,
360
+ 'if (evaluatingModule !== undefined && (evaluatingModule.evaluating || evaluatingModule.evaluatingAsync)) throw new TypeError("Cannot access a deferred module namespace while the module is being evaluated");',
135
361
  `ns = ${RuntimeGlobals.require}(moduleId);`,
136
362
  hasAsync
137
363
  ? `if (${RuntimeGlobals.asyncModuleExportSymbol} in ns) ns = ns[${RuntimeGlobals.asyncModuleExportSymbol}];`
@@ -139,9 +365,23 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
139
365
  "init = null;",
140
366
  "if (mode & 8 || mode & 4 && ns.__esModule && typeof ns === 'object') {",
141
367
  Template.indent([
142
- "delete handler.defineProperty;",
143
- "delete handler.deleteProperty;",
144
- "delete handler.set;",
368
+ // Drop only the read-side traps after init: with the
369
+ // resolved namespace's own keys mirrored onto
370
+ // `ns_target` below, the default `Reflect` behavior
371
+ // returns the right values via the live-binding
372
+ // getters, so we no longer need to intercept `get` /
373
+ // `has` / `ownKeys` / `getOwnPropertyDescriptor`.
374
+ //
375
+ // The mutation traps (`set`, `deleteProperty`,
376
+ // `defineProperty`) are kept because per the TC39
377
+ // import-defer spec, `[[Set]]` / `[[Delete]]` /
378
+ // `[[DefineOwnProperty]]` on a Deferred Module
379
+ // Namespace Exotic Object never succeed — and the
380
+ // proxy target itself remains extensible
381
+ // (architecturally we cannot freeze it up-front),
382
+ // so without these traps `ns.notExported = "x"`
383
+ // after evaluation would silently create a property
384
+ // on the target instead of returning false.
145
385
  "delete handler.get;",
146
386
  "delete handler.has;",
147
387
  "delete handler.ownKeys;",
@@ -151,14 +391,59 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
151
391
  Template.indent([
152
392
  `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, mode);`
153
393
  ]),
394
+ "}",
395
+ // Mirror own properties from the resolved namespace onto the proxy
396
+ // target so that proxy invariants hold for callers that structurally
397
+ // introspect via `Object.keys` / `Object.getOwnPropertyNames` /
398
+ // `Object.getOwnPropertyDescriptor`: when our trap reports a
399
+ // non-configurable descriptor for a key, the target must also have
400
+ // that key with a matching descriptor.
401
+ //
402
+ // `__esModule` and `Symbol.toStringTag` are intentionally skipped:
403
+ // the proxy synthesizes "Deferred Module" / true regardless of what
404
+ // the underlying namespace exposes (per the TC39 import-defer
405
+ // proposal, the [[StringTag]] of a Deferred Module Namespace
406
+ // Exotic Object is "Deferred Module"), and the target was already
407
+ // pre-populated with those values below.
408
+ `${cst} keys = Reflect.ownKeys(ns);`,
409
+ "for (var i = 0; i < keys.length; i++) {",
410
+ Template.indent([
411
+ `${cst} k = keys[i];`,
412
+ 'if (k === "__esModule" || k === Symbol.toStringTag) continue;',
413
+ `if (!${runtimeTemplate.objectHasOwn("ns_target", "k")}) {`,
414
+ Template.indent([
415
+ "try { Object.defineProperty(ns_target, k, Reflect.getOwnPropertyDescriptor(ns, k)); } catch (_) {}"
416
+ ]),
417
+ "}"
418
+ ]),
154
419
  "}"
155
420
  ])};`,
156
421
  "",
157
- "var ns = __webpack_module_deferred_exports__[moduleId] || (__webpack_module_deferred_exports__[moduleId] = { __proto__: null });",
158
- "var handler = {",
422
+ // The proxy target is a fresh placeholder, separate from
423
+ // `__webpack_module_deferred_exports__[moduleId]` (which is reused
424
+ // by `__webpack_require__` as `module.exports` for deferred-loaded
425
+ // modules and would conflict with our pre-populated synthetic
426
+ // `__esModule` / `Symbol.toStringTag` non-configurable properties).
427
+ // Using a dedicated target keeps the proxy invariant-compliant
428
+ // without interfering with the module's own exports object.
429
+ `${cst} ns_target = { __proto__: null };`,
430
+ // Pre-populate the synthetic deferred-namespace properties with
431
+ // fully non-configurable, non-writable, non-enumerable descriptors
432
+ // (matching the TC39 import-defer spec for Module Namespace
433
+ // Exotic Objects). The trap returns the same descriptors below.
434
+ 'Object.defineProperty(ns_target, "__esModule", { value: true });',
435
+ 'Object.defineProperty(ns_target, Symbol.toStringTag, { value: "Deferred Module" });',
436
+ `${lt} ns = ns_target;`,
437
+ `${cst} handler = {`,
159
438
  Template.indent([
160
439
  "__proto__: null,",
161
- `get: ${runtimeTemplate.basicFunction("_, name", [
440
+ // Per the TC39 import-defer proposal, `IsSymbolLikeNamespaceKey`
441
+ // returns true for any Symbol-keyed access (and for "then"); such
442
+ // accesses go through `OrdinaryGetOwnProperty` and must not
443
+ // trigger evaluation of the deferred module. The Symbol checks
444
+ // below short-circuit to the pre-populated target without
445
+ // running `init()`.
446
+ `${runtimeTemplate.method("get", "_, name", [
162
447
  "switch (name) {",
163
448
  Template.indent([
164
449
  'case "__esModule": return true;',
@@ -166,10 +451,11 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
166
451
  'case "then": return undefined;'
167
452
  ]),
168
453
  "}",
454
+ 'if (typeof name === "symbol") return ns_target[name];',
169
455
  init,
170
456
  "return ns[name];"
171
457
  ])},`,
172
- `has: ${runtimeTemplate.basicFunction("_, name", [
458
+ `${runtimeTemplate.method("has", "_, name", [
173
459
  "switch (name) {",
174
460
  Template.indent(
175
461
  [
@@ -184,41 +470,70 @@ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
184
470
  ].filter(Boolean)
185
471
  ),
186
472
  "}",
473
+ 'if (typeof name === "symbol") return name in ns_target;',
187
474
  init,
188
475
  "return name in ns;"
189
476
  ])},`,
190
- `ownKeys: ${runtimeTemplate.basicFunction("", [
477
+ `${runtimeTemplate.method("ownKeys", "", [
191
478
  init,
192
- `var keys = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction('x !== "then" && x !== Symbol.toStringTag', "x")}).concat([Symbol.toStringTag]);`,
479
+ `${cst} filtered = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction(
480
+ 'x !== "then" && x !== Symbol.toStringTag',
481
+ "x"
482
+ )});`,
483
+ `${cst} keys = ${
484
+ runtimeTemplate.supportsSpread()
485
+ ? "[...filtered, Symbol.toStringTag]"
486
+ : "filtered.concat([Symbol.toStringTag])"
487
+ };`,
193
488
  "return keys;"
194
489
  ])},`,
195
- `getOwnPropertyDescriptor: ${runtimeTemplate.basicFunction("_, name", [
490
+ `${runtimeTemplate.method("getOwnPropertyDescriptor", "_, name", [
196
491
  "switch (name) {",
197
492
  Template.indent([
198
- 'case "__esModule": return { value: true, configurable: !(mode & 8) };',
199
- 'case Symbol.toStringTag: return { value: "Deferred Module", configurable: !(mode & 8) };',
493
+ // Match the descriptors actually defined on `ns_target`
494
+ // (non-configurable, non-writable, non-enumerable) so the
495
+ // proxy invariant holds for both the trap result and any
496
+ // post-init forwarding via the deleted-handler path.
497
+ 'case "__esModule": return { value: true, writable: false, enumerable: false, configurable: false };',
498
+ 'case Symbol.toStringTag: return { value: "Deferred Module", writable: false, enumerable: false, configurable: false };',
200
499
  'case "then": return undefined;'
201
500
  ]),
202
501
  "}",
502
+ 'if (typeof name === "symbol") return Reflect.getOwnPropertyDescriptor(ns_target, name);',
203
503
  init,
204
- "var desc = Reflect.getOwnPropertyDescriptor(ns, name);",
504
+ `${lt} desc = Reflect.getOwnPropertyDescriptor(ns, name);`,
205
505
  'if (mode & 2 && name == "default" && !desc) {',
206
506
  Template.indent("desc = { value: ns, configurable: true };"),
207
507
  "}",
208
508
  "return desc;"
209
509
  ])},`,
210
- `defineProperty: ${runtimeTemplate.basicFunction("_, name", [
510
+ // `defineProperty` always rejects, but per the TC39 spec it
511
+ // must still trigger evaluation for string keys (the spec
512
+ // algorithm calls `[[GetOwnProperty]]` first, which forces
513
+ // evaluation on a deferred namespace). Symbol keys go through
514
+ // OrdinaryDefineOwnProperty and do not trigger eval.
515
+ `${runtimeTemplate.method("defineProperty", "_, name", [
516
+ 'if (typeof name === "symbol" || name === "then") return false;',
517
+ init,
518
+ "return false;"
519
+ ])},`,
520
+ // `deleteProperty` rejects, but per the TC39 spec it must
521
+ // still trigger evaluation for string keys (the spec
522
+ // algorithm calls `GetModuleExportsList` for non-symbol-like
523
+ // keys, forcing evaluation on a deferred namespace).
524
+ `${runtimeTemplate.method("deleteProperty", "_, name", [
525
+ 'if (typeof name === "symbol" || name === "then") return false;',
211
526
  init,
212
- // Note: This behavior does not match the spec one, but since webpack does not do it either
213
- // for a normal Module Namespace object (in MakeNamespaceObjectRuntimeModule), let's keep it simple.
214
527
  "return false;"
215
528
  ])},`,
216
- `deleteProperty: ${runtimeTemplate.returningFunction("false")},`,
529
+ // `set` always returns false without triggering evaluation —
530
+ // the spec [[Set]] algorithm for Module Namespaces is just
531
+ // "return false" (no [[GetOwnProperty]], no eval).
217
532
  `set: ${runtimeTemplate.returningFunction("false")},`
218
533
  ]),
219
534
  "}",
220
535
  // we don't fully emulate ES Module semantics in this Proxy to align with normal webpack esm namespace object.
221
- "return new Proxy(ns, handler);"
536
+ "return byMode[mode] = new Proxy(ns_target, handler);"
222
537
  ])};`;
223
538
  }
224
539
  }
@@ -227,6 +542,8 @@ module.exports.MakeDeferredNamespaceObjectRuntimeModule =
227
542
  MakeDeferredNamespaceObjectRuntimeModule;
228
543
  module.exports.MakeOptimizedDeferredNamespaceObjectRuntimeModule =
229
544
  MakeOptimizedDeferredNamespaceObjectRuntimeModule;
545
+ module.exports.getDeferredCycleModuleIds = getDeferredCycleModuleIds;
546
+ module.exports.getDeferredCycleModules = getDeferredCycleModules;
230
547
  module.exports.getMakeDeferredNamespaceModeFromExportsType =
231
548
  getMakeDeferredNamespaceModeFromExportsType;
232
549
  module.exports.getOptimizedDeferredModule = getOptimizedDeferredModule;
@@ -16,6 +16,7 @@ class MakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
16
16
  }
17
17
 
18
18
  /**
19
+ * Generates runtime code for this runtime module.
19
20
  * @returns {string | null} runtime code
20
21
  */
21
22
  generate() {
@@ -25,7 +26,7 @@ class MakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
25
26
  return Template.asString([
26
27
  "// define __esModule on exports",
27
28
  `${fn} = ${runtimeTemplate.basicFunction("exports", [
28
- "if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {",
29
+ `if(${runtimeTemplate.supportsSymbol() ? "" : "typeof Symbol !== 'undefined' && "}Symbol.toStringTag) {`,
29
30
  Template.indent([
30
31
  "Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });"
31
32
  ]),
@@ -14,6 +14,7 @@ class NonceRuntimeModule extends RuntimeModule {
14
14
  }
15
15
 
16
16
  /**
17
+ * Generates runtime code for this runtime module.
17
18
  * @returns {string | null} runtime code
18
19
  */
19
20
  generate() {
@@ -16,13 +16,14 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
16
16
  }
17
17
 
18
18
  /**
19
+ * Generates runtime code for this runtime module.
19
20
  * @returns {string | null} runtime code
20
21
  */
21
22
  generate() {
22
23
  const compilation = /** @type {Compilation} */ (this.compilation);
23
24
  const { runtimeTemplate } = compilation;
24
25
  return Template.asString([
25
- "var deferred = [];",
26
+ `${runtimeTemplate.renderConst()} deferred = [];`,
26
27
  `${RuntimeGlobals.onChunksLoaded} = ${runtimeTemplate.basicFunction(
27
28
  "result, chunkIds, fn, priority",
28
29
  [
@@ -34,14 +35,14 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
34
35
  "return;"
35
36
  ]),
36
37
  "}",
37
- "var notFulfilled = Infinity;",
38
+ `${runtimeTemplate.renderLet()} notFulfilled = Infinity;`,
38
39
  "for (var i = 0; i < deferred.length; i++) {",
39
40
  Template.indent([
40
41
  runtimeTemplate.destructureArray(
41
42
  ["chunkIds", "fn", "priority"],
42
43
  "deferred[i]"
43
44
  ),
44
- "var fulfilled = true;",
45
+ `${runtimeTemplate.renderLet()} fulfilled = true;`,
45
46
  "for (var j = 0; j < chunkIds.length; j++) {",
46
47
  Template.indent([
47
48
  `if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(${
@@ -62,7 +63,7 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
62
63
  "if(fulfilled) {",
63
64
  Template.indent([
64
65
  "deferred.splice(i--, 1)",
65
- "var r = fn();",
66
+ `${runtimeTemplate.renderConst()} r = fn();`,
66
67
  "if (r !== undefined) result = r;"
67
68
  ]),
68
69
  "}"
@@ -21,6 +21,7 @@ class PublicPathRuntimeModule extends RuntimeModule {
21
21
  }
22
22
 
23
23
  /**
24
+ * Generates runtime code for this runtime module.
24
25
  * @returns {string | null} runtime code
25
26
  */
26
27
  generate() {
@@ -16,16 +16,18 @@ class RelativeUrlRuntimeModule extends HelperRuntimeModule {
16
16
  }
17
17
 
18
18
  /**
19
+ * Generates runtime code for this runtime module.
19
20
  * @returns {string | null} runtime code
20
21
  */
21
22
  generate() {
22
23
  const compilation = /** @type {Compilation} */ (this.compilation);
23
24
  const { runtimeTemplate } = compilation;
25
+ const cst = runtimeTemplate.renderConst();
24
26
  return Template.asString([
25
27
  `${RuntimeGlobals.relativeUrl} = function RelativeURL(url) {`,
26
28
  Template.indent([
27
- 'var realUrl = new URL(url, "x:/");',
28
- "var values = {};",
29
+ `${cst} realUrl = new URL(url, "x:/");`,
30
+ `${cst} values = {};`,
29
31
  "for (var key in realUrl) values[key] = realUrl[key];",
30
32
  "values.href = url;",
31
33
  'values.pathname = url.replace(/[?#].*/, "");',
@@ -16,6 +16,7 @@ class RuntimeIdRuntimeModule extends RuntimeModule {
16
16
  }
17
17
 
18
18
  /**
19
+ * Generates runtime code for this runtime module.
19
20
  * @returns {string | null} runtime code
20
21
  */
21
22
  generate() {