@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
@@ -6,23 +6,60 @@
6
6
 
7
7
  const { RawSource } = require("webpack-sources");
8
8
  const ModuleFilenameHelpers = require("../ModuleFilenameHelpers");
9
+ const {
10
+ ASSET_URL_TYPE,
11
+ JAVASCRIPT_TYPE
12
+ } = require("../ModuleSourceTypeConstants");
9
13
  const RuntimeGlobals = require("../RuntimeGlobals");
10
14
  const CssUrlDependency = require("../dependencies/CssUrlDependency");
11
15
  const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
12
16
  const URLDependency = require("../dependencies/URLDependency");
13
- const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
14
- const StartupAssetHintRuntimeModule = require("./StartupAssetHintRuntimeModule");
17
+ const WorkerDependency = require("../dependencies/WorkerDependency");
18
+ const lazyModule = require("../util/lazyModule");
19
+ const memoize = require("../util/memoize");
20
+ const {
21
+ PUBLIC_PATH_AUTO,
22
+ PUBLIC_PATH_FULL_HASH
23
+ } = require("../util/publicPathPlaceholder");
24
+ const { guessAsAttribute } = require("./parseResourceHintOptions");
15
25
  const parseResourceHintOptions = require("./parseResourceHintOptions");
16
26
 
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 */
27
+ /** @import Chunk from "../Chunk" */
28
+ /** @import ChunkGraph from "../ChunkGraph" */
29
+ /** @import CodeGenerationResults from "../CodeGenerationResults" */
30
+ /** @import Compilation from "../Compilation" */
31
+ /** @import Compiler from "../Compiler" */
32
+ /** @import Module, { RuntimeRequirements } from "../Module" */
33
+
34
+ /**
35
+ * The attributes a `<link>` carries besides its href and `as`.
36
+ * @typedef {object} StartupHintAttributes
37
+ * @property {("low" | "high" | "auto" | undefined)=} fetchPriority
38
+ * @property {string=} type
39
+ * @property {string=} media
40
+ */
41
+
42
+ /**
43
+ * One asset a chunk hints at startup, merged across every reference to it.
44
+ * @typedef {object} AssetHintEntry
45
+ * @property {Module} assetModule the asset the `<link>` points at
46
+ * @property {Module} originModule the chunk module the reference was written in, which is what a baked href is relative to
47
+ * @property {string} request the original request, for guessing the `as` attribute
48
+ * @property {boolean} preload preload rather than prefetch
49
+ * @property {("low" | "high" | "auto" | undefined)} fetchPriority
50
+ * @property {(string | undefined)} as
51
+ * @property {(string | undefined)} type
52
+ * @property {(string | undefined)} media
53
+ */
54
+ /**
55
+ * @import {
56
+ * ResourceHintsInitial as ResourceHintsConfig,
57
+ * ResourceHintsOptions,
58
+ * UrlHintRule
59
+ * } from "../../declarations/WebpackOptions"
60
+ */
61
+ /** @import { HtmlResourceHint } from "../dependencies/HtmlEntryDependency" */
62
+ /** @import { ResourceHintOptions } from "./parseResourceHintOptions" */
26
63
 
27
64
  /**
28
65
  * @typedef {object} ResolvedResourceHints
@@ -90,6 +127,19 @@ const getPublicPathOrigin = (compilation) => {
90
127
  * @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
128
  */
92
129
 
130
+ // only a build that actually emits a resource hint needs these
131
+ const getResourceHintRuntimeModule = lazyModule(() =>
132
+ require("./ResourceHintRuntimeModule")
133
+ );
134
+ const getStartupAssetHintRuntimeModule = lazyModule(() =>
135
+ require("./StartupAssetHintRuntimeModule")
136
+ );
137
+ // only reached once a build has an html module, so a js-only build never
138
+ // pays for the html generator this drags in
139
+ const getHtmlEntryDependency = memoize(() =>
140
+ require("../dependencies/HtmlEntryDependency")
141
+ );
142
+
93
143
  const PLUGIN_NAME = "ResourceHintPlugin";
94
144
 
95
145
  /** @type {WeakMap<Compilation, CompilationResolver>} */
@@ -100,6 +150,57 @@ const compilationResolvers = new WeakMap();
100
150
  // magic comments still work — they route through `applyParsedHints`.
101
151
  const DEFAULT_ASSETS_EXCLUDE_REGEXP = /\.(?:webmanifest|pdf|txt)(?:\?.*)?$/i;
102
152
 
153
+ // Initial-graph auto hints target JS chunk output files only.
154
+ const JS_CHUNK_FILE_REGEXP = /\.m?jsx?$/i;
155
+
156
+ /**
157
+ * True for the URL-referenced-asset deps that can carry resource-hint flags.
158
+ * Type guard so callers keep the narrowed union without re-listing the classes.
159
+ * @param {import("../Dependency")} dep dependency
160
+ * @returns {dep is URLDependency | CssUrlDependency | HtmlSourceDependency} whether it is a URL asset dep
161
+ */
162
+ const isUrlAssetDep = (dep) =>
163
+ dep instanceof URLDependency ||
164
+ dep instanceof CssUrlDependency ||
165
+ dep instanceof HtmlSourceDependency;
166
+
167
+ /**
168
+ * Entry chunk name for a hint's `hostChunks` (Vite's `hostId`); the id is a
169
+ * stable fallback for unnamed chunks.
170
+ * @param {import("../Chunk")} chunk chunk
171
+ * @returns {string} name or stringified id
172
+ */
173
+ const chunkHostName = (chunk) => chunk.name || String(chunk.id);
174
+
175
+ /**
176
+ * Walk `chunks` × their modules × dependencies and yield each distinct
177
+ * URL-asset module carrying a prefetch/preload flag, deduping targets within a
178
+ * single call. One shared walk for the entrypoint-hint and HTML-hint passes,
179
+ * which would otherwise each re-implement the same 4-level nesting.
180
+ * @param {Compilation} compilation compilation
181
+ * @param {Iterable<import("../Chunk")>} chunks chunks to scan
182
+ * @returns {IterableIterator<{ dep: URLDependency | CssUrlDependency | HtmlSourceDependency, target: Module, chunk: import("../Chunk") }>} hinted assets
183
+ */
184
+ function* iterateHintedUrlAssets(compilation, chunks) {
185
+ const { chunkGraph, moduleGraph } = compilation;
186
+ /** @type {WeakSet<Module>} */
187
+ const seen = new WeakSet();
188
+ for (const chunk of chunks) {
189
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
190
+ const deps = module.dependencies;
191
+ if (!deps) continue;
192
+ for (const dep of deps) {
193
+ if (!isUrlAssetDep(dep)) continue;
194
+ if (!dep.prefetch && !dep.preload) continue;
195
+ const target = moduleGraph.getModule(dep);
196
+ if (!target || seen.has(target)) continue;
197
+ seen.add(target);
198
+ yield { dep, target, chunk };
199
+ }
200
+ }
201
+ }
202
+ }
203
+
103
204
  /**
104
205
  * Merge the matching `UrlHintRule`s for a request. Rules match by
105
206
  * `test`/`include`/`exclude` (omit all three → matches everything); later
@@ -238,13 +339,13 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
238
339
  for (const chunk of entrypoint.chunks) {
239
340
  if (chunk === entryChunk) continue;
240
341
  for (const file of chunk.files) {
241
- if (!/\.m?jsx?$/i.test(file)) continue;
342
+ if (!JS_CHUNK_FILE_REGEXP.test(file)) continue;
242
343
  const href = publicPath + file;
243
344
  /** @type {EntrypointHint} */
244
345
  const h = {
245
346
  rel,
246
347
  href,
247
- hostChunks: [chunk.name || String(chunk.id)]
348
+ hostChunks: [chunkHostName(chunk)]
248
349
  };
249
350
  if (rel === "preload") h.as = "script";
250
351
  push(h);
@@ -256,45 +357,28 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
256
357
  // runtime via `dynamicImportPrefetch/Preload` parser options).
257
358
  /** @type {Set<import("../Chunk")>} */
258
359
  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
- }
360
+ const runtimeChunk = entrypoint.getRuntimeChunk();
361
+ if (runtimeChunk) chunkSet.add(runtimeChunk);
362
+ for (const { dep, target, chunk } of iterateHintedUrlAssets(
363
+ compilation,
364
+ chunkSet
365
+ )) {
366
+ const buildInfo =
367
+ /** @type {{ filename?: string }} */
368
+ (target.buildInfo);
369
+ if (!buildInfo || !buildInfo.filename) continue;
370
+ const asAttribute = dep.asAttribute || guessAsAttribute(dep.request);
371
+ /** @type {EntrypointHint} */
372
+ const h = {
373
+ rel: dep.preload ? "preload" : "prefetch",
374
+ href: publicPath + buildInfo.filename,
375
+ hostChunks: [chunkHostName(chunk)]
376
+ };
377
+ if (asAttribute) h.as = asAttribute;
378
+ if (dep.typeAttribute) h.type = dep.typeAttribute;
379
+ if (dep.mediaAttribute) h.media = dep.mediaAttribute;
380
+ if (dep.fetchPriority) h.fetchPriority = dep.fetchPriority;
381
+ push(h);
298
382
  }
299
383
  // `hostType`: `"html"` iff the entrypoint has an extracted HTML page
300
384
  // (any `HtmlEntryDependency` with elementKind `script`/`script-module` on
@@ -302,14 +386,13 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
302
386
  // `stats.entrypoints[name].resourceHints` see `"js"`.
303
387
  let hostType = /** @type {"html" | "js"} */ ("js");
304
388
 
305
- const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
306
-
307
389
  outer: for (const module of compilation.modules) {
308
390
  if (!module.getSourceTypes || !module.getSourceTypes().has("html")) {
309
391
  continue;
310
392
  }
311
393
  const presDeps = module.presentationalDependencies;
312
394
  if (!presDeps) continue;
395
+ const HtmlEntryDependency = getHtmlEntryDependency();
313
396
  for (const dep of presDeps) {
314
397
  if (
315
398
  dep instanceof HtmlEntryDependency &&
@@ -331,6 +414,214 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
331
414
  );
332
415
  };
333
416
 
417
+ /**
418
+ * Renders the `<link>` calls a chunk fires at startup, for every asset and worker
419
+ * chunk it references with a resource hint. Run while runtime requirements are still
420
+ * open, so what an href reads is added to `set` rather than assumed: an href spelled
421
+ * as a literal leaves `.p` and `.u` out of the chunk entirely.
422
+ * @param {Chunk} chunk the chunk the calls are emitted into
423
+ * @param {Compilation} compilation the compilation
424
+ * @param {ChunkGraph} chunkGraph the chunk graph
425
+ * @param {CodeGenerationResults} codeGenerationResults the code generation results
426
+ * @param {RuntimeRequirements} set the chunk's runtime requirements
427
+ * @returns {string[]} one call per hinted asset, in emission order
428
+ */
429
+ const collectStartupAssetHintLines = (
430
+ chunk,
431
+ compilation,
432
+ chunkGraph,
433
+ codeGenerationResults,
434
+ set
435
+ ) => {
436
+ const { moduleGraph, runtimeTemplate } = compilation;
437
+ const resolver =
438
+ /** @type {CompilationResolver} */
439
+ (compilationResolvers.get(compilation));
440
+ /** @type {string[]} */
441
+ const lines = [];
442
+
443
+ /**
444
+ * @param {string} fn the `<link>` helper
445
+ * @param {string} href the href expression
446
+ * @param {string} as the `as` attribute
447
+ * @param {StartupHintAttributes} attributes the remaining attributes
448
+ * @returns {void}
449
+ */
450
+ const push = (fn, href, as, attributes) => {
451
+ set.add(fn);
452
+ lines.push(
453
+ `${fn}(${href}, ${JSON.stringify(as)}, ${
454
+ attributes.type ? JSON.stringify(attributes.type) : "undefined"
455
+ }, ${attributes.media ? JSON.stringify(attributes.media) : "undefined"}, ${
456
+ attributes.fetchPriority
457
+ ? JSON.stringify(attributes.fetchPriority)
458
+ : "undefined"
459
+ });`
460
+ );
461
+ };
462
+
463
+ // The analyzable worker form can't wrap its own href without losing the literal
464
+ // specifier, so its `<link>` fires here — keyed by chunk, hence a separate pass.
465
+ /** @type {Set<string | number>} */
466
+ const seenWorkerChunks = new Set();
467
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
468
+ for (const block of module.blocks) {
469
+ for (const dep of block.dependencies) {
470
+ if (!(dep instanceof WorkerDependency)) continue;
471
+ const hint = dep.options.resourceHint;
472
+ if (!hint || (!hint.preload && !hint.prefetch)) continue;
473
+ const group = chunkGraph.getBlockChunkGroup(block);
474
+ if (!group) continue;
475
+ const workerChunk =
476
+ /** @type {import("../Entrypoint")} */
477
+ (group).getEntrypointChunk();
478
+ if (workerChunk.id === null || seenWorkerChunks.has(workerChunk.id)) {
479
+ continue;
480
+ }
481
+ seenWorkerChunks.add(workerChunk.id);
482
+ // The same specifier the `new Worker(...)` call site bakes, asked of the
483
+ // same module, so the two agree on whether a literal is spellable.
484
+ const specifier = runtimeTemplate.supportsAnalyzable(
485
+ "url",
486
+ chunkGraph,
487
+ module
488
+ )
489
+ ? runtimeTemplate._getAnalyzableChunkSpecifier(
490
+ dep.options.publicPath,
491
+ workerChunk,
492
+ module,
493
+ chunkGraph,
494
+ set
495
+ )
496
+ : null;
497
+ // Without one the call site keeps the runtime form, where it wraps its own
498
+ // href — firing the `<link>` here too would emit the call twice.
499
+ if (specifier === null) continue;
500
+ push(
501
+ hint.preload
502
+ ? RuntimeGlobals.preloadAsset
503
+ : RuntimeGlobals.prefetchAsset,
504
+ `${runtimeTemplate.importMetaUrl(specifier)}.href`,
505
+ hint.as || "script",
506
+ hint
507
+ );
508
+ }
509
+ }
510
+ }
511
+
512
+ // Dedupe per asset module so two references can't emit two `<link>`s: `preload`
513
+ // wins over `prefetch`, and the last explicit attribute override sticks.
514
+ /** @type {Map<string, AssetHintEntry>} */
515
+ const perAsset = new Map();
516
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
517
+ const deps =
518
+ /** @type {{ dependencies?: import("../Dependency")[] }} */
519
+ (module).dependencies;
520
+ if (!deps) continue;
521
+ for (const dep of deps) {
522
+ if (!isUrlAssetDep(dep)) continue;
523
+ if (!dep.prefetch && !dep.preload) continue;
524
+ const assetModule = moduleGraph.getModule(dep);
525
+ if (!assetModule) continue;
526
+ // Already a `<link>` in the html `<head>` emitted by `HtmlEntryDependency`,
527
+ // so the runtime hint would leave the DOM with two tags for one url.
528
+ if (resolver.isHtmlHinted(assetModule)) continue;
529
+ const key = assetModule.identifier();
530
+ const urlDep =
531
+ /** @type {URLDependency & Partial<CssUrlDependency> & Partial<HtmlSourceDependency>} */
532
+ (dep);
533
+ const existing = perAsset.get(key);
534
+ if (existing) {
535
+ if (dep.preload) existing.preload = true;
536
+ if (dep.fetchPriority) existing.fetchPriority = dep.fetchPriority;
537
+ if (urlDep.asAttribute) existing.as = urlDep.asAttribute;
538
+ if (urlDep.typeAttribute) existing.type = urlDep.typeAttribute;
539
+ if (urlDep.mediaAttribute) existing.media = urlDep.mediaAttribute;
540
+ } else {
541
+ perAsset.set(key, {
542
+ assetModule: /** @type {Module} */ (assetModule),
543
+ originModule: module,
544
+ request: dep.request,
545
+ preload: Boolean(dep.preload),
546
+ fetchPriority: dep.fetchPriority,
547
+ as: urlDep.asAttribute,
548
+ type: urlDep.typeAttribute,
549
+ media: urlDep.mediaAttribute
550
+ });
551
+ }
552
+ }
553
+ }
554
+
555
+ for (const entry of perAsset.values()) {
556
+ const { assetModule } = entry;
557
+ let href;
558
+ // An asset with a javascript wrapper exposes its url through it; one without has
559
+ // no `__webpack_modules__` entry to require.
560
+ if (assetModule.getSourceTypes().has(JAVASCRIPT_TYPE)) {
561
+ href = runtimeTemplate.moduleRaw({
562
+ chunkGraph,
563
+ module: assetModule,
564
+ request: entry.request,
565
+ runtimeRequirements: set,
566
+ weak: false
567
+ });
568
+ } else {
569
+ const has = codeGenerationResults.has(assetModule, chunk.runtime);
570
+ const urlData = has
571
+ ? codeGenerationResults.getData(assetModule, chunk.runtime, "url")
572
+ : undefined;
573
+ const resolved = urlData && urlData[ASSET_URL_TYPE];
574
+ // A generator `publicPath` overrides `output.publicPath`, so prefer it; only the
575
+ // two placeholders below are still unresolved when this runs.
576
+ const templated =
577
+ typeof resolved === "string" &&
578
+ (resolved.includes(PUBLIC_PATH_AUTO) ||
579
+ resolved.includes(PUBLIC_PATH_FULL_HASH));
580
+ if (typeof resolved === "string" && !templated) {
581
+ href = JSON.stringify(resolved);
582
+ } else {
583
+ const filename = has
584
+ ? codeGenerationResults.getData(
585
+ assetModule,
586
+ chunk.runtime,
587
+ "filename"
588
+ )
589
+ : undefined;
590
+ if (typeof filename !== "string") continue;
591
+ // The literal the `new URL()` call site bakes, asked of the same module —
592
+ // but written into a runtime module, which no `eval` devtool wraps.
593
+ const specifier = runtimeTemplate.supportsAnalyzable(
594
+ "url-runtime",
595
+ chunkGraph,
596
+ entry.originModule
597
+ )
598
+ ? runtimeTemplate.getAnalyzableAssetUrl(
599
+ entry.originModule,
600
+ chunkGraph,
601
+ filename,
602
+ chunk.runtime
603
+ )
604
+ : null;
605
+ if (specifier !== null) {
606
+ href = `${runtimeTemplate.importMetaUrl(specifier)}.href`;
607
+ } else {
608
+ set.add(RuntimeGlobals.publicPath);
609
+ href = `${RuntimeGlobals.publicPath} + ${JSON.stringify(filename)}`;
610
+ }
611
+ }
612
+ }
613
+ push(
614
+ entry.preload
615
+ ? RuntimeGlobals.preloadAsset
616
+ : RuntimeGlobals.prefetchAsset,
617
+ href,
618
+ entry.as || guessAsAttribute(entry.request),
619
+ entry
620
+ );
621
+ }
622
+ return lines;
623
+ };
624
+
334
625
  /**
335
626
  * Adds runtime support for `__webpack_require__.PA` / `__webpack_require__.LA`,
336
627
  * the helpers that inject `<link rel="prefetch">` / `<link rel="preload">`
@@ -447,8 +738,6 @@ class ResourceHintPlugin {
447
738
  apply(compiler) {
448
739
  const hints = this._hints;
449
740
 
450
- const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
451
-
452
741
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
453
742
  // Lazy-computed on first access — walk every HTML module's
454
743
  // `HtmlEntryDependency`s, resolve each named entry, and collect
@@ -475,6 +764,7 @@ class ResourceHintPlugin {
475
764
  // they don't affect module resolution, only rendering.
476
765
  const presDeps = module.presentationalDependencies;
477
766
  if (!presDeps) continue;
767
+ const HtmlEntryDependency = getHtmlEntryDependency();
478
768
  for (const dep of presDeps) {
479
769
  if (
480
770
  !(dep instanceof HtmlEntryDependency) ||
@@ -493,33 +783,16 @@ class ResourceHintPlugin {
493
783
  const chunks = new Set(entrypoint.chunks);
494
784
  const entry = entrypoint.getEntrypointChunk();
495
785
  if (entry) chunks.add(entry);
496
- const rt = entrypoint.getRuntimeChunk();
497
- if (rt) chunks.add(rt);
786
+ const runtimeChunk = entrypoint.getRuntimeChunk();
787
+ if (runtimeChunk) chunks.add(runtimeChunk);
498
788
  /** @type {HtmlHintedAsset[]} */
499
789
  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
- }
790
+ for (const { dep: assetDep, target } of iterateHintedUrlAssets(
791
+ compilation,
792
+ chunks
793
+ )) {
794
+ anyHtmlHinted.add(target);
795
+ hinted.push({ module: target, dep: assetDep });
523
796
  }
524
797
  // Multiple HtmlEntryDeps may share an entryName (e.g. a
525
798
  // `<script>` and a `<link rel="modulepreload">` for the
@@ -554,61 +827,28 @@ class ResourceHintPlugin {
554
827
  getEntrypointHints: (entryName) =>
555
828
  collectEntrypointHints(compilation, entryName, hints)
556
829
  });
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).
830
+ // Rendered here, not in the runtime module: requirements are still open, so a
831
+ // literal href costs no `.p`/`.u`, and async chunks are reached as well.
562
832
  compilation.hooks.additionalChunkRuntimeRequirements.tap(
563
833
  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
- }
834
+ (chunk, set, { chunkGraph, codeGenerationResults }) => {
835
+ // Browser markup, and no DOM to put it in — the call sites skip their
836
+ // hints under build-time execution too (`URLDependency`).
837
+ if (hints === "none" || chunkGraph.buildTimeExecution) return;
838
+ const lines = collectStartupAssetHintLines(
839
+ chunk,
840
+ compilation,
841
+ chunkGraph,
842
+ codeGenerationResults,
843
+ set
844
+ );
845
+ if (lines.length === 0) return;
846
+ set.add(RuntimeGlobals.startupAssetHints);
847
+ compilation.addLazyRuntimeModule(
848
+ chunk,
849
+ getStartupAssetHintRuntimeModule,
850
+ (Ctor) => new Ctor(lines)
851
+ );
612
852
  }
613
853
  );
614
854
  for (const [rel, runtimeGlobal] of /** @type {const} */ ([
@@ -618,9 +858,10 @@ class ResourceHintPlugin {
618
858
  compilation.hooks.runtimeRequirementInTree
619
859
  .for(runtimeGlobal)
620
860
  .tap(PLUGIN_NAME, (chunk) => {
621
- compilation.addRuntimeModule(
861
+ compilation.addLazyRuntimeModule(
622
862
  chunk,
623
- new ResourceHintRuntimeModule(rel)
863
+ getResourceHintRuntimeModule,
864
+ (Ctor) => new Ctor(rel)
624
865
  );
625
866
  });
626
867
  }
@@ -9,6 +9,7 @@ const Compilation = require("../Compilation");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const RuntimeModule = require("../RuntimeModule");
11
11
  const Template = require("../Template");
12
+ const { guessAsAttribute } = require("./parseResourceHintOptions");
12
13
 
13
14
  /**
14
15
  * @typedef {object} ResourceHintRuntimeModulePluginHooks
@@ -19,27 +20,6 @@ const Template = require("../Template");
19
20
  /** @type {WeakMap<Compilation, ResourceHintRuntimeModulePluginHooks>} */
20
21
  const compilationHooksMap = new WeakMap();
21
22
 
22
- /**
23
- * Maps a request/filename to the value of the `<link>` `as` attribute. Best
24
- * effort — falls back to `"fetch"` when the type cannot be guessed. Pattern
25
- * matches against the path part, ignoring any query string suffix.
26
- * @param {string} request request/filename
27
- * @returns {string} value for the `as` attribute
28
- */
29
- const guessAsAttribute = (request) => {
30
- if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)(\?.*)?$/i.test(request)) {
31
- return "image";
32
- }
33
- if (/\.(woff2?|ttf|otf|eot)(\?.*)?$/i.test(request)) return "font";
34
- if (/\.css(\?.*)?$/i.test(request)) return "style";
35
- if (/\.[cm]?jsx?(\?.*)?$/i.test(request)) return "script";
36
- if (/\.[cm]?tsx?(\?.*)?$/i.test(request)) return "script";
37
- if (/\.(mp3|wav|flac|aac|m4a|ogg|oga)(\?.*)?$/i.test(request)) return "audio";
38
- if (/\.(mp4|webm|mkv|mov|m4v|ogv|avi)(\?.*)?$/i.test(request)) return "video";
39
- if (/\.vtt(\?.*)?$/i.test(request)) return "track";
40
- return "fetch";
41
- };
42
-
43
23
  class ResourceHintRuntimeModule extends RuntimeModule {
44
24
  /**
45
25
  * @param {Compilation} compilation the compilation