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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -7,16 +7,8 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
- const CssUrlDependency = require("../dependencies/CssUrlDependency");
11
- const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
12
- const URLDependency = require("../dependencies/URLDependency");
13
- const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
14
10
 
15
- /** @typedef {import("../Chunk")} Chunk */
16
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
17
- /** @typedef {import("../Compilation")} Compilation */
18
- /** @typedef {import("../Module")} Module */
19
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
11
+ /** @import Compilation from "../Compilation" */
20
12
 
21
13
  /**
22
14
  * Fires `<link rel="prefetch">` / `<link rel="preload">` for every asset
@@ -25,10 +17,17 @@ const ResourceHintRuntimeModule = require("./ResourceHintRuntimeModule");
25
17
  * user module evaluates, so by the time user code reaches the
26
18
  * corresponding `new URL(...)` (or hands the URL to `<img>`, `fetch`,
27
19
  * `new Worker`, etc.), the browser already has the response in flight.
20
+ *
21
+ * The calls themselves are rendered by `ResourceHintPlugin`, while runtime
22
+ * requirements are still open — see `collectStartupAssetHintLines`.
28
23
  */
29
24
  class StartupAssetHintRuntimeModule extends RuntimeModule {
30
- constructor() {
25
+ /**
26
+ * @param {string[]} lines the `<link>` calls this chunk fires at startup
27
+ */
28
+ constructor(lines) {
31
29
  super("startup asset hints", RuntimeModule.STAGE_TRIGGER);
30
+ this._lines = lines;
32
31
  }
33
32
 
34
33
  /**
@@ -37,129 +36,7 @@ class StartupAssetHintRuntimeModule extends RuntimeModule {
37
36
  */
38
37
  generate() {
39
38
  const compilation = /** @type {Compilation} */ (this.compilation);
40
- const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
41
- const moduleGraph = /** @type {ModuleGraph} */ (compilation.moduleGraph);
42
- const runtimeTemplate = compilation.runtimeTemplate;
43
- const chunk = /** @type {Chunk} */ (this.chunk);
44
- const runtimeRequirements =
45
- /** @type {Set<string>} */
46
- (chunkGraph.getTreeRuntimeRequirements(chunk));
47
-
48
- // Dedupe per asset module: if the same asset is referenced twice
49
- // (e.g. CSS rule says `prefetch`, a JS magic comment says
50
- // `preload`), pick `preload` over `prefetch` and keep the most
51
- // recently seen explicit attribute overrides. Avoids emitting a
52
- // duplicate `<link>` and ordering-dependent winners.
53
- /**
54
- * @typedef {object} AssetHintEntry
55
- * @property {import("../Module")} assetModule
56
- * @property {string} request
57
- * @property {boolean} preload
58
- * @property {("low" | "high" | "auto" | undefined)} fetchPriority
59
- * @property {(string | undefined)} as
60
- * @property {(string | undefined)} type
61
- * @property {(string | undefined)} media
62
- */
63
- // Per-asset dedupe vs the HTML-head emission by `HtmlEntryDependency`:
64
- // if the asset is reachable from an HTML entrypoint's chunks, its
65
- // `<link>` lands in that HTML `<head>` already — skip the runtime
66
- // hint for that asset so the DOM doesn't carry two tags for one URL.
67
- // Set is computed once per compilation from the module graph (stable
68
- // across cache reads), never from a mutable cross-module marker.
69
- const ResourceHintPlugin = require("./ResourceHintPlugin");
70
-
71
- // `output.resourceHints: "none"` is a hard off switch — the plugin's
72
- // runtime-requirements hook already skips adding this module then, so no
73
- // `"none"` guard is needed here.
74
- const { isHtmlHinted } =
75
- ResourceHintPlugin.getCompilationResolver(compilation);
76
-
77
- /** @type {Map<string, AssetHintEntry>} */
78
- const perAsset = new Map();
79
- for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
80
- const deps =
81
- /** @type {{ dependencies?: import("../Dependency")[] }} */
82
- (module).dependencies;
83
- if (!deps) continue;
84
- for (const dep of deps) {
85
- if (
86
- !(dep instanceof URLDependency) &&
87
- !(dep instanceof CssUrlDependency) &&
88
- !(dep instanceof HtmlSourceDependency)
89
- ) {
90
- continue;
91
- }
92
- if (!dep.prefetch && !dep.preload) continue;
93
- const assetModule = moduleGraph.getModule(dep);
94
- if (!assetModule) continue;
95
- if (isHtmlHinted(assetModule)) continue;
96
- const key = assetModule.identifier();
97
- const urlDep =
98
- /** @type {URLDependency & Partial<CssUrlDependency> & Partial<HtmlSourceDependency>} */
99
- (dep);
100
- const existing = perAsset.get(key);
101
- if (existing) {
102
- if (dep.preload) existing.preload = true;
103
- if (dep.fetchPriority) existing.fetchPriority = dep.fetchPriority;
104
- if (urlDep.asAttribute) existing.as = urlDep.asAttribute;
105
- if (urlDep.typeAttribute) existing.type = urlDep.typeAttribute;
106
- if (urlDep.mediaAttribute) existing.media = urlDep.mediaAttribute;
107
- } else {
108
- perAsset.set(key, {
109
- assetModule: /** @type {Module} */ (assetModule),
110
- request: dep.request,
111
- preload: Boolean(dep.preload),
112
- fetchPriority: dep.fetchPriority,
113
- as: urlDep.asAttribute,
114
- type: urlDep.typeAttribute,
115
- media: urlDep.mediaAttribute
116
- });
117
- }
118
- }
119
- }
120
- const lines = [];
121
- for (const entry of perAsset.values()) {
122
- const fn = entry.preload
123
- ? RuntimeGlobals.preloadAsset
124
- : RuntimeGlobals.prefetchAsset;
125
- // For CSS-only assets (referenced from `url(...)` but never
126
- // from JS) the module produces no JS source, so
127
- // `__webpack_require__(id)` would throw at runtime. Use the
128
- // emitted filename + publicPath directly in that case; asset
129
- // modules referenced from JS stay on the existing `moduleRaw`
130
- // path which yields the same URL.
131
- const hasJsSourceType = entry.assetModule
132
- .getSourceTypes()
133
- .has("javascript");
134
- let hrefExpr;
135
- if (hasJsSourceType) {
136
- hrefExpr = runtimeTemplate.moduleRaw({
137
- chunkGraph,
138
- module: entry.assetModule,
139
- request: entry.request,
140
- runtimeRequirements,
141
- weak: false
142
- });
143
- } else {
144
- const buildInfo =
145
- /** @type {{ filename?: string }} */
146
- (entry.assetModule.buildInfo);
147
- if (!buildInfo || !buildInfo.filename) continue;
148
- runtimeRequirements.add(RuntimeGlobals.publicPath);
149
- hrefExpr = `${RuntimeGlobals.publicPath} + ${JSON.stringify(buildInfo.filename)}`;
150
- }
151
- const as =
152
- entry.as || ResourceHintRuntimeModule.guessAsAttribute(entry.request);
153
- lines.push(
154
- `${fn}(${hrefExpr}, ${JSON.stringify(as)}, ${
155
- entry.type ? JSON.stringify(entry.type) : "undefined"
156
- }, ${entry.media ? JSON.stringify(entry.media) : "undefined"}, ${
157
- entry.fetchPriority
158
- ? JSON.stringify(entry.fetchPriority)
159
- : "undefined"
160
- });`
161
- );
162
- }
39
+ const lines = this._lines;
163
40
  if (lines.length === 0) return null;
164
41
  // `__webpack_nonce__` set inside the entry module is too late — the
165
42
  // entry hasn't run yet. Read the nonce off the `<script>` tag that
@@ -4,10 +4,14 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const UnsupportedFeatureWarning = require("../errors/UnsupportedFeatureWarning");
7
+ const memoize = require("../util/memoize");
8
8
 
9
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
10
- /** @typedef {import("../NormalModule")} NormalModule */
9
+ const getUnsupportedFeatureWarning = memoize(() =>
10
+ require("../errors/UnsupportedFeatureWarning")
11
+ );
12
+
13
+ /** @import { DependencyLocation } from "../Dependency" */
14
+ /** @import NormalModule from "../NormalModule" */
11
15
 
12
16
  /**
13
17
  * @typedef {object} ResourceHintOptions
@@ -38,7 +42,7 @@ const parseResourceHintOptions = (importOptions, module, loc) => {
38
42
  * @returns {void}
39
43
  */
40
44
  const warn = (message) => {
41
- module.addWarning(new UnsupportedFeatureWarning(message, loc));
45
+ module.addWarning(new (getUnsupportedFeatureWarning())(message, loc));
42
46
  };
43
47
 
44
48
  if (importOptions.webpackPrefetch !== undefined) {
@@ -100,4 +104,27 @@ const parseResourceHintOptions = (importOptions, module, loc) => {
100
104
  return hints;
101
105
  };
102
106
 
107
+ /**
108
+ * Maps a request/filename to the value of the `<link>` `as` attribute. Best
109
+ * effort — falls back to `"fetch"` when the type cannot be guessed. Pattern
110
+ * matches against the path part, ignoring any query string suffix.
111
+ * @param {string} request request/filename
112
+ * @returns {string} value for the `as` attribute
113
+ */
114
+ const guessAsAttribute = (request) => {
115
+ if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)(\?.*)?$/i.test(request)) {
116
+ return "image";
117
+ }
118
+ if (/\.(woff2?|ttf|otf|eot)(\?.*)?$/i.test(request)) return "font";
119
+ if (/\.css(\?.*)?$/i.test(request)) return "style";
120
+ if (/\.[cm]?jsx?(\?.*)?$/i.test(request)) return "script";
121
+ if (/\.[cm]?tsx?(\?.*)?$/i.test(request)) return "script";
122
+ if (/\.(mp3|wav|flac|aac|m4a|ogg|oga)(\?.*)?$/i.test(request)) return "audio";
123
+ if (/\.(mp4|webm|mkv|mov|m4v|ogv|avi)(\?.*)?$/i.test(request)) return "video";
124
+ if (/\.vtt(\?.*)?$/i.test(request)) return "track";
125
+ return "fetch";
126
+ };
127
+
128
+ parseResourceHintOptions.guessAsAttribute = guessAsAttribute;
129
+
103
130
  module.exports = parseResourceHintOptions;
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
9
- /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
8
+ /** @import { RuleSetRule } from "../../declarations/WebpackOptions" */
9
+ /** @import RuleSetCompiler from "./RuleSetCompiler" */
10
10
 
11
11
  /**
12
12
  * Defines the keys of types type used by this module.
@@ -5,10 +5,14 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionOrConditions} RuleSetConditionOrConditions */
9
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionOrConditionsAbsolute} RuleSetConditionOrConditionsAbsolute */
10
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
11
- /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
8
+ /**
9
+ * @import {
10
+ * RuleSetConditionOrConditions,
11
+ * RuleSetConditionOrConditionsAbsolute,
12
+ * RuleSetRule
13
+ * } from "../../declarations/WebpackOptions"
14
+ */
15
+ /** @import RuleSetCompiler from "./RuleSetCompiler" */
12
16
 
13
17
  /**
14
18
  * Defines the keys of types type used by this module.
@@ -0,0 +1,68 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /**
9
+ * @import {
10
+ * RuleSetGlob,
11
+ * RuleSetGlobs,
12
+ * RuleSetRule
13
+ * } from "../../declarations/WebpackOptions"
14
+ */
15
+ /** @import RuleSetCompiler from "./RuleSetCompiler" */
16
+
17
+ /**
18
+ * Defines the keys of types type used by this module.
19
+ * @template T
20
+ * @template {T[keyof T]} V
21
+ * @typedef {import("./RuleSetCompiler").KeysOfTypes<T, V>} KeysOfTypes
22
+ */
23
+
24
+ /** @typedef {KeysOfTypes<RuleSetRule, RuleSetGlob | RuleSetGlobs>} GlobMatcherRuleKeys */
25
+
26
+ const PLUGIN_NAME = "GlobMatcherRulePlugin";
27
+
28
+ class GlobMatcherRulePlugin {
29
+ /**
30
+ * Creates an instance of GlobMatcherRulePlugin.
31
+ * @param {GlobMatcherRuleKeys} ruleProperty the rule property
32
+ * @param {string=} dataProperty the data property
33
+ */
34
+ constructor(ruleProperty, dataProperty) {
35
+ /** @type {GlobMatcherRuleKeys} */
36
+ this.ruleProperty = ruleProperty;
37
+ /** @type {string | GlobMatcherRuleKeys} */
38
+ this.dataProperty = dataProperty || ruleProperty;
39
+ }
40
+
41
+ /**
42
+ * Applies the plugin by registering its hooks on the compiler.
43
+ * @param {RuleSetCompiler} ruleSetCompiler the rule set compiler
44
+ * @returns {void}
45
+ */
46
+ apply(ruleSetCompiler) {
47
+ ruleSetCompiler.hooks.rule.tap(
48
+ PLUGIN_NAME,
49
+ (path, rule, unhandledProperties, result) => {
50
+ if (unhandledProperties.has(this.ruleProperty)) {
51
+ unhandledProperties.delete(this.ruleProperty);
52
+ const condition = ruleSetCompiler.compileGlobCondition(
53
+ `${path}.${this.ruleProperty}`,
54
+ /** @type {RuleSetGlob | RuleSetGlobs} */
55
+ (rule[this.ruleProperty])
56
+ );
57
+ result.conditions.push({
58
+ property: this.dataProperty,
59
+ matchWhenEmpty: condition.matchWhenEmpty,
60
+ fn: condition.fn
61
+ });
62
+ }
63
+ }
64
+ );
65
+ }
66
+ }
67
+
68
+ module.exports = GlobMatcherRulePlugin;
@@ -5,11 +5,18 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionOrConditions} RuleSetConditionOrConditions */
9
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
10
- /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
11
- /** @typedef {import("./RuleSetCompiler").EffectData} EffectData */
12
- /** @typedef {import("./RuleSetCompiler").RuleConditionFunction} RuleConditionFunction */
8
+ /**
9
+ * @import {
10
+ * RuleSetConditionOrConditions,
11
+ * RuleSetRule
12
+ * } from "../../declarations/WebpackOptions"
13
+ */
14
+ /**
15
+ * @import RuleSetCompiler, {
16
+ * EffectData,
17
+ * RuleConditionFunction
18
+ * } from "./RuleSetCompiler"
19
+ */
13
20
 
14
21
  /**
15
22
  * Defines the keys of types type used by this module.
@@ -6,13 +6,18 @@
6
6
  "use strict";
7
7
 
8
8
  const { SyncHook } = require("tapable");
9
+ const { createPathGlobMatcher } = require("../util/globUtils");
9
10
 
10
- /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
11
- /** @typedef {import("../../declarations/WebpackOptions").Falsy} Falsy */
12
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
13
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
14
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
15
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */
11
+ /** @import { ResolveRequest } from "enhanced-resolve" */
12
+ /**
13
+ * @import {
14
+ * Falsy,
15
+ * RuleSetUseItem,
16
+ * RuleSetLoaderOptions,
17
+ * RuleSetRule,
18
+ * RuleSetConditionAbsolute
19
+ * } from "../../declarations/WebpackOptions"
20
+ */
16
21
 
17
22
  /** @typedef {(Falsy | RuleSetRule)[]} RuleSetRules */
18
23
 
@@ -48,6 +53,7 @@ const { SyncHook } = require("tapable");
48
53
  * @property {string=} mimetype
49
54
  * @property {string} dependency
50
55
  * @property {ResolveRequest["descriptionFileData"]=} descriptionData
56
+ * @property {ResolveRequest["relativePath"]=} descriptionRelativePath
51
57
  * @property {string=} compiler
52
58
  * @property {string} issuer
53
59
  * @property {string} issuerLayer
@@ -57,6 +63,9 @@ const { SyncHook } = require("tapable");
57
63
  /**
58
64
  * Defines the compiled rule type used by this module.
59
65
  * @typedef {object} CompiledRule
66
+ * @property {string} path
67
+ * @property {RuleSetRule} raw
68
+ * @property {boolean} used
60
69
  * @property {RuleCondition[]} conditions
61
70
  * @property {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
62
71
  * @property {CompiledRule[]=} rules
@@ -88,6 +97,7 @@ const { SyncHook } = require("tapable");
88
97
  * @typedef {object} RuleSet
89
98
  * @property {References} references map of references in the rule set (may grow over time)
90
99
  * @property {(effectData: EffectData) => Effect[]} exec execute the rule set
100
+ * @property {() => CompiledRule[]} unusedRules the rules that never matched, outermost first
91
101
  */
92
102
 
93
103
  /**
@@ -99,11 +109,34 @@ const { SyncHook } = require("tapable");
99
109
 
100
110
  /** @typedef {Set<string>} UnhandledProperties */
101
111
 
112
+ /** @typedef {(str: string) => boolean} GlobMatcher */
102
113
  /** @typedef {(data: EffectData) => (RuleSetUseItem | (Falsy | RuleSetUseItem)[])} RuleSetUseFn */
103
114
  /** @typedef {(value: string) => boolean} RuleSetConditionFn */
104
115
 
105
116
  /** @typedef {{ apply: (ruleSetCompiler: RuleSetCompiler) => void }} RuleSetPlugin */
106
117
 
118
+ /**
119
+ * @param {GlobMatcher[]} positive patterns that select
120
+ * @param {GlobMatcher[]} negative patterns that subtract
121
+ * @returns {GlobMatcher} matcher
122
+ */
123
+ const combineGlobMatchers = (positive, negative) => {
124
+ /** @type {GlobMatcher} */
125
+ const matchPositive =
126
+ positive.length === 0
127
+ ? () => true
128
+ : positive.length === 1
129
+ ? positive[0]
130
+ : (str) => positive.some((match) => match(str));
131
+ if (negative.length === 0) return matchPositive;
132
+ /** @type {GlobMatcher} */
133
+ const matchNegative =
134
+ negative.length === 1
135
+ ? negative[0]
136
+ : (str) => negative.some((match) => match(str));
137
+ return (str) => matchPositive(str) && !matchNegative(str);
138
+ };
139
+
107
140
  class RuleSetCompiler {
108
141
  /**
109
142
  * Creates an instance of RuleSetCompiler.
@@ -177,6 +210,7 @@ class RuleSetCompiler {
177
210
  return false;
178
211
  }
179
212
  }
213
+ rule.used = true;
180
214
  for (const effect of rule.effects) {
181
215
  if (typeof effect === "function") {
182
216
  const returnedEffects = effect(data);
@@ -211,6 +245,12 @@ class RuleSetCompiler {
211
245
  execRule(data, rule, effects);
212
246
  }
213
247
  return effects;
248
+ },
249
+ unusedRules: () => {
250
+ /** @type {CompiledRule[]} */
251
+ const unused = [];
252
+ collectUnusedRules(rules, unused);
253
+ return unused;
214
254
  }
215
255
  };
216
256
  }
@@ -251,6 +291,9 @@ class RuleSetCompiler {
251
291
 
252
292
  /** @type {CompiledRule} */
253
293
  const compiledRule = {
294
+ path,
295
+ raw: rule,
296
+ used: false,
254
297
  conditions: [],
255
298
  effects: [],
256
299
  rules: undefined,
@@ -382,6 +425,11 @@ class RuleSetCompiler {
382
425
  }
383
426
  }
384
427
  break;
428
+ case "glob":
429
+ if (value) {
430
+ conditions.push(this.compileGlobCondition(`${path}.glob`, value));
431
+ }
432
+ break;
385
433
  case "not":
386
434
  if (value) {
387
435
  const matcher = this.compileCondition(`${path}.not`, value);
@@ -410,6 +458,49 @@ class RuleSetCompiler {
410
458
  return this.combineConditionsAnd(conditions);
411
459
  }
412
460
 
461
+ /**
462
+ * Returns a compiled glob condition. Unlike a regexp it matches the same way
463
+ * on every OS: `\` is a path separator in both the pattern and the tested
464
+ * value, and a relative pattern matches at any depth. Patterns are OR-ed,
465
+ * a `!` prefix subtracts, and a list of only `!` patterns subtracts from
466
+ * everything.
467
+ * @param {string} path current path
468
+ * @param {string | string[]} glob user provided glob pattern(s)
469
+ * @returns {Condition} compiled condition
470
+ */
471
+ compileGlobCondition(path, glob) {
472
+ const globs = Array.isArray(glob) ? glob : [glob];
473
+ if (globs.length === 0) {
474
+ throw this.error(path, glob, "Expected glob pattern, but got empty list");
475
+ }
476
+ /** @type {GlobMatcher[]} */
477
+ const positive = [];
478
+ /** @type {GlobMatcher[]} */
479
+ const negative = [];
480
+ for (let i = 0; i < globs.length; i++) {
481
+ const pattern = globs[i];
482
+ const patternPath = Array.isArray(glob) ? `${path}[${i}]` : path;
483
+ if (typeof pattern !== "string") {
484
+ throw this.error(
485
+ patternPath,
486
+ pattern,
487
+ `Unexpected ${typeof pattern} when glob pattern was expected`
488
+ );
489
+ }
490
+ const negated = pattern.startsWith("!");
491
+ const match = createPathGlobMatcher(negated ? pattern.slice(1) : pattern);
492
+ if (match === null) {
493
+ throw this.error(patternPath, pattern, "Invalid glob pattern");
494
+ }
495
+ (negated ? negative : positive).push(match);
496
+ }
497
+ const match = combineGlobMatchers(positive, negative);
498
+ return {
499
+ matchWhenEmpty: match(""),
500
+ fn: (v) => typeof v === "string" && match(v)
501
+ };
502
+ }
503
+
413
504
  /**
414
505
  * Combine conditions or.
415
506
  * @param {Condition[]} conditions some conditions
@@ -477,7 +568,8 @@ class RuleSetCompiler {
477
568
  * are ignored: they don't establish the module type (e.g. a stylelint pre-loader
478
569
  * must not suppress the built-in css type). A `test` regexp that references the
479
570
  * extension (e.g. `/source\.css$/`) also counts even if the sample path itself
480
- * doesn't match, so a loader scoped to specific filenames is still detected.
571
+ * doesn't match, so a loader scoped to specific filenames is still detected; a
572
+ * `glob` condition naming the extension counts the same way.
481
573
  * @param {import("../../declarations/WebpackOptions").RuleSetRules | undefined} rules user `module.rules`
482
574
  * @param {string} resource sample resource path (e.g. `"/file.css"`)
483
575
  * @param {boolean=} inherited whether an enclosing rule already matched the resource
@@ -493,7 +585,13 @@ class RuleSetCompiler {
493
585
  inherited ||
494
586
  matchesResource(rule.test, resource, extProbe) ||
495
587
  matchesResource(rule.resource, resource, extProbe) ||
496
- matchesResource(rule.include, resource, extProbe);
588
+ matchesResource(rule.include, resource, extProbe) ||
589
+ // the rule-level `glob` selects the resource as well
590
+ matchesResource(
591
+ rule.glob === undefined ? undefined : { glob: rule.glob },
592
+ resource,
593
+ extProbe
594
+ );
497
595
  const establishesType =
498
596
  rule.type !== undefined ||
499
597
  ((rule.use !== undefined || rule.loader !== undefined) &&
@@ -543,9 +641,25 @@ const matchRuleSetCondition = (condition, resource) => {
543
641
  };
544
642
 
545
643
  /**
546
- * Whether any regexp in the condition references the extension probe (e.g.
547
- * `\.css`), i.e. the rule clearly targets that extension even if the generic
548
- * sample path doesn't match its (possibly filename-scoped) pattern.
644
+ * @param {EXPECTED_ANY} glob glob pattern(s)
645
+ * @param {string} extension extension including the dot (e.g. `".css"`)
646
+ * @returns {boolean} whether a pattern targets the extension
647
+ */
648
+ const globReferencesExtension = (glob, extension) => {
649
+ // a `!` pattern subtracts the extension instead of targeting it
650
+ if (typeof glob === "string") {
651
+ return !glob.startsWith("!") && glob.includes(extension);
652
+ }
653
+ return (
654
+ Array.isArray(glob) &&
655
+ glob.some((pattern) => globReferencesExtension(pattern, extension))
656
+ );
657
+ };
658
+
659
+ /**
660
+ * Whether any regexp or glob in the condition references the extension probe
661
+ * (e.g. `\.css`), i.e. the rule clearly targets that extension even if the
662
+ * generic sample path doesn't match its (possibly filename-scoped) pattern.
549
663
  * @param {EXPECTED_ANY} condition condition
550
664
  * @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
551
665
  * @returns {boolean} whether a regexp in the condition targets the extension
@@ -557,6 +671,8 @@ const conditionReferencesExtension = (condition, extProbe) => {
557
671
  }
558
672
  if (condition && typeof condition === "object") {
559
673
  return (
674
+ // `\.css` → `.css`
675
+ globReferencesExtension(condition.glob, extProbe.slice(1)) ||
560
676
  conditionReferencesExtension(condition.and, extProbe) ||
561
677
  conditionReferencesExtension(condition.or, extProbe)
562
678
  );
@@ -566,7 +682,7 @@ const conditionReferencesExtension = (condition, extProbe) => {
566
682
 
567
683
  /**
568
684
  * A condition counts as targeting the resource if it matches the sample path or
569
- * references the extension via a regexp.
685
+ * references the extension via a regexp or glob.
570
686
  * @param {RuleSetConditionAbsolute | undefined} condition condition
571
687
  * @param {string} resource sample resource path
572
688
  * @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
@@ -577,4 +693,22 @@ const matchesResource = (condition, resource, extProbe) =>
577
693
  (matchRuleSetCondition(condition, resource) ||
578
694
  conditionReferencesExtension(condition, extProbe));
579
695
 
696
+ /**
697
+ * Collects the outermost rules that never matched. A rule below an unused one is
698
+ * unused only because of its parent, so its subtree is not descended into.
699
+ * @param {CompiledRule[]} rules compiled rules
700
+ * @param {CompiledRule[]} result where unused rules are collected
701
+ * @returns {void}
702
+ */
703
+ const collectUnusedRules = (rules, result) => {
704
+ for (const rule of rules) {
705
+ if (!rule.used) {
706
+ result.push(rule);
707
+ continue;
708
+ }
709
+ if (rule.rules) collectUnusedRules(rule.rules, result);
710
+ if (rule.oneOf) collectUnusedRules(rule.oneOf, result);
711
+ }
712
+ };
713
+
580
714
  module.exports = RuleSetCompiler;
@@ -7,17 +7,24 @@
7
7
 
8
8
  const util = require("util");
9
9
 
10
- /** @typedef {import("../../declarations/WebpackOptions").Falsy} Falsy */
11
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoader} RuleSetLoader */
12
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
13
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
14
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
15
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
16
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseFunction} RuleSetUseFunction */
17
- /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
18
- /** @typedef {import("./RuleSetCompiler").Effect} Effect */
19
- /** @typedef {import("./RuleSetCompiler").EffectData} EffectData */
20
- /** @typedef {import("./RuleSetCompiler").EffectUseType} EffectUseType */
10
+ /**
11
+ * @import {
12
+ * Falsy,
13
+ * RuleSetLoader,
14
+ * RuleSetLoaderOptions,
15
+ * RuleSetRule,
16
+ * RuleSetUse,
17
+ * RuleSetUseItem,
18
+ * RuleSetUseFunction
19
+ * } from "../../declarations/WebpackOptions"
20
+ */
21
+ /**
22
+ * @import RuleSetCompiler, {
23
+ * Effect,
24
+ * EffectData,
25
+ * EffectUseType
26
+ * } from "./RuleSetCompiler"
27
+ */
21
28
 
22
29
  const PLUGIN_NAME = "UseEffectRulePlugin";
23
30
 
@@ -8,13 +8,23 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
- /** @typedef {import("../Compilation")} Compilation */
11
+ /** @import Compilation from "../Compilation" */
12
12
 
13
13
  class AsyncModuleGeneratorRuntimeModule extends HelperRuntimeModule {
14
14
  constructor() {
15
15
  super("async module generator");
16
16
  }
17
17
 
18
+ /**
19
+ * Returns true, if the runtime module should get it's own scope.
20
+ * When false, `generate()` must emit complete statements ending with `;`
21
+ * so a following runtime IIFE is not parsed as a call (ASI).
22
+ * @returns {boolean} true, if the runtime module should get it's own scope
23
+ */
24
+ shouldIsolate() {
25
+ return false;
26
+ }
27
+
18
28
  /**
19
29
  * Generates runtime code for this runtime module.
20
30
  * @returns {string | null} runtime code