webpack 5.76.1 → 5.88.2

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -5,6 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ ASSET_MODULE_TYPE_RESOURCE,
10
+ ASSET_MODULE_TYPE_INLINE,
11
+ ASSET_MODULE_TYPE,
12
+ ASSET_MODULE_TYPE_SOURCE
13
+ } = require("../ModuleTypeConstants");
8
14
  const { cleverMerge } = require("../util/cleverMerge");
9
15
  const { compareModulesByIdentifier } = require("../util/comparators");
10
16
  const createSchemaValidation = require("../util/create-schema-validation");
@@ -15,6 +21,10 @@ const memoize = require("../util/memoize");
15
21
  /** @typedef {import("../Compiler")} Compiler */
16
22
  /** @typedef {import("../Module")} Module */
17
23
 
24
+ /**
25
+ * @param {string} name name of definitions
26
+ * @returns {TODO} definition
27
+ */
18
28
  const getSchema = name => {
19
29
  const { definitions } = require("../../schemas/WebpackOptions.json");
20
30
  return {
@@ -61,7 +71,7 @@ const getAssetSourceGenerator = memoize(() =>
61
71
  require("./AssetSourceGenerator")
62
72
  );
63
73
 
64
- const type = "asset";
74
+ const type = ASSET_MODULE_TYPE;
65
75
  const plugin = "AssetModulesPlugin";
66
76
 
67
77
  class AssetModulesPlugin {
@@ -75,7 +85,7 @@ class AssetModulesPlugin {
75
85
  plugin,
76
86
  (compilation, { normalModuleFactory }) => {
77
87
  normalModuleFactory.hooks.createParser
78
- .for("asset")
88
+ .for(ASSET_MODULE_TYPE)
79
89
  .tap(plugin, parserOptions => {
80
90
  validateParserOptions(parserOptions);
81
91
  parserOptions = cleverMerge(
@@ -96,35 +106,39 @@ class AssetModulesPlugin {
96
106
  return new AssetParser(dataUrlCondition);
97
107
  });
98
108
  normalModuleFactory.hooks.createParser
99
- .for("asset/inline")
109
+ .for(ASSET_MODULE_TYPE_INLINE)
100
110
  .tap(plugin, parserOptions => {
101
111
  const AssetParser = getAssetParser();
102
112
 
103
113
  return new AssetParser(true);
104
114
  });
105
115
  normalModuleFactory.hooks.createParser
106
- .for("asset/resource")
116
+ .for(ASSET_MODULE_TYPE_RESOURCE)
107
117
  .tap(plugin, parserOptions => {
108
118
  const AssetParser = getAssetParser();
109
119
 
110
120
  return new AssetParser(false);
111
121
  });
112
122
  normalModuleFactory.hooks.createParser
113
- .for("asset/source")
123
+ .for(ASSET_MODULE_TYPE_SOURCE)
114
124
  .tap(plugin, parserOptions => {
115
125
  const AssetSourceParser = getAssetSourceParser();
116
126
 
117
127
  return new AssetSourceParser();
118
128
  });
119
129
 
120
- for (const type of ["asset", "asset/inline", "asset/resource"]) {
130
+ for (const type of [
131
+ ASSET_MODULE_TYPE,
132
+ ASSET_MODULE_TYPE_INLINE,
133
+ ASSET_MODULE_TYPE_RESOURCE
134
+ ]) {
121
135
  normalModuleFactory.hooks.createGenerator
122
136
  .for(type)
123
137
  .tap(plugin, generatorOptions => {
124
138
  validateGeneratorOptions[type](generatorOptions);
125
139
 
126
140
  let dataUrl = undefined;
127
- if (type !== "asset/resource") {
141
+ if (type !== ASSET_MODULE_TYPE_RESOURCE) {
128
142
  dataUrl = generatorOptions.dataUrl;
129
143
  if (!dataUrl || typeof dataUrl === "object") {
130
144
  dataUrl = {
@@ -138,7 +152,7 @@ class AssetModulesPlugin {
138
152
  let filename = undefined;
139
153
  let publicPath = undefined;
140
154
  let outputPath = undefined;
141
- if (type !== "asset/inline") {
155
+ if (type !== ASSET_MODULE_TYPE_INLINE) {
142
156
  filename = generatorOptions.filename;
143
157
  publicPath = generatorOptions.publicPath;
144
158
  outputPath = generatorOptions.outputPath;
@@ -156,7 +170,7 @@ class AssetModulesPlugin {
156
170
  });
157
171
  }
158
172
  normalModuleFactory.hooks.createGenerator
159
- .for("asset/source")
173
+ .for(ASSET_MODULE_TYPE_SOURCE)
160
174
  .tap(plugin, () => {
161
175
  const AssetSourceGenerator = getAssetSourceGenerator();
162
176
 
@@ -169,7 +183,7 @@ class AssetModulesPlugin {
169
183
 
170
184
  const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
171
185
  chunk,
172
- "asset",
186
+ ASSET_MODULE_TYPE,
173
187
  compareModulesByIdentifier
174
188
  );
175
189
  if (modules) {
@@ -194,7 +208,9 @@ class AssetModulesPlugin {
194
208
  codeGenResult.data.get("fullContentHash")
195
209
  });
196
210
  } catch (e) {
197
- e.message += `\nduring rendering of asset ${module.identifier()}`;
211
+ /** @type {Error} */ (
212
+ e
213
+ ).message += `\nduring rendering of asset ${module.identifier()}`;
198
214
  throw e;
199
215
  }
200
216
  }
@@ -207,7 +223,7 @@ class AssetModulesPlugin {
207
223
  "AssetModulesPlugin",
208
224
  (options, context) => {
209
225
  const { codeGenerationResult } = options;
210
- const source = codeGenerationResult.sources.get("asset");
226
+ const source = codeGenerationResult.sources.get(ASSET_MODULE_TYPE);
211
227
  if (source === undefined) return;
212
228
  context.assets.set(codeGenerationResult.data.get("filename"), {
213
229
  source,
@@ -7,7 +7,10 @@
7
7
 
8
8
  const Parser = require("../Parser");
9
9
 
10
+ /** @typedef {import("../../declarations/WebpackOptions").AssetParserDataUrlOptions} AssetParserDataUrlOptions */
10
11
  /** @typedef {import("../../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
12
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
13
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
11
14
  /** @typedef {import("../Parser").ParserState} ParserState */
12
15
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
13
16
 
@@ -29,23 +32,28 @@ class AssetParser extends Parser {
29
32
  if (typeof source === "object" && !Buffer.isBuffer(source)) {
30
33
  throw new Error("AssetParser doesn't accept preparsed AST");
31
34
  }
32
- state.module.buildInfo.strict = true;
33
- state.module.buildMeta.exportsType = "default";
34
- state.module.buildMeta.defaultObject = false;
35
+
36
+ const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
37
+ buildInfo.strict = true;
38
+ const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
39
+ buildMeta.exportsType = "default";
40
+ buildMeta.defaultObject = false;
35
41
 
36
42
  if (typeof this.dataUrlCondition === "function") {
37
- state.module.buildInfo.dataUrl = this.dataUrlCondition(source, {
43
+ buildInfo.dataUrl = this.dataUrlCondition(source, {
38
44
  filename: state.module.matchResource || state.module.resource,
39
45
  module: state.module
40
46
  });
41
47
  } else if (typeof this.dataUrlCondition === "boolean") {
42
- state.module.buildInfo.dataUrl = this.dataUrlCondition;
48
+ buildInfo.dataUrl = this.dataUrlCondition;
43
49
  } else if (
44
50
  this.dataUrlCondition &&
45
51
  typeof this.dataUrlCondition === "object"
46
52
  ) {
47
- state.module.buildInfo.dataUrl =
48
- Buffer.byteLength(source) <= this.dataUrlCondition.maxSize;
53
+ buildInfo.dataUrl =
54
+ Buffer.byteLength(source) <=
55
+ /** @type {NonNullable<AssetParserDataUrlOptions["maxSize"]>} */
56
+ (this.dataUrlCondition.maxSize);
49
57
  } else {
50
58
  throw new Error("Unexpected dataUrlCondition type");
51
59
  }
@@ -7,6 +7,8 @@
7
7
 
8
8
  const Parser = require("../Parser");
9
9
 
10
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
11
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
10
12
  /** @typedef {import("../Parser").ParserState} ParserState */
11
13
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
12
14
 
@@ -21,9 +23,12 @@ class AssetSourceParser extends Parser {
21
23
  throw new Error("AssetSourceParser doesn't accept preparsed AST");
22
24
  }
23
25
  const { module } = state;
24
- module.buildInfo.strict = true;
25
- module.buildMeta.exportsType = "default";
26
- state.module.buildMeta.defaultObject = false;
26
+ /** @type {BuildInfo} */
27
+ (module.buildInfo).strict = true;
28
+ /** @type {BuildMeta} */
29
+ (module.buildMeta).exportsType = "default";
30
+ /** @type {BuildMeta} */
31
+ (state.module.buildMeta).defaultObject = false;
27
32
 
28
33
  return state;
29
34
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
+ const { ASSET_MODULE_TYPE_RAW_DATA_URL } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
 
@@ -19,6 +20,8 @@ const makeSerializable = require("../util/makeSerializable");
19
20
  /** @typedef {import("../RequestShortener")} RequestShortener */
20
21
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
21
22
  /** @typedef {import("../WebpackError")} WebpackError */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
25
  /** @typedef {import("../util/Hash")} Hash */
23
26
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
24
27
 
@@ -31,7 +34,7 @@ class RawDataUrlModule extends Module {
31
34
  * @param {string=} readableIdentifier readable identifier
32
35
  */
33
36
  constructor(url, identifier, readableIdentifier) {
34
- super("asset/raw-data-url", null);
37
+ super(ASSET_MODULE_TYPE_RAW_DATA_URL, null);
35
38
  this.url = url;
36
39
  this.urlBuffer = url ? Buffer.from(url) : undefined;
37
40
  this.identifierStr = identifier || this.url;
@@ -57,7 +60,8 @@ class RawDataUrlModule extends Module {
57
60
  * @returns {number} the estimated size of the module (must be non-zero)
58
61
  */
59
62
  size(type) {
60
- if (this.url === undefined) this.url = this.urlBuffer.toString();
63
+ if (this.url === undefined)
64
+ this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
61
65
  return Math.max(1, this.url.length);
62
66
  }
63
67
 
@@ -99,7 +103,8 @@ class RawDataUrlModule extends Module {
99
103
  * @returns {CodeGenerationResult} result
100
104
  */
101
105
  codeGeneration(context) {
102
- if (this.url === undefined) this.url = this.urlBuffer.toString();
106
+ if (this.url === undefined)
107
+ this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
103
108
  const sources = new Map();
104
109
  sources.set(
105
110
  "javascript",
@@ -118,10 +123,13 @@ class RawDataUrlModule extends Module {
118
123
  * @returns {void}
119
124
  */
120
125
  updateHash(hash, context) {
121
- hash.update(this.urlBuffer);
126
+ hash.update(/** @type {Buffer} */ (this.urlBuffer));
122
127
  super.updateHash(hash, context);
123
128
  }
124
129
 
130
+ /**
131
+ * @param {ObjectSerializerContext} context context
132
+ */
125
133
  serialize(context) {
126
134
  const { write } = context;
127
135
 
@@ -132,6 +140,9 @@ class RawDataUrlModule extends Module {
132
140
  super.serialize(context);
133
141
  }
134
142
 
143
+ /**
144
+ * @param {ObjectDeserializerContext} context context
145
+ */
135
146
  deserialize(context) {
136
147
  const { read } = context;
137
148
 
@@ -29,6 +29,10 @@ class AwaitDependenciesInitFragment extends InitFragment {
29
29
  this.promises = promises;
30
30
  }
31
31
 
32
+ /**
33
+ * @param {AwaitDependenciesInitFragment} other other AwaitDependenciesInitFragment
34
+ * @returns {AwaitDependenciesInitFragment} AwaitDependenciesInitFragment
35
+ */
32
36
  merge(other) {
33
37
  const promises = new Set(other.promises);
34
38
  for (const p of this.promises) {
@@ -42,7 +42,7 @@ class InferAsyncModulesPlugin {
42
42
  c.isTargetActive(undefined)
43
43
  )
44
44
  ) {
45
- queue.add(originModule);
45
+ queue.add(/** @type {Module} */ (originModule));
46
46
  }
47
47
  }
48
48
  }
@@ -16,6 +16,7 @@ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
16
16
  /** @typedef {import("./Compilation")} Compilation */
17
17
  /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
18
18
  /** @typedef {import("./Dependency")} Dependency */
19
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
19
20
  /** @typedef {import("./Entrypoint")} Entrypoint */
20
21
  /** @typedef {import("./Module")} Module */
21
22
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
@@ -39,15 +40,15 @@ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
39
40
  * @typedef {Object} ChunkGroupInfo
40
41
  * @property {ChunkGroup} chunkGroup the chunk group
41
42
  * @property {RuntimeSpec} runtime the runtimes
42
- * @property {ModuleSetPlus} minAvailableModules current minimal set of modules available at this point
43
- * @property {boolean} minAvailableModulesOwned true, if minAvailableModules is owned and can be modified
43
+ * @property {ModuleSetPlus | undefined} minAvailableModules current minimal set of modules available at this point
44
+ * @property {boolean | undefined} minAvailableModulesOwned true, if minAvailableModules is owned and can be modified
44
45
  * @property {ModuleSetPlus[]} availableModulesToBeMerged enqueued updates to the minimal set of available modules
45
46
  * @property {Set<Module>=} skippedItems modules that were skipped because module is already available in parent chunks (need to reconsider when minAvailableModules is shrinking)
46
47
  * @property {Set<[Module, ConnectionState]>=} skippedModuleConnections referenced modules that where skipped because they were not active in this runtime
47
- * @property {ModuleSetPlus} resultingAvailableModules set of modules available including modules from this chunk group
48
- * @property {Set<ChunkGroupInfo>} children set of children chunk groups, that will be revisited when availableModules shrink
49
- * @property {Set<ChunkGroupInfo>} availableSources set of chunk groups that are the source for minAvailableModules
50
- * @property {Set<ChunkGroupInfo>} availableChildren set of chunk groups which depend on the this chunk group as availableSource
48
+ * @property {ModuleSetPlus | undefined} resultingAvailableModules set of modules available including modules from this chunk group
49
+ * @property {Set<ChunkGroupInfo> | undefined} children set of children chunk groups, that will be revisited when availableModules shrink
50
+ * @property {Set<ChunkGroupInfo> | undefined} availableSources set of chunk groups that are the source for minAvailableModules
51
+ * @property {Set<ChunkGroupInfo> | undefined} availableChildren set of chunk groups which depend on the this chunk group as availableSource
51
52
  * @property {number} preOrderIndex next pre order index
52
53
  * @property {number} postOrderIndex next post order index
53
54
  * @property {boolean} chunkLoading has a chunk loading mechanism
@@ -199,6 +200,7 @@ const visitModules = (
199
200
 
200
201
  /** @type {RuntimeSpec | false} */
201
202
  let blockModulesMapRuntime = false;
203
+ /** @type {Map<DependenciesBlock, (Module | ConnectionState)[]>} */
202
204
  let blockModulesMap;
203
205
 
204
206
  /**
@@ -239,7 +241,7 @@ const visitModules = (
239
241
  extractBlockModules(module, moduleGraph, runtime, blockModulesMap);
240
242
  blockModules = blockModulesMap.get(block);
241
243
  logger.timeAggregate("visitModules: prepare");
242
- return blockModules;
244
+ return /** @type {(Module | ConnectionState)[]} */ (blockModules);
243
245
  }
244
246
  };
245
247
 
@@ -290,7 +292,7 @@ const visitModules = (
290
292
  for (const [chunkGroup, modules] of inputEntrypointsAndModules) {
291
293
  const runtime = getEntryRuntime(
292
294
  compilation,
293
- chunkGroup.name,
295
+ /** @type {string} */ (chunkGroup.name),
294
296
  chunkGroup.options
295
297
  );
296
298
  /** @type {ChunkGroupInfo} */
@@ -352,7 +354,9 @@ const visitModules = (
352
354
  const { chunkGroup } = chunkGroupInfo;
353
355
  chunkGroupInfo.availableSources = new Set();
354
356
  for (const parent of chunkGroup.parentsIterable) {
355
- const parentChunkGroupInfo = chunkGroupInfoMap.get(parent);
357
+ const parentChunkGroupInfo =
358
+ /** @type {ChunkGroupInfo} */
359
+ (chunkGroupInfoMap.get(parent));
356
360
  chunkGroupInfo.availableSources.add(parentChunkGroupInfo);
357
361
  if (parentChunkGroupInfo.availableChildren === undefined) {
358
362
  parentChunkGroupInfo.availableChildren = new Set();
@@ -399,15 +403,15 @@ const visitModules = (
399
403
  // 1. We create a chunk group with single chunk in it for this Block
400
404
  // but only once (blockChunkGroups map)
401
405
  let cgi = blockChunkGroups.get(b);
402
- /** @type {ChunkGroup} */
406
+ /** @type {ChunkGroup | undefined} */
403
407
  let c;
404
- /** @type {Entrypoint} */
408
+ /** @type {Entrypoint | undefined} */
405
409
  let entrypoint;
406
410
  const entryOptions = b.groupOptions && b.groupOptions.entryOptions;
407
411
  if (cgi === undefined) {
408
412
  const chunkName = (b.groupOptions && b.groupOptions.name) || b.chunkName;
409
413
  if (entryOptions) {
410
- cgi = namedAsyncEntrypoints.get(chunkName);
414
+ cgi = namedAsyncEntrypoints.get(/** @type {string} */ (chunkName));
411
415
  if (!cgi) {
412
416
  entrypoint = compilation.addAsyncEntrypoint(
413
417
  entryOptions,
@@ -505,7 +509,11 @@ const visitModules = (
505
509
  c = cgi.chunkGroup;
506
510
  if (c.isInitial()) {
507
511
  compilation.errors.push(
508
- new AsyncDependencyToInitialChunkError(chunkName, module, b.loc)
512
+ new AsyncDependencyToInitialChunkError(
513
+ /** @type {string} */ (chunkName),
514
+ module,
515
+ b.loc
516
+ )
509
517
  );
510
518
  c = chunkGroup;
511
519
  } else {
@@ -515,7 +523,7 @@ const visitModules = (
515
523
  }
516
524
  blockConnections.set(b, []);
517
525
  }
518
- blockChunkGroups.set(b, cgi);
526
+ blockChunkGroups.set(b, /** @type {ChunkGroupInfo} */ (cgi));
519
527
  } else if (entryOptions) {
520
528
  entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
521
529
  } else {
@@ -536,7 +544,7 @@ const visitModules = (
536
544
  connectList = new Set();
537
545
  queueConnect.set(chunkGroupInfo, connectList);
538
546
  }
539
- connectList.add(cgi);
547
+ connectList.add(/** @type {ChunkGroupInfo} */ (cgi));
540
548
 
541
549
  // TODO check if this really need to be done for each traversal
542
550
  // or if it is enough when it's queued when created
@@ -547,7 +555,7 @@ const visitModules = (
547
555
  module: module,
548
556
  chunk: c.chunks[0],
549
557
  chunkGroup: c,
550
- chunkGroupInfo: cgi
558
+ chunkGroupInfo: /** @type {ChunkGroupInfo} */ (cgi)
551
559
  });
552
560
  } else if (entrypoint !== undefined) {
553
561
  chunkGroupInfo.chunkGroup.addAsyncEntrypoint(entrypoint);
@@ -690,7 +698,7 @@ const visitModules = (
690
698
  const processQueue = () => {
691
699
  while (queue.length) {
692
700
  statProcessedQueueItems++;
693
- const queueItem = queue.pop();
701
+ const queueItem = /** @type {QueueItem} */ (queue.pop());
694
702
  module = queueItem.module;
695
703
  block = queueItem.block;
696
704
  chunk = queueItem.chunk;
@@ -1087,7 +1095,9 @@ const visitModules = (
1087
1095
 
1088
1096
  const processChunkGroupsForCombining = () => {
1089
1097
  for (const info of chunkGroupsForCombining) {
1090
- for (const source of info.availableSources) {
1098
+ for (const source of /** @type {Set<ChunkGroupInfo>} */ (
1099
+ info.availableSources
1100
+ )) {
1091
1101
  if (!source.minAvailableModules) {
1092
1102
  chunkGroupsForCombining.delete(info);
1093
1103
  break;
@@ -1106,7 +1116,9 @@ const visitModules = (
1106
1116
  }
1107
1117
  };
1108
1118
  // combine minAvailableModules from all resultingAvailableModules
1109
- for (const source of info.availableSources) {
1119
+ for (const source of /** @type {Set<ChunkGroupInfo>} */ (
1120
+ info.availableSources
1121
+ )) {
1110
1122
  const resultingAvailableModules =
1111
1123
  calculateResultingAvailableModules(source);
1112
1124
  mergeSet(resultingAvailableModules);
@@ -1126,7 +1138,9 @@ const visitModules = (
1126
1138
  for (const info of outdatedChunkGroupInfo) {
1127
1139
  // 1. Reconsider skipped items
1128
1140
  if (info.skippedItems !== undefined) {
1129
- const { minAvailableModules } = info;
1141
+ const minAvailableModules =
1142
+ /** @type {ModuleSetPlus} */
1143
+ (info.minAvailableModules);
1130
1144
  for (const module of info.skippedItems) {
1131
1145
  if (
1132
1146
  !minAvailableModules.has(module) &&
@@ -1147,7 +1161,9 @@ const visitModules = (
1147
1161
 
1148
1162
  // 2. Reconsider skipped connections
1149
1163
  if (info.skippedModuleConnections !== undefined) {
1150
- const { minAvailableModules } = info;
1164
+ const minAvailableModules =
1165
+ /** @type {ModuleSetPlus} */
1166
+ (info.minAvailableModules);
1151
1167
  for (const entry of info.skippedModuleConnections) {
1152
1168
  const [module, activeState] = entry;
1153
1169
  if (activeState === false) continue;
@@ -50,7 +50,7 @@ class IdleFileCachePlugin {
50
50
  let timeSpendInStore = 0;
51
51
  let avgTimeSpendInStore = 0;
52
52
 
53
- /** @type {Map<string | typeof BUILD_DEPENDENCIES_KEY, () => Promise>} */
53
+ /** @type {Map<string | typeof BUILD_DEPENDENCIES_KEY, () => Promise<void>>} */
54
54
  const pendingIdleTasks = new Map();
55
55
 
56
56
  compiler.cache.hooks.store.tap(
@@ -171,6 +171,7 @@ class IdleFileCachePlugin {
171
171
  isInitialStore = false;
172
172
  }
173
173
  };
174
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
174
175
  let idleTimer = undefined;
175
176
  compiler.cache.hooks.beginIdle.tap(
176
177
  { name: "IdleFileCachePlugin", stage: Cache.STAGE_DISK },
@@ -34,6 +34,8 @@ class MemoryWithGcCachePlugin {
34
34
  generation++;
35
35
  let clearedEntries = 0;
36
36
  let lastClearedIdentifier;
37
+ // Avoid coverage problems due indirect changes
38
+ /* istanbul ignore next */
37
39
  for (const [identifier, entry] of oldCache) {
38
40
  if (entry.until > generation) break;
39
41