webpack 5.106.1 → 5.107.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 (600) hide show
  1. package/README.md +2 -2
  2. package/lib/APIPlugin.js +4 -2
  3. package/lib/AsyncDependenciesBlock.js +3 -0
  4. package/lib/AutomaticPrefetchPlugin.js +6 -1
  5. package/lib/BannerPlugin.js +10 -1
  6. package/lib/Cache.js +27 -5
  7. package/lib/CacheFacade.js +26 -0
  8. package/lib/Chunk.js +46 -0
  9. package/lib/ChunkGraph.js +111 -0
  10. package/lib/ChunkGroup.js +57 -13
  11. package/lib/ChunkTemplate.js +9 -0
  12. package/lib/CleanPlugin.js +14 -1
  13. package/lib/CodeGenerationResults.js +19 -0
  14. package/lib/CompatibilityPlugin.js +23 -8
  15. package/lib/Compilation.js +161 -27
  16. package/lib/Compiler.js +41 -17
  17. package/lib/ConcatenationScope.js +24 -1
  18. package/lib/ConditionalInitFragment.js +6 -0
  19. package/lib/ConstPlugin.js +4 -1
  20. package/lib/ContextExclusionPlugin.js +2 -1
  21. package/lib/ContextModule.js +14 -2
  22. package/lib/ContextModuleFactory.js +10 -0
  23. package/lib/ContextReplacementPlugin.js +4 -1
  24. package/lib/DefinePlugin.js +22 -9
  25. package/lib/DependenciesBlock.js +6 -1
  26. package/lib/Dependency.js +48 -4
  27. package/lib/DependencyTemplate.js +7 -1
  28. package/lib/DependencyTemplates.js +4 -0
  29. package/lib/DotenvPlugin.js +3 -0
  30. package/lib/DynamicEntryPlugin.js +3 -1
  31. package/lib/EntryOptionPlugin.js +3 -0
  32. package/lib/EntryPlugin.js +2 -1
  33. package/lib/Entrypoint.js +4 -0
  34. package/lib/EnvironmentPlugin.js +3 -2
  35. package/lib/ErrorHelpers.js +7 -0
  36. package/lib/EvalDevToolModulePlugin.js +3 -1
  37. package/lib/EvalSourceMapDevToolPlugin.js +11 -10
  38. package/lib/ExportsInfo.js +56 -2
  39. package/lib/ExportsInfoApiPlugin.js +2 -1
  40. package/lib/ExternalModule.js +114 -15
  41. package/lib/ExternalModuleFactoryPlugin.js +15 -0
  42. package/lib/ExternalsPlugin.js +2 -1
  43. package/lib/FileSystemInfo.js +291 -71
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
  45. package/lib/FlagDependencyExportsPlugin.js +4 -1
  46. package/lib/FlagDependencyUsagePlugin.js +5 -1
  47. package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
  48. package/lib/Generator.js +16 -3
  49. package/lib/HotModuleReplacementPlugin.js +35 -9
  50. package/lib/IgnorePlugin.js +4 -2
  51. package/lib/IgnoreWarningsPlugin.js +2 -1
  52. package/lib/InitFragment.js +10 -0
  53. package/lib/JavascriptMetaInfoPlugin.js +2 -1
  54. package/lib/LibraryTemplatePlugin.js +2 -1
  55. package/lib/LoaderOptionsPlugin.js +3 -1
  56. package/lib/LoaderTargetPlugin.js +2 -1
  57. package/lib/MainTemplate.js +15 -0
  58. package/lib/ManifestPlugin.js +9 -2
  59. package/lib/Module.js +101 -19
  60. package/lib/ModuleFactory.js +6 -1
  61. package/lib/ModuleFilenameHelpers.js +3 -0
  62. package/lib/ModuleGraph.js +66 -0
  63. package/lib/ModuleGraphConnection.js +9 -0
  64. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  65. package/lib/ModuleSourceTypeConstants.js +32 -1
  66. package/lib/ModuleTemplate.js +8 -0
  67. package/lib/ModuleTypeConstants.js +12 -3
  68. package/lib/MultiCompiler.js +30 -2
  69. package/lib/MultiStats.js +8 -0
  70. package/lib/MultiWatching.js +3 -0
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +11 -2
  73. package/lib/NormalModule.js +43 -33
  74. package/lib/NormalModuleFactory.js +35 -2
  75. package/lib/NormalModuleReplacementPlugin.js +1 -1
  76. package/lib/NullFactory.js +1 -0
  77. package/lib/OptionsApply.js +1 -0
  78. package/lib/Parser.js +3 -1
  79. package/lib/PlatformPlugin.js +2 -1
  80. package/lib/PrefetchPlugin.js +2 -1
  81. package/lib/ProgressPlugin.js +158 -68
  82. package/lib/ProvidePlugin.js +3 -1
  83. package/lib/RawModule.js +12 -0
  84. package/lib/RecordIdsPlugin.js +8 -0
  85. package/lib/RequestShortener.js +8 -0
  86. package/lib/ResolverFactory.js +5 -0
  87. package/lib/RuntimeGlobals.js +6 -5
  88. package/lib/RuntimeModule.js +22 -7
  89. package/lib/RuntimePlugin.js +13 -0
  90. package/lib/RuntimeTemplate.js +35 -1
  91. package/lib/SelfModuleFactory.js +2 -0
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  93. package/lib/SourceMapDevToolPlugin.js +3 -1
  94. package/lib/Stats.js +5 -0
  95. package/lib/Template.js +20 -0
  96. package/lib/TemplatedPathPlugin.js +10 -3
  97. package/lib/UseStrictPlugin.js +2 -1
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
  99. package/lib/WarnDeprecatedOptionPlugin.js +2 -2
  100. package/lib/WarnNoModeSetPlugin.js +17 -2
  101. package/lib/WatchIgnorePlugin.js +4 -1
  102. package/lib/Watching.js +16 -3
  103. package/lib/WebpackError.js +3 -74
  104. package/lib/WebpackIsIncludedPlugin.js +3 -1
  105. package/lib/WebpackOptionsApply.js +14 -1
  106. package/lib/WebpackOptionsDefaulter.js +1 -0
  107. package/lib/asset/AssetBytesGenerator.js +12 -2
  108. package/lib/asset/AssetBytesParser.js +1 -0
  109. package/lib/asset/AssetGenerator.js +42 -10
  110. package/lib/asset/AssetModulesPlugin.js +7 -2
  111. package/lib/asset/AssetParser.js +2 -0
  112. package/lib/asset/AssetSourceGenerator.js +12 -2
  113. package/lib/asset/AssetSourceParser.js +1 -0
  114. package/lib/asset/RawDataUrlModule.js +11 -0
  115. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  118. package/lib/buildChunkGraph.js +19 -6
  119. package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
  120. package/lib/cache/AddManagedPathsPlugin.js +2 -1
  121. package/lib/cache/IdleFileCachePlugin.js +2 -1
  122. package/lib/cache/MemoryCachePlugin.js +1 -1
  123. package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
  124. package/lib/cache/PackFileCacheStrategy.js +33 -4
  125. package/lib/cache/ResolverCachePlugin.js +10 -1
  126. package/lib/cache/getLazyHashedEtag.js +4 -0
  127. package/lib/cache/mergeEtags.js +2 -0
  128. package/lib/cli.js +33 -1
  129. package/lib/config/browserslistTargetHandler.js +2 -0
  130. package/lib/config/defaults.js +232 -12
  131. package/lib/config/normalization.js +15 -1
  132. package/lib/config/target.js +11 -0
  133. package/lib/container/ContainerEntryDependency.js +2 -0
  134. package/lib/container/ContainerEntryModule.js +12 -0
  135. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  136. package/lib/container/ContainerExposedDependency.js +4 -0
  137. package/lib/container/ContainerPlugin.js +2 -1
  138. package/lib/container/ContainerReferencePlugin.js +2 -1
  139. package/lib/container/FallbackDependency.js +4 -0
  140. package/lib/container/FallbackItemDependency.js +1 -0
  141. package/lib/container/FallbackModule.js +12 -0
  142. package/lib/container/FallbackModuleFactory.js +1 -0
  143. package/lib/container/ModuleFederationPlugin.js +3 -1
  144. package/lib/container/RemoteModule.js +13 -0
  145. package/lib/container/RemoteRuntimeModule.js +1 -0
  146. package/lib/container/RemoteToExternalDependency.js +1 -0
  147. package/lib/container/options.js +7 -0
  148. package/lib/css/CssGenerator.js +336 -100
  149. package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
  150. package/lib/css/CssLoadingRuntimeModule.js +23 -4
  151. package/lib/{CssModule.js → css/CssModule.js} +21 -15
  152. package/lib/css/CssModulesPlugin.js +235 -89
  153. package/lib/css/CssParser.js +616 -261
  154. package/lib/css/walkCssTokens.js +179 -2
  155. package/lib/debug/ProfilingPlugin.js +19 -1
  156. package/lib/dependencies/AMDDefineDependency.js +7 -0
  157. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
  158. package/lib/dependencies/AMDPlugin.js +4 -1
  159. package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
  160. package/lib/dependencies/AMDRequireContextDependency.js +3 -0
  161. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  162. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
  163. package/lib/dependencies/AMDRequireDependency.js +4 -0
  164. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  165. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  166. package/lib/dependencies/CachedConstDependency.js +6 -1
  167. package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
  168. package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
  169. package/lib/dependencies/CommonJsExportsDependency.js +4 -0
  170. package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
  171. package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
  172. package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
  173. package/lib/dependencies/CommonJsPlugin.js +4 -1
  174. package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
  175. package/lib/dependencies/CommonJsRequireDependency.js +70 -4
  176. package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
  177. package/lib/dependencies/ConstDependency.js +6 -1
  178. package/lib/dependencies/ContextDependency.js +9 -2
  179. package/lib/dependencies/ContextDependencyHelpers.js +4 -1
  180. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  181. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  182. package/lib/dependencies/ContextElementDependency.js +4 -0
  183. package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
  184. package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
  185. package/lib/dependencies/CriticalDependencyWarning.js +2 -1
  186. package/lib/dependencies/CssIcssExportDependency.js +339 -66
  187. package/lib/dependencies/CssIcssImportDependency.js +53 -8
  188. package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
  189. package/lib/dependencies/CssImportDependency.js +12 -0
  190. package/lib/dependencies/CssUrlDependency.js +32 -0
  191. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  192. package/lib/dependencies/DllEntryDependency.js +3 -0
  193. package/lib/dependencies/DynamicExports.js +5 -0
  194. package/lib/dependencies/EntryDependency.js +1 -0
  195. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  196. package/lib/dependencies/ExternalModuleDependency.js +5 -0
  197. package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
  198. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
  199. package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
  200. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  201. package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
  202. package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
  203. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
  204. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  205. package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
  206. package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
  207. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
  208. package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
  209. package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
  210. package/lib/dependencies/HarmonyExports.js +2 -0
  211. package/lib/dependencies/HarmonyImportDependency.js +21 -2
  212. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
  213. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
  214. package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
  215. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
  216. package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
  217. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
  218. package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
  219. package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
  220. package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
  221. package/lib/dependencies/HtmlSourceDependency.js +127 -0
  222. package/lib/dependencies/ImportContextDependency.js +4 -0
  223. package/lib/dependencies/ImportDependency.js +5 -0
  224. package/lib/dependencies/ImportEagerDependency.js +2 -0
  225. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  226. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
  227. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  228. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  229. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  230. package/lib/dependencies/ImportMetaPlugin.js +6 -0
  231. package/lib/dependencies/ImportParserPlugin.js +9 -2
  232. package/lib/dependencies/ImportPhase.js +7 -3
  233. package/lib/dependencies/ImportPlugin.js +2 -1
  234. package/lib/dependencies/ImportWeakDependency.js +2 -0
  235. package/lib/dependencies/JsonExportsDependency.js +6 -1
  236. package/lib/dependencies/LoaderDependency.js +2 -0
  237. package/lib/dependencies/LoaderImportDependency.js +2 -0
  238. package/lib/dependencies/LoaderPlugin.js +4 -1
  239. package/lib/dependencies/LocalModule.js +4 -0
  240. package/lib/dependencies/LocalModuleDependency.js +4 -0
  241. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  242. package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
  243. package/lib/dependencies/ModuleDependency.js +7 -0
  244. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  245. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  246. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  247. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  248. package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
  249. package/lib/dependencies/NullDependency.js +2 -0
  250. package/lib/dependencies/PrefetchDependency.js +1 -0
  251. package/lib/dependencies/ProvidedDependency.js +6 -1
  252. package/lib/dependencies/PureExpressionDependency.js +7 -1
  253. package/lib/dependencies/RequireContextDependency.js +1 -0
  254. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
  255. package/lib/dependencies/RequireContextPlugin.js +2 -1
  256. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  257. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
  258. package/lib/dependencies/RequireEnsureDependency.js +4 -0
  259. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  260. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  261. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  262. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  263. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
  264. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  265. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  266. package/lib/dependencies/RequireResolveContextDependency.js +3 -0
  267. package/lib/dependencies/RequireResolveDependency.js +1 -0
  268. package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
  269. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
  270. package/lib/dependencies/StaticExportsDependency.js +3 -0
  271. package/lib/dependencies/SystemPlugin.js +5 -2
  272. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  273. package/lib/dependencies/URLContextDependency.js +3 -0
  274. package/lib/dependencies/URLDependency.js +6 -0
  275. package/lib/dependencies/URLPlugin.js +2 -0
  276. package/lib/dependencies/UnsupportedDependency.js +4 -0
  277. package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
  278. package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
  279. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
  280. package/lib/dependencies/WorkerDependency.js +6 -1
  281. package/lib/dependencies/WorkerPlugin.js +11 -3
  282. package/lib/dependencies/getFunctionExpression.js +1 -0
  283. package/lib/dependencies/processExportInfo.js +1 -0
  284. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
  285. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
  286. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
  287. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
  288. package/lib/{DllModule.js → dll/DllModule.js} +35 -24
  289. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  290. package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
  291. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
  292. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
  293. package/lib/electron/ElectronTargetPlugin.js +2 -1
  294. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  295. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  296. package/lib/errors/BuildCycleError.js +1 -1
  297. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  298. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  299. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  300. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
  301. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
  302. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
  303. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
  304. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
  305. package/lib/errors/JSONParseError.js +114 -0
  306. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
  307. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
  308. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
  309. package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
  310. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
  311. package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
  312. package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
  313. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
  314. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
  315. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
  316. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
  317. package/lib/errors/NonErrorEmittedError.js +28 -0
  318. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
  319. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  320. package/lib/errors/WebpackError.js +84 -0
  321. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  322. package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
  323. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
  324. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  326. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  327. package/lib/hmr/LazyCompilationPlugin.js +20 -1
  328. package/lib/hmr/lazyCompilationBackend.js +2 -0
  329. package/lib/html/HtmlGenerator.js +379 -0
  330. package/lib/html/HtmlModulesPlugin.js +433 -0
  331. package/lib/html/HtmlParser.js +1489 -0
  332. package/lib/html/walkHtmlTokens.js +2733 -0
  333. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  334. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  335. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  336. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  337. package/lib/ids/IdHelpers.js +22 -1
  338. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  339. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  340. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  341. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  342. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  343. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  344. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  345. package/lib/index.js +39 -15
  346. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
  347. package/lib/javascript/BasicEvaluatedExpression.js +4 -2
  348. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  349. package/lib/javascript/ChunkHelpers.js +1 -0
  350. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  351. package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
  352. package/lib/javascript/JavascriptGenerator.js +10 -0
  353. package/lib/javascript/JavascriptModulesPlugin.js +112 -9
  354. package/lib/javascript/JavascriptParser.js +360 -16
  355. package/lib/javascript/JavascriptParserHelpers.js +7 -1
  356. package/lib/javascript/StartupHelpers.js +5 -0
  357. package/lib/json/JsonData.js +5 -0
  358. package/lib/json/JsonGenerator.js +21 -0
  359. package/lib/json/JsonModulesPlugin.js +1 -1
  360. package/lib/json/JsonParser.js +14 -25
  361. package/lib/library/AbstractLibraryPlugin.js +17 -2
  362. package/lib/library/AmdLibraryPlugin.js +8 -0
  363. package/lib/library/AssignLibraryPlugin.js +16 -0
  364. package/lib/library/EnableLibraryPlugin.js +8 -2
  365. package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
  366. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
  367. package/lib/library/JsonpLibraryPlugin.js +8 -0
  368. package/lib/library/ModuleLibraryPlugin.js +86 -1
  369. package/lib/library/SystemLibraryPlugin.js +8 -0
  370. package/lib/library/UmdLibraryPlugin.js +16 -0
  371. package/lib/logging/Logger.js +17 -0
  372. package/lib/logging/createConsoleLogger.js +7 -0
  373. package/lib/logging/runtime.js +2 -0
  374. package/lib/logging/truncateArgs.js +2 -0
  375. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  376. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  377. package/lib/node/NodeSourcePlugin.js +1 -1
  378. package/lib/node/NodeTargetPlugin.js +2 -1
  379. package/lib/node/NodeTemplatePlugin.js +3 -1
  380. package/lib/node/NodeWatchFileSystem.js +2 -0
  381. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
  382. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
  383. package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
  384. package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
  385. package/lib/node/nodeConsole.js +116 -64
  386. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  387. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  388. package/lib/optimize/ConcatenatedModule.js +62 -6
  389. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  390. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
  391. package/lib/optimize/InnerGraph.js +16 -1
  392. package/lib/optimize/InnerGraphPlugin.js +14 -2
  393. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  394. package/lib/optimize/MangleExportsPlugin.js +5 -1
  395. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  396. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  397. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  398. package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
  399. package/lib/optimize/RealContentHashPlugin.js +104 -26
  400. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  401. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  402. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  403. package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
  404. package/lib/optimize/SplitChunksPlugin.js +50 -2
  405. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  406. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  407. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  408. package/lib/performance/SizeLimitsPlugin.js +8 -2
  409. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  410. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
  411. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  412. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  413. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
  414. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  415. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  416. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  417. package/lib/rules/RuleSetCompiler.js +18 -0
  418. package/lib/rules/UseEffectRulePlugin.js +10 -3
  419. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
  420. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
  421. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  422. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  423. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
  424. package/lib/runtime/CompatRuntimeModule.js +2 -0
  425. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
  426. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  427. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  428. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
  429. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  430. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
  431. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  432. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  433. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
  434. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  435. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
  436. package/lib/runtime/HelperRuntimeModule.js +5 -0
  437. package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
  438. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
  439. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
  440. package/lib/runtime/NonceRuntimeModule.js +1 -0
  441. package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
  442. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  443. package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
  444. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  445. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
  446. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  447. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
  448. package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
  449. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  450. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  451. package/lib/schemes/DataUriPlugin.js +14 -2
  452. package/lib/schemes/FileUriPlugin.js +1 -1
  453. package/lib/schemes/HttpUriPlugin.js +43 -1
  454. package/lib/schemes/VirtualUrlPlugin.js +7 -2
  455. package/lib/serialization/AggregateErrorSerializer.js +2 -0
  456. package/lib/serialization/ArraySerializer.js +2 -0
  457. package/lib/serialization/BinaryMiddleware.js +20 -1
  458. package/lib/serialization/DateObjectSerializer.js +2 -0
  459. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  460. package/lib/serialization/FileMiddleware.js +21 -0
  461. package/lib/serialization/MapObjectSerializer.js +2 -0
  462. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
  463. package/lib/serialization/ObjectMiddleware.js +23 -0
  464. package/lib/serialization/PlainObjectSerializer.js +7 -0
  465. package/lib/serialization/RegExpObjectSerializer.js +2 -0
  466. package/lib/serialization/Serializer.js +5 -0
  467. package/lib/serialization/SerializerMiddleware.js +14 -2
  468. package/lib/serialization/SetObjectSerializer.js +2 -0
  469. package/lib/serialization/SingleItemMiddleware.js +3 -0
  470. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  471. package/lib/sharing/ConsumeSharedModule.js +15 -0
  472. package/lib/sharing/ConsumeSharedPlugin.js +8 -3
  473. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
  474. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  475. package/lib/sharing/ProvideSharedDependency.js +4 -0
  476. package/lib/sharing/ProvideSharedModule.js +12 -1
  477. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  478. package/lib/sharing/ProvideSharedPlugin.js +5 -2
  479. package/lib/sharing/SharePlugin.js +2 -1
  480. package/lib/sharing/ShareRuntimeModule.js +1 -0
  481. package/lib/sharing/resolveMatchedConfigs.js +4 -1
  482. package/lib/sharing/utils.js +8 -0
  483. package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
  484. package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
  485. package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
  486. package/lib/stats/StatsFactory.js +13 -1
  487. package/lib/stats/StatsPrinter.js +7 -0
  488. package/lib/typescript/TypeScriptPlugin.js +210 -0
  489. package/lib/url/URLParserPlugin.js +8 -2
  490. package/lib/util/AppendOnlyStackedSet.js +15 -0
  491. package/lib/util/ArrayHelpers.js +1 -0
  492. package/lib/util/ArrayQueue.js +10 -5
  493. package/lib/util/AsyncQueue.js +22 -2
  494. package/lib/util/Hash.js +2 -2
  495. package/lib/util/IterableHelpers.js +3 -0
  496. package/lib/util/LazyBucketSortedSet.js +21 -0
  497. package/lib/util/LazySet.js +39 -0
  498. package/lib/util/LocConverter.js +53 -0
  499. package/lib/util/ParallelismFactorCalculator.js +1 -0
  500. package/lib/util/Queue.js +6 -3
  501. package/lib/util/Semaphore.js +14 -1
  502. package/lib/util/SetHelpers.js +3 -0
  503. package/lib/util/SortableSet.js +7 -1
  504. package/lib/util/StackedCacheMap.js +20 -3
  505. package/lib/util/StackedMap.js +45 -0
  506. package/lib/util/StringXor.js +1 -1
  507. package/lib/util/TupleQueue.js +7 -3
  508. package/lib/util/TupleSet.js +13 -0
  509. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  510. package/lib/util/WeakTupleMap.js +33 -0
  511. package/lib/util/binarySearchBounds.js +1 -0
  512. package/lib/util/cleverMerge.js +19 -2
  513. package/lib/util/comparators.js +34 -3
  514. package/lib/util/compileBooleanMatcher.js +9 -0
  515. package/lib/util/concatenate.js +9 -3
  516. package/lib/util/conventions.js +46 -1
  517. package/lib/util/createMappings.js +118 -0
  518. package/lib/util/dataURL.js +1 -0
  519. package/lib/util/deprecation.js +19 -0
  520. package/lib/util/deterministicGrouping.js +20 -0
  521. package/lib/util/extractSourceMap.js +1 -0
  522. package/lib/util/extractUrlAndGlobal.js +1 -0
  523. package/lib/util/findGraphRoots.js +5 -0
  524. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  525. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
  526. package/lib/util/fs.js +71 -8
  527. package/lib/util/generateDebugId.js +1 -0
  528. package/lib/util/hash/BatchedHash.js +1 -0
  529. package/lib/util/hash/BulkUpdateHash.js +1 -0
  530. package/lib/util/hash/hash-digest.js +8 -0
  531. package/lib/util/hash/md4.js +1 -1
  532. package/lib/util/hash/wasm-hash.js +5 -0
  533. package/lib/util/hash/xxhash64.js +1 -1
  534. package/lib/util/identifier.js +67 -0
  535. package/lib/util/internalSerializables.js +35 -19
  536. package/lib/util/magicComment.js +10 -6
  537. package/lib/util/makeSerializable.js +6 -0
  538. package/lib/util/memoize.js +2 -0
  539. package/lib/util/mimeTypes.js +176 -0
  540. package/lib/util/nonNumericOnlyHash.js +1 -0
  541. package/lib/util/parseJson.js +41 -0
  542. package/lib/util/processAsyncTree.js +8 -0
  543. package/lib/util/property.js +1 -0
  544. package/lib/util/registerExternalSerializer.js +20 -0
  545. package/lib/util/removeBOM.js +1 -0
  546. package/lib/util/runtime.js +32 -0
  547. package/lib/util/semver.js +15 -0
  548. package/lib/util/serialization.js +2 -0
  549. package/lib/util/smartGrouping.js +8 -0
  550. package/lib/util/source.js +23 -0
  551. package/lib/util/topologicalSort.js +69 -0
  552. package/lib/validateSchema.js +1 -0
  553. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  554. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
  555. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
  556. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  557. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
  558. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
  559. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
  560. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
  561. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
  562. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
  563. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
  564. package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
  565. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
  566. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  567. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
  568. package/lib/wasm-sync/WebAssemblyParser.js +2 -0
  569. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  570. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
  571. package/lib/web/FetchCompileWasmPlugin.js +13 -1
  572. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  573. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
  574. package/lib/web/JsonpTemplatePlugin.js +2 -1
  575. package/lib/webpack.js +13 -1
  576. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  577. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
  578. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  579. package/package.json +31 -31
  580. package/schemas/WebpackOptions.check.js +1 -1
  581. package/schemas/WebpackOptions.json +161 -57
  582. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  583. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  584. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  585. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  586. package/schemas/plugins/ProgressPlugin.json +22 -0
  587. package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
  588. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  589. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  590. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  591. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  592. package/types.d.ts +5325 -353
  593. package/lib/CaseSensitiveModulesWarning.js +0 -72
  594. package/lib/GraphHelpers.js +0 -46
  595. package/lib/NoModeWarning.js +0 -23
  596. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  597. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  598. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  599. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  600. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -7,10 +7,11 @@
7
7
 
8
8
  const asyncLib = require("neo-async");
9
9
  const ChunkGraph = require("../ChunkGraph");
10
+ const Dependency = require("../Dependency");
11
+ const Module = require("../Module");
10
12
  const ModuleGraph = require("../ModuleGraph");
11
13
  const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
12
14
  const { STAGE_DEFAULT } = require("../OptimizationStages");
13
- const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
14
15
  const { compareModulesByIdentifier } = require("../util/comparators");
15
16
  const {
16
17
  filterRuntime,
@@ -23,7 +24,6 @@ const ConcatenatedModule = require("./ConcatenatedModule");
23
24
 
24
25
  /** @typedef {import("../Compilation")} Compilation */
25
26
  /** @typedef {import("../Compiler")} Compiler */
26
- /** @typedef {import("../Module")} Module */
27
27
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
28
28
  /** @typedef {import("../RequestShortener")} RequestShortener */
29
29
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
@@ -31,6 +31,7 @@ const ConcatenatedModule = require("./ConcatenatedModule");
31
31
  /** @typedef {Module | ((requestShortener: RequestShortener) => string)} Problem */
32
32
 
33
33
  /**
34
+ * Defines the statistics type used by this module.
34
35
  * @typedef {object} Statistics
35
36
  * @property {number} cached
36
37
  * @property {number} alreadyInConfig
@@ -45,6 +46,7 @@ const ConcatenatedModule = require("./ConcatenatedModule");
45
46
  */
46
47
 
47
48
  /**
49
+ * Format bailout reason.
48
50
  * @param {string} msg message
49
51
  * @returns {string} formatted message
50
52
  */
@@ -54,7 +56,7 @@ const PLUGIN_NAME = "ModuleConcatenationPlugin";
54
56
 
55
57
  class ModuleConcatenationPlugin {
56
58
  /**
57
- * Apply the plugin
59
+ * Applies the plugin by registering its hooks on the compiler.
58
60
  * @param {Compiler} compiler the compiler instance
59
61
  * @returns {void}
60
62
  */
@@ -71,6 +73,7 @@ class ModuleConcatenationPlugin {
71
73
  const bailoutReasonMap = new Map();
72
74
 
73
75
  /**
76
+ * Sets bailout reason.
74
77
  * @param {Module} module the module
75
78
  * @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
76
79
  */
@@ -86,6 +89,7 @@ class ModuleConcatenationPlugin {
86
89
  };
87
90
 
88
91
  /**
92
+ * Sets inner bailout reason.
89
93
  * @param {Module} module the module
90
94
  * @param {string | ((requestShortener: RequestShortener) => string)} reason the reason
91
95
  */
@@ -94,6 +98,7 @@ class ModuleConcatenationPlugin {
94
98
  };
95
99
 
96
100
  /**
101
+ * Gets inner bailout reason.
97
102
  * @param {Module} module the module
98
103
  * @param {RequestShortener} requestShortener the request shortener
99
104
  * @returns {string | ((requestShortener: RequestShortener) => string) | undefined} the reason
@@ -105,6 +110,7 @@ class ModuleConcatenationPlugin {
105
110
  };
106
111
 
107
112
  /**
113
+ * Format bailout warning.
108
114
  * @param {Module} module the module
109
115
  * @param {Problem} problem the problem
110
116
  * @returns {(requestShortener: RequestShortener) => string} the reason
@@ -222,6 +228,12 @@ class ModuleConcatenationPlugin {
222
228
  canBeRoot = false;
223
229
  }
224
230
 
231
+ // TODO: ConcatenatedModule.getSourceTypes only javascript now
232
+ const basicTypes = Module.getSourceBasicTypes(module);
233
+ if (basicTypes.size !== 1 || !basicTypes.has(JAVASCRIPT_TYPE)) {
234
+ canBeRoot = false;
235
+ }
236
+
225
237
  // Module must not be an entry point
226
238
  if (chunkGraph.isEntryModule(module)) {
227
239
  setInnerBailoutReason(module, "Module is an entry point");
@@ -454,7 +466,8 @@ class ModuleConcatenationPlugin {
454
466
  (c) =>
455
467
  c.originModule === m &&
456
468
  !(
457
- c.dependency instanceof HarmonyImportDependency &&
469
+ c.dependency &&
470
+ Dependency.canConcatenate(c.dependency) &&
458
471
  modules.has(c.module)
459
472
  )
460
473
  );
@@ -497,7 +510,8 @@ class ModuleConcatenationPlugin {
497
510
  const otherModule =
498
511
  c.module === rootModule ? c.originModule : c.module;
499
512
  const innerConnection =
500
- c.dependency instanceof HarmonyImportDependency &&
513
+ c.dependency &&
514
+ Dependency.canConcatenate(c.dependency) &&
501
515
  modules.has(/** @type {Module} */ (otherModule));
502
516
  return !innerConnection;
503
517
  }
@@ -521,6 +535,7 @@ class ModuleConcatenationPlugin {
521
535
  }
522
536
 
523
537
  /**
538
+ * Returns the imported modules.
524
539
  * @param {Compilation} compilation the compilation
525
540
  * @param {Module} module the module to be added
526
541
  * @param {RuntimeSpec} runtime the runtime scope
@@ -531,8 +546,8 @@ class ModuleConcatenationPlugin {
531
546
  /** @type {Set<Module>} */
532
547
  const set = new Set();
533
548
  for (const dep of module.dependencies) {
534
- // Get reference info only for harmony Dependencies
535
- if (!(dep instanceof HarmonyImportDependency)) continue;
549
+ // Get reference info only for dependencies that support concatenation
550
+ if (!Dependency.canConcatenate(dep)) continue;
536
551
 
537
552
  const connection = moduleGraph.getConnection(dep);
538
553
  // Reference is valid and has a module
@@ -562,6 +577,7 @@ class ModuleConcatenationPlugin {
562
577
  }
563
578
 
564
579
  /**
580
+ * Returns the problematic module.
565
581
  * @param {Compilation} compilation webpack compilation
566
582
  * @param {ConcatConfiguration} config concat configuration (will be modified when added)
567
583
  * @param {Module} module the module to be added
@@ -613,6 +629,7 @@ class ModuleConcatenationPlugin {
613
629
  ].filter((chunk) => !chunkGraph.isModuleInChunk(module, chunk));
614
630
  if (missingChunks.length > 0) {
615
631
  /**
632
+ * Returns problem description.
616
633
  * @param {RequestShortener} requestShortener request shortener
617
634
  * @returns {string} problem description
618
635
  */
@@ -656,6 +673,7 @@ class ModuleConcatenationPlugin {
656
673
  );
657
674
  if (activeNonModulesConnections.length > 0) {
658
675
  /**
676
+ * Returns problem description.
659
677
  * @param {RequestShortener} requestShortener request shortener
660
678
  * @returns {string} problem description
661
679
  */
@@ -722,6 +740,7 @@ class ModuleConcatenationPlugin {
722
740
  });
723
741
  if (otherChunkModules.length > 0) {
724
742
  /**
743
+ * Returns problem description.
725
744
  * @param {RequestShortener} requestShortener request shortener
726
745
  * @returns {string} problem description
727
746
  */
@@ -746,7 +765,7 @@ class ModuleConcatenationPlugin {
746
765
  const selected = connections.filter(
747
766
  (connection) =>
748
767
  !connection.dependency ||
749
- !(connection.dependency instanceof HarmonyImportDependency)
768
+ !Dependency.canConcatenate(connection.dependency)
750
769
  );
751
770
  if (selected.length > 0) {
752
771
  nonHarmonyConnections.set(originModule, connections);
@@ -754,6 +773,7 @@ class ModuleConcatenationPlugin {
754
773
  }
755
774
  if (nonHarmonyConnections.size > 0) {
756
775
  /**
776
+ * Returns problem description.
757
777
  * @param {RequestShortener} requestShortener request shortener
758
778
  * @returns {string} problem description
759
779
  */
@@ -815,6 +835,7 @@ class ModuleConcatenationPlugin {
815
835
  }
816
836
  if (otherRuntimeConnections.length > 0) {
817
837
  /**
838
+ * Returns problem description.
818
839
  * @param {RequestShortener} requestShortener request shortener
819
840
  * @returns {string} problem description
820
841
  */
@@ -885,6 +906,7 @@ class ModuleConcatenationPlugin {
885
906
 
886
907
  class ConcatConfiguration {
887
908
  /**
909
+ * Creates an instance of ConcatConfiguration.
888
910
  * @param {Module} rootModule the root module
889
911
  * @param {RuntimeSpec} runtime the runtime
890
912
  */
@@ -901,6 +923,7 @@ class ConcatConfiguration {
901
923
  }
902
924
 
903
925
  /**
926
+ * Processes the provided module.
904
927
  * @param {Module} module the module
905
928
  */
906
929
  add(module) {
@@ -908,6 +931,7 @@ class ConcatConfiguration {
908
931
  }
909
932
 
910
933
  /**
934
+ * Returns true, when the module is in the module set.
911
935
  * @param {Module} module the module
912
936
  * @returns {boolean} true, when the module is in the module set
913
937
  */
@@ -920,6 +944,7 @@ class ConcatConfiguration {
920
944
  }
921
945
 
922
946
  /**
947
+ * Adds the provided module to the concat configuration.
923
948
  * @param {Module} module the module
924
949
  * @param {Problem} problem the problem
925
950
  */
@@ -928,6 +953,7 @@ class ConcatConfiguration {
928
953
  }
929
954
 
930
955
  /**
956
+ * Gets warnings sorted.
931
957
  * @returns {Warnings} warnings
932
958
  */
933
959
  getWarningsSorted() {
@@ -943,6 +969,7 @@ class ConcatConfiguration {
943
969
  }
944
970
 
945
971
  /**
972
+ * Returns modules as set.
946
973
  * @returns {Set<Module>} modules as set
947
974
  */
948
975
  getModules() {
@@ -954,6 +981,7 @@ class ConcatConfiguration {
954
981
  }
955
982
 
956
983
  /**
984
+ * Processes the provided snapshot.
957
985
  * @param {number} snapshot snapshot
958
986
  */
959
987
  rollback(snapshot) {
@@ -8,7 +8,7 @@
8
8
  const { SyncBailHook } = require("tapable");
9
9
  const { CachedSource, CompatSource, RawSource } = require("webpack-sources");
10
10
  const Compilation = require("../Compilation");
11
- const WebpackError = require("../WebpackError");
11
+ const WebpackError = require("../errors/WebpackError");
12
12
  const { compareSelect, compareStrings } = require("../util/comparators");
13
13
  const createHash = require("../util/createHash");
14
14
 
@@ -21,6 +21,7 @@ const createHash = require("../util/createHash");
21
21
  /** @typedef {typeof import("../util/Hash")} Hash */
22
22
 
23
23
  /**
24
+ * Defines the comparator type used by this module.
24
25
  * @template T
25
26
  * @typedef {import("../util/comparators").Comparator<T>} Comparator
26
27
  */
@@ -29,6 +30,7 @@ const createHash = require("../util/createHash");
29
30
  const EMPTY_SET = new Set();
30
31
 
31
32
  /**
33
+ * Adds the provided item or item to this object.
32
34
  * @template T
33
35
  * @param {T | T[]} itemOrItems item or items
34
36
  * @param {Set<T>} list list
@@ -44,23 +46,77 @@ const addToList = (itemOrItems, list) => {
44
46
  };
45
47
 
46
48
  /**
49
+ * Compares two non-empty buffer chunk arrays for byte-equality without
50
+ * allocating a concatenated buffer.
51
+ * @param {Buffer[]} a first chunk array
52
+ * @param {Buffer[]} b second chunk array
53
+ * @returns {boolean} true if the concatenations are byte-equal
54
+ */
55
+ const bufferArraysEqual = (a, b) => {
56
+ let aIdx = 0;
57
+ let aOff = 0;
58
+ let bIdx = 0;
59
+ let bOff = 0;
60
+ while (aIdx < a.length && bIdx < b.length) {
61
+ const aBuf = a[aIdx];
62
+ const bBuf = b[bIdx];
63
+ const len = Math.min(aBuf.length - aOff, bBuf.length - bOff);
64
+ if (aBuf.compare(bBuf, bOff, bOff + len, aOff, aOff + len) !== 0) {
65
+ return false;
66
+ }
67
+ aOff += len;
68
+ bOff += len;
69
+ if (aOff === aBuf.length) {
70
+ aIdx++;
71
+ aOff = 0;
72
+ }
73
+ if (bOff === bBuf.length) {
74
+ bIdx++;
75
+ bOff = 0;
76
+ }
77
+ }
78
+ return aIdx === a.length && bIdx === b.length;
79
+ };
80
+
81
+ /**
82
+ * Map sources to their buffer chunks and deduplicate by total byte content,
83
+ * grouping by total length first to avoid full comparisons.
47
84
  * @template T
48
85
  * @param {T[]} input list
49
- * @param {(item: T) => Buffer} fn map function
50
- * @returns {Buffer[]} buffers without duplicates
86
+ * @param {(item: T) => Source} fn map function returning a Source
87
+ * @returns {Buffer[][]} unique chunk arrays
51
88
  */
52
- const mapAndDeduplicateBuffers = (input, fn) => {
53
- // Buffer.equals compares size first so this should be efficient enough
54
- // If it becomes a performance problem we can use a map and group by size
55
- // instead of looping over all assets.
56
- /** @type {Buffer[]} */
89
+ const mapAndDeduplicateSourceBuffers = (input, fn) => {
90
+ /** @type {Map<number, Buffer[][]>} */
91
+ const bySize = new Map();
92
+ /** @type {Buffer[][]} */
57
93
  const result = [];
58
- outer: for (const value of input) {
59
- const buf = fn(value);
60
- for (const other of result) {
61
- if (buf.equals(other)) continue outer;
94
+ for (const value of input) {
95
+ const source = fn(value);
96
+ // TODO webpack 6: drop the `buffers` check, require webpack-sources >= 3.4
97
+ // and call `source.buffers()` unconditionally.
98
+ const chunks =
99
+ // TODO remove in webpack 6, this is protection against authors who directly use `webpack-sources` outdated version
100
+ typeof source.buffers === "function"
101
+ ? source.buffers()
102
+ : [source.buffer()];
103
+ let total = 0;
104
+ for (const c of chunks) total += c.length;
105
+ const sameSize = bySize.get(total);
106
+ if (sameSize) {
107
+ let duplicate = false;
108
+ for (const other of sameSize) {
109
+ if (bufferArraysEqual(chunks, other)) {
110
+ duplicate = true;
111
+ break;
112
+ }
113
+ }
114
+ if (duplicate) continue;
115
+ sameSize.push(chunks);
116
+ } else {
117
+ bySize.set(total, [chunks]);
62
118
  }
63
- result.push(buf);
119
+ result.push(chunks);
64
120
  }
65
121
  return result;
66
122
  };
@@ -76,6 +132,7 @@ const quoteMeta = (str) => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
76
132
  const cachedSourceMap = new WeakMap();
77
133
 
78
134
  /**
135
+ * Returns cached source.
79
136
  * @param {Source} source source
80
137
  * @returns {CachedSource} cached source
81
138
  */
@@ -93,6 +150,7 @@ const toCachedSource = (source) => {
93
150
  /** @typedef {Set<string>} Hashes */
94
151
 
95
152
  /**
153
+ * Defines the asset info for real content hash type used by this module.
96
154
  * @typedef {object} AssetInfoForRealContentHash
97
155
  * @property {string} name
98
156
  * @property {AssetInfo} info
@@ -108,6 +166,7 @@ const toCachedSource = (source) => {
108
166
  */
109
167
 
110
168
  /**
169
+ * Defines the compilation hooks type used by this module.
111
170
  * @typedef {object} CompilationHooks
112
171
  * @property {SyncBailHook<[Buffer[], string], string | void>} updateHash
113
172
  */
@@ -116,6 +175,7 @@ const toCachedSource = (source) => {
116
175
  const compilationHooksMap = new WeakMap();
117
176
 
118
177
  /**
178
+ * Defines the real content hash plugin options type used by this module.
119
179
  * @typedef {object} RealContentHashPluginOptions
120
180
  * @property {HashFunction} hashFunction the hash function to use
121
181
  * @property {HashDigest} hashDigest the hash digest to use
@@ -125,6 +185,7 @@ const PLUGIN_NAME = "RealContentHashPlugin";
125
185
 
126
186
  class RealContentHashPlugin {
127
187
  /**
188
+ * Returns the attached hooks.
128
189
  * @param {Compilation} compilation the compilation
129
190
  * @returns {CompilationHooks} the attached hooks
130
191
  */
@@ -145,6 +206,7 @@ class RealContentHashPlugin {
145
206
  }
146
207
 
147
208
  /**
209
+ * Creates an instance of RealContentHashPlugin.
148
210
  * @param {RealContentHashPluginOptions} options options
149
211
  */
150
212
  constructor({ hashFunction, hashDigest }) {
@@ -155,7 +217,7 @@ class RealContentHashPlugin {
155
217
  }
156
218
 
157
219
  /**
158
- * Apply the plugin
220
+ * Applies the plugin by registering its hooks on the compiler.
159
221
  * @param {Compiler} compiler the compiler instance
160
222
  * @returns {void}
161
223
  */
@@ -247,6 +309,7 @@ class RealContentHashPlugin {
247
309
  })
248
310
  );
249
311
  /**
312
+ * Returns the referenced hashes.
250
313
  * @param {string} hash the hash
251
314
  * @returns {undefined | Hashes} the referenced hashes
252
315
  */
@@ -287,6 +350,7 @@ ${referencingAssets
287
350
  return hashes;
288
351
  };
289
352
  /**
353
+ * Returns the hash info.
290
354
  * @param {string} hash the hash
291
355
  * @returns {string} the hash info
292
356
  */
@@ -301,6 +365,7 @@ ${referencingAssets
301
365
  const hashesInOrder = new Set();
302
366
  for (const hash of hashToAssets.keys()) {
303
367
  /**
368
+ * Processes the provided hash.
304
369
  * @param {string} hash the hash
305
370
  * @param {Set<string>} stack stack of hashes
306
371
  */
@@ -329,6 +394,7 @@ ${referencingAssets
329
394
  /** @type {Map<string, string>} */
330
395
  const hashToNewHash = new Map();
331
396
  /**
397
+ * Returns etag.
332
398
  * @param {AssetInfoForRealContentHash} asset asset info
333
399
  * @returns {Etag} etag
334
400
  */
@@ -341,6 +407,7 @@ ${referencingAssets
341
407
  ).join("|")
342
408
  );
343
409
  /**
410
+ * Compute new content.
344
411
  * @param {AssetInfoForRealContentHash} asset asset info
345
412
  * @returns {Promise<void>}
346
413
  */
@@ -370,6 +437,7 @@ ${referencingAssets
370
437
  })());
371
438
  };
372
439
  /**
440
+ * Compute new content without own.
373
441
  * @param {AssetInfoForRealContentHash} asset asset info
374
442
  * @returns {Promise<void>}
375
443
  */
@@ -422,24 +490,34 @@ ${referencingAssets
422
490
  : computeNewContent(asset)
423
491
  )
424
492
  );
425
- const assetsContent = mapAndDeduplicateBuffers(assets, (asset) => {
426
- if (/** @type {Hashes} */ (asset.ownHashes).has(oldHash)) {
427
- return asset.newSourceWithoutOwn
428
- ? asset.newSourceWithoutOwn.buffer()
429
- : asset.source.buffer();
493
+ const uniqueChunkArrays = mapAndDeduplicateSourceBuffers(
494
+ assets,
495
+ (asset) => {
496
+ if (/** @type {Hashes} */ (asset.ownHashes).has(oldHash)) {
497
+ return asset.newSourceWithoutOwn || asset.source;
498
+ }
499
+ return asset.newSource || asset.source;
430
500
  }
431
- return asset.newSource
432
- ? asset.newSource.buffer()
433
- : asset.source.buffer();
434
- });
435
- let newHash = hooks.updateHash.call(assetsContent, oldHash);
501
+ );
502
+ /** @type {string | undefined} */
503
+ let newHash;
504
+ // Only materialize the public `Buffer[]` (one entry per unique
505
+ // asset) when something is tapped; otherwise the hot path feeds
506
+ // chunks into the hash directly, avoiding per-asset Buffer.concat.
507
+ if (hooks.updateHash.isUsed()) {
508
+ const assetsContent = uniqueChunkArrays.map((chunks) =>
509
+ chunks.length === 1 ? chunks[0] : Buffer.concat(chunks)
510
+ );
511
+ newHash =
512
+ hooks.updateHash.call(assetsContent, oldHash) || undefined;
513
+ }
436
514
  if (!newHash) {
437
515
  const hash = createHash(this._hashFunction);
438
516
  if (compilation.outputOptions.hashSalt) {
439
517
  hash.update(compilation.outputOptions.hashSalt);
440
518
  }
441
- for (const content of assetsContent) {
442
- hash.update(content);
519
+ for (const chunks of uniqueChunkArrays) {
520
+ for (const c of chunks) hash.update(c);
443
521
  }
444
522
  const digest = hash.digest(this._hashDigest);
445
523
  newHash = digest.slice(0, oldHash.length);
@@ -14,13 +14,14 @@ const PLUGIN_NAME = "RemoveEmptyChunksPlugin";
14
14
 
15
15
  class RemoveEmptyChunksPlugin {
16
16
  /**
17
- * Apply the plugin
17
+ * Applies the plugin by registering its hooks on the compiler.
18
18
  * @param {Compiler} compiler the compiler instance
19
19
  * @returns {void}
20
20
  */
21
21
  apply(compiler) {
22
22
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
23
23
  /**
24
+ * Handles the hook callback for this code path.
24
25
  * @param {Iterable<Chunk>} chunks the chunks array
25
26
  * @returns {void}
26
27
  */
@@ -63,12 +63,14 @@ const PLUGIN_NAME = "RemoveParentModulesPlugin";
63
63
 
64
64
  class RemoveParentModulesPlugin {
65
65
  /**
66
+ * Applies the plugin by registering its hooks on the compiler.
66
67
  * @param {Compiler} compiler the compiler
67
68
  * @returns {void}
68
69
  */
69
70
  apply(compiler) {
70
71
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
71
72
  /**
73
+ * Handles the hook callback for this code path.
72
74
  * @param {Iterable<Chunk>} chunks the chunks
73
75
  * @param {ChunkGroup[]} chunkGroups the chunk groups
74
76
  */
@@ -86,7 +88,7 @@ class RemoveParentModulesPlugin {
86
88
  const ordinalModules = [];
87
89
 
88
90
  /**
89
- * Gets or creates a unique mask for a module
91
+ * Gets or create module mask.
90
92
  * @param {Module} mod the module to get the mask for
91
93
  * @returns {bigint} the module mask to uniquely identify the module
92
94
  */
@@ -14,6 +14,7 @@ const PLUGIN_NAME = "RuntimeChunkPlugin";
14
14
 
15
15
  class RuntimeChunkPlugin {
16
16
  /**
17
+ * Creates an instance of RuntimeChunkPlugin.
17
18
  * @param {{ name?: RuntimeChunkFunction }=} options options
18
19
  */
19
20
  constructor(options = {}) {
@@ -25,7 +26,7 @@ class RuntimeChunkPlugin {
25
26
  }
26
27
 
27
28
  /**
28
- * Apply the plugin
29
+ * Applies the plugin by registering its hooks on the compiler.
29
30
  * @param {Compiler} compiler the compiler instance
30
31
  * @returns {void}
31
32
  */