webpack 5.97.1 → 5.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -5,132 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const Hash = require("./Hash");
9
-
10
- const BULK_SIZE = 2000;
11
-
12
- // We are using an object instead of a Map as this will stay static during the runtime
13
- // so access to it can be optimized by v8
14
- /** @type {{[key: string]: Map<string, string>}} */
15
- const digestCaches = {};
16
-
17
- /** @typedef {function(): Hash} HashFactory */
18
-
19
- class BulkUpdateDecorator extends Hash {
20
- /**
21
- * @param {Hash | HashFactory} hashOrFactory function to create a hash
22
- * @param {string=} hashKey key for caching
23
- */
24
- constructor(hashOrFactory, hashKey) {
25
- super();
26
- this.hashKey = hashKey;
27
- if (typeof hashOrFactory === "function") {
28
- this.hashFactory = hashOrFactory;
29
- this.hash = undefined;
30
- } else {
31
- this.hashFactory = undefined;
32
- this.hash = hashOrFactory;
33
- }
34
- this.buffer = "";
35
- }
36
-
37
- /**
38
- * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
39
- * @param {string|Buffer} data data
40
- * @param {string=} inputEncoding data encoding
41
- * @returns {this} updated hash
42
- */
43
- update(data, inputEncoding) {
44
- if (
45
- inputEncoding !== undefined ||
46
- typeof data !== "string" ||
47
- data.length > BULK_SIZE
48
- ) {
49
- if (this.hash === undefined)
50
- this.hash = /** @type {HashFactory} */ (this.hashFactory)();
51
- if (this.buffer.length > 0) {
52
- this.hash.update(this.buffer);
53
- this.buffer = "";
54
- }
55
- this.hash.update(data, inputEncoding);
56
- } else {
57
- this.buffer += data;
58
- if (this.buffer.length > BULK_SIZE) {
59
- if (this.hash === undefined)
60
- this.hash = /** @type {HashFactory} */ (this.hashFactory)();
61
- this.hash.update(this.buffer);
62
- this.buffer = "";
63
- }
64
- }
65
- return this;
66
- }
67
-
68
- /**
69
- * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
70
- * @param {string=} encoding encoding of the return value
71
- * @returns {string|Buffer} digest
72
- */
73
- digest(encoding) {
74
- let digestCache;
75
- const buffer = this.buffer;
76
- if (this.hash === undefined) {
77
- // short data for hash, we can use caching
78
- const cacheKey = `${this.hashKey}-${encoding}`;
79
- digestCache = digestCaches[cacheKey];
80
- if (digestCache === undefined) {
81
- digestCache = digestCaches[cacheKey] = new Map();
82
- }
83
- const cacheEntry = digestCache.get(buffer);
84
- if (cacheEntry !== undefined) return cacheEntry;
85
- this.hash = /** @type {HashFactory} */ (this.hashFactory)();
86
- }
87
- if (buffer.length > 0) {
88
- this.hash.update(buffer);
89
- }
90
- const digestResult = this.hash.digest(encoding);
91
- const result =
92
- typeof digestResult === "string" ? digestResult : digestResult.toString();
93
- if (digestCache !== undefined) {
94
- digestCache.set(buffer, result);
95
- }
96
- return result;
97
- }
98
- }
99
-
100
- /* istanbul ignore next */
101
- class DebugHash extends Hash {
102
- constructor() {
103
- super();
104
- this.string = "";
105
- }
106
-
107
- /**
108
- * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
109
- * @param {string|Buffer} data data
110
- * @param {string=} inputEncoding data encoding
111
- * @returns {this} updated hash
112
- */
113
- update(data, inputEncoding) {
114
- if (typeof data !== "string") data = data.toString("utf-8");
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();
118
- }
119
- this.string += `[${data}](${
120
- /** @type {string} */ (new Error().stack).split("\n", 3)[2]
121
- })\n`;
122
- return this;
123
- }
124
-
125
- /**
126
- * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
127
- * @param {string=} encoding encoding of the return value
128
- * @returns {string|Buffer} digest
129
- */
130
- digest(encoding) {
131
- return Buffer.from(`@webpack-debug-digest@${this.string}`).toString("hex");
132
- }
133
- }
8
+ /** @typedef {import("./Hash")} Hash */
9
+ /** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
134
10
 
135
11
  /** @type {typeof import("crypto") | undefined} */
136
12
  let crypto;
@@ -138,24 +14,32 @@ let crypto;
138
14
  let createXXHash64;
139
15
  /** @type {typeof import("./hash/md4") | undefined} */
140
16
  let createMd4;
17
+ /** @type {typeof import("./hash/DebugHash") | undefined} */
18
+ let DebugHash;
141
19
  /** @type {typeof import("./hash/BatchedHash") | undefined} */
142
20
  let BatchedHash;
143
-
144
- /** @typedef {string | typeof Hash} Algorithm */
21
+ /** @type {typeof import("./hash/BulkUpdateHash") | undefined} */
22
+ let BulkUpdateHash;
145
23
 
146
24
  /**
147
25
  * Creates a hash by name or function
148
- * @param {Algorithm} algorithm the algorithm name or a constructor creating a hash
26
+ * @param {HashFunction} algorithm the algorithm name or a constructor creating a hash
149
27
  * @returns {Hash} the hash
150
28
  */
151
- module.exports = algorithm => {
29
+ module.exports = (algorithm) => {
152
30
  if (typeof algorithm === "function") {
31
+ if (BulkUpdateHash === undefined) {
32
+ BulkUpdateHash = require("./hash/BulkUpdateHash");
33
+ }
153
34
  // eslint-disable-next-line new-cap
154
- return new BulkUpdateDecorator(() => new algorithm());
35
+ return new BulkUpdateHash(() => new algorithm());
155
36
  }
156
37
  switch (algorithm) {
157
38
  // TODO add non-cryptographic algorithm here
158
39
  case "debug":
40
+ if (DebugHash === undefined) {
41
+ DebugHash = require("./hash/DebugHash");
42
+ }
159
43
  return new DebugHash();
160
44
  case "xxhash64":
161
45
  if (createXXHash64 === undefined) {
@@ -179,15 +63,28 @@ module.exports = algorithm => {
179
63
  )(createMd4());
180
64
  case "native-md4":
181
65
  if (crypto === undefined) crypto = require("crypto");
182
- return new BulkUpdateDecorator(
183
- () => /** @type {typeof import("crypto")} */ (crypto).createHash("md4"),
66
+ if (BulkUpdateHash === undefined) {
67
+ BulkUpdateHash = require("./hash/BulkUpdateHash");
68
+ }
69
+ return new BulkUpdateHash(
70
+ () =>
71
+ /** @type {Hash} */ (
72
+ /** @type {typeof import("crypto")} */
73
+ (crypto).createHash("md4")
74
+ ),
184
75
  "md4"
185
76
  );
186
77
  default:
187
78
  if (crypto === undefined) crypto = require("crypto");
188
- return new BulkUpdateDecorator(
79
+ if (BulkUpdateHash === undefined) {
80
+ BulkUpdateHash = require("./hash/BulkUpdateHash");
81
+ }
82
+ return new BulkUpdateHash(
189
83
  () =>
190
- /** @type {typeof import("crypto")} */ (crypto).createHash(algorithm),
84
+ /** @type {Hash} */ (
85
+ /** @type {typeof import("crypto")} */
86
+ (crypto).createHash(algorithm)
87
+ ),
191
88
  algorithm
192
89
  );
193
90
  }
@@ -0,0 +1,39 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ // data URL scheme: "data:text/javascript;charset=utf-8;base64,some-string"
9
+ // http://www.ietf.org/rfc/rfc2397.txt
10
+ const URIRegEx = /^data:([^;,]+)?((?:;[^;,]+)*?)(?:;(base64)?)?,(.*)$/i;
11
+
12
+ /**
13
+ * @param {string} uri data URI
14
+ * @returns {Buffer | null} decoded data
15
+ */
16
+ const decodeDataURI = (uri) => {
17
+ const match = URIRegEx.exec(uri);
18
+ if (!match) return null;
19
+
20
+ const isBase64 = match[3];
21
+ const body = match[4];
22
+
23
+ if (isBase64) {
24
+ return Buffer.from(body, "base64");
25
+ }
26
+
27
+ // CSS allows to use `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" style="stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px" /></svg>`
28
+ // so we return original body if we can't `decodeURIComponent`
29
+ try {
30
+ return Buffer.from(decodeURIComponent(body), "ascii");
31
+ } catch (_) {
32
+ return Buffer.from(body, "ascii");
33
+ }
34
+ };
35
+
36
+ module.exports = {
37
+ URIRegEx,
38
+ decodeDataURI
39
+ };
@@ -7,7 +7,7 @@
7
7
 
8
8
  const util = require("util");
9
9
 
10
- /** @type {Map<string, Function>} */
10
+ /** @type {Map<string, () => void>} */
11
11
  const deprecationCache = new Map();
12
12
 
13
13
  /**
@@ -23,7 +23,7 @@ const deprecationCache = new Map();
23
23
  /**
24
24
  * @param {string} message deprecation message
25
25
  * @param {string} code deprecation code
26
- * @returns {Function} function to trigger deprecation
26
+ * @returns {() => void} function to trigger deprecation
27
27
  */
28
28
  const createDeprecation = (message, code) => {
29
29
  const cached = deprecationCache.get(message);
@@ -37,6 +37,9 @@ const createDeprecation = (message, code) => {
37
37
  return fn;
38
38
  };
39
39
 
40
+ /** @typedef {"concat" | "entry" | "filter" | "find" | "findIndex" | "includes" | "indexOf" | "join" | "lastIndexOf" | "map" | "reduce" | "reduceRight" | "slice" | "some"} COPY_METHODS_NAMES */
41
+
42
+ /** @type {COPY_METHODS_NAMES[]} */
40
43
  const COPY_METHODS = [
41
44
  "concat",
42
45
  "entry",
@@ -54,6 +57,9 @@ const COPY_METHODS = [
54
57
  "some"
55
58
  ];
56
59
 
60
+ /** @typedef {"copyWithin" | "entries" | "fill" | "keys" | "pop" | "reverse" | "shift" | "splice" | "sort" | "unshift"} DISABLED_METHODS_NAMES */
61
+
62
+ /** @type {DISABLED_METHODS_NAMES[]} */
57
63
  const DISABLED_METHODS = [
58
64
  "copyWithin",
59
65
  "entries",
@@ -68,31 +74,38 @@ const DISABLED_METHODS = [
68
74
  ];
69
75
 
70
76
  /**
71
- * @param {any} set new set
77
+ * @template T
78
+ * @typedef {Set<T> & { [Symbol.isConcatSpreadable]: boolean } & { push: (...items: T[]) => void, length?: number } & { [P in DISABLED_METHODS_NAMES]: () => void } & { [P in COPY_METHODS_NAMES]: P extends keyof Array<T> ? () => Pick<Array<T>, P> : never }} SetWithDeprecatedArrayMethods
79
+ */
80
+
81
+ /**
82
+ * @template T
83
+ * @param {Set<T>} set new set
72
84
  * @param {string} name property name
73
85
  * @returns {void}
74
86
  */
75
87
  module.exports.arrayToSetDeprecation = (set, name) => {
76
88
  for (const method of COPY_METHODS) {
77
- if (set[method]) continue;
89
+ if (/** @type {SetWithDeprecatedArrayMethods<T>} */ (set)[method]) continue;
78
90
  const d = createDeprecation(
79
91
  `${name} was changed from Array to Set (using Array method '${method}' is deprecated)`,
80
92
  "ARRAY_TO_SET"
81
93
  );
82
- /**
83
- * @deprecated
84
- * @this {Set<any>}
85
- * @returns {number} count
86
- */
87
- set[method] = function () {
88
- d();
89
- const array = Array.from(this);
90
- return Array.prototype[/** @type {keyof COPY_METHODS} */ (method)].apply(
91
- array,
92
- // eslint-disable-next-line prefer-rest-params
93
- arguments
94
- );
95
- };
94
+ /** @type {EXPECTED_ANY} */
95
+ (set)[method] =
96
+ // eslint-disable-next-line func-names
97
+ function () {
98
+ d();
99
+ // eslint-disable-next-line unicorn/prefer-spread
100
+ const array = Array.from(this);
101
+ return Array.prototype[
102
+ /** @type {keyof COPY_METHODS} */ (method)
103
+ ].apply(
104
+ array,
105
+ // eslint-disable-next-line prefer-rest-params
106
+ arguments
107
+ );
108
+ };
96
109
  }
97
110
  const dPush = createDeprecation(
98
111
  `${name} was changed from Array to Set (using Array method 'push' is deprecated)`,
@@ -106,22 +119,20 @@ module.exports.arrayToSetDeprecation = (set, name) => {
106
119
  `${name} was changed from Array to Set (indexing Array is deprecated)`,
107
120
  "ARRAY_TO_SET_INDEXER"
108
121
  );
109
- /**
110
- * @deprecated
111
- * @this {Set<any>}
112
- * @returns {number} count
113
- */
114
- set.push = function () {
122
+ /** @type {SetWithDeprecatedArrayMethods<T>} */
123
+ (set).push = function push() {
115
124
  dPush();
116
- // eslint-disable-next-line prefer-rest-params
125
+ // eslint-disable-next-line prefer-rest-params, unicorn/prefer-spread
117
126
  for (const item of Array.from(arguments)) {
118
127
  this.add(item);
119
128
  }
120
129
  return this.size;
121
130
  };
122
131
  for (const method of DISABLED_METHODS) {
123
- if (set[method]) continue;
124
- set[method] = () => {
132
+ if (/** @type {SetWithDeprecatedArrayMethods<T>} */ (set)[method]) continue;
133
+
134
+ /** @type {SetWithDeprecatedArrayMethods<T>} */
135
+ (set)[method] = () => {
125
136
  throw new Error(
126
137
  `${name} was changed from Array to Set (using Array method '${method}' is not possible)`
127
138
  );
@@ -129,12 +140,12 @@ module.exports.arrayToSetDeprecation = (set, name) => {
129
140
  }
130
141
  /**
131
142
  * @param {number} index index
132
- * @returns {any} value
143
+ * @returns {() => T | undefined} value
133
144
  */
134
- const createIndexGetter = index => {
145
+ const createIndexGetter = (index) => {
135
146
  /**
136
- * @this {Set<any>} a Set
137
- * @returns {any} the value at this location
147
+ * @this {Set<T>} a Set
148
+ * @returns {T | undefined} the value at this location
138
149
  */
139
150
  // eslint-disable-next-line func-style
140
151
  const fn = function () {
@@ -149,7 +160,7 @@ module.exports.arrayToSetDeprecation = (set, name) => {
149
160
  /**
150
161
  * @param {number} index index
151
162
  */
152
- const defineIndexGetter = index => {
163
+ const defineIndexGetter = (index) => {
153
164
  Object.defineProperty(set, index, {
154
165
  get: createIndexGetter(index),
155
166
  set(value) {
@@ -176,15 +187,16 @@ module.exports.arrayToSetDeprecation = (set, name) => {
176
187
  );
177
188
  }
178
189
  });
179
- set[Symbol.isConcatSpreadable] = true;
190
+ /** @type {SetWithDeprecatedArrayMethods<T>} */
191
+ (set)[Symbol.isConcatSpreadable] = true;
180
192
  };
181
193
 
182
194
  /**
183
195
  * @template T
184
196
  * @param {string} name name
185
- * @returns {{ new <T = any>(values?: readonly T[] | null): SetDeprecatedArray<T> }} SetDeprecatedArray
197
+ * @returns {{ new <T = EXPECTED_ANY>(values?: ReadonlyArray<T> | null): SetDeprecatedArray<T> }} SetDeprecatedArray
186
198
  */
187
- module.exports.createArrayToSetDeprecationSet = name => {
199
+ module.exports.createArrayToSetDeprecationSet = (name) => {
188
200
  let initialized = false;
189
201
 
190
202
  /**
@@ -192,14 +204,15 @@ module.exports.createArrayToSetDeprecationSet = name => {
192
204
  */
193
205
  class SetDeprecatedArray extends Set {
194
206
  /**
195
- * @param {readonly T[] | null=} items items
207
+ * @param {ReadonlyArray<T> | null=} items items
196
208
  */
197
209
  constructor(items) {
198
210
  super(items);
199
211
  if (!initialized) {
200
212
  initialized = true;
201
213
  module.exports.arrayToSetDeprecation(
202
- SetDeprecatedArray.prototype,
214
+ /** @type {SetWithDeprecatedArrayMethods<T>} */
215
+ (SetDeprecatedArray.prototype),
203
216
  name
204
217
  );
205
218
  }
@@ -210,75 +223,17 @@ module.exports.createArrayToSetDeprecationSet = name => {
210
223
 
211
224
  /**
212
225
  * @template {object} T
213
- * @param {T} obj object
214
- * @param {string} name property name
215
- * @param {string} code deprecation code
216
- * @param {string} note additional note
217
- * @returns {Proxy<T>} frozen object with deprecation when modifying
226
+ * @param {T} fakeHook fake hook implementation
227
+ * @param {string=} message deprecation message (not deprecated when unset)
228
+ * @param {string=} code deprecation code (not deprecated when unset)
229
+ * @returns {FakeHook<T>} fake hook which redirects
218
230
  */
219
- module.exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
220
- const message = `${name} will be frozen in future, all modifications are deprecated.${
221
- note && `\n${note}`
222
- }`;
223
- return /** @type {Proxy<T>} */ (
224
- new Proxy(/** @type {object} */ (obj), {
225
- set: util.deprecate(
226
- /**
227
- * @param {T} target target
228
- * @param {string | symbol} property property
229
- * @param {any} value value
230
- * @param {any} receiver receiver
231
- * @returns {boolean} result
232
- */
233
- (target, property, value, receiver) =>
234
- Reflect.set(
235
- /** @type {object} */ (target),
236
- property,
237
- value,
238
- receiver
239
- ),
240
- message,
241
- code
242
- ),
243
- defineProperty: util.deprecate(
244
- /**
245
- * @param {T} target target
246
- * @param {string | symbol} property property
247
- * @param {PropertyDescriptor} descriptor descriptor
248
- * @returns {boolean} result
249
- */
250
- (target, property, descriptor) =>
251
- Reflect.defineProperty(
252
- /** @type {object} */ (target),
253
- property,
254
- descriptor
255
- ),
256
- message,
257
- code
258
- ),
259
- deleteProperty: util.deprecate(
260
- /**
261
- * @param {T} target target
262
- * @param {string | symbol} property property
263
- * @returns {boolean} result
264
- */
265
- (target, property) =>
266
- Reflect.deleteProperty(/** @type {object} */ (target), property),
267
- message,
268
- code
269
- ),
270
- setPrototypeOf: util.deprecate(
271
- /**
272
- * @param {T} target target
273
- * @param {object | null} proto proto
274
- * @returns {boolean} result
275
- */
276
- (target, proto) =>
277
- Reflect.setPrototypeOf(/** @type {object} */ (target), proto),
278
- message,
279
- code
280
- )
281
- })
231
+ module.exports.createFakeHook = (fakeHook, message, code) => {
232
+ if (message && code) {
233
+ fakeHook = deprecateAllProperties(fakeHook, message, code);
234
+ }
235
+ return Object.freeze(
236
+ Object.assign(fakeHook, { _fakeHook: /** @type {true} */ (true) })
282
237
  );
283
238
  };
284
239
 
@@ -318,7 +273,7 @@ const deprecateAllProperties = (obj, message, code) => {
318
273
  * @param {T} v value
319
274
  * @returns {T} result
320
275
  */
321
- v => (value = v),
276
+ (v) => (value = v),
322
277
  message,
323
278
  code
324
279
  )
@@ -328,20 +283,68 @@ const deprecateAllProperties = (obj, message, code) => {
328
283
  }
329
284
  return /** @type {T} */ (newObj);
330
285
  };
286
+
331
287
  module.exports.deprecateAllProperties = deprecateAllProperties;
332
288
 
333
289
  /**
334
290
  * @template {object} T
335
- * @param {T} fakeHook fake hook implementation
336
- * @param {string=} message deprecation message (not deprecated when unset)
337
- * @param {string=} code deprecation code (not deprecated when unset)
338
- * @returns {FakeHook<T>} fake hook which redirects
291
+ * @param {T} obj object
292
+ * @param {string} name property name
293
+ * @param {string} code deprecation code
294
+ * @param {string} note additional note
295
+ * @returns {T} frozen object with deprecation when modifying
339
296
  */
340
- module.exports.createFakeHook = (fakeHook, message, code) => {
341
- if (message && code) {
342
- fakeHook = deprecateAllProperties(fakeHook, message, code);
343
- }
344
- return Object.freeze(
345
- Object.assign(fakeHook, { _fakeHook: /** @type {true} */ (true) })
297
+ module.exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
298
+ const message = `${name} will be frozen in future, all modifications are deprecated.${
299
+ note && `\n${note}`
300
+ }`;
301
+ return /** @type {T} */ (
302
+ new Proxy(obj, {
303
+ set: util.deprecate(
304
+ /**
305
+ * @param {object} target target
306
+ * @param {string | symbol} property property
307
+ * @param {EXPECTED_ANY} value value
308
+ * @param {EXPECTED_ANY} receiver receiver
309
+ * @returns {boolean} result
310
+ */
311
+ (target, property, value, receiver) =>
312
+ Reflect.set(target, property, value, receiver),
313
+ message,
314
+ code
315
+ ),
316
+ defineProperty: util.deprecate(
317
+ /**
318
+ * @param {object} target target
319
+ * @param {string | symbol} property property
320
+ * @param {PropertyDescriptor} descriptor descriptor
321
+ * @returns {boolean} result
322
+ */
323
+ (target, property, descriptor) =>
324
+ Reflect.defineProperty(target, property, descriptor),
325
+ message,
326
+ code
327
+ ),
328
+ deleteProperty: util.deprecate(
329
+ /**
330
+ * @param {object} target target
331
+ * @param {string | symbol} property property
332
+ * @returns {boolean} result
333
+ */
334
+ (target, property) => Reflect.deleteProperty(target, property),
335
+ message,
336
+ code
337
+ ),
338
+ setPrototypeOf: util.deprecate(
339
+ /**
340
+ * @param {object} target target
341
+ * @param {EXPECTED_OBJECT | null} proto proto
342
+ * @returns {boolean} result
343
+ */
344
+ (target, proto) => Reflect.setPrototypeOf(target, proto),
345
+ message,
346
+ code
347
+ )
348
+ })
346
349
  );
347
350
  };