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
@@ -4,16 +4,32 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class ArraySerializer {
8
- serialize(array, { write }) {
9
- write(array.length);
10
- for (const item of array) write(item);
11
+ /**
12
+ * @template T
13
+ * @param {T[]} array array
14
+ * @param {ObjectSerializerContext} context context
15
+ */
16
+ serialize(array, context) {
17
+ context.write(array.length);
18
+ for (const item of array) context.write(item);
11
19
  }
12
- deserialize({ read }) {
13
- const length = read();
20
+
21
+ /**
22
+ * @template T
23
+ * @param {ObjectDeserializerContext} context context
24
+ * @returns {T[]} array
25
+ */
26
+ deserialize(context) {
27
+ /** @type {number} */
28
+ const length = context.read();
29
+ /** @type {T[]} */
14
30
  const array = [];
15
31
  for (let i = 0; i < length; i++) {
16
- array.push(read());
32
+ array.push(context.read());
17
33
  }
18
34
  return array;
19
35
  }
@@ -21,6 +21,9 @@ Section -> NullsSection |
21
21
  I32NumbersSection |
22
22
  I8NumbersSection |
23
23
  ShortStringSection |
24
+ BigIntSection |
25
+ I32BigIntSection |
26
+ I8BigIntSection
24
27
  StringSection |
25
28
  BufferSection |
26
29
  NopSection
@@ -39,6 +42,9 @@ ShortStringSection -> ShortStringSectionHeaderByte ascii-byte*
39
42
  StringSection -> StringSectionHeaderByte i32:length utf8-byte*
40
43
  BufferSection -> BufferSectionHeaderByte i32:length byte*
41
44
  NopSection --> NopSectionHeaderByte
45
+ BigIntSection -> BigIntSectionHeaderByte i32:length ascii-byte*
46
+ I32BigIntSection -> I32BigIntSectionHeaderByte i32
47
+ I8BigIntSection -> I8BigIntSectionHeaderByte i8
42
48
 
43
49
  ShortStringSectionHeaderByte -> 0b1nnn_nnnn (n:length)
44
50
 
@@ -58,6 +64,9 @@ BooleansCountAndBitsByte ->
58
64
  StringSectionHeaderByte -> 0b0000_1110
59
65
  BufferSectionHeaderByte -> 0b0000_1111
60
66
  NopSectionHeaderByte -> 0b0000_1011
67
+ BigIntSectionHeaderByte -> 0b0001_1010
68
+ I32BigIntSectionHeaderByte -> 0b0001_1100
69
+ I8BigIntSectionHeaderByte -> 0b0001_1011
61
70
  FalseHeaderByte -> 0b0000_1100
62
71
  TrueHeaderByte -> 0b0000_1101
63
72
 
@@ -78,6 +87,9 @@ const NULL_AND_I8_HEADER = 0x15;
78
87
  const NULL_AND_I32_HEADER = 0x16;
79
88
  const NULL_AND_TRUE_HEADER = 0x17;
80
89
  const NULL_AND_FALSE_HEADER = 0x18;
90
+ const BIGINT_HEADER = 0x1a;
91
+ const BIGINT_I8_HEADER = 0x1b;
92
+ const BIGINT_I32_HEADER = 0x1c;
81
93
  const STRING_HEADER = 0x1e;
82
94
  const BUFFER_HEADER = 0x1f;
83
95
  const I8_HEADER = 0x60;
@@ -86,7 +98,7 @@ const F64_HEADER = 0x20;
86
98
  const SHORT_STRING_HEADER = 0x80;
87
99
 
88
100
  /** Uplift high-order bits */
89
- const NUMBERS_HEADER_MASK = 0xe0;
101
+ const NUMBERS_HEADER_MASK = 0xe0; // 0b1010_0000
90
102
  const NUMBERS_COUNT_MASK = 0x1f; // 0b0001_1111
91
103
  const SHORT_STRING_LENGTH_MASK = 0x7f; // 0b0111_1111
92
104
 
@@ -101,6 +113,10 @@ const MEASURE_END_OPERATION = Symbol("MEASURE_END_OPERATION");
101
113
  /** @typedef {typeof MEASURE_START_OPERATION} MEASURE_START_OPERATION_TYPE */
102
114
  /** @typedef {typeof MEASURE_END_OPERATION} MEASURE_END_OPERATION_TYPE */
103
115
 
116
+ /**
117
+ * @param {number} n number
118
+ * @returns {0 | 1 | 2} type of number for serialization
119
+ */
104
120
  const identifyNumber = n => {
105
121
  if (n === (n | 0)) {
106
122
  if (n <= 127 && n >= -128) return 0;
@@ -109,6 +125,16 @@ const identifyNumber = n => {
109
125
  return 2;
110
126
  };
111
127
 
128
+ /**
129
+ * @param {bigint} n bigint
130
+ * @returns {0 | 1 | 2} type of bigint for serialization
131
+ */
132
+ const identifyBigInt = n => {
133
+ if (n <= BigInt(127) && n >= BigInt(-128)) return 0;
134
+ if (n <= BigInt(2147483647) && n >= BigInt(-2147483648)) return 1;
135
+ return 2;
136
+ };
137
+
112
138
  /**
113
139
  * @typedef {PrimitiveSerializableType[]} DeserializedType
114
140
  * @typedef {BufferSerializableType[]} SerializedType
@@ -117,13 +143,18 @@ const identifyNumber = n => {
117
143
  class BinaryMiddleware extends SerializerMiddleware {
118
144
  /**
119
145
  * @param {DeserializedType} data data
120
- * @param {Object} context context object
146
+ * @param {object} context context object
121
147
  * @returns {SerializedType|Promise<SerializedType>} serialized data
122
148
  */
123
149
  serialize(data, context) {
124
150
  return this._serialize(data, context);
125
151
  }
126
152
 
153
+ /**
154
+ * @param {function(): Promise<any> | any} fn lazy function
155
+ * @param {object} context serialize function
156
+ * @returns {function(): Promise<any> | any} new lazy
157
+ */
127
158
  _serializeLazy(fn, context) {
128
159
  return SerializerMiddleware.serializeLazy(fn, data =>
129
160
  this._serialize(data, context)
@@ -132,7 +163,7 @@ class BinaryMiddleware extends SerializerMiddleware {
132
163
 
133
164
  /**
134
165
  * @param {DeserializedType} data data
135
- * @param {Object} context context object
166
+ * @param {object} context context object
136
167
  * @param {{ leftOverBuffer: Buffer | null, allocationSize: number, increaseCounter: number }} allocationScope allocation scope
137
168
  * @returns {SerializedType} serialized data
138
169
  */
@@ -145,17 +176,20 @@ class BinaryMiddleware extends SerializerMiddleware {
145
176
  leftOverBuffer: null
146
177
  }
147
178
  ) {
148
- /** @type {Buffer} */
179
+ /** @type {Buffer | null} */
149
180
  let leftOverBuffer = null;
150
181
  /** @type {BufferSerializableType[]} */
151
182
  let buffers = [];
152
- /** @type {Buffer} */
183
+ /** @type {Buffer | null} */
153
184
  let currentBuffer = allocationScope ? allocationScope.leftOverBuffer : null;
154
185
  allocationScope.leftOverBuffer = null;
155
186
  let currentPosition = 0;
156
187
  if (currentBuffer === null) {
157
188
  currentBuffer = Buffer.allocUnsafe(allocationScope.allocationSize);
158
189
  }
190
+ /**
191
+ * @param {number} bytesNeeded bytes needed
192
+ */
159
193
  const allocate = bytesNeeded => {
160
194
  if (currentBuffer !== null) {
161
195
  if (currentBuffer.length - currentPosition >= bytesNeeded) return;
@@ -203,20 +237,32 @@ class BinaryMiddleware extends SerializerMiddleware {
203
237
  currentPosition = 0;
204
238
  }
205
239
  };
240
+ /**
241
+ * @param {number} byte byte
242
+ */
206
243
  const writeU8 = byte => {
207
- currentBuffer.writeUInt8(byte, currentPosition++);
244
+ /** @type {Buffer} */
245
+ (currentBuffer).writeUInt8(byte, currentPosition++);
208
246
  };
247
+ /**
248
+ * @param {number} ui32 ui32
249
+ */
209
250
  const writeU32 = ui32 => {
210
- currentBuffer.writeUInt32LE(ui32, currentPosition);
251
+ /** @type {Buffer} */
252
+ (currentBuffer).writeUInt32LE(ui32, currentPosition);
211
253
  currentPosition += 4;
212
254
  };
255
+ /** @type {number[]} */
213
256
  const measureStack = [];
214
257
  const measureStart = () => {
215
258
  measureStack.push(buffers.length, currentPosition);
216
259
  };
260
+ /**
261
+ * @returns {number} size
262
+ */
217
263
  const measureEnd = () => {
218
- const oldPos = measureStack.pop();
219
- const buffersIndex = measureStack.pop();
264
+ const oldPos = /** @type {number} */ (measureStack.pop());
265
+ const buffersIndex = /** @type {number} */ (measureStack.pop());
220
266
  let size = currentPosition - oldPos;
221
267
  for (let i = buffersIndex; i < buffers.length; i++) {
222
268
  size += buffers[i].length;
@@ -228,7 +274,7 @@ class BinaryMiddleware extends SerializerMiddleware {
228
274
  switch (typeof thing) {
229
275
  case "function": {
230
276
  if (!SerializerMiddleware.isLazy(thing))
231
- throw new Error("Unexpected function " + thing);
277
+ throw new Error(`Unexpected function ${thing}`);
232
278
  /** @type {SerializedType | (() => SerializedType)} */
233
279
  let serializedData =
234
280
  SerializerMiddleware.getLazySerializedValue(thing);
@@ -251,13 +297,12 @@ class BinaryMiddleware extends SerializerMiddleware {
251
297
  buffers.push(serializedData);
252
298
  break;
253
299
  }
254
- } else {
255
- if (typeof serializedData === "function") {
256
- flush();
257
- buffers.push(serializedData);
258
- break;
259
- }
300
+ } else if (typeof serializedData === "function") {
301
+ flush();
302
+ buffers.push(serializedData);
303
+ break;
260
304
  }
305
+ /** @type {number[]} */
261
306
  const lengths = [];
262
307
  for (const item of serializedData) {
263
308
  let last;
@@ -316,6 +361,62 @@ class BinaryMiddleware extends SerializerMiddleware {
316
361
  }
317
362
  break;
318
363
  }
364
+ case "bigint": {
365
+ const type = identifyBigInt(thing);
366
+ if (type === 0 && thing >= 0 && thing <= BigInt(10)) {
367
+ // shortcut for very small bigints
368
+ allocate(HEADER_SIZE + I8_SIZE);
369
+ writeU8(BIGINT_I8_HEADER);
370
+ writeU8(Number(thing));
371
+ break;
372
+ }
373
+
374
+ switch (type) {
375
+ case 0: {
376
+ let n = 1;
377
+ allocate(HEADER_SIZE + I8_SIZE * n);
378
+ writeU8(BIGINT_I8_HEADER | (n - 1));
379
+ while (n > 0) {
380
+ currentBuffer.writeInt8(
381
+ Number(/** @type {bigint} */ (data[i])),
382
+ currentPosition
383
+ );
384
+ currentPosition += I8_SIZE;
385
+ n--;
386
+ i++;
387
+ }
388
+ i--;
389
+ break;
390
+ }
391
+ case 1: {
392
+ let n = 1;
393
+ allocate(HEADER_SIZE + I32_SIZE * n);
394
+ writeU8(BIGINT_I32_HEADER | (n - 1));
395
+ while (n > 0) {
396
+ currentBuffer.writeInt32LE(
397
+ Number(/** @type {bigint} */ (data[i])),
398
+ currentPosition
399
+ );
400
+ currentPosition += I32_SIZE;
401
+ n--;
402
+ i++;
403
+ }
404
+ i--;
405
+ break;
406
+ }
407
+ default: {
408
+ const value = thing.toString();
409
+ const len = Buffer.byteLength(value);
410
+ allocate(len + HEADER_SIZE + I32_SIZE);
411
+ writeU8(BIGINT_HEADER);
412
+ writeU32(len);
413
+ currentBuffer.write(value, currentPosition);
414
+ currentPosition += len;
415
+ break;
416
+ }
417
+ }
418
+ break;
419
+ }
319
420
  case "number": {
320
421
  const type = identifyNumber(thing);
321
422
  if (type === 0 && thing >= 0 && thing <= 10) {
@@ -519,6 +620,11 @@ class BinaryMiddleware extends SerializerMiddleware {
519
620
  }
520
621
  break;
521
622
  }
623
+ default: {
624
+ throw new Error(
625
+ `Unknown typeof "${typeof thing}" in binary middleware`
626
+ );
627
+ }
522
628
  }
523
629
  }
524
630
  flush();
@@ -536,7 +642,7 @@ class BinaryMiddleware extends SerializerMiddleware {
536
642
 
537
643
  /**
538
644
  * @param {SerializedType} data data
539
- * @param {Object} context context object
645
+ * @param {object} context context object
540
646
  * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
541
647
  */
542
648
  deserialize(data, context) {
@@ -560,7 +666,7 @@ class BinaryMiddleware extends SerializerMiddleware {
560
666
 
561
667
  /**
562
668
  * @param {SerializedType} data data
563
- * @param {Object} context context object
669
+ * @param {object} context context object
564
670
  * @returns {DeserializedType} deserialized data
565
671
  */
566
672
  _deserialize(data, context) {
@@ -580,9 +686,12 @@ class BinaryMiddleware extends SerializerMiddleware {
580
686
  currentIsBuffer = Buffer.isBuffer(currentBuffer);
581
687
  }
582
688
  };
583
- const isInCurrentBuffer = n => {
584
- return currentIsBuffer && n + currentPosition <= currentBuffer.length;
585
- };
689
+ /**
690
+ * @param {number} n n
691
+ * @returns {boolean} true when in current buffer, otherwise false
692
+ */
693
+ const isInCurrentBuffer = n =>
694
+ currentIsBuffer && n + currentPosition <= currentBuffer.length;
586
695
  const ensureBuffer = () => {
587
696
  if (!currentIsBuffer) {
588
697
  throw new Error(
@@ -640,22 +749,30 @@ class BinaryMiddleware extends SerializerMiddleware {
640
749
  checkOverflow();
641
750
  return res;
642
751
  };
752
+ /**
753
+ * @returns {number} U8
754
+ */
643
755
  const readU8 = () => {
644
756
  ensureBuffer();
645
757
  /**
646
758
  * There is no need to check remaining buffer size here
647
759
  * since {@link checkOverflow} guarantees at least one byte remaining
648
760
  */
649
- const byte = /** @type {Buffer} */ (currentBuffer).readUInt8(
650
- currentPosition
651
- );
761
+ const byte =
762
+ /** @type {Buffer} */
763
+ (currentBuffer).readUInt8(currentPosition);
652
764
  currentPosition += I8_SIZE;
653
765
  checkOverflow();
654
766
  return byte;
655
767
  };
656
- const readU32 = () => {
657
- return read(I32_SIZE).readUInt32LE(0);
658
- };
768
+ /**
769
+ * @returns {number} U32
770
+ */
771
+ const readU32 = () => read(I32_SIZE).readUInt32LE(0);
772
+ /**
773
+ * @param {number} data data
774
+ * @param {number} n n
775
+ */
659
776
  const readBits = (data, n) => {
660
777
  let mask = 1;
661
778
  while (n !== 0) {
@@ -826,6 +943,70 @@ class BinaryMiddleware extends SerializerMiddleware {
826
943
  result.push(read(1).readInt8(0));
827
944
  }
828
945
  };
946
+ case BIGINT_I8_HEADER: {
947
+ const len = 1;
948
+ return () => {
949
+ const need = I8_SIZE * len;
950
+
951
+ if (isInCurrentBuffer(need)) {
952
+ for (let i = 0; i < len; i++) {
953
+ const value =
954
+ /** @type {Buffer} */
955
+ (currentBuffer).readInt8(currentPosition);
956
+ result.push(BigInt(value));
957
+ currentPosition += I8_SIZE;
958
+ }
959
+ checkOverflow();
960
+ } else {
961
+ const buf = read(need);
962
+ for (let i = 0; i < len; i++) {
963
+ const value = buf.readInt8(i * I8_SIZE);
964
+ result.push(BigInt(value));
965
+ }
966
+ }
967
+ };
968
+ }
969
+ case BIGINT_I32_HEADER: {
970
+ const len = 1;
971
+ return () => {
972
+ const need = I32_SIZE * len;
973
+ if (isInCurrentBuffer(need)) {
974
+ for (let i = 0; i < len; i++) {
975
+ const value = /** @type {Buffer} */ (currentBuffer).readInt32LE(
976
+ currentPosition
977
+ );
978
+ result.push(BigInt(value));
979
+ currentPosition += I32_SIZE;
980
+ }
981
+ checkOverflow();
982
+ } else {
983
+ const buf = read(need);
984
+ for (let i = 0; i < len; i++) {
985
+ const value = buf.readInt32LE(i * I32_SIZE);
986
+ result.push(BigInt(value));
987
+ }
988
+ }
989
+ };
990
+ }
991
+ case BIGINT_HEADER: {
992
+ return () => {
993
+ const len = readU32();
994
+ if (isInCurrentBuffer(len) && currentPosition + len < 0x7fffffff) {
995
+ const value = currentBuffer.toString(
996
+ undefined,
997
+ currentPosition,
998
+ currentPosition + len
999
+ );
1000
+
1001
+ result.push(BigInt(value));
1002
+ currentPosition += len;
1003
+ checkOverflow();
1004
+ } else {
1005
+ const value = read(len).toString();
1006
+ result.push(BigInt(value));
1007
+ }
1008
+ };
1009
+ }
829
1010
  default:
830
1011
  if (header <= 10) {
831
1012
  return () => result.push(header);
@@ -912,13 +1093,10 @@ class BinaryMiddleware extends SerializerMiddleware {
912
1093
  }
913
1094
  }
914
1095
  };
915
- } else {
916
- return () => {
917
- throw new Error(
918
- `Unexpected header byte 0x${header.toString(16)}`
919
- );
920
- };
921
1096
  }
1097
+ return () => {
1098
+ throw new Error(`Unexpected header byte 0x${header.toString(16)}`);
1099
+ };
922
1100
  }
923
1101
  });
924
1102
 
@@ -938,6 +1116,7 @@ class BinaryMiddleware extends SerializerMiddleware {
938
1116
  }
939
1117
 
940
1118
  // avoid leaking memory in context
1119
+ // eslint-disable-next-line prefer-const
941
1120
  let _result = result;
942
1121
  result = undefined;
943
1122
  return _result;
@@ -4,12 +4,24 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class DateObjectSerializer {
8
- serialize(obj, { write }) {
9
- write(obj.getTime());
11
+ /**
12
+ * @param {Date} obj date
13
+ * @param {ObjectSerializerContext} context context
14
+ */
15
+ serialize(obj, context) {
16
+ context.write(obj.getTime());
10
17
  }
11
- deserialize({ read }) {
12
- return new Date(read());
18
+
19
+ /**
20
+ * @param {ObjectDeserializerContext} context context
21
+ * @returns {Date} date
22
+ */
23
+ deserialize(context) {
24
+ return new Date(context.read());
13
25
  }
14
26
  }
15
27
 
@@ -4,21 +4,38 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
7
10
  class ErrorObjectSerializer {
11
+ /**
12
+ * @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
13
+ */
8
14
  constructor(Type) {
9
15
  this.Type = Type;
10
16
  }
11
17
 
12
- serialize(obj, { write }) {
13
- write(obj.message);
14
- write(obj.stack);
18
+ /**
19
+ * @param {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} obj error
20
+ * @param {ObjectSerializerContext} context context
21
+ */
22
+ serialize(obj, context) {
23
+ context.write(obj.message);
24
+ context.write(obj.stack);
25
+ context.write(/** @type {Error & { cause: "unknown" }} */ (obj).cause);
15
26
  }
16
27
 
17
- deserialize({ read }) {
28
+ /**
29
+ * @param {ObjectDeserializerContext} context context
30
+ * @returns {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} error
31
+ */
32
+ deserialize(context) {
18
33
  const err = new this.Type();
19
34
 
20
- err.message = read();
21
- err.stack = read();
35
+ err.message = context.read();
36
+ err.stack = context.read();
37
+ /** @type {Error & { cause: "unknown" }} */
38
+ (err).cause = context.read();
22
39
 
23
40
  return err;
24
41
  }