@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,115 @@
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 EvalUsageWarning = require("../errors/EvalUsageWarning");
14
+ const { compareStrings } = require("../util/comparators");
15
+
16
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
17
+ /** @import Compiler from "../Compiler" */
18
+ /** @import { BuildInfo } from "../Module" */
19
+ /** @import JavascriptParser from "../javascript/JavascriptParser" */
20
+
21
+ const PLUGIN_NAME = "EvalUsagePlugin";
22
+
23
+ // Enough to name the offenders without listing the graph.
24
+ const MAX_REPORTED_MODULES = 5;
25
+
26
+ class EvalUsagePlugin {
27
+ /**
28
+ * Creates an instance of EvalUsagePlugin.
29
+ * @param {PerformanceOptions} options the plugin options
30
+ */
31
+ constructor(options) {
32
+ /** @type {PerformanceOptions["hints"]} */
33
+ this.hints = options.hints;
34
+ }
35
+
36
+ /**
37
+ * Applies the plugin by registering its hooks on the compiler.
38
+ * @param {Compiler} compiler the compiler instance
39
+ * @returns {void}
40
+ */
41
+ apply(compiler) {
42
+ const hints = this.hints;
43
+
44
+ if (!hints) return;
45
+
46
+ compiler.hooks.compilation.tap(
47
+ PLUGIN_NAME,
48
+ (compilation, { normalModuleFactory }) => {
49
+ /**
50
+ * @param {JavascriptParser} parser the parser
51
+ */
52
+ const handler = (parser) => {
53
+ // Only a call of the name itself is a direct eval; `(0, eval)()` and
54
+ // `globalThis.eval()` run in global scope and reach no local name.
55
+ parser.hooks.call.for("eval").tap(PLUGIN_NAME, () => {
56
+ // Kept on the module rather than in a map here, so a module the
57
+ // filesystem cache restores rather than parses still reports.
58
+ const buildInfo = /** @type {BuildInfo} */ (
59
+ parser.state.module.buildInfo
60
+ );
61
+
62
+ buildInfo.usesEval = true;
63
+ });
64
+ };
65
+
66
+ normalModuleFactory.hooks.parser
67
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
68
+ .tap(PLUGIN_NAME, handler);
69
+ normalModuleFactory.hooks.parser
70
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
71
+ .tap(PLUGIN_NAME, handler);
72
+ normalModuleFactory.hooks.parser
73
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
74
+ .tap(PLUGIN_NAME, handler);
75
+
76
+ // `afterSeal` is past the hash, which folds every message into it — a
77
+ // hint reported earlier would change the build's identity.
78
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
79
+ const { requestShortener } = compilation;
80
+ /** @type {string[]} */
81
+ const callers = [];
82
+
83
+ for (const module of compilation.modules) {
84
+ // Every built module carries one, so only the field is in question.
85
+ const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
86
+
87
+ if (!buildInfo.usesEval) continue;
88
+
89
+ callers.push(module.readableIdentifier(requestShortener));
90
+ }
91
+
92
+ if (callers.length === 0) return;
93
+
94
+ // Sorted by name: module order is not stable across runs.
95
+ callers.sort(compareStrings);
96
+
97
+ const warning = new EvalUsageWarning(
98
+ callers.slice(0, MAX_REPORTED_MODULES),
99
+ callers.length
100
+ );
101
+
102
+ if (hints === "error") {
103
+ compilation.errors.push(warning);
104
+ } else if (hints === "stats") {
105
+ compilation.hints.push(warning);
106
+ } else {
107
+ compilation.warnings.push(warning);
108
+ }
109
+ });
110
+ }
111
+ );
112
+ }
113
+ }
114
+
115
+ module.exports = EvalUsagePlugin;
@@ -0,0 +1,296 @@
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 NormalModule = require("../NormalModule");
9
+ const HotspotsWarning = require("../errors/HotspotsWarning");
10
+ const { LOADER_TIMING } = require("../loaders/LoaderRunner");
11
+ const { compareStrings } = require("../util/comparators");
12
+ const { contextify } = require("../util/identifier");
13
+
14
+ /** @typedef {import("tapable").FullTap} FullTap */
15
+ /** @typedef {import("../../declarations/WebpackOptions").PerformanceOptions} PerformanceOptions */
16
+ /** @typedef {import("../Compiler")} Compiler */
17
+ /** @typedef {import("../errors/HotspotsWarning").HookDetails} HookDetails */
18
+ /** @typedef {import("../errors/HotspotsWarning").HotspotDetails} HotspotDetails */
19
+
20
+ const PLUGIN_NAME = "HotspotsPlugin";
21
+
22
+ // Enough to name the offenders without listing the whole build.
23
+ const MAX_REPORTED_HOTSPOTS = 5;
24
+ const MAX_REPORTED_HOOKS = 3;
25
+
26
+ // Below this nothing is waiting on it, and naming it would bury what is.
27
+ const MIN_REPORTED_MS = 100;
28
+
29
+ // Ahead of every other `compilation` tap: the counters are reset there, and
30
+ // anything measured before that reset would be thrown away by it.
31
+ const INTERCEPT_STAGE = -10000;
32
+
33
+ const NS_PER_MS = 1e6;
34
+ const MS_PER_SECOND = 1000;
35
+
36
+ /**
37
+ * @param {[number, number]} start what `process.hrtime()` returned
38
+ * @returns {number} milliseconds since then
39
+ */
40
+ const msSince = (start) => {
41
+ const [seconds, nanoseconds] = process.hrtime(start);
42
+
43
+ return seconds * MS_PER_SECOND + nanoseconds / NS_PER_MS;
44
+ };
45
+
46
+ /**
47
+ * @param {Map<string, { ms: number, runs: number }>} map where the time is kept
48
+ * @param {string} key what ran
49
+ * @param {number} ms how long its own code took
50
+ * @returns {void}
51
+ */
52
+ const charge = (map, key, ms) => {
53
+ const spent = map.get(key);
54
+
55
+ if (spent === undefined) {
56
+ map.set(key, { ms, runs: 1 });
57
+ return;
58
+ }
59
+
60
+ spent.ms += ms;
61
+ spent.runs++;
62
+ };
63
+
64
+ class HotspotsPlugin {
65
+ /**
66
+ * Creates an instance of HotspotsPlugin.
67
+ * @param {PerformanceOptions} options the plugin options
68
+ */
69
+ constructor(options) {
70
+ /** @type {PerformanceOptions["hints"]} */
71
+ this.hints = options.hints;
72
+ }
73
+
74
+ /**
75
+ * Applies the plugin by registering its hooks on the compiler.
76
+ * @param {Compiler} compiler the compiler instance
77
+ * @returns {void}
78
+ */
79
+ apply(compiler) {
80
+ const hints = this.hints;
81
+
82
+ if (!hints) return;
83
+
84
+ /** @typedef {{ ms: number, runs: number }} Spent */
85
+ // Kept per kind: a loader and a plugin could otherwise share a name and
86
+ // have their runs counted together.
87
+ /** @type {Map<string, Spent>} */
88
+ const pluginTime = new Map();
89
+ /** @type {Map<string, Spent>} */
90
+ const loaderTime = new Map();
91
+ /** @type {Map<string, number>} */
92
+ const hookTime = new Map();
93
+ // One frame per thing currently running, innermost last. Only the innermost
94
+ // is charged, so whatever calls out to something else is not billed for it.
95
+ /** @type {{ child: number }[]} */
96
+ const running = [];
97
+
98
+ /**
99
+ * Runs one loader or tap, charging it its own work alone.
100
+ * @template T
101
+ * @param {Map<string, { ms: number, runs: number }>} map where its time is kept
102
+ * @param {string} name what is running
103
+ * @param {string | undefined} hookName the hook it runs under, if any
104
+ * @param {() => T} run the work, already bound to its arguments
105
+ * @returns {T} whatever it returned
106
+ */
107
+ const measure = (map, name, hookName, run) => {
108
+ const frame = { child: 0 };
109
+
110
+ running.push(frame);
111
+
112
+ const start = process.hrtime();
113
+
114
+ try {
115
+ return run();
116
+ } finally {
117
+ const elapsed = msSince(start);
118
+ const own = elapsed - frame.child;
119
+
120
+ running.pop();
121
+ charge(map, name, own);
122
+
123
+ if (hookName !== undefined) {
124
+ hookTime.set(hookName, (hookTime.get(hookName) || 0) + own);
125
+ }
126
+
127
+ if (running.length > 0) {
128
+ running[running.length - 1].child += elapsed;
129
+ }
130
+ }
131
+ };
132
+
133
+ /**
134
+ * @param {string} hookName the hook being tapped
135
+ * @returns {(tapInfo: FullTap) => FullTap} an interceptor for it
136
+ */
137
+ const registerFor = (hookName) => (tapInfo) => {
138
+ const { name, type, fn } = tapInfo;
139
+
140
+ if (name === PLUGIN_NAME) return tapInfo;
141
+
142
+ if (type === "async") {
143
+ return {
144
+ ...tapInfo,
145
+ /**
146
+ * @param {EXPECTED_ANY[]} args the tap's arguments, callback last
147
+ * @returns {EXPECTED_ANY} whatever the tap returned
148
+ */
149
+ fn: (...args) => {
150
+ const callback = args.pop();
151
+
152
+ /**
153
+ * @param {EXPECTED_ANY[]} result what the tap reported
154
+ * @returns {EXPECTED_ANY} whatever the callback returned
155
+ */
156
+ const finish = (...result) =>
157
+ measure(pluginTime, name, hookName, () => callback(...result));
158
+
159
+ // The completion callback is the plugin's own code as well, so it
160
+ // is charged to the plugin rather than to whoever resumed it.
161
+ return measure(pluginTime, name, hookName, () =>
162
+ /** @type {EXPECTED_FUNCTION} */ (fn)(...args, finish)
163
+ );
164
+ }
165
+ };
166
+ }
167
+
168
+ return {
169
+ ...tapInfo,
170
+ /**
171
+ * @param {EXPECTED_ANY[]} args the tap's arguments
172
+ * @returns {EXPECTED_ANY} whatever the tap returned
173
+ */
174
+ fn: (...args) =>
175
+ measure(pluginTime, name, hookName, () =>
176
+ /** @type {EXPECTED_FUNCTION} */ (fn)(...args)
177
+ )
178
+ };
179
+ };
180
+
181
+ /**
182
+ * @param {EXPECTED_ANY} instance anything carrying tapable hooks
183
+ * @returns {void}
184
+ */
185
+ const interceptAll = (instance) => {
186
+ for (const hookName of Object.keys(instance.hooks)) {
187
+ const descriptor = Object.getOwnPropertyDescriptor(
188
+ instance.hooks,
189
+ hookName
190
+ );
191
+
192
+ // A hook kept only as an alias for one that moved is an accessor, and
193
+ // reading it is what prints the deprecation — so it is never read.
194
+ if (!descriptor || descriptor.get) continue;
195
+
196
+ const hook = descriptor.value;
197
+
198
+ // A deprecated hook kept as a stand-in throws when intercepted.
199
+ if (hook && !hook._fakeHook && typeof hook.intercept === "function") {
200
+ hook.intercept({ register: registerFor(hookName) });
201
+ }
202
+ }
203
+ };
204
+
205
+ interceptAll(compiler);
206
+
207
+ compiler.hooks.compilation.tap(
208
+ { name: PLUGIN_NAME, stage: INTERCEPT_STAGE },
209
+ (compilation, { normalModuleFactory, contextModuleFactory }) => {
210
+ // Each build reports its own time. Watching keeps the compiler, so
211
+ // without this every rebuild would add to the one before it.
212
+ pluginTime.clear();
213
+ loaderTime.clear();
214
+ hookTime.clear();
215
+ running.length = 0;
216
+
217
+ interceptAll(compilation);
218
+ interceptAll(normalModuleFactory);
219
+ interceptAll(contextModuleFactory);
220
+
221
+ const context = compiler.context;
222
+
223
+ // Loaders are not taps, so they are measured where they run instead.
224
+ NormalModule.getCompilationHooks(compilation).loader.tap(
225
+ PLUGIN_NAME,
226
+ (loaderContext) => {
227
+ /** @type {EXPECTED_ANY} */
228
+ (loaderContext)[LOADER_TIMING] =
229
+ /**
230
+ * @param {{ path: string }} loader the loader about to run
231
+ * @param {() => EXPECTED_ANY} run its own execution
232
+ * @returns {EXPECTED_ANY} whatever it returned
233
+ */
234
+ (loader, run) =>
235
+ measure(
236
+ loaderTime,
237
+ contextify(context, loader.path, compiler.root),
238
+ undefined,
239
+ run
240
+ );
241
+ }
242
+ );
243
+ }
244
+ );
245
+
246
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
247
+ // `afterSeal` is past the hash, which folds every message into it — a
248
+ // hint reported earlier would change the build's identity.
249
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
250
+ /** @type {HotspotDetails[]} */
251
+ const hotspots = [];
252
+
253
+ // Loaders and plugins never name the same thing, so one ranking over
254
+ // both double counts nothing.
255
+ for (const [kind, map] of /** @type {const} */ ([
256
+ ["loader", loaderTime],
257
+ ["plugin", pluginTime]
258
+ ])) {
259
+ for (const [name, spent] of map) {
260
+ if (spent.ms < MIN_REPORTED_MS) continue;
261
+
262
+ hotspots.push({ kind, name, ms: spent.ms, runs: spent.runs });
263
+ }
264
+ }
265
+
266
+ if (hotspots.length === 0) return;
267
+
268
+ // Ties break by name, though two rarely take the same time.
269
+ hotspots.sort((a, b) => b.ms - a.ms || compareStrings(a.name, b.name));
270
+
271
+ /** @type {HookDetails[]} */
272
+ const hooks = [...hookTime]
273
+ .filter(([, ms]) => ms >= MIN_REPORTED_MS)
274
+ .map(([name, ms]) => ({ name, ms }))
275
+ .sort((a, b) => b.ms - a.ms || compareStrings(a.name, b.name))
276
+ .slice(0, MAX_REPORTED_HOOKS);
277
+
278
+ const warning = new HotspotsWarning(
279
+ hotspots.slice(0, MAX_REPORTED_HOTSPOTS),
280
+ hotspots.length,
281
+ hooks
282
+ );
283
+
284
+ if (hints === "error") {
285
+ compilation.errors.push(warning);
286
+ } else if (hints === "stats") {
287
+ compilation.hints.push(warning);
288
+ } else {
289
+ compilation.warnings.push(warning);
290
+ }
291
+ });
292
+ });
293
+ }
294
+ }
295
+
296
+ module.exports = HotspotsPlugin;
@@ -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 InlinedAssetsWarning = require("../errors/InlinedAssetsWarning");
9
+ const { compareStrings } = require("../util/comparators");
10
+ const getModuleSize = require("./getModuleSize");
11
+
12
+ /** @import { AssetModuleBuildInfo } from "../asset/AssetModule" */
13
+ /** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
14
+ /** @import Compiler from "../Compiler" */
15
+ /** @import { InlinedAssetDetails } from "../errors/InlinedAssetsWarning" */
16
+
17
+ const PLUGIN_NAME = "InlinedAssetsPlugin";
18
+
19
+ // Enough to name the offenders without listing every icon.
20
+ const MAX_REPORTED_ASSETS = 5;
21
+
22
+ // What the asset modules default `dataUrlCondition.maxSize` is: below it,
23
+ // inlining saves a request for less than it costs in bytes.
24
+ const DEFAULT_MAX_SIZE = 8096;
25
+
26
+ class InlinedAssetsPlugin {
27
+ /**
28
+ * Creates an instance of InlinedAssetsPlugin.
29
+ * @param {PerformanceOptions} options the plugin options
30
+ */
31
+ constructor(options) {
32
+ /** @type {PerformanceOptions["hints"]} */
33
+ this.hints = options.hints;
34
+ }
35
+
36
+ /**
37
+ * Applies the plugin by registering its hooks on the compiler.
38
+ * @param {Compiler} compiler the compiler instance
39
+ * @returns {void}
40
+ */
41
+ apply(compiler) {
42
+ const hints = this.hints;
43
+
44
+ if (!hints) return;
45
+
46
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
47
+ // `afterSeal` is past the hash, which folds every message into it — a
48
+ // hint reported earlier would change the build's identity.
49
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
50
+ /** @type {InlinedAssetDetails[]} */
51
+ const assets = [];
52
+ let total = 0;
53
+
54
+ for (const module of compilation.modules) {
55
+ // The parser records whether it inlined, so this asks rather than
56
+ // deciding from the module's type what it must have done.
57
+ const buildInfo =
58
+ /** @type {AssetModuleBuildInfo} */
59
+ (module.buildInfo);
60
+
61
+ if (!buildInfo.dataUrl) continue;
62
+
63
+ // Module sizes are estimates and come back fractional.
64
+ const size = Math.round(getModuleSize(module));
65
+
66
+ if (size <= DEFAULT_MAX_SIZE) continue;
67
+
68
+ total += size;
69
+ assets.push({
70
+ name: module.readableIdentifier(compilation.requestShortener),
71
+ size
72
+ });
73
+ }
74
+
75
+ if (assets.length === 0) return;
76
+
77
+ // Largest first; ties break by name, module order is not stable.
78
+ assets.sort(
79
+ (a, b) => b.size - a.size || compareStrings(a.name, b.name)
80
+ );
81
+
82
+ const warning = new InlinedAssetsWarning(
83
+ assets.slice(0, MAX_REPORTED_ASSETS),
84
+ total
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 = InlinedAssetsPlugin;
@@ -0,0 +1,126 @@
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 LargeModulesWarning = require("../errors/LargeModulesWarning");
9
+ const { compareStrings } = require("../util/comparators");
10
+ const getModuleSize = require("./getModuleSize");
11
+ const getSourceModules = require("./getSourceModules");
12
+
13
+ /** @typedef {import("../../declarations/WebpackOptions").PerformanceOptions} PerformanceOptions */
14
+ /** @typedef {import("../Compiler")} Compiler */
15
+ /** @typedef {import("../Module")} Module */
16
+ /** @typedef {import("../errors/LargeModulesWarning").LargeModuleDetails} LargeModuleDetails */
17
+
18
+ const PLUGIN_NAME = "LargeModulesPlugin";
19
+
20
+ // Enough to name the offenders without listing the module graph.
21
+ const MAX_REPORTED_MODULES = 5;
22
+
23
+ // Half of a chunk in a single module is where the chunk really is that module.
24
+ // Below it the weight is spread around and there is nothing single to act on.
25
+ const DOMINANT_SHARE = 0.5;
26
+
27
+ // Scaled to the asset budget rather than fixed, so raising `maxAssetSize`
28
+ // raises what counts as big enough to be worth naming.
29
+ const MIN_SHARE_OF_ASSET_LIMIT = 0.2;
30
+
31
+ class LargeModulesPlugin {
32
+ /**
33
+ * Creates an instance of LargeModulesPlugin.
34
+ * @param {PerformanceOptions} options the plugin options
35
+ */
36
+ constructor(options) {
37
+ /** @type {PerformanceOptions["hints"]} */
38
+ this.hints = options.hints;
39
+ /** @type {PerformanceOptions["maxAssetSize"]} */
40
+ this.maxAssetSize = options.maxAssetSize;
41
+ }
42
+
43
+ /**
44
+ * Applies the plugin by registering its hooks on the compiler.
45
+ * @param {Compiler} compiler the compiler instance
46
+ * @returns {void}
47
+ */
48
+ apply(compiler) {
49
+ const hints = this.hints;
50
+
51
+ if (!hints) return;
52
+
53
+ const minSize =
54
+ /** @type {number} */ (this.maxAssetSize) * MIN_SHARE_OF_ASSET_LIMIT;
55
+
56
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
57
+ // `afterSeal` is past the hash, which folds every message into it — a
58
+ // hint reported earlier would change the build's identity.
59
+ compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
60
+ const { chunkGraph, requestShortener } = compilation;
61
+ /** @type {Map<Module, LargeModuleDetails>} */
62
+ const worst = new Map();
63
+
64
+ for (const chunk of compilation.chunks) {
65
+ const chunkName = chunk.name || `${chunk.id}`;
66
+ /** @type {Map<Module, number>} */
67
+ const sizes = new Map();
68
+ let chunkSize = 0;
69
+
70
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
71
+ // Through scope hoisting one module stands for the several it
72
+ // absorbed, and it is those the report has to name.
73
+ for (const inner of getSourceModules(module)) {
74
+ const size = getModuleSize(inner);
75
+
76
+ sizes.set(inner, (sizes.get(inner) || 0) + size);
77
+ chunkSize += size;
78
+ }
79
+ }
80
+
81
+ for (const [module, size] of sizes) {
82
+ if (size < minSize) continue;
83
+ if (size < chunkSize * DOMINANT_SHARE) continue;
84
+
85
+ const previous = worst.get(module);
86
+
87
+ // A module weighs the same in every chunk holding it, so the one
88
+ // named is the first by name — chunk order is not stable.
89
+ if (previous && compareStrings(previous.chunk, chunkName) <= 0) {
90
+ continue;
91
+ }
92
+
93
+ worst.set(module, {
94
+ name: module.readableIdentifier(requestShortener),
95
+ chunk: chunkName,
96
+ size,
97
+ chunkSize
98
+ });
99
+ }
100
+ }
101
+
102
+ if (worst.size === 0) return;
103
+
104
+ const large = [...worst.values()];
105
+
106
+ // Ties break by name: chunk iteration order is not stable.
107
+ large.sort((a, b) => b.size - a.size || compareStrings(a.name, b.name));
108
+
109
+ const warning = new LargeModulesWarning(
110
+ large.slice(0, MAX_REPORTED_MODULES),
111
+ large.length
112
+ );
113
+
114
+ if (hints === "error") {
115
+ compilation.errors.push(warning);
116
+ } else if (hints === "stats") {
117
+ compilation.hints.push(warning);
118
+ } else {
119
+ compilation.warnings.push(warning);
120
+ }
121
+ });
122
+ });
123
+ }
124
+ }
125
+
126
+ module.exports = LargeModulesPlugin;