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
@@ -47,6 +47,8 @@ const NAMED_PRESETS = {
47
47
  orphanModules: true,
48
48
  runtimeModules: true,
49
49
  exclude: false,
50
+ errorsSpace: Infinity,
51
+ warningsSpace: Infinity,
50
52
  modulesSpace: Infinity,
51
53
  chunkModulesSpace: Infinity,
52
54
  assetsSpace: Infinity,
@@ -73,6 +75,8 @@ const NAMED_PRESETS = {
73
75
  logging: true,
74
76
  runtimeModules: true,
75
77
  exclude: false,
78
+ errorsSpace: 1000,
79
+ warningsSpace: 1000,
76
80
  modulesSpace: 1000,
77
81
  assetsSpace: 1000,
78
82
  reasonsSpace: 1000
@@ -82,6 +86,8 @@ const NAMED_PRESETS = {
82
86
  version: true,
83
87
  timings: true,
84
88
  modules: true,
89
+ errorsSpace: 0,
90
+ warningsSpace: 0,
85
91
  modulesSpace: 0,
86
92
  assets: true,
87
93
  assetsSpace: 0,
@@ -95,6 +101,7 @@ const NAMED_PRESETS = {
95
101
  all: false,
96
102
  errors: true,
97
103
  errorsCount: true,
104
+ errorsSpace: Infinity,
98
105
  moduleTrace: true,
99
106
  logging: "error"
100
107
  },
@@ -102,8 +109,10 @@ const NAMED_PRESETS = {
102
109
  all: false,
103
110
  errors: true,
104
111
  errorsCount: true,
112
+ errorsSpace: Infinity,
105
113
  warnings: true,
106
114
  warningsCount: true,
115
+ warningsSpace: Infinity,
107
116
  logging: "warn"
108
117
  },
109
118
  summary: {
@@ -10,7 +10,14 @@
10
10
  /** @typedef {import("./StatsPrinter").StatsPrinterContext} StatsPrinterContext */
11
11
 
12
12
  const DATA_URI_CONTENT_LENGTH = 16;
13
+ const MAX_MODULE_IDENTIFIER_LENGTH = 80;
13
14
 
15
+ /**
16
+ * @param {number} n a number
17
+ * @param {string} singular singular
18
+ * @param {string} plural plural
19
+ * @returns {string} if n is 1, singular, else plural
20
+ */
14
21
  const plural = (n, singular, plural) => (n === 1 ? singular : plural);
15
22
 
16
23
  /**
@@ -28,6 +35,10 @@ const printSizes = (sizes, { formatSize = n => `${n}` }) => {
28
35
  }
29
36
  };
30
37
 
38
+ /**
39
+ * @param {string} resource resource
40
+ * @returns {string} resource name for display
41
+ */
31
42
  const getResourceName = resource => {
32
43
  const dataUrl = /^data:[^,]+,/.exec(resource);
33
44
  if (!dataUrl) return resource;
@@ -40,11 +51,33 @@ const getResourceName = resource => {
40
51
  )}..`;
41
52
  };
42
53
 
54
+ /**
55
+ * @param {string} name module name
56
+ * @returns {[string,string]} prefix and module name
57
+ */
43
58
  const getModuleName = name => {
44
59
  const [, prefix, resource] = /^(.*!)?([^!]*)$/.exec(name);
60
+
61
+ if (resource.length > MAX_MODULE_IDENTIFIER_LENGTH) {
62
+ const truncatedResource = `${resource.slice(
63
+ 0,
64
+ Math.min(
65
+ resource.length - /* '...(truncated)'.length */ 14,
66
+ MAX_MODULE_IDENTIFIER_LENGTH
67
+ )
68
+ )}...(truncated)`;
69
+
70
+ return [prefix, getResourceName(truncatedResource)];
71
+ }
72
+
45
73
  return [prefix, getResourceName(resource)];
46
74
  };
47
75
 
76
+ /**
77
+ * @param {string} str string
78
+ * @param {function(string): string} fn function to apply to each line
79
+ * @returns {string} joined string
80
+ */
48
81
  const mapLines = (str, fn) => str.split("\n").map(fn).join("\n");
49
82
 
50
83
  /**
@@ -57,6 +90,12 @@ const isValidId = id => {
57
90
  return typeof id === "number" || id;
58
91
  };
59
92
 
93
+ /**
94
+ * @template T
95
+ * @param {Array<T>} list of items
96
+ * @param {number} count number of items to show
97
+ * @returns {string} string representation of list
98
+ */
60
99
  const moreCount = (list, count) => {
61
100
  return list && list.length > 0 ? `+ ${count}` : `${count}`;
62
101
  };
@@ -589,6 +628,8 @@ const SIMPLE_PRINTERS = {
589
628
  "error.message": (message, { bold, formatError }) =>
590
629
  message.includes("\u001b[") ? message : bold(formatError(message)),
591
630
  "error.details": (details, { formatError }) => formatError(details),
631
+ "error.filteredDetails": filteredDetails =>
632
+ filteredDetails ? `+ ${filteredDetails} hidden lines` : undefined,
592
633
  "error.stack": stack => stack,
593
634
  "error.moduleTrace": moduleTrace => undefined,
594
635
  "error.separator!": () => "\n",
@@ -689,6 +730,8 @@ const ERROR_PREFERRED_ORDER = [
689
730
  "separator!",
690
731
  "details",
691
732
  "separator!",
733
+ "filteredDetails",
734
+ "separator!",
692
735
  "stack",
693
736
  "separator!",
694
737
  "missing",
@@ -70,7 +70,7 @@ class AsyncQueue {
70
70
  this._entries = new Map();
71
71
  /** @type {ArrayQueue<AsyncQueueEntry<T, K, R>>} */
72
72
  this._queued = new ArrayQueue();
73
- /** @type {AsyncQueue<any, any, any>[]} */
73
+ /** @type {AsyncQueue<any, any, any>[] | undefined} */
74
74
  this._children = undefined;
75
75
  this._activeTasks = 0;
76
76
  this._willEnsureProcessing = false;
@@ -159,7 +159,9 @@ class AsyncQueue {
159
159
  */
160
160
  invalidate(item) {
161
161
  const key = this._getKey(item);
162
- const entry = this._entries.get(key);
162
+ const entry =
163
+ /** @type {AsyncQueueEntry<T, K, R>} */
164
+ (this._entries.get(key));
163
165
  this._entries.delete(key);
164
166
  if (entry.state === QUEUED_STATE) {
165
167
  this._queued.delete(entry);
@@ -87,7 +87,7 @@ class LazySet {
87
87
 
88
88
  /**
89
89
  * @param {T} item an item
90
- * @returns {this} itself
90
+ * @returns {LazySet<T>} itself
91
91
  */
92
92
  add(item) {
93
93
  this._set.add(item);
@@ -96,7 +96,7 @@ class LazySet {
96
96
 
97
97
  /**
98
98
  * @param {Iterable<T> | LazySet<T>} iterable a immutable iterable or another immutable LazySet which will eventually be merged into the Set
99
- * @returns {this} itself
99
+ * @returns {LazySet<T>} itself
100
100
  */
101
101
  addAll(iterable) {
102
102
  if (this._deopt) {
@@ -187,12 +187,20 @@ class LazySet {
187
187
  return "LazySet";
188
188
  }
189
189
 
190
+ /**
191
+ * @param {import("../serialization/ObjectMiddleware").ObjectSerializerContext} context context
192
+ */
190
193
  serialize({ write }) {
191
194
  if (this._needMerge) this._merge();
192
195
  write(this._set.size);
193
196
  for (const item of this._set) write(item);
194
197
  }
195
198
 
199
+ /**
200
+ * @template T
201
+ * @param {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} context context
202
+ * @returns {LazySet<T>} lazy set
203
+ */
196
204
  static deserialize({ read }) {
197
205
  const count = read();
198
206
  const items = [];
@@ -6,16 +6,30 @@
6
6
  "use strict";
7
7
 
8
8
  /**
9
+ * getOrInsert is a helper function for maps that allows you to get a value
10
+ * from a map if it exists, or insert a new value if it doesn't. If it value doesn't
11
+ * exist, it will be computed by the provided function.
12
+ *
9
13
  * @template K
10
14
  * @template V
11
- * @param {Map<K, V>} map a map
12
- * @param {K} key the key
13
- * @param {function(): V} computer compute value
14
- * @returns {V} value
15
+ * @param {Map<K, V>} map The map object to check
16
+ * @param {K} key The key to check
17
+ * @param {function(): V} computer function which will compute the value if it doesn't exist
18
+ * @returns {V} The value from the map, or the computed value
19
+ *
20
+ * @example
21
+ * ```js
22
+ * const map = new Map();
23
+ * const value = getOrInsert(map, "key", () => "value");
24
+ * console.log(value); // "value"
25
+ * ```
15
26
  */
16
- exports.provide = (map, key, computer) => {
27
+ exports.getOrInsert = (map, key, computer) => {
28
+ // Grab key from map
17
29
  const value = map.get(key);
30
+ // If the value already exists, return it
18
31
  if (value !== undefined) return value;
32
+ // Otherwise compute the value, set it in the map, and return it
19
33
  const newValue = computer();
20
34
  map.set(key, newValue);
21
35
  return newValue;
@@ -7,12 +7,22 @@
7
7
 
8
8
  const binarySearchBounds = require("../util/binarySearchBounds");
9
9
 
10
+ /** @typedef {function(number): void} Callback */
11
+
10
12
  class ParallelismFactorCalculator {
11
13
  constructor() {
14
+ /** @type {number[]} */
12
15
  this._rangePoints = [];
16
+ /** @type {Callback[]} */
13
17
  this._rangeCallbacks = [];
14
18
  }
15
19
 
20
+ /**
21
+ * @param {number} start range start
22
+ * @param {number} end range end
23
+ * @param {Callback} callback callback
24
+ * @returns {void}
25
+ */
16
26
  range(start, end, callback) {
17
27
  if (start === end) return callback(1);
18
28
  this._rangePoints.push(start);
@@ -44,7 +44,7 @@ class Semaphore {
44
44
  if (this.available > 0) {
45
45
  if (this.waiters.length > 0) {
46
46
  this.available--;
47
- const callback = this.waiters.pop();
47
+ const callback = /** @type {(function(): void)} */ (this.waiters.pop());
48
48
  callback();
49
49
  }
50
50
  }
@@ -83,6 +83,9 @@ class StackedCacheMap {
83
83
  this.map.clear();
84
84
  }
85
85
 
86
+ /**
87
+ * @returns {number} size of the map
88
+ */
86
89
  get size() {
87
90
  let size = this.map.size;
88
91
  for (const map of this.stack) {
@@ -91,6 +94,9 @@ class StackedCacheMap {
91
94
  return size;
92
95
  }
93
96
 
97
+ /**
98
+ * @returns {Iterator<[K, V]>} iterator
99
+ */
94
100
  [Symbol.iterator]() {
95
101
  const iterators = this.stack.map(map => map[Symbol.iterator]());
96
102
  let current = this.map[Symbol.iterator]();
@@ -5,12 +5,46 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../util/Hash")} Hash */
9
+
10
+ /**
11
+ * StringXor class provides methods for performing
12
+ * [XOR operations](https://en.wikipedia.org/wiki/Exclusive_or) on strings. In this context
13
+ * we operating on the character codes of two strings, which are represented as
14
+ * [Buffer](https://nodejs.org/api/buffer.html) objects.
15
+ *
16
+ * We use [StringXor in webpack](https://github.com/webpack/webpack/commit/41a8e2ea483a544c4ccd3e6217bdfb80daffca39)
17
+ * to create a hash of the current state of the compilation. By XOR'ing the Module hashes, it
18
+ * doesn't matter if the Module hashes are sorted or not. This is useful because it allows us to avoid sorting the
19
+ * Module hashes.
20
+ *
21
+ * @example
22
+ * ```js
23
+ * const xor = new StringXor();
24
+ * xor.add('hello');
25
+ * xor.add('world');
26
+ * console.log(xor.toString());
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```js
31
+ * const xor = new StringXor();
32
+ * xor.add('foo');
33
+ * xor.add('bar');
34
+ * const hash = createHash('sha256');
35
+ * hash.update(xor.toString());
36
+ * console.log(hash.digest('hex'));
37
+ * ```
38
+ */
8
39
  class StringXor {
9
40
  constructor() {
41
+ /** @type {Buffer|undefined} */
10
42
  this._value = undefined;
11
43
  }
12
44
 
13
45
  /**
46
+ * Adds a string to the current StringXor object.
47
+ *
14
48
  * @param {string} str string
15
49
  * @returns {void}
16
50
  */
@@ -18,6 +52,10 @@ class StringXor {
18
52
  const len = str.length;
19
53
  const value = this._value;
20
54
  if (value === undefined) {
55
+ /**
56
+ * We are choosing to use Buffer.allocUnsafe() because it is often faster than Buffer.alloc() because
57
+ * it allocates a new buffer of the specified size without initializing the memory.
58
+ */
21
59
  const newValue = (this._value = Buffer.allocUnsafe(len));
22
60
  for (let i = 0; i < len; i++) {
23
61
  newValue[i] = str.charCodeAt(i);
@@ -41,11 +79,24 @@ class StringXor {
41
79
  }
42
80
  }
43
81
 
82
+ /**
83
+ * Returns a string that represents the current state of the StringXor object. We chose to use "latin1" encoding
84
+ * here because "latin1" encoding is a single-byte encoding that can represent all characters in the
85
+ * [ISO-8859-1 character set](https://en.wikipedia.org/wiki/ISO/IEC_8859-1). This is useful when working
86
+ * with binary data that needs to be represented as a string.
87
+ *
88
+ * @returns {string} Returns a string that represents the current state of the StringXor object.
89
+ */
44
90
  toString() {
45
91
  const value = this._value;
46
92
  return value === undefined ? "" : value.toString("latin1");
47
93
  }
48
94
 
95
+ /**
96
+ * Updates the hash with the current state of the StringXor object.
97
+ *
98
+ * @param {Hash} hash Hash instance
99
+ */
49
100
  updateHash(hash) {
50
101
  const value = this._value;
51
102
  if (value !== undefined) hash.update(value);
@@ -8,6 +8,28 @@
8
8
  /* cspell:disable-next-line */
9
9
  // Refactor: Peter Somogyvari @petermetz
10
10
 
11
+ /** @typedef {">=" | "<=" | "<" | ">" | "-" } BinarySearchPredicate */
12
+ /** @typedef {"GE" | "GT" | "LT" | "LE" | "EQ" } SearchPredicateSuffix */
13
+
14
+ /**
15
+ * Helper function for compiling binary search functions.
16
+ *
17
+ * The generated code uses a while loop to repeatedly divide the search interval
18
+ * in half until the desired element is found, or the search interval is empty.
19
+ *
20
+ * The following is an example of a generated function for calling `compileSearch("P", "c(x,y)<=0", true, ["y", "c"], false)`:
21
+ *
22
+ * ```js
23
+ * function P(a,l,h,y,c){var i=l-1;while(l<=h){var m=(l+h)>>>1,x=a[m];if(c(x,y)<=0){i=m;l=m+1}else{h=m-1}}return i};
24
+ * ```
25
+ *
26
+ * @param {string} funcName The name of the function to be compiled.
27
+ * @param {string} predicate The predicate / comparison operator to be used in the binary search.
28
+ * @param {boolean} reversed Whether the search should be reversed.
29
+ * @param {string[]} extraArgs Extra arguments to be passed to the function.
30
+ * @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
31
+ * @returns {string} The compiled binary search function.
32
+ */
11
33
  const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
12
34
  const code = [
13
35
  "function ",
@@ -43,6 +65,18 @@ const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
43
65
  return code.join("");
44
66
  };
45
67
 
68
+ /**
69
+ * This helper functions generate code for two binary search functions:
70
+ * A(): Performs a binary search on an array using the comparison operator specified.
71
+ * P(): Performs a binary search on an array using a _custom comparison function_
72
+ * `c(x,y)` **and** comparison operator specified by `predicate`.
73
+ *
74
+ * @param {BinarySearchPredicate} predicate The predicate / comparison operator to be used in the binary search.
75
+ * @param {boolean} reversed Whether the search should be reversed.
76
+ * @param {SearchPredicateSuffix} suffix The suffix to be used in the function name.
77
+ * @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
78
+ * @returns {function} The compiled binary search function.
79
+ */
46
80
  const compileBoundsSearch = (predicate, reversed, suffix, earlyOut) => {
47
81
  const arg1 = compileSearch(
48
82
  "A",
@@ -77,6 +111,21 @@ return dispatchBinarySearch";
77
111
  return result();
78
112
  };
79
113
 
114
+ /**
115
+ * These functions are used to perform binary searches on arrays.
116
+ *
117
+ * @example
118
+ * ```js
119
+ * const { gt, le} = require("./binarySearchBounds");
120
+ * const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
121
+ *
122
+ * // Find the index of the first element greater than 5
123
+ * const index1 = gt(arr, 5); // index1 === 3
124
+ *
125
+ * // Find the index of the first element less than or equal to 5
126
+ * const index2 = le(arr, 5); // index2 === 4
127
+ * ```
128
+ */
80
129
  module.exports = {
81
130
  ge: compileBoundsSearch(">=", false, "GE"),
82
131
  gt: compileBoundsSearch(">", false, "GT"),
@@ -5,10 +5,18 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /**
9
+ * @param {string} str string
10
+ * @returns {string} quoted meta
11
+ */
8
12
  const quoteMeta = str => {
9
13
  return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
10
14
  };
11
15
 
16
+ /**
17
+ * @param {string} str string
18
+ * @returns {string} string
19
+ */
12
20
  const toSimpleString = str => {
13
21
  if (`${+str}` === str) {
14
22
  return str;
@@ -49,19 +57,28 @@ const compileBooleanMatcherFromLists = (positiveItems, negativeItems) => {
49
57
  }
50
58
  };
51
59
 
60
+ /**
61
+ * @param {Set<string>} itemsSet items set
62
+ * @param {(str: string) => string | false} getKey get key function
63
+ * @param {(str: Array<string>) => boolean} condition condition
64
+ * @returns {Array<Array<string>>} list of common items
65
+ */
52
66
  const popCommonItems = (itemsSet, getKey, condition) => {
67
+ /** @type {Map<string, Array<string>>} */
53
68
  const map = new Map();
54
69
  for (const item of itemsSet) {
55
70
  const key = getKey(item);
56
71
  if (key) {
57
72
  let list = map.get(key);
58
73
  if (list === undefined) {
74
+ /** @type {Array<string>} */
59
75
  list = [];
60
76
  map.set(key, list);
61
77
  }
62
78
  list.push(item);
63
79
  }
64
80
  }
81
+ /** @type {Array<Array<string>>} */
65
82
  const result = [];
66
83
  for (const list of map.values()) {
67
84
  if (condition(list)) {
@@ -74,6 +91,10 @@ const popCommonItems = (itemsSet, getKey, condition) => {
74
91
  return result;
75
92
  };
76
93
 
94
+ /**
95
+ * @param {Array<string>} items items
96
+ * @returns {string} common prefix
97
+ */
77
98
  const getCommonPrefix = items => {
78
99
  let prefix = items[0];
79
100
  for (let i = 1; i < items.length; i++) {
@@ -88,6 +109,10 @@ const getCommonPrefix = items => {
88
109
  return prefix;
89
110
  };
90
111
 
112
+ /**
113
+ * @param {Array<string>} items items
114
+ * @returns {string} common suffix
115
+ */
91
116
  const getCommonSuffix = items => {
92
117
  let suffix = items[0];
93
118
  for (let i = 1; i < items.length; i++) {
@@ -102,10 +127,15 @@ const getCommonSuffix = items => {
102
127
  return suffix;
103
128
  };
104
129
 
130
+ /**
131
+ * @param {Array<string>} itemsArr array of items
132
+ * @returns {string} regexp
133
+ */
105
134
  const itemsToRegexp = itemsArr => {
106
135
  if (itemsArr.length === 1) {
107
136
  return quoteMeta(itemsArr[0]);
108
137
  }
138
+ /** @type {Array<string>} */
109
139
  const finishedItems = [];
110
140
 
111
141
  // merge single char items: (a|b|c|d|ef) => ([abcd]|ef)
@@ -146,6 +176,7 @@ const itemsToRegexp = itemsArr => {
146
176
 
147
177
  // special case for 2 items with common suffix
148
178
  if (finishedItems.length === 0 && items.size === 2) {
179
+ /** @type {Iterator<string>} */
149
180
  const it = items[Symbol.iterator]();
150
181
  const a = it.next().value;
151
182
  const b = it.next().value;
@@ -11,11 +11,14 @@ const BULK_SIZE = 2000;
11
11
 
12
12
  // We are using an object instead of a Map as this will stay static during the runtime
13
13
  // so access to it can be optimized by v8
14
+ /** @type {Object<string, Map<string, string>>} */
14
15
  const digestCaches = {};
15
16
 
17
+ /** @typedef {function(): Hash} HashFactory */
18
+
16
19
  class BulkUpdateDecorator extends Hash {
17
20
  /**
18
- * @param {Hash | function(): Hash} hashOrFactory function to create a hash
21
+ * @param {Hash | HashFactory} hashOrFactory function to create a hash
19
22
  * @param {string=} hashKey key for caching
20
23
  */
21
24
  constructor(hashOrFactory, hashKey) {
@@ -43,7 +46,8 @@ class BulkUpdateDecorator extends Hash {
43
46
  typeof data !== "string" ||
44
47
  data.length > BULK_SIZE
45
48
  ) {
46
- if (this.hash === undefined) this.hash = this.hashFactory();
49
+ if (this.hash === undefined)
50
+ this.hash = /** @type {HashFactory} */ (this.hashFactory)();
47
51
  if (this.buffer.length > 0) {
48
52
  this.hash.update(this.buffer);
49
53
  this.buffer = "";
@@ -52,7 +56,8 @@ class BulkUpdateDecorator extends Hash {
52
56
  } else {
53
57
  this.buffer += data;
54
58
  if (this.buffer.length > BULK_SIZE) {
55
- if (this.hash === undefined) this.hash = this.hashFactory();
59
+ if (this.hash === undefined)
60
+ this.hash = /** @type {HashFactory} */ (this.hashFactory)();
56
61
  this.hash.update(this.buffer);
57
62
  this.buffer = "";
58
63
  }
@@ -77,7 +82,7 @@ class BulkUpdateDecorator extends Hash {
77
82
  }
78
83
  const cacheEntry = digestCache.get(buffer);
79
84
  if (cacheEntry !== undefined) return cacheEntry;
80
- this.hash = this.hashFactory();
85
+ this.hash = /** @type {HashFactory} */ (this.hashFactory)();
81
86
  }
82
87
  if (buffer.length > 0) {
83
88
  this.hash.update(buffer);
@@ -107,10 +112,13 @@ class DebugHash extends Hash {
107
112
  */
108
113
  update(data, inputEncoding) {
109
114
  if (typeof data !== "string") data = data.toString("utf-8");
110
- if (data.startsWith("debug-digest-")) {
111
- data = Buffer.from(data.slice("debug-digest-".length), "hex").toString();
115
+ const prefix = Buffer.from("@webpack-debug-digest@").toString("hex");
116
+ if (data.startsWith(prefix)) {
117
+ data = Buffer.from(data.slice(prefix.length), "hex").toString();
112
118
  }
113
- this.string += `[${data}](${new Error().stack.split("\n", 3)[2]})\n`;
119
+ this.string += `[${data}](${
120
+ /** @type {string} */ (new Error().stack).split("\n", 3)[2]
121
+ })\n`;
114
122
  return this;
115
123
  }
116
124
 
@@ -120,18 +128,22 @@ class DebugHash extends Hash {
120
128
  * @returns {string|Buffer} digest
121
129
  */
122
130
  digest(encoding) {
123
- return "debug-digest-" + Buffer.from(this.string).toString("hex");
131
+ return Buffer.from("@webpack-debug-digest@" + this.string).toString("hex");
124
132
  }
125
133
  }
126
134
 
135
+ /** @type {typeof import("crypto") | undefined} */
127
136
  let crypto = undefined;
137
+ /** @type {typeof import("./hash/xxhash64") | undefined} */
128
138
  let createXXHash64 = undefined;
139
+ /** @type {typeof import("./hash/md4") | undefined} */
129
140
  let createMd4 = undefined;
141
+ /** @type {typeof import("./hash/BatchedHash") | undefined} */
130
142
  let BatchedHash = undefined;
131
143
 
132
144
  /**
133
145
  * Creates a hash by name or function
134
- * @param {string | typeof Hash} algorithm the algorithm name or a constructor creating a hash
146
+ * @param {string | typeof Hash | undefined} algorithm the algorithm name or a constructor creating a hash
135
147
  * @returns {Hash} the hash
136
148
  */
137
149
  module.exports = algorithm => {
@@ -149,7 +161,9 @@ module.exports = algorithm => {
149
161
  BatchedHash = require("./hash/BatchedHash");
150
162
  }
151
163
  }
152
- return new BatchedHash(createXXHash64());
164
+ return new /** @type {typeof import("./hash/BatchedHash")} */ (
165
+ BatchedHash
166
+ )(createXXHash64());
153
167
  case "md4":
154
168
  if (createMd4 === undefined) {
155
169
  createMd4 = require("./hash/md4");
@@ -157,14 +171,22 @@ module.exports = algorithm => {
157
171
  BatchedHash = require("./hash/BatchedHash");
158
172
  }
159
173
  }
160
- return new BatchedHash(createMd4());
174
+ return new /** @type {typeof import("./hash/BatchedHash")} */ (
175
+ BatchedHash
176
+ )(createMd4());
161
177
  case "native-md4":
162
178
  if (crypto === undefined) crypto = require("crypto");
163
- return new BulkUpdateDecorator(() => crypto.createHash("md4"), "md4");
179
+ return new BulkUpdateDecorator(
180
+ () => /** @type {typeof import("crypto")} */ (crypto).createHash("md4"),
181
+ "md4"
182
+ );
164
183
  default:
165
184
  if (crypto === undefined) crypto = require("crypto");
166
185
  return new BulkUpdateDecorator(
167
- () => crypto.createHash(algorithm),
186
+ () =>
187
+ /** @type {typeof import("crypto")} */ (crypto).createHash(
188
+ /** @type {string} */ (algorithm)
189
+ ),
168
190
  algorithm
169
191
  );
170
192
  }