webpack 5.76.1 → 5.88.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.

Potentially problematic release.


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

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -42,27 +42,28 @@ class ProvideSharedPlugin {
42
42
  constructor(options) {
43
43
  validate(options);
44
44
 
45
- /** @type {[string, ProvideOptions][]} */
46
- this._provides = parseOptions(
47
- options.provides,
48
- item => {
49
- if (Array.isArray(item))
50
- throw new Error("Unexpected array of provides");
51
- /** @type {ProvideOptions} */
52
- const result = {
53
- shareKey: item,
54
- version: undefined,
55
- shareScope: options.shareScope || "default",
56
- eager: false
57
- };
58
- return result;
59
- },
60
- item => ({
61
- shareKey: item.shareKey,
62
- version: item.version,
63
- shareScope: item.shareScope || options.shareScope || "default",
64
- eager: !!item.eager
65
- })
45
+ this._provides = /** @type {[string, ProvideOptions][]} */ (
46
+ parseOptions(
47
+ options.provides,
48
+ item => {
49
+ if (Array.isArray(item))
50
+ throw new Error("Unexpected array of provides");
51
+ /** @type {ProvideOptions} */
52
+ const result = {
53
+ shareKey: item,
54
+ version: undefined,
55
+ shareScope: options.shareScope || "default",
56
+ eager: false
57
+ };
58
+ return result;
59
+ },
60
+ item => ({
61
+ shareKey: item.shareKey,
62
+ version: item.version,
63
+ shareScope: item.shareScope || options.shareScope || "default",
64
+ eager: !!item.eager
65
+ })
66
+ )
66
67
  );
67
68
  this._provides.sort(([a], [b]) => {
68
69
  if (a < b) return -1;
@@ -13,24 +13,31 @@ const {
13
13
  compareStrings
14
14
  } = require("../util/comparators");
15
15
 
16
+ /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
+ /** @typedef {import("../Compilation")} Compilation */
19
+
16
20
  class ShareRuntimeModule extends RuntimeModule {
17
21
  constructor() {
18
22
  super("sharing");
19
23
  }
20
24
 
21
25
  /**
22
- * @returns {string} runtime code
26
+ * @returns {string | null} runtime code
23
27
  */
24
28
  generate() {
25
- const { compilation, chunkGraph } = this;
29
+ const compilation = /** @type {Compilation} */ (this.compilation);
26
30
  const {
27
31
  runtimeTemplate,
28
32
  codeGenerationResults,
29
- outputOptions: { uniqueName }
33
+ outputOptions: { uniqueName, ignoreBrowserWarnings }
30
34
  } = compilation;
35
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
31
36
  /** @type {Map<string, Map<number, Set<string>>>} */
32
37
  const initCodePerScope = new Map();
33
- for (const chunk of this.chunk.getAllReferencedChunks()) {
38
+ for (const chunk of /** @type {Chunk} */ (
39
+ this.chunk
40
+ ).getAllReferencedChunks()) {
34
41
  const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
35
42
  chunk,
36
43
  "share-init",
@@ -77,10 +84,13 @@ class ShareRuntimeModule extends RuntimeModule {
77
84
  `if(!${RuntimeGlobals.hasOwnProperty}(${RuntimeGlobals.shareScopeMap}, name)) ${RuntimeGlobals.shareScopeMap}[name] = {};`,
78
85
  "// runs all init snippets from all modules reachable",
79
86
  `var scope = ${RuntimeGlobals.shareScopeMap}[name];`,
80
- `var warn = ${runtimeTemplate.returningFunction(
81
- 'typeof console !== "undefined" && console.warn && console.warn(msg)',
82
- "msg"
83
- )};`,
87
+ `var warn = ${
88
+ ignoreBrowserWarnings
89
+ ? runtimeTemplate.basicFunction("", "")
90
+ : runtimeTemplate.basicFunction("msg", [
91
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
92
+ ])
93
+ };`,
84
94
  `var uniqueName = ${JSON.stringify(uniqueName || undefined)};`,
85
95
  `var register = ${runtimeTemplate.basicFunction(
86
96
  "name, version, factory, eager",
@@ -97,7 +107,7 @@ class ShareRuntimeModule extends RuntimeModule {
97
107
  )};`,
98
108
  "try {",
99
109
  Template.indent([
100
- "var module = __webpack_require__(id);",
110
+ `var module = ${RuntimeGlobals.require}(id);`,
101
111
  "if(!module) return;",
102
112
  `var initFn = ${runtimeTemplate.returningFunction(
103
113
  `module && module.init && module.init(${RuntimeGlobals.shareScopeMap}[name], initScope)`,
@@ -66,7 +66,7 @@ exports.resolveMatchedConfigs = (compilation, configs) => {
66
66
  );
67
67
  return resolve();
68
68
  }
69
- resolved.set(result, config);
69
+ resolved.set(/** @type {string} */ (result), config);
70
70
  resolve();
71
71
  }
72
72
  );
@@ -9,13 +9,326 @@ const { join, dirname, readJson } = require("../util/fs");
9
9
 
10
10
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
11
11
 
12
+ // Extreme shorthand only for github. eg: foo/bar
13
+ const RE_URL_GITHUB_EXTREME_SHORT = /^[^/@:.\s][^/@:\s]*\/[^@:\s]*[^/@:\s]#\S+/;
14
+
15
+ // Short url with specific protocol. eg: github:foo/bar
16
+ const RE_GIT_URL_SHORT = /^(github|gitlab|bitbucket|gist):\/?[^/.]+\/?/i;
17
+
18
+ // Currently supported protocols
19
+ const RE_PROTOCOL =
20
+ /^((git\+)?(ssh|https?|file)|git|github|gitlab|bitbucket|gist):$/i;
21
+
22
+ // Has custom protocol
23
+ const RE_CUSTOM_PROTOCOL = /^((git\+)?(ssh|https?|file)|git):\/\//i;
24
+
25
+ // Valid hash format for npm / yarn ...
26
+ const RE_URL_HASH_VERSION = /#(?:semver:)?(.+)/;
27
+
28
+ // Simple hostname validate
29
+ const RE_HOSTNAME = /^(?:[^/.]+(\.[^/]+)+|localhost)$/;
30
+
31
+ // For hostname with colon. eg: ssh://user@github.com:foo/bar
32
+ const RE_HOSTNAME_WITH_COLON =
33
+ /([^/@#:.]+(?:\.[^/@#:.]+)+|localhost):([^#/0-9]+)/;
34
+
35
+ // Reg for url without protocol
36
+ const RE_NO_PROTOCOL = /^([^/@#:.]+(?:\.[^/@#:.]+)+)/;
37
+
38
+ // RegExp for version string
39
+ const VERSION_PATTERN_REGEXP = /^([\d^=v<>~]|[*xX]$)/;
40
+
41
+ // Specific protocol for short url without normal hostname
42
+ const PROTOCOLS_FOR_SHORT = [
43
+ "github:",
44
+ "gitlab:",
45
+ "bitbucket:",
46
+ "gist:",
47
+ "file:"
48
+ ];
49
+
50
+ // Default protocol for git url
51
+ const DEF_GIT_PROTOCOL = "git+ssh://";
52
+
53
+ // thanks to https://github.com/npm/hosted-git-info/blob/latest/git-host-info.js
54
+ const extractCommithashByDomain = {
55
+ /**
56
+ * @param {string} pathname pathname
57
+ * @param {string} hash hash
58
+ * @returns {string | undefined} hash
59
+ */
60
+ "github.com": (pathname, hash) => {
61
+ let [, user, project, type, commithash] = pathname.split("/", 5);
62
+ if (type && type !== "tree") {
63
+ return;
64
+ }
65
+
66
+ if (!type) {
67
+ commithash = hash;
68
+ } else {
69
+ commithash = "#" + commithash;
70
+ }
71
+
72
+ if (project && project.endsWith(".git")) {
73
+ project = project.slice(0, -4);
74
+ }
75
+
76
+ if (!user || !project) {
77
+ return;
78
+ }
79
+
80
+ return commithash;
81
+ },
82
+ /**
83
+ * @param {string} pathname pathname
84
+ * @param {string} hash hash
85
+ * @returns {string | undefined} hash
86
+ */
87
+ "gitlab.com": (pathname, hash) => {
88
+ const path = pathname.slice(1);
89
+ if (path.includes("/-/") || path.includes("/archive.tar.gz")) {
90
+ return;
91
+ }
92
+
93
+ const segments = path.split("/");
94
+ let project = /** @type {string} */ (segments.pop());
95
+ if (project.endsWith(".git")) {
96
+ project = project.slice(0, -4);
97
+ }
98
+
99
+ const user = segments.join("/");
100
+ if (!user || !project) {
101
+ return;
102
+ }
103
+
104
+ return hash;
105
+ },
106
+ /**
107
+ * @param {string} pathname pathname
108
+ * @param {string} hash hash
109
+ * @returns {string | undefined} hash
110
+ */
111
+ "bitbucket.org": (pathname, hash) => {
112
+ let [, user, project, aux] = pathname.split("/", 4);
113
+ if (["get"].includes(aux)) {
114
+ return;
115
+ }
116
+
117
+ if (project && project.endsWith(".git")) {
118
+ project = project.slice(0, -4);
119
+ }
120
+
121
+ if (!user || !project) {
122
+ return;
123
+ }
124
+
125
+ return hash;
126
+ },
127
+ /**
128
+ * @param {string} pathname pathname
129
+ * @param {string} hash hash
130
+ * @returns {string | undefined} hash
131
+ */
132
+ "gist.github.com": (pathname, hash) => {
133
+ let [, user, project, aux] = pathname.split("/", 4);
134
+ if (aux === "raw") {
135
+ return;
136
+ }
137
+
138
+ if (!project) {
139
+ if (!user) {
140
+ return;
141
+ }
142
+
143
+ project = user;
144
+ }
145
+
146
+ if (project.endsWith(".git")) {
147
+ project = project.slice(0, -4);
148
+ }
149
+
150
+ return hash;
151
+ }
152
+ };
153
+
154
+ /**
155
+ * extract commit hash from parsed url
156
+ *
157
+ * @inner
158
+ * @param {URL} urlParsed parsed url
159
+ * @returns {string} commithash
160
+ */
161
+ function getCommithash(urlParsed) {
162
+ let { hostname, pathname, hash } = urlParsed;
163
+ hostname = hostname.replace(/^www\./, "");
164
+
165
+ try {
166
+ hash = decodeURIComponent(hash);
167
+ // eslint-disable-next-line no-empty
168
+ } catch (e) {}
169
+
170
+ if (
171
+ extractCommithashByDomain[
172
+ /** @type {keyof extractCommithashByDomain} */ (hostname)
173
+ ]
174
+ ) {
175
+ return (
176
+ extractCommithashByDomain[
177
+ /** @type {keyof extractCommithashByDomain} */ (hostname)
178
+ ](pathname, hash) || ""
179
+ );
180
+ }
181
+
182
+ return hash;
183
+ }
184
+
185
+ /**
186
+ * make url right for URL parse
187
+ *
188
+ * @inner
189
+ * @param {string} gitUrl git url
190
+ * @returns {string} fixed url
191
+ */
192
+ function correctUrl(gitUrl) {
193
+ // like:
194
+ // proto://hostname.com:user/repo -> proto://hostname.com/user/repo
195
+ return gitUrl.replace(RE_HOSTNAME_WITH_COLON, "$1/$2");
196
+ }
197
+
198
+ /**
199
+ * make url protocol right for URL parse
200
+ *
201
+ * @inner
202
+ * @param {string} gitUrl git url
203
+ * @returns {string} fixed url
204
+ */
205
+ function correctProtocol(gitUrl) {
206
+ // eg: github:foo/bar#v1.0. Should not add double slash, in case of error parsed `pathname`
207
+ if (RE_GIT_URL_SHORT.test(gitUrl)) {
208
+ return gitUrl;
209
+ }
210
+
211
+ // eg: user@github.com:foo/bar
212
+ if (!RE_CUSTOM_PROTOCOL.test(gitUrl)) {
213
+ return `${DEF_GIT_PROTOCOL}${gitUrl}`;
214
+ }
215
+
216
+ return gitUrl;
217
+ }
218
+
219
+ /**
220
+ * extract git dep version from hash
221
+ *
222
+ * @inner
223
+ * @param {string} hash hash
224
+ * @returns {string} git dep version
225
+ */
226
+ function getVersionFromHash(hash) {
227
+ const matched = hash.match(RE_URL_HASH_VERSION);
228
+
229
+ return (matched && matched[1]) || "";
230
+ }
231
+
232
+ /**
233
+ * if string can be decoded
234
+ *
235
+ * @inner
236
+ * @param {string} str str to be checked
237
+ * @returns {boolean} if can be decoded
238
+ */
239
+ function canBeDecoded(str) {
240
+ try {
241
+ decodeURIComponent(str);
242
+ } catch (e) {
243
+ return false;
244
+ }
245
+
246
+ return true;
247
+ }
248
+
249
+ /**
250
+ * get right dep version from git url
251
+ *
252
+ * @inner
253
+ * @param {string} gitUrl git url
254
+ * @returns {string} dep version
255
+ */
256
+ function getGitUrlVersion(gitUrl) {
257
+ let oriGitUrl = gitUrl;
258
+ // github extreme shorthand
259
+ if (RE_URL_GITHUB_EXTREME_SHORT.test(gitUrl)) {
260
+ gitUrl = "github:" + gitUrl;
261
+ } else {
262
+ gitUrl = correctProtocol(gitUrl);
263
+ }
264
+
265
+ gitUrl = correctUrl(gitUrl);
266
+
267
+ let parsed;
268
+ try {
269
+ parsed = new URL(gitUrl);
270
+ // eslint-disable-next-line no-empty
271
+ } catch (e) {}
272
+
273
+ if (!parsed) {
274
+ return "";
275
+ }
276
+
277
+ const { protocol, hostname, pathname, username, password } = parsed;
278
+ if (!RE_PROTOCOL.test(protocol)) {
279
+ return "";
280
+ }
281
+
282
+ // pathname shouldn't be empty or URL malformed
283
+ if (!pathname || !canBeDecoded(pathname)) {
284
+ return "";
285
+ }
286
+
287
+ // without protocol, there should have auth info
288
+ if (RE_NO_PROTOCOL.test(oriGitUrl) && !username && !password) {
289
+ return "";
290
+ }
291
+
292
+ if (!PROTOCOLS_FOR_SHORT.includes(protocol.toLowerCase())) {
293
+ if (!RE_HOSTNAME.test(hostname)) {
294
+ return "";
295
+ }
296
+
297
+ const commithash = getCommithash(parsed);
298
+ return getVersionFromHash(commithash) || commithash;
299
+ }
300
+
301
+ // for protocol short
302
+ return getVersionFromHash(gitUrl);
303
+ }
304
+
12
305
  /**
13
306
  * @param {string} str maybe required version
14
307
  * @returns {boolean} true, if it looks like a version
15
308
  */
16
- exports.isRequiredVersion = str => {
17
- return /^([\d^=v<>~]|[*xX]$)/.test(str);
18
- };
309
+ function isRequiredVersion(str) {
310
+ return VERSION_PATTERN_REGEXP.test(str);
311
+ }
312
+
313
+ exports.isRequiredVersion = isRequiredVersion;
314
+
315
+ /**
316
+ * @see https://docs.npmjs.com/cli/v7/configuring-npm/package-json#urls-as-dependencies
317
+ * @param {string} versionDesc version to be normalized
318
+ * @returns {string} normalized version
319
+ */
320
+ function normalizeVersion(versionDesc) {
321
+ versionDesc = (versionDesc && versionDesc.trim()) || "";
322
+
323
+ if (isRequiredVersion(versionDesc)) {
324
+ return versionDesc;
325
+ }
326
+
327
+ // add handle for URL Dependencies
328
+ return getGitUrlVersion(versionDesc.toLowerCase());
329
+ }
330
+
331
+ exports.normalizeVersion = normalizeVersion;
19
332
 
20
333
  /**
21
334
  *
@@ -64,27 +377,27 @@ exports.getRequiredVersionFromDescriptionFile = (data, packageName) => {
64
377
  typeof data.optionalDependencies === "object" &&
65
378
  packageName in data.optionalDependencies
66
379
  ) {
67
- return data.optionalDependencies[packageName];
380
+ return normalizeVersion(data.optionalDependencies[packageName]);
68
381
  }
69
382
  if (
70
383
  data.dependencies &&
71
384
  typeof data.dependencies === "object" &&
72
385
  packageName in data.dependencies
73
386
  ) {
74
- return data.dependencies[packageName];
387
+ return normalizeVersion(data.dependencies[packageName]);
75
388
  }
76
389
  if (
77
390
  data.peerDependencies &&
78
391
  typeof data.peerDependencies === "object" &&
79
392
  packageName in data.peerDependencies
80
393
  ) {
81
- return data.peerDependencies[packageName];
394
+ return normalizeVersion(data.peerDependencies[packageName]);
82
395
  }
83
396
  if (
84
397
  data.devDependencies &&
85
398
  typeof data.devDependencies === "object" &&
86
399
  packageName in data.devDependencies
87
400
  ) {
88
- return data.devDependencies[packageName];
401
+ return normalizeVersion(data.devDependencies[packageName]);
89
402
  }
90
403
  };
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const util = require("util");
9
+ const { WEBPACK_MODULE_TYPE_RUNTIME } = require("../ModuleTypeConstants");
9
10
  const ModuleDependency = require("../dependencies/ModuleDependency");
10
11
  const formatLocation = require("../formatLocation");
11
12
  const { LogType } = require("../logging/Logger");
@@ -811,11 +812,32 @@ const SIMPLE_EXTRACTORS = {
811
812
  },
812
813
  errors: (object, compilation, context, options, factory) => {
813
814
  const { type, cachedGetErrors } = context;
814
- object.errors = factory.create(
815
+ const rawErrors = cachedGetErrors(compilation);
816
+ const factorizedErrors = factory.create(
815
817
  `${type}.errors`,
816
818
  cachedGetErrors(compilation),
817
819
  context
818
820
  );
821
+ let filtered = 0;
822
+ if (options.errorDetails === "auto" && rawErrors.length >= 3) {
823
+ filtered = rawErrors
824
+ .map(e => typeof e !== "string" && e.details)
825
+ .filter(Boolean).length;
826
+ }
827
+ if (
828
+ options.errorDetails === true ||
829
+ !Number.isFinite(options.errorsSpace)
830
+ ) {
831
+ object.errors = factorizedErrors;
832
+ if (filtered) object.filteredErrorDetailsCount = filtered;
833
+ return;
834
+ }
835
+ const [errors, filteredBySpace] = errorsSpaceLimit(
836
+ factorizedErrors,
837
+ options.errorsSpace
838
+ );
839
+ object.filteredErrorDetailsCount = filtered + filteredBySpace;
840
+ object.errors = errors;
819
841
  },
820
842
  errorsCount: (object, compilation, { cachedGetErrors }) => {
821
843
  object.errorsCount = countWithChildren(compilation, c =>
@@ -824,11 +846,31 @@ const SIMPLE_EXTRACTORS = {
824
846
  },
825
847
  warnings: (object, compilation, context, options, factory) => {
826
848
  const { type, cachedGetWarnings } = context;
827
- object.warnings = factory.create(
849
+ const rawWarnings = factory.create(
828
850
  `${type}.warnings`,
829
851
  cachedGetWarnings(compilation),
830
852
  context
831
853
  );
854
+ let filtered = 0;
855
+ if (options.errorDetails === "auto") {
856
+ filtered = cachedGetWarnings(compilation)
857
+ .map(e => typeof e !== "string" && e.details)
858
+ .filter(Boolean).length;
859
+ }
860
+ if (
861
+ options.errorDetails === true ||
862
+ !Number.isFinite(options.warningsSpace)
863
+ ) {
864
+ object.warnings = rawWarnings;
865
+ if (filtered) object.filteredWarningDetailsCount = filtered;
866
+ return;
867
+ }
868
+ const [warnings, filteredBySpace] = errorsSpaceLimit(
869
+ rawWarnings,
870
+ options.warningsSpace
871
+ );
872
+ object.filteredWarningDetailsCount = filtered + filteredBySpace;
873
+ object.warnings = warnings;
832
874
  },
833
875
  warningsCount: (
834
876
  object,
@@ -853,29 +895,6 @@ const SIMPLE_EXTRACTORS = {
853
895
  });
854
896
  });
855
897
  },
856
- errorDetails: (
857
- object,
858
- compilation,
859
- { cachedGetErrors, cachedGetWarnings },
860
- { errorDetails, errors, warnings }
861
- ) => {
862
- if (errorDetails === "auto") {
863
- if (warnings) {
864
- const warnings = cachedGetWarnings(compilation);
865
- object.filteredWarningDetailsCount = warnings
866
- .map(e => typeof e !== "string" && e.details)
867
- .filter(Boolean).length;
868
- }
869
- if (errors) {
870
- const errors = cachedGetErrors(compilation);
871
- if (errors.length >= 3) {
872
- object.filteredErrorDetailsCount = errors
873
- .map(e => typeof e !== "string" && e.details)
874
- .filter(Boolean).length;
875
- }
876
- }
877
- }
878
- },
879
898
  children: (object, compilation, context, options, factory) => {
880
899
  const { type } = context;
881
900
  object.children = factory.create(
@@ -1779,6 +1798,61 @@ const spaceLimited = (
1779
1798
  };
1780
1799
  };
1781
1800
 
1801
+ const errorsSpaceLimit = (errors, max) => {
1802
+ let filtered = 0;
1803
+ // Can not fit into limit
1804
+ // print only messages
1805
+ if (errors.length + 1 >= max)
1806
+ return [
1807
+ errors.map(error => {
1808
+ if (typeof error === "string" || !error.details) return error;
1809
+ filtered++;
1810
+ return { ...error, details: "" };
1811
+ }),
1812
+ filtered
1813
+ ];
1814
+ let fullLength = errors.length;
1815
+ let result = errors;
1816
+
1817
+ let i = 0;
1818
+ for (; i < errors.length; i++) {
1819
+ const error = errors[i];
1820
+ if (typeof error !== "string" && error.details) {
1821
+ const splitted = error.details.split("\n");
1822
+ const len = splitted.length;
1823
+ fullLength += len;
1824
+ if (fullLength > max) {
1825
+ result = i > 0 ? errors.slice(0, i) : [];
1826
+ const overLimit = fullLength - max + 1;
1827
+ const error = errors[i++];
1828
+ result.push({
1829
+ ...error,
1830
+ details: error.details.split("\n").slice(0, -overLimit).join("\n"),
1831
+ filteredDetails: overLimit
1832
+ });
1833
+ filtered = errors.length - i;
1834
+ for (; i < errors.length; i++) {
1835
+ const error = errors[i];
1836
+ if (typeof error === "string" || !error.details) result.push(error);
1837
+ result.push({ ...error, details: "" });
1838
+ }
1839
+ break;
1840
+ } else if (fullLength === max) {
1841
+ result = errors.slice(0, ++i);
1842
+ filtered = errors.length - i;
1843
+ for (; i < errors.length; i++) {
1844
+ const error = errors[i];
1845
+ if (typeof error === "string" || !error.details) result.push(error);
1846
+ result.push({ ...error, details: "" });
1847
+ }
1848
+ break;
1849
+ }
1850
+ }
1851
+ }
1852
+
1853
+ return [result, filtered];
1854
+ };
1855
+
1782
1856
  const assetGroup = (children, assets) => {
1783
1857
  let size = 0;
1784
1858
  for (const asset of children) {
@@ -2020,19 +2094,21 @@ const MODULES_GROUPERS = type => ({
2020
2094
  if (!module.moduleType) return;
2021
2095
  if (groupModulesByType) {
2022
2096
  return [module.moduleType.split("/", 1)[0]];
2023
- } else if (module.moduleType === "runtime") {
2024
- return ["runtime"];
2097
+ } else if (module.moduleType === WEBPACK_MODULE_TYPE_RUNTIME) {
2098
+ return [WEBPACK_MODULE_TYPE_RUNTIME];
2025
2099
  }
2026
2100
  },
2027
2101
  getOptions: key => {
2028
- const exclude = key === "runtime" && !options.runtimeModules;
2102
+ const exclude =
2103
+ key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules;
2029
2104
  return {
2030
2105
  groupChildren: !exclude,
2031
2106
  force: exclude
2032
2107
  };
2033
2108
  },
2034
2109
  createGroup: (key, children, modules) => {
2035
- const exclude = key === "runtime" && !options.runtimeModules;
2110
+ const exclude =
2111
+ key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules;
2036
2112
  return {
2037
2113
  type: `${key} modules`,
2038
2114
  moduleType: key,