@depup/webpack 5.105.4-depup.37

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 (709) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +38 -0
  3. package/bin/webpack.js +196 -0
  4. package/hot/dev-server.js +90 -0
  5. package/hot/emitter-event-target.js +7 -0
  6. package/hot/emitter.js +2 -0
  7. package/hot/lazy-compilation-node.js +66 -0
  8. package/hot/lazy-compilation-universal.js +18 -0
  9. package/hot/lazy-compilation-web.js +93 -0
  10. package/hot/load-http.js +7 -0
  11. package/hot/log-apply-result.js +49 -0
  12. package/hot/log.js +78 -0
  13. package/hot/only-dev-server.js +118 -0
  14. package/hot/poll.js +41 -0
  15. package/hot/signal.js +66 -0
  16. package/lib/APIPlugin.js +392 -0
  17. package/lib/AbstractMethodError.js +56 -0
  18. package/lib/AsyncDependenciesBlock.js +128 -0
  19. package/lib/AsyncDependencyToInitialChunkError.js +34 -0
  20. package/lib/AutomaticPrefetchPlugin.js +66 -0
  21. package/lib/BannerPlugin.js +138 -0
  22. package/lib/Cache.js +168 -0
  23. package/lib/CacheFacade.js +349 -0
  24. package/lib/CaseSensitiveModulesWarning.js +72 -0
  25. package/lib/Chunk.js +899 -0
  26. package/lib/ChunkGraph.js +1968 -0
  27. package/lib/ChunkGroup.js +615 -0
  28. package/lib/ChunkRenderError.js +38 -0
  29. package/lib/ChunkTemplate.js +181 -0
  30. package/lib/CleanPlugin.js +495 -0
  31. package/lib/CodeGenerationError.js +35 -0
  32. package/lib/CodeGenerationResults.js +167 -0
  33. package/lib/CommentCompilationWarning.js +33 -0
  34. package/lib/CompatibilityPlugin.js +240 -0
  35. package/lib/Compilation.js +5876 -0
  36. package/lib/Compiler.js +1413 -0
  37. package/lib/ConcatenationScope.js +181 -0
  38. package/lib/ConcurrentCompilationError.js +18 -0
  39. package/lib/ConditionalInitFragment.js +120 -0
  40. package/lib/ConstPlugin.js +567 -0
  41. package/lib/ContextExclusionPlugin.js +33 -0
  42. package/lib/ContextModule.js +1411 -0
  43. package/lib/ContextModuleFactory.js +514 -0
  44. package/lib/ContextReplacementPlugin.js +227 -0
  45. package/lib/CssModule.js +179 -0
  46. package/lib/DefinePlugin.js +878 -0
  47. package/lib/DelegatedModule.js +279 -0
  48. package/lib/DelegatedModuleFactoryPlugin.js +116 -0
  49. package/lib/DelegatedPlugin.js +49 -0
  50. package/lib/DependenciesBlock.js +120 -0
  51. package/lib/Dependency.js +390 -0
  52. package/lib/DependencyTemplate.js +71 -0
  53. package/lib/DependencyTemplates.js +67 -0
  54. package/lib/DllEntryPlugin.js +76 -0
  55. package/lib/DllModule.js +175 -0
  56. package/lib/DllModuleFactory.js +38 -0
  57. package/lib/DllPlugin.js +73 -0
  58. package/lib/DllReferencePlugin.js +189 -0
  59. package/lib/DotenvPlugin.js +468 -0
  60. package/lib/DynamicEntryPlugin.js +93 -0
  61. package/lib/EntryOptionPlugin.js +98 -0
  62. package/lib/EntryPlugin.js +72 -0
  63. package/lib/Entrypoint.js +120 -0
  64. package/lib/EnvironmentNotSupportAsyncWarning.js +51 -0
  65. package/lib/EnvironmentPlugin.js +74 -0
  66. package/lib/ErrorHelpers.js +100 -0
  67. package/lib/EvalDevToolModulePlugin.js +135 -0
  68. package/lib/EvalSourceMapDevToolPlugin.js +252 -0
  69. package/lib/ExportsInfo.js +1663 -0
  70. package/lib/ExportsInfoApiPlugin.js +87 -0
  71. package/lib/ExternalModule.js +1169 -0
  72. package/lib/ExternalModuleFactoryPlugin.js +370 -0
  73. package/lib/ExternalsPlugin.js +93 -0
  74. package/lib/FalseIIFEUmdWarning.js +20 -0
  75. package/lib/FileSystemInfo.js +4131 -0
  76. package/lib/FlagAllModulesAsUsedPlugin.js +55 -0
  77. package/lib/FlagDependencyExportsPlugin.js +437 -0
  78. package/lib/FlagDependencyUsagePlugin.js +348 -0
  79. package/lib/FlagEntryExportAsUsedPlugin.js +56 -0
  80. package/lib/Generator.js +188 -0
  81. package/lib/GraphHelpers.js +46 -0
  82. package/lib/HarmonyLinkingError.js +17 -0
  83. package/lib/HookWebpackError.js +121 -0
  84. package/lib/HotModuleReplacementPlugin.js +930 -0
  85. package/lib/HotUpdateChunk.js +16 -0
  86. package/lib/IgnoreErrorModuleFactory.js +39 -0
  87. package/lib/IgnorePlugin.js +105 -0
  88. package/lib/IgnoreWarningsPlugin.js +41 -0
  89. package/lib/InitFragment.js +204 -0
  90. package/lib/InvalidDependenciesModuleWarning.js +44 -0
  91. package/lib/JavascriptMetaInfoPlugin.js +78 -0
  92. package/lib/LibManifestPlugin.js +144 -0
  93. package/lib/LibraryTemplatePlugin.js +48 -0
  94. package/lib/LoaderOptionsPlugin.js +81 -0
  95. package/lib/LoaderTargetPlugin.js +39 -0
  96. package/lib/MainTemplate.js +371 -0
  97. package/lib/ManifestPlugin.js +242 -0
  98. package/lib/Module.js +1319 -0
  99. package/lib/ModuleBuildError.js +83 -0
  100. package/lib/ModuleDependencyError.js +44 -0
  101. package/lib/ModuleDependencyWarning.js +49 -0
  102. package/lib/ModuleError.js +69 -0
  103. package/lib/ModuleFactory.js +57 -0
  104. package/lib/ModuleFilenameHelpers.js +388 -0
  105. package/lib/ModuleGraph.js +1024 -0
  106. package/lib/ModuleGraphConnection.js +199 -0
  107. package/lib/ModuleHashingError.js +31 -0
  108. package/lib/ModuleInfoHeaderPlugin.js +318 -0
  109. package/lib/ModuleNotFoundError.js +90 -0
  110. package/lib/ModuleParseError.js +125 -0
  111. package/lib/ModuleProfile.js +108 -0
  112. package/lib/ModuleRestoreError.js +46 -0
  113. package/lib/ModuleSourceTypeConstants.js +179 -0
  114. package/lib/ModuleStoreError.js +45 -0
  115. package/lib/ModuleTemplate.js +173 -0
  116. package/lib/ModuleTypeConstants.js +190 -0
  117. package/lib/ModuleWarning.js +68 -0
  118. package/lib/MultiCompiler.js +678 -0
  119. package/lib/MultiStats.js +213 -0
  120. package/lib/MultiWatching.js +77 -0
  121. package/lib/NoEmitOnErrorsPlugin.js +30 -0
  122. package/lib/NoModeWarning.js +23 -0
  123. package/lib/NodeStuffInWebError.js +35 -0
  124. package/lib/NodeStuffPlugin.js +587 -0
  125. package/lib/NormalModule.js +1798 -0
  126. package/lib/NormalModuleFactory.js +1455 -0
  127. package/lib/NormalModuleReplacementPlugin.js +75 -0
  128. package/lib/NullFactory.js +24 -0
  129. package/lib/OptimizationStages.js +10 -0
  130. package/lib/OptionsApply.js +24 -0
  131. package/lib/Parser.js +40 -0
  132. package/lib/PlatformPlugin.js +41 -0
  133. package/lib/PrefetchPlugin.js +56 -0
  134. package/lib/ProgressPlugin.js +712 -0
  135. package/lib/ProvidePlugin.js +121 -0
  136. package/lib/RawModule.js +180 -0
  137. package/lib/RecordIdsPlugin.js +216 -0
  138. package/lib/RequestShortener.js +36 -0
  139. package/lib/RequireJsStuffPlugin.js +84 -0
  140. package/lib/ResolverFactory.js +156 -0
  141. package/lib/RuntimeGlobals.js +450 -0
  142. package/lib/RuntimeModule.js +242 -0
  143. package/lib/RuntimePlugin.js +547 -0
  144. package/lib/RuntimeTemplate.js +1288 -0
  145. package/lib/SelfModuleFactory.js +33 -0
  146. package/lib/SingleEntryPlugin.js +8 -0
  147. package/lib/SizeFormatHelpers.js +25 -0
  148. package/lib/SourceMapDevToolModuleOptionsPlugin.js +52 -0
  149. package/lib/SourceMapDevToolPlugin.js +646 -0
  150. package/lib/Stats.js +89 -0
  151. package/lib/Template.js +427 -0
  152. package/lib/TemplatedPathPlugin.js +400 -0
  153. package/lib/UnhandledSchemeError.js +34 -0
  154. package/lib/UnsupportedFeatureWarning.js +35 -0
  155. package/lib/UseStrictPlugin.js +81 -0
  156. package/lib/WarnCaseSensitiveModulesPlugin.js +64 -0
  157. package/lib/WarnDeprecatedOptionPlugin.js +60 -0
  158. package/lib/WarnNoModeSetPlugin.js +27 -0
  159. package/lib/WatchIgnorePlugin.js +155 -0
  160. package/lib/Watching.js +531 -0
  161. package/lib/WebpackError.js +81 -0
  162. package/lib/WebpackIsIncludedPlugin.js +93 -0
  163. package/lib/WebpackOptionsApply.js +941 -0
  164. package/lib/WebpackOptionsDefaulter.js +26 -0
  165. package/lib/asset/AssetBytesGenerator.js +172 -0
  166. package/lib/asset/AssetBytesParser.js +37 -0
  167. package/lib/asset/AssetGenerator.js +816 -0
  168. package/lib/asset/AssetModulesPlugin.js +358 -0
  169. package/lib/asset/AssetParser.js +73 -0
  170. package/lib/asset/AssetSourceGenerator.js +171 -0
  171. package/lib/asset/AssetSourceParser.js +37 -0
  172. package/lib/asset/RawDataUrlModule.js +179 -0
  173. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  174. package/lib/async-modules/AwaitDependenciesInitFragment.js +90 -0
  175. package/lib/async-modules/InferAsyncModulesPlugin.js +54 -0
  176. package/lib/buildChunkGraph.js +1392 -0
  177. package/lib/cache/AddBuildDependenciesPlugin.js +32 -0
  178. package/lib/cache/AddManagedPathsPlugin.js +40 -0
  179. package/lib/cache/IdleFileCachePlugin.js +242 -0
  180. package/lib/cache/MemoryCachePlugin.js +57 -0
  181. package/lib/cache/MemoryWithGcCachePlugin.js +142 -0
  182. package/lib/cache/PackFileCacheStrategy.js +1600 -0
  183. package/lib/cache/ResolverCachePlugin.js +450 -0
  184. package/lib/cache/getLazyHashedEtag.js +91 -0
  185. package/lib/cache/mergeEtags.js +71 -0
  186. package/lib/cli.js +859 -0
  187. package/lib/config/browserslistTargetHandler.js +388 -0
  188. package/lib/config/defaults.js +2086 -0
  189. package/lib/config/normalization.js +681 -0
  190. package/lib/config/target.js +389 -0
  191. package/lib/container/ContainerEntryDependency.js +50 -0
  192. package/lib/container/ContainerEntryModule.js +303 -0
  193. package/lib/container/ContainerEntryModuleFactory.js +27 -0
  194. package/lib/container/ContainerExposedDependency.js +62 -0
  195. package/lib/container/ContainerPlugin.js +118 -0
  196. package/lib/container/ContainerReferencePlugin.js +139 -0
  197. package/lib/container/FallbackDependency.js +66 -0
  198. package/lib/container/FallbackItemDependency.js +34 -0
  199. package/lib/container/FallbackModule.js +193 -0
  200. package/lib/container/FallbackModuleFactory.js +27 -0
  201. package/lib/container/HoistContainerReferencesPlugin.js +256 -0
  202. package/lib/container/ModuleFederationPlugin.js +131 -0
  203. package/lib/container/RemoteModule.js +225 -0
  204. package/lib/container/RemoteRuntimeModule.js +144 -0
  205. package/lib/container/RemoteToExternalDependency.js +33 -0
  206. package/lib/container/options.js +105 -0
  207. package/lib/css/CssGenerator.js +587 -0
  208. package/lib/css/CssLoadingRuntimeModule.js +513 -0
  209. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  210. package/lib/css/CssModulesPlugin.js +939 -0
  211. package/lib/css/CssParser.js +2621 -0
  212. package/lib/css/walkCssTokens.js +1740 -0
  213. package/lib/debug/ProfilingPlugin.js +589 -0
  214. package/lib/dependencies/AMDDefineDependency.js +267 -0
  215. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +504 -0
  216. package/lib/dependencies/AMDPlugin.js +243 -0
  217. package/lib/dependencies/AMDRequireArrayDependency.js +124 -0
  218. package/lib/dependencies/AMDRequireContextDependency.js +69 -0
  219. package/lib/dependencies/AMDRequireDependenciesBlock.js +28 -0
  220. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +425 -0
  221. package/lib/dependencies/AMDRequireDependency.js +189 -0
  222. package/lib/dependencies/AMDRequireItemDependency.js +41 -0
  223. package/lib/dependencies/AMDRuntimeModules.js +50 -0
  224. package/lib/dependencies/CachedConstDependency.js +135 -0
  225. package/lib/dependencies/CommonJsDependencyHelpers.js +65 -0
  226. package/lib/dependencies/CommonJsExportRequireDependency.js +416 -0
  227. package/lib/dependencies/CommonJsExportsDependency.js +184 -0
  228. package/lib/dependencies/CommonJsExportsParserPlugin.js +425 -0
  229. package/lib/dependencies/CommonJsFullRequireDependency.js +162 -0
  230. package/lib/dependencies/CommonJsImportsParserPlugin.js +611 -0
  231. package/lib/dependencies/CommonJsPlugin.js +316 -0
  232. package/lib/dependencies/CommonJsRequireContextDependency.js +73 -0
  233. package/lib/dependencies/CommonJsRequireDependency.js +42 -0
  234. package/lib/dependencies/CommonJsSelfReferenceDependency.js +156 -0
  235. package/lib/dependencies/ConstDependency.js +118 -0
  236. package/lib/dependencies/ContextDependency.js +183 -0
  237. package/lib/dependencies/ContextDependencyHelpers.js +277 -0
  238. package/lib/dependencies/ContextDependencyTemplateAsId.js +63 -0
  239. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +62 -0
  240. package/lib/dependencies/ContextElementDependency.js +147 -0
  241. package/lib/dependencies/CreateRequireParserPlugin.js +356 -0
  242. package/lib/dependencies/CreateScriptUrlDependency.js +75 -0
  243. package/lib/dependencies/CriticalDependencyWarning.js +29 -0
  244. package/lib/dependencies/CssIcssExportDependency.js +539 -0
  245. package/lib/dependencies/CssIcssImportDependency.js +183 -0
  246. package/lib/dependencies/CssIcssSymbolDependency.js +131 -0
  247. package/lib/dependencies/CssImportDependency.js +120 -0
  248. package/lib/dependencies/CssUrlDependency.js +189 -0
  249. package/lib/dependencies/DelegatedSourceDependency.js +33 -0
  250. package/lib/dependencies/DllEntryDependency.js +61 -0
  251. package/lib/dependencies/DynamicExports.js +73 -0
  252. package/lib/dependencies/EntryDependency.js +30 -0
  253. package/lib/dependencies/ExportsInfoDependency.js +161 -0
  254. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  255. package/lib/dependencies/ExternalModuleInitFragment.js +137 -0
  256. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +87 -0
  257. package/lib/dependencies/HarmonyAcceptDependency.js +237 -0
  258. package/lib/dependencies/HarmonyAcceptImportDependency.js +37 -0
  259. package/lib/dependencies/HarmonyCompatibilityDependency.js +91 -0
  260. package/lib/dependencies/HarmonyDetectionParserPlugin.js +103 -0
  261. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +165 -0
  262. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +254 -0
  263. package/lib/dependencies/HarmonyExportExpressionDependency.js +211 -0
  264. package/lib/dependencies/HarmonyExportHeaderDependency.js +78 -0
  265. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +1494 -0
  266. package/lib/dependencies/HarmonyExportInitFragment.js +191 -0
  267. package/lib/dependencies/HarmonyExportSpecifierDependency.js +127 -0
  268. package/lib/dependencies/HarmonyExports.js +46 -0
  269. package/lib/dependencies/HarmonyImportDependency.js +459 -0
  270. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +576 -0
  271. package/lib/dependencies/HarmonyImportSideEffectDependency.js +91 -0
  272. package/lib/dependencies/HarmonyImportSpecifierDependency.js +514 -0
  273. package/lib/dependencies/HarmonyModulesPlugin.js +158 -0
  274. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +39 -0
  275. package/lib/dependencies/ImportContextDependency.js +81 -0
  276. package/lib/dependencies/ImportDependency.js +158 -0
  277. package/lib/dependencies/ImportEagerDependency.js +76 -0
  278. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  279. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +312 -0
  280. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  281. package/lib/dependencies/ImportMetaHotAcceptDependency.js +41 -0
  282. package/lib/dependencies/ImportMetaHotDeclineDependency.js +42 -0
  283. package/lib/dependencies/ImportMetaPlugin.js +447 -0
  284. package/lib/dependencies/ImportParserPlugin.js +602 -0
  285. package/lib/dependencies/ImportPhase.js +125 -0
  286. package/lib/dependencies/ImportPlugin.js +98 -0
  287. package/lib/dependencies/ImportWeakDependency.js +74 -0
  288. package/lib/dependencies/JsonExportsDependency.js +137 -0
  289. package/lib/dependencies/LoaderDependency.js +38 -0
  290. package/lib/dependencies/LoaderImportDependency.js +39 -0
  291. package/lib/dependencies/LoaderPlugin.js +294 -0
  292. package/lib/dependencies/LocalModule.js +60 -0
  293. package/lib/dependencies/LocalModuleDependency.js +84 -0
  294. package/lib/dependencies/LocalModulesHelpers.js +68 -0
  295. package/lib/dependencies/ModuleDecoratorDependency.js +136 -0
  296. package/lib/dependencies/ModuleDependency.js +100 -0
  297. package/lib/dependencies/ModuleDependencyTemplateAsId.js +35 -0
  298. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +39 -0
  299. package/lib/dependencies/ModuleHotAcceptDependency.js +41 -0
  300. package/lib/dependencies/ModuleHotDeclineDependency.js +42 -0
  301. package/lib/dependencies/ModuleInitFragmentDependency.js +87 -0
  302. package/lib/dependencies/NullDependency.js +42 -0
  303. package/lib/dependencies/PrefetchDependency.js +27 -0
  304. package/lib/dependencies/ProvidedDependency.js +156 -0
  305. package/lib/dependencies/PureExpressionDependency.js +161 -0
  306. package/lib/dependencies/RequireContextDependency.js +38 -0
  307. package/lib/dependencies/RequireContextDependencyParserPlugin.js +69 -0
  308. package/lib/dependencies/RequireContextPlugin.js +167 -0
  309. package/lib/dependencies/RequireEnsureDependenciesBlock.js +29 -0
  310. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +145 -0
  311. package/lib/dependencies/RequireEnsureDependency.js +115 -0
  312. package/lib/dependencies/RequireEnsureItemDependency.js +36 -0
  313. package/lib/dependencies/RequireEnsurePlugin.js +86 -0
  314. package/lib/dependencies/RequireHeaderDependency.js +70 -0
  315. package/lib/dependencies/RequireIncludeDependency.js +79 -0
  316. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +100 -0
  317. package/lib/dependencies/RequireIncludePlugin.js +63 -0
  318. package/lib/dependencies/RequireResolveContextDependency.js +67 -0
  319. package/lib/dependencies/RequireResolveDependency.js +58 -0
  320. package/lib/dependencies/RequireResolveHeaderDependency.js +81 -0
  321. package/lib/dependencies/RuntimeRequirementsDependency.js +85 -0
  322. package/lib/dependencies/StaticExportsDependency.js +72 -0
  323. package/lib/dependencies/SystemPlugin.js +168 -0
  324. package/lib/dependencies/SystemRuntimeModule.js +35 -0
  325. package/lib/dependencies/URLContextDependency.js +65 -0
  326. package/lib/dependencies/URLDependency.js +165 -0
  327. package/lib/dependencies/URLPlugin.js +67 -0
  328. package/lib/dependencies/UnsupportedDependency.js +82 -0
  329. package/lib/dependencies/WebAssemblyExportImportedDependency.js +93 -0
  330. package/lib/dependencies/WebAssemblyImportDependency.js +108 -0
  331. package/lib/dependencies/WebpackIsIncludedDependency.js +84 -0
  332. package/lib/dependencies/WorkerDependency.js +141 -0
  333. package/lib/dependencies/WorkerPlugin.js +565 -0
  334. package/lib/dependencies/getFunctionExpression.js +66 -0
  335. package/lib/dependencies/processExportInfo.js +67 -0
  336. package/lib/electron/ElectronTargetPlugin.js +71 -0
  337. package/lib/errors/BuildCycleError.js +30 -0
  338. package/lib/esm/ExportWebpackRequireRuntimeModule.js +30 -0
  339. package/lib/esm/ModuleChunkFormatPlugin.js +273 -0
  340. package/lib/esm/ModuleChunkLoadingPlugin.js +143 -0
  341. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +426 -0
  342. package/lib/formatLocation.js +67 -0
  343. package/lib/hmr/HotModuleReplacement.runtime.js +419 -0
  344. package/lib/hmr/HotModuleReplacementRuntimeModule.js +42 -0
  345. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +471 -0
  346. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  347. package/lib/hmr/LazyCompilationPlugin.js +473 -0
  348. package/lib/hmr/lazyCompilationBackend.js +167 -0
  349. package/lib/ids/ChunkModuleIdRangePlugin.js +94 -0
  350. package/lib/ids/DeterministicChunkIdsPlugin.js +73 -0
  351. package/lib/ids/DeterministicModuleIdsPlugin.js +98 -0
  352. package/lib/ids/HashedModuleIdsPlugin.js +85 -0
  353. package/lib/ids/IdHelpers.js +492 -0
  354. package/lib/ids/NamedChunkIdsPlugin.js +92 -0
  355. package/lib/ids/NamedModuleIdsPlugin.js +68 -0
  356. package/lib/ids/NaturalChunkIdsPlugin.js +35 -0
  357. package/lib/ids/NaturalModuleIdsPlugin.js +40 -0
  358. package/lib/ids/OccurrenceChunkIdsPlugin.js +86 -0
  359. package/lib/ids/OccurrenceModuleIdsPlugin.js +168 -0
  360. package/lib/ids/SyncModuleIdsPlugin.js +161 -0
  361. package/lib/index.js +681 -0
  362. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +153 -0
  363. package/lib/javascript/BasicEvaluatedExpression.js +603 -0
  364. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  365. package/lib/javascript/ChunkHelpers.js +45 -0
  366. package/lib/javascript/CommonJsChunkFormatPlugin.js +148 -0
  367. package/lib/javascript/EnableChunkLoadingPlugin.js +127 -0
  368. package/lib/javascript/JavascriptGenerator.js +277 -0
  369. package/lib/javascript/JavascriptModulesPlugin.js +1905 -0
  370. package/lib/javascript/JavascriptParser.js +5476 -0
  371. package/lib/javascript/JavascriptParserHelpers.js +129 -0
  372. package/lib/javascript/StartupHelpers.js +178 -0
  373. package/lib/json/JsonData.js +74 -0
  374. package/lib/json/JsonGenerator.js +234 -0
  375. package/lib/json/JsonModulesPlugin.js +66 -0
  376. package/lib/json/JsonParser.js +93 -0
  377. package/lib/library/AbstractLibraryPlugin.js +339 -0
  378. package/lib/library/AmdLibraryPlugin.js +181 -0
  379. package/lib/library/AssignLibraryPlugin.js +445 -0
  380. package/lib/library/EnableLibraryPlugin.js +306 -0
  381. package/lib/library/ExportPropertyLibraryPlugin.js +116 -0
  382. package/lib/library/JsonpLibraryPlugin.js +92 -0
  383. package/lib/library/ModuleLibraryPlugin.js +438 -0
  384. package/lib/library/SystemLibraryPlugin.js +256 -0
  385. package/lib/library/UmdLibraryPlugin.js +355 -0
  386. package/lib/logging/Logger.js +223 -0
  387. package/lib/logging/createConsoleLogger.js +217 -0
  388. package/lib/logging/runtime.js +45 -0
  389. package/lib/logging/truncateArgs.js +83 -0
  390. package/lib/node/CommonJsChunkLoadingPlugin.js +120 -0
  391. package/lib/node/NodeEnvironmentPlugin.js +73 -0
  392. package/lib/node/NodeSourcePlugin.js +19 -0
  393. package/lib/node/NodeTargetPlugin.js +102 -0
  394. package/lib/node/NodeTemplatePlugin.js +42 -0
  395. package/lib/node/NodeWatchFileSystem.js +198 -0
  396. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +286 -0
  397. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +123 -0
  398. package/lib/node/ReadFileCompileWasmPlugin.js +127 -0
  399. package/lib/node/RequireChunkLoadingRuntimeModule.js +239 -0
  400. package/lib/node/nodeConsole.js +185 -0
  401. package/lib/optimize/AggressiveMergingPlugin.js +98 -0
  402. package/lib/optimize/AggressiveSplittingPlugin.js +352 -0
  403. package/lib/optimize/ConcatenatedModule.js +2290 -0
  404. package/lib/optimize/EnsureChunkConditionsPlugin.js +88 -0
  405. package/lib/optimize/FlagIncludedChunksPlugin.js +137 -0
  406. package/lib/optimize/InnerGraph.js +368 -0
  407. package/lib/optimize/InnerGraphPlugin.js +455 -0
  408. package/lib/optimize/LimitChunkCountPlugin.js +302 -0
  409. package/lib/optimize/MangleExportsPlugin.js +194 -0
  410. package/lib/optimize/MergeDuplicateChunksPlugin.js +138 -0
  411. package/lib/optimize/MinChunkSizePlugin.js +121 -0
  412. package/lib/optimize/MinMaxSizeWarning.js +35 -0
  413. package/lib/optimize/ModuleConcatenationPlugin.js +971 -0
  414. package/lib/optimize/RealContentHashPlugin.js +488 -0
  415. package/lib/optimize/RemoveEmptyChunksPlugin.js +60 -0
  416. package/lib/optimize/RemoveParentModulesPlugin.js +216 -0
  417. package/lib/optimize/RuntimeChunkPlugin.js +52 -0
  418. package/lib/optimize/SideEffectsFlagPlugin.js +417 -0
  419. package/lib/optimize/SplitChunksPlugin.js +1836 -0
  420. package/lib/performance/AssetsOverSizeLimitWarning.js +37 -0
  421. package/lib/performance/EntrypointsOverSizeLimitWarning.js +40 -0
  422. package/lib/performance/NoAsyncChunksWarning.js +21 -0
  423. package/lib/performance/SizeLimitsPlugin.js +183 -0
  424. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +46 -0
  425. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +95 -0
  426. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +56 -0
  427. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +52 -0
  428. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +46 -0
  429. package/lib/rules/BasicEffectRulePlugin.js +56 -0
  430. package/lib/rules/BasicMatcherRulePlugin.js +68 -0
  431. package/lib/rules/ObjectMatcherRulePlugin.js +79 -0
  432. package/lib/rules/RuleSetCompiler.js +447 -0
  433. package/lib/rules/UseEffectRulePlugin.js +236 -0
  434. package/lib/runtime/AsyncModuleRuntimeModule.js +199 -0
  435. package/lib/runtime/AutoPublicPathRuntimeModule.js +90 -0
  436. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  437. package/lib/runtime/ChunkNameRuntimeModule.js +28 -0
  438. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +40 -0
  439. package/lib/runtime/CompatRuntimeModule.js +83 -0
  440. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +69 -0
  441. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  442. package/lib/runtime/CreateScriptUrlRuntimeModule.js +38 -0
  443. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +42 -0
  444. package/lib/runtime/EnsureChunkRuntimeModule.js +69 -0
  445. package/lib/runtime/GetChunkFilenameRuntimeModule.js +299 -0
  446. package/lib/runtime/GetFullHashRuntimeModule.js +31 -0
  447. package/lib/runtime/GetMainFilenameRuntimeModule.js +49 -0
  448. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +99 -0
  449. package/lib/runtime/GlobalRuntimeModule.js +47 -0
  450. package/lib/runtime/HasOwnPropertyRuntimeModule.js +35 -0
  451. package/lib/runtime/HelperRuntimeModule.js +18 -0
  452. package/lib/runtime/LoadScriptRuntimeModule.js +174 -0
  453. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +232 -0
  454. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +39 -0
  455. package/lib/runtime/NonceRuntimeModule.js +24 -0
  456. package/lib/runtime/OnChunksLoadedRuntimeModule.js +78 -0
  457. package/lib/runtime/PublicPathRuntimeModule.js +38 -0
  458. package/lib/runtime/RelativeUrlRuntimeModule.js +44 -0
  459. package/lib/runtime/RuntimeIdRuntimeModule.js +33 -0
  460. package/lib/runtime/StartupChunkDependenciesPlugin.js +88 -0
  461. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +77 -0
  462. package/lib/runtime/StartupEntrypointRuntimeModule.js +54 -0
  463. package/lib/runtime/SystemContextRuntimeModule.js +23 -0
  464. package/lib/runtime/ToBinaryRuntimeModule.js +72 -0
  465. package/lib/schemes/DataUriPlugin.js +47 -0
  466. package/lib/schemes/FileUriPlugin.js +54 -0
  467. package/lib/schemes/HttpUriPlugin.js +1410 -0
  468. package/lib/schemes/VirtualUrlPlugin.js +248 -0
  469. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  470. package/lib/serialization/ArraySerializer.js +38 -0
  471. package/lib/serialization/BinaryMiddleware.js +1164 -0
  472. package/lib/serialization/DateObjectSerializer.js +28 -0
  473. package/lib/serialization/ErrorObjectSerializer.js +49 -0
  474. package/lib/serialization/FileMiddleware.js +766 -0
  475. package/lib/serialization/MapObjectSerializer.js +48 -0
  476. package/lib/serialization/NullPrototypeObjectSerializer.js +53 -0
  477. package/lib/serialization/ObjectMiddleware.js +877 -0
  478. package/lib/serialization/PlainObjectSerializer.js +119 -0
  479. package/lib/serialization/RegExpObjectSerializer.js +29 -0
  480. package/lib/serialization/Serializer.js +82 -0
  481. package/lib/serialization/SerializerMiddleware.js +226 -0
  482. package/lib/serialization/SetObjectSerializer.js +40 -0
  483. package/lib/serialization/SingleItemMiddleware.js +36 -0
  484. package/lib/serialization/types.js +13 -0
  485. package/lib/sharing/ConsumeSharedFallbackDependency.js +33 -0
  486. package/lib/sharing/ConsumeSharedModule.js +344 -0
  487. package/lib/sharing/ConsumeSharedPlugin.js +380 -0
  488. package/lib/sharing/ConsumeSharedRuntimeModule.js +358 -0
  489. package/lib/sharing/ProvideForSharedDependency.js +33 -0
  490. package/lib/sharing/ProvideSharedDependency.js +80 -0
  491. package/lib/sharing/ProvideSharedModule.js +196 -0
  492. package/lib/sharing/ProvideSharedModuleFactory.js +37 -0
  493. package/lib/sharing/ProvideSharedPlugin.js +248 -0
  494. package/lib/sharing/SharePlugin.js +91 -0
  495. package/lib/sharing/ShareRuntimeModule.js +152 -0
  496. package/lib/sharing/resolveMatchedConfigs.js +106 -0
  497. package/lib/sharing/utils.js +421 -0
  498. package/lib/stats/DefaultStatsFactoryPlugin.js +2791 -0
  499. package/lib/stats/DefaultStatsPresetPlugin.js +417 -0
  500. package/lib/stats/DefaultStatsPrinterPlugin.js +1860 -0
  501. package/lib/stats/StatsFactory.js +406 -0
  502. package/lib/stats/StatsPrinter.js +300 -0
  503. package/lib/url/URLParserPlugin.js +266 -0
  504. package/lib/util/AppendOnlyStackedSet.js +78 -0
  505. package/lib/util/ArrayHelpers.js +46 -0
  506. package/lib/util/ArrayQueue.js +104 -0
  507. package/lib/util/AsyncQueue.js +411 -0
  508. package/lib/util/Hash.js +68 -0
  509. package/lib/util/IterableHelpers.js +46 -0
  510. package/lib/util/LazyBucketSortedSet.js +272 -0
  511. package/lib/util/LazySet.js +236 -0
  512. package/lib/util/MapHelpers.js +34 -0
  513. package/lib/util/ParallelismFactorCalculator.js +70 -0
  514. package/lib/util/Queue.js +52 -0
  515. package/lib/util/Semaphore.js +51 -0
  516. package/lib/util/SetHelpers.js +94 -0
  517. package/lib/util/SortableSet.js +176 -0
  518. package/lib/util/StackedCacheMap.js +140 -0
  519. package/lib/util/StackedMap.js +164 -0
  520. package/lib/util/StringXor.js +103 -0
  521. package/lib/util/TupleQueue.js +70 -0
  522. package/lib/util/TupleSet.js +185 -0
  523. package/lib/util/URLAbsoluteSpecifier.js +86 -0
  524. package/lib/util/WeakTupleMap.js +227 -0
  525. package/lib/util/binarySearchBounds.js +136 -0
  526. package/lib/util/chainedImports.js +99 -0
  527. package/lib/util/cleverMerge.js +676 -0
  528. package/lib/util/comparators.js +645 -0
  529. package/lib/util/compileBooleanMatcher.js +313 -0
  530. package/lib/util/concatenate.js +232 -0
  531. package/lib/util/conventions.js +126 -0
  532. package/lib/util/create-schema-validation.js +41 -0
  533. package/lib/util/createHash.js +91 -0
  534. package/lib/util/dataURL.js +39 -0
  535. package/lib/util/deprecation.js +350 -0
  536. package/lib/util/deterministicGrouping.js +561 -0
  537. package/lib/util/extractSourceMap.js +318 -0
  538. package/lib/util/extractUrlAndGlobal.js +18 -0
  539. package/lib/util/findGraphRoots.js +211 -0
  540. package/lib/util/fs.js +675 -0
  541. package/lib/util/generateDebugId.js +33 -0
  542. package/lib/util/hash/BatchedHash.js +115 -0
  543. package/lib/util/hash/BulkUpdateHash.js +145 -0
  544. package/lib/util/hash/DebugHash.js +75 -0
  545. package/lib/util/hash/hash-digest.js +217 -0
  546. package/lib/util/hash/md4.js +20 -0
  547. package/lib/util/hash/wasm-hash.js +232 -0
  548. package/lib/util/hash/xxhash64.js +20 -0
  549. package/lib/util/identifier.js +471 -0
  550. package/lib/util/internalSerializables.js +222 -0
  551. package/lib/util/magicComment.js +25 -0
  552. package/lib/util/makeSerializable.js +60 -0
  553. package/lib/util/memoize.js +36 -0
  554. package/lib/util/nonNumericOnlyHash.js +22 -0
  555. package/lib/util/numberHash.js +95 -0
  556. package/lib/util/objectToMap.js +15 -0
  557. package/lib/util/processAsyncTree.js +68 -0
  558. package/lib/util/propertyAccess.js +30 -0
  559. package/lib/util/propertyName.js +76 -0
  560. package/lib/util/registerExternalSerializer.js +334 -0
  561. package/lib/util/removeBOM.js +25 -0
  562. package/lib/util/runtime.js +717 -0
  563. package/lib/util/semver.js +604 -0
  564. package/lib/util/serialization.js +153 -0
  565. package/lib/util/smartGrouping.js +221 -0
  566. package/lib/util/source.js +62 -0
  567. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  568. package/lib/validateSchema.js +177 -0
  569. package/lib/wasm/EnableWasmLoadingPlugin.js +146 -0
  570. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +154 -0
  571. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +74 -0
  572. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +212 -0
  573. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +209 -0
  574. package/lib/wasm-async/AsyncWebAssemblyParser.js +80 -0
  575. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +107 -0
  576. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +20 -0
  577. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +422 -0
  578. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +91 -0
  579. package/lib/wasm-sync/WebAssemblyGenerator.js +535 -0
  580. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +111 -0
  581. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +236 -0
  582. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +151 -0
  583. package/lib/wasm-sync/WebAssemblyParser.js +201 -0
  584. package/lib/wasm-sync/WebAssemblyUtils.js +66 -0
  585. package/lib/web/FetchCompileAsyncWasmPlugin.js +70 -0
  586. package/lib/web/FetchCompileWasmPlugin.js +86 -0
  587. package/lib/web/JsonpChunkLoadingPlugin.js +101 -0
  588. package/lib/web/JsonpChunkLoadingRuntimeModule.js +455 -0
  589. package/lib/web/JsonpTemplatePlugin.js +37 -0
  590. package/lib/webpack.js +227 -0
  591. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +110 -0
  592. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +231 -0
  593. package/lib/webworker/WebWorkerTemplatePlugin.js +26 -0
  594. package/module.d.ts +238 -0
  595. package/package.json +258 -0
  596. package/schemas/WebpackOptions.check.d.ts +7 -0
  597. package/schemas/WebpackOptions.check.js +6 -0
  598. package/schemas/WebpackOptions.json +6179 -0
  599. package/schemas/_container.json +155 -0
  600. package/schemas/_sharing.json +118 -0
  601. package/schemas/plugins/BannerPlugin.check.d.ts +7 -0
  602. package/schemas/plugins/BannerPlugin.check.js +6 -0
  603. package/schemas/plugins/BannerPlugin.json +115 -0
  604. package/schemas/plugins/DllPlugin.check.d.ts +7 -0
  605. package/schemas/plugins/DllPlugin.check.js +6 -0
  606. package/schemas/plugins/DllPlugin.json +36 -0
  607. package/schemas/plugins/DllReferencePlugin.check.d.ts +7 -0
  608. package/schemas/plugins/DllReferencePlugin.check.js +6 -0
  609. package/schemas/plugins/DllReferencePlugin.json +206 -0
  610. package/schemas/plugins/IgnorePlugin.check.d.ts +7 -0
  611. package/schemas/plugins/IgnorePlugin.check.js +6 -0
  612. package/schemas/plugins/IgnorePlugin.json +34 -0
  613. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +7 -0
  614. package/schemas/plugins/LoaderOptionsPlugin.check.js +6 -0
  615. package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
  616. package/schemas/plugins/ManifestPlugin.check.d.ts +7 -0
  617. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  618. package/schemas/plugins/ManifestPlugin.json +98 -0
  619. package/schemas/plugins/ProgressPlugin.check.d.ts +7 -0
  620. package/schemas/plugins/ProgressPlugin.check.js +6 -0
  621. package/schemas/plugins/ProgressPlugin.json +65 -0
  622. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +7 -0
  623. package/schemas/plugins/SourceMapDevToolPlugin.check.js +6 -0
  624. package/schemas/plugins/SourceMapDevToolPlugin.json +168 -0
  625. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +7 -0
  626. package/schemas/plugins/WatchIgnorePlugin.check.js +6 -0
  627. package/schemas/plugins/WatchIgnorePlugin.json +25 -0
  628. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +7 -0
  629. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +6 -0
  630. package/schemas/plugins/asset/AssetGeneratorOptions.json +3 -0
  631. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +7 -0
  632. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +6 -0
  633. package/schemas/plugins/asset/AssetInlineGeneratorOptions.json +3 -0
  634. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +7 -0
  635. package/schemas/plugins/asset/AssetParserOptions.check.js +6 -0
  636. package/schemas/plugins/asset/AssetParserOptions.json +3 -0
  637. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +7 -0
  638. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +6 -0
  639. package/schemas/plugins/asset/AssetResourceGeneratorOptions.json +3 -0
  640. package/schemas/plugins/container/ContainerPlugin.check.d.ts +7 -0
  641. package/schemas/plugins/container/ContainerPlugin.check.js +6 -0
  642. package/schemas/plugins/container/ContainerPlugin.json +294 -0
  643. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +7 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +6 -0
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +132 -0
  646. package/schemas/plugins/container/ExternalsType.check.d.ts +7 -0
  647. package/schemas/plugins/container/ExternalsType.check.js +6 -0
  648. package/schemas/plugins/container/ExternalsType.json +3 -0
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +7 -0
  650. package/schemas/plugins/container/ModuleFederationPlugin.check.js +6 -0
  651. package/schemas/plugins/container/ModuleFederationPlugin.json +525 -0
  652. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  653. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  654. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  655. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  656. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  657. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  658. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  659. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  660. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  661. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  662. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  663. package/schemas/plugins/css/CssParserOptions.json +3 -0
  664. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +7 -0
  665. package/schemas/plugins/debug/ProfilingPlugin.check.js +6 -0
  666. package/schemas/plugins/debug/ProfilingPlugin.json +12 -0
  667. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  668. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  669. package/schemas/plugins/ids/HashedModuleIdsPlugin.json +57 -0
  670. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +7 -0
  671. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +6 -0
  672. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.json +11 -0
  673. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +7 -0
  674. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +6 -0
  675. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.json +11 -0
  676. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +7 -0
  677. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  678. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  679. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +7 -0
  680. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  681. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  682. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +7 -0
  683. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +6 -0
  684. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
  685. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +7 -0
  686. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +6 -0
  687. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +21 -0
  688. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +7 -0
  689. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +6 -0
  690. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.json +11 -0
  691. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +7 -0
  692. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +6 -0
  693. package/schemas/plugins/optimize/MinChunkSizePlugin.json +20 -0
  694. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +7 -0
  695. package/schemas/plugins/schemes/HttpUriPlugin.check.js +6 -0
  696. package/schemas/plugins/schemes/HttpUriPlugin.json +74 -0
  697. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  698. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  699. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  700. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +7 -0
  701. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +6 -0
  702. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +120 -0
  703. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +7 -0
  704. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +6 -0
  705. package/schemas/plugins/sharing/ProvideSharedPlugin.json +94 -0
  706. package/schemas/plugins/sharing/SharePlugin.check.d.ts +7 -0
  707. package/schemas/plugins/sharing/SharePlugin.check.js +6 -0
  708. package/schemas/plugins/sharing/SharePlugin.json +133 -0
  709. package/types.d.ts +20217 -0
@@ -0,0 +1,1392 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const AsyncDependencyToInitialChunkError = require("./AsyncDependencyToInitialChunkError");
9
+ const { connectChunkGroupParentAndChild } = require("./GraphHelpers");
10
+ const ModuleGraphConnection = require("./ModuleGraphConnection");
11
+ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
12
+
13
+ /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
14
+ /** @typedef {import("./Chunk")} Chunk */
15
+ /** @typedef {import("./ChunkGroup")} ChunkGroup */
16
+ /** @typedef {import("./Compilation")} Compilation */
17
+ /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
18
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
19
+ /** @typedef {import("./Entrypoint")} Entrypoint */
20
+ /** @typedef {import("./Module")} Module */
21
+ /** @typedef {import("./ModuleGraph")} ModuleGraph */
22
+ /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
23
+ /** @typedef {import("./logging/Logger").Logger} Logger */
24
+ /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
25
+
26
+ /**
27
+ * @typedef {object} QueueItem
28
+ * @property {number} action
29
+ * @property {DependenciesBlock} block
30
+ * @property {Module} module
31
+ * @property {Chunk} chunk
32
+ * @property {ChunkGroup} chunkGroup
33
+ * @property {ChunkGroupInfo} chunkGroupInfo
34
+ */
35
+
36
+ /**
37
+ * @typedef {object} ChunkGroupInfo
38
+ * @property {ChunkGroup} chunkGroup the chunk group
39
+ * @property {RuntimeSpec} runtime the runtimes
40
+ * @property {boolean} initialized is this chunk group initialized
41
+ * @property {bigint | undefined} minAvailableModules current minimal set of modules available at this point
42
+ * @property {bigint[]} availableModulesToBeMerged enqueued updates to the minimal set of available modules
43
+ * @property {Set<Module>=} skippedItems modules that were skipped because module is already available in parent chunks (need to reconsider when minAvailableModules is shrinking)
44
+ * @property {Set<[Module, ModuleGraphConnection[]]>=} skippedModuleConnections referenced modules that where skipped because they were not active in this runtime
45
+ * @property {bigint | undefined} resultingAvailableModules set of modules available including modules from this chunk group
46
+ * @property {Set<ChunkGroupInfo> | undefined} children set of children chunk groups, that will be revisited when availableModules shrink
47
+ * @property {Set<ChunkGroupInfo> | undefined} availableSources set of chunk groups that are the source for minAvailableModules
48
+ * @property {Set<ChunkGroupInfo> | undefined} availableChildren set of chunk groups which depend on the this chunk group as availableSource
49
+ * @property {number} preOrderIndex next pre order index
50
+ * @property {number} postOrderIndex next post order index
51
+ * @property {boolean} chunkLoading has a chunk loading mechanism
52
+ * @property {boolean} asyncChunks create async chunks
53
+ * @property {Module | null} depModule the module that is the dependency of the block
54
+ * @property {boolean} circular Whether to deduplicate to avoid circular references
55
+ */
56
+
57
+ /**
58
+ * @typedef {object} BlockChunkGroupConnection
59
+ * @property {ChunkGroupInfo} originChunkGroupInfo origin chunk group
60
+ * @property {ChunkGroup} chunkGroup referenced chunk group
61
+ */
62
+
63
+ /** @typedef {(Module | ConnectionState | ModuleGraphConnection)[]} BlockModulesInTuples */
64
+ /** @typedef {(Module | ConnectionState | ModuleGraphConnection[])[]} BlockModulesInFlattenTuples */
65
+ /** @typedef {Map<DependenciesBlock, BlockModulesInFlattenTuples>} BlockModulesMap */
66
+ /** @typedef {Map<Chunk, bigint>} MaskByChunk */
67
+ /** @typedef {Set<DependenciesBlock>} BlocksWithNestedBlocks */
68
+ /** @typedef {Map<AsyncDependenciesBlock, BlockChunkGroupConnection[]>} BlockConnections */
69
+ /** @typedef {Map<ChunkGroup, ChunkGroupInfo>} ChunkGroupInfoMap */
70
+ /** @typedef {Set<ChunkGroup>} AllCreatedChunkGroups */
71
+ /** @typedef {Map<Entrypoint, Module[]>} InputEntrypointsAndModules */
72
+
73
+ const ZERO_BIGINT = BigInt(0);
74
+ const ONE_BIGINT = BigInt(1);
75
+
76
+ /**
77
+ * @param {bigint} mask The mask to test
78
+ * @param {number} ordinal The ordinal of the bit to test
79
+ * @returns {boolean} If the ordinal-th bit is set in the mask
80
+ */
81
+ const isOrdinalSetInMask = (mask, ordinal) =>
82
+ BigInt.asUintN(1, mask >> BigInt(ordinal)) !== ZERO_BIGINT;
83
+
84
+ /**
85
+ * @param {ModuleGraphConnection[]} connections list of connections
86
+ * @param {RuntimeSpec} runtime for which runtime
87
+ * @returns {ConnectionState} connection state
88
+ */
89
+ const getActiveStateOfConnections = (connections, runtime) => {
90
+ let merged = connections[0].getActiveState(runtime);
91
+ if (merged === true) return true;
92
+ for (let i = 1; i < connections.length; i++) {
93
+ const c = connections[i];
94
+ merged = ModuleGraphConnection.addConnectionStates(
95
+ merged,
96
+ c.getActiveState(runtime)
97
+ );
98
+ if (merged === true) return true;
99
+ }
100
+ return merged;
101
+ };
102
+
103
+ /**
104
+ * @param {Module} module module
105
+ * @param {ModuleGraph} moduleGraph module graph
106
+ * @param {RuntimeSpec} runtime runtime
107
+ * @param {BlockModulesMap} blockModulesMap block modules map
108
+ */
109
+ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
110
+ /** @type {DependenciesBlock | undefined} */
111
+ let blockCache;
112
+ /** @type {BlockModulesInTuples | undefined} */
113
+ let modules;
114
+
115
+ /** @type {BlockModulesInTuples[]} */
116
+ const arrays = [];
117
+
118
+ /** @type {DependenciesBlock[]} */
119
+ const queue = [module];
120
+ while (queue.length > 0) {
121
+ const block = /** @type {DependenciesBlock} */ (queue.pop());
122
+ /** @type {Module[]} */
123
+ const arr = [];
124
+ arrays.push(arr);
125
+ blockModulesMap.set(block, arr);
126
+ for (const b of block.blocks) {
127
+ queue.push(b);
128
+ }
129
+ }
130
+
131
+ for (const connection of moduleGraph.getOutgoingConnections(module)) {
132
+ const d = connection.dependency;
133
+ // We skip connections without dependency
134
+ if (!d) continue;
135
+ const m = connection.module;
136
+ // We skip connections without Module pointer
137
+ if (!m) continue;
138
+ // We skip weak connections
139
+ if (connection.weak) continue;
140
+
141
+ const block = moduleGraph.getParentBlock(d);
142
+ let index = moduleGraph.getParentBlockIndex(d);
143
+
144
+ // deprecated fallback
145
+ if (index < 0) {
146
+ index = /** @type {DependenciesBlock} */ (block).dependencies.indexOf(d);
147
+ }
148
+
149
+ if (blockCache !== block) {
150
+ modules =
151
+ /** @type {BlockModulesInTuples} */
152
+ (
153
+ blockModulesMap.get(
154
+ (blockCache = /** @type {DependenciesBlock} */ (block))
155
+ )
156
+ );
157
+ }
158
+
159
+ const i = index * 3;
160
+ /** @type {BlockModulesInTuples} */
161
+ (modules)[i] = m;
162
+ /** @type {BlockModulesInTuples} */
163
+ (modules)[i + 1] = connection.getActiveState(runtime);
164
+ /** @type {BlockModulesInTuples} */
165
+ (modules)[i + 2] = connection;
166
+ }
167
+
168
+ for (const modules of arrays) {
169
+ if (modules.length === 0) continue;
170
+ /** @type {undefined | Map<Module | ModuleGraphConnection | ConnectionState, number>} */
171
+ let indexMap;
172
+ let length = 0;
173
+ outer: for (let j = 0; j < modules.length; j += 3) {
174
+ const m = modules[j];
175
+ if (m === undefined) continue;
176
+ const state = /** @type {ConnectionState} */ (modules[j + 1]);
177
+ const connection = /** @type {ModuleGraphConnection} */ (modules[j + 2]);
178
+ if (indexMap === undefined) {
179
+ let i = 0;
180
+ for (; i < length; i += 3) {
181
+ if (modules[i] === m) {
182
+ const merged = /** @type {ConnectionState} */ (modules[i + 1]);
183
+ /** @type {ModuleGraphConnection[]} */
184
+ (/** @type {unknown} */ (modules[i + 2])).push(connection);
185
+ if (merged === true) continue outer;
186
+ modules[i + 1] = ModuleGraphConnection.addConnectionStates(
187
+ merged,
188
+ state
189
+ );
190
+ continue outer;
191
+ }
192
+ }
193
+ modules[length] = m;
194
+ length++;
195
+ modules[length] = state;
196
+ length++;
197
+ /** @type {ModuleGraphConnection[]} */
198
+ (/** @type {unknown} */ (modules[length])) = [connection];
199
+ length++;
200
+ if (length > 30) {
201
+ // To avoid worse case performance, we will use an index map for
202
+ // linear cost access, which allows to maintain O(n) complexity
203
+ // while keeping allocations down to a minimum
204
+ indexMap = new Map();
205
+ for (let i = 0; i < length; i += 3) {
206
+ indexMap.set(modules[i], i + 1);
207
+ }
208
+ }
209
+ } else {
210
+ const idx = indexMap.get(m);
211
+ if (idx !== undefined) {
212
+ const merged = /** @type {ConnectionState} */ (modules[idx]);
213
+ /** @type {ModuleGraphConnection[]} */
214
+ (/** @type {unknown} */ (modules[idx + 1])).push(connection);
215
+ if (merged === true) continue;
216
+ modules[idx] = ModuleGraphConnection.addConnectionStates(
217
+ merged,
218
+ state
219
+ );
220
+ } else {
221
+ modules[length] = m;
222
+ length++;
223
+ modules[length] = state;
224
+ indexMap.set(m, length);
225
+ length++;
226
+ /** @type {ModuleGraphConnection[]} */
227
+ (
228
+ /** @type {unknown} */
229
+ (modules[length])
230
+ ) = [connection];
231
+ length++;
232
+ }
233
+ }
234
+ }
235
+ modules.length = length;
236
+ }
237
+ };
238
+
239
+ /**
240
+ * @param {Logger} logger a logger
241
+ * @param {Compilation} compilation the compilation
242
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
243
+ * @param {ChunkGroupInfoMap} chunkGroupInfoMap mapping from chunk group to available modules
244
+ * @param {BlockConnections} blockConnections connection for blocks
245
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
246
+ * @param {AllCreatedChunkGroups} allCreatedChunkGroups filled with all chunk groups that are created here
247
+ * @param {MaskByChunk} maskByChunk module content mask by chunk
248
+ */
249
+ const visitModules = (
250
+ logger,
251
+ compilation,
252
+ inputEntrypointsAndModules,
253
+ chunkGroupInfoMap,
254
+ blockConnections,
255
+ blocksWithNestedBlocks,
256
+ allCreatedChunkGroups,
257
+ maskByChunk
258
+ ) => {
259
+ const { moduleGraph, chunkGraph, moduleMemCaches } = compilation;
260
+
261
+ /** @type {Map<RuntimeSpec, BlockModulesMap>} */
262
+ const blockModulesRuntimeMap = new Map();
263
+
264
+ /** @type {BlockModulesMap | undefined} */
265
+ let blockModulesMap;
266
+
267
+ /** @type {Map<Module, number>} */
268
+ const ordinalByModule = new Map();
269
+
270
+ /**
271
+ * @param {Module} module The module to look up
272
+ * @returns {number} The ordinal of the module in masks
273
+ */
274
+ const getModuleOrdinal = (module) => {
275
+ let ordinal = ordinalByModule.get(module);
276
+ if (ordinal === undefined) {
277
+ ordinal = ordinalByModule.size;
278
+ ordinalByModule.set(module, ordinal);
279
+ }
280
+ return ordinal;
281
+ };
282
+
283
+ for (const chunk of compilation.chunks) {
284
+ let mask = ZERO_BIGINT;
285
+ for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
286
+ mask |= ONE_BIGINT << BigInt(getModuleOrdinal(m));
287
+ }
288
+ maskByChunk.set(chunk, mask);
289
+ }
290
+
291
+ /**
292
+ * @param {DependenciesBlock} block block
293
+ * @param {RuntimeSpec} runtime runtime
294
+ * @returns {BlockModulesInFlattenTuples | undefined} block modules in flatten tuples
295
+ */
296
+ const getBlockModules = (block, runtime) => {
297
+ blockModulesMap = blockModulesRuntimeMap.get(runtime);
298
+ if (blockModulesMap === undefined) {
299
+ /** @type {BlockModulesMap} */
300
+ blockModulesMap = new Map();
301
+ blockModulesRuntimeMap.set(runtime, blockModulesMap);
302
+ }
303
+ let blockModules = blockModulesMap.get(block);
304
+ if (blockModules !== undefined) return blockModules;
305
+ const module = /** @type {Module} */ (block.getRootBlock());
306
+ const memCache = moduleMemCaches && moduleMemCaches.get(module);
307
+ if (memCache !== undefined) {
308
+ /** @type {BlockModulesMap} */
309
+ const map = memCache.provide(
310
+ "bundleChunkGraph.blockModules",
311
+ runtime,
312
+ () => {
313
+ logger.time("visitModules: prepare");
314
+ const map = new Map();
315
+ extractBlockModules(module, moduleGraph, runtime, map);
316
+ logger.timeAggregate("visitModules: prepare");
317
+ return map;
318
+ }
319
+ );
320
+ for (const [block, blockModules] of map) {
321
+ blockModulesMap.set(block, blockModules);
322
+ }
323
+ return map.get(block);
324
+ }
325
+ logger.time("visitModules: prepare");
326
+ extractBlockModules(module, moduleGraph, runtime, blockModulesMap);
327
+ blockModules =
328
+ /** @type {BlockModulesInFlattenTuples} */
329
+ (blockModulesMap.get(block));
330
+ logger.timeAggregate("visitModules: prepare");
331
+ return blockModules;
332
+ };
333
+
334
+ let statProcessedQueueItems = 0;
335
+ let statProcessedBlocks = 0;
336
+ let statConnectedChunkGroups = 0;
337
+ let statProcessedChunkGroupsForMerging = 0;
338
+ let statMergedAvailableModuleSets = 0;
339
+ const statForkedAvailableModules = 0;
340
+ const statForkedAvailableModulesCount = 0;
341
+ const statForkedAvailableModulesCountPlus = 0;
342
+ const statForkedMergedModulesCount = 0;
343
+ const statForkedMergedModulesCountPlus = 0;
344
+ const statForkedResultModulesCount = 0;
345
+ let statChunkGroupInfoUpdated = 0;
346
+ let statChildChunkGroupsReconnected = 0;
347
+
348
+ let nextChunkGroupIndex = 0;
349
+ let nextFreeModulePreOrderIndex = 0;
350
+ let nextFreeModulePostOrderIndex = 0;
351
+
352
+ /** @type {Map<DependenciesBlock, ChunkGroupInfo>} */
353
+ const blockChunkGroups = new Map();
354
+
355
+ /** @type {Map<ChunkGroupInfo, Set<DependenciesBlock>>} */
356
+ const blocksByChunkGroups = new Map();
357
+
358
+ /** @typedef {Map<string, ChunkGroupInfo>} NamedChunkGroup */
359
+
360
+ /** @type {NamedChunkGroup} */
361
+ const namedChunkGroups = new Map();
362
+
363
+ /** @type {NamedChunkGroup} */
364
+ const namedAsyncEntrypoints = new Map();
365
+
366
+ /** @type {Map<Module, ChunkGroupInfo>} */
367
+ const depModuleAsyncEntrypoints = new Map();
368
+
369
+ /** @type {Set<ChunkGroupInfo>} */
370
+ const outdatedOrderIndexChunkGroups = new Set();
371
+
372
+ const ADD_AND_ENTER_ENTRY_MODULE = 0;
373
+ const ADD_AND_ENTER_MODULE = 1;
374
+ const ENTER_MODULE = 2;
375
+ const PROCESS_BLOCK = 3;
376
+ const PROCESS_ENTRY_BLOCK = 4;
377
+ const LEAVE_MODULE = 5;
378
+
379
+ /** @type {QueueItem[]} */
380
+ let queue = [];
381
+
382
+ /** @typedef {Set<[ChunkGroupInfo, QueueItem | null]>} ConnectList */
383
+ /** @type {Map<ChunkGroupInfo, ConnectList>} */
384
+ const queueConnect = new Map();
385
+ /** @type {Set<ChunkGroupInfo>} */
386
+ const chunkGroupsForCombining = new Set();
387
+
388
+ // Fill queue with entrypoint modules
389
+ // Create ChunkGroupInfo for entrypoints
390
+ for (const [chunkGroup, modules] of inputEntrypointsAndModules) {
391
+ const runtime = getEntryRuntime(
392
+ compilation,
393
+ /** @type {string} */ (chunkGroup.name),
394
+ chunkGroup.options
395
+ );
396
+ /** @type {ChunkGroupInfo} */
397
+ const chunkGroupInfo = {
398
+ depModule: null,
399
+ circular: false,
400
+ initialized: false,
401
+ chunkGroup,
402
+ runtime,
403
+ minAvailableModules: undefined,
404
+ availableModulesToBeMerged: [],
405
+ skippedItems: undefined,
406
+ resultingAvailableModules: undefined,
407
+ children: undefined,
408
+ availableSources: undefined,
409
+ availableChildren: undefined,
410
+ preOrderIndex: 0,
411
+ postOrderIndex: 0,
412
+ chunkLoading:
413
+ chunkGroup.options.chunkLoading !== undefined
414
+ ? chunkGroup.options.chunkLoading !== false
415
+ : compilation.outputOptions.chunkLoading !== false,
416
+ asyncChunks:
417
+ chunkGroup.options.asyncChunks !== undefined
418
+ ? chunkGroup.options.asyncChunks
419
+ : compilation.outputOptions.asyncChunks !== false
420
+ };
421
+ chunkGroup.index = nextChunkGroupIndex++;
422
+ if (chunkGroup.getNumberOfParents() > 0) {
423
+ // minAvailableModules for child entrypoints are unknown yet, set to undefined.
424
+ // This means no module is added until other sets are merged into
425
+ // this minAvailableModules (by the parent entrypoints)
426
+ const skippedItems = new Set(modules);
427
+ chunkGroupInfo.skippedItems = skippedItems;
428
+ chunkGroupsForCombining.add(chunkGroupInfo);
429
+ } else {
430
+ // The application may start here: We start with an empty list of available modules
431
+ chunkGroupInfo.minAvailableModules = ZERO_BIGINT;
432
+ const chunk = chunkGroup.getEntrypointChunk();
433
+ for (const module of modules) {
434
+ queue.push({
435
+ action: ADD_AND_ENTER_MODULE,
436
+ block: module,
437
+ module,
438
+ chunk,
439
+ chunkGroup,
440
+ chunkGroupInfo
441
+ });
442
+ }
443
+ }
444
+ chunkGroupInfoMap.set(chunkGroup, chunkGroupInfo);
445
+ if (chunkGroup.name) {
446
+ namedChunkGroups.set(chunkGroup.name, chunkGroupInfo);
447
+ }
448
+ }
449
+ // Fill availableSources with parent-child dependencies between entrypoints
450
+ for (const chunkGroupInfo of chunkGroupsForCombining) {
451
+ const { chunkGroup } = chunkGroupInfo;
452
+ chunkGroupInfo.availableSources = new Set();
453
+ for (const parent of chunkGroup.parentsIterable) {
454
+ const parentChunkGroupInfo =
455
+ /** @type {ChunkGroupInfo} */
456
+ (chunkGroupInfoMap.get(parent));
457
+ chunkGroupInfo.availableSources.add(parentChunkGroupInfo);
458
+ if (parentChunkGroupInfo.availableChildren === undefined) {
459
+ parentChunkGroupInfo.availableChildren = new Set();
460
+ }
461
+ parentChunkGroupInfo.availableChildren.add(chunkGroupInfo);
462
+ }
463
+ }
464
+ // pop() is used to read from the queue
465
+ // so it need to be reversed to be iterated in
466
+ // correct order
467
+ queue.reverse();
468
+
469
+ /** @type {Set<ChunkGroupInfo>} */
470
+ const outdatedChunkGroupInfo = new Set();
471
+ /** @type {Set<[ChunkGroupInfo, QueueItem | null]>} */
472
+ const chunkGroupsForMerging = new Set();
473
+ /** @type {QueueItem[]} */
474
+ let queueDelayed = [];
475
+
476
+ /** @type {[Module, ModuleGraphConnection[]][]} */
477
+ const skipConnectionBuffer = [];
478
+ /** @type {Module[]} */
479
+ const skipBuffer = [];
480
+ /** @type {QueueItem[]} */
481
+ const queueBuffer = [];
482
+
483
+ /** @type {Module} */
484
+ let module;
485
+ /** @type {Chunk} */
486
+ let chunk;
487
+ /** @type {ChunkGroup} */
488
+ let chunkGroup;
489
+ /** @type {DependenciesBlock} */
490
+ let block;
491
+ /** @type {ChunkGroupInfo} */
492
+ let chunkGroupInfo;
493
+
494
+ // For each async Block in graph
495
+ /**
496
+ * @param {AsyncDependenciesBlock} b iterating over each Async DepBlock
497
+ * @returns {void}
498
+ */
499
+ const iteratorBlock = (b) => {
500
+ // 1. We create a chunk group with single chunk in it for this Block
501
+ // but only once (blockChunkGroups map)
502
+ /** @type {ChunkGroupInfo | undefined} */
503
+ let cgi = blockChunkGroups.get(b);
504
+ /** @type {ChunkGroup | undefined} */
505
+ let c;
506
+ /** @type {Entrypoint | undefined} */
507
+ let entrypoint;
508
+ /** @type {Module | null} */
509
+ const depModule = moduleGraph.getModule(b.dependencies[0]);
510
+ const entryOptions = b.groupOptions && b.groupOptions.entryOptions;
511
+ if (cgi === undefined) {
512
+ const chunkName = (b.groupOptions && b.groupOptions.name) || b.chunkName;
513
+ if (entryOptions) {
514
+ cgi = namedAsyncEntrypoints.get(/** @type {string} */ (chunkName));
515
+ if (!cgi && !b.circular && depModule) {
516
+ cgi = depModuleAsyncEntrypoints.get(depModule);
517
+ }
518
+ if (!cgi) {
519
+ entrypoint = compilation.addAsyncEntrypoint(
520
+ entryOptions,
521
+ module,
522
+ /** @type {DependencyLocation} */ (b.loc),
523
+ /** @type {string} */ (b.request)
524
+ );
525
+ maskByChunk.set(entrypoint.chunks[0], ZERO_BIGINT);
526
+ entrypoint.index = nextChunkGroupIndex++;
527
+ cgi = {
528
+ depModule,
529
+ circular: b.circular,
530
+ chunkGroup: entrypoint,
531
+ initialized: false,
532
+ runtime:
533
+ entrypoint.options.runtime ||
534
+ /** @type {string | undefined} */ (entrypoint.name),
535
+ minAvailableModules: ZERO_BIGINT,
536
+ availableModulesToBeMerged: [],
537
+ skippedItems: undefined,
538
+ resultingAvailableModules: undefined,
539
+ children: undefined,
540
+ availableSources: undefined,
541
+ availableChildren: undefined,
542
+ preOrderIndex: 0,
543
+ postOrderIndex: 0,
544
+ chunkLoading:
545
+ entryOptions.chunkLoading !== undefined
546
+ ? entryOptions.chunkLoading !== false
547
+ : chunkGroupInfo.chunkLoading,
548
+ asyncChunks:
549
+ entryOptions.asyncChunks !== undefined
550
+ ? entryOptions.asyncChunks
551
+ : chunkGroupInfo.asyncChunks
552
+ };
553
+ chunkGroupInfoMap.set(
554
+ entrypoint,
555
+ /** @type {ChunkGroupInfo} */
556
+ (cgi)
557
+ );
558
+
559
+ chunkGraph.connectBlockAndChunkGroup(b, entrypoint);
560
+ if (chunkName) {
561
+ namedAsyncEntrypoints.set(
562
+ chunkName,
563
+ /** @type {ChunkGroupInfo} */
564
+ (cgi)
565
+ );
566
+ }
567
+ if (!b.circular && depModule) {
568
+ depModuleAsyncEntrypoints.set(
569
+ depModule,
570
+ /** @type {ChunkGroupInfo} */ (cgi)
571
+ );
572
+ }
573
+ } else {
574
+ entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
575
+ // TODO merge entryOptions
576
+ entrypoint.addOrigin(
577
+ module,
578
+ /** @type {DependencyLocation} */ (b.loc),
579
+ /** @type {string} */ (b.request)
580
+ );
581
+ chunkGraph.connectBlockAndChunkGroup(b, entrypoint);
582
+ }
583
+
584
+ // 2. We enqueue the DependenciesBlock for traversal
585
+ queueDelayed.push({
586
+ action: PROCESS_ENTRY_BLOCK,
587
+ block: b,
588
+ module,
589
+ chunk: entrypoint.chunks[0],
590
+ chunkGroup: entrypoint,
591
+ chunkGroupInfo: /** @type {ChunkGroupInfo} */ (cgi)
592
+ });
593
+ } else if (!chunkGroupInfo.asyncChunks || !chunkGroupInfo.chunkLoading) {
594
+ // Just queue the block into the current chunk group
595
+ queue.push({
596
+ action: PROCESS_BLOCK,
597
+ block: b,
598
+ module,
599
+ chunk,
600
+ chunkGroup,
601
+ chunkGroupInfo
602
+ });
603
+ } else {
604
+ cgi = chunkName ? namedChunkGroups.get(chunkName) : undefined;
605
+ if (!cgi) {
606
+ c = compilation.addChunkInGroup(
607
+ b.groupOptions || b.chunkName,
608
+ module,
609
+ /** @type {DependencyLocation} */ (b.loc),
610
+ /** @type {string} */ (b.request)
611
+ );
612
+ maskByChunk.set(c.chunks[0], ZERO_BIGINT);
613
+ c.index = nextChunkGroupIndex++;
614
+ cgi = {
615
+ depModule,
616
+ circular: b.circular,
617
+ initialized: false,
618
+ chunkGroup: c,
619
+ runtime: chunkGroupInfo.runtime,
620
+ minAvailableModules: undefined,
621
+ availableModulesToBeMerged: [],
622
+ skippedItems: undefined,
623
+ resultingAvailableModules: undefined,
624
+ children: undefined,
625
+ availableSources: undefined,
626
+ availableChildren: undefined,
627
+ preOrderIndex: 0,
628
+ postOrderIndex: 0,
629
+ chunkLoading: chunkGroupInfo.chunkLoading,
630
+ asyncChunks: chunkGroupInfo.asyncChunks
631
+ };
632
+ allCreatedChunkGroups.add(c);
633
+ chunkGroupInfoMap.set(c, cgi);
634
+ if (chunkName) {
635
+ namedChunkGroups.set(chunkName, cgi);
636
+ }
637
+ } else {
638
+ c = cgi.chunkGroup;
639
+ if (c.isInitial()) {
640
+ compilation.errors.push(
641
+ new AsyncDependencyToInitialChunkError(
642
+ /** @type {string} */ (chunkName),
643
+ module,
644
+ /** @type {DependencyLocation} */ (b.loc)
645
+ )
646
+ );
647
+ c = chunkGroup;
648
+ } else {
649
+ c.addOptions(b.groupOptions);
650
+ }
651
+ c.addOrigin(
652
+ module,
653
+ /** @type {DependencyLocation} */ (b.loc),
654
+ /** @type {string} */ (b.request)
655
+ );
656
+ }
657
+ blockConnections.set(b, []);
658
+ }
659
+ blockChunkGroups.set(b, /** @type {ChunkGroupInfo} */ (cgi));
660
+ } else if (entryOptions) {
661
+ entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
662
+ } else {
663
+ c = cgi.chunkGroup;
664
+ }
665
+
666
+ if (c !== undefined) {
667
+ // 2. We store the connection for the block
668
+ // to connect it later if needed
669
+ /** @type {BlockChunkGroupConnection[]} */
670
+ (blockConnections.get(b)).push({
671
+ originChunkGroupInfo: chunkGroupInfo,
672
+ chunkGroup: c
673
+ });
674
+
675
+ // 3. We enqueue the chunk group info creation/updating
676
+ let connectList = queueConnect.get(chunkGroupInfo);
677
+ if (connectList === undefined) {
678
+ /** @type {ConnectList} */
679
+ connectList = new Set();
680
+ queueConnect.set(chunkGroupInfo, connectList);
681
+ }
682
+ connectList.add([
683
+ /** @type {ChunkGroupInfo} */ (cgi),
684
+ {
685
+ action: PROCESS_BLOCK,
686
+ block: b,
687
+ module,
688
+ chunk: c.chunks[0],
689
+ chunkGroup: c,
690
+ chunkGroupInfo: /** @type {ChunkGroupInfo} */ (cgi)
691
+ }
692
+ ]);
693
+ } else if (
694
+ entrypoint !== undefined &&
695
+ (chunkGroupInfo.circular || chunkGroupInfo.depModule !== depModule)
696
+ ) {
697
+ chunkGroupInfo.chunkGroup.addAsyncEntrypoint(entrypoint);
698
+ }
699
+ };
700
+
701
+ /**
702
+ * @param {DependenciesBlock} block the block
703
+ * @returns {void}
704
+ */
705
+ const processBlock = (block) => {
706
+ statProcessedBlocks++;
707
+ // get prepared block info
708
+ const blockModules = getBlockModules(block, chunkGroupInfo.runtime);
709
+
710
+ if (blockModules !== undefined) {
711
+ const minAvailableModules =
712
+ /** @type {bigint} */
713
+ (chunkGroupInfo.minAvailableModules);
714
+ // Buffer items because order need to be reversed to get indices correct
715
+ // Traverse all referenced modules
716
+ for (let i = 0, len = blockModules.length; i < len; i += 3) {
717
+ const refModule = /** @type {Module} */ (blockModules[i]);
718
+ // For single comparisons this might be cheaper
719
+ const isModuleInChunk = chunkGraph.isModuleInChunk(refModule, chunk);
720
+
721
+ if (isModuleInChunk) {
722
+ // skip early if already connected
723
+ continue;
724
+ }
725
+
726
+ const refOrdinal = /** @type {number} */ getModuleOrdinal(refModule);
727
+ const activeState = /** @type {ConnectionState} */ (
728
+ blockModules[i + 1]
729
+ );
730
+ if (activeState !== true) {
731
+ const connections = /** @type {ModuleGraphConnection[]} */ (
732
+ blockModules[i + 2]
733
+ );
734
+ skipConnectionBuffer.push([refModule, connections]);
735
+ // We skip inactive connections
736
+ if (activeState === false) continue;
737
+ } else if (isOrdinalSetInMask(minAvailableModules, refOrdinal)) {
738
+ // already in parent chunks, skip it for now
739
+ skipBuffer.push(refModule);
740
+ continue;
741
+ }
742
+ // enqueue, then add and enter to be in the correct order
743
+ // this is relevant with circular dependencies
744
+ queueBuffer.push({
745
+ action: activeState === true ? ADD_AND_ENTER_MODULE : PROCESS_BLOCK,
746
+ block: refModule,
747
+ module: refModule,
748
+ chunk,
749
+ chunkGroup,
750
+ chunkGroupInfo
751
+ });
752
+ }
753
+ // Add buffered items in reverse order
754
+ if (skipConnectionBuffer.length > 0) {
755
+ let { skippedModuleConnections } = chunkGroupInfo;
756
+ if (skippedModuleConnections === undefined) {
757
+ chunkGroupInfo.skippedModuleConnections = skippedModuleConnections =
758
+ new Set();
759
+ }
760
+ for (let i = skipConnectionBuffer.length - 1; i >= 0; i--) {
761
+ skippedModuleConnections.add(skipConnectionBuffer[i]);
762
+ }
763
+ skipConnectionBuffer.length = 0;
764
+ }
765
+ if (skipBuffer.length > 0) {
766
+ let { skippedItems } = chunkGroupInfo;
767
+ if (skippedItems === undefined) {
768
+ chunkGroupInfo.skippedItems = skippedItems = new Set();
769
+ }
770
+ for (let i = skipBuffer.length - 1; i >= 0; i--) {
771
+ skippedItems.add(skipBuffer[i]);
772
+ }
773
+ skipBuffer.length = 0;
774
+ }
775
+ if (queueBuffer.length > 0) {
776
+ for (let i = queueBuffer.length - 1; i >= 0; i--) {
777
+ queue.push(queueBuffer[i]);
778
+ }
779
+ queueBuffer.length = 0;
780
+ }
781
+ }
782
+
783
+ // Traverse all Blocks
784
+ for (const b of block.blocks) {
785
+ iteratorBlock(b);
786
+ }
787
+
788
+ if (block.blocks.length > 0 && module !== block) {
789
+ blocksWithNestedBlocks.add(block);
790
+ }
791
+ };
792
+
793
+ /**
794
+ * @param {DependenciesBlock} block the block
795
+ * @returns {void}
796
+ */
797
+ const processEntryBlock = (block) => {
798
+ statProcessedBlocks++;
799
+ // get prepared block info
800
+ const blockModules = getBlockModules(block, chunkGroupInfo.runtime);
801
+
802
+ if (blockModules !== undefined) {
803
+ // Traverse all referenced modules in reverse order
804
+ for (let i = blockModules.length - 3; i >= 0; i -= 3) {
805
+ const refModule = /** @type {Module} */ (blockModules[i]);
806
+ const activeState = /** @type {ConnectionState} */ (
807
+ blockModules[i + 1]
808
+ );
809
+ // enqueue, then add and enter to be in the correct order
810
+ // this is relevant with circular dependencies
811
+ queue.push({
812
+ action:
813
+ activeState === true ? ADD_AND_ENTER_ENTRY_MODULE : PROCESS_BLOCK,
814
+ block: refModule,
815
+ module: refModule,
816
+ chunk,
817
+ chunkGroup,
818
+ chunkGroupInfo
819
+ });
820
+ }
821
+ }
822
+
823
+ // Traverse all Blocks
824
+ for (const b of block.blocks) {
825
+ iteratorBlock(b);
826
+ }
827
+
828
+ if (block.blocks.length > 0 && module !== block) {
829
+ blocksWithNestedBlocks.add(block);
830
+ }
831
+ };
832
+
833
+ const processQueue = () => {
834
+ while (queue.length) {
835
+ statProcessedQueueItems++;
836
+ const queueItem = /** @type {QueueItem} */ (queue.pop());
837
+ module = queueItem.module;
838
+ block = queueItem.block;
839
+ chunk = queueItem.chunk;
840
+ chunkGroup = queueItem.chunkGroup;
841
+ chunkGroupInfo = queueItem.chunkGroupInfo;
842
+
843
+ switch (queueItem.action) {
844
+ case ADD_AND_ENTER_ENTRY_MODULE:
845
+ chunkGraph.connectChunkAndEntryModule(
846
+ chunk,
847
+ module,
848
+ /** @type {Entrypoint} */ (chunkGroup)
849
+ );
850
+ // fallthrough
851
+ case ADD_AND_ENTER_MODULE: {
852
+ const isModuleInChunk = chunkGraph.isModuleInChunk(module, chunk);
853
+
854
+ if (isModuleInChunk) {
855
+ // already connected, skip it
856
+ break;
857
+ }
858
+ // We connect Module and Chunk
859
+ chunkGraph.connectChunkAndModule(chunk, module);
860
+ const moduleOrdinal = getModuleOrdinal(module);
861
+ let chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
862
+ chunkMask |= ONE_BIGINT << BigInt(moduleOrdinal);
863
+ maskByChunk.set(chunk, chunkMask);
864
+ }
865
+ // fallthrough
866
+ case ENTER_MODULE: {
867
+ const index = chunkGroup.getModulePreOrderIndex(module);
868
+ if (index === undefined) {
869
+ chunkGroup.setModulePreOrderIndex(
870
+ module,
871
+ chunkGroupInfo.preOrderIndex++
872
+ );
873
+ }
874
+
875
+ if (
876
+ moduleGraph.setPreOrderIndexIfUnset(
877
+ module,
878
+ nextFreeModulePreOrderIndex
879
+ )
880
+ ) {
881
+ nextFreeModulePreOrderIndex++;
882
+ }
883
+
884
+ // reuse queueItem
885
+ queueItem.action = LEAVE_MODULE;
886
+ queue.push(queueItem);
887
+ }
888
+ // fallthrough
889
+ case PROCESS_BLOCK: {
890
+ processBlock(block);
891
+ break;
892
+ }
893
+ case PROCESS_ENTRY_BLOCK: {
894
+ processEntryBlock(block);
895
+ break;
896
+ }
897
+ case LEAVE_MODULE: {
898
+ const index = chunkGroup.getModulePostOrderIndex(module);
899
+ if (index === undefined) {
900
+ chunkGroup.setModulePostOrderIndex(
901
+ module,
902
+ chunkGroupInfo.postOrderIndex++
903
+ );
904
+ }
905
+
906
+ if (
907
+ moduleGraph.setPostOrderIndexIfUnset(
908
+ module,
909
+ nextFreeModulePostOrderIndex
910
+ )
911
+ ) {
912
+ nextFreeModulePostOrderIndex++;
913
+ }
914
+ break;
915
+ }
916
+ }
917
+ }
918
+ };
919
+
920
+ /**
921
+ * @param {ChunkGroupInfo} chunkGroupInfo The info object for the chunk group
922
+ * @returns {bigint} The mask of available modules after the chunk group
923
+ */
924
+ const calculateResultingAvailableModules = (chunkGroupInfo) => {
925
+ if (chunkGroupInfo.resultingAvailableModules !== undefined) {
926
+ return chunkGroupInfo.resultingAvailableModules;
927
+ }
928
+
929
+ let resultingAvailableModules = /** @type {bigint} */ (
930
+ chunkGroupInfo.minAvailableModules
931
+ );
932
+
933
+ // add the modules from the chunk group to the set
934
+ for (const chunk of chunkGroupInfo.chunkGroup.chunks) {
935
+ const mask = /** @type {bigint} */ (maskByChunk.get(chunk));
936
+ resultingAvailableModules |= mask;
937
+ }
938
+
939
+ return (chunkGroupInfo.resultingAvailableModules =
940
+ resultingAvailableModules);
941
+ };
942
+
943
+ const processConnectQueue = () => {
944
+ // Figure out new parents for chunk groups
945
+ // to get new available modules for these children
946
+ for (const [chunkGroupInfo, targets] of queueConnect) {
947
+ // 1. Add new targets to the list of children
948
+ if (chunkGroupInfo.children === undefined) {
949
+ chunkGroupInfo.children = new Set();
950
+ }
951
+ for (const [target] of targets) {
952
+ chunkGroupInfo.children.add(target);
953
+ }
954
+
955
+ // 2. Calculate resulting available modules
956
+ const resultingAvailableModules =
957
+ calculateResultingAvailableModules(chunkGroupInfo);
958
+
959
+ const runtime = chunkGroupInfo.runtime;
960
+
961
+ // 3. Update chunk group info
962
+ for (const [target, processBlock] of targets) {
963
+ target.availableModulesToBeMerged.push(resultingAvailableModules);
964
+ chunkGroupsForMerging.add([target, processBlock]);
965
+ const oldRuntime = target.runtime;
966
+ const newRuntime = mergeRuntime(oldRuntime, runtime);
967
+ if (oldRuntime !== newRuntime) {
968
+ target.runtime = newRuntime;
969
+ outdatedChunkGroupInfo.add(target);
970
+ }
971
+ }
972
+
973
+ statConnectedChunkGroups += targets.size;
974
+ }
975
+ queueConnect.clear();
976
+ };
977
+
978
+ const processChunkGroupsForMerging = () => {
979
+ statProcessedChunkGroupsForMerging += chunkGroupsForMerging.size;
980
+
981
+ // Execute the merge
982
+ for (const [info, processBlock] of chunkGroupsForMerging) {
983
+ const availableModulesToBeMerged = info.availableModulesToBeMerged;
984
+ const cachedMinAvailableModules = info.minAvailableModules;
985
+ let minAvailableModules = cachedMinAvailableModules;
986
+
987
+ statMergedAvailableModuleSets += availableModulesToBeMerged.length;
988
+
989
+ for (const availableModules of availableModulesToBeMerged) {
990
+ if (minAvailableModules === undefined) {
991
+ minAvailableModules = availableModules;
992
+ } else {
993
+ minAvailableModules &= availableModules;
994
+ }
995
+ }
996
+
997
+ const changed = minAvailableModules !== cachedMinAvailableModules;
998
+
999
+ availableModulesToBeMerged.length = 0;
1000
+ if (changed) {
1001
+ info.minAvailableModules = minAvailableModules;
1002
+ info.resultingAvailableModules = undefined;
1003
+ outdatedChunkGroupInfo.add(info);
1004
+ }
1005
+
1006
+ if (processBlock) {
1007
+ let blocks = blocksByChunkGroups.get(info);
1008
+ if (!blocks) {
1009
+ blocksByChunkGroups.set(info, (blocks = new Set()));
1010
+ }
1011
+
1012
+ // Whether to walk block depends on minAvailableModules and input block.
1013
+ // We can treat creating chunk group as a function with 2 input, entry block and minAvailableModules
1014
+ // If input is the same, we can skip re-walk
1015
+ let needWalkBlock = !info.initialized || changed;
1016
+ if (!blocks.has(processBlock.block)) {
1017
+ needWalkBlock = true;
1018
+ blocks.add(processBlock.block);
1019
+ }
1020
+
1021
+ if (needWalkBlock) {
1022
+ info.initialized = true;
1023
+ queueDelayed.push(processBlock);
1024
+ }
1025
+ }
1026
+ }
1027
+ chunkGroupsForMerging.clear();
1028
+ };
1029
+
1030
+ const processChunkGroupsForCombining = () => {
1031
+ for (const info of chunkGroupsForCombining) {
1032
+ for (const source of /** @type {Set<ChunkGroupInfo>} */ (
1033
+ info.availableSources
1034
+ )) {
1035
+ if (source.minAvailableModules === undefined) {
1036
+ chunkGroupsForCombining.delete(info);
1037
+ break;
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ for (const info of chunkGroupsForCombining) {
1043
+ let availableModules = ZERO_BIGINT;
1044
+ // combine minAvailableModules from all resultingAvailableModules
1045
+ for (const source of /** @type {Set<ChunkGroupInfo>} */ (
1046
+ info.availableSources
1047
+ )) {
1048
+ const resultingAvailableModules =
1049
+ calculateResultingAvailableModules(source);
1050
+ availableModules |= resultingAvailableModules;
1051
+ }
1052
+ info.minAvailableModules = availableModules;
1053
+ info.resultingAvailableModules = undefined;
1054
+ outdatedChunkGroupInfo.add(info);
1055
+ }
1056
+ chunkGroupsForCombining.clear();
1057
+ };
1058
+
1059
+ const processOutdatedChunkGroupInfo = () => {
1060
+ statChunkGroupInfoUpdated += outdatedChunkGroupInfo.size;
1061
+ // Revisit skipped elements
1062
+ for (const info of outdatedChunkGroupInfo) {
1063
+ // 1. Reconsider skipped items
1064
+ if (info.skippedItems !== undefined) {
1065
+ const minAvailableModules =
1066
+ /** @type {bigint} */
1067
+ (info.minAvailableModules);
1068
+ for (const module of info.skippedItems) {
1069
+ const ordinal = getModuleOrdinal(module);
1070
+ if (!isOrdinalSetInMask(minAvailableModules, ordinal)) {
1071
+ queue.push({
1072
+ action: ADD_AND_ENTER_MODULE,
1073
+ block: module,
1074
+ module,
1075
+ chunk: info.chunkGroup.chunks[0],
1076
+ chunkGroup: info.chunkGroup,
1077
+ chunkGroupInfo: info
1078
+ });
1079
+ info.skippedItems.delete(module);
1080
+ }
1081
+ }
1082
+ }
1083
+
1084
+ // 2. Reconsider skipped connections
1085
+ if (info.skippedModuleConnections !== undefined) {
1086
+ const minAvailableModules =
1087
+ /** @type {bigint} */
1088
+ (info.minAvailableModules);
1089
+ for (const entry of info.skippedModuleConnections) {
1090
+ const [module, connections] = entry;
1091
+ const activeState = getActiveStateOfConnections(
1092
+ connections,
1093
+ info.runtime
1094
+ );
1095
+ if (activeState === false) continue;
1096
+ if (activeState === true) {
1097
+ const ordinal = getModuleOrdinal(module);
1098
+ info.skippedModuleConnections.delete(entry);
1099
+ if (isOrdinalSetInMask(minAvailableModules, ordinal)) {
1100
+ /** @type {NonNullable<ChunkGroupInfo["skippedItems"]>} */
1101
+ (info.skippedItems).add(module);
1102
+ continue;
1103
+ }
1104
+ }
1105
+ queue.push({
1106
+ action: activeState === true ? ADD_AND_ENTER_MODULE : PROCESS_BLOCK,
1107
+ block: module,
1108
+ module,
1109
+ chunk: info.chunkGroup.chunks[0],
1110
+ chunkGroup: info.chunkGroup,
1111
+ chunkGroupInfo: info
1112
+ });
1113
+ }
1114
+ }
1115
+
1116
+ // 2. Reconsider children chunk groups
1117
+ if (info.children !== undefined) {
1118
+ statChildChunkGroupsReconnected += info.children.size;
1119
+ for (const cgi of info.children) {
1120
+ let connectList = queueConnect.get(info);
1121
+ if (connectList === undefined) {
1122
+ /** @type {ConnectList} */
1123
+ connectList = new Set();
1124
+ queueConnect.set(info, connectList);
1125
+ }
1126
+ connectList.add([cgi, null]);
1127
+ }
1128
+ }
1129
+
1130
+ // 3. Reconsider chunk groups for combining
1131
+ if (info.availableChildren !== undefined) {
1132
+ for (const cgi of info.availableChildren) {
1133
+ chunkGroupsForCombining.add(cgi);
1134
+ }
1135
+ }
1136
+ outdatedOrderIndexChunkGroups.add(info);
1137
+ }
1138
+ outdatedChunkGroupInfo.clear();
1139
+ };
1140
+
1141
+ // Iterative traversal of the Module graph
1142
+ // Recursive would be simpler to write but could result in Stack Overflows
1143
+ while (queue.length || queueConnect.size) {
1144
+ logger.time("visitModules: visiting");
1145
+ processQueue();
1146
+ logger.timeAggregateEnd("visitModules: prepare");
1147
+ logger.timeEnd("visitModules: visiting");
1148
+
1149
+ if (chunkGroupsForCombining.size > 0) {
1150
+ logger.time("visitModules: combine available modules");
1151
+ processChunkGroupsForCombining();
1152
+ logger.timeEnd("visitModules: combine available modules");
1153
+ }
1154
+
1155
+ if (queueConnect.size > 0) {
1156
+ logger.time("visitModules: calculating available modules");
1157
+ processConnectQueue();
1158
+ logger.timeEnd("visitModules: calculating available modules");
1159
+
1160
+ if (chunkGroupsForMerging.size > 0) {
1161
+ logger.time("visitModules: merging available modules");
1162
+ processChunkGroupsForMerging();
1163
+ logger.timeEnd("visitModules: merging available modules");
1164
+ }
1165
+ }
1166
+
1167
+ if (outdatedChunkGroupInfo.size > 0) {
1168
+ logger.time("visitModules: check modules for revisit");
1169
+ processOutdatedChunkGroupInfo();
1170
+ logger.timeEnd("visitModules: check modules for revisit");
1171
+ }
1172
+
1173
+ // Run queueDelayed when all items of the queue are processed
1174
+ // This is important to get the global indexing correct
1175
+ // Async blocks should be processed after all sync blocks are processed
1176
+ if (queue.length === 0) {
1177
+ const tempQueue = queue;
1178
+ queue = queueDelayed.reverse();
1179
+ queueDelayed = tempQueue;
1180
+ }
1181
+ }
1182
+
1183
+ for (const info of outdatedOrderIndexChunkGroups) {
1184
+ const { chunkGroup, runtime } = info;
1185
+
1186
+ const blocks = blocksByChunkGroups.get(info);
1187
+
1188
+ if (!blocks) {
1189
+ continue;
1190
+ }
1191
+
1192
+ for (const block of blocks) {
1193
+ let preOrderIndex = 0;
1194
+ let postOrderIndex = 0;
1195
+ /**
1196
+ * @param {DependenciesBlock} current current
1197
+ * @param {BlocksWithNestedBlocks} visited visited dependencies blocks
1198
+ */
1199
+ const process = (current, visited) => {
1200
+ const blockModules =
1201
+ /** @type {BlockModulesInFlattenTuples} */
1202
+ (getBlockModules(current, runtime));
1203
+ for (let i = 0, len = blockModules.length; i < len; i += 3) {
1204
+ const activeState = /** @type {ConnectionState} */ (
1205
+ blockModules[i + 1]
1206
+ );
1207
+ if (activeState === false) {
1208
+ continue;
1209
+ }
1210
+ const refModule = /** @type {Module} */ (blockModules[i]);
1211
+ if (visited.has(refModule)) {
1212
+ continue;
1213
+ }
1214
+
1215
+ visited.add(refModule);
1216
+
1217
+ if (refModule) {
1218
+ chunkGroup.setModulePreOrderIndex(refModule, preOrderIndex++);
1219
+ process(refModule, visited);
1220
+ chunkGroup.setModulePostOrderIndex(refModule, postOrderIndex++);
1221
+ }
1222
+ }
1223
+ };
1224
+ process(block, new Set());
1225
+ }
1226
+ }
1227
+ outdatedOrderIndexChunkGroups.clear();
1228
+ ordinalByModule.clear();
1229
+
1230
+ logger.log(
1231
+ `${statProcessedQueueItems} queue items processed (${statProcessedBlocks} blocks)`
1232
+ );
1233
+ logger.log(`${statConnectedChunkGroups} chunk groups connected`);
1234
+ logger.log(
1235
+ `${statProcessedChunkGroupsForMerging} chunk groups processed for merging (${statMergedAvailableModuleSets} module sets, ${statForkedAvailableModules} forked, ${statForkedAvailableModulesCount} + ${statForkedAvailableModulesCountPlus} modules forked, ${statForkedMergedModulesCount} + ${statForkedMergedModulesCountPlus} modules merged into fork, ${statForkedResultModulesCount} resulting modules)`
1236
+ );
1237
+ logger.log(
1238
+ `${statChunkGroupInfoUpdated} chunk group info updated (${statChildChunkGroupsReconnected} already connected chunk groups reconnected)`
1239
+ );
1240
+ };
1241
+
1242
+ /**
1243
+ * @param {Compilation} compilation the compilation
1244
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
1245
+ * @param {BlockConnections} blockConnections connection for blocks
1246
+ * @param {MaskByChunk} maskByChunk mapping from chunk to module mask
1247
+ */
1248
+ const connectChunkGroups = (
1249
+ compilation,
1250
+ blocksWithNestedBlocks,
1251
+ blockConnections,
1252
+ maskByChunk
1253
+ ) => {
1254
+ const { chunkGraph } = compilation;
1255
+
1256
+ /**
1257
+ * Helper function to check if all modules of a chunk are available
1258
+ * @param {ChunkGroup} chunkGroup the chunkGroup to scan
1259
+ * @param {bigint} availableModules the comparator set
1260
+ * @returns {boolean} return true if all modules of a chunk are available
1261
+ */
1262
+ const areModulesAvailable = (chunkGroup, availableModules) => {
1263
+ for (const chunk of chunkGroup.chunks) {
1264
+ const chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
1265
+ if ((chunkMask & availableModules) !== chunkMask) return false;
1266
+ }
1267
+ return true;
1268
+ };
1269
+
1270
+ // For each edge in the basic chunk graph
1271
+ for (const [block, connections] of blockConnections) {
1272
+ // 1. Check if connection is needed
1273
+ // When none of the dependencies need to be connected
1274
+ // we can skip all of them
1275
+ // It's not possible to filter each item so it doesn't create inconsistent
1276
+ // connections and modules can only create one version
1277
+ // TODO maybe decide this per runtime
1278
+ if (
1279
+ // TODO is this needed?
1280
+ !blocksWithNestedBlocks.has(block) &&
1281
+ connections.every(({ chunkGroup, originChunkGroupInfo }) =>
1282
+ areModulesAvailable(
1283
+ chunkGroup,
1284
+ /** @type {bigint} */ (originChunkGroupInfo.resultingAvailableModules)
1285
+ )
1286
+ )
1287
+ ) {
1288
+ continue;
1289
+ }
1290
+
1291
+ // 2. Foreach edge
1292
+ for (let i = 0; i < connections.length; i++) {
1293
+ const { chunkGroup, originChunkGroupInfo } = connections[i];
1294
+
1295
+ // 3. Connect block with chunk
1296
+ chunkGraph.connectBlockAndChunkGroup(block, chunkGroup);
1297
+
1298
+ // 4. Connect chunk with parent
1299
+ connectChunkGroupParentAndChild(
1300
+ originChunkGroupInfo.chunkGroup,
1301
+ chunkGroup
1302
+ );
1303
+ }
1304
+ }
1305
+ };
1306
+
1307
+ /**
1308
+ * Remove all unconnected chunk groups
1309
+ * @param {Compilation} compilation the compilation
1310
+ * @param {Iterable<ChunkGroup>} allCreatedChunkGroups all chunk groups that where created before
1311
+ */
1312
+ const cleanupUnconnectedGroups = (compilation, allCreatedChunkGroups) => {
1313
+ const { chunkGraph } = compilation;
1314
+
1315
+ for (const chunkGroup of allCreatedChunkGroups) {
1316
+ if (chunkGroup.getNumberOfParents() === 0) {
1317
+ for (const chunk of chunkGroup.chunks) {
1318
+ compilation.chunks.delete(chunk);
1319
+ chunkGraph.disconnectChunk(chunk);
1320
+ }
1321
+ chunkGraph.disconnectChunkGroup(chunkGroup);
1322
+ chunkGroup.remove();
1323
+ }
1324
+ }
1325
+ };
1326
+
1327
+ /**
1328
+ * This method creates the Chunk graph from the Module graph
1329
+ * @param {Compilation} compilation the compilation
1330
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
1331
+ * @returns {void}
1332
+ */
1333
+ const buildChunkGraph = (compilation, inputEntrypointsAndModules) => {
1334
+ const logger = compilation.getLogger("webpack.buildChunkGraph");
1335
+
1336
+ // SHARED STATE
1337
+
1338
+ /** @type {BlockConnections} */
1339
+ const blockConnections = new Map();
1340
+
1341
+ /** @type {AllCreatedChunkGroups} */
1342
+ const allCreatedChunkGroups = new Set();
1343
+
1344
+ /** @type {ChunkGroupInfoMap} */
1345
+ const chunkGroupInfoMap = new Map();
1346
+
1347
+ /** @type {BlocksWithNestedBlocks} */
1348
+ const blocksWithNestedBlocks = new Set();
1349
+
1350
+ /** @type {MaskByChunk} */
1351
+ const maskByChunk = new Map();
1352
+
1353
+ // PART ONE
1354
+
1355
+ logger.time("visitModules");
1356
+ visitModules(
1357
+ logger,
1358
+ compilation,
1359
+ inputEntrypointsAndModules,
1360
+ chunkGroupInfoMap,
1361
+ blockConnections,
1362
+ blocksWithNestedBlocks,
1363
+ allCreatedChunkGroups,
1364
+ maskByChunk
1365
+ );
1366
+ logger.timeEnd("visitModules");
1367
+
1368
+ // PART TWO
1369
+
1370
+ logger.time("connectChunkGroups");
1371
+ connectChunkGroups(
1372
+ compilation,
1373
+ blocksWithNestedBlocks,
1374
+ blockConnections,
1375
+ maskByChunk
1376
+ );
1377
+ logger.timeEnd("connectChunkGroups");
1378
+
1379
+ for (const [chunkGroup, chunkGroupInfo] of chunkGroupInfoMap) {
1380
+ for (const chunk of chunkGroup.chunks) {
1381
+ chunk.runtime = mergeRuntime(chunk.runtime, chunkGroupInfo.runtime);
1382
+ }
1383
+ }
1384
+
1385
+ // Cleanup work
1386
+
1387
+ logger.time("cleanup");
1388
+ cleanupUnconnectedGroups(compilation, allCreatedChunkGroups);
1389
+ logger.timeEnd("cleanup");
1390
+ };
1391
+
1392
+ module.exports = buildChunkGraph;