webpack 5.59.0 → 5.94.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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -11,6 +11,7 @@ const { SyncHook, MultiHook } = require("tapable");
11
11
  const ConcurrentCompilationError = require("./ConcurrentCompilationError");
12
12
  const MultiStats = require("./MultiStats");
13
13
  const MultiWatching = require("./MultiWatching");
14
+ const WebpackError = require("./WebpackError");
14
15
  const ArrayQueue = require("./util/ArrayQueue");
15
16
 
16
17
  /** @template T @typedef {import("tapable").AsyncSeriesHook<T>} AsyncSeriesHook<T> */
@@ -19,6 +20,7 @@ const ArrayQueue = require("./util/ArrayQueue");
19
20
  /** @typedef {import("./Compiler")} Compiler */
20
21
  /** @typedef {import("./Stats")} Stats */
21
22
  /** @typedef {import("./Watching")} Watching */
23
+ /** @typedef {import("./logging/Logger").Logger} Logger */
22
24
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
23
25
  /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
24
26
  /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
@@ -27,7 +29,7 @@ const ArrayQueue = require("./util/ArrayQueue");
27
29
  /**
28
30
  * @template T
29
31
  * @callback Callback
30
- * @param {Error=} err
32
+ * @param {Error | null} err
31
33
  * @param {T=} result
32
34
  */
33
35
 
@@ -38,7 +40,7 @@ const ArrayQueue = require("./util/ArrayQueue");
38
40
  */
39
41
 
40
42
  /**
41
- * @typedef {Object} MultiCompilerOptions
43
+ * @typedef {object} MultiCompilerOptions
42
44
  * @property {number=} parallelism how many Compilers are allows to run at the same time in parallel
43
45
  */
44
46
 
@@ -49,9 +51,11 @@ module.exports = class MultiCompiler {
49
51
  */
50
52
  constructor(compilers, options) {
51
53
  if (!Array.isArray(compilers)) {
54
+ /** @type {Compiler[]} */
52
55
  compilers = Object.keys(compilers).map(name => {
53
- compilers[name].name = name;
54
- return compilers[name];
56
+ /** @type {Record<string, Compiler>} */
57
+ (compilers)[name].name = name;
58
+ return /** @type {Record<string, Compiler>} */ (compilers)[name];
55
59
  });
56
60
  }
57
61
 
@@ -80,13 +84,14 @@ module.exports = class MultiCompiler {
80
84
  this.dependencies = new WeakMap();
81
85
  this.running = false;
82
86
 
83
- /** @type {Stats[]} */
87
+ /** @type {(Stats | null)[]} */
84
88
  const compilerStats = this.compilers.map(() => null);
85
89
  let doneCompilers = 0;
86
90
  for (let index = 0; index < this.compilers.length; index++) {
87
91
  const compiler = this.compilers[index];
88
92
  const compilerIndex = index;
89
93
  let compilerDone = false;
94
+ // eslint-disable-next-line no-loop-func
90
95
  compiler.hooks.done.tap("MultiCompiler", stats => {
91
96
  if (!compilerDone) {
92
97
  compilerDone = true;
@@ -94,9 +99,12 @@ module.exports = class MultiCompiler {
94
99
  }
95
100
  compilerStats[compilerIndex] = stats;
96
101
  if (doneCompilers === this.compilers.length) {
97
- this.hooks.done.call(new MultiStats(compilerStats));
102
+ this.hooks.done.call(
103
+ new MultiStats(/** @type {Stats[]} */ (compilerStats))
104
+ );
98
105
  }
99
106
  });
107
+ // eslint-disable-next-line no-loop-func
100
108
  compiler.hooks.invalid.tap("MultiCompiler", () => {
101
109
  if (compilerDone) {
102
110
  compilerDone = false;
@@ -104,6 +112,40 @@ module.exports = class MultiCompiler {
104
112
  }
105
113
  });
106
114
  }
115
+ this._validateCompilersOptions();
116
+ }
117
+
118
+ _validateCompilersOptions() {
119
+ if (this.compilers.length < 2) return;
120
+ /**
121
+ * @param {Compiler} compiler compiler
122
+ * @param {WebpackError} warning warning
123
+ */
124
+ const addWarning = (compiler, warning) => {
125
+ compiler.hooks.thisCompilation.tap("MultiCompiler", compilation => {
126
+ compilation.warnings.push(warning);
127
+ });
128
+ };
129
+ const cacheNames = new Set();
130
+ for (const compiler of this.compilers) {
131
+ if (compiler.options.cache && "name" in compiler.options.cache) {
132
+ const name = compiler.options.cache.name;
133
+ if (cacheNames.has(name)) {
134
+ addWarning(
135
+ compiler,
136
+ new WebpackError(
137
+ `${
138
+ compiler.name
139
+ ? `Compiler with name "${compiler.name}" doesn't use unique cache name. `
140
+ : ""
141
+ }Please set unique "cache.name" option. Name "${name}" already used.`
142
+ )
143
+ );
144
+ } else {
145
+ cacheNames.add(name);
146
+ }
147
+ }
148
+ }
107
149
  }
108
150
 
109
151
  get options() {
@@ -132,18 +174,6 @@ module.exports = class MultiCompiler {
132
174
  throw new Error("Cannot read inputFileSystem of a MultiCompiler");
133
175
  }
134
176
 
135
- get outputFileSystem() {
136
- throw new Error("Cannot read outputFileSystem of a MultiCompiler");
137
- }
138
-
139
- get watchFileSystem() {
140
- throw new Error("Cannot read watchFileSystem of a MultiCompiler");
141
- }
142
-
143
- get intermediateFileSystem() {
144
- throw new Error("Cannot read outputFileSystem of a MultiCompiler");
145
- }
146
-
147
177
  /**
148
178
  * @param {InputFileSystem} value the new input file system
149
179
  */
@@ -153,6 +183,10 @@ module.exports = class MultiCompiler {
153
183
  }
154
184
  }
155
185
 
186
+ get outputFileSystem() {
187
+ throw new Error("Cannot read outputFileSystem of a MultiCompiler");
188
+ }
189
+
156
190
  /**
157
191
  * @param {OutputFileSystem} value the new output file system
158
192
  */
@@ -162,6 +196,10 @@ module.exports = class MultiCompiler {
162
196
  }
163
197
  }
164
198
 
199
+ get watchFileSystem() {
200
+ throw new Error("Cannot read watchFileSystem of a MultiCompiler");
201
+ }
202
+
165
203
  /**
166
204
  * @param {WatchFileSystem} value the new watch file system
167
205
  */
@@ -180,6 +218,14 @@ module.exports = class MultiCompiler {
180
218
  }
181
219
  }
182
220
 
221
+ get intermediateFileSystem() {
222
+ throw new Error("Cannot read outputFileSystem of a MultiCompiler");
223
+ }
224
+
225
+ /**
226
+ * @param {string | (function(): string)} name name of the logger, or function called once to get the logger name
227
+ * @returns {Logger} a logger with that name
228
+ */
183
229
  getInfrastructureLogger(name) {
184
230
  return this.compilers[0].getInfrastructureLogger(name);
185
231
  }
@@ -202,6 +248,10 @@ module.exports = class MultiCompiler {
202
248
  const edges = new Set();
203
249
  /** @type {string[]} */
204
250
  const missing = [];
251
+ /**
252
+ * @param {Compiler} compiler compiler
253
+ * @returns {boolean} target was found
254
+ */
205
255
  const targetFound = compiler => {
206
256
  for (const edge of edges) {
207
257
  if (edge.target === compiler) {
@@ -210,12 +260,16 @@ module.exports = class MultiCompiler {
210
260
  }
211
261
  return false;
212
262
  };
213
- const sortEdges = (e1, e2) => {
214
- return (
215
- e1.source.name.localeCompare(e2.source.name) ||
216
- e1.target.name.localeCompare(e2.target.name)
217
- );
218
- };
263
+ /**
264
+ * @param {{source: Compiler, target: Compiler}} e1 edge 1
265
+ * @param {{source: Compiler, target: Compiler}} e2 edge 2
266
+ * @returns {number} result
267
+ */
268
+ const sortEdges = (e1, e2) =>
269
+ /** @type {string} */
270
+ (e1.source.name).localeCompare(/** @type {string} */ (e2.source.name)) ||
271
+ /** @type {string} */
272
+ (e1.target.name).localeCompare(/** @type {string} */ (e2.target.name));
219
273
  for (const source of this.compilers) {
220
274
  const dependencies = this.dependencies.get(source);
221
275
  if (dependencies) {
@@ -274,10 +328,17 @@ module.exports = class MultiCompiler {
274
328
  runWithDependencies(compilers, fn, callback) {
275
329
  const fulfilledNames = new Set();
276
330
  let remainingCompilers = compilers;
331
+ /**
332
+ * @param {string} d dependency
333
+ * @returns {boolean} when dependency was fulfilled
334
+ */
277
335
  const isDependencyFulfilled = d => fulfilledNames.has(d);
336
+ /**
337
+ * @returns {Compiler[]} compilers
338
+ */
278
339
  const getReadyCompilers = () => {
279
- let readyCompilers = [];
280
- let list = remainingCompilers;
340
+ const readyCompilers = [];
341
+ const list = remainingCompilers;
281
342
  remainingCompilers = [];
282
343
  for (const c of list) {
283
344
  const dependencies = this.dependencies.get(c);
@@ -291,8 +352,12 @@ module.exports = class MultiCompiler {
291
352
  }
292
353
  return readyCompilers;
293
354
  };
355
+ /**
356
+ * @param {Callback<MultiStats>} callback callback
357
+ * @returns {void}
358
+ */
294
359
  const runCompilers = callback => {
295
- if (remainingCompilers.length === 0) return callback();
360
+ if (remainingCompilers.length === 0) return callback(null);
296
361
  asyncLib.map(
297
362
  getReadyCompilers(),
298
363
  (compiler, callback) => {
@@ -302,7 +367,9 @@ module.exports = class MultiCompiler {
302
367
  runCompilers(callback);
303
368
  });
304
369
  },
305
- callback
370
+ (err, results) => {
371
+ callback(err, /** @type {TODO} */ (results));
372
+ }
306
373
  );
307
374
  };
308
375
  runCompilers(callback);
@@ -316,7 +383,7 @@ module.exports = class MultiCompiler {
316
383
  * @returns {SetupResult[]} result of setup
317
384
  */
318
385
  _runGraph(setup, run, callback) {
319
- /** @typedef {{ compiler: Compiler, setupResult: SetupResult, result: Stats, state: "pending" | "blocked" | "queued" | "starting" | "running" | "running-outdated" | "done", children: Node[], parents: Node[] }} Node */
386
+ /** @typedef {{ compiler: Compiler, setupResult: undefined | SetupResult, result: undefined | Stats, state: "pending" | "blocked" | "queued" | "starting" | "running" | "running-outdated" | "done", children: Node[], parents: Node[] }} Node */
320
387
 
321
388
  // State transitions for nodes:
322
389
  // -> blocked (initial)
@@ -341,12 +408,14 @@ module.exports = class MultiCompiler {
341
408
  }));
342
409
  /** @type {Map<string, Node>} */
343
410
  const compilerToNode = new Map();
344
- for (const node of nodes) compilerToNode.set(node.compiler.name, node);
411
+ for (const node of nodes) {
412
+ compilerToNode.set(/** @type {string} */ (node.compiler.name), node);
413
+ }
345
414
  for (const node of nodes) {
346
415
  const dependencies = this.dependencies.get(node.compiler);
347
416
  if (!dependencies) continue;
348
417
  for (const dep of dependencies) {
349
- const parent = compilerToNode.get(dep);
418
+ const parent = /** @type {Node} */ (compilerToNode.get(dep));
350
419
  node.parents.push(parent);
351
420
  parent.children.push(node);
352
421
  }
@@ -361,10 +430,10 @@ module.exports = class MultiCompiler {
361
430
  }
362
431
  let errored = false;
363
432
  let running = 0;
364
- const parallelism = this._options.parallelism;
433
+ const parallelism = /** @type {number} */ (this._options.parallelism);
365
434
  /**
366
435
  * @param {Node} node node
367
- * @param {Error=} err error
436
+ * @param {(Error | null)=} err error
368
437
  * @param {Stats=} stats result
369
438
  * @returns {void}
370
439
  */
@@ -440,8 +509,9 @@ module.exports = class MultiCompiler {
440
509
  }
441
510
  };
442
511
 
512
+ /** @type {SetupResult[]} */
443
513
  const setupResults = [];
444
- nodes.forEach((node, i) => {
514
+ for (const [i, node] of nodes.entries()) {
445
515
  setupResults.push(
446
516
  (node.setupResult = setup(
447
517
  node.compiler,
@@ -452,7 +522,7 @@ module.exports = class MultiCompiler {
452
522
  () => nodeInvalid(node)
453
523
  ))
454
524
  );
455
- });
525
+ }
456
526
  let processing = true;
457
527
  const processQueue = () => {
458
528
  if (processing) return;
@@ -460,8 +530,9 @@ module.exports = class MultiCompiler {
460
530
  process.nextTick(processQueueWorker);
461
531
  };
462
532
  const processQueueWorker = () => {
533
+ // eslint-disable-next-line no-unmodified-loop-condition
463
534
  while (running < parallelism && queue.length > 0 && !errored) {
464
- const node = queue.dequeue();
535
+ const node = /** @type {Node} */ (queue.dequeue());
465
536
  if (
466
537
  node.state === "queued" ||
467
538
  (node.state === "blocked" &&
@@ -469,7 +540,11 @@ module.exports = class MultiCompiler {
469
540
  ) {
470
541
  running++;
471
542
  node.state = "starting";
472
- run(node.compiler, node.setupResult, nodeDone.bind(null, node));
543
+ run(
544
+ node.compiler,
545
+ /** @type {SetupResult} */ (node.setupResult),
546
+ nodeDone.bind(null, node)
547
+ );
473
548
  node.state = "running";
474
549
  }
475
550
  }
@@ -576,7 +651,9 @@ module.exports = class MultiCompiler {
576
651
  (compiler, callback) => {
577
652
  compiler.close(callback);
578
653
  },
579
- callback
654
+ error => {
655
+ callback(error);
656
+ }
580
657
  );
581
658
  }
582
659
  };
package/lib/MultiStats.js CHANGED
@@ -8,15 +8,25 @@
8
8
  const identifierUtils = require("./util/identifier");
9
9
 
10
10
  /** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
11
+ /** @typedef {import("./Compilation").CreateStatsOptionsContext} CreateStatsOptionsContext */
12
+ /** @typedef {import("./Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
11
13
  /** @typedef {import("./Stats")} Stats */
12
14
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").KnownStatsCompilation} KnownStatsCompilation */
13
15
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
16
+ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
14
17
 
18
+ /**
19
+ * @param {string} str string
20
+ * @param {string} prefix pref
21
+ * @returns {string} indent
22
+ */
15
23
  const indent = (str, prefix) => {
16
- const rem = str.replace(/\n([^\n])/g, "\n" + prefix + "$1");
24
+ const rem = str.replace(/\n([^\n])/g, `\n${prefix}$1`);
17
25
  return prefix + rem;
18
26
  };
19
27
 
28
+ /** @typedef {{ version: boolean, hash: boolean, errorsCount: boolean, warningsCount: boolean, errors: boolean, warnings: boolean, children: NormalizedStatsOptions[] }} ChildOptions */
29
+
20
30
  class MultiStats {
21
31
  /**
22
32
  * @param {Stats[]} stats the child stats
@@ -43,13 +53,30 @@ class MultiStats {
43
53
  return this.stats.some(stat => stat.hasWarnings());
44
54
  }
45
55
 
56
+ /**
57
+ * @param {string | boolean | StatsOptions | undefined} options stats options
58
+ * @param {CreateStatsOptionsContext} context context
59
+ * @returns {ChildOptions} context context
60
+ */
46
61
  _createChildOptions(options, context) {
47
- if (!options) {
48
- options = {};
49
- }
50
- const { children: childrenOptions = undefined, ...baseOptions } =
51
- typeof options === "string" ? { preset: options } : options;
62
+ const getCreateStatsOptions = () => {
63
+ if (!options) {
64
+ options = {};
65
+ }
66
+
67
+ const { children: childrenOptions = undefined, ...baseOptions } =
68
+ typeof options === "string"
69
+ ? { preset: options }
70
+ : /** @type {StatsOptions} */ (options);
71
+
72
+ return { childrenOptions, baseOptions };
73
+ };
74
+
52
75
  const children = this.stats.map((stat, idx) => {
76
+ if (typeof options === "boolean") {
77
+ return stat.compilation.createStatsOptions(options, context);
78
+ }
79
+ const { childrenOptions, baseOptions } = getCreateStatsOptions();
53
80
  const childOptions = Array.isArray(childrenOptions)
54
81
  ? childrenOptions[idx]
55
82
  : childrenOptions;
@@ -59,8 +86,8 @@ class MultiStats {
59
86
  ...(typeof childOptions === "string"
60
87
  ? { preset: childOptions }
61
88
  : childOptions && typeof childOptions === "object"
62
- ? childOptions
63
- : undefined)
89
+ ? childOptions
90
+ : undefined)
64
91
  },
65
92
  context
66
93
  );
@@ -77,81 +104,96 @@ class MultiStats {
77
104
  }
78
105
 
79
106
  /**
80
- * @param {any} options stats options
107
+ * @param {(string | boolean | StatsOptions)=} options stats options
81
108
  * @returns {StatsCompilation} json output
82
109
  */
83
110
  toJson(options) {
84
- options = this._createChildOptions(options, { forToString: false });
111
+ const childOptions = this._createChildOptions(options, {
112
+ forToString: false
113
+ });
85
114
  /** @type {KnownStatsCompilation} */
86
115
  const obj = {};
87
116
  obj.children = this.stats.map((stat, idx) => {
88
- const obj = stat.toJson(options.children[idx]);
117
+ const obj = stat.toJson(childOptions.children[idx]);
89
118
  const compilationName = stat.compilation.name;
90
119
  const name =
91
120
  compilationName &&
92
121
  identifierUtils.makePathsRelative(
93
- options.context,
122
+ stat.compilation.compiler.context,
94
123
  compilationName,
95
124
  stat.compilation.compiler.root
96
125
  );
97
126
  obj.name = name;
98
127
  return obj;
99
128
  });
100
- if (options.version) {
129
+ if (childOptions.version) {
101
130
  obj.version = obj.children[0].version;
102
131
  }
103
- if (options.hash) {
132
+ if (childOptions.hash) {
104
133
  obj.hash = obj.children.map(j => j.hash).join("");
105
134
  }
106
- const mapError = (j, obj) => {
107
- return {
108
- ...obj,
109
- compilerPath: obj.compilerPath
110
- ? `${j.name}.${obj.compilerPath}`
111
- : j.name
112
- };
113
- };
114
- if (options.errors) {
135
+ /**
136
+ * @param {StatsCompilation} j stats error
137
+ * @param {StatsError} obj Stats error
138
+ * @returns {TODO} result
139
+ */
140
+ const mapError = (j, obj) => ({
141
+ ...obj,
142
+ compilerPath: obj.compilerPath ? `${j.name}.${obj.compilerPath}` : j.name
143
+ });
144
+ if (childOptions.errors) {
115
145
  obj.errors = [];
116
146
  for (const j of obj.children) {
117
- for (const i of j.errors) {
147
+ const errors =
148
+ /** @type {NonNullable<KnownStatsCompilation["errors"]>} */
149
+ (j.errors);
150
+ for (const i of errors) {
118
151
  obj.errors.push(mapError(j, i));
119
152
  }
120
153
  }
121
154
  }
122
- if (options.warnings) {
155
+ if (childOptions.warnings) {
123
156
  obj.warnings = [];
124
157
  for (const j of obj.children) {
125
- for (const i of j.warnings) {
158
+ const warnings =
159
+ /** @type {NonNullable<KnownStatsCompilation["warnings"]>} */
160
+ (j.warnings);
161
+ for (const i of warnings) {
126
162
  obj.warnings.push(mapError(j, i));
127
163
  }
128
164
  }
129
165
  }
130
- if (options.errorsCount) {
166
+ if (childOptions.errorsCount) {
131
167
  obj.errorsCount = 0;
132
168
  for (const j of obj.children) {
133
- obj.errorsCount += j.errorsCount;
169
+ obj.errorsCount += /** @type {number} */ (j.errorsCount);
134
170
  }
135
171
  }
136
- if (options.warningsCount) {
172
+ if (childOptions.warningsCount) {
137
173
  obj.warningsCount = 0;
138
174
  for (const j of obj.children) {
139
- obj.warningsCount += j.warningsCount;
175
+ obj.warningsCount += /** @type {number} */ (j.warningsCount);
140
176
  }
141
177
  }
142
178
  return obj;
143
179
  }
144
180
 
181
+ /**
182
+ * @param {(string | boolean | StatsOptions)=} options stats options
183
+ * @returns {string} string output
184
+ */
145
185
  toString(options) {
146
- options = this._createChildOptions(options, { forToString: true });
186
+ const childOptions = this._createChildOptions(options, {
187
+ forToString: true
188
+ });
147
189
  const results = this.stats.map((stat, idx) => {
148
- const str = stat.toString(options.children[idx]);
190
+ const str = stat.toString(childOptions.children[idx]);
149
191
  const compilationName = stat.compilation.name;
150
192
  const name =
151
193
  compilationName &&
152
194
  identifierUtils
153
195
  .makePathsRelative(
154
- options.context,
196
+ stat.compilation.compiler.context,
155
197
  compilationName,
156
198
  stat.compilation.compiler.root
157
199
  )
@@ -13,7 +13,7 @@ const asyncLib = require("neo-async");
13
13
  /**
14
14
  * @template T
15
15
  * @callback Callback
16
- * @param {Error=} err
16
+ * @param {(Error | null)=} err
17
17
  * @param {T=} result
18
18
  */
19
19
 
@@ -27,6 +27,10 @@ class MultiWatching {
27
27
  this.compiler = compiler;
28
28
  }
29
29
 
30
+ /**
31
+ * @param {Callback<void>=} callback signals when the build has completed again
32
+ * @returns {void}
33
+ */
30
34
  invalidate(callback) {
31
35
  if (callback) {
32
36
  asyncLib.each(
@@ -58,7 +62,7 @@ class MultiWatching {
58
62
  * @returns {void}
59
63
  */
60
64
  close(callback) {
61
- asyncLib.forEach(
65
+ asyncLib.each(
62
66
  this.watchings,
63
67
  (watching, finishedCallback) => {
64
68
  watching.close(finishedCallback);