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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -0,0 +1,663 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const { RawSource } = require("webpack-sources");
8
+ const ModuleFilenameHelpers = require("../ModuleFilenameHelpers");
9
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
+ const CssUrlDependency = require("../dependencies/CssUrlDependency");
11
+ const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
12
+ const URLDependency = require("../dependencies/URLDependency");
13
+ const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
14
+ const StartupAssetHintRuntimeModule = require("./StartupAssetHintRuntimeModule");
15
+ const parseResourceHintOptions = require("./parseResourceHintOptions");
16
+
17
+ /** @typedef {import("../Compilation")} Compilation */
18
+ /** @typedef {import("../Compiler")} Compiler */
19
+ /** @typedef {import("../Module")} Module */
20
+ /** @typedef {import("../../declarations/WebpackOptions").ResourceHintsInitial} ResourceHintsConfig */
21
+ /** @typedef {import("../../declarations/WebpackOptions").ResourceHintsOptions} ResourceHintsOptions */
22
+ /** @typedef {import("../../declarations/WebpackOptions").UrlHintRule} UrlHintRule */
23
+ /** @typedef {import("../dependencies/HtmlEntryDependency").HtmlResourceHint} HtmlResourceHint */
24
+ /** @typedef {import("../dependencies/HtmlEntryDependency").HtmlResourceHintContext} HtmlResourceHintContext */
25
+ /** @typedef {import("./parseResourceHintOptions").ResourceHintOptions} ResourceHintOptions */
26
+
27
+ /**
28
+ * @typedef {object} ResolvedResourceHints
29
+ * @property {boolean=} prefetch project-wide default for `webpackPrefetch`
30
+ * @property {boolean=} preload project-wide default for `webpackPreload`
31
+ * @property {("low" | "high" | "auto" | false)=} fetchPriority project-wide default for `webpackFetchPriority`
32
+ * @property {string=} as project-wide default for `webpackAs`
33
+ * @property {string=} type project-wide default for `webpackType`
34
+ * @property {string=} media project-wide default for `webpackMedia`
35
+ */
36
+
37
+ /**
38
+ * A URL-referenced-asset dependency that can carry resource-hint state.
39
+ * `URLDependency`, `CssUrlDependency` and `HtmlSourceDependency` all share
40
+ * these field names — the `applyResourceHints` statics mutate them in place.
41
+ * @typedef {object} ResourceHintDep
42
+ * @property {true | undefined} prefetch
43
+ * @property {true | undefined} preload
44
+ * @property {("low" | "high" | "auto" | undefined)} fetchPriority
45
+ * @property {string | undefined} asAttribute
46
+ * @property {string | undefined} typeAttribute
47
+ * @property {string | undefined} mediaAttribute
48
+ */
49
+
50
+ /**
51
+ * A URL-referenced asset an HTML entry should emit as `<link>` in its `<head>`.
52
+ * @typedef {object} HtmlHintedAsset
53
+ * @property {Module} module the asset module (source-of-truth for the URL)
54
+ * @property {ResourceHintDep} dep the URL/CSS/HTML source dep carrying the hint flags
55
+ */
56
+
57
+ /**
58
+ * A resolved resource-hint descriptor emitted for an entrypoint — the shape
59
+ * consumed by `stats.entrypoints[name].resourceHints` and by SSR frameworks
60
+ * that render the initial HTML themselves.
61
+ * @typedef {object} EntrypointHint
62
+ * @property {"preload" | "prefetch" | "modulepreload" | "preconnect"} rel
63
+ * @property {string} href emitted URL (public path applied)
64
+ * @property {string=} as
65
+ * @property {string=} type
66
+ * @property {string=} media
67
+ * @property {("low" | "high" | "auto")=} fetchPriority
68
+ * @property {(boolean | "anonymous" | "use-credentials")=} crossorigin
69
+ * @property {string[]=} hostChunks names of the entrypoint chunks this hint originates from (Vite's `hostId`) — lets the callback rewrite per referencing chunk
70
+ */
71
+
72
+ /**
73
+ * Origin of `output.publicPath` when it's an absolute cross-origin URL, for
74
+ * `output.autoPreconnect`. `undefined` for relative / `"auto"` public paths.
75
+ * @param {Compilation} compilation compilation
76
+ * @returns {string | undefined} `scheme://host[:port]` or undefined
77
+ */
78
+ const getPublicPathOrigin = (compilation) => {
79
+ const publicPath = compilation.outputOptions.publicPath;
80
+ if (typeof publicPath !== "string") return undefined;
81
+ const match = /^(https?:)?\/\/[^/?#]+/i.exec(publicPath);
82
+ return match ? match[0] : undefined;
83
+ };
84
+
85
+ /**
86
+ * @typedef {object} CompilationResolver
87
+ * @property {ResourceHintsConfig | undefined} hints the effective `output.resourceHints` value (`undefined` when unset)
88
+ * @property {(entryName: string) => HtmlHintedAsset[]} getHtmlHinted URL asset descriptors reachable from an HTML entrypoint's initial chunks — `HtmlEntryDependency` template consumes this list to emit `<link>` tags into the extracted HTML `<head>`
89
+ * @property {(assetModule: Module) => boolean} isHtmlHinted true when `assetModule` appears in *any* HTML entry's hinted list — the JS chunk-startup runtime skips it so the DOM never carries two tags for one URL
90
+ * @property {(entryName: string) => EntrypointHint[]} getEntrypointHints resolved `<link>`-shaped descriptors for the given entry — auto initial-graph hints plus URL asset hints, then filtered / rewritten through the user function (when `output.resourceHints` is a function). Reads via `stats.entrypoints[name].resourceHints`.
91
+ */
92
+
93
+ const PLUGIN_NAME = "ResourceHintPlugin";
94
+
95
+ /** @type {WeakMap<Compilation, CompilationResolver>} */
96
+ const compilationResolvers = new WeakMap();
97
+
98
+ // Sane default-exclude for URL hint rules: manifests, PDFs, plain text are
99
+ // almost never wanted as `<link rel="preload/prefetch">` targets. Explicit
100
+ // magic comments still work — they route through `applyParsedHints`.
101
+ const DEFAULT_ASSETS_EXCLUDE_REGEXP = /\.(?:webmanifest|pdf|txt)(?:\?.*)?$/i;
102
+
103
+ /**
104
+ * Merge the matching `UrlHintRule`s for a request. Rules match by
105
+ * `test`/`include`/`exclude` (omit all three → matches everything); later
106
+ * matches override earlier ones for defined fields.
107
+ * @param {UrlHintRule[] | undefined} rules parser-scoped `urlHints`
108
+ * @param {string} request request URL
109
+ * @returns {ResolvedResourceHints} merged defaults
110
+ */
111
+ const matchUrlHints = (rules, request) => {
112
+ if (!rules || rules.length === 0) return {};
113
+ if (DEFAULT_ASSETS_EXCLUDE_REGEXP.test(request)) return {};
114
+ /** @type {ResolvedResourceHints} */
115
+ const merged = {};
116
+ for (const rule of rules) {
117
+ if (
118
+ (rule.test !== undefined ||
119
+ rule.include !== undefined ||
120
+ rule.exclude !== undefined) &&
121
+ !ModuleFilenameHelpers.matchObject(
122
+ /** @type {EXPECTED_ANY} */ ({
123
+ test: rule.test,
124
+ include: rule.include,
125
+ exclude: rule.exclude
126
+ }),
127
+ request
128
+ )
129
+ ) {
130
+ continue;
131
+ }
132
+ if (rule.prefetch !== undefined) merged.prefetch = rule.prefetch;
133
+ if (rule.preload !== undefined) merged.preload = rule.preload;
134
+ if (rule.fetchPriority !== undefined) {
135
+ merged.fetchPriority = rule.fetchPriority;
136
+ }
137
+ if (rule.as !== undefined) merged.as = rule.as;
138
+ if (rule.type !== undefined) merged.type = rule.type;
139
+ if (rule.media !== undefined) merged.media = rule.media;
140
+ }
141
+ return merged;
142
+ };
143
+
144
+ /**
145
+ * When `output.resourceHints` is a function, invoke it and return its
146
+ * descriptors; otherwise pass through. Callback signature — see `ResourceHints`
147
+ * schema entry.
148
+ * @param {import("../Entrypoint")} entrypoint entrypoint
149
+ * @param {ResourceHintsConfig | undefined} hints top-level config
150
+ * @param {string} entryName entry name
151
+ * @param {"html" | "js"} hostType page type
152
+ * @param {Compilation} compilation compilation
153
+ * @param {EntrypointHint[]} defaultHints computed default descriptors
154
+ * @returns {EntrypointHint[]} descriptors after the user hook (or the defaults untouched)
155
+ */
156
+ const applyUserHook = (
157
+ entrypoint,
158
+ hints,
159
+ entryName,
160
+ hostType,
161
+ compilation,
162
+ defaultHints
163
+ ) => {
164
+ if (typeof hints !== "function") return defaultHints;
165
+ const out = hints({
166
+ entryName,
167
+ entrypoint,
168
+ hostType,
169
+ compilation,
170
+ // `collectEntrypointHints` always sets `hostChunks`; the callback type
171
+ // declares it required, so assert it here.
172
+ defaultHints:
173
+ /** @type {(HtmlResourceHint & { hostChunks: string[] })[]} */ (
174
+ defaultHints
175
+ )
176
+ });
177
+ return Array.isArray(out) ? /** @type {EntrypointHint[]} */ (out) : [];
178
+ };
179
+
180
+ /**
181
+ * Collect the resolved `<link>`-shaped hint descriptors for an entrypoint —
182
+ * combining the auto initial-graph hints (from a truthy `output.resourceHints`)
183
+ * with the URL-referenced-asset hints (fonts, images, workers) carried on
184
+ * `URLDependency` / `CssUrlDependency` / `HtmlSourceDependency`. Backs
185
+ * `stats.entrypoints[name].resourceHints`. Works for any entrypoint, HTML or
186
+ * JS-only — SSR frameworks read this to inject `<link>` server-side without a
187
+ * separate manifest.
188
+ * @param {import("../Compilation")} compilation compilation
189
+ * @param {string} entryName entrypoint name
190
+ * @param {ResourceHintsConfig | undefined} hints `output.resourceHints`
191
+ * @returns {EntrypointHint[]} descriptors
192
+ */
193
+ const collectEntrypointHints = (compilation, entryName, hints) => {
194
+ // `"none"` is a hard off switch — no hints anywhere (stats / manifest / DOM).
195
+ if (hints === "none") return [];
196
+ const entrypoint = compilation.entrypoints.get(entryName);
197
+ if (!entrypoint) return [];
198
+ /** @type {EntrypointHint[]} */
199
+ const out = [];
200
+ /** @type {Set<string>} */
201
+ const seenKeys = new Set();
202
+ const push = (/** @type {EntrypointHint} */ h) => {
203
+ const key = `${h.rel}\0${h.href}`;
204
+ if (seenKeys.has(key)) return;
205
+ seenKeys.add(key);
206
+ out.push(h);
207
+ };
208
+ const publicPath =
209
+ typeof compilation.outputOptions.publicPath === "string" &&
210
+ compilation.outputOptions.publicPath !== "auto"
211
+ ? compilation.outputOptions.publicPath
212
+ : "";
213
+ // `resourceHints.preconnect`: warm the connection to a cross-origin
214
+ // publicPath (the origin every chunk / asset is fetched from), emitted first.
215
+ const outputResourceHints = compilation.outputOptions.resourceHints;
216
+ if (outputResourceHints && outputResourceHints.preconnect) {
217
+ const origin = getPublicPathOrigin(compilation);
218
+ if (origin) {
219
+ /** @type {EntrypointHint} */
220
+ const h = { rel: "preconnect", href: origin };
221
+ const crossOrigin = compilation.outputOptions.crossOriginLoading;
222
+ if (crossOrigin) h.crossorigin = crossOrigin;
223
+ push(h);
224
+ }
225
+ }
226
+ // Auto initial-graph hints — computed for `true`, `"prefetch"`, or a
227
+ // function (the callback receives them as `defaultHints`). The array
228
+ // form supplies its own list; nothing is auto-emitted here for it.
229
+ if (hints === true || hints === "prefetch" || typeof hints === "function") {
230
+ const isModuleOutput = compilation.outputOptions.module === true;
231
+ const prefetch = hints === "prefetch";
232
+ const rel = prefetch
233
+ ? "prefetch"
234
+ : isModuleOutput
235
+ ? "modulepreload"
236
+ : "preload";
237
+ const entryChunk = entrypoint.getEntrypointChunk();
238
+ for (const chunk of entrypoint.chunks) {
239
+ if (chunk === entryChunk) continue;
240
+ for (const file of chunk.files) {
241
+ if (!/\.m?jsx?$/i.test(file)) continue;
242
+ const href = publicPath + file;
243
+ /** @type {EntrypointHint} */
244
+ const h = {
245
+ rel,
246
+ href,
247
+ hostChunks: [chunk.name || String(chunk.id)]
248
+ };
249
+ if (rel === "preload") h.as = "script";
250
+ push(h);
251
+ }
252
+ }
253
+ }
254
+ // URL-referenced deps carrying prefetch/preload. Walk entrypoint's initial
255
+ // chunks × modules × deps (async chunks are handled by the on-demand
256
+ // runtime via `dynamicImportPrefetch/Preload` parser options).
257
+ /** @type {Set<import("../Chunk")>} */
258
+ const chunkSet = new Set(entrypoint.chunks);
259
+ const rt = entrypoint.getRuntimeChunk();
260
+ if (rt) chunkSet.add(rt);
261
+ /** @type {WeakSet<Module>} */
262
+ const seenAssets = new WeakSet();
263
+ for (const chunk of chunkSet) {
264
+ for (const m of compilation.chunkGraph.getChunkModulesIterable(chunk)) {
265
+ if (!m.dependencies) continue;
266
+ for (const d of m.dependencies) {
267
+ if (
268
+ !(d instanceof URLDependency) &&
269
+ !(d instanceof CssUrlDependency) &&
270
+ !(d instanceof HtmlSourceDependency)
271
+ ) {
272
+ continue;
273
+ }
274
+ if (!d.prefetch && !d.preload) continue;
275
+ const t = compilation.moduleGraph.getModule(d);
276
+ if (!t || seenAssets.has(t)) continue;
277
+ seenAssets.add(t);
278
+ const buildInfo =
279
+ /** @type {{ filename?: string }} */
280
+ (t.buildInfo);
281
+ if (!buildInfo || !buildInfo.filename) continue;
282
+ const asAttr =
283
+ d.asAttribute ||
284
+ ResourceHintRuntimeModule.guessAsAttribute(d.request);
285
+ /** @type {EntrypointHint} */
286
+ const h = {
287
+ rel: d.preload ? "preload" : "prefetch",
288
+ href: publicPath + buildInfo.filename,
289
+ hostChunks: [chunk.name || String(chunk.id)]
290
+ };
291
+ if (asAttr) h.as = asAttr;
292
+ if (d.typeAttribute) h.type = d.typeAttribute;
293
+ if (d.mediaAttribute) h.media = d.mediaAttribute;
294
+ if (d.fetchPriority) h.fetchPriority = d.fetchPriority;
295
+ push(h);
296
+ }
297
+ }
298
+ }
299
+ // `hostType`: `"html"` iff the entrypoint has an extracted HTML page
300
+ // (any `HtmlEntryDependency` with elementKind `script`/`script-module` on
301
+ // any HTML module points at this entryName); SSR frameworks reading
302
+ // `stats.entrypoints[name].resourceHints` see `"js"`.
303
+ let hostType = /** @type {"html" | "js"} */ ("js");
304
+
305
+ const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
306
+
307
+ outer: for (const module of compilation.modules) {
308
+ if (!module.getSourceTypes || !module.getSourceTypes().has("html")) {
309
+ continue;
310
+ }
311
+ const presDeps = module.presentationalDependencies;
312
+ if (!presDeps) continue;
313
+ for (const dep of presDeps) {
314
+ if (
315
+ dep instanceof HtmlEntryDependency &&
316
+ dep.entryName === entryName &&
317
+ (dep.elementKind === "script" || dep.elementKind === "script-module")
318
+ ) {
319
+ hostType = "html";
320
+ break outer;
321
+ }
322
+ }
323
+ }
324
+ return applyUserHook(
325
+ entrypoint,
326
+ hints,
327
+ entryName,
328
+ hostType,
329
+ compilation,
330
+ out
331
+ );
332
+ };
333
+
334
+ /**
335
+ * Adds runtime support for `__webpack_require__.PA` / `__webpack_require__.LA`,
336
+ * the helpers that inject `<link rel="prefetch">` / `<link rel="preload">`
337
+ * tags for asset modules referenced via `new URL(..., import.meta.url)`, CSS
338
+ * `url(...)`, and HTML `<img src>` / `<link href>`. Also stores the top-level
339
+ * `output.resourceHints` value so `HtmlEntryDependency` can emit its `<link>`
340
+ * tags into the extracted HTML `<head>`.
341
+ */
342
+ class ResourceHintPlugin {
343
+ /**
344
+ * @param {ResourceHintsOptions=} options normalized `output.resourceHints`
345
+ */
346
+ constructor(options) {
347
+ /** @type {ResourceHintsConfig | undefined} */
348
+ this._hints = options ? options.initial : undefined;
349
+ }
350
+
351
+ /**
352
+ * Returns the per-compilation resolver. `.hints` is the effective
353
+ * `output.resourceHints` value (used by `HtmlEntryDependency` template);
354
+ * `.isHtmlHinted(assetModule)` skips the JS chunk-startup `<link>` when the
355
+ * HTML `<head>` already emits it.
356
+ * @param {Compilation} compilation compilation
357
+ * @returns {CompilationResolver} resolver
358
+ */
359
+ static getCompilationResolver(compilation) {
360
+ const entry = compilationResolvers.get(compilation);
361
+ if (entry) return entry;
362
+ return {
363
+ hints: undefined,
364
+ getHtmlHinted: () => [],
365
+ isHtmlHinted: () => false,
366
+ getEntrypointHints: () => []
367
+ };
368
+ }
369
+
370
+ /**
371
+ * Match `parser.<type>.urlHints` rules for a request. Returns the merged
372
+ * defaults; the caller passes them to `applyDefaults`. Exposed so parsers
373
+ * that own their own URL dep creation (JS/CSS/HTML) can share one matcher.
374
+ * @param {UrlHintRule[] | undefined} rules rules array
375
+ * @param {string} request request URL
376
+ * @returns {ResolvedResourceHints} matched defaults
377
+ */
378
+ static matchUrlHints(rules, request) {
379
+ return matchUrlHints(rules, request);
380
+ }
381
+
382
+ /**
383
+ * Apply `urlHints` rule defaults to a URL asset dep. Used from URL-emitting
384
+ * parsers when they have per-request defaults but no comment options to
385
+ * parse (e.g. the HTML parser's `pendingHints` flow, where the comment was
386
+ * parsed earlier).
387
+ * @param {ResourceHintDep} dep dep to mutate
388
+ * @param {ResolvedResourceHints} defaults `matchUrlHints(rules, request)` result
389
+ * @returns {void}
390
+ */
391
+ static applyDefaults(dep, defaults) {
392
+ if (defaults.prefetch) dep.prefetch = true;
393
+ if (defaults.preload) dep.preload = true;
394
+ if (defaults.fetchPriority) dep.fetchPriority = defaults.fetchPriority;
395
+ if (defaults.as !== undefined) dep.asAttribute = defaults.as;
396
+ if (defaults.type !== undefined) dep.typeAttribute = defaults.type;
397
+ if (defaults.media !== undefined) dep.mediaAttribute = defaults.media;
398
+ }
399
+
400
+ /**
401
+ * Apply already-parsed `webpackPrefetch` / `webpackPreload` /
402
+ * `webpackFetchPriority` / `webpackAs` / `webpackType` / `webpackMedia`
403
+ * overrides to a URL asset dep. Each field wins over the project-wide
404
+ * default only when it's explicitly set on the magic comment.
405
+ * @param {ResourceHintDep} dep dep to mutate
406
+ * @param {ResourceHintOptions} hints parsed hint options
407
+ * @returns {void}
408
+ */
409
+ static applyParsedHints(dep, hints) {
410
+ if (hints.prefetch !== undefined) dep.prefetch = hints.prefetch;
411
+ if (hints.preload !== undefined) dep.preload = hints.preload;
412
+ if (hints.fetchPriority !== undefined) {
413
+ dep.fetchPriority = hints.fetchPriority;
414
+ }
415
+ if (hints.as !== undefined) dep.asAttribute = hints.as;
416
+ if (hints.type !== undefined) dep.typeAttribute = hints.type;
417
+ if (hints.media !== undefined) dep.mediaAttribute = hints.media;
418
+ }
419
+
420
+ /**
421
+ * Match `urlHints` for `request` + apply per-URL magic-comment overrides
422
+ * to a URL asset dep. Called from every URL-emitting parser (JS
423
+ * `new URL(...)`, CSS `url(...)`, HTML `<img src>` / `<link href>`,
424
+ * `new Worker(new URL(...))`) so all sources share the same precedence:
425
+ * rule defaults first, magic comments win.
426
+ * @param {ResourceHintDep} dep dep to mutate in place
427
+ * @param {UrlHintRule[] | undefined} rules parser-scoped `urlHints` rules
428
+ * @param {string} request the asset request (for rule matching)
429
+ * @param {Record<string, EXPECTED_ANY> | null | undefined} commentOptions parsed magic-comment options (`null` / `undefined` skips override phase)
430
+ * @param {import("../NormalModule")} module module for emitting warnings on invalid comments
431
+ * @param {import("../Dependency").DependencyLocation} loc loc for warnings
432
+ * @returns {void}
433
+ */
434
+ static applyResourceHints(dep, rules, request, commentOptions, module, loc) {
435
+ ResourceHintPlugin.applyDefaults(dep, matchUrlHints(rules, request));
436
+ if (!commentOptions) return;
437
+ ResourceHintPlugin.applyParsedHints(
438
+ dep,
439
+ parseResourceHintOptions(commentOptions, module, loc)
440
+ );
441
+ }
442
+
443
+ /**
444
+ * @param {Compiler} compiler the compiler
445
+ * @returns {void}
446
+ */
447
+ apply(compiler) {
448
+ const hints = this._hints;
449
+
450
+ const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
451
+
452
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
453
+ // Lazy-computed on first access — walk every HTML module's
454
+ // `HtmlEntryDependency`s, resolve each named entry, and collect
455
+ // every URL asset dep target reachable from its ordered chunks.
456
+ // One pass produces two views: a per-entry list (consumed by
457
+ // `HtmlEntryDependency.Template` to emit `<link>` tags) and a
458
+ // global `WeakSet` (consumed by `StartupAssetHintRuntimeModule`
459
+ // to skip the JS runtime `<link>` for the same asset).
460
+ // Deterministic (module graph is fixed by seal time) and cheap
461
+ // (only fires when a JS chunk actually produces hints).
462
+ /** @type {Map<string, HtmlHintedAsset[]> | undefined} */
463
+ let perEntry;
464
+ /** @type {WeakSet<Module> | undefined} */
465
+ let anyHtmlHinted;
466
+ const build = () => {
467
+ perEntry = new Map();
468
+ anyHtmlHinted = new WeakSet();
469
+ for (const module of compilation.modules) {
470
+ if (!module.getSourceTypes || !module.getSourceTypes().has("html")) {
471
+ continue;
472
+ }
473
+ // HtmlEntry deps live on `presentationalDependencies` (added
474
+ // by the HTML parser via `addPresentationalDependency`) —
475
+ // they don't affect module resolution, only rendering.
476
+ const presDeps = module.presentationalDependencies;
477
+ if (!presDeps) continue;
478
+ for (const dep of presDeps) {
479
+ if (
480
+ !(dep instanceof HtmlEntryDependency) ||
481
+ (dep.elementKind !== "script" &&
482
+ dep.elementKind !== "script-module")
483
+ ) {
484
+ continue;
485
+ }
486
+ const entrypoint = compilation.entrypoints.get(dep.entryName);
487
+ if (!entrypoint) continue;
488
+ // Mirror `getEntrypointChunksInLoadOrder`: entry chunk +
489
+ // runtime chunk + all initial siblings (`entrypoint.chunks`
490
+ // includes splitChunks output). Async `import()` chunks
491
+ // stay on the on-demand runtime and are NOT HTML-hinted.
492
+ /** @type {Set<import("../Chunk")>} */
493
+ const chunks = new Set(entrypoint.chunks);
494
+ const entry = entrypoint.getEntrypointChunk();
495
+ if (entry) chunks.add(entry);
496
+ const rt = entrypoint.getRuntimeChunk();
497
+ if (rt) chunks.add(rt);
498
+ /** @type {HtmlHintedAsset[]} */
499
+ const hinted = [];
500
+ /** @type {WeakSet<Module>} */
501
+ const seen = new WeakSet();
502
+ for (const c of chunks) {
503
+ for (const m of compilation.chunkGraph.getChunkModulesIterable(
504
+ c
505
+ )) {
506
+ if (!m.dependencies) continue;
507
+ for (const d of m.dependencies) {
508
+ if (
509
+ !(d instanceof URLDependency) &&
510
+ !(d instanceof CssUrlDependency) &&
511
+ !(d instanceof HtmlSourceDependency)
512
+ ) {
513
+ continue;
514
+ }
515
+ if (!d.prefetch && !d.preload) continue;
516
+ const t = compilation.moduleGraph.getModule(d);
517
+ if (!t || seen.has(t)) continue;
518
+ seen.add(t);
519
+ anyHtmlHinted.add(t);
520
+ hinted.push({ module: t, dep: d });
521
+ }
522
+ }
523
+ }
524
+ // Multiple HtmlEntryDeps may share an entryName (e.g. a
525
+ // `<script>` and a `<link rel="modulepreload">` for the
526
+ // same chunk). Merge lists so no asset is duplicated.
527
+ const existing = perEntry.get(dep.entryName);
528
+ if (existing) {
529
+ for (const h of hinted) existing.push(h);
530
+ } else {
531
+ perEntry.set(dep.entryName, hinted);
532
+ }
533
+ }
534
+ }
535
+ };
536
+ compilationResolvers.set(compilation, {
537
+ hints,
538
+ getHtmlHinted: (entryName) => {
539
+ if (hints === "none") return [];
540
+ if (!perEntry) build();
541
+ return (
542
+ /** @type {Map<string, HtmlHintedAsset[]>} */ (perEntry).get(
543
+ entryName
544
+ ) || []
545
+ );
546
+ },
547
+ isHtmlHinted: (assetModule) => {
548
+ if (hints === "none") return false;
549
+ if (!anyHtmlHinted) build();
550
+ return /** @type {WeakSet<Module>} */ (anyHtmlHinted).has(
551
+ assetModule
552
+ );
553
+ },
554
+ getEntrypointHints: (entryName) =>
555
+ collectEntrypointHints(compilation, entryName, hints)
556
+ });
557
+ // CSS `url(...)` and HTML `<img src>` / `<link href>` deps store
558
+ // hint flags but their dep templates don't run for the JS
559
+ // output, so we need to lift those flags into the JS chunk's
560
+ // runtime requirements ourselves. Iterate only css/html modules
561
+ // (pure-JS chunks skip the walk entirely).
562
+ compilation.hooks.additionalChunkRuntimeRequirements.tap(
563
+ PLUGIN_NAME,
564
+ (chunk, set, { chunkGraph }) => {
565
+ if (hints === "none") return;
566
+ let hasPrefetch = false;
567
+ let hasPreload = false;
568
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
569
+ const deps =
570
+ /** @type {{ dependencies?: import("../Dependency")[] }} */
571
+ (module).dependencies;
572
+ if (!deps) continue;
573
+ for (const dep of deps) {
574
+ if (
575
+ !(dep instanceof CssUrlDependency) &&
576
+ !(dep instanceof HtmlSourceDependency)
577
+ ) {
578
+ continue;
579
+ }
580
+ if (dep.prefetch) hasPrefetch = true;
581
+ if (dep.preload) hasPreload = true;
582
+ if (hasPrefetch && hasPreload) break;
583
+ }
584
+ if (hasPrefetch && hasPreload) break;
585
+ }
586
+ // Attach the startup-hint runtime module to *this* chunk
587
+ // (covering async chunks too) — `runtimeRequirementInTree`
588
+ // alone would only attach it to the runtime chunk, so a
589
+ // hinted `new URL(...)` in an async chunk would never
590
+ // fire its `<link>` injection. We add it whenever this
591
+ // chunk already pulls in `startupAssetHints` (via JS
592
+ // `URLDependency` template) or whenever CSS / HTML lifts
593
+ // it in here.
594
+ if (
595
+ hasPrefetch ||
596
+ hasPreload ||
597
+ set.has(RuntimeGlobals.startupAssetHints)
598
+ ) {
599
+ set.add(RuntimeGlobals.startupAssetHints);
600
+ // CSS-only asset modules aren't in JS `__webpack_modules__`,
601
+ // so the startup-hint runtime falls back to
602
+ // `__webpack_require__.p + "filename"`. Make sure
603
+ // `publicPath` is in this chunk's runtime.
604
+ set.add(RuntimeGlobals.publicPath);
605
+ if (hasPrefetch) set.add(RuntimeGlobals.prefetchAsset);
606
+ if (hasPreload) set.add(RuntimeGlobals.preloadAsset);
607
+ compilation.addRuntimeModule(
608
+ chunk,
609
+ new StartupAssetHintRuntimeModule()
610
+ );
611
+ }
612
+ }
613
+ );
614
+ for (const [rel, runtimeGlobal] of /** @type {const} */ ([
615
+ ["prefetch", RuntimeGlobals.prefetchAsset],
616
+ ["preload", RuntimeGlobals.preloadAsset]
617
+ ])) {
618
+ compilation.hooks.runtimeRequirementInTree
619
+ .for(runtimeGlobal)
620
+ .tap(PLUGIN_NAME, (chunk) => {
621
+ compilation.addRuntimeModule(
622
+ chunk,
623
+ new ResourceHintRuntimeModule(rel)
624
+ );
625
+ });
626
+ }
627
+
628
+ // SSR manifest: serialize each entrypoint's resolved hints to a JSON
629
+ // asset (the same descriptors as `stats.entrypoints[].resourceHints`)
630
+ // so an SSR server can inject the `<link>` tags itself. `"none"`
631
+ // yields empty lists (via `collectEntrypointHints`).
632
+ const rhOptions = compilation.outputOptions.resourceHints;
633
+ const manifestPath = rhOptions && rhOptions.manifest;
634
+ if (manifestPath) {
635
+ const Compilation = require("../Compilation");
636
+
637
+ compilation.hooks.processAssets.tap(
638
+ {
639
+ name: PLUGIN_NAME,
640
+ stage: Compilation.PROCESS_ASSETS_STAGE_REPORT
641
+ },
642
+ () => {
643
+ /** @type {Record<string, EntrypointHint[]>} */
644
+ const manifest = {};
645
+ for (const name of compilation.entrypoints.keys()) {
646
+ manifest[name] = collectEntrypointHints(compilation, name, hints);
647
+ }
648
+ const source = new RawSource(
649
+ `${JSON.stringify(manifest, null, 2)}\n`
650
+ );
651
+ if (compilation.getAsset(manifestPath)) {
652
+ compilation.updateAsset(manifestPath, source);
653
+ } else {
654
+ compilation.emitAsset(manifestPath, source);
655
+ }
656
+ }
657
+ );
658
+ }
659
+ });
660
+ }
661
+ }
662
+
663
+ module.exports = ResourceHintPlugin;