@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
@@ -13,12 +13,16 @@ const { compareSelect, compareStrings } = require("../util/comparators");
13
13
  const createHash = require("../util/createHash");
14
14
  const createHooksRegistry = require("../util/createHooksRegistry");
15
15
 
16
- /** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
17
- /** @typedef {import("../../declarations/WebpackOptions").HashDigest} HashDigest */
18
- /** @typedef {import("webpack-sources").Source} Source */
19
- /** @typedef {import("../Cache").Etag} Etag */
20
- /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
21
- /** @typedef {import("../Compiler")} Compiler */
16
+ /**
17
+ * @import {
18
+ * HashFunction,
19
+ * HashDigest
20
+ * } from "../../declarations/WebpackOptions"
21
+ */
22
+ /** @import { Source } from "webpack-sources" */
23
+ /** @import { Etag } from "../Cache" */
24
+ /** @import { AssetInfo } from "../Compilation" */
25
+ /** @import Compiler from "../Compiler" */
22
26
  /** @typedef {typeof import("../util/Hash")} Hash */
23
27
 
24
28
  /**
@@ -341,47 +345,68 @@ ${referencingAssets
341
345
  }
342
346
  return hashes;
343
347
  };
348
+ // Tarjan: hashes naming each other come out as one group where a chain
349
+ // walk would never end, and groups arrive dependencies-first as needed.
350
+ /** @type {string[][]} */
351
+ const groupsInOrder = [];
352
+ /** @type {Map<string, number>} */
353
+ const indexOf = new Map();
354
+ /** @type {Map<string, number>} */
355
+ const lowOf = new Map();
356
+ /** @type {Set<string>} */
357
+ const onStack = new Set();
358
+ /** @type {string[]} */
359
+ const stack = [];
344
360
  /**
345
- * Returns the hash info.
361
+ * Visits one hash and everything its assets reference.
346
362
  * @param {string} hash the hash
347
- * @returns {string} the hash info
363
+ * @returns {void}
348
364
  */
349
- const hashInfo = (hash) => {
350
- const assets = hashToAssets.get(hash);
351
- return `${hash} (${Array.from(
352
- /** @type {AssetInfoForRealContentHash[]} */ (assets),
353
- (a) => a.name
354
- )})`;
355
- };
356
- /** @type {Hashes} */
357
- const hashesInOrder = new Set();
358
- for (const hash of hashToAssets.keys()) {
359
- /**
360
- * Processes the provided hash.
361
- * @param {string} hash the hash
362
- * @param {Set<string>} stack stack of hashes
363
- */
364
- const add = (hash, stack) => {
365
- const deps = getDependencies(hash);
366
- if (!deps) return;
367
- stack.add(hash);
365
+ const strongConnect = (hash) => {
366
+ const index = indexOf.size;
367
+ indexOf.set(hash, index);
368
+ lowOf.set(hash, index);
369
+ stack.push(hash);
370
+ onStack.add(hash);
371
+ // An unowned reference reports the caching problem and stays a leaf.
372
+ const deps = getDependencies(hash);
373
+ if (deps) {
368
374
  for (const dep of deps) {
369
- if (hashesInOrder.has(dep)) continue;
370
- if (stack.has(dep)) {
371
- throw new Error(
372
- `Circular hash dependency ${Array.from(
373
- stack,
374
- hashInfo
375
- ).join(" -> ")} -> ${hashInfo(dep)}`
375
+ if (!indexOf.has(dep)) {
376
+ strongConnect(dep);
377
+ lowOf.set(
378
+ hash,
379
+ Math.min(
380
+ /** @type {number} */ (lowOf.get(hash)),
381
+ /** @type {number} */ (lowOf.get(dep))
382
+ )
383
+ );
384
+ } else if (onStack.has(dep)) {
385
+ lowOf.set(
386
+ hash,
387
+ Math.min(
388
+ /** @type {number} */ (lowOf.get(hash)),
389
+ /** @type {number} */ (indexOf.get(dep))
390
+ )
376
391
  );
377
392
  }
378
- add(dep, stack);
379
393
  }
380
- hashesInOrder.add(hash);
381
- stack.delete(hash);
382
- };
383
- if (hashesInOrder.has(hash)) continue;
384
- add(hash, new Set());
394
+ }
395
+ if (lowOf.get(hash) === indexOf.get(hash)) {
396
+ /** @type {string[]} */
397
+ const group = [];
398
+ /** @type {string} */
399
+ let member;
400
+ do {
401
+ member = /** @type {string} */ (stack.pop());
402
+ onStack.delete(member);
403
+ if (hashToAssets.has(member)) group.push(member);
404
+ } while (member !== hash);
405
+ if (group.length > 0) groupsInOrder.push(group);
406
+ }
407
+ };
408
+ for (const hash of hashToAssets.keys()) {
409
+ if (!indexOf.has(hash)) strongConnect(hash);
385
410
  }
386
411
  /** @type {Map<string, string>} */
387
412
  const hashToNewHash = new Map();
@@ -470,7 +495,62 @@ ${referencingAssets
470
495
  };
471
496
  /** @type {Comparator<AssetInfoForRealContentHash>} */
472
497
  const comparator = compareSelect((a) => a.name, compareStrings);
473
- for (const oldHash of hashesInOrder) {
498
+ for (const group of groupsInOrder) {
499
+ // A cycle is assigned as one group: members are told apart by stable
500
+ // markers, so the group hashes to a fixed point instead of chasing one.
501
+ if (group.length > 1) {
502
+ const members = group.sort();
503
+ /** @type {Map<string, string>} */
504
+ const markerOf = new Map(
505
+ members.map((hash, i) => [hash, `|webpack/scc/${i}|`])
506
+ );
507
+ for (let i = 0; i < members.length; i++) {
508
+ const oldHash = members[i];
509
+ const memberAssets =
510
+ /** @type {AssetInfoForRealContentHash[]} */
511
+ (hashToAssets.get(oldHash));
512
+ memberAssets.sort(comparator);
513
+ const hash = createHash(this._hashFunction);
514
+ if (compilation.outputOptions.hashSalt) {
515
+ hash.update(compilation.outputOptions.hashSalt);
516
+ }
517
+ // Two members can normalize to the same text; the position keeps
518
+ // their hashes apart, and sorting keeps the position stable.
519
+ hash.update(`${i}`);
520
+ for (const asset of memberAssets) {
521
+ if (Buffer.isBuffer(asset.content)) {
522
+ hash.update(asset.content);
523
+ continue;
524
+ }
525
+ const withoutOwn =
526
+ /** @type {Hashes} */
527
+ (asset.ownHashes).has(oldHash);
528
+ hash.update(
529
+ asset.content.replace(hashRegExp, (matched) => {
530
+ // Its own occurrences vanish, exactly as a lone hash's do.
531
+ if (
532
+ withoutOwn &&
533
+ /** @type {Hashes} */ (asset.ownHashes).has(matched)
534
+ ) {
535
+ return "";
536
+ }
537
+ const marker = markerOf.get(matched);
538
+ if (marker !== undefined) return marker;
539
+ const mapped = hashToNewHash.get(matched);
540
+ return mapped === undefined ? matched : mapped;
541
+ })
542
+ );
543
+ }
544
+ const digest = hash.digest(
545
+ /** @type {HashDigest} */ (
546
+ hashToDigest.get(oldHash) || this._hashDigest
547
+ )
548
+ );
549
+ hashToNewHash.set(oldHash, digest.slice(0, oldHash.length));
550
+ }
551
+ continue;
552
+ }
553
+ const oldHash = group[0];
474
554
  const assets =
475
555
  /** @type {AssetInfoForRealContentHash[]} */
476
556
  (hashToAssets.get(oldHash));
@@ -7,8 +7,8 @@
7
7
 
8
8
  const { STAGE_ADVANCED, STAGE_BASIC } = require("../OptimizationStages");
9
9
 
10
- /** @typedef {import("../Chunk")} Chunk */
11
- /** @typedef {import("../Compiler")} Compiler */
10
+ /** @import Chunk from "../Chunk" */
11
+ /** @import Compiler from "../Compiler" */
12
12
 
13
13
  const PLUGIN_NAME = "RemoveEmptyChunksPlugin";
14
14
 
@@ -7,10 +7,10 @@
7
7
 
8
8
  const { STAGE_BASIC } = require("../OptimizationStages");
9
9
 
10
- /** @typedef {import("../Chunk")} Chunk */
11
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
12
- /** @typedef {import("../Compiler")} Compiler */
13
- /** @typedef {import("../Module")} Module */
10
+ /** @import Chunk from "../Chunk" */
11
+ /** @import ChunkGroup from "../ChunkGroup" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import Module from "../Module" */
14
14
 
15
15
  /**
16
16
  * Intersects multiple masks represented as bigints
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Compilation").EntryData} EntryData */
9
- /** @typedef {import("../Compiler")} Compiler */
8
+ /** @import { EntryData } from "../Compilation" */
9
+ /** @import Compiler from "../Compiler" */
10
10
 
11
11
  const PLUGIN_NAME = "RuntimeChunkPlugin";
12
12
 
@@ -5,7 +5,6 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const glob2regexp = require("watchpack").util.globToRegExp;
9
8
  const {
10
9
  JAVASCRIPT_MODULE_TYPE_AUTO,
11
10
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
@@ -17,26 +16,41 @@ const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency
17
16
  const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
18
17
  const { ImportPhaseUtils } = require("../dependencies/ImportPhase");
19
18
  const formatLocation = require("../util/formatLocation");
19
+ const { dirname, join, readJson, relative } = require("../util/fs");
20
+ const { getGlobToRegExpSource } = require("../util/globUtils");
21
+ const {
22
+ NODE_MODULES_REGEXP,
23
+ WINDOWS_PATH_SEPARATOR_REGEXP,
24
+ relativePathToRequest
25
+ } = require("../util/identifier");
20
26
  const { CompilerHintNotationRegExp } = require("../util/magicComment");
21
27
 
22
- /** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
23
- /** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
24
- /** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
25
- /** @typedef {import("estree").Statement} Statement */
26
- /** @typedef {import("estree").CallExpression} CallExpression */
27
- /** @typedef {import("../Compiler")} Compiler */
28
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
29
- /** @typedef {import("../Module")} Module */
30
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
31
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
32
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
33
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
34
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
35
- /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
36
- /** @typedef {import("../ExportsInfo").TargetItemWithConnection} TargetItemWithConnection */
37
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
38
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
39
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
28
+ /**
29
+ * @import {
30
+ * MaybeNamedClassDeclaration,
31
+ * MaybeNamedFunctionDeclaration,
32
+ * ModuleDeclaration,
33
+ * Statement,
34
+ * CallExpression
35
+ * } from "estree"
36
+ */
37
+ /** @import Compiler from "../Compiler" */
38
+ /** @import Module, { BuildMeta } from "../Module" */
39
+ /**
40
+ * @import {
41
+ * JavascriptModuleBuildInfo
42
+ * } from "../javascript/JavascriptModule"
43
+ */
44
+ /** @import ModuleGraphConnection from "../ModuleGraphConnection" */
45
+ /** @import { ExportInfo, TargetItemWithConnection } from "../ExportsInfo" */
46
+ /** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
47
+ /** @import { InputFileSystem } from "../util/fs" */
48
+ /** @import { CreateData, ResolveData } from "../NormalModuleFactory" */
49
+ /**
50
+ * @import {
51
+ * JavascriptParserOptions
52
+ * } from "../../declarations/WebpackOptions"
53
+ */
40
54
 
41
55
  /**
42
56
  * Defines the export in module type used by this module.
@@ -46,10 +60,35 @@ const { CompilerHintNotationRegExp } = require("../util/magicComment");
46
60
  * @property {boolean} checked if the export is conditional
47
61
  */
48
62
 
63
+ /** @typedef {NonNullable<CreateData["resourceResolveData"]>} ResourceResolveData */
64
+
49
65
  /** @typedef {string | boolean | string[] | undefined} SideEffectsFlagValue */
50
66
 
51
67
  /** @typedef {Map<string, RegExp>} CacheItem */
52
68
 
69
+ /**
70
+ * @typedef {object} ResolvedSideEffectsFlag
71
+ * @property {SideEffectsFlagValue} sideEffects package.json sideEffects value
72
+ * @property {string} relativePath path relative to the owning package root
73
+ */
74
+
75
+ /**
76
+ * @typedef {object} OwningSideEffectsFlag
77
+ * @property {SideEffectsFlagValue} sideEffects package.json sideEffects value
78
+ * @property {string} packageRoot directory of the declaring package.json
79
+ */
80
+
81
+ /**
82
+ * A finished ancestor walk, kept per descriptionFileRoot. The package.json
83
+ * paths it consulted are replayed as dependencies for every module reusing it.
84
+ * @typedef {object} OwningSideEffectsFlagWalk
85
+ * @property {OwningSideEffectsFlag | null} owning declaring package, `null` when the walk found none
86
+ * @property {string[]} read package.json files the walk read
87
+ * @property {string[]} missing package.json files the walk did not find
88
+ */
89
+
90
+ /** @typedef {Map<string, OwningSideEffectsFlagWalk>} OwningSideEffectsFlagCache */
91
+
53
92
  /**
54
93
  * Whether a resolved re-export target is reached through an `import defer` edge.
55
94
  * Such edges must not be collapsed by the side-effect-free barrel optimization:
@@ -67,6 +106,21 @@ const isDeferredTargetConnection = (connection) =>
67
106
  /** @type {WeakMap<Compiler, CacheItem>} */
68
107
  const globToRegexpCache = new WeakMap();
69
108
 
109
+ /** @type {WeakMap<Compiler, OwningSideEffectsFlagCache>} */
110
+ const owningSideEffectsFlagCache = new WeakMap();
111
+
112
+ /** @type {WeakMap<Partial<CreateData>, ResolvedSideEffectsFlag>} */
113
+ const resolvedSideEffectsFlags = new WeakMap();
114
+
115
+ /**
116
+ * Whether a failed ancestor package.json read means nothing is there, as
117
+ * opposed to something being there that cannot be used.
118
+ * @param {NodeJS.ErrnoException | SyntaxError | Error} err error from readJson
119
+ * @returns {boolean} true when no file was found at that path
120
+ */
121
+ const isMissingPackageJsonError = (err) =>
122
+ "code" in err && err.code === "ENOENT";
123
+
70
124
  /**
71
125
  * Returns a regular expression.
72
126
  * @param {string} glob the pattern
@@ -79,7 +133,7 @@ const globToRegexp = (glob, cache) => {
79
133
  if (!glob.includes("/")) {
80
134
  glob = `**/${glob}`;
81
135
  }
82
- const regexpSource = glob2regexp(glob);
136
+ const regexpSource = getGlobToRegExpSource()(glob);
83
137
  const regexp = new RegExp(`^(\\./)?${regexpSource}$`);
84
138
  cache.set(glob, regexp);
85
139
  return regexp;
@@ -110,6 +164,144 @@ const notSideEffectsTag = Symbol("NoSideEffects");
110
164
  /** @type {(target: { module: Module }) => boolean} */
111
165
  const RETURNS_FALSE = () => false;
112
166
 
167
+ /**
168
+ * Resolve sideEffects from the package that declares it, inheriting past a nested
169
+ * package.json that declares none. Globs are rebased on the declaring package root,
170
+ * and each package.json the walk consults becomes a dependency of the resolve.
171
+ * @param {InputFileSystem} fs file system
172
+ * @param {ResolveData} resolveData resolve data
173
+ * @param {string} descriptionFileRoot root directory of the nearest description file
174
+ * @param {OwningSideEffectsFlagCache} owningCache walk cache keyed by descriptionFileRoot
175
+ * @param {(result?: ResolvedSideEffectsFlag) => void} callback callback
176
+ * @returns {void}
177
+ */
178
+ const resolveSideEffectsFlag = (
179
+ fs,
180
+ resolveData,
181
+ descriptionFileRoot,
182
+ owningCache,
183
+ callback
184
+ ) => {
185
+ const resolveInfo = /** @type {ResourceResolveData} */ (
186
+ resolveData.createData.resourceResolveData
187
+ );
188
+ const descriptionFileData =
189
+ /** @type {NonNullable<ResourceResolveData["descriptionFileData"]>} */ (
190
+ resolveInfo.descriptionFileData
191
+ );
192
+ const relativePath = /** @type {string} */ (resolveInfo.relativePath);
193
+ if (descriptionFileData.sideEffects !== undefined) {
194
+ return callback({
195
+ sideEffects: /** @type {SideEffectsFlagValue} */ (
196
+ descriptionFileData.sideEffects
197
+ ),
198
+ relativePath
199
+ });
200
+ }
201
+ // Named package with no sideEffects: do not inherit from outside.
202
+ if (descriptionFileData.name !== undefined) {
203
+ return callback();
204
+ }
205
+ // Only inherit for a file living under node_modules; app-local nests keep shadowing.
206
+ // Read the resolved path so a symlinked package flags all of its files alike.
207
+ if (
208
+ typeof resolveInfo.path !== "string" ||
209
+ !NODE_MODULES_REGEXP.test(resolveInfo.path)
210
+ ) {
211
+ return callback();
212
+ }
213
+
214
+ // stays in descriptionFileRoot's space, which is the space packageRoot is found in
215
+ const resourcePath = join(fs, descriptionFileRoot, relativePath);
216
+
217
+ /**
218
+ * @param {OwningSideEffectsFlagWalk} walk finished walk
219
+ * @returns {void}
220
+ */
221
+ const finishFromWalk = (walk) => {
222
+ for (const file of walk.read) resolveData.fileDependencies.add(file);
223
+ for (const file of walk.missing) resolveData.missingDependencies.add(file);
224
+ const owning = walk.owning;
225
+ if (owning === null) return callback();
226
+ const ancestorRelative = relative(
227
+ fs,
228
+ owning.packageRoot,
229
+ resourcePath
230
+ ).replace(WINDOWS_PATH_SEPARATOR_REGEXP, "/");
231
+ return callback({
232
+ sideEffects: owning.sideEffects,
233
+ relativePath: relativePathToRequest(ancestorRelative)
234
+ });
235
+ };
236
+
237
+ const cached = owningCache.get(descriptionFileRoot);
238
+ if (cached !== undefined) {
239
+ return finishFromWalk(cached);
240
+ }
241
+
242
+ /** @type {string[]} */
243
+ const read = [];
244
+ /** @type {string[]} */
245
+ const missing = [];
246
+
247
+ /**
248
+ * @param {OwningSideEffectsFlag | null} owning declaring package or null
249
+ * @returns {void}
250
+ */
251
+ const done = (owning) => {
252
+ /** @type {OwningSideEffectsFlagWalk} */
253
+ const walk = { owning, read, missing };
254
+ owningCache.set(descriptionFileRoot, walk);
255
+ return finishFromWalk(walk);
256
+ };
257
+
258
+ let dir = dirname(fs, descriptionFileRoot);
259
+
260
+ const next = () => {
261
+ const parent = dirname(fs, dir);
262
+ if (!parent || parent === dir) return done(null);
263
+ const baseName = relative(fs, parent, dir).replace(
264
+ WINDOWS_PATH_SEPARATOR_REGEXP,
265
+ "/"
266
+ );
267
+ // Do not inherit an application's sideEffects across an install boundary.
268
+ if (baseName === "node_modules") return done(null);
269
+
270
+ const packageJsonPath = join(fs, dir, "package.json");
271
+
272
+ readJson(fs, packageJsonPath, (err, data) => {
273
+ if (err) {
274
+ if (!isMissingPackageJsonError(err)) {
275
+ // it is there but unreadable, so what it declares is unknown:
276
+ // decline rather than let an outer flag speak for it
277
+ read.push(packageJsonPath);
278
+ return done(null);
279
+ }
280
+ missing.push(packageJsonPath);
281
+ dir = parent;
282
+ return next();
283
+ }
284
+ read.push(packageJsonPath);
285
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
286
+ dir = parent;
287
+ return next();
288
+ }
289
+ if (data.sideEffects !== undefined) {
290
+ return done({
291
+ sideEffects: /** @type {SideEffectsFlagValue} */ (data.sideEffects),
292
+ packageRoot: dir
293
+ });
294
+ }
295
+ // An unnamed manifest deeper in the package keeps the walk going; a named one
296
+ // is a package of its own, and its silence is its answer.
297
+ if (data.name !== undefined) return done(null);
298
+ dir = parent;
299
+ next();
300
+ });
301
+ };
302
+ next();
303
+ };
304
+
113
305
  /**
114
306
  * Detects if the module is "pure single-star passthrough": one whose entire export
115
307
  * surface is exactly one `export * from "x"` (no named/local/default-bearing
@@ -159,31 +351,62 @@ class SideEffectsFlagPlugin {
159
351
  cache = new Map();
160
352
  globToRegexpCache.set(compiler.root, cache);
161
353
  }
354
+ let owningCache = owningSideEffectsFlagCache.get(compiler.root);
355
+ if (owningCache === undefined) {
356
+ owningCache = new Map();
357
+ owningSideEffectsFlagCache.set(compiler.root, owningCache);
358
+ }
162
359
  compiler.hooks.compilation.tap(
163
360
  PLUGIN_NAME,
164
361
  (compilation, { normalModuleFactory }) => {
165
362
  const moduleGraph = compilation.moduleGraph;
166
- normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
167
- const resolveData = data.resourceResolveData;
168
- if (
169
- resolveData &&
170
- resolveData.descriptionFileData &&
171
- resolveData.relativePath
172
- ) {
173
- const sideEffects = resolveData.descriptionFileData.sideEffects;
174
- if (sideEffects !== undefined) {
175
- if (module.factoryMeta === undefined) {
176
- module.factoryMeta = {};
363
+ normalModuleFactory.hooks.afterResolve.tapAsync(
364
+ PLUGIN_NAME,
365
+ (resolveData, callback) => {
366
+ const inputFileSystem = compiler.inputFileSystem;
367
+ if (!inputFileSystem) return callback();
368
+ const { createData } = resolveData;
369
+ const resolveInfo = createData.resourceResolveData;
370
+ if (
371
+ !resolveInfo ||
372
+ !resolveInfo.descriptionFileData ||
373
+ !resolveInfo.relativePath
374
+ ) {
375
+ return callback();
376
+ }
377
+ const descriptionFileRoot =
378
+ resolveInfo.descriptionFileRoot ||
379
+ (resolveInfo.descriptionFilePath
380
+ ? dirname(inputFileSystem, resolveInfo.descriptionFilePath)
381
+ : undefined);
382
+ if (descriptionFileRoot === undefined) return callback();
383
+ resolveSideEffectsFlag(
384
+ inputFileSystem,
385
+ resolveData,
386
+ descriptionFileRoot,
387
+ owningCache,
388
+ (resolved) => {
389
+ if (resolved !== undefined) {
390
+ resolvedSideEffectsFlags.set(createData, resolved);
391
+ }
392
+ callback();
177
393
  }
178
- const hasSideEffects = SideEffectsFlagPlugin.moduleHasSideEffects(
179
- resolveData.relativePath,
180
- /** @type {SideEffectsFlagValue} */ (sideEffects),
181
- /** @type {CacheItem} */ (cache)
182
- );
183
- module.factoryMeta.sideEffectFree = !hasSideEffects;
394
+ );
395
+ }
396
+ );
397
+ normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
398
+ const resolved = resolvedSideEffectsFlags.get(data);
399
+ if (resolved !== undefined) {
400
+ if (module.factoryMeta === undefined) {
401
+ module.factoryMeta = {};
184
402
  }
403
+ const hasSideEffects = SideEffectsFlagPlugin.moduleHasSideEffects(
404
+ resolved.relativePath,
405
+ resolved.sideEffects,
406
+ /** @type {CacheItem} */ (cache)
407
+ );
408
+ module.factoryMeta.sideEffectFree = !hasSideEffects;
185
409
  }
186
-
187
410
  return module;
188
411
  });
189
412
  normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
@@ -529,7 +752,7 @@ class SideEffectsFlagPlugin {
529
752
  // Re-export resolution is idempotent within a pass, so cache it
530
753
  // per export info: a shared barrel imported by many modules
531
754
  // resolves each name once instead of once per consumer.
532
- /** @type {Map<ExportInfo, TargetItemWithConnection | null>} */
755
+ /** @type {Map<InstanceType<ExportInfo>, TargetItemWithConnection | null>} */
533
756
  const reexportTargetCache = new Map();
534
757
 
535
758
  // Dependencies don't change within the pass, so the passthrough