webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -5,12 +5,18 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const quoteMeta = str => {
9
- return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
10
- };
8
+ /**
9
+ * @param {string} str string
10
+ * @returns {string} quoted meta
11
+ */
12
+ const quoteMeta = str => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
11
13
 
14
+ /**
15
+ * @param {string} str string
16
+ * @returns {string} string
17
+ */
12
18
  const toSimpleString = str => {
13
- if (`${+str}` === str) {
19
+ if (`${Number(str)}` === str) {
14
20
  return str;
15
21
  }
16
22
  return JSON.stringify(str);
@@ -18,7 +24,7 @@ const toSimpleString = str => {
18
24
 
19
25
  /**
20
26
  * @param {Record<string|number, boolean>} map value map
21
- * @returns {true|false|function(string): string} true/false, when unconditionally true/false, or a template function to determine the value at runtime
27
+ * @returns {boolean|(function(string): string)} true/false, when unconditionally true/false, or a template function to determine the value at runtime
22
28
  */
23
29
  const compileBooleanMatcher = map => {
24
30
  const positiveItems = Object.keys(map).filter(i => map[i]);
@@ -44,24 +50,32 @@ const compileBooleanMatcherFromLists = (positiveItems, negativeItems) => {
44
50
  const negativeRegexp = itemsToRegexp(negativeItems);
45
51
  if (positiveRegexp.length <= negativeRegexp.length) {
46
52
  return value => `/^${positiveRegexp}$/.test(${value})`;
47
- } else {
48
- return value => `!/^${negativeRegexp}$/.test(${value})`;
49
53
  }
54
+ return value => `!/^${negativeRegexp}$/.test(${value})`;
50
55
  };
51
56
 
57
+ /**
58
+ * @param {Set<string>} itemsSet items set
59
+ * @param {(str: string) => string | false} getKey get key function
60
+ * @param {(str: Array<string>) => boolean} condition condition
61
+ * @returns {Array<Array<string>>} list of common items
62
+ */
52
63
  const popCommonItems = (itemsSet, getKey, condition) => {
64
+ /** @type {Map<string, Array<string>>} */
53
65
  const map = new Map();
54
66
  for (const item of itemsSet) {
55
67
  const key = getKey(item);
56
68
  if (key) {
57
69
  let list = map.get(key);
58
70
  if (list === undefined) {
71
+ /** @type {Array<string>} */
59
72
  list = [];
60
73
  map.set(key, list);
61
74
  }
62
75
  list.push(item);
63
76
  }
64
77
  }
78
+ /** @type {Array<Array<string>>} */
65
79
  const result = [];
66
80
  for (const list of map.values()) {
67
81
  if (condition(list)) {
@@ -74,6 +88,10 @@ const popCommonItems = (itemsSet, getKey, condition) => {
74
88
  return result;
75
89
  };
76
90
 
91
+ /**
92
+ * @param {Array<string>} items items
93
+ * @returns {string} common prefix
94
+ */
77
95
  const getCommonPrefix = items => {
78
96
  let prefix = items[0];
79
97
  for (let i = 1; i < items.length; i++) {
@@ -88,6 +106,10 @@ const getCommonPrefix = items => {
88
106
  return prefix;
89
107
  };
90
108
 
109
+ /**
110
+ * @param {Array<string>} items items
111
+ * @returns {string} common suffix
112
+ */
91
113
  const getCommonSuffix = items => {
92
114
  let suffix = items[0];
93
115
  for (let i = 1; i < items.length; i++) {
@@ -102,10 +124,15 @@ const getCommonSuffix = items => {
102
124
  return suffix;
103
125
  };
104
126
 
127
+ /**
128
+ * @param {Array<string>} itemsArr array of items
129
+ * @returns {string} regexp
130
+ */
105
131
  const itemsToRegexp = itemsArr => {
106
132
  if (itemsArr.length === 1) {
107
133
  return quoteMeta(itemsArr[0]);
108
134
  }
135
+ /** @type {Array<string>} */
109
136
  const finishedItems = [];
110
137
 
111
138
  // merge single char items: (a|b|c|d|ef) => ([abcd]|ef)
@@ -146,6 +173,7 @@ const itemsToRegexp = itemsArr => {
146
173
 
147
174
  // special case for 2 items with common suffix
148
175
  if (finishedItems.length === 0 && items.size === 2) {
176
+ /** @type {Iterator<string>} */
149
177
  const it = items[Symbol.iterator]();
150
178
  const a = it.next().value;
151
179
  const b = it.next().value;
@@ -0,0 +1,126 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Gengkun He @ahabhgk
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
9
+
10
+ /**
11
+ * @param {string} input input
12
+ * @param {CssGeneratorExportsConvention | undefined} convention convention
13
+ * @returns {string[]} results
14
+ */
15
+ module.exports.cssExportConvention = (input, convention) => {
16
+ const set = new Set();
17
+ if (typeof convention === "function") {
18
+ set.add(convention(input));
19
+ } else {
20
+ switch (convention) {
21
+ case "camel-case": {
22
+ set.add(input);
23
+ set.add(module.exports.camelCase(input));
24
+ break;
25
+ }
26
+ case "camel-case-only": {
27
+ set.add(module.exports.camelCase(input));
28
+ break;
29
+ }
30
+ case "dashes": {
31
+ set.add(input);
32
+ set.add(module.exports.dashesCamelCase(input));
33
+ break;
34
+ }
35
+ case "dashes-only": {
36
+ set.add(module.exports.dashesCamelCase(input));
37
+ break;
38
+ }
39
+ case "as-is": {
40
+ set.add(input);
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ return Array.from(set);
46
+ };
47
+
48
+ // Copy from css-loader
49
+ /**
50
+ * @param {string} input input
51
+ * @returns {string} result
52
+ */
53
+ module.exports.dashesCamelCase = input =>
54
+ input.replace(/-+(\w)/g, (match, firstLetter) => firstLetter.toUpperCase());
55
+
56
+ // Copy from css-loader
57
+ /**
58
+ * @param {string} input input
59
+ * @returns {string} result
60
+ */
61
+ module.exports.camelCase = input => {
62
+ let result = input.trim();
63
+
64
+ if (result.length === 0) {
65
+ return "";
66
+ }
67
+
68
+ if (result.length === 1) {
69
+ return result.toLowerCase();
70
+ }
71
+
72
+ const hasUpperCase = result !== result.toLowerCase();
73
+
74
+ if (hasUpperCase) {
75
+ result = preserveCamelCase(result);
76
+ }
77
+
78
+ return result
79
+ .replace(/^[_.\- ]+/, "")
80
+ .toLowerCase()
81
+ .replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => p1.toUpperCase())
82
+ .replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, m => m.toUpperCase());
83
+ };
84
+
85
+ // Copy from css-loader
86
+ /**
87
+ * @param {string} string string
88
+ * @returns {string} result
89
+ */
90
+ const preserveCamelCase = string => {
91
+ let result = string;
92
+ let isLastCharLower = false;
93
+ let isLastCharUpper = false;
94
+ let isLastLastCharUpper = false;
95
+
96
+ for (let i = 0; i < result.length; i++) {
97
+ const character = result[i];
98
+
99
+ if (isLastCharLower && /[\p{Lu}]/u.test(character)) {
100
+ result = `${result.slice(0, i)}-${result.slice(i)}`;
101
+ isLastCharLower = false;
102
+ isLastLastCharUpper = isLastCharUpper;
103
+ isLastCharUpper = true;
104
+ i += 1;
105
+ } else if (
106
+ isLastCharUpper &&
107
+ isLastLastCharUpper &&
108
+ /[\p{Ll}]/u.test(character)
109
+ ) {
110
+ result = `${result.slice(0, i - 1)}-${result.slice(i - 1)}`;
111
+ isLastLastCharUpper = isLastCharUpper;
112
+ isLastCharUpper = false;
113
+ isLastCharLower = true;
114
+ } else {
115
+ isLastCharLower =
116
+ character.toLowerCase() === character &&
117
+ character.toUpperCase() !== character;
118
+ isLastLastCharUpper = isLastCharUpper;
119
+ isLastCharUpper =
120
+ character.toUpperCase() === character &&
121
+ character.toLowerCase() !== character;
122
+ }
123
+ }
124
+
125
+ return result;
126
+ };
@@ -9,11 +9,18 @@ const memoize = require("./memoize");
9
9
 
10
10
  const getValidate = memoize(() => require("schema-utils").validate);
11
11
 
12
- const createSchemaValidation = (check = v => false, getSchema, options) => {
12
+ const createSchemaValidation = (check, getSchema, options) => {
13
13
  getSchema = memoize(getSchema);
14
14
  return value => {
15
- if (!check(value)) {
15
+ if (check && !check(value)) {
16
16
  getValidate()(getSchema(), value, options);
17
+ if (check) {
18
+ require("util").deprecate(
19
+ () => {},
20
+ "webpack bug: Pre-compiled schema reports error while real schema is happy. This has performance drawbacks.",
21
+ "DEP_WEBPACK_PRE_COMPILED_SCHEMA_INVALID"
22
+ )();
23
+ }
17
24
  }
18
25
  };
19
26
  };
@@ -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 {{[key: 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,21 +128,29 @@ 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
 
127
- let crypto = undefined;
128
- let createXXHash64 = undefined;
129
- let BatchedHash = undefined;
135
+ /** @type {typeof import("crypto") | undefined} */
136
+ let crypto;
137
+ /** @type {typeof import("./hash/xxhash64") | undefined} */
138
+ let createXXHash64;
139
+ /** @type {typeof import("./hash/md4") | undefined} */
140
+ let createMd4;
141
+ /** @type {typeof import("./hash/BatchedHash") | undefined} */
142
+ let BatchedHash;
143
+
144
+ /** @typedef {string | typeof Hash} Algorithm */
130
145
 
131
146
  /**
132
147
  * Creates a hash by name or function
133
- * @param {string | typeof Hash} algorithm the algorithm name or a constructor creating a hash
148
+ * @param {Algorithm} algorithm the algorithm name or a constructor creating a hash
134
149
  * @returns {Hash} the hash
135
150
  */
136
151
  module.exports = algorithm => {
137
152
  if (typeof algorithm === "function") {
153
+ // eslint-disable-next-line new-cap
138
154
  return new BulkUpdateDecorator(() => new algorithm());
139
155
  }
140
156
  switch (algorithm) {
@@ -148,11 +164,30 @@ module.exports = algorithm => {
148
164
  BatchedHash = require("./hash/BatchedHash");
149
165
  }
150
166
  }
151
- return new BatchedHash(createXXHash64());
167
+ return new /** @type {typeof import("./hash/BatchedHash")} */ (
168
+ BatchedHash
169
+ )(createXXHash64());
170
+ case "md4":
171
+ if (createMd4 === undefined) {
172
+ createMd4 = require("./hash/md4");
173
+ if (BatchedHash === undefined) {
174
+ BatchedHash = require("./hash/BatchedHash");
175
+ }
176
+ }
177
+ return new /** @type {typeof import("./hash/BatchedHash")} */ (
178
+ BatchedHash
179
+ )(createMd4());
180
+ case "native-md4":
181
+ if (crypto === undefined) crypto = require("crypto");
182
+ return new BulkUpdateDecorator(
183
+ () => /** @type {typeof import("crypto")} */ (crypto).createHash("md4"),
184
+ "md4"
185
+ );
152
186
  default:
153
187
  if (crypto === undefined) crypto = require("crypto");
154
188
  return new BulkUpdateDecorator(
155
- () => crypto.createHash(algorithm),
189
+ () =>
190
+ /** @type {typeof import("crypto")} */ (crypto).createHash(algorithm),
156
191
  algorithm
157
192
  );
158
193
  }
@@ -11,11 +11,14 @@ const util = require("util");
11
11
  const deprecationCache = new Map();
12
12
 
13
13
  /**
14
- * @typedef {Object} FakeHookMarker
14
+ * @typedef {object} FakeHookMarker
15
15
  * @property {true} _fakeHook it's a fake hook
16
16
  */
17
17
 
18
- /** @template T @typedef {T & FakeHookMarker} FakeHook<T> */
18
+ /**
19
+ * @template T
20
+ * @typedef {T & FakeHookMarker} FakeHook<T>
21
+ */
19
22
 
20
23
  /**
21
24
  * @param {string} message deprecation message
@@ -28,7 +31,7 @@ const createDeprecation = (message, code) => {
28
31
  const fn = util.deprecate(
29
32
  () => {},
30
33
  message,
31
- "DEP_WEBPACK_DEPRECATION_" + code
34
+ `DEP_WEBPACK_DEPRECATION_${code}`
32
35
  );
33
36
  deprecationCache.set(message, fn);
34
37
  return fn;
@@ -69,7 +72,7 @@ const DISABLED_METHODS = [
69
72
  * @param {string} name property name
70
73
  * @returns {void}
71
74
  */
72
- exports.arrayToSetDeprecation = (set, name) => {
75
+ module.exports.arrayToSetDeprecation = (set, name) => {
73
76
  for (const method of COPY_METHODS) {
74
77
  if (set[method]) continue;
75
78
  const d = createDeprecation(
@@ -78,13 +81,17 @@ exports.arrayToSetDeprecation = (set, name) => {
78
81
  );
79
82
  /**
80
83
  * @deprecated
81
- * @this {Set}
84
+ * @this {Set<any>}
82
85
  * @returns {number} count
83
86
  */
84
87
  set[method] = function () {
85
88
  d();
86
89
  const array = Array.from(this);
87
- return Array.prototype[method].apply(array, arguments);
90
+ return Array.prototype[/** @type {keyof COPY_METHODS} */ (method)].apply(
91
+ array,
92
+ // eslint-disable-next-line prefer-rest-params
93
+ arguments
94
+ );
88
95
  };
89
96
  }
90
97
  const dPush = createDeprecation(
@@ -101,11 +108,12 @@ exports.arrayToSetDeprecation = (set, name) => {
101
108
  );
102
109
  /**
103
110
  * @deprecated
104
- * @this {Set}
111
+ * @this {Set<any>}
105
112
  * @returns {number} count
106
113
  */
107
114
  set.push = function () {
108
115
  dPush();
116
+ // eslint-disable-next-line prefer-rest-params
109
117
  for (const item of Array.from(arguments)) {
110
118
  this.add(item);
111
119
  }
@@ -119,21 +127,28 @@ exports.arrayToSetDeprecation = (set, name) => {
119
127
  );
120
128
  };
121
129
  }
130
+ /**
131
+ * @param {number} index index
132
+ * @returns {any} value
133
+ */
122
134
  const createIndexGetter = index => {
123
135
  /**
124
- * @this {Set} a Set
136
+ * @this {Set<any>} a Set
125
137
  * @returns {any} the value at this location
126
138
  */
139
+ // eslint-disable-next-line func-style
127
140
  const fn = function () {
128
141
  dIndexer();
129
142
  let i = 0;
130
143
  for (const item of this) {
131
144
  if (i++ === index) return item;
132
145
  }
133
- return undefined;
134
146
  };
135
147
  return fn;
136
148
  };
149
+ /**
150
+ * @param {number} index index
151
+ */
137
152
  const defineIndexGetter = index => {
138
153
  Object.defineProperty(set, index, {
139
154
  get: createIndexGetter(index),
@@ -164,13 +179,31 @@ exports.arrayToSetDeprecation = (set, name) => {
164
179
  set[Symbol.isConcatSpreadable] = true;
165
180
  };
166
181
 
167
- exports.createArrayToSetDeprecationSet = name => {
168
- class SetDeprecatedArray extends Set {}
169
- exports.arrayToSetDeprecation(SetDeprecatedArray.prototype, name);
182
+ module.exports.createArrayToSetDeprecationSet = name => {
183
+ let initialized = false;
184
+ class SetDeprecatedArray extends Set {
185
+ constructor(items) {
186
+ super(items);
187
+ if (!initialized) {
188
+ initialized = true;
189
+ module.exports.arrayToSetDeprecation(
190
+ SetDeprecatedArray.prototype,
191
+ name
192
+ );
193
+ }
194
+ }
195
+ }
170
196
  return SetDeprecatedArray;
171
197
  };
172
198
 
173
- exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
199
+ /**
200
+ * @param {object} obj object
201
+ * @param {string} name property name
202
+ * @param {string} code deprecation code
203
+ * @param {string} note additional note
204
+ * @returns {Proxy<object>} frozen object with deprecation when modifying
205
+ */
206
+ module.exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
174
207
  const message = `${name} will be frozen in future, all modifications are deprecated.${
175
208
  note && `\n${note}`
176
209
  }`;
@@ -237,7 +270,7 @@ const deprecateAllProperties = (obj, message, code) => {
237
270
  }
238
271
  return /** @type {T} */ (newObj);
239
272
  };
240
- exports.deprecateAllProperties = deprecateAllProperties;
273
+ module.exports.deprecateAllProperties = deprecateAllProperties;
241
274
 
242
275
  /**
243
276
  * @template T
@@ -246,7 +279,7 @@ exports.deprecateAllProperties = deprecateAllProperties;
246
279
  * @param {string=} code deprecation code (not deprecated when unset)
247
280
  * @returns {FakeHook<T>} fake hook which redirects
248
281
  */
249
- exports.createFakeHook = (fakeHook, message, code) => {
282
+ module.exports.createFakeHook = (fakeHook, message, code) => {
250
283
  if (message && code) {
251
284
  fakeHook = deprecateAllProperties(fakeHook, message, code);
252
285
  }