@depup/webpack 5.109.2-depup.0 → 5.110.3-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 (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  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/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -21,21 +21,28 @@ const { makePathsRelative } = require("../util/identifier");
21
21
  const memoize = require("../util/memoize");
22
22
  const MinMaxSizeWarning = require("./MinMaxSizeWarning");
23
23
 
24
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksCacheGroup} OptimizationSplitChunksCacheGroup */
25
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
26
- /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksSizes} OptimizationSplitChunksSizes */
27
- /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
28
- /** @typedef {import("../Chunk").ChunkName} ChunkName */
29
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
30
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
31
- /** @typedef {import("../Compiler")} Compiler */
32
- /** @typedef {import("../Module")} Module */
33
- /** @typedef {import("../Module").SourceType} SourceType */
34
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
35
- /** @typedef {import("../Chunk").ChunkFilenameTemplate} ChunkFilenameTemplate */
24
+ /**
25
+ * @import {
26
+ * OptimizationSplitChunksCacheGroup,
27
+ * OptimizationSplitChunksOptions,
28
+ * OptimizationSplitChunksSizes
29
+ * } from "../../declarations/WebpackOptions"
30
+ */
31
+ /**
32
+ * @import {
33
+ * OutputNormalizedWithDefaults as OutputOptions
34
+ * } from "../config/defaults"
35
+ */
36
+ /** @import { ChunkName, ChunkFilenameTemplate } from "../Chunk" */
37
+ /** @import ChunkGraph from "../ChunkGraph" */
38
+ /** @import ChunkGroup from "../ChunkGroup" */
39
+ /** @import Compilation from "../Compilation" */
40
+ /** @import Compiler from "../Compiler" */
41
+ /** @import Module, { SourceType } from "../Module" */
42
+ /** @import ModuleGraph from "../ModuleGraph" */
36
43
  /** @typedef {import("../util/deterministicGrouping").GroupedItems<Module>} DeterministicGroupingGroupedItemsForModule */
37
44
  /** @typedef {import("../util/deterministicGrouping").Options<Module>} DeterministicGroupingOptionsForModule */
38
- /** @typedef {import("../util/deterministicGrouping").Sizes} Sizes */
45
+ /** @import { Sizes } from "../util/deterministicGrouping" */
39
46
 
40
47
  /**
41
48
  * Defines the chunk filter fn callback.
@@ -212,6 +219,27 @@ const hashFilename = (name, outputOptions) => {
212
219
  return digest.slice(0, 8);
213
220
  };
214
221
 
222
+ /**
223
+ * A split `maxInitialRequests`/`maxAsyncRequests` refused, recorded for
224
+ * `performance.splitChunksCapped`.
225
+ * @typedef {object} CappedSplit
226
+ * @property {string} cacheGroup the cache group whose split was refused
227
+ * @property {Chunk} chunk the chunk it would have been taken out of
228
+ * @property {"maxAsyncRequests" | "maxInitialRequests"} limit the option that refused it
229
+ * @property {number} maxRequests the value that option had
230
+ * @property {number} modules how many modules the split would have moved
231
+ */
232
+
233
+ /** @type {WeakMap<Compilation, CappedSplit[]>} */
234
+ const CAPPED_SPLITS = new WeakMap();
235
+
236
+ /**
237
+ * Reads back the splits a request cap refused during this compilation.
238
+ * @param {Compilation} compilation the compilation
239
+ * @returns {CappedSplit[] | undefined} the refused splits, or `undefined` when nothing recorded them
240
+ */
241
+ const getCappedSplits = (compilation) => CAPPED_SPLITS.get(compilation);
242
+
215
243
  /**
216
244
  * Returns the number of requests.
217
245
  * @param {Chunk} chunk the chunk
@@ -690,7 +718,7 @@ const createCacheGroupSource = (options, key, defaultSizeTypes) => {
690
718
 
691
719
  const PLUGIN_NAME = "SplitChunksPlugin";
692
720
 
693
- module.exports = class SplitChunksPlugin {
721
+ class SplitChunksPlugin {
694
722
  /**
695
723
  * Creates an instance of SplitChunksPlugin.
696
724
  * @param {OptimizationSplitChunksOptions=} options plugin options
@@ -897,6 +925,19 @@ module.exports = class SplitChunksPlugin {
897
925
  (chunks) => {
898
926
  if (alreadyOptimized) return;
899
927
  alreadyOptimized = true;
928
+ const { performance } = compilation.options;
929
+ // Mirrors both of `SplitChunksCappedPlugin`'s gates: a build that
930
+ // would not report records nothing and allocates nothing.
931
+ /** @type {CappedSplit[] | undefined} */
932
+ let cappedSplits;
933
+ if (
934
+ performance !== false &&
935
+ performance.splitChunksCapped === true &&
936
+ Boolean(performance.hints)
937
+ ) {
938
+ cappedSplits = [];
939
+ CAPPED_SPLITS.set(compilation, cappedSplits);
940
+ }
900
941
  logger.time("prepare");
901
942
  const chunkGraph = compilation.chunkGraph;
902
943
  const moduleGraph = compilation.moduleGraph;
@@ -1644,19 +1685,36 @@ module.exports = class SplitChunksPlugin {
1644
1685
  Number.isFinite(item.cacheGroup.maxAsyncRequests))
1645
1686
  ) {
1646
1687
  for (const chunk of usedChunks) {
1647
- // respect max requests
1648
- const maxRequests = chunk.isOnlyInitial()
1649
- ? item.cacheGroup.maxInitialRequests
1650
- : chunk.canBeInitial()
1651
- ? Math.min(
1652
- item.cacheGroup.maxInitialRequests,
1653
- item.cacheGroup.maxAsyncRequests
1654
- )
1655
- : item.cacheGroup.maxAsyncRequests;
1688
+ // respect max requests: a chunk that is both initial and
1689
+ // async answers to the stricter of the two caps
1690
+ const isOnlyInitial = chunk.isOnlyInitial();
1691
+ const byAsyncRequests =
1692
+ !isOnlyInitial &&
1693
+ (!chunk.canBeInitial() ||
1694
+ item.cacheGroup.maxAsyncRequests <
1695
+ item.cacheGroup.maxInitialRequests);
1696
+ const maxRequests = byAsyncRequests
1697
+ ? item.cacheGroup.maxAsyncRequests
1698
+ : item.cacheGroup.maxInitialRequests;
1656
1699
  if (
1657
1700
  Number.isFinite(maxRequests) &&
1658
1701
  getRequests(chunk) >= maxRequests
1659
1702
  ) {
1703
+ if (cappedSplits !== undefined) {
1704
+ cappedSplits.push({
1705
+ cacheGroup: item.cacheGroup.key,
1706
+ chunk,
1707
+ // which cap it was cannot be read back off the value:
1708
+ // the two are equal by default in production
1709
+ limit: byAsyncRequests
1710
+ ? "maxAsyncRequests"
1711
+ : "maxInitialRequests",
1712
+ maxRequests:
1713
+ /** @type {number} */
1714
+ (maxRequests),
1715
+ modules: item.modules.size
1716
+ });
1717
+ }
1660
1718
  usedChunks.delete(chunk);
1661
1719
  }
1662
1720
  }
@@ -1983,4 +2041,8 @@ module.exports = class SplitChunksPlugin {
1983
2041
  );
1984
2042
  });
1985
2043
  }
1986
- };
2044
+ }
2045
+
2046
+ SplitChunksPlugin.getCappedSplits = getCappedSplits;
2047
+
2048
+ module.exports = SplitChunksPlugin;
@@ -8,7 +8,7 @@
8
8
  const WebpackError = require("../errors/WebpackError");
9
9
  const formatSize = require("../util/formatSize");
10
10
 
11
- /** @typedef {import("./SizeLimitsPlugin").AssetDetails} AssetDetails */
11
+ /** @import { AssetDetails } from "./SizeLimitsPlugin" */
12
12
 
13
13
  class AssetsOverSizeLimitWarning extends WebpackError {
14
14
  /**
@@ -18,7 +18,15 @@ class AssetsOverSizeLimitWarning extends WebpackError {
18
18
  */
19
19
  constructor(assetsOverSizeLimit, assetLimit) {
20
20
  const assetLists = assetsOverSizeLimit
21
- .map((asset) => `\n ${asset.name} (${formatSize(asset.size)})`)
21
+ .map((asset) => {
22
+ const largest = asset.modules
23
+ ? `\n Largest modules: ${asset.modules
24
+ .map((module) => `${module.name} (${formatSize(module.size)})`)
25
+ .join(", ")}`
26
+ : "";
27
+
28
+ return `\n ${asset.name} (${formatSize(asset.size)})${largest}`;
29
+ })
22
30
  .join("");
23
31
 
24
32
  super(`asset size limit: The following asset(s) exceed the recommended size limit (${formatSize(
@@ -0,0 +1,136 @@
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
+ const AsyncChunkWaterfallWarning = require("../errors/AsyncChunkWaterfallWarning");
9
+
10
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
11
+ /** @import ChunkGroup from "../ChunkGroup" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { WaterfallDetails } from "../errors/AsyncChunkWaterfallWarning" */
14
+
15
+ const PLUGIN_NAME = "AsyncChunkWaterfallsPlugin";
16
+
17
+ // Enough to name the offenders without printing the whole chunk graph.
18
+ const MAX_REPORTED_WATERFALLS = 5;
19
+
20
+ // Two levels is the shape `import()` is for — a route that loads its own data.
21
+ // Three is where the round trips start outweighing what splitting saved.
22
+ const MIN_REPORTED_DEPTH = 3;
23
+
24
+ class AsyncChunkWaterfallsPlugin {
25
+ /**
26
+ * Creates an instance of AsyncChunkWaterfallsPlugin.
27
+ * @param {PerformanceOptions} options the plugin options
28
+ */
29
+ constructor(options) {
30
+ /** @type {PerformanceOptions["hints"]} */
31
+ this.hints = options.hints;
32
+ }
33
+
34
+ /**
35
+ * Applies the plugin by registering its hooks on the compiler.
36
+ * @param {Compiler} compiler the compiler instance
37
+ * @returns {void}
38
+ */
39
+ apply(compiler) {
40
+ const hints = this.hints;
41
+
42
+ if (!hints) return;
43
+
44
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
45
+ // `afterSeal` is past the hash, which folds every message into it — a
46
+ // hint reported earlier would change the build's identity.
47
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
48
+ const { chunkGraph } = compilation;
49
+
50
+ /**
51
+ * The name to print for a group; ids exist by `afterSeal`.
52
+ * @param {ChunkGroup} group the group
53
+ * @returns {string} what to call it
54
+ */
55
+ const nameOf = (group) => {
56
+ if (group.name) return group.name;
57
+
58
+ const [chunk] = group.chunks;
59
+
60
+ return chunk && chunk.id !== null ? `${chunk.id}` : "(unnamed)";
61
+ };
62
+
63
+ // Breadth-first from the initial groups, so the depth recorded for a
64
+ // group is the fewest requests a client makes to reach it.
65
+ /** @type {Map<ChunkGroup, ChunkGroup[]>} */
66
+ const pathTo = new Map();
67
+ /** @type {ChunkGroup[]} */
68
+ const queue = [];
69
+
70
+ for (const group of compilation.chunkGroups) {
71
+ if (!group.isInitial()) continue;
72
+
73
+ pathTo.set(group, []);
74
+ queue.push(group);
75
+ }
76
+
77
+ /** @type {WaterfallDetails[]} */
78
+ const waterfalls = [];
79
+ let deepest = 0;
80
+
81
+ for (let i = 0; i < queue.length; i++) {
82
+ const group = queue[i];
83
+ const path = /** @type {ChunkGroup[]} */ (pathTo.get(group));
84
+
85
+ for (const child of group.getChildren()) {
86
+ if (pathTo.has(child)) continue;
87
+
88
+ const childPath = [...path, child];
89
+
90
+ pathTo.set(child, childPath);
91
+ queue.push(child);
92
+
93
+ if (childPath.length < MIN_REPORTED_DEPTH) continue;
94
+
95
+ // Only the end of a chain is reported: every prefix of it is a
96
+ // waterfall too, and naming them all says the same thing N times.
97
+ if (child.getNumberOfChildren() > 0) continue;
98
+
99
+ let size = 0;
100
+
101
+ for (const step of childPath) {
102
+ for (const chunk of step.chunks) {
103
+ size += chunkGraph.getChunkSize(chunk);
104
+ }
105
+ }
106
+
107
+ deepest = Math.max(deepest, childPath.length);
108
+ waterfalls.push({ chain: childPath.map(nameOf), size });
109
+ }
110
+ }
111
+
112
+ if (waterfalls.length === 0) return;
113
+
114
+ // Deepest first, then largest: the worst round-trip cost leads.
115
+ waterfalls.sort(
116
+ (a, b) => b.chain.length - a.chain.length || b.size - a.size
117
+ );
118
+
119
+ const warning = new AsyncChunkWaterfallWarning(
120
+ waterfalls.slice(0, MAX_REPORTED_WATERFALLS),
121
+ deepest
122
+ );
123
+
124
+ if (hints === "error") {
125
+ compilation.errors.push(warning);
126
+ } else if (hints === "stats") {
127
+ compilation.hints.push(warning);
128
+ } else {
129
+ compilation.warnings.push(warning);
130
+ }
131
+ });
132
+ });
133
+ }
134
+ }
135
+
136
+ module.exports = AsyncChunkWaterfallsPlugin;
@@ -0,0 +1,142 @@
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
+ const ContextModule = require("../ContextModule");
9
+ const BroadContextsWarning = require("../errors/BroadContextsWarning");
10
+ const { compareStrings } = require("../util/comparators");
11
+ const getModuleSize = require("./getModuleSize");
12
+
13
+ /** @typedef {import("../../declarations/WebpackOptions").PerformanceOptions} PerformanceOptions */
14
+ /** @typedef {import("../Compiler")} Compiler */
15
+ /** @typedef {import("../Dependency")} Dependency */
16
+ /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../errors/BroadContextsWarning").BroadContextDetails} BroadContextDetails */
18
+
19
+ const PLUGIN_NAME = "BroadContextsPlugin";
20
+
21
+ // Enough to name the offenders without printing every context in the build.
22
+ const MAX_REPORTED_CONTEXTS = 5;
23
+
24
+ // A directory holding a handful of files costs little however it is matched,
25
+ // and warning about it would bury the contexts that do carry weight.
26
+ const MIN_REPORTED_MODULES = 20;
27
+
28
+ // A bare leading wildcard takes every name in the directory, whether it is
29
+ // `require.context`'s default or one webpack derived from an expression.
30
+ const WILDCARD_PREFIX = "^\\.\\/.*";
31
+
32
+ /**
33
+ * Whether a context takes whatever the directory holds. A pattern that narrows
34
+ * by anything other than a leading wildcard is left alone, as is one webpack
35
+ * cannot read — an unrecognized filter is never guessed at.
36
+ * @param {ContextModule} module a context module
37
+ * @returns {boolean} true when nothing narrows it
38
+ */
39
+ const isBroad = (module) => {
40
+ const { regExp, include, exclude } = module.options;
41
+
42
+ if (include || exclude) return false;
43
+
44
+ return (
45
+ Boolean(regExp) &&
46
+ /** @type {RegExp} */ (regExp).source.startsWith(WILDCARD_PREFIX)
47
+ );
48
+ };
49
+
50
+ class BroadContextsPlugin {
51
+ /**
52
+ * Creates an instance of BroadContextsPlugin.
53
+ * @param {PerformanceOptions} options the plugin options
54
+ */
55
+ constructor(options) {
56
+ /** @type {PerformanceOptions["hints"]} */
57
+ this.hints = options.hints;
58
+ }
59
+
60
+ /**
61
+ * Applies the plugin by registering its hooks on the compiler.
62
+ * @param {Compiler} compiler the compiler instance
63
+ * @returns {void}
64
+ */
65
+ apply(compiler) {
66
+ const hints = this.hints;
67
+
68
+ if (!hints) return;
69
+
70
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
71
+ // `afterSeal` is past the hash, which folds every message into it — a
72
+ // hint reported earlier would change the build's identity.
73
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
74
+ const { moduleGraph, requestShortener } = compilation;
75
+ /** @type {BroadContextDetails[]} */
76
+ const broad = [];
77
+
78
+ for (const module of compilation.modules) {
79
+ if (!(module instanceof ContextModule)) continue;
80
+ if (!isBroad(module)) continue;
81
+
82
+ // One file is reached under several requests — with and without its
83
+ // extension — so the dependencies outnumber what is really matched.
84
+ /** @type {Set<Module>} */
85
+ const matched = new Set();
86
+
87
+ /**
88
+ * @param {Dependency[]} dependencies the dependencies to walk
89
+ * @returns {void}
90
+ */
91
+ const collect = (dependencies) => {
92
+ for (const dependency of dependencies) {
93
+ const matchedModule = moduleGraph.getModule(dependency);
94
+
95
+ if (matchedModule) matched.add(matchedModule);
96
+ }
97
+ };
98
+
99
+ collect(module.dependencies);
100
+
101
+ // A lazy context keeps each match in a block of its own, so reading
102
+ // only `dependencies` would report it as matching nothing.
103
+ for (const block of module.blocks) collect(block.dependencies);
104
+
105
+ if (matched.size < MIN_REPORTED_MODULES) continue;
106
+
107
+ let size = 0;
108
+
109
+ for (const matchedModule of matched) {
110
+ size += getModuleSize(matchedModule);
111
+ }
112
+
113
+ broad.push({
114
+ name: module.readableIdentifier(requestShortener),
115
+ modules: matched.size,
116
+ size
117
+ });
118
+ }
119
+
120
+ if (broad.length === 0) return;
121
+
122
+ // Ties break by name: module order is not stable across runs.
123
+ broad.sort((a, b) => b.size - a.size || compareStrings(a.name, b.name));
124
+
125
+ const warning = new BroadContextsWarning(
126
+ broad.slice(0, MAX_REPORTED_CONTEXTS),
127
+ broad.length
128
+ );
129
+
130
+ if (hints === "error") {
131
+ compilation.errors.push(warning);
132
+ } else if (hints === "stats") {
133
+ compilation.hints.push(warning);
134
+ } else {
135
+ compilation.warnings.push(warning);
136
+ }
137
+ });
138
+ });
139
+ }
140
+ }
141
+
142
+ module.exports = BroadContextsPlugin;
@@ -0,0 +1,125 @@
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
+ const RuntimeModule = require("../RuntimeModule");
9
+ const CacheEffectivenessWarning = require("../errors/CacheEffectivenessWarning");
10
+
11
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { BuildInfo } from "../Module" */
14
+
15
+ const PLUGIN_NAME = "CacheEffectivenessPlugin";
16
+
17
+ // A reason shared by many modules is the one worth fixing, so report the
18
+ // frequent ones and count the rest.
19
+ const MAX_REPORTED_REASONS = 3;
20
+
21
+ const UNSPECIFIED_REASON = "reason not stated";
22
+
23
+ class CacheEffectivenessPlugin {
24
+ /**
25
+ * Creates an instance of CacheEffectivenessPlugin.
26
+ * @param {PerformanceOptions} options the plugin options
27
+ */
28
+ constructor(options) {
29
+ /** @type {PerformanceOptions["hints"]} */
30
+ this.hints = options.hints;
31
+ }
32
+
33
+ /**
34
+ * Applies the plugin by registering its hooks on the compiler.
35
+ * @param {Compiler} compiler the compiler instance
36
+ * @returns {void}
37
+ */
38
+ apply(compiler) {
39
+ const hints = this.hints;
40
+
41
+ if (!hints) return;
42
+
43
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
44
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
45
+ let total = 0;
46
+ let rebuilt = 0;
47
+ let uncacheable = 0;
48
+ /** @type {Map<string, number>} */
49
+ const modulesByReason = new Map();
50
+
51
+ for (const module of compilation.modules) {
52
+ // Runtime modules are generated per compilation, never built and
53
+ // never cached, so counting them makes a cold build look warm.
54
+ if (module instanceof RuntimeModule) continue;
55
+
56
+ total++;
57
+
58
+ if (compilation.builtModules.has(module)) rebuilt++;
59
+
60
+ // Every built module carries one; `cacheable` being `undefined` is
61
+ // the module never reporting either way, not it opting out.
62
+ const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
63
+
64
+ if (buildInfo.cacheable !== false) continue;
65
+
66
+ uncacheable++;
67
+
68
+ const reasons =
69
+ buildInfo.notCacheableReasons &&
70
+ buildInfo.notCacheableReasons.length > 0
71
+ ? buildInfo.notCacheableReasons
72
+ : [UNSPECIFIED_REASON];
73
+
74
+ for (const reason of reasons) {
75
+ modulesByReason.set(reason, (modulesByReason.get(reason) || 0) + 1);
76
+ }
77
+ }
78
+
79
+ // Work redone despite a warm cache needs both ends: everything rebuilt
80
+ // is a cold build, nothing rebuilt is the cache working.
81
+ const warmRebuild = rebuilt > 0 && rebuilt < total;
82
+
83
+ if (!warmRebuild && uncacheable === 0) return;
84
+
85
+ // Most frequent first, and by reason where two are as frequent: the
86
+ // map is keyed in the order the modules were walked, which is not the
87
+ // same twice, and only three reasons are reported — so an unbroken tie
88
+ // would vary which of them a build names at all.
89
+ const sorted = [...modulesByReason].sort(
90
+ (a, b) => b[1] - a[1] || (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)
91
+ );
92
+ const reasons = sorted
93
+ .slice(0, MAX_REPORTED_REASONS)
94
+ .map(
95
+ ([reason, modules]) =>
96
+ `${reason} (${modules} ${modules === 1 ? "module" : "modules"})`
97
+ );
98
+ const remaining = sorted.length - reasons.length;
99
+
100
+ if (remaining > 0) {
101
+ reasons.push(
102
+ `and ${remaining} other ${remaining === 1 ? "reason" : "reasons"}`
103
+ );
104
+ }
105
+
106
+ const warning = new CacheEffectivenessWarning({
107
+ total,
108
+ rebuilt,
109
+ uncacheable,
110
+ reasons
111
+ });
112
+
113
+ if (hints === "error") {
114
+ compilation.errors.push(warning);
115
+ } else if (hints === "stats") {
116
+ compilation.hints.push(warning);
117
+ } else {
118
+ compilation.warnings.push(warning);
119
+ }
120
+ });
121
+ });
122
+ }
123
+ }
124
+
125
+ module.exports = CacheEffectivenessPlugin;
@@ -0,0 +1,99 @@
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
+ const ConflictingResourceHintsWarning = require("../errors/ConflictingResourceHintsWarning");
9
+ const { compareStrings } = require("../util/comparators");
10
+
11
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
12
+ /** @import ChunkGroup from "../ChunkGroup" */
13
+ /** @import Compiler from "../Compiler" */
14
+ /**
15
+ * @import {
16
+ * ConflictingResourceHintDetails
17
+ * } from "../errors/ConflictingResourceHintsWarning"
18
+ */
19
+
20
+ const PLUGIN_NAME = "ConflictingResourceHintsPlugin";
21
+
22
+ /**
23
+ * Names a chunk group for a message, falling back to its chunks: an `import()`
24
+ * without `webpackChunkName` produces a group with no name of its own.
25
+ * @param {ChunkGroup} chunkGroup a chunk group
26
+ * @returns {string} a name for it
27
+ */
28
+ const getChunkGroupName = (chunkGroup) =>
29
+ chunkGroup.name ||
30
+ chunkGroup.chunks.map((chunk) => chunk.name || `${chunk.id}`).join(", ");
31
+
32
+ class ConflictingResourceHintsPlugin {
33
+ /**
34
+ * Creates an instance of ConflictingResourceHintsPlugin.
35
+ * @param {PerformanceOptions} options the plugin options
36
+ */
37
+ constructor(options) {
38
+ /** @type {PerformanceOptions["hints"]} */
39
+ this.hints = options.hints;
40
+ }
41
+
42
+ /**
43
+ * Applies the plugin by registering its hooks on the compiler.
44
+ * @param {Compiler} compiler the compiler instance
45
+ * @returns {void}
46
+ */
47
+ apply(compiler) {
48
+ const hints = this.hints;
49
+
50
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
51
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
52
+ const { chunkGraph, moduleGraph } = compilation;
53
+ /** @type {ConflictingResourceHintDetails[]} */
54
+ const links = [];
55
+
56
+ for (const chunkGroup of compilation.chunkGroups) {
57
+ const children = chunkGroup.getChildrenByOrders(
58
+ moduleGraph,
59
+ chunkGraph
60
+ );
61
+
62
+ if (!children.prefetch || !children.preload) continue;
63
+
64
+ const preloaded = new Set(children.preload);
65
+
66
+ for (const child of children.prefetch) {
67
+ if (!preloaded.has(child)) continue;
68
+
69
+ links.push({
70
+ parent: getChunkGroupName(chunkGroup),
71
+ child: getChunkGroupName(child)
72
+ });
73
+ }
74
+ }
75
+
76
+ if (links.length === 0) return;
77
+
78
+ // Chunk group iteration order is not stable across runs.
79
+ links.sort(
80
+ (a, b) =>
81
+ compareStrings(a.parent, b.parent) ||
82
+ compareStrings(a.child, b.child)
83
+ );
84
+
85
+ const warning = new ConflictingResourceHintsWarning(links);
86
+
87
+ if (hints === "error") {
88
+ compilation.errors.push(warning);
89
+ } else if (hints === "stats") {
90
+ compilation.hints.push(warning);
91
+ } else {
92
+ compilation.warnings.push(warning);
93
+ }
94
+ });
95
+ });
96
+ }
97
+ }
98
+
99
+ module.exports = ConflictingResourceHintsPlugin;