@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
@@ -0,0 +1,159 @@
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 HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
9
+ const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
10
+ const UnusedReexportsWarning = require("../errors/UnusedReexportsWarning");
11
+ const { compareStrings } = require("../util/comparators");
12
+ const getModuleSize = require("./getModuleSize");
13
+ const hasOnlyUnusedExports = require("./hasOnlyUnusedExports");
14
+
15
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
16
+ /** @import Compiler from "../Compiler" */
17
+ /** @import Module from "../Module" */
18
+ /** @import ModuleGraph from "../ModuleGraph" */
19
+ /** @import { UnusedReexportDetails } from "../errors/UnusedReexportsWarning" */
20
+
21
+ const PLUGIN_NAME = "UnusedReexportsPlugin";
22
+
23
+ // Enough to name the offenders without listing the barrel.
24
+ const MAX_REPORTED_MODULES = 5;
25
+
26
+ /**
27
+ * Tells whether every module pulling this one in does so by re-exporting it.
28
+ * One an importer wants for its side effects alone is deliberate, not a
29
+ * barrel's leftover.
30
+ * @param {Module} module the module to look up
31
+ * @param {ModuleGraph} moduleGraph the module graph
32
+ * @returns {boolean} true when only re-exports pull it in
33
+ */
34
+ const isOnlyReexported = (module, moduleGraph) => {
35
+ // A re-export emits a side-effect edge of its own, so edges are grouped by
36
+ // the statement they come from — `sourceOrder` — rather than by their type.
37
+ /** @type {Map<Module, Set<number | undefined>>} */
38
+ const reexportedStatements = new Map();
39
+ /** @type {[Module, number | undefined][]} */
40
+ const edges = [];
41
+
42
+ for (const connection of moduleGraph.getIncomingConnections(module)) {
43
+ const origin = connection.originModule;
44
+
45
+ // An entry has no origin: it is in the build because it was asked for.
46
+ if (!origin) return false;
47
+
48
+ const dependency = connection.dependency;
49
+
50
+ // Only an ESM import statement can carry a re-export.
51
+ if (!(dependency instanceof HarmonyImportDependency)) return false;
52
+
53
+ if (dependency instanceof HarmonyExportImportedSpecifierDependency) {
54
+ const statements = reexportedStatements.get(origin);
55
+
56
+ if (statements === undefined) {
57
+ reexportedStatements.set(origin, new Set([dependency.sourceOrder]));
58
+ } else {
59
+ statements.add(dependency.sourceOrder);
60
+ }
61
+ }
62
+
63
+ edges.push([origin, dependency.sourceOrder]);
64
+ }
65
+
66
+ if (edges.length === 0) return false;
67
+
68
+ for (const [origin, sourceOrder] of edges) {
69
+ const statements = reexportedStatements.get(origin);
70
+
71
+ if (statements === undefined || !statements.has(sourceOrder)) return false;
72
+ }
73
+
74
+ return true;
75
+ };
76
+
77
+ class UnusedReexportsPlugin {
78
+ /**
79
+ * Creates an instance of UnusedReexportsPlugin.
80
+ * @param {PerformanceOptions} options the plugin options
81
+ */
82
+ constructor(options) {
83
+ /** @type {PerformanceOptions["hints"]} */
84
+ this.hints = options.hints;
85
+ }
86
+
87
+ /**
88
+ * Applies the plugin by registering its hooks on the compiler.
89
+ * @param {Compiler} compiler the compiler instance
90
+ * @returns {void}
91
+ */
92
+ apply(compiler) {
93
+ const hints = this.hints;
94
+
95
+ if (!hints) return;
96
+
97
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
98
+ /** @type {UnusedReexportsWarning | undefined} */
99
+ let warning;
100
+
101
+ // Usage is final here, and concatenation has not merged the modules
102
+ // away yet, so each one can still be named and measured.
103
+ compilation.hooks.optimizeModules.tap(PLUGIN_NAME, (modules) => {
104
+ const { chunkGraph, moduleGraph, requestShortener } = compilation;
105
+ /** @type {UnusedReexportDetails[]} */
106
+ const unused = [];
107
+ let wasted = 0;
108
+
109
+ for (const module of modules) {
110
+ // One webpack already left out costs nothing.
111
+ if (chunkGraph.getNumberOfModuleChunks(module) === 0) continue;
112
+
113
+ if (!hasOnlyUnusedExports(module, moduleGraph, chunkGraph)) {
114
+ continue;
115
+ }
116
+
117
+ if (!isOnlyReexported(module, moduleGraph)) continue;
118
+
119
+ const size = getModuleSize(module);
120
+
121
+ wasted += size;
122
+ unused.push({
123
+ name: module.readableIdentifier(requestShortener),
124
+ size
125
+ });
126
+ }
127
+
128
+ if (unused.length === 0) return;
129
+
130
+ // Ties break by name: module order is not stable across runtimes.
131
+ unused.sort(
132
+ (a, b) => b.size - a.size || compareStrings(a.name, b.name)
133
+ );
134
+
135
+ warning = new UnusedReexportsWarning(
136
+ unused.slice(0, MAX_REPORTED_MODULES),
137
+ unused.length,
138
+ wasted
139
+ );
140
+ });
141
+
142
+ // Reported past the hash: `createHash` folds every message into it, so
143
+ // a hint pushed earlier would change the build's identity.
144
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
145
+ if (warning === undefined) return;
146
+
147
+ if (hints === "error") {
148
+ compilation.errors.push(warning);
149
+ } else if (hints === "stats") {
150
+ compilation.hints.push(warning);
151
+ } else {
152
+ compilation.warnings.push(warning);
153
+ }
154
+ });
155
+ });
156
+ }
157
+ }
158
+
159
+ module.exports = UnusedReexportsPlugin;
@@ -0,0 +1,105 @@
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 UnusedRuleWarning = require("../errors/UnusedRuleWarning");
9
+
10
+ /**
11
+ * @import {
12
+ * RuleSetRule,
13
+ * PerformanceOptions
14
+ * } from "../../declarations/WebpackOptions"
15
+ */
16
+ /** @import Compiler from "../Compiler" */
17
+
18
+ const PLUGIN_NAME = "UnusedRuleWarningPlugin";
19
+
20
+ // `NormalModuleFactory` compiles `[{ rules: defaultRules }, { rules: rules }]`,
21
+ // so only this subtree belongs to the configuration.
22
+ const USER_RULES_PATH = "ruleSet[1].rules";
23
+
24
+ /**
25
+ * Names the rule the way its author would recognize it. `module.rules[7]` alone
26
+ * is useless when a plugin injected the rule.
27
+ * @param {RuleSetRule} rule the raw rule
28
+ * @returns {string} a short descriptor, or an empty string when nothing identifies it
29
+ */
30
+ const describeRule = (rule) => {
31
+ for (const key of ["test", "include", "exclude", "resource", "mimetype"]) {
32
+ const value = rule[/** @type {keyof RuleSetRule} */ (key)];
33
+ if (value instanceof RegExp) return ` (${key}: ${value})`;
34
+ if (typeof value === "string") return ` (${key}: ${value})`;
35
+ }
36
+ if (typeof rule.loader === "string") return ` (loader: ${rule.loader})`;
37
+ if (typeof rule.type === "string") return ` (type: ${rule.type})`;
38
+ return "";
39
+ };
40
+
41
+ class UnusedRuleWarningPlugin {
42
+ /**
43
+ * Creates an instance of UnusedRuleWarningPlugin.
44
+ * @param {PerformanceOptions} options the plugin options
45
+ */
46
+ constructor(options) {
47
+ /** @type {PerformanceOptions["hints"]} */
48
+ this.hints = options.hints;
49
+ }
50
+
51
+ /**
52
+ * Applies the plugin by registering its hooks on the compiler.
53
+ * @param {Compiler} compiler the compiler instance
54
+ * @returns {void}
55
+ */
56
+ apply(compiler) {
57
+ const hints = this.hints;
58
+
59
+ compiler.hooks.compilation.tap(
60
+ PLUGIN_NAME,
61
+ (compilation, { normalModuleFactory }) => {
62
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
63
+ // Nothing was factorized, so no rule could match — an empty build is
64
+ // not evidence that a rule is unused.
65
+ if (compilation.modules.size === 0) return;
66
+
67
+ /** @type {string[]} */
68
+ const descriptions = [];
69
+
70
+ for (const rule of normalModuleFactory.ruleSet.unusedRules()) {
71
+ if (!rule.path.startsWith(USER_RULES_PATH)) continue;
72
+ // A rule aimed at another compiler of a MultiCompiler is inactive
73
+ // here by design, not by mistake.
74
+ if (
75
+ rule.conditions.some(
76
+ (condition) => condition.property === "compiler"
77
+ )
78
+ ) {
79
+ continue;
80
+ }
81
+ descriptions.push(
82
+ `${rule.path.replace(USER_RULES_PATH, "module.rules")}${describeRule(
83
+ rule.raw
84
+ )}`
85
+ );
86
+ }
87
+
88
+ if (descriptions.length === 0) return;
89
+
90
+ const warning = new UnusedRuleWarning(descriptions);
91
+
92
+ if (hints === "error") {
93
+ compilation.errors.push(warning);
94
+ } else if (hints === "stats") {
95
+ compilation.hints.push(warning);
96
+ } else {
97
+ compilation.warnings.push(warning);
98
+ }
99
+ });
100
+ }
101
+ );
102
+ }
103
+ }
104
+
105
+ module.exports = UnusedRuleWarningPlugin;
@@ -0,0 +1,22 @@
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
+ /** @import Module from "../Module" */
9
+
10
+ /**
11
+ * Asks the module for its own source types rather than assuming javascript, so
12
+ * a css or asset module counts too.
13
+ * @param {Module} module a module
14
+ * @returns {number} its size over every source type it reports
15
+ */
16
+ const getModuleSize = (module) => {
17
+ let size = 0;
18
+ for (const type of module.getSourceTypes()) size += module.size(type);
19
+ return size;
20
+ };
21
+
22
+ module.exports = getModuleSize;
@@ -0,0 +1,22 @@
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 ConcatenatedModule = require("../optimize/ConcatenatedModule");
9
+
10
+ /** @import Module from "../Module" */
11
+
12
+ /**
13
+ * Yields the modules a user wrote, looking through scope hoisting: a
14
+ * concatenation is one module in the chunk graph but several on disk, and a
15
+ * hint about bytes or duplication has to name the ones on disk.
16
+ * @param {Module} module a module from the chunk graph
17
+ * @returns {Iterable<Module>} the modules it was built from, or itself
18
+ */
19
+ const getSourceModules = (module) =>
20
+ module instanceof ConcatenatedModule ? module.modules : [module];
21
+
22
+ module.exports = getSourceModules;
@@ -0,0 +1,40 @@
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 { UsageState } = require("../ExportsInfo");
9
+
10
+ /** @import ChunkGraph from "../ChunkGraph" */
11
+ /** @import Module from "../Module" */
12
+ /** @import ModuleGraph from "../ModuleGraph" */
13
+
14
+ /**
15
+ * Tells whether a module provides exports and no runtime uses any of them.
16
+ * One exporting nothing is there for its side effects, a different mistake.
17
+ * @param {Module} module the module to look up
18
+ * @param {ModuleGraph} moduleGraph the module graph
19
+ * @param {ChunkGraph} chunkGraph the chunk graph
20
+ * @returns {boolean} true when it provides exports and none are used
21
+ */
22
+ const hasOnlyUnusedExports = (module, moduleGraph, chunkGraph) => {
23
+ const runtimes = [...chunkGraph.getModuleRuntimes(module)];
24
+ let provided = 0;
25
+
26
+ for (const exportInfo of moduleGraph.getExportsInfo(module).exports) {
27
+ if (!exportInfo.provided) continue;
28
+
29
+ provided++;
30
+
31
+ for (const runtime of runtimes) {
32
+ // `NoInfo` included: unknown usage is not unused.
33
+ if (exportInfo.getUsed(runtime) !== UsageState.Unused) return false;
34
+ }
35
+ }
36
+
37
+ return provided > 0;
38
+ };
39
+
40
+ module.exports = hasOnlyUnusedExports;
@@ -7,17 +7,27 @@
7
7
  const RuntimeModule = require("../RuntimeModule");
8
8
  const Template = require("../Template");
9
9
 
10
- /** @typedef {import("../Compilation")} Compilation */
10
+ /** @import Compilation from "../Compilation" */
11
11
 
12
12
  class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
13
+ /**
14
+ * Returns true, if the runtime module should get it's own scope.
15
+ * When false, `generate()` must emit complete statements ending with `;`
16
+ * so a following runtime IIFE is not parsed as a call (ASI).
17
+ * @returns {boolean} true, if the runtime module should get it's own scope
18
+ */
19
+ shouldIsolate() {
20
+ return false;
21
+ }
22
+
13
23
  /**
14
24
  * @param {"prefetch" | "preload"} type "prefetch" or "preload" chunk type function
15
- * @param {string} runtimeFunction the runtime function name
25
+ * @param {string | null} runtimeFunction the runtime function name, or `null` where nothing fans out over the handlers
16
26
  * @param {string} runtimeHandlers the runtime handlers
17
27
  */
18
28
  constructor(type, runtimeFunction, runtimeHandlers) {
19
29
  super(`chunk ${type} function`);
20
- /** @type {string} */
30
+ /** @type {string | null} */
21
31
  this.runtimeFunction = runtimeFunction;
22
32
  /** @type {string} */
23
33
  this.runtimeHandlers = runtimeHandlers;
@@ -33,13 +43,17 @@ class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
33
43
  const { runtimeTemplate } = compilation;
34
44
  return Template.asString([
35
45
  `${runtimeHandlers} = {};`,
36
- `${runtimeFunction} = ${runtimeTemplate.basicFunction("chunkId", [
37
- // map is shorter than forEach
38
- `Object.keys(${runtimeHandlers}).map(${runtimeTemplate.basicFunction(
39
- "key",
40
- `${runtimeHandlers}[key](chunkId);`
41
- )});`
42
- ])}`
46
+ ...(runtimeFunction === null
47
+ ? []
48
+ : [
49
+ `${runtimeFunction} = ${runtimeTemplate.basicFunction("chunkId", [
50
+ // map is shorter than forEach
51
+ `Object.keys(${runtimeHandlers}).map(${runtimeTemplate.basicFunction(
52
+ "key",
53
+ `${runtimeHandlers}[key](chunkId);`
54
+ )});`
55
+ ])};`
56
+ ])
43
57
  ]);
44
58
  }
45
59
  }
@@ -6,12 +6,23 @@
6
6
  "use strict";
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
- const ChunkPrefetchFunctionRuntimeModule = require("./ChunkPrefetchFunctionRuntimeModule");
10
- const ChunkPrefetchStartupRuntimeModule = require("./ChunkPrefetchStartupRuntimeModule");
11
- const ChunkPrefetchTriggerRuntimeModule = require("./ChunkPrefetchTriggerRuntimeModule");
12
- const ChunkPreloadTriggerRuntimeModule = require("./ChunkPreloadTriggerRuntimeModule");
9
+ const lazyModule = require("../util/lazyModule");
13
10
 
14
- /** @typedef {import("../Compiler")} Compiler */
11
+ /** @import Compiler from "../Compiler" */
12
+
13
+ // only a chunk graph carrying a prefetch/preload relation emits these
14
+ const getChunkPrefetchFunctionRuntimeModule = lazyModule(() =>
15
+ require("./ChunkPrefetchFunctionRuntimeModule")
16
+ );
17
+ const getChunkPrefetchStartupRuntimeModule = lazyModule(() =>
18
+ require("./ChunkPrefetchStartupRuntimeModule")
19
+ );
20
+ const getChunkPrefetchTriggerRuntimeModule = lazyModule(() =>
21
+ require("./ChunkPrefetchTriggerRuntimeModule")
22
+ );
23
+ const getChunkPreloadTriggerRuntimeModule = lazyModule(() =>
24
+ require("./ChunkPreloadTriggerRuntimeModule")
25
+ );
15
26
 
16
27
  const PLUGIN_NAME = "ChunkPrefetchPreloadPlugin";
17
28
 
@@ -40,9 +51,10 @@ class ChunkPrefetchPreloadPlugin {
40
51
  set.add(RuntimeGlobals.prefetchChunk);
41
52
  set.add(RuntimeGlobals.onChunksLoaded);
42
53
  set.add(RuntimeGlobals.exports);
43
- compilation.addRuntimeModule(
54
+ compilation.addLazyRuntimeModule(
44
55
  chunk,
45
- new ChunkPrefetchStartupRuntimeModule(startupChildChunks)
56
+ getChunkPrefetchStartupRuntimeModule,
57
+ (Ctor) => new Ctor(startupChildChunks)
46
58
  );
47
59
  }
48
60
  }
@@ -54,61 +66,66 @@ class ChunkPrefetchPreloadPlugin {
54
66
 
55
67
  if (chunkMap.prefetch) {
56
68
  set.add(RuntimeGlobals.prefetchChunk);
57
- compilation.addRuntimeModule(
69
+ compilation.addLazyRuntimeModule(
58
70
  chunk,
59
- new ChunkPrefetchTriggerRuntimeModule(chunkMap.prefetch)
71
+ getChunkPrefetchTriggerRuntimeModule,
72
+ (Ctor) => new Ctor(chunkMap.prefetch)
60
73
  );
61
74
  }
62
75
  if (chunkMap.preload) {
63
76
  set.add(RuntimeGlobals.preloadChunk);
64
- compilation.addRuntimeModule(
77
+ compilation.addLazyRuntimeModule(
65
78
  chunk,
66
- new ChunkPreloadTriggerRuntimeModule(chunkMap.preload)
79
+ getChunkPreloadTriggerRuntimeModule,
80
+ (Ctor) => new Ctor(chunkMap.preload)
67
81
  );
68
82
  }
69
83
  if (chunkMap.cssPreload) {
70
84
  // CSS-only preload (`parser.javascript.dynamicImportCssPreload`):
71
- // reuse `preloadChunk` — with no JS `preload` order the JS
72
- // handler is never registered, so only the CSS `.s` handler
73
- // fires (`<link rel="preload" as="style">`).
74
- set.add(RuntimeGlobals.preloadChunk);
85
+ // the trigger reaches the CSS `.s` handler itself
86
+ // (`<link rel="preload" as="style">`), so it asks for the handlers
87
+ // alone — nothing here calls the one that fans out over them.
75
88
  set.add(RuntimeGlobals.preloadChunkHandlers);
76
- compilation.addRuntimeModule(
89
+ compilation.addLazyRuntimeModule(
77
90
  chunk,
78
- new ChunkPreloadTriggerRuntimeModule(
79
- chunkMap.cssPreload,
80
- "cssPreload"
81
- )
91
+ getChunkPreloadTriggerRuntimeModule,
92
+ (Ctor) => new Ctor(chunkMap.cssPreload, "cssPreload")
82
93
  );
83
94
  }
84
95
  }
85
96
  );
86
- compilation.hooks.runtimeRequirementInTree
87
- .for(RuntimeGlobals.prefetchChunk)
88
- .tap(PLUGIN_NAME, (chunk, set) => {
89
- compilation.addRuntimeModule(
90
- chunk,
91
- new ChunkPrefetchFunctionRuntimeModule(
92
- "prefetch",
93
- RuntimeGlobals.prefetchChunk,
94
- RuntimeGlobals.prefetchChunkHandlers
95
- )
96
- );
97
- set.add(RuntimeGlobals.prefetchChunkHandlers);
98
- });
99
- compilation.hooks.runtimeRequirementInTree
100
- .for(RuntimeGlobals.preloadChunk)
101
- .tap(PLUGIN_NAME, (chunk, set) => {
102
- compilation.addRuntimeModule(
103
- chunk,
104
- new ChunkPrefetchFunctionRuntimeModule(
105
- "preload",
106
- RuntimeGlobals.preloadChunk,
107
- RuntimeGlobals.preloadChunkHandlers
108
- )
109
- );
110
- set.add(RuntimeGlobals.preloadChunkHandlers);
111
- });
97
+ // The handlers object is what carries the runtime module, so a chunk asking
98
+ // only for it — a trigger that reaches one handler by name — ships no
99
+ // fan-out function. Whether one is wanted is read here rather than in
100
+ // `create`, which runs after the requirement pass is over.
101
+ for (const [type, fn, handlers] of /** @type {const} */ ([
102
+ [
103
+ "prefetch",
104
+ RuntimeGlobals.prefetchChunk,
105
+ RuntimeGlobals.prefetchChunkHandlers
106
+ ],
107
+ [
108
+ "preload",
109
+ RuntimeGlobals.preloadChunk,
110
+ RuntimeGlobals.preloadChunkHandlers
111
+ ]
112
+ ])) {
113
+ compilation.hooks.runtimeRequirementInTree
114
+ .for(fn)
115
+ .tap(PLUGIN_NAME, (chunk, set) => {
116
+ set.add(handlers);
117
+ });
118
+ compilation.hooks.runtimeRequirementInTree
119
+ .for(handlers)
120
+ .tap(PLUGIN_NAME, (chunk, set) => {
121
+ const runtimeFunction = set.has(fn) ? fn : null;
122
+ compilation.addLazyRuntimeModule(
123
+ chunk,
124
+ getChunkPrefetchFunctionRuntimeModule,
125
+ (Ctor) => new Ctor(type, runtimeFunction, handlers)
126
+ );
127
+ });
128
+ }
112
129
  });
113
130
  }
114
131
  }
@@ -8,9 +8,8 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
- /** @typedef {import("../Chunk")} Chunk */
12
- /** @typedef {import("../Chunk").ChunkChildOfTypeInOrder} ChunkChildOfTypeInOrder */
13
- /** @typedef {import("../Compilation")} Compilation */
11
+ /** @import Chunk, { ChunkChildOfTypeInOrder } from "../Chunk" */
12
+ /** @import Compilation from "../Compilation" */
14
13
 
15
14
  class ChunkPrefetchStartupRuntimeModule extends RuntimeModule {
16
15
  /**
@@ -8,8 +8,8 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
- /** @typedef {import("../Compilation")} Compilation */
12
- /** @typedef {import("../Chunk").ChunkChildIdsByOrdersMap} ChunkChildIdsByOrdersMap */
11
+ /** @import Compilation from "../Compilation" */
12
+ /** @import { ChunkChildIdsByOrdersMap } from "../Chunk" */
13
13
 
14
14
  class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule {
15
15
  /**
@@ -8,8 +8,8 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
- /** @typedef {import("../Compilation")} Compilation */
12
- /** @typedef {import("../Chunk").ChunkChildIdsByOrdersMap} ChunkChildIdsByOrdersMap */
11
+ /** @import Compilation from "../Compilation" */
12
+ /** @import { ChunkChildIdsByOrdersMap } from "../Chunk" */
13
13
 
14
14
  class ChunkPreloadTriggerRuntimeModule extends RuntimeModule {
15
15
  /**