@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
@@ -5,24 +5,40 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const RuntimeGlobals = require("../RuntimeGlobals");
9
+ const RuntimeModule = require("../RuntimeModule");
8
10
  const { find } = require("../util/SetHelpers");
11
+ const { compareStrings } = require("../util/comparators");
9
12
  const AssetsOverSizeLimitWarning = require("./AssetsOverSizeLimitWarning");
10
13
  const EntrypointsOverSizeLimitWarning = require("./EntrypointsOverSizeLimitWarning");
11
14
  const NoAsyncChunksWarning = require("./NoAsyncChunksWarning");
15
+ const RuntimeInLargeChunkWarning = require("./RuntimeInLargeChunkWarning");
16
+ const getModuleSize = require("./getModuleSize");
12
17
 
13
- /** @typedef {import("webpack-sources").Source} Source */
14
- /** @typedef {import("../../declarations/WebpackOptions").PerformanceOptions} PerformanceOptions */
15
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
16
- /** @typedef {import("../Compilation").Asset} Asset */
17
- /** @typedef {import("../Compiler")} Compiler */
18
- /** @typedef {import("../Entrypoint")} Entrypoint */
19
- /** @typedef {import("../errors/WebpackError")} WebpackError */
18
+ /** @import { Source } from "webpack-sources" */
19
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
20
+ /** @import Chunk from "../Chunk" */
21
+ /** @import ChunkGraph from "../ChunkGraph" */
22
+ /** @import ChunkGroup from "../ChunkGroup" */
23
+ /** @import Compilation, { Asset } from "../Compilation" */
24
+ /** @import Compiler from "../Compiler" */
25
+ /** @import Module from "../Module" */
26
+ /** @import Entrypoint from "../Entrypoint" */
27
+ /** @import WebpackError from "../errors/WebpackError" */
28
+
29
+ /**
30
+ * Defines the module details type used by this module.
31
+ * @typedef {object} ModuleDetails
32
+ * @property {string} name
33
+ * @property {number} size
34
+ */
20
35
 
21
36
  /**
22
37
  * Defines the asset details type used by this module.
23
38
  * @typedef {object} AssetDetails
24
39
  * @property {string} name
25
40
  * @property {number} size
41
+ * @property {ModuleDetails[]=} modules
26
42
  */
27
43
 
28
44
  /**
@@ -41,6 +57,108 @@ const isOverSizeLimitSet = new WeakSet();
41
57
  /** @type {AssetFilter} */
42
58
  const excludeSourceMap = (name, source, info) => !info.development;
43
59
 
60
+ // Runtime globals whose generated code describes the other chunks, so the chunk
61
+ // holding them is rewritten whenever anything else in the build changes.
62
+ const BUILD_WIDE_RUNTIME_GLOBALS = [
63
+ RuntimeGlobals.getChunkScriptFilename,
64
+ RuntimeGlobals.getChunkCssFilename,
65
+ RuntimeGlobals.getChunkUpdateScriptFilename,
66
+ RuntimeGlobals.getFullHash,
67
+ RuntimeGlobals.getUpdateManifestFilename
68
+ ];
69
+
70
+ /**
71
+ * Tells whether an entrypoint ships its runtime inside a chunk that also carries
72
+ * modules, and that runtime describes the rest of the build. Only then does
73
+ * `optimization.runtimeChunk` win anything.
74
+ * @param {ChunkGraph} chunkGraph the chunk graph
75
+ * @param {Entrypoint} entrypoint an entrypoint
76
+ * @returns {boolean} true when splitting the runtime off would keep the chunk stable
77
+ */
78
+ const hasEmbeddedRuntime = (chunkGraph, entrypoint) => {
79
+ const runtimeChunk = entrypoint.getRuntimeChunk();
80
+ if (!runtimeChunk) return false;
81
+ // A chunk of its own carries the runtime modules and nothing else. Asking each
82
+ // module beats counting, which depends on runtime modules being counted twice.
83
+ let carriesCode = false;
84
+ for (const module of chunkGraph.getChunkModulesIterable(runtimeChunk)) {
85
+ if (!(module instanceof RuntimeModule)) {
86
+ carriesCode = true;
87
+ break;
88
+ }
89
+ }
90
+ if (!carriesCode) return false;
91
+ // The tree requirements are the ones the emitted runtime modules answer to.
92
+ const runtimeRequirements =
93
+ chunkGraph.getTreeRuntimeRequirements(runtimeChunk);
94
+ // A global nothing here names stays silent, so a new one costs a hint, not a wrong one.
95
+ return BUILD_WIDE_RUNTIME_GLOBALS.some((runtimeGlobal) =>
96
+ runtimeRequirements.has(runtimeGlobal)
97
+ );
98
+ };
99
+
100
+ // Enough to point at the culprit without turning the hint into a report.
101
+ const MAX_REPORTED_MODULES = 3;
102
+
103
+ /**
104
+ * Names the largest modules inside each oversized asset. "This file is too big"
105
+ * is only actionable once you know what fills it.
106
+ * @param {Compilation} compilation the compilation
107
+ * @param {AssetDetails[]} assetsOverSizeLimit the oversized assets, annotated in place
108
+ * @returns {void}
109
+ */
110
+ const addLargestModules = (compilation, assetsOverSizeLimit) => {
111
+ const { chunkGraph, requestShortener } = compilation;
112
+ /** @type {Map<string, Chunk[]>} */
113
+ const chunksByFile = new Map();
114
+
115
+ for (const chunk of compilation.chunks) {
116
+ // A chunk emitting several files (javascript plus extracted css, …) gives
117
+ // no way to tell which module ended up in which, so it names none.
118
+ if (chunk.files.size !== 1) continue;
119
+
120
+ for (const file of chunk.files) {
121
+ const chunks = chunksByFile.get(file);
122
+
123
+ if (chunks === undefined) {
124
+ chunksByFile.set(file, [chunk]);
125
+ } else {
126
+ chunks.push(chunk);
127
+ }
128
+ }
129
+ }
130
+
131
+ for (const asset of assetsOverSizeLimit) {
132
+ const chunks = chunksByFile.get(asset.name);
133
+
134
+ // An asset a loader or plugin emitted belongs to no chunk, so nothing
135
+ // describes its contents; likewise one whose chunk emits several files.
136
+ if (chunks === undefined) continue;
137
+
138
+ /** @type {Set<Module>} */
139
+ const seen = new Set();
140
+ /** @type {ModuleDetails[]} */
141
+ const modules = [];
142
+
143
+ for (const chunk of chunks) {
144
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
145
+ if (seen.has(module)) continue;
146
+ seen.add(module);
147
+ modules.push({
148
+ name: module.readableIdentifier(requestShortener),
149
+ size: getModuleSize(module)
150
+ });
151
+ }
152
+ }
153
+
154
+ if (modules.length === 0) continue;
155
+
156
+ // Ties break by name: which modules finish first is not stable.
157
+ modules.sort((a, b) => b.size - a.size || compareStrings(a.name, b.name));
158
+ asset.modules = modules.slice(0, MAX_REPORTED_MODULES);
159
+ }
160
+ };
161
+
44
162
  const PLUGIN_NAME = "SizeLimitsPlugin";
45
163
 
46
164
  module.exports = class SizeLimitsPlugin {
@@ -132,6 +250,8 @@ module.exports = class SizeLimitsPlugin {
132
250
 
133
251
  /** @type {EntrypointDetails[]} */
134
252
  const entrypointsOverLimit = [];
253
+ /** @type {string[]} */
254
+ const entrypointsWithEmbeddedRuntime = [];
135
255
  for (const [name, entry] of compilation.entrypoints) {
136
256
  const size = getEntrypointSize(entry);
137
257
 
@@ -142,6 +262,9 @@ module.exports = class SizeLimitsPlugin {
142
262
  files: entry.getFiles().filter(fileFilter)
143
263
  });
144
264
  isOverSizeLimitSet.add(entry);
265
+ if (hasEmbeddedRuntime(compilation.chunkGraph, entry)) {
266
+ entrypointsWithEmbeddedRuntime.push(name);
267
+ }
145
268
  }
146
269
  }
147
270
 
@@ -151,6 +274,7 @@ module.exports = class SizeLimitsPlugin {
151
274
  // 3. No Async Chunks
152
275
  // if !1, then 2, if !2 return
153
276
  if (assetsOverSizeLimit.length > 0) {
277
+ addLargestModules(compilation, assetsOverSizeLimit);
154
278
  warnings.push(
155
279
  new AssetsOverSizeLimitWarning(
156
280
  assetsOverSizeLimit,
@@ -177,8 +301,16 @@ module.exports = class SizeLimitsPlugin {
177
301
  warnings.push(new NoAsyncChunksWarning());
178
302
  }
179
303
 
304
+ if (entrypointsWithEmbeddedRuntime.length > 0) {
305
+ warnings.push(
306
+ new RuntimeInLargeChunkWarning(entrypointsWithEmbeddedRuntime)
307
+ );
308
+ }
309
+
180
310
  if (hints === "error") {
181
311
  compilation.errors.push(...warnings);
312
+ } else if (hints === "stats") {
313
+ compilation.hints.push(...warnings);
182
314
  } else {
183
315
  compilation.warnings.push(...warnings);
184
316
  }
@@ -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 SplitChunksCappedWarning = require("../errors/SplitChunksCappedWarning");
9
+ const { getCappedSplits } = require("../optimize/SplitChunksPlugin");
10
+ const { compareStrings } = require("../util/comparators");
11
+
12
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
13
+ /** @import Compiler from "../Compiler" */
14
+ /** @import { CappedSplitDetails } from "../errors/SplitChunksCappedWarning" */
15
+
16
+ const PLUGIN_NAME = "SplitChunksCappedPlugin";
17
+
18
+ // Enough to name the offenders without printing the chunk graph.
19
+ const MAX_REPORTED_SPLITS = 5;
20
+
21
+ class SplitChunksCappedPlugin {
22
+ /**
23
+ * Creates an instance of SplitChunksCappedPlugin.
24
+ * @param {PerformanceOptions} options the plugin options
25
+ */
26
+ constructor(options) {
27
+ /** @type {PerformanceOptions["hints"]} */
28
+ this.hints = options.hints;
29
+ }
30
+
31
+ /**
32
+ * Applies the plugin by registering its hooks on the compiler.
33
+ * @param {Compiler} compiler the compiler instance
34
+ * @returns {void}
35
+ */
36
+ apply(compiler) {
37
+ const hints = this.hints;
38
+
39
+ if (!hints) return;
40
+
41
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
42
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
43
+ const recorded = getCappedSplits(compilation);
44
+
45
+ if (recorded === undefined || recorded.length === 0) return;
46
+
47
+ /** @type {Map<string, CappedSplitDetails>} */
48
+ const splits = new Map();
49
+
50
+ for (const split of recorded) {
51
+ // Chunk ids only exist after seal, and the queue reconsiders a
52
+ // refused split, so the same one is recorded several times.
53
+ const chunk = split.chunk.name || `${split.chunk.id}`;
54
+ const key = `${split.cacheGroup} ${chunk} ${split.limit}`;
55
+ const previous = splits.get(key);
56
+
57
+ if (previous !== undefined && previous.modules >= split.modules) {
58
+ continue;
59
+ }
60
+
61
+ splits.set(key, {
62
+ cacheGroup: split.cacheGroup,
63
+ chunk,
64
+ limit: split.limit,
65
+ maxRequests: split.maxRequests,
66
+ modules: split.modules
67
+ });
68
+ }
69
+
70
+ // Held only to be reported: nothing needs the chunks after this.
71
+ recorded.length = 0;
72
+
73
+ const details = [...splits.values()];
74
+
75
+ // Ties break by name: the order splits are refused in is not stable.
76
+ details.sort(
77
+ (a, b) =>
78
+ b.modules - a.modules ||
79
+ compareStrings(a.cacheGroup, b.cacheGroup) ||
80
+ compareStrings(a.chunk, b.chunk)
81
+ );
82
+
83
+ const warning = new SplitChunksCappedWarning(
84
+ details.slice(0, MAX_REPORTED_SPLITS)
85
+ );
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 = SplitChunksCappedPlugin;
@@ -0,0 +1,128 @@
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 TinyChunksWarning = require("../errors/TinyChunksWarning");
9
+ const { compareStrings } = require("../util/comparators");
10
+
11
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { TinyChunkDetails } from "../errors/TinyChunksWarning" */
14
+
15
+ const PLUGIN_NAME = "TinyChunksPlugin";
16
+
17
+ // Enough to name the offenders without printing the chunk graph.
18
+ const MAX_REPORTED_CHUNKS = 5;
19
+
20
+ // One small chunk is a lazy route; a crowd of them is a request pattern, and
21
+ // only then does grouping them save more than it costs.
22
+ const MIN_REPORTED_CHUNKS = 10;
23
+
24
+ // What `splitChunks.minSize` falls back to when it is absent or given per
25
+ // source type rather than as one number.
26
+ const DEFAULT_MIN_SIZE = 20000;
27
+
28
+ class TinyChunksPlugin {
29
+ /**
30
+ * Creates an instance of TinyChunksPlugin.
31
+ * @param {PerformanceOptions} options the plugin options
32
+ */
33
+ constructor(options) {
34
+ /** @type {PerformanceOptions["hints"]} */
35
+ this.hints = options.hints;
36
+ }
37
+
38
+ /**
39
+ * Applies the plugin by registering its hooks on the compiler.
40
+ * @param {Compiler} compiler the compiler instance
41
+ * @returns {void}
42
+ */
43
+ apply(compiler) {
44
+ const hints = this.hints;
45
+
46
+ if (!hints) return;
47
+
48
+ const { splitChunks } = compiler.options.optimization;
49
+ const configured = splitChunks && splitChunks.minSize;
50
+
51
+ /**
52
+ * Read from `splitChunks.minSize`, so raising the size worth splitting
53
+ * raises what counts as too small. Either one number or one per type.
54
+ * @param {string} sourceType the type in question
55
+ * @returns {number} the floor below which a chunk of it is too small
56
+ */
57
+ const minSizeFor = (sourceType) => {
58
+ if (typeof configured === "number") return configured;
59
+
60
+ if (configured) {
61
+ const forType = configured[sourceType];
62
+
63
+ if (typeof forType === "number") return forType;
64
+ }
65
+
66
+ return DEFAULT_MIN_SIZE;
67
+ };
68
+
69
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
70
+ // `afterSeal` is past the hash, which folds every message into it — a
71
+ // hint reported earlier would change the build's identity.
72
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
73
+ const { chunkGraph } = compilation;
74
+ /** @type {TinyChunkDetails[]} */
75
+ const tiny = [];
76
+ let totalSize = 0;
77
+
78
+ for (const chunk of compilation.chunks) {
79
+ // An initial chunk is downloaded whatever its size; only one fetched
80
+ // on demand costs a request of its own.
81
+ if (chunk.canBeInitial()) continue;
82
+
83
+ const sizes = chunkGraph.getChunkModulesSizes(chunk);
84
+ const types = Object.keys(sizes);
85
+
86
+ if (types.length === 0) continue;
87
+
88
+ // Under its own floor for every type it carries: a chunk holding
89
+ // enough of any one of them is worth the request it costs.
90
+ let size = 0;
91
+ let small = true;
92
+
93
+ for (const type of types) {
94
+ size += sizes[type];
95
+
96
+ if (sizes[type] >= minSizeFor(type)) small = false;
97
+ }
98
+
99
+ if (!small) continue;
100
+
101
+ totalSize += size;
102
+ tiny.push({ name: chunk.name || `${chunk.id}`, size });
103
+ }
104
+
105
+ if (tiny.length < MIN_REPORTED_CHUNKS) return;
106
+
107
+ // Smallest first, and ties break by name: chunk order is not stable.
108
+ tiny.sort((a, b) => a.size - b.size || compareStrings(a.name, b.name));
109
+
110
+ const warning = new TinyChunksWarning(
111
+ tiny.slice(0, MAX_REPORTED_CHUNKS),
112
+ tiny.length,
113
+ totalSize
114
+ );
115
+
116
+ if (hints === "error") {
117
+ compilation.errors.push(warning);
118
+ } else if (hints === "stats") {
119
+ compilation.hints.push(warning);
120
+ } else {
121
+ compilation.warnings.push(warning);
122
+ }
123
+ });
124
+ });
125
+ }
126
+ }
127
+
128
+ module.exports = TinyChunksPlugin;
@@ -0,0 +1,208 @@
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 {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("../ModuleTypeConstants");
13
+ const TopLevelThisWarning = require("../errors/TopLevelThisWarning");
14
+ const { compareStrings } = require("../util/comparators");
15
+ const getSourceModules = require("./getSourceModules");
16
+
17
+ /** @import { Program } from "estree" */
18
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
19
+ /** @import Compiler from "../Compiler" */
20
+ /** @import Module from "../Module" */
21
+ /** @import { BuildInfo } from "../Module" */
22
+ /** @import JavascriptParser from "../javascript/JavascriptParser" */
23
+ /** @import { TopLevelThisDetails } from "../errors/TopLevelThisWarning" */
24
+
25
+ const PLUGIN_NAME = "TopLevelThisPlugin";
26
+
27
+ // Enough to name the offenders without listing every module.
28
+ const MAX_REPORTED_MODULES = 5;
29
+
30
+ // Bodies that rebind `this`; everything else keeps the enclosing one, so an
31
+ // arrow function at the top level still reads the module's `this`.
32
+ const REBINDS_THIS = new Set(["FunctionDeclaration", "FunctionExpression"]);
33
+
34
+ // A class rebinds `this` in its body, but its heritage clause and computed
35
+ // keys are evaluated where the class is written.
36
+ const CLASS_TYPES = new Set(["ClassDeclaration", "ClassExpression"]);
37
+
38
+ /**
39
+ * Counts the reads of `this` that reach the top level of a program.
40
+ * @param {Program} ast the program
41
+ * @returns {number} how many there are
42
+ */
43
+ const countTopLevelThis = (ast) => {
44
+ let count = 0;
45
+ /** @type {unknown[]} */
46
+ const queue = [ast];
47
+
48
+ while (queue.length > 0) {
49
+ const node = queue.pop();
50
+
51
+ if (!node || typeof node !== "object") continue;
52
+
53
+ if (Array.isArray(node)) {
54
+ for (const item of /** @type {unknown[]} */ (node)) queue.push(item);
55
+ continue;
56
+ }
57
+
58
+ // Walked structurally rather than per node type, so a node the estree
59
+ // types do not name is still reached.
60
+ const fields = /** @type {Record<string, unknown>} */ (node);
61
+ const { type } = fields;
62
+
63
+ if (typeof type !== "string") continue;
64
+ if (REBINDS_THIS.has(type)) continue;
65
+
66
+ if (type === "ThisExpression") {
67
+ count++;
68
+ continue;
69
+ }
70
+
71
+ if (CLASS_TYPES.has(type)) {
72
+ queue.push(fields.superClass);
73
+
74
+ const body = /** @type {EXPECTED_ANY} */ (fields.body);
75
+
76
+ for (const element of (body && body.body) || []) {
77
+ if (element.computed) queue.push(element.key);
78
+ }
79
+
80
+ continue;
81
+ }
82
+
83
+ for (const key of Object.keys(fields)) {
84
+ if (key !== "range" && key !== "loc") queue.push(fields[key]);
85
+ }
86
+ }
87
+
88
+ return count;
89
+ };
90
+
91
+ class TopLevelThisPlugin {
92
+ /**
93
+ * Creates an instance of TopLevelThisPlugin.
94
+ * @param {PerformanceOptions} options the plugin options
95
+ */
96
+ constructor(options) {
97
+ /** @type {PerformanceOptions["hints"]} */
98
+ this.hints = options.hints;
99
+ }
100
+
101
+ /**
102
+ * Applies the plugin by registering its hooks on the compiler.
103
+ * @param {Compiler} compiler the compiler instance
104
+ * @returns {void}
105
+ */
106
+ apply(compiler) {
107
+ const hints = this.hints;
108
+
109
+ if (!hints) return;
110
+
111
+ compiler.hooks.compilation.tap(
112
+ PLUGIN_NAME,
113
+ (compilation, { normalModuleFactory }) => {
114
+ /**
115
+ * @param {JavascriptParser} parser the parser
116
+ * @returns {void}
117
+ */
118
+ const handler = (parser) => {
119
+ parser.hooks.program.tap(PLUGIN_NAME, (ast) => {
120
+ // Only ES modules: in CommonJS `this` is `module.exports`, which
121
+ // is what the code reading it means.
122
+ const buildMeta = parser.state.module.buildMeta;
123
+
124
+ if (!buildMeta || buildMeta.exportsType !== "namespace") return;
125
+
126
+ const count = countTopLevelThis(ast);
127
+
128
+ if (count === 0) return;
129
+
130
+ // Kept on the module rather than in a map here, so a module the
131
+ // filesystem cache restores rather than parses still reports.
132
+ const buildInfo =
133
+ /** @type {BuildInfo} */
134
+ (parser.state.module.buildInfo);
135
+
136
+ buildInfo.topLevelThis = count;
137
+ });
138
+ };
139
+
140
+ normalModuleFactory.hooks.parser
141
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
142
+ .tap(PLUGIN_NAME, handler);
143
+ normalModuleFactory.hooks.parser
144
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
145
+ .tap(PLUGIN_NAME, handler);
146
+ normalModuleFactory.hooks.parser
147
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
148
+ .tap(PLUGIN_NAME, handler);
149
+
150
+ // `afterSeal` is past the hash, which folds every message into it — a
151
+ // hint reported earlier would change the build's identity.
152
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
153
+ /** @type {TopLevelThisDetails[]} */
154
+ const modules = [];
155
+ let total = 0;
156
+
157
+ // A module can be reached both on its own and inside a
158
+ // concatenation, so it is only counted the first time.
159
+ /** @type {Set<Module>} */
160
+ const seen = new Set();
161
+
162
+ for (const parent of compilation.modules) {
163
+ // Scope hoisting makes several modules into one, and the evidence
164
+ // sits on the ones that were parsed.
165
+ for (const module of getSourceModules(parent)) {
166
+ if (seen.has(module)) continue;
167
+
168
+ seen.add(module);
169
+
170
+ const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
171
+ const count = buildInfo.topLevelThis;
172
+
173
+ if (!count) continue;
174
+
175
+ total += count;
176
+ modules.push({
177
+ name: module.readableIdentifier(compilation.requestShortener),
178
+ count
179
+ });
180
+ }
181
+ }
182
+
183
+ if (modules.length === 0) return;
184
+
185
+ // Most first; ties break by name, module order is not stable.
186
+ modules.sort(
187
+ (a, b) => b.count - a.count || compareStrings(a.name, b.name)
188
+ );
189
+
190
+ const warning = new TopLevelThisWarning(
191
+ modules.slice(0, MAX_REPORTED_MODULES),
192
+ total
193
+ );
194
+
195
+ if (hints === "error") {
196
+ compilation.errors.push(warning);
197
+ } else if (hints === "stats") {
198
+ compilation.hints.push(warning);
199
+ } else {
200
+ compilation.warnings.push(warning);
201
+ }
202
+ });
203
+ }
204
+ );
205
+ }
206
+ }
207
+
208
+ module.exports = TopLevelThisPlugin;