webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -8,15 +8,16 @@
8
8
  const asyncLib = require("neo-async");
9
9
  const ChunkGraph = require("../ChunkGraph");
10
10
  const ModuleGraph = require("../ModuleGraph");
11
+ const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
11
12
  const { STAGE_DEFAULT } = require("../OptimizationStages");
12
13
  const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
13
14
  const { compareModulesByIdentifier } = require("../util/comparators");
14
15
  const {
16
+ filterRuntime,
15
17
  intersectRuntime,
18
+ mergeRuntime,
16
19
  mergeRuntimeOwned,
17
- filterRuntime,
18
- runtimeToString,
19
- mergeRuntime
20
+ runtimeToString
20
21
  } = require("../util/runtime");
21
22
  const ConcatenatedModule = require("./ConcatenatedModule");
22
23
 
@@ -45,7 +46,9 @@ const ConcatenatedModule = require("./ConcatenatedModule");
45
46
  * @param {string} msg message
46
47
  * @returns {string} formatted message
47
48
  */
48
- const formatBailoutReason = msg => `ModuleConcatenation bailout: ${msg}`;
49
+ const formatBailoutReason = (msg) => `ModuleConcatenation bailout: ${msg}`;
50
+
51
+ const PLUGIN_NAME = "ModuleConcatenationPlugin";
49
52
 
50
53
  class ModuleConcatenationPlugin {
51
54
  /**
@@ -55,7 +58,7 @@ class ModuleConcatenationPlugin {
55
58
  */
56
59
  apply(compiler) {
57
60
  const { _backCompat: backCompat } = compiler;
58
- compiler.hooks.compilation.tap("ModuleConcatenationPlugin", compilation => {
61
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
59
62
  if (compilation.moduleMemCaches) {
60
63
  throw new Error(
61
64
  "optimization.concatenateModules can't be used with cacheUnaffected as module concatenation is a global effect"
@@ -75,7 +78,7 @@ class ModuleConcatenationPlugin {
75
78
  .getOptimizationBailout(module)
76
79
  .push(
77
80
  typeof reason === "function"
78
- ? rs => formatBailoutReason(reason(rs))
81
+ ? (rs) => formatBailoutReason(reason(rs))
79
82
  : formatBailoutReason(reason)
80
83
  );
81
84
  };
@@ -101,10 +104,10 @@ class ModuleConcatenationPlugin {
101
104
 
102
105
  /**
103
106
  * @param {Module} module the module
104
- * @param {Module | function(RequestShortener): string} problem the problem
107
+ * @param {Module | ((requestShortener: RequestShortener) => string)} problem the problem
105
108
  * @returns {(requestShortener: RequestShortener) => string} the reason
106
109
  */
107
- const formatBailoutWarning = (module, problem) => requestShortener => {
110
+ const formatBailoutWarning = (module, problem) => (requestShortener) => {
108
111
  if (typeof problem === "function") {
109
112
  return formatBailoutReason(
110
113
  `Cannot concat with ${module.readableIdentifier(
@@ -132,7 +135,7 @@ class ModuleConcatenationPlugin {
132
135
 
133
136
  compilation.hooks.optimizeChunkModules.tapAsync(
134
137
  {
135
- name: "ModuleConcatenationPlugin",
138
+ name: PLUGIN_NAME,
136
139
  stage: STAGE_DEFAULT
137
140
  },
138
141
  (allChunks, modules, callback) => {
@@ -146,6 +149,7 @@ class ModuleConcatenationPlugin {
146
149
  chunkGraph,
147
150
  moduleGraph
148
151
  };
152
+ const deferEnabled = compilation.options.experiments.deferImport;
149
153
  logger.time("select relevant modules");
150
154
  for (const module of modules) {
151
155
  let canBeRoot = true;
@@ -179,7 +183,7 @@ class ModuleConcatenationPlugin {
179
183
  const exportsInfo = moduleGraph.getExportsInfo(module);
180
184
  const relevantExports = exportsInfo.getRelevantExports(undefined);
181
185
  const unknownReexports = relevantExports.filter(
182
- exportInfo =>
186
+ (exportInfo) =>
183
187
  exportInfo.isReexport() && !exportInfo.getTarget(moduleGraph)
184
188
  );
185
189
  if (unknownReexports.length > 0) {
@@ -187,7 +191,7 @@ class ModuleConcatenationPlugin {
187
191
  module,
188
192
  `Reexports in this module do not have a static target (${Array.from(
189
193
  unknownReexports,
190
- exportInfo =>
194
+ (exportInfo) =>
191
195
  `${
192
196
  exportInfo.name || "other exports"
193
197
  }: ${exportInfo.getUsedInfo()}`
@@ -198,14 +202,14 @@ class ModuleConcatenationPlugin {
198
202
 
199
203
  // Root modules must have a static list of exports
200
204
  const unknownProvidedExports = relevantExports.filter(
201
- exportInfo => exportInfo.provided !== true
205
+ (exportInfo) => exportInfo.provided !== true
202
206
  );
203
207
  if (unknownProvidedExports.length > 0) {
204
208
  setBailoutReason(
205
209
  module,
206
210
  `List of module exports is dynamic (${Array.from(
207
211
  unknownProvidedExports,
208
- exportInfo =>
212
+ (exportInfo) =>
209
213
  `${
210
214
  exportInfo.name || "other exports"
211
215
  }: ${exportInfo.getProvidedInfo()} and ${exportInfo.getUsedInfo()}`
@@ -220,6 +224,11 @@ class ModuleConcatenationPlugin {
220
224
  canBeInner = false;
221
225
  }
222
226
 
227
+ if (deferEnabled && moduleGraph.isDeferred(module)) {
228
+ setInnerBailoutReason(module, "Module is deferred");
229
+ canBeInner = false;
230
+ }
231
+
223
232
  if (canBeRoot) relevantModules.push(module);
224
233
  if (canBeInner) possibleInners.add(module);
225
234
  }
@@ -269,7 +278,7 @@ class ModuleConcatenationPlugin {
269
278
  chunkRuntime = mergeRuntimeOwned(chunkRuntime, r);
270
279
  }
271
280
  const exportsInfo = moduleGraph.getExportsInfo(currentRoot);
272
- const filteredRuntime = filterRuntime(chunkRuntime, r =>
281
+ const filteredRuntime = filterRuntime(chunkRuntime, (r) =>
273
282
  exportsInfo.isModuleUsed(r)
274
283
  );
275
284
  const activeRuntime =
@@ -381,7 +390,6 @@ class ModuleConcatenationPlugin {
381
390
  }
382
391
 
383
392
  // Create a new ConcatenatedModule
384
- ConcatenatedModule.getCompilationHooks(compilation);
385
393
  const newModule = ConcatenatedModule.create(
386
394
  rootModule,
387
395
  modules,
@@ -393,13 +401,13 @@ class ModuleConcatenationPlugin {
393
401
 
394
402
  const build = () => {
395
403
  newModule.build(
396
- compiler.options,
404
+ compilation.options,
397
405
  compilation,
398
- /** @type {TODO} */
406
+ /** @type {EXPECTED_ANY} */
399
407
  (null),
400
- /** @type {TODO} */
408
+ /** @type {EXPECTED_ANY} */
401
409
  (null),
402
- err => {
410
+ (err) => {
403
411
  if (err) {
404
412
  if (!err.module) {
405
413
  err.module = newModule;
@@ -433,7 +441,7 @@ class ModuleConcatenationPlugin {
433
441
  moduleGraph.copyOutgoingModuleConnections(
434
442
  m,
435
443
  newModule,
436
- c =>
444
+ (c) =>
437
445
  c.originModule === m &&
438
446
  !(
439
447
  c.dependency instanceof HarmonyImportDependency &&
@@ -452,7 +460,7 @@ class ModuleConcatenationPlugin {
452
460
  chunkGraph.disconnectChunkAndModule(chunk, m);
453
461
  } else {
454
462
  const newSourceTypes = new Set(sourceTypes);
455
- newSourceTypes.delete("javascript");
463
+ newSourceTypes.delete(JAVASCRIPT_TYPE);
456
464
  chunkGraph.setChunkModuleSourceTypes(
457
465
  chunk,
458
466
  m,
@@ -469,14 +477,18 @@ class ModuleConcatenationPlugin {
469
477
  // remove module from chunk
470
478
  chunkGraph.replaceModule(rootModule, newModule);
471
479
  // replace module references with the concatenated module
472
- moduleGraph.moveModuleConnections(rootModule, newModule, c => {
473
- const otherModule =
474
- c.module === rootModule ? c.originModule : c.module;
475
- const innerConnection =
476
- c.dependency instanceof HarmonyImportDependency &&
477
- modules.has(/** @type {Module} */ (otherModule));
478
- return !innerConnection;
479
- });
480
+ moduleGraph.moveModuleConnections(
481
+ rootModule,
482
+ newModule,
483
+ (c) => {
484
+ const otherModule =
485
+ c.module === rootModule ? c.originModule : c.module;
486
+ const innerConnection =
487
+ c.dependency instanceof HarmonyImportDependency &&
488
+ modules.has(/** @type {Module} */ (otherModule));
489
+ return !innerConnection;
490
+ }
491
+ );
480
492
  // add concatenated module to the compilation
481
493
  compilation.modules.add(newModule);
482
494
 
@@ -485,7 +497,7 @@ class ModuleConcatenationPlugin {
485
497
 
486
498
  build();
487
499
  },
488
- err => {
500
+ (err) => {
489
501
  logger.timeEnd("create concatenated modules");
490
502
  process.nextTick(callback.bind(null, err));
491
503
  }
@@ -524,7 +536,7 @@ class ModuleConcatenationPlugin {
524
536
  );
525
537
 
526
538
  if (
527
- importedNames.every(i =>
539
+ importedNames.every((i) =>
528
540
  Array.isArray(i) ? i.length > 0 : i.name.length > 0
529
541
  ) ||
530
542
  Array.isArray(moduleGraph.getProvidedExports(module))
@@ -543,11 +555,11 @@ class ModuleConcatenationPlugin {
543
555
  * @param {RuntimeSpec} activeRuntime the runtime scope of the root module
544
556
  * @param {Set<Module>} possibleModules modules that are candidates
545
557
  * @param {Set<Module>} candidates list of potential candidates (will be added to)
546
- * @param {Map<Module, Module | function(RequestShortener): string>} failureCache cache for problematic modules to be more performant
558
+ * @param {Map<Module, Module | ((requestShortener: RequestShortener) => string)>} failureCache cache for problematic modules to be more performant
547
559
  * @param {ChunkGraph} chunkGraph the chunk graph
548
560
  * @param {boolean} avoidMutateOnFailure avoid mutating the config when adding fails
549
561
  * @param {Statistics} statistics gathering metrics
550
- * @returns {null | Module | function(RequestShortener): string} the problematic module
562
+ * @returns {null | Module | ((requestShortener: RequestShortener) => string)} the problematic module
551
563
  */
552
564
  _tryToAdd(
553
565
  compilation,
@@ -582,25 +594,27 @@ class ModuleConcatenationPlugin {
582
594
  }
583
595
 
584
596
  // Module must be in the correct chunks
585
- const missingChunks = Array.from(
586
- chunkGraph.getModuleChunksIterable(config.rootModule)
587
- ).filter(chunk => !chunkGraph.isModuleInChunk(module, chunk));
597
+ const missingChunks = [
598
+ ...chunkGraph.getModuleChunksIterable(config.rootModule)
599
+ ].filter((chunk) => !chunkGraph.isModuleInChunk(module, chunk));
588
600
  if (missingChunks.length > 0) {
589
601
  /**
590
602
  * @param {RequestShortener} requestShortener request shortener
591
603
  * @returns {string} problem description
592
604
  */
593
- const problem = requestShortener => {
594
- const missingChunksList = Array.from(
595
- new Set(missingChunks.map(chunk => chunk.name || "unnamed chunk(s)"))
596
- ).sort();
597
- const chunks = Array.from(
598
- new Set(
599
- Array.from(chunkGraph.getModuleChunksIterable(module)).map(
600
- chunk => chunk.name || "unnamed chunk(s)"
605
+ const problem = (requestShortener) => {
606
+ const missingChunksList = [
607
+ ...new Set(
608
+ missingChunks.map((chunk) => chunk.name || "unnamed chunk(s)")
609
+ )
610
+ ].sort();
611
+ const chunks = [
612
+ ...new Set(
613
+ [...chunkGraph.getModuleChunksIterable(module)].map(
614
+ (chunk) => chunk.name || "unnamed chunk(s)"
601
615
  )
602
616
  )
603
- ).sort();
617
+ ].sort();
604
618
  return `Module ${module.readableIdentifier(
605
619
  requestShortener
606
620
  )} is not in the same chunk(s) (expected in chunk(s) ${missingChunksList.join(
@@ -621,7 +635,7 @@ class ModuleConcatenationPlugin {
621
635
  incomingConnections.get(null) || incomingConnections.get(undefined);
622
636
  if (incomingConnectionsFromNonModules) {
623
637
  const activeNonModulesConnections =
624
- incomingConnectionsFromNonModules.filter(connection =>
638
+ incomingConnectionsFromNonModules.filter((connection) =>
625
639
  // We are not interested in inactive connections
626
640
  // or connections without dependency
627
641
  connection.isActive(runtime)
@@ -631,11 +645,13 @@ class ModuleConcatenationPlugin {
631
645
  * @param {RequestShortener} requestShortener request shortener
632
646
  * @returns {string} problem description
633
647
  */
634
- const problem = requestShortener => {
648
+ const problem = (requestShortener) => {
635
649
  const importingExplanations = new Set(
636
- activeNonModulesConnections.map(c => c.explanation).filter(Boolean)
650
+ activeNonModulesConnections
651
+ .map((c) => c.explanation)
652
+ .filter(Boolean)
637
653
  );
638
- const explanations = Array.from(importingExplanations).sort();
654
+ const explanations = [...importingExplanations].sort();
639
655
  return `Module ${module.readableIdentifier(
640
656
  requestShortener
641
657
  )} is referenced ${
@@ -650,7 +666,7 @@ class ModuleConcatenationPlugin {
650
666
  }
651
667
  }
652
668
 
653
- /** @type {Map<Module, readonly ModuleGraph.ModuleGraphConnection[]>} */
669
+ /** @type {Map<Module, ReadonlyArray<ModuleGraph.ModuleGraphConnection>>} */
654
670
  const incomingConnectionsFromModules = new Map();
655
671
  for (const [originModule, connections] of incomingConnections) {
656
672
  if (originModule) {
@@ -666,18 +682,19 @@ class ModuleConcatenationPlugin {
666
682
  if (!intersectRuntime(runtime, originRuntime)) continue;
667
683
 
668
684
  // We are not interested in inactive connections
669
- const activeConnections = connections.filter(connection =>
685
+ const activeConnections = connections.filter((connection) =>
670
686
  connection.isActive(runtime)
671
687
  );
672
- if (activeConnections.length > 0)
688
+ if (activeConnections.length > 0) {
673
689
  incomingConnectionsFromModules.set(originModule, activeConnections);
690
+ }
674
691
  }
675
692
  }
676
693
 
677
- const incomingModules = Array.from(incomingConnectionsFromModules.keys());
694
+ const incomingModules = [...incomingConnectionsFromModules.keys()];
678
695
 
679
696
  // Module must be in the same chunks like the referencing module
680
- const otherChunkModules = incomingModules.filter(originModule => {
697
+ const otherChunkModules = incomingModules.filter((originModule) => {
681
698
  for (const chunk of chunkGraph.getModuleChunksIterable(
682
699
  config.rootModule
683
700
  )) {
@@ -692,9 +709,9 @@ class ModuleConcatenationPlugin {
692
709
  * @param {RequestShortener} requestShortener request shortener
693
710
  * @returns {string} problem description
694
711
  */
695
- const problem = requestShortener => {
712
+ const problem = (requestShortener) => {
696
713
  const names = otherChunkModules
697
- .map(m => m.readableIdentifier(requestShortener))
714
+ .map((m) => m.readableIdentifier(requestShortener))
698
715
  .sort();
699
716
  return `Module ${module.readableIdentifier(
700
717
  requestShortener
@@ -707,35 +724,36 @@ class ModuleConcatenationPlugin {
707
724
  return problem;
708
725
  }
709
726
 
710
- /** @type {Map<Module, readonly ModuleGraph.ModuleGraphConnection[]>} */
727
+ /** @type {Map<Module, ReadonlyArray<ModuleGraph.ModuleGraphConnection>>} */
711
728
  const nonHarmonyConnections = new Map();
712
729
  for (const [originModule, connections] of incomingConnectionsFromModules) {
713
730
  const selected = connections.filter(
714
- connection =>
731
+ (connection) =>
715
732
  !connection.dependency ||
716
733
  !(connection.dependency instanceof HarmonyImportDependency)
717
734
  );
718
- if (selected.length > 0)
735
+ if (selected.length > 0) {
719
736
  nonHarmonyConnections.set(originModule, connections);
737
+ }
720
738
  }
721
739
  if (nonHarmonyConnections.size > 0) {
722
740
  /**
723
741
  * @param {RequestShortener} requestShortener request shortener
724
742
  * @returns {string} problem description
725
743
  */
726
- const problem = requestShortener => {
727
- const names = Array.from(nonHarmonyConnections)
744
+ const problem = (requestShortener) => {
745
+ const names = [...nonHarmonyConnections]
728
746
  .map(
729
747
  ([originModule, connections]) =>
730
748
  `${originModule.readableIdentifier(
731
749
  requestShortener
732
- )} (referenced with ${Array.from(
733
- new Set(
750
+ )} (referenced with ${[
751
+ ...new Set(
734
752
  connections
735
- .map(c => c.dependency && c.dependency.type)
753
+ .map((c) => c.dependency && c.dependency.type)
736
754
  .filter(Boolean)
737
755
  )
738
- )
756
+ ]
739
757
  .sort()
740
758
  .join(", ")})`
741
759
  )
@@ -762,7 +780,7 @@ class ModuleConcatenationPlugin {
762
780
  /** @type {false | RuntimeSpec} */
763
781
  let currentRuntimeCondition = false;
764
782
  for (const connection of connections) {
765
- const runtimeCondition = filterRuntime(runtime, runtime =>
783
+ const runtimeCondition = filterRuntime(runtime, (runtime) =>
766
784
  connection.isTargetActive(runtime)
767
785
  );
768
786
  if (runtimeCondition === false) continue;
@@ -784,7 +802,7 @@ class ModuleConcatenationPlugin {
784
802
  * @param {RequestShortener} requestShortener request shortener
785
803
  * @returns {string} problem description
786
804
  */
787
- const problem = requestShortener =>
805
+ const problem = (requestShortener) =>
788
806
  `Module ${module.readableIdentifier(
789
807
  requestShortener
790
808
  )} is runtime-dependent referenced by these modules: ${Array.from(
@@ -846,6 +864,9 @@ class ModuleConcatenationPlugin {
846
864
  }
847
865
  }
848
866
 
867
+ /** @typedef {Module | ((requestShortener: RequestShortener) => string)} Problem */
868
+ /** @typedef {Map<Module, Problem>} Warnings */
869
+
849
870
  class ConcatConfiguration {
850
871
  /**
851
872
  * @param {Module} rootModule the root module
@@ -857,7 +878,7 @@ class ConcatConfiguration {
857
878
  /** @type {Set<Module>} */
858
879
  this.modules = new Set();
859
880
  this.modules.add(rootModule);
860
- /** @type {Map<Module, Module | function(RequestShortener): string>} */
881
+ /** @type {Warnings} */
861
882
  this.warnings = new Map();
862
883
  }
863
884
 
@@ -882,18 +903,18 @@ class ConcatConfiguration {
882
903
 
883
904
  /**
884
905
  * @param {Module} module the module
885
- * @param {Module | function(RequestShortener): string} problem the problem
906
+ * @param {Problem} problem the problem
886
907
  */
887
908
  addWarning(module, problem) {
888
909
  this.warnings.set(module, problem);
889
910
  }
890
911
 
891
912
  /**
892
- * @returns {Map<Module, Module | function(RequestShortener): string>} warnings
913
+ * @returns {Warnings} warnings
893
914
  */
894
915
  getWarningsSorted() {
895
916
  return new Map(
896
- Array.from(this.warnings).sort((a, b) => {
917
+ [...this.warnings].sort((a, b) => {
897
918
  const ai = a[0].identifier();
898
919
  const bi = b[0].identifier();
899
920
  if (ai < bi) return -1;