@depup/webpack 5.109.0-depup.0 → 5.110.1-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 (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -7,6 +7,7 @@
7
7
 
8
8
  const memoize = require("../util/memoize");
9
9
 
10
+ // browserslist pulls in caniuse-lite; only a browserslist target needs it
10
11
  const getBrowserslistTargetHandler = memoize(() =>
11
12
  require("./browserslistTargetHandler")
12
13
  );
@@ -81,6 +82,8 @@ const getDefaultTarget = (context) => {
81
82
  * @property {boolean | null} templateLiteral template literal is available
82
83
  * @property {boolean | null} asyncFunction async functions and await are available
83
84
  * @property {boolean | null} generator generator functions and yield are available
85
+ * @property {(boolean | null)=} deferImport deferred evaluation (`import defer`, `import.defer()`) is available (optional; absent means "assume unavailable")
86
+ * @property {(boolean | null)=} sourceImport source phase imports (`import source`, `import.source()`) are available (optional; absent means "assume unavailable")
84
87
  */
85
88
 
86
89
  /**
@@ -116,12 +119,16 @@ const versionDependent = (major, minor) => {
116
119
  nMajor > vMajor || (nMajor === vMajor && nMinor >= vMinor);
117
120
  };
118
121
 
122
+ // A `browserslist` target, with an optional `:env` / `:query` / config path
123
+ // after the keyword that `browserslistTargetHandler.load` reads.
124
+ const BROWSERSLIST_TARGET = /^browserslist(?::(.+))?$/;
125
+
119
126
  /** @type {[string, string, RegExp, (...args: string[]) => Partial<TargetProperties>][]} */
120
127
  const TARGETS = [
121
128
  [
122
129
  "browserslist / browserslist:env / browserslist:query / browserslist:path-to-config / browserslist:path-to-config:env",
123
130
  "Resolve features from browserslist. Will resolve browserslist config automatically. Only browser or node queries are supported (electron is not supported). Examples: 'browserslist:modern' to use 'modern' environment from browserslist config",
124
- /^browserslist(?::(.+))?$/,
131
+ BROWSERSLIST_TARGET,
125
132
  (rest, context) => {
126
133
  const browserslistTargetHandler = getBrowserslistTargetHandler();
127
134
  const browsers = browserslistTargetHandler.load(
@@ -267,7 +274,9 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
267
274
  bigIntLiteral: v(10, 4),
268
275
  dynamicImport: v(12, 17),
269
276
  dynamicImportInWorker: v(12, 17),
270
- module: v(12, 17)
277
+ module: v(12, 17),
278
+ // v24.5.0, for WebAssembly only; `import defer` is not implemented
279
+ sourceImport: v(24, 5)
271
280
  };
272
281
  }
273
282
  ],
@@ -319,7 +328,11 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
319
328
  spread: true,
320
329
  templateLiteral: true,
321
330
  asyncFunction: true,
322
- generator: true
331
+ generator: true,
332
+ // import defer - v2.8.0
333
+ deferImport: v(2, 8),
334
+ // import source - v2.6.0
335
+ sourceImport: v(2, 6)
323
336
  };
324
337
  }
325
338
  ],
@@ -536,6 +549,10 @@ const getTargetProperties = (target, context) => {
536
549
  );
537
550
  };
538
551
 
552
+ // Absence means "cannot read it" here, so a target omitting one votes against rather
553
+ // than letting another's `true` stand — `["web", "deno2.8"]` reads neither phase.
554
+ const UNSUPPORTED_WHEN_ABSENT = new Set(["deferImport", "sourceImport"]);
555
+
539
556
  /**
540
557
  * Merges target properties.
541
558
  * @param {TargetProperties[]} targetProperties array of target properties
@@ -563,6 +580,10 @@ const mergeTargetProperties = (targetProperties) => {
563
580
  case false:
564
581
  hasFalse = true;
565
582
  break;
583
+ default:
584
+ if (value === undefined && UNSUPPORTED_WHEN_ABSENT.has(key)) {
585
+ hasFalse = true;
586
+ }
566
587
  }
567
588
  }
568
589
  if (hasTrue || hasFalse) {
@@ -582,6 +603,28 @@ const mergeTargetProperties = (targetProperties) => {
582
603
  const getTargetsProperties = (targets, context) =>
583
604
  mergeTargetProperties(targets.map((t) => getTargetProperties(t, context)));
584
605
 
606
+ /**
607
+ * The raw browserslist selection behind the targets (`["chrome 100", …]`), merged
608
+ * across every `browserslist` target and deduplicated — undefined when none is
609
+ * one, and prefixing stays off with no browser list to prefix for.
610
+ * @param {string[]} targets the targets
611
+ * @param {string} context the context directory
612
+ * @returns {string[] | undefined} the selected browsers, or undefined
613
+ */
614
+ const getTargetsBrowsers = (targets, context) => {
615
+ const { load } = getBrowserslistTargetHandler();
616
+ /** @type {Set<string>} */
617
+ const browsers = new Set();
618
+ for (const target of targets) {
619
+ const match = BROWSERSLIST_TARGET.exec(target);
620
+ if (!match) continue;
621
+ const selected = load(match[1] ? match[1].trim() : null, context);
622
+ if (selected) for (const browser of selected) browsers.add(browser);
623
+ }
624
+ return browsers.size === 0 ? undefined : [...browsers];
625
+ };
626
+
585
627
  module.exports.getDefaultTarget = getDefaultTarget;
586
628
  module.exports.getTargetProperties = getTargetProperties;
629
+ module.exports.getTargetsBrowsers = getTargetsBrowsers;
587
630
  module.exports.getTargetsProperties = getTargetsProperties;
@@ -8,7 +8,7 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
- /** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
11
+ /** @import { ExposesList } from "./ContainerEntryModule" */
12
12
 
13
13
  class ContainerEntryDependency extends Dependency {
14
14
  /**
@@ -19,22 +19,30 @@ const StaticExportsDependency = require("../dependencies/StaticExportsDependency
19
19
  const makeSerializable = require("../util/makeSerializable");
20
20
  const ContainerExposedDependency = require("./ContainerExposedDependency");
21
21
 
22
- /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
23
- /** @typedef {import("../Compilation")} Compilation */
24
- /** @typedef {import("../Module").BuildCallback} BuildCallback */
25
- /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
26
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
27
- /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
28
- /** @typedef {import("../Module").LibIdent} LibIdent */
29
- /** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
30
- /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
31
- /** @typedef {import("../Module").Sources} Sources */
32
- /** @typedef {import("../Module").SourceTypes} SourceTypes */
33
- /** @typedef {import("../RequestShortener")} RequestShortener */
34
- /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
22
+ /**
23
+ * @import {
24
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
25
+ * } from "../config/defaults"
26
+ */
27
+ /** @import Compilation from "../Compilation" */
28
+ /**
29
+ * @import {
30
+ * BuildCallback,
31
+ * CodeGenerationContext,
32
+ * CodeGenerationResult,
33
+ * LibIdentOptions,
34
+ * LibIdent,
35
+ * NeedBuildCallback,
36
+ * NeedBuildContext,
37
+ * Sources,
38
+ * SourceTypes
39
+ * } from "../Module"
40
+ */
41
+ /** @import RequestShortener from "../RequestShortener" */
42
+ /** @import { ResolverWithOptions } from "../ResolverFactory" */
35
43
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, ExposesList, string]>} ObjectDeserializerContext */
36
44
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, ExposesList, string]>} ObjectSerializerContext */
37
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
45
+ /** @import { InputFileSystem } from "../util/fs" */
38
46
 
39
47
  /**
40
48
  * Defines the expose options type used by this module.
@@ -194,7 +202,8 @@ class ContainerEntryModule extends Module {
194
202
  block,
195
203
  message: "",
196
204
  chunkGraph,
197
- runtimeRequirements
205
+ runtimeRequirements,
206
+ originModule: this
198
207
  })}.then(${runtimeTemplate.returningFunction(
199
208
  runtimeTemplate.returningFunction(
200
209
  `(${modules
@@ -8,9 +8,13 @@
8
8
  const ModuleFactory = require("../ModuleFactory");
9
9
  const ContainerEntryModule = require("./ContainerEntryModule");
10
10
 
11
- /** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
12
- /** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
13
- /** @typedef {import("./ContainerEntryDependency")} ContainerEntryDependency */
11
+ /**
12
+ * @import {
13
+ * ModuleFactoryCallback,
14
+ * ModuleFactoryCreateData
15
+ * } from "../ModuleFactory"
16
+ */
17
+ /** @import ContainerEntryDependency from "./ContainerEntryDependency" */
14
18
 
15
19
  module.exports = class ContainerEntryModuleFactory extends ModuleFactory {
16
20
  /**
@@ -5,19 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const memoize = require("../util/memoize");
9
8
  const ContainerEntryDependency = require("./ContainerEntryDependency");
10
9
  const ContainerEntryModuleFactory = require("./ContainerEntryModuleFactory");
11
10
  const ContainerExposedDependency = require("./ContainerExposedDependency");
11
+ const getModuleFederationCompilationHooks = require("./moduleFederationHooks");
12
12
  const { parseOptions } = require("./options");
13
13
 
14
- /** @typedef {import("../../declarations/plugins/container/ContainerPlugin").ContainerPluginOptions} ContainerPluginOptions */
15
- /** @typedef {import("../Compiler")} Compiler */
16
- /** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
17
-
18
- const getModuleFederationPlugin = memoize(() =>
19
- require("./ModuleFederationPlugin")
20
- );
14
+ /**
15
+ * @import {
16
+ * ContainerPluginOptions
17
+ * } from "../../declarations/plugins/container/ContainerPlugin"
18
+ */
19
+ /** @import Compiler from "../Compiler" */
20
+ /** @import { ExposesList } from "./ContainerEntryModule" */
21
21
 
22
22
  const PLUGIN_NAME = "ContainerPlugin";
23
23
 
@@ -78,8 +78,7 @@ class ContainerPlugin {
78
78
  const shareScope = this.options.shareScope || "default";
79
79
 
80
80
  compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
81
- const hooks =
82
- getModuleFederationPlugin().getCompilationHooks(compilation);
81
+ const hooks = getModuleFederationCompilationHooks(compilation);
83
82
  const dep = new ContainerEntryDependency(
84
83
  this.options.name,
85
84
  exposes,
@@ -16,8 +16,12 @@ const RemoteRuntimeModule = require("./RemoteRuntimeModule");
16
16
  const RemoteToExternalDependency = require("./RemoteToExternalDependency");
17
17
  const { parseOptions } = require("./options");
18
18
 
19
- /** @typedef {import("../../declarations/plugins/container/ContainerReferencePlugin").ContainerReferencePluginOptions} ContainerReferencePluginOptions */
20
- /** @typedef {import("../Compiler")} Compiler */
19
+ /**
20
+ * @import {
21
+ * ContainerReferencePluginOptions
22
+ * } from "../../declarations/plugins/container/ContainerReferencePlugin"
23
+ */
24
+ /** @import Compiler from "../Compiler" */
21
25
 
22
26
  const slashCode = "/".charCodeAt(0);
23
27
  const PLUGIN_NAME = "ContainerReferencePlugin";
@@ -8,7 +8,7 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
- /** @typedef {import("./RemoteModule").ExternalRequests} ExternalRequests */
11
+ /** @import { ExternalRequests } from "./RemoteModule" */
12
12
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ExternalRequests]>} ObjectDeserializerContext */
13
13
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ExternalRequests]>} ObjectSerializerContext */
14
14
 
@@ -17,25 +17,32 @@ const Template = require("../Template");
17
17
  const makeSerializable = require("../util/makeSerializable");
18
18
  const FallbackItemDependency = require("./FallbackItemDependency");
19
19
 
20
- /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
21
- /** @typedef {import("../Chunk")} Chunk */
22
- /** @typedef {import("../Compilation")} Compilation */
23
- /** @typedef {import("../Module").BuildCallback} BuildCallback */
24
- /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
25
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
26
- /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
27
- /** @typedef {import("../Module").LibIdent} LibIdent */
28
- /** @typedef {import("../Module").NameForCondition} NameForCondition */
29
- /** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
30
- /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
31
- /** @typedef {import("../Module").Sources} Sources */
32
- /** @typedef {import("../Module").SourceTypes} SourceTypes */
33
- /** @typedef {import("../RequestShortener")} RequestShortener */
34
- /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
20
+ /**
21
+ * @import {
22
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
23
+ * } from "../config/defaults"
24
+ */
25
+ /** @import Chunk from "../Chunk" */
26
+ /** @import Compilation from "../Compilation" */
27
+ /**
28
+ * @import {
29
+ * BuildCallback,
30
+ * CodeGenerationContext,
31
+ * CodeGenerationResult,
32
+ * LibIdentOptions,
33
+ * LibIdent,
34
+ * NeedBuildCallback,
35
+ * NeedBuildContext,
36
+ * Sources,
37
+ * SourceTypes
38
+ * } from "../Module"
39
+ */
40
+ /** @import RequestShortener from "../RequestShortener" */
41
+ /** @import { ResolverWithOptions } from "../ResolverFactory" */
35
42
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ExternalRequests]>} ObjectDeserializerContext */
36
43
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ExternalRequests]>} ObjectSerializerContext */
37
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
38
- /** @typedef {import("./RemoteModule").ExternalRequests} ExternalRequests */
44
+ /** @import { InputFileSystem } from "../util/fs" */
45
+ /** @import { ExternalRequests } from "./RemoteModule" */
39
46
 
40
47
  const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
41
48
 
@@ -8,9 +8,13 @@
8
8
  const ModuleFactory = require("../ModuleFactory");
9
9
  const FallbackModule = require("./FallbackModule");
10
10
 
11
- /** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
12
- /** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
13
- /** @typedef {import("./FallbackDependency")} FallbackDependency */
11
+ /**
12
+ * @import {
13
+ * ModuleFactoryCallback,
14
+ * ModuleFactoryCreateData
15
+ * } from "../ModuleFactory"
16
+ */
17
+ /** @import FallbackDependency from "./FallbackDependency" */
14
18
 
15
19
  module.exports = class FallbackModuleFactory extends ModuleFactory {
16
20
  /**
@@ -8,17 +8,13 @@
8
8
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
9
9
  const ExternalModule = require("../ExternalModule");
10
10
  const { STAGE_ADVANCED } = require("../OptimizationStages");
11
- const memoize = require("../util/memoize");
12
11
  const { forEachRuntime } = require("../util/runtime");
12
+ const getModuleFederationCompilationHooks = require("./moduleFederationHooks");
13
13
 
14
- /** @typedef {import("../Compilation")} Compilation */
15
- /** @typedef {import("../Compiler")} Compiler */
16
- /** @typedef {import("../Dependency")} Dependency */
17
- /** @typedef {import("../Module")} Module */
18
-
19
- const getModuleFederationPlugin = memoize(() =>
20
- require("./ModuleFederationPlugin")
21
- );
14
+ /** @import Compilation from "../Compilation" */
15
+ /** @import Compiler from "../Compiler" */
16
+ /** @import Dependency from "../Dependency" */
17
+ /** @import Module from "../Module" */
22
18
 
23
19
  const PLUGIN_NAME = "HoistContainerReferences";
24
20
 
@@ -32,18 +28,18 @@ class HoistContainerReferences {
32
28
  */
33
29
  apply(compiler) {
34
30
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
35
- const hooks =
36
- getModuleFederationPlugin().getCompilationHooks(compilation);
31
+ const hooks = getModuleFederationCompilationHooks(compilation);
37
32
  /** @type {Set<Dependency>} */
38
33
  const depsToTrace = new Set();
39
34
  /** @type {Set<Dependency>} */
40
35
  const entryExternalsToHoist = new Set();
41
- hooks.addContainerEntryDependency.tap(PLUGIN_NAME, (dep) => {
42
- depsToTrace.add(dep);
43
- });
44
- hooks.addFederationRuntimeDependency.tap(PLUGIN_NAME, (dep) => {
36
+ // Both hooks feed the same trace set, so they share one callback.
37
+ /** @type {(dep: Dependency) => void} */
38
+ const traceDep = (dep) => {
45
39
  depsToTrace.add(dep);
46
- });
40
+ };
41
+ hooks.addContainerEntryDependency.tap(PLUGIN_NAME, traceDep);
42
+ hooks.addFederationRuntimeDependency.tap(PLUGIN_NAME, traceDep);
47
43
 
48
44
  compilation.hooks.addEntry.tap(PLUGIN_NAME, (entryDep) => {
49
45
  if (entryDep.type === "entry") {
@@ -76,46 +72,26 @@ class HoistContainerReferences {
76
72
  * @param {Set<Dependency>} entryExternalsToHoist Set of container entry dependencies to hoist.
77
73
  */
78
74
  hoistModulesInChunks(compilation, depsToTrace, entryExternalsToHoist) {
79
- const { chunkGraph, moduleGraph } = compilation;
75
+ const { moduleGraph } = compilation;
80
76
 
81
- // loop over entry points
77
+ // Entry externals: hoist the external modules (e.g. RemoteModule) they reference.
82
78
  for (const dep of entryExternalsToHoist) {
83
79
  const entryModule = moduleGraph.getModule(dep);
84
80
  if (!entryModule) continue;
85
- // get all the external module types and hoist them to the runtime chunk, this will get RemoteModule externals
86
81
  const allReferencedModules = getAllReferencedModules(
87
82
  compilation,
88
83
  entryModule,
89
84
  "external",
90
85
  false
91
86
  );
92
-
93
- const containerRuntimes = chunkGraph.getModuleRuntimes(entryModule);
94
- /** @type {Set<string>} */
95
- const runtimes = new Set();
96
-
97
- for (const runtimeSpec of containerRuntimes) {
98
- forEachRuntime(runtimeSpec, (runtimeKey) => {
99
- if (runtimeKey) {
100
- runtimes.add(runtimeKey);
101
- }
102
- });
103
- }
104
-
105
- for (const runtime of runtimes) {
106
- const runtimeChunk = compilation.namedChunks.get(runtime);
107
- if (!runtimeChunk) continue;
108
-
109
- for (const module of allReferencedModules) {
110
- if (!chunkGraph.isModuleInChunk(module, runtimeChunk)) {
111
- chunkGraph.connectChunkAndModule(runtimeChunk, module);
112
- }
113
- }
114
- }
115
- this.cleanUpChunks(compilation, allReferencedModules);
87
+ this.hoistReferencedModules(
88
+ compilation,
89
+ entryModule,
90
+ allReferencedModules
91
+ );
116
92
  }
117
93
 
118
- // handle container entry specifically
94
+ // Container entries: hoist the initial graph plus its external references.
119
95
  for (const dep of depsToTrace) {
120
96
  const containerEntryModule = moduleGraph.getModule(dep);
121
97
  if (!containerEntryModule) continue;
@@ -125,43 +101,54 @@ class HoistContainerReferences {
125
101
  "initial",
126
102
  false
127
103
  );
128
-
129
104
  const allRemoteReferences = getAllReferencedModules(
130
105
  compilation,
131
106
  containerEntryModule,
132
107
  "external",
133
108
  false
134
109
  );
135
-
136
110
  for (const remote of allRemoteReferences) {
137
111
  allReferencedModules.add(remote);
138
112
  }
113
+ this.hoistReferencedModules(
114
+ compilation,
115
+ containerEntryModule,
116
+ allReferencedModules
117
+ );
118
+ }
119
+ }
139
120
 
140
- const containerRuntimes =
141
- chunkGraph.getModuleRuntimes(containerEntryModule);
142
- /** @type {Set<string>} */
143
- const runtimes = new Set();
144
-
145
- for (const runtimeSpec of containerRuntimes) {
146
- forEachRuntime(runtimeSpec, (runtimeKey) => {
147
- if (runtimeKey) {
148
- runtimes.add(runtimeKey);
149
- }
150
- });
151
- }
121
+ /**
122
+ * Connect `referencedModules` into each runtime chunk of `entryModule`, then
123
+ * prune the chunks they were hoisted out of. The two passes above build
124
+ * `referencedModules` differently but hoist them identically.
125
+ * @param {Compilation} compilation The webpack compilation instance.
126
+ * @param {Module} entryModule The module whose runtimes receive the modules.
127
+ * @param {Set<Module>} referencedModules The modules to hoist.
128
+ */
129
+ hoistReferencedModules(compilation, entryModule, referencedModules) {
130
+ const { chunkGraph } = compilation;
131
+ /** @type {Set<string>} */
132
+ const runtimes = new Set();
133
+ for (const runtimeSpec of chunkGraph.getModuleRuntimes(entryModule)) {
134
+ forEachRuntime(runtimeSpec, (runtimeKey) => {
135
+ if (runtimeKey) {
136
+ runtimes.add(runtimeKey);
137
+ }
138
+ });
139
+ }
152
140
 
153
- for (const runtime of runtimes) {
154
- const runtimeChunk = compilation.namedChunks.get(runtime);
155
- if (!runtimeChunk) continue;
141
+ for (const runtime of runtimes) {
142
+ const runtimeChunk = compilation.namedChunks.get(runtime);
143
+ if (!runtimeChunk) continue;
156
144
 
157
- for (const module of allReferencedModules) {
158
- if (!chunkGraph.isModuleInChunk(module, runtimeChunk)) {
159
- chunkGraph.connectChunkAndModule(runtimeChunk, module);
160
- }
145
+ for (const module of referencedModules) {
146
+ if (!chunkGraph.isModuleInChunk(module, runtimeChunk)) {
147
+ chunkGraph.connectChunkAndModule(runtimeChunk, module);
161
148
  }
162
149
  }
163
- this.cleanUpChunks(compilation, allReferencedModules);
164
150
  }
151
+ this.cleanUpChunks(compilation, referencedModules);
165
152
  }
166
153
 
167
154
  /**
@@ -5,25 +5,20 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SyncHook } = require("tapable");
9
8
  const isValidExternalsType = require("../../schemas/plugins/container/ExternalsType.check");
10
9
  const SharePlugin = require("../sharing/SharePlugin");
11
- const createHooksRegistry = require("../util/createHooksRegistry");
12
10
  const ContainerPlugin = require("./ContainerPlugin");
13
11
  const ContainerReferencePlugin = require("./ContainerReferencePlugin");
14
12
  const HoistContainerReferences = require("./HoistContainerReferencesPlugin");
15
-
16
- /** @typedef {import("../../declarations/plugins/container/ModuleFederationPlugin").ExternalsType} ExternalsType */
17
- /** @typedef {import("../../declarations/plugins/container/ModuleFederationPlugin").ModuleFederationPluginOptions} ModuleFederationPluginOptions */
18
- /** @typedef {import("../Compiler")} Compiler */
19
- /** @typedef {import("../Dependency")} Dependency */
13
+ const getCompilationHooks = require("./moduleFederationHooks");
20
14
 
21
15
  /**
22
- * Defines the compilation hooks type used by this module.
23
- * @typedef {object} CompilationHooks
24
- * @property {SyncHook<Dependency>} addContainerEntryDependency
25
- * @property {SyncHook<Dependency>} addFederationRuntimeDependency
16
+ * @import {
17
+ * ExternalsType,
18
+ * ModuleFederationPluginOptions
19
+ * } from "../../declarations/plugins/container/ModuleFederationPlugin"
26
20
  */
21
+ /** @import Compiler from "../Compiler" */
27
22
 
28
23
  const PLUGIN_NAME = "ModuleFederationPlugin";
29
24
 
@@ -110,12 +105,6 @@ class ModuleFederationPlugin {
110
105
  }
111
106
  }
112
107
 
113
- ModuleFederationPlugin.getCompilationHooks = createHooksRegistry(
114
- () =>
115
- /** @type {CompilationHooks} */ ({
116
- addContainerEntryDependency: new SyncHook(["dependency"]),
117
- addFederationRuntimeDependency: new SyncHook(["dependency"])
118
- })
119
- );
108
+ ModuleFederationPlugin.getCompilationHooks = getCompilationHooks;
120
109
 
121
110
  module.exports = ModuleFederationPlugin;
@@ -17,27 +17,35 @@ const makeSerializable = require("../util/makeSerializable");
17
17
  const FallbackDependency = require("./FallbackDependency");
18
18
  const RemoteToExternalDependency = require("./RemoteToExternalDependency");
19
19
 
20
- /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
21
- /** @typedef {import("../Compilation")} Compilation */
22
- /** @typedef {import("../Module").BuildCallback} BuildCallback */
23
- /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
24
- /** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
25
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
26
- /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
27
- /** @typedef {import("../Module").LibIdent} LibIdent */
28
- /** @typedef {import("../Module").NameForCondition} NameForCondition */
29
- /** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
30
- /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
31
- /** @typedef {import("../Module").Sources} Sources */
32
- /** @typedef {import("../Module").SourceTypes} SourceTypes */
33
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
34
- /** @typedef {import("../Module").ExportsType} ExportsType */
35
- /** @typedef {import("../RequestShortener")} RequestShortener */
36
- /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
20
+ /**
21
+ * @import {
22
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
23
+ * } from "../config/defaults"
24
+ */
25
+ /** @import Compilation from "../Compilation" */
26
+ /**
27
+ * @import {
28
+ * BuildCallback,
29
+ * CodeGenerationContext,
30
+ * CodeGenerationResultData,
31
+ * CodeGenerationResult,
32
+ * LibIdentOptions,
33
+ * LibIdent,
34
+ * NameForCondition,
35
+ * NeedBuildCallback,
36
+ * NeedBuildContext,
37
+ * Sources,
38
+ * SourceTypes,
39
+ * ExportsType,
40
+ * BasicSourceTypes
41
+ * } from "../Module"
42
+ */
43
+ /** @import ModuleGraph from "../ModuleGraph" */
44
+ /** @import RequestShortener from "../RequestShortener" */
45
+ /** @import { ResolverWithOptions } from "../ResolverFactory" */
37
46
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, ExternalRequests, string, string]>} ObjectDeserializerContext */
38
47
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, ExternalRequests, string, string]>} ObjectSerializerContext */
39
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
40
- /** @typedef {import("../Module").BasicSourceTypes} BasicSourceTypes */
48
+ /** @import { InputFileSystem } from "../util/fs" */
41
49
 
42
50
  const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
43
51
 
@@ -8,13 +8,12 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
+ const { compareModulesByIdentifier } = require("../util/comparators");
11
12
 
12
- /** @typedef {import("../Chunk")} Chunk */
13
- /** @typedef {import("../Chunk").ChunkId} ChunkId */
14
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
- /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
16
- /** @typedef {import("../Compilation")} Compilation */
17
- /** @typedef {import("./RemoteModule")} RemoteModule */
13
+ /** @import Chunk, { ChunkId } from "../Chunk" */
14
+ /** @import ChunkGraph, { ModuleId } from "../ChunkGraph" */
15
+ /** @import Compilation from "../Compilation" */
16
+ /** @import RemoteModule from "./RemoteModule" */
18
17
 
19
18
  class RemoteRuntimeModule extends RuntimeModule {
20
19
  constructor() {
@@ -36,9 +35,12 @@ class RemoteRuntimeModule extends RuntimeModule {
36
35
  for (const chunk of /** @type {Chunk} */ (
37
36
  this.chunk
38
37
  ).getAllReferencedChunks()) {
39
- const modules = chunkGraph.getChunkModulesIterableBySourceType(
38
+ // ordered explicitly: an unordered read reflects whichever comparator
39
+ // last sorted the chunk's modules, which is not ours to depend on
40
+ const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
40
41
  chunk,
41
- "remote"
42
+ "remote",
43
+ compareModulesByIdentifier
42
44
  );
43
45
  if (!modules) continue;
44
46
  /** @type {ModuleId[]} */