webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -24,7 +24,7 @@ const validate = createSchemaValidation(
24
24
  );
25
25
 
26
26
  /**
27
- * @typedef {Object} ChunkCombination
27
+ * @typedef {object} ChunkCombination
28
28
  * @property {boolean} deleted this is set to true when combination was removed
29
29
  * @property {number} sizeDiff
30
30
  * @property {number} integratedSize
@@ -36,6 +36,12 @@ const validate = createSchemaValidation(
36
36
  * @property {number} bSize
37
37
  */
38
38
 
39
+ /**
40
+ * @template K, V
41
+ * @param {Map<K, Set<V>>} map map
42
+ * @param {K} key key
43
+ * @param {V} value value
44
+ */
39
45
  const addToSetMap = (map, key, value) => {
40
46
  const set = map.get(key);
41
47
  if (set === undefined) {
@@ -68,7 +74,9 @@ class LimitChunkCountPlugin {
68
74
  },
69
75
  chunks => {
70
76
  const chunkGraph = compilation.chunkGraph;
71
- const maxChunks = options.maxChunks;
77
+ const maxChunks =
78
+ /** @type {LimitChunkCountPluginOptions} */
79
+ (options).maxChunks;
72
80
  if (!maxChunks) return;
73
81
  if (maxChunks < 1) return;
74
82
  if (compilation.chunks.size <= maxChunks) return;
@@ -88,9 +96,17 @@ class LimitChunkCountPlugin {
88
96
  c => c.sizeDiff,
89
97
  (a, b) => b - a,
90
98
  // Layer 2: ordered by smallest combined size
99
+ /**
100
+ * @param {ChunkCombination} c combination
101
+ * @returns {number} integrated size
102
+ */
91
103
  c => c.integratedSize,
92
104
  (a, b) => a - b,
93
105
  // Layer 3: ordered by position difference in orderedChunk (-> to be deterministic)
106
+ /**
107
+ * @param {ChunkCombination} c combination
108
+ * @returns {number} position difference
109
+ */
94
110
  c => c.bIdx - c.aIdx,
95
111
  (a, b) => a - b,
96
112
  // Layer 4: ordered by position in orderedChunk (-> to be deterministic)
@@ -103,7 +119,7 @@ class LimitChunkCountPlugin {
103
119
  /** @type {Map<Chunk, Set<ChunkCombination>>} */
104
120
  const combinationsByChunk = new Map();
105
121
 
106
- orderedChunks.forEach((b, bIdx) => {
122
+ for (const [bIdx, b] of orderedChunks.entries()) {
107
123
  // create combination pairs with size and integrated size
108
124
  for (let aIdx = 0; aIdx < bIdx; aIdx++) {
109
125
  const a = orderedChunks[aIdx];
@@ -133,8 +149,7 @@ class LimitChunkCountPlugin {
133
149
  addToSetMap(combinationsByChunk, a, c);
134
150
  addToSetMap(combinationsByChunk, b, c);
135
151
  }
136
- return combinations;
137
- });
152
+ }
138
153
 
139
154
  // list of modified chunks during this run
140
155
  // combinations affected by this change are skipped to allow
@@ -143,7 +158,6 @@ class LimitChunkCountPlugin {
143
158
  const modifiedChunks = new Set();
144
159
 
145
160
  let changed = false;
146
- // eslint-disable-next-line no-constant-condition
147
161
  loop: while (true) {
148
162
  const combination = combinations.popFirst();
149
163
  if (combination === undefined) break;
@@ -193,14 +207,18 @@ class LimitChunkCountPlugin {
193
207
  // Update all affected combinations
194
208
  // delete all combination with the removed chunk
195
209
  // we will use combinations with the kept chunk instead
196
- for (const combination of combinationsByChunk.get(a)) {
210
+ for (const combination of /** @type {Set<ChunkCombination>} */ (
211
+ combinationsByChunk.get(a)
212
+ )) {
197
213
  if (combination.deleted) continue;
198
214
  combination.deleted = true;
199
215
  combinations.delete(combination);
200
216
  }
201
217
 
202
218
  // Update combinations with the kept chunk with new sizes
203
- for (const combination of combinationsByChunk.get(b)) {
219
+ for (const combination of /** @type {Set<ChunkCombination>} */ (
220
+ combinationsByChunk.get(b)
221
+ )) {
204
222
  if (combination.deleted) continue;
205
223
  if (combination.a === b) {
206
224
  if (!chunkGraph.canChunksBeIntegrated(a, combination.b)) {
@@ -243,7 +261,12 @@ class LimitChunkCountPlugin {
243
261
  finishUpdate();
244
262
  }
245
263
  }
246
- combinationsByChunk.set(a, combinationsByChunk.get(b));
264
+ combinationsByChunk.set(
265
+ a,
266
+ /** @type {Set<ChunkCombination>} */ (
267
+ combinationsByChunk.get(b)
268
+ )
269
+ );
247
270
  combinationsByChunk.delete(b);
248
271
  }
249
272
  }
@@ -39,7 +39,7 @@ const comparator = compareSelect(e => e.name, compareStringsNumeric);
39
39
  /**
40
40
  * @param {boolean} deterministic use deterministic names
41
41
  * @param {ExportsInfo} exportsInfo exports info
42
- * @param {boolean} isNamespace is namespace object
42
+ * @param {boolean | undefined} isNamespace is namespace object
43
43
  * @returns {void}
44
44
  */
45
45
  const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
@@ -88,7 +88,11 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
88
88
  used === UsageState.OnlyPropertiesUsed ||
89
89
  used === UsageState.Unused
90
90
  ) {
91
- mangleExportsInfo(deterministic, exportInfo.exportsInfo, false);
91
+ mangleExportsInfo(
92
+ deterministic,
93
+ /** @type {ExportsInfo} */ (exportInfo.exportsInfo),
94
+ false
95
+ );
92
96
  }
93
97
  }
94
98
  }
@@ -145,6 +149,7 @@ class MangleExportsPlugin {
145
149
  constructor(deterministic) {
146
150
  this._deterministic = deterministic;
147
151
  }
152
+
148
153
  /**
149
154
  * Apply the plugin
150
155
  * @param {Compiler} compiler the compiler instance
@@ -9,6 +9,11 @@ const SizeFormatHelpers = require("../SizeFormatHelpers");
9
9
  const WebpackError = require("../WebpackError");
10
10
 
11
11
  class MinMaxSizeWarning extends WebpackError {
12
+ /**
13
+ * @param {string[] | undefined} keys keys
14
+ * @param {number} minSize minimum size
15
+ * @param {number} maxSize maximum size
16
+ */
12
17
  constructor(keys, minSize, maxSize) {
13
18
  let keysMessage = "Fallback cache group";
14
19
  if (keys) {
@@ -18,7 +23,7 @@ class MinMaxSizeWarning extends WebpackError {
18
23
  : `Cache group ${keys[0]}`;
19
24
  }
20
25
  super(
21
- `SplitChunksPlugin\n` +
26
+ "SplitChunksPlugin\n" +
22
27
  `${keysMessage}\n` +
23
28
  `Configured minSize (${SizeFormatHelpers.formatSize(minSize)}) is ` +
24
29
  `bigger than maxSize (${SizeFormatHelpers.formatSize(maxSize)}).\n` +
@@ -23,11 +23,12 @@ const ConcatenatedModule = require("./ConcatenatedModule");
23
23
  /** @typedef {import("../Compilation")} Compilation */
24
24
  /** @typedef {import("../Compiler")} Compiler */
25
25
  /** @typedef {import("../Module")} Module */
26
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
26
27
  /** @typedef {import("../RequestShortener")} RequestShortener */
27
28
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
28
29
 
29
30
  /**
30
- * @typedef {Object} Statistics
31
+ * @typedef {object} Statistics
31
32
  * @property {number} cached
32
33
  * @property {number} alreadyInConfig
33
34
  * @property {number} invalidModule
@@ -40,26 +41,34 @@ const ConcatenatedModule = require("./ConcatenatedModule");
40
41
  * @property {number} added
41
42
  */
42
43
 
43
- const formatBailoutReason = msg => {
44
- return "ModuleConcatenation bailout: " + msg;
45
- };
44
+ /**
45
+ * @param {string} msg message
46
+ * @returns {string} formatted message
47
+ */
48
+ const formatBailoutReason = msg => `ModuleConcatenation bailout: ${msg}`;
46
49
 
47
50
  class ModuleConcatenationPlugin {
48
- constructor(options) {
49
- if (typeof options !== "object") options = {};
50
- this.options = options;
51
- }
52
-
53
51
  /**
54
52
  * Apply the plugin
55
53
  * @param {Compiler} compiler the compiler instance
56
54
  * @returns {void}
57
55
  */
58
56
  apply(compiler) {
57
+ const { _backCompat: backCompat } = compiler;
59
58
  compiler.hooks.compilation.tap("ModuleConcatenationPlugin", compilation => {
59
+ if (compilation.moduleMemCaches) {
60
+ throw new Error(
61
+ "optimization.concatenateModules can't be used with cacheUnaffected as module concatenation is a global effect"
62
+ );
63
+ }
60
64
  const moduleGraph = compilation.moduleGraph;
65
+ /** @type {Map<Module, string | ((requestShortener: RequestShortener) => string)>} */
61
66
  const bailoutReasonMap = new Map();
62
67
 
68
+ /**
69
+ * @param {Module} module the module
70
+ * @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
71
+ */
63
72
  const setBailoutReason = (module, reason) => {
64
73
  setInnerBailoutReason(module, reason);
65
74
  moduleGraph
@@ -71,16 +80,30 @@ class ModuleConcatenationPlugin {
71
80
  );
72
81
  };
73
82
 
83
+ /**
84
+ * @param {Module} module the module
85
+ * @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
86
+ */
74
87
  const setInnerBailoutReason = (module, reason) => {
75
88
  bailoutReasonMap.set(module, reason);
76
89
  };
77
90
 
91
+ /**
92
+ * @param {Module} module the module
93
+ * @param {RequestShortener} requestShortener the request shortener
94
+ * @returns {string | ((requestShortener: RequestShortener) => string) | undefined} the reason
95
+ */
78
96
  const getInnerBailoutReason = (module, requestShortener) => {
79
97
  const reason = bailoutReasonMap.get(module);
80
98
  if (typeof reason === "function") return reason(requestShortener);
81
99
  return reason;
82
100
  };
83
101
 
102
+ /**
103
+ * @param {Module} module the module
104
+ * @param {Module | function(RequestShortener): string} problem the problem
105
+ * @returns {(requestShortener: RequestShortener) => string} the reason
106
+ */
84
107
  const formatBailoutWarning = (module, problem) => requestShortener => {
85
108
  if (typeof problem === "function") {
86
109
  return formatBailoutReason(
@@ -97,15 +120,14 @@ class ModuleConcatenationPlugin {
97
120
  requestShortener
98
121
  )}${reasonWithPrefix}`
99
122
  );
100
- } else {
101
- return formatBailoutReason(
102
- `Cannot concat with ${module.readableIdentifier(
103
- requestShortener
104
- )} because of ${problem.readableIdentifier(
105
- requestShortener
106
- )}${reasonWithPrefix}`
107
- );
108
123
  }
124
+ return formatBailoutReason(
125
+ `Cannot concat with ${module.readableIdentifier(
126
+ requestShortener
127
+ )} because of ${problem.readableIdentifier(
128
+ requestShortener
129
+ )}${reasonWithPrefix}`
130
+ );
109
131
  };
110
132
 
111
133
  compilation.hooks.optimizeChunkModules.tapAsync(
@@ -137,13 +159,13 @@ class ModuleConcatenationPlugin {
137
159
 
138
160
  // Must not be an async module
139
161
  if (moduleGraph.isAsync(module)) {
140
- setBailoutReason(module, `Module is async`);
162
+ setBailoutReason(module, "Module is async");
141
163
  continue;
142
164
  }
143
165
 
144
166
  // Must be in strict mode
145
- if (!module.buildInfo.strict) {
146
- setBailoutReason(module, `Module is not in strict mode`);
167
+ if (!(/** @type {BuildInfo} */ (module.buildInfo).strict)) {
168
+ setBailoutReason(module, "Module is not in strict mode");
147
169
  continue;
148
170
  }
149
171
 
@@ -156,11 +178,10 @@ class ModuleConcatenationPlugin {
156
178
  // Exports must be known (and not dynamic)
157
179
  const exportsInfo = moduleGraph.getExportsInfo(module);
158
180
  const relevantExports = exportsInfo.getRelevantExports(undefined);
159
- const unknownReexports = relevantExports.filter(exportInfo => {
160
- return (
181
+ const unknownReexports = relevantExports.filter(
182
+ exportInfo =>
161
183
  exportInfo.isReexport() && !exportInfo.getTarget(moduleGraph)
162
- );
163
- });
184
+ );
164
185
  if (unknownReexports.length > 0) {
165
186
  setBailoutReason(
166
187
  module,
@@ -177,9 +198,7 @@ class ModuleConcatenationPlugin {
177
198
 
178
199
  // Root modules must have a static list of exports
179
200
  const unknownProvidedExports = relevantExports.filter(
180
- exportInfo => {
181
- return exportInfo.provided !== true;
182
- }
201
+ exportInfo => exportInfo.provided !== true
183
202
  );
184
203
  if (unknownProvidedExports.length > 0) {
185
204
  setBailoutReason(
@@ -212,9 +231,11 @@ class ModuleConcatenationPlugin {
212
231
  // modules with lower depth are more likely suited as roots
213
232
  // this improves performance, because modules already selected as inner are skipped
214
233
  logger.time("sort relevant modules");
215
- relevantModules.sort((a, b) => {
216
- return moduleGraph.getDepth(a) - moduleGraph.getDepth(b);
217
- });
234
+ relevantModules.sort(
235
+ (a, b) =>
236
+ /** @type {number} */ (moduleGraph.getDepth(a)) -
237
+ /** @type {number} */ (moduleGraph.getDepth(b))
238
+ );
218
239
  logger.timeEnd("sort relevant modules");
219
240
 
220
241
  /** @type {Statistics} */
@@ -243,7 +264,7 @@ class ModuleConcatenationPlugin {
243
264
  // TODO reconsider that when it's only used in a different runtime
244
265
  if (usedAsInner.has(currentRoot)) continue;
245
266
 
246
- let chunkRuntime = undefined;
267
+ let chunkRuntime;
247
268
  for (const r of chunkGraph.getModuleRuntimes(currentRoot)) {
248
269
  chunkRuntime = mergeRuntimeOwned(chunkRuntime, r);
249
270
  }
@@ -255,8 +276,8 @@ class ModuleConcatenationPlugin {
255
276
  filteredRuntime === true
256
277
  ? chunkRuntime
257
278
  : filteredRuntime === false
258
- ? undefined
259
- : filteredRuntime;
279
+ ? undefined
280
+ : filteredRuntime;
260
281
 
261
282
  // create a configuration with the root
262
283
  const currentConfiguration = new ConcatConfiguration(
@@ -340,11 +361,9 @@ class ModuleConcatenationPlugin {
340
361
  // to get the biggest groups possible. Used modules are marked with usedModules
341
362
  // TODO: Allow to reuse existing configuration while trying to add dependencies.
342
363
  // This would improve performance. O(n^2) -> O(n)
343
- logger.time(`sort concat configurations`);
344
- concatConfigurations.sort((a, b) => {
345
- return b.modules.size - a.modules.size;
346
- });
347
- logger.timeEnd(`sort concat configurations`);
364
+ logger.time("sort concat configurations");
365
+ concatConfigurations.sort((a, b) => b.modules.size - a.modules.size);
366
+ logger.timeEnd("sort concat configurations");
348
367
  const usedModules = new Set();
349
368
 
350
369
  logger.time("create concatenated modules");
@@ -362,10 +381,12 @@ class ModuleConcatenationPlugin {
362
381
  }
363
382
 
364
383
  // Create a new ConcatenatedModule
365
- let newModule = ConcatenatedModule.create(
384
+ ConcatenatedModule.getCompilationHooks(compilation);
385
+ const newModule = ConcatenatedModule.create(
366
386
  rootModule,
367
387
  modules,
368
388
  concatConfiguration.runtime,
389
+ compilation,
369
390
  compiler.root,
370
391
  compilation.outputOptions.hashFunction
371
392
  );
@@ -389,8 +410,10 @@ class ModuleConcatenationPlugin {
389
410
  };
390
411
 
391
412
  const integrate = () => {
392
- ChunkGraph.setChunkGraphForModule(newModule, chunkGraph);
393
- ModuleGraph.setModuleGraphForModule(newModule, moduleGraph);
413
+ if (backCompat) {
414
+ ChunkGraph.setChunkGraphForModule(newModule, chunkGraph);
415
+ ModuleGraph.setModuleGraphForModule(newModule, moduleGraph);
416
+ }
394
417
 
395
418
  for (const warning of concatConfiguration.getWarningsSorted()) {
396
419
  moduleGraph
@@ -408,21 +431,32 @@ class ModuleConcatenationPlugin {
408
431
  moduleGraph.copyOutgoingModuleConnections(
409
432
  m,
410
433
  newModule,
411
- c => {
412
- return (
413
- c.originModule === m &&
414
- !(
415
- c.dependency instanceof HarmonyImportDependency &&
416
- modules.has(c.module)
417
- )
418
- );
419
- }
434
+ c =>
435
+ c.originModule === m &&
436
+ !(
437
+ c.dependency instanceof HarmonyImportDependency &&
438
+ modules.has(c.module)
439
+ )
420
440
  );
421
441
  // remove module from chunk
422
442
  for (const chunk of chunkGraph.getModuleChunksIterable(
423
443
  rootModule
424
444
  )) {
425
- chunkGraph.disconnectChunkAndModule(chunk, m);
445
+ const sourceTypes = chunkGraph.getChunkModuleSourceTypes(
446
+ chunk,
447
+ m
448
+ );
449
+ if (sourceTypes.size === 1) {
450
+ chunkGraph.disconnectChunkAndModule(chunk, m);
451
+ } else {
452
+ const newSourceTypes = new Set(sourceTypes);
453
+ newSourceTypes.delete("javascript");
454
+ chunkGraph.setChunkModuleSourceTypes(
455
+ chunk,
456
+ m,
457
+ newSourceTypes
458
+ );
459
+ }
426
460
  }
427
461
  }
428
462
  }
@@ -438,7 +472,7 @@ class ModuleConcatenationPlugin {
438
472
  c.module === rootModule ? c.originModule : c.module;
439
473
  const innerConnection =
440
474
  c.dependency instanceof HarmonyImportDependency &&
441
- modules.has(otherModule);
475
+ modules.has(/** @type {Module} */ (otherModule));
442
476
  return !innerConnection;
443
477
  });
444
478
  // add concatenated module to the compilation
@@ -511,7 +545,7 @@ class ModuleConcatenationPlugin {
511
545
  * @param {ChunkGraph} chunkGraph the chunk graph
512
546
  * @param {boolean} avoidMutateOnFailure avoid mutating the config when adding fails
513
547
  * @param {Statistics} statistics gathering metrics
514
- * @returns {Module | function(RequestShortener): string} the problematic module
548
+ * @returns {null | Module | function(RequestShortener): string} the problematic module
515
549
  */
516
550
  _tryToAdd(
517
551
  compilation,
@@ -550,6 +584,10 @@ class ModuleConcatenationPlugin {
550
584
  chunkGraph.getModuleChunksIterable(config.rootModule)
551
585
  ).filter(chunk => !chunkGraph.isModuleInChunk(module, chunk));
552
586
  if (missingChunks.length > 0) {
587
+ /**
588
+ * @param {RequestShortener} requestShortener request shortener
589
+ * @returns {string} problem description
590
+ */
553
591
  const problem = requestShortener => {
554
592
  const missingChunksList = Array.from(
555
593
  new Set(missingChunks.map(chunk => chunk.name || "unnamed chunk(s)"))
@@ -581,12 +619,16 @@ class ModuleConcatenationPlugin {
581
619
  incomingConnections.get(null) || incomingConnections.get(undefined);
582
620
  if (incomingConnectionsFromNonModules) {
583
621
  const activeNonModulesConnections =
584
- incomingConnectionsFromNonModules.filter(connection => {
622
+ incomingConnectionsFromNonModules.filter(connection =>
585
623
  // We are not interested in inactive connections
586
624
  // or connections without dependency
587
- return connection.isActive(runtime) || connection.dependency;
588
- });
625
+ connection.isActive(runtime)
626
+ );
589
627
  if (activeNonModulesConnections.length > 0) {
628
+ /**
629
+ * @param {RequestShortener} requestShortener request shortener
630
+ * @returns {string} problem description
631
+ */
590
632
  const problem = requestShortener => {
591
633
  const importingExplanations = new Set(
592
634
  activeNonModulesConnections.map(c => c.explanation).filter(Boolean)
@@ -614,7 +656,7 @@ class ModuleConcatenationPlugin {
614
656
  if (chunkGraph.getNumberOfModuleChunks(originModule) === 0) continue;
615
657
 
616
658
  // We don't care for connections from other runtimes
617
- let originRuntime = undefined;
659
+ let originRuntime;
618
660
  for (const r of chunkGraph.getModuleRuntimes(originModule)) {
619
661
  originRuntime = mergeRuntimeOwned(originRuntime, r);
620
662
  }
@@ -644,6 +686,10 @@ class ModuleConcatenationPlugin {
644
686
  return false;
645
687
  });
646
688
  if (otherChunkModules.length > 0) {
689
+ /**
690
+ * @param {RequestShortener} requestShortener request shortener
691
+ * @returns {string} problem description
692
+ */
647
693
  const problem = requestShortener => {
648
694
  const names = otherChunkModules
649
695
  .map(m => m.readableIdentifier(requestShortener))
@@ -671,21 +717,26 @@ class ModuleConcatenationPlugin {
671
717
  nonHarmonyConnections.set(originModule, connections);
672
718
  }
673
719
  if (nonHarmonyConnections.size > 0) {
720
+ /**
721
+ * @param {RequestShortener} requestShortener request shortener
722
+ * @returns {string} problem description
723
+ */
674
724
  const problem = requestShortener => {
675
725
  const names = Array.from(nonHarmonyConnections)
676
- .map(([originModule, connections]) => {
677
- return `${originModule.readableIdentifier(
678
- requestShortener
679
- )} (referenced with ${Array.from(
680
- new Set(
681
- connections
682
- .map(c => c.dependency && c.dependency.type)
683
- .filter(Boolean)
726
+ .map(
727
+ ([originModule, connections]) =>
728
+ `${originModule.readableIdentifier(
729
+ requestShortener
730
+ )} (referenced with ${Array.from(
731
+ new Set(
732
+ connections
733
+ .map(c => c.dependency && c.dependency.type)
734
+ .filter(Boolean)
735
+ )
684
736
  )
685
- )
686
- .sort()
687
- .join(", ")})`;
688
- })
737
+ .sort()
738
+ .join(", ")})`
739
+ )
689
740
  .sort();
690
741
  return `Module ${module.readableIdentifier(
691
742
  requestShortener
@@ -709,19 +760,15 @@ class ModuleConcatenationPlugin {
709
760
  /** @type {false | RuntimeSpec} */
710
761
  let currentRuntimeCondition = false;
711
762
  for (const connection of connections) {
712
- const runtimeCondition = filterRuntime(runtime, runtime => {
713
- return connection.isTargetActive(runtime);
714
- });
763
+ const runtimeCondition = filterRuntime(runtime, runtime =>
764
+ connection.isTargetActive(runtime)
765
+ );
715
766
  if (runtimeCondition === false) continue;
716
767
  if (runtimeCondition === true) continue outer;
717
- if (currentRuntimeCondition !== false) {
718
- currentRuntimeCondition = mergeRuntime(
719
- currentRuntimeCondition,
720
- runtimeCondition
721
- );
722
- } else {
723
- currentRuntimeCondition = runtimeCondition;
724
- }
768
+ currentRuntimeCondition =
769
+ currentRuntimeCondition !== false
770
+ ? mergeRuntime(currentRuntimeCondition, runtimeCondition)
771
+ : runtimeCondition;
725
772
  }
726
773
  if (currentRuntimeCondition !== false) {
727
774
  otherRuntimeConnections.push({
@@ -731,8 +778,12 @@ class ModuleConcatenationPlugin {
731
778
  }
732
779
  }
733
780
  if (otherRuntimeConnections.length > 0) {
734
- const problem = requestShortener => {
735
- return `Module ${module.readableIdentifier(
781
+ /**
782
+ * @param {RequestShortener} requestShortener request shortener
783
+ * @returns {string} problem description
784
+ */
785
+ const problem = requestShortener =>
786
+ `Module ${module.readableIdentifier(
736
787
  requestShortener
737
788
  )} is runtime-dependent referenced by these modules: ${Array.from(
738
789
  otherRuntimeConnections,
@@ -745,7 +796,6 @@ class ModuleConcatenationPlugin {
745
796
  /** @type {RuntimeSpec} */ (runtimeCondition)
746
797
  )})`
747
798
  ).join(", ")}`;
748
- };
749
799
  statistics.incorrectRuntimeCondition++;
750
800
  failureCache.set(module, problem); // cache failures for performance
751
801
  return problem;
@@ -809,10 +859,17 @@ class ConcatConfiguration {
809
859
  this.warnings = new Map();
810
860
  }
811
861
 
862
+ /**
863
+ * @param {Module} module the module
864
+ */
812
865
  add(module) {
813
866
  this.modules.add(module);
814
867
  }
815
868
 
869
+ /**
870
+ * @param {Module} module the module
871
+ * @returns {boolean} true, when the module is in the module set
872
+ */
816
873
  has(module) {
817
874
  return this.modules.has(module);
818
875
  }
@@ -821,10 +878,17 @@ class ConcatConfiguration {
821
878
  return this.modules.size === 1;
822
879
  }
823
880
 
881
+ /**
882
+ * @param {Module} module the module
883
+ * @param {Module | function(RequestShortener): string} problem the problem
884
+ */
824
885
  addWarning(module, problem) {
825
886
  this.warnings.set(module, problem);
826
887
  }
827
888
 
889
+ /**
890
+ * @returns {Map<Module, Module | function(RequestShortener): string>} warnings
891
+ */
828
892
  getWarningsSorted() {
829
893
  return new Map(
830
894
  Array.from(this.warnings).sort((a, b) => {
@@ -848,6 +912,9 @@ class ConcatConfiguration {
848
912
  return this.modules.size;
849
913
  }
850
914
 
915
+ /**
916
+ * @param {number} snapshot snapshot
917
+ */
851
918
  rollback(snapshot) {
852
919
  const modules = this.modules;
853
920
  for (const m of modules) {