@aztec/foundation 0.7.2 → 0.7.4

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 (353) hide show
  1. package/.tsbuildinfo +1 -0
  2. package/dest/abi/abi.d.ts +237 -0
  3. package/dest/abi/abi.d.ts.map +1 -0
  4. package/dest/abi/abi.js +37 -0
  5. package/dest/abi/abi_coder.d.ts +8 -0
  6. package/dest/abi/abi_coder.d.ts.map +1 -0
  7. package/dest/abi/abi_coder.js +24 -0
  8. package/dest/abi/decoder.d.ts +57 -0
  9. package/dest/abi/decoder.d.ts.map +1 -0
  10. package/dest/abi/decoder.js +149 -0
  11. package/dest/abi/decoder.test.d.ts +2 -0
  12. package/dest/abi/decoder.test.d.ts.map +1 -0
  13. package/dest/abi/decoder.test.js +70 -0
  14. package/dest/abi/encoder.d.ts +10 -0
  15. package/dest/abi/encoder.d.ts.map +1 -0
  16. package/dest/abi/encoder.js +92 -0
  17. package/dest/abi/encoder.test.d.ts +2 -0
  18. package/dest/abi/encoder.test.d.ts.map +1 -0
  19. package/dest/abi/encoder.test.js +74 -0
  20. package/dest/abi/function_selector.d.ts +73 -0
  21. package/dest/abi/function_selector.d.ts.map +1 -0
  22. package/dest/abi/function_selector.js +104 -0
  23. package/dest/abi/index.d.ts +6 -0
  24. package/dest/abi/index.d.ts.map +1 -0
  25. package/dest/abi/index.js +6 -0
  26. package/dest/async-map/async_map.test.d.ts +2 -0
  27. package/dest/async-map/async_map.test.d.ts.map +1 -0
  28. package/dest/async-map/async_map.test.js +9 -0
  29. package/dest/async-map/index.d.ts +13 -0
  30. package/dest/async-map/index.d.ts.map +1 -0
  31. package/dest/async-map/index.js +19 -0
  32. package/dest/aztec-address/index.d.ts +114 -0
  33. package/dest/aztec-address/index.d.ts.map +1 -0
  34. package/dest/aztec-address/index.js +148 -0
  35. package/dest/bigint-buffer/bigint-buffer.test.d.ts +2 -0
  36. package/dest/bigint-buffer/bigint-buffer.test.d.ts.map +1 -0
  37. package/dest/bigint-buffer/bigint-buffer.test.js +18 -0
  38. package/dest/bigint-buffer/index.d.ts +35 -0
  39. package/dest/bigint-buffer/index.d.ts.map +1 -0
  40. package/dest/bigint-buffer/index.js +68 -0
  41. package/dest/collection/array.d.ts +30 -0
  42. package/dest/collection/array.d.ts.map +1 -0
  43. package/dest/collection/array.js +47 -0
  44. package/dest/collection/index.d.ts +2 -0
  45. package/dest/collection/index.d.ts.map +1 -0
  46. package/dest/collection/index.js +2 -0
  47. package/dest/committable/committable.d.ts +28 -0
  48. package/dest/committable/committable.d.ts.map +1 -0
  49. package/dest/committable/committable.js +41 -0
  50. package/dest/committable/committable.test.d.ts +2 -0
  51. package/dest/committable/committable.test.d.ts.map +1 -0
  52. package/dest/committable/committable.test.js +26 -0
  53. package/dest/committable/index.d.ts +2 -0
  54. package/dest/committable/index.d.ts.map +1 -0
  55. package/dest/committable/index.js +2 -0
  56. package/dest/crypto/index.d.ts +4 -0
  57. package/dest/crypto/index.d.ts.map +1 -0
  58. package/dest/crypto/index.js +4 -0
  59. package/dest/crypto/keccak/index.d.ts +20 -0
  60. package/dest/crypto/keccak/index.d.ts.map +1 -0
  61. package/dest/crypto/keccak/index.js +31 -0
  62. package/dest/crypto/random/index.d.ts +3 -0
  63. package/dest/crypto/random/index.d.ts.map +1 -0
  64. package/dest/crypto/random/index.js +36 -0
  65. package/dest/crypto/random/index.test.d.ts +2 -0
  66. package/dest/crypto/random/index.test.d.ts.map +1 -0
  67. package/dest/crypto/random/index.test.js +13 -0
  68. package/dest/crypto/sha256/index.d.ts +11 -0
  69. package/dest/crypto/sha256/index.d.ts.map +1 -0
  70. package/dest/crypto/sha256/index.js +14 -0
  71. package/dest/crypto/sha256/index.test.d.ts +2 -0
  72. package/dest/crypto/sha256/index.test.d.ts.map +1 -0
  73. package/dest/crypto/sha256/index.test.js +11 -0
  74. package/dest/errors/index.d.ts +8 -0
  75. package/dest/errors/index.d.ts.map +1 -0
  76. package/dest/errors/index.js +8 -0
  77. package/dest/eth-address/eth_address.test.d.ts +2 -0
  78. package/dest/eth-address/eth_address.test.d.ts.map +1 -0
  79. package/dest/eth-address/eth_address.test.js +95 -0
  80. package/dest/eth-address/index.d.ts +144 -0
  81. package/dest/eth-address/index.d.ts.map +1 -0
  82. package/dest/eth-address/index.js +228 -0
  83. package/dest/fields/coordinate.d.ts +67 -0
  84. package/dest/fields/coordinate.d.ts.map +1 -0
  85. package/dest/fields/coordinate.js +95 -0
  86. package/dest/fields/coordinate.test.d.ts +2 -0
  87. package/dest/fields/coordinate.test.d.ts.map +1 -0
  88. package/dest/fields/coordinate.test.js +22 -0
  89. package/dest/fields/fields.d.ts +177 -0
  90. package/dest/fields/fields.d.ts.map +1 -0
  91. package/dest/fields/fields.js +219 -0
  92. package/dest/fields/grumpkin_scalar.d.ts +96 -0
  93. package/dest/fields/grumpkin_scalar.d.ts.map +1 -0
  94. package/dest/fields/grumpkin_scalar.js +125 -0
  95. package/dest/fields/grumpkin_scalar.test.d.ts +2 -0
  96. package/dest/fields/grumpkin_scalar.test.d.ts.map +1 -0
  97. package/dest/fields/grumpkin_scalar.test.js +45 -0
  98. package/dest/fields/index.d.ts +5 -0
  99. package/dest/fields/index.d.ts.map +1 -0
  100. package/dest/fields/index.js +5 -0
  101. package/dest/fields/point.d.ts +105 -0
  102. package/dest/fields/point.d.ts.map +1 -0
  103. package/dest/fields/point.js +125 -0
  104. package/dest/fifo/bounded_serial_queue.d.ts +56 -0
  105. package/dest/fifo/bounded_serial_queue.d.ts.map +1 -0
  106. package/dest/fifo/bounded_serial_queue.js +94 -0
  107. package/dest/fifo/index.d.ts +5 -0
  108. package/dest/fifo/index.d.ts.map +1 -0
  109. package/dest/fifo/index.js +5 -0
  110. package/dest/fifo/memory_fifo.d.ts +55 -0
  111. package/dest/fifo/memory_fifo.d.ts.map +1 -0
  112. package/dest/fifo/memory_fifo.js +109 -0
  113. package/dest/fifo/semaphore.d.ts +23 -0
  114. package/dest/fifo/semaphore.d.ts.map +1 -0
  115. package/dest/fifo/semaphore.js +30 -0
  116. package/dest/fifo/serial_queue.d.ts +48 -0
  117. package/dest/fifo/serial_queue.d.ts.map +1 -0
  118. package/dest/fifo/serial_queue.js +74 -0
  119. package/dest/json-rpc/class_converter.d.ts +144 -0
  120. package/dest/json-rpc/class_converter.d.ts.map +1 -0
  121. package/dest/json-rpc/class_converter.js +100 -0
  122. package/dest/json-rpc/client/index.d.ts +2 -0
  123. package/dest/json-rpc/client/index.d.ts.map +1 -0
  124. package/dest/json-rpc/client/index.js +2 -0
  125. package/dest/json-rpc/client/json_rpc_client.d.ts +29 -0
  126. package/dest/json-rpc/client/json_rpc_client.d.ts.map +1 -0
  127. package/dest/json-rpc/client/json_rpc_client.js +104 -0
  128. package/dest/json-rpc/client/json_rpc_client.test.d.ts +2 -0
  129. package/dest/json-rpc/client/json_rpc_client.test.d.ts.map +1 -0
  130. package/dest/json-rpc/client/json_rpc_client.test.js +20 -0
  131. package/dest/json-rpc/convert.d.ts +28 -0
  132. package/dest/json-rpc/convert.d.ts.map +1 -0
  133. package/dest/json-rpc/convert.js +139 -0
  134. package/dest/json-rpc/convert.test.d.ts +2 -0
  135. package/dest/json-rpc/convert.test.d.ts.map +1 -0
  136. package/dest/json-rpc/convert.test.js +68 -0
  137. package/dest/json-rpc/fixtures/class_a.d.ts +11 -0
  138. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -0
  139. package/dest/json-rpc/fixtures/class_a.js +17 -0
  140. package/dest/json-rpc/fixtures/class_b.d.ts +11 -0
  141. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -0
  142. package/dest/json-rpc/fixtures/class_b.js +17 -0
  143. package/dest/json-rpc/fixtures/test_state.d.ts +47 -0
  144. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
  145. package/dest/json-rpc/fixtures/test_state.js +62 -0
  146. package/dest/json-rpc/index.d.ts +3 -0
  147. package/dest/json-rpc/index.d.ts.map +1 -0
  148. package/dest/json-rpc/index.js +3 -0
  149. package/dest/json-rpc/js_utils.d.ts +13 -0
  150. package/dest/json-rpc/js_utils.d.ts.map +1 -0
  151. package/dest/json-rpc/js_utils.js +18 -0
  152. package/dest/json-rpc/server/index.d.ts +3 -0
  153. package/dest/json-rpc/server/index.d.ts.map +1 -0
  154. package/dest/json-rpc/server/index.js +3 -0
  155. package/dest/json-rpc/server/json_proxy.d.ts +18 -0
  156. package/dest/json-rpc/server/json_proxy.d.ts.map +1 -0
  157. package/dest/json-rpc/server/json_proxy.js +36 -0
  158. package/dest/json-rpc/server/json_rpc_server.d.ts +34 -0
  159. package/dest/json-rpc/server/json_rpc_server.d.ts.map +1 -0
  160. package/dest/json-rpc/server/json_rpc_server.js +133 -0
  161. package/dest/json-rpc/server/json_rpc_server.test.d.ts +2 -0
  162. package/dest/json-rpc/server/json_rpc_server.test.d.ts.map +1 -0
  163. package/dest/json-rpc/server/json_rpc_server.test.js +22 -0
  164. package/dest/log/console.d.ts +11 -0
  165. package/dest/log/console.d.ts.map +1 -0
  166. package/dest/log/console.js +38 -0
  167. package/dest/log/debug.d.ts +43 -0
  168. package/dest/log/debug.d.ts.map +1 -0
  169. package/dest/log/debug.js +75 -0
  170. package/dest/log/index.d.ts +9 -0
  171. package/dest/log/index.d.ts.map +1 -0
  172. package/dest/log/index.js +5 -0
  173. package/dest/log/log_history.d.ts +31 -0
  174. package/dest/log/log_history.d.ts.map +1 -0
  175. package/dest/log/log_history.js +42 -0
  176. package/dest/log/log_history.test.d.ts +2 -0
  177. package/dest/log/log_history.test.d.ts.map +1 -0
  178. package/dest/log/log_history.test.js +78 -0
  179. package/dest/log/logger.d.ts +34 -0
  180. package/dest/log/logger.d.ts.map +1 -0
  181. package/dest/log/logger.js +78 -0
  182. package/dest/mutex/index.d.ts +53 -0
  183. package/dest/mutex/index.d.ts.map +1 -0
  184. package/dest/mutex/index.js +74 -0
  185. package/dest/mutex/mutex.test.d.ts +9 -0
  186. package/dest/mutex/mutex.test.d.ts.map +1 -0
  187. package/dest/mutex/mutex.test.js +58 -0
  188. package/dest/mutex/mutex_database.d.ts +10 -0
  189. package/dest/mutex/mutex_database.d.ts.map +1 -0
  190. package/dest/mutex/mutex_database.js +2 -0
  191. package/dest/retry/index.d.ts +44 -0
  192. package/dest/retry/index.d.ts.map +1 -0
  193. package/dest/retry/index.js +89 -0
  194. package/dest/running-promise/index.d.ts +35 -0
  195. package/dest/running-promise/index.d.ts.map +1 -0
  196. package/dest/running-promise/index.js +59 -0
  197. package/dest/serialize/buffer_reader.d.ts +188 -0
  198. package/dest/serialize/buffer_reader.d.ts.map +1 -0
  199. package/dest/serialize/buffer_reader.js +229 -0
  200. package/dest/serialize/buffer_reader.test.d.ts +2 -0
  201. package/dest/serialize/buffer_reader.test.d.ts.map +1 -0
  202. package/dest/serialize/buffer_reader.test.js +156 -0
  203. package/dest/serialize/deserializer.d.ts +134 -0
  204. package/dest/serialize/deserializer.d.ts.map +1 -0
  205. package/dest/serialize/deserializer.js +145 -0
  206. package/dest/serialize/free_funcs.d.ts +203 -0
  207. package/dest/serialize/free_funcs.d.ts.map +1 -0
  208. package/dest/serialize/free_funcs.js +250 -0
  209. package/dest/serialize/index.d.ts +6 -0
  210. package/dest/serialize/index.d.ts.map +1 -0
  211. package/dest/serialize/index.js +6 -0
  212. package/dest/serialize/serialize.test.d.ts +2 -0
  213. package/dest/serialize/serialize.test.d.ts.map +1 -0
  214. package/dest/serialize/serialize.test.js +68 -0
  215. package/dest/serialize/serializer.d.ts +89 -0
  216. package/dest/serialize/serializer.d.ts.map +1 -0
  217. package/dest/serialize/serializer.js +111 -0
  218. package/dest/serialize/types.d.ts +33 -0
  219. package/dest/serialize/types.d.ts.map +1 -0
  220. package/dest/serialize/types.js +22 -0
  221. package/dest/sleep/index.d.ts +52 -0
  222. package/dest/sleep/index.d.ts.map +1 -0
  223. package/dest/sleep/index.js +70 -0
  224. package/dest/timer/index.d.ts +3 -0
  225. package/dest/timer/index.d.ts.map +1 -0
  226. package/dest/timer/index.js +3 -0
  227. package/dest/timer/timeout.d.ts +41 -0
  228. package/dest/timer/timeout.d.ts.map +1 -0
  229. package/dest/timer/timeout.js +62 -0
  230. package/dest/timer/timer.d.ts +33 -0
  231. package/dest/timer/timer.d.ts.map +1 -0
  232. package/dest/timer/timer.js +38 -0
  233. package/dest/transport/browser/index.d.ts +5 -0
  234. package/dest/transport/browser/index.d.ts.map +1 -0
  235. package/dest/transport/browser/index.js +5 -0
  236. package/dest/transport/browser/message_port_socket.d.ts +37 -0
  237. package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
  238. package/dest/transport/browser/message_port_socket.js +46 -0
  239. package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
  240. package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
  241. package/dest/transport/browser/shared_worker_connector.js +21 -0
  242. package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
  243. package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
  244. package/dest/transport/browser/shared_worker_listener.js +37 -0
  245. package/dest/transport/browser/worker_connector.d.ts +26 -0
  246. package/dest/transport/browser/worker_connector.d.ts.map +1 -0
  247. package/dest/transport/browser/worker_connector.js +30 -0
  248. package/dest/transport/browser/worker_listener.d.ts +39 -0
  249. package/dest/transport/browser/worker_listener.d.ts.map +1 -0
  250. package/dest/transport/browser/worker_listener.js +39 -0
  251. package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
  252. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
  253. package/dest/transport/dispatch/create_dispatch_fn.js +18 -0
  254. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
  255. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
  256. package/dest/transport/dispatch/create_dispatch_proxy.js +56 -0
  257. package/dest/transport/dispatch/messages.d.ts +52 -0
  258. package/dest/transport/dispatch/messages.d.ts.map +1 -0
  259. package/dest/transport/dispatch/messages.js +12 -0
  260. package/dest/transport/index.d.ts +12 -0
  261. package/dest/transport/index.d.ts.map +1 -0
  262. package/dest/transport/index.js +12 -0
  263. package/dest/transport/interface/connector.d.ts +8 -0
  264. package/dest/transport/interface/connector.d.ts.map +1 -0
  265. package/dest/transport/interface/connector.js +2 -0
  266. package/dest/transport/interface/listener.d.ts +13 -0
  267. package/dest/transport/interface/listener.d.ts.map +1 -0
  268. package/dest/transport/interface/listener.js +2 -0
  269. package/dest/transport/interface/socket.d.ts +13 -0
  270. package/dest/transport/interface/socket.d.ts.map +1 -0
  271. package/dest/transport/interface/socket.js +2 -0
  272. package/dest/transport/interface/transferable.d.ts +68 -0
  273. package/dest/transport/interface/transferable.d.ts.map +1 -0
  274. package/dest/transport/interface/transferable.js +63 -0
  275. package/dest/transport/node/index.d.ts +3 -0
  276. package/dest/transport/node/index.d.ts.map +1 -0
  277. package/dest/transport/node/index.js +3 -0
  278. package/dest/transport/node/node_connector.d.ts +28 -0
  279. package/dest/transport/node/node_connector.d.ts.map +1 -0
  280. package/dest/transport/node/node_connector.js +28 -0
  281. package/dest/transport/node/node_connector_socket.d.ts +42 -0
  282. package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
  283. package/dest/transport/node/node_connector_socket.js +48 -0
  284. package/dest/transport/node/node_listener.d.ts +26 -0
  285. package/dest/transport/node/node_listener.d.ts.map +1 -0
  286. package/dest/transport/node/node_listener.js +30 -0
  287. package/dest/transport/node/node_listener_socket.d.ts +37 -0
  288. package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
  289. package/dest/transport/node/node_listener_socket.js +44 -0
  290. package/dest/transport/transport_client.d.ts +61 -0
  291. package/dest/transport/transport_client.d.ts.map +1 -0
  292. package/dest/transport/transport_client.js +94 -0
  293. package/dest/transport/transport_server.d.ts +56 -0
  294. package/dest/transport/transport_server.d.ts.map +1 -0
  295. package/dest/transport/transport_server.js +101 -0
  296. package/dest/types/index.d.ts +7 -0
  297. package/dest/types/index.d.ts.map +1 -0
  298. package/dest/types/index.js +2 -0
  299. package/dest/url/index.d.ts +9 -0
  300. package/dest/url/index.d.ts.map +1 -0
  301. package/dest/url/index.js +66 -0
  302. package/dest/wasm/empty_wasi_sdk.d.ts +130 -0
  303. package/dest/wasm/empty_wasi_sdk.d.ts.map +1 -0
  304. package/dest/wasm/empty_wasi_sdk.js +166 -0
  305. package/dest/wasm/index.d.ts +2 -0
  306. package/dest/wasm/index.d.ts.map +1 -0
  307. package/dest/wasm/index.js +2 -0
  308. package/dest/wasm/wasm_module.d.ts +135 -0
  309. package/dest/wasm/wasm_module.d.ts.map +1 -0
  310. package/dest/wasm/wasm_module.js +205 -0
  311. package/dest/wasm/wasm_module.test.d.ts +2 -0
  312. package/dest/wasm/wasm_module.test.d.ts.map +1 -0
  313. package/dest/wasm/wasm_module.test.js +24 -0
  314. package/dest/worker/browser/index.d.ts +3 -0
  315. package/dest/worker/browser/index.d.ts.map +1 -0
  316. package/dest/worker/browser/index.js +3 -0
  317. package/dest/worker/browser/start_web_module.d.ts +7 -0
  318. package/dest/worker/browser/start_web_module.d.ts.map +1 -0
  319. package/dest/worker/browser/start_web_module.js +22 -0
  320. package/dest/worker/browser/web_data_store.d.ts +23 -0
  321. package/dest/worker/browser/web_data_store.d.ts.map +1 -0
  322. package/dest/worker/browser/web_data_store.js +32 -0
  323. package/dest/worker/browser/web_worker.d.ts +10 -0
  324. package/dest/worker/browser/web_worker.d.ts.map +1 -0
  325. package/dest/worker/browser/web_worker.js +23 -0
  326. package/dest/worker/data_store.d.ts +20 -0
  327. package/dest/worker/data_store.d.ts.map +1 -0
  328. package/dest/worker/data_store.js +2 -0
  329. package/dest/worker/index.d.ts +3 -0
  330. package/dest/worker/index.d.ts.map +1 -0
  331. package/dest/worker/index.js +2 -0
  332. package/dest/worker/node/index.d.ts +3 -0
  333. package/dest/worker/node/index.d.ts.map +1 -0
  334. package/dest/worker/node/index.js +3 -0
  335. package/dest/worker/node/node_data_store.d.ts +12 -0
  336. package/dest/worker/node/node_data_store.d.ts.map +1 -0
  337. package/dest/worker/node/node_data_store.js +21 -0
  338. package/dest/worker/node/node_worker.d.ts +6 -0
  339. package/dest/worker/node/node_worker.d.ts.map +1 -0
  340. package/dest/worker/node/node_worker.js +20 -0
  341. package/dest/worker/node/start_node_module.d.ts +7 -0
  342. package/dest/worker/node/start_node_module.d.ts.map +1 -0
  343. package/dest/worker/node/start_node_module.js +26 -0
  344. package/dest/worker/wasm_worker.d.ts +9 -0
  345. package/dest/worker/wasm_worker.d.ts.map +1 -0
  346. package/dest/worker/wasm_worker.js +2 -0
  347. package/dest/worker/worker_pool.d.ts +40 -0
  348. package/dest/worker/worker_pool.d.ts.map +1 -0
  349. package/dest/worker/worker_pool.js +62 -0
  350. package/package.json +1 -1
  351. package/src/abi/abi.ts +8 -2
  352. package/src/abi/encoder.ts +5 -3
  353. package/Dockerfile +0 -15
@@ -0,0 +1,250 @@
1
+ import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ /**
4
+ * Convert a boolean value to its corresponding byte representation in a Buffer of size 1.
5
+ * The function takes a boolean value and writes it into a new buffer as either 1 (true) or 0 (false).
6
+ * This method is useful for converting a boolean value into a binary format that can be stored or transmitted easily.
7
+ *
8
+ * @param b - The boolean value to be converted.
9
+ * @returns A Buffer containing the byte representation of the input boolean value.
10
+ */
11
+ export function boolToByte(b) {
12
+ const buf = Buffer.alloc(1);
13
+ buf.writeUInt8(b ? 1 : 0);
14
+ return buf;
15
+ }
16
+ /**
17
+ * Convert a number into a 4-byte little-endian unsigned integer buffer.
18
+ * The input number is serialized as an unsigned 32-bit integer in little-endian byte order,
19
+ * and returned as a Buffer of specified size (defaults to 4).
20
+ * If the provided bufferSize is greater than 4, the additional bytes will be padded with zeros.
21
+ *
22
+ * @param n - The number to be converted into a little-endian unsigned integer buffer.
23
+ * @param bufferSize - Optional, the size of the output buffer (default value is 4).
24
+ * @returns A Buffer containing the serialized little-endian unsigned integer representation of the input number.
25
+ */
26
+ export function numToUInt32LE(n, bufferSize = 4) {
27
+ const buf = Buffer.alloc(bufferSize);
28
+ buf.writeUInt32LE(n, bufferSize - 4);
29
+ return buf;
30
+ }
31
+ /**
32
+ * Convert a number to a big-endian unsigned 32-bit integer Buffer.
33
+ * This function takes a number and an optional buffer size as input and creates a Buffer with the specified size (defaults to 4) containing the big-endian representation of the input number as an unsigned 32-bit integer. Note that the bufferSize should be greater than or equal to 4, otherwise the output Buffer might truncate the serialized value.
34
+ *
35
+ * @param n - The input number to be converted to a big-endian unsigned 32-bit integer Buffer.
36
+ * @param bufferSize - Optional, the size of the output Buffer (default is 4).
37
+ * @returns A Buffer containing the big-endian unsigned 32-bit integer representation of the input number.
38
+ */
39
+ export function numToUInt32BE(n, bufferSize = 4) {
40
+ const buf = Buffer.alloc(bufferSize);
41
+ buf.writeUInt32BE(n, bufferSize - 4);
42
+ return buf;
43
+ }
44
+ /**
45
+ * Serialize a number into a big-endian signed 32-bit integer Buffer with the specified buffer size.
46
+ * This function converts the input number into its binary representation and stores it in a Buffer
47
+ * with the provided buffer size. By default, the buffer size is set to 4 bytes which represents a 32-bit integer.
48
+ * The function will use the last 4 bytes of the buffer to store the serialized number. If the input number
49
+ * is outside the range of a 32-bit signed integer, the resulting serialization may be incorrect due to truncation.
50
+ *
51
+ * @param n - The number to be serialized as a signed 32-bit integer.
52
+ * @param bufferSize - Optional, the size of the output Buffer (default is 4 bytes).
53
+ * @returns A Buffer containing the serialized big-endian signed 32-bit integer.
54
+ */
55
+ export function numToInt32BE(n, bufferSize = 4) {
56
+ const buf = Buffer.alloc(bufferSize);
57
+ buf.writeInt32BE(n, bufferSize - 4);
58
+ return buf;
59
+ }
60
+ /**
61
+ * Convert a number to an 8-bit unsigned integer and return it as a Buffer of length 1.
62
+ * The input number is written as an 8-bit unsigned integer into the buffer. This function
63
+ * is useful for converting small numeric values to a standardized binary format that can be
64
+ * easily stored or transmitted.
65
+ *
66
+ * @param n - The number to be converted to an 8-bit unsigned integer.
67
+ * @returns A Buffer containing the 8-bit unsigned integer representation of the input number.
68
+ */
69
+ export function numToUInt8(n) {
70
+ const bufferSize = 1;
71
+ const buf = Buffer.alloc(bufferSize);
72
+ buf.writeUInt8(n, 0);
73
+ return buf;
74
+ }
75
+ /**
76
+ * Serialize a Buffer into a vector format by encoding the length of the buffer and concatenating it with the original buffer.
77
+ * The resulting vector consists of a 4-byte header containing the big-endian representation of the original buffer's length, followed by the original buffer.
78
+ * This function is useful when storing buffers as data structures with dynamic lengths and later deserializing them using 'deserializeBufferFromVector'.
79
+ *
80
+ * @param buf - The input Buffer to be serialized into a vector format.
81
+ * @returns A Buffer containing the serialized vector with the encoded length header.
82
+ */
83
+ export function serializeBufferToVector(buf) {
84
+ const lengthBuf = Buffer.alloc(4);
85
+ lengthBuf.writeUInt32BE(buf.length, 0);
86
+ return Buffer.concat([lengthBuf, buf]);
87
+ }
88
+ /**
89
+ * Serialize a BigInt value into a Buffer of specified width.
90
+ * The function converts the input BigInt into its big-endian representation and stores it in a Buffer of the given width.
91
+ * If the width is not provided, a default value of 32 bytes will be used. It is important to provide an appropriate width
92
+ * to avoid truncation or incorrect serialization of large BigInt values.
93
+ *
94
+ * @param n - The BigInt value to be serialized.
95
+ * @param width - The width (in bytes) of the output Buffer, optional with default value 32.
96
+ * @returns A Buffer containing the serialized BigInt value in big-endian format.
97
+ */
98
+ export function serializeBigInt(n, width = 32) {
99
+ return toBufferBE(n, width);
100
+ }
101
+ /**
102
+ * Deserialize a big integer from a buffer, given an offset and width.
103
+ * Reads the specified number of bytes from the buffer starting at the offset, converts it to a big integer, and returns the deserialized result along with the number of bytes read (advanced).
104
+ *
105
+ * @param buf - The buffer containing the big integer to be deserialized.
106
+ * @param offset - The position in the buffer where the big integer starts. Defaults to 0.
107
+ * @param width - The number of bytes to read from the buffer for the big integer. Defaults to 32.
108
+ * @returns An object containing the deserialized big integer value ('elem') and the number of bytes advanced ('adv').
109
+ */
110
+ export function deserializeBigInt(buf, offset = 0, width = 32) {
111
+ return { elem: toBigIntBE(buf.subarray(offset, offset + width)), adv: width };
112
+ }
113
+ /**
114
+ * Serializes a Date object into a Buffer containing its timestamp as a big integer value.
115
+ * The resulting Buffer has a fixed width of 8 bytes, representing a 64-bit big-endian integer.
116
+ * This function is useful for converting date values into a binary format that can be stored or transmitted easily.
117
+ *
118
+ * @param date - The Date object to be serialized.
119
+ * @returns A Buffer containing the serialized timestamp of the input Date object.
120
+ */
121
+ export function serializeDate(date) {
122
+ return serializeBigInt(BigInt(date.getTime()), 8);
123
+ }
124
+ /**
125
+ * Deserialize a buffer from a vector by reading the length from its first 4 bytes, and then extracting the contents of the buffer.
126
+ * The function returns an object containing the deserialized buffer as 'elem' and the number of bytes advanced ('adv') after deserialization.
127
+ *
128
+ * @param vector - The input buffer containing the serialized vector.
129
+ * @param offset - The starting position from where the deserialization should begin (default is 0).
130
+ * @returns An object with the deserialized buffer as 'elem' and the number of bytes advanced ('adv') after deserialization.
131
+ */
132
+ export function deserializeBufferFromVector(vector, offset = 0) {
133
+ const length = vector.readUInt32BE(offset);
134
+ const adv = 4 + length;
135
+ return { elem: vector.subarray(offset + 4, offset + adv), adv };
136
+ }
137
+ /**
138
+ * Deserialize a boolean value from a given buffer at the specified offset.
139
+ * Reads a single byte at the provided offset in the buffer and returns
140
+ * the deserialized boolean value along with the number of bytes read (adv).
141
+ *
142
+ * @param buf - The buffer containing the serialized boolean value.
143
+ * @param offset - The position in the buffer to start reading the boolean value.
144
+ * @returns An object containing the deserialized boolean value (elem) and the number of bytes read (adv).
145
+ */
146
+ export function deserializeBool(buf, offset = 0) {
147
+ const adv = 1;
148
+ return { elem: buf.readUInt8(offset), adv };
149
+ }
150
+ /**
151
+ * Deserialize a 4-byte unsigned integer from a buffer, starting at the specified offset.
152
+ * The deserialization reads 4 bytes from the given buffer and converts it into a number.
153
+ * Returns an object containing the deserialized unsigned integer and the number of bytes advanced (4).
154
+ *
155
+ * @param buf - The buffer containing the serialized unsigned integer.
156
+ * @param offset - The starting position in the buffer to deserialize from (default is 0).
157
+ * @returns An object with the deserialized unsigned integer as 'elem' and the number of bytes advanced ('adv') as 4.
158
+ */
159
+ export function deserializeUInt32(buf, offset = 0) {
160
+ const adv = 4;
161
+ return { elem: buf.readUInt32BE(offset), adv };
162
+ }
163
+ /**
164
+ * Deserialize a signed 32-bit integer from a buffer at the given offset.
165
+ * The input 'buf' should be a Buffer containing binary data, and 'offset' should be the position in the buffer
166
+ * where the signed 32-bit integer starts. Returns an object with both the deserialized integer (elem) and the
167
+ * number of bytes advanced in the buffer (adv, always equal to 4).
168
+ *
169
+ * @param buf - The buffer containing the binary data.
170
+ * @param offset - Optional, the position in the buffer where the signed 32-bit integer starts (default is 0).
171
+ * @returns An object with the deserialized integer as 'elem' and the number of bytes advanced as 'adv'.
172
+ */
173
+ export function deserializeInt32(buf, offset = 0) {
174
+ const adv = 4;
175
+ return { elem: buf.readInt32BE(offset), adv };
176
+ }
177
+ /**
178
+ * Deserialize a field element from a buffer, starting at the given offset.
179
+ * The function reads 32 bytes from the buffer and converts it into a field element using Fr.fromBuffer.
180
+ * It returns an object containing the deserialized field element and the number of bytes read (adv).
181
+ *
182
+ * @param buf - The buffer containing the serialized field element.
183
+ * @param offset - The position in the buffer where the field element starts. Default is 0.
184
+ * @returns An object with 'elem' as the deserialized field element and 'adv' as the number of bytes read.
185
+ */
186
+ export function deserializeField(buf, offset = 0) {
187
+ const adv = 32;
188
+ return { elem: Fr.fromBuffer(buf.subarray(offset, offset + adv)), adv };
189
+ }
190
+ /**
191
+ * Serialize an array of Buffer instances into a single Buffer by concatenating the array length as a 4-byte unsigned integer
192
+ * and then the individual Buffer elements. The function is useful for storing or transmitting an array of binary data chunks
193
+ * (e.g., file parts) in a compact format.
194
+ *
195
+ * @param arr - An array of Buffer instances to be serialized into a single vector-like Buffer.
196
+ * @returns A Buffer containing the serialized array length followed by the concatenated elements of the input Buffer array.
197
+ */
198
+ export function serializeBufferArrayToVector(arr) {
199
+ const lengthBuf = Buffer.alloc(4);
200
+ lengthBuf.writeUInt32BE(arr.length, 0);
201
+ return Buffer.concat([lengthBuf, ...arr]);
202
+ }
203
+ /**
204
+ * Deserialize an array of fixed length elements from a given buffer using a custom deserializer function.
205
+ * The deserializer function should take the buffer and an offset as arguments, and return an object containing
206
+ * the deserialized element and the number of bytes used to deserialize it (adv).
207
+ *
208
+ * @param deserialize - A custom deserializer function to extract individual elements from the buffer.
209
+ * @param vector - The input buffer containing the serialized array.
210
+ * @param offset - An optional starting position in the buffer for deserializing the array.
211
+ * @returns An object containing the deserialized array and the total number of bytes used during deserialization (adv).
212
+ */
213
+ export function deserializeArrayFromVector(deserialize, vector, offset = 0) {
214
+ let pos = offset;
215
+ const size = vector.readUInt32BE(pos);
216
+ pos += 4;
217
+ const arr = new Array(size);
218
+ for (let i = 0; i < size; ++i) {
219
+ const { elem, adv } = deserialize(vector, pos);
220
+ pos += adv;
221
+ arr[i] = elem;
222
+ }
223
+ return { elem: arr, adv: pos - offset };
224
+ }
225
+ /**
226
+ * Parse a buffer as a big integer.
227
+ */
228
+ export function toBigInt(buf) {
229
+ const hex = buf.toString('hex');
230
+ if (hex.length === 0) {
231
+ return BigInt(0);
232
+ }
233
+ return BigInt(`0x${hex}`);
234
+ }
235
+ /**
236
+ * Stores full 256 bits of information in 2 fields.
237
+ * @param buf - 32 bytes of data
238
+ * @returns 2 field elements
239
+ */
240
+ export function to2Fields(buf) {
241
+ if (buf.length !== 32) {
242
+ throw new Error('Buffer must be 32 bytes');
243
+ }
244
+ // TS version of https://github.com/AztecProtocol/aztec-packages/blob/e2e3bf1dbeda5199060fb1711200d20414557cd4/circuits/cpp/src/aztec3/circuits/hash.hpp#L330
245
+ // Split the hash into two fields, a high and a low
246
+ const buf1 = Buffer.concat([Buffer.alloc(16), buf.subarray(0, 16)]);
247
+ const buf2 = Buffer.concat([Buffer.alloc(16), buf.subarray(16, 32)]);
248
+ return [Fr.fromBuffer(buf1), Fr.fromBuffer(buf2)];
249
+ }
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZV9mdW5jcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemUvZnJlZV9mdW5jcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxDQUFVO0lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFTLEVBQUUsVUFBVSxHQUFHLENBQUM7SUFDckQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBUyxFQUFFLFVBQVUsR0FBRyxDQUFDO0lBQ3JELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFB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
@@ -0,0 +1,6 @@
1
+ export * from './free_funcs.js';
2
+ export * from './deserializer.js';
3
+ export * from './serializer.js';
4
+ export * from './buffer_reader.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './free_funcs.js';
2
+ export * from './deserializer.js';
3
+ export * from './serializer.js';
4
+ export * from './buffer_reader.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxZQUFZLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.test.d.ts","sourceRoot":"","sources":["../../src/serialize/serialize.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { randomBytes } from '../crypto/index.js';
2
+ import { Fr } from '../fields/fields.js';
3
+ import { deserializeArrayFromVector, deserializeBufferFromVector, deserializeField, deserializeUInt32, serializeBufferArrayToVector, serializeBufferToVector, } from './index.js';
4
+ describe('serialize', () => {
5
+ it('serialize buffer to vector and deserialize it back', () => {
6
+ const data = randomBytes(32);
7
+ const vector = serializeBufferToVector(data);
8
+ expect(vector.length).toBe(36);
9
+ const recovered = deserializeBufferFromVector(vector);
10
+ expect(recovered.elem).toEqual(data);
11
+ expect(recovered.adv).toEqual(4 + 32);
12
+ const paddedVector = Buffer.concat([randomBytes(10), vector, randomBytes(20)]);
13
+ const recovered2 = deserializeBufferFromVector(paddedVector, 10);
14
+ expect(recovered2.elem).toEqual(data);
15
+ expect(recovered2.adv).toEqual(4 + 32);
16
+ });
17
+ it('deserialize uint32', () => {
18
+ const uintBuf = Buffer.alloc(4);
19
+ uintBuf.writeUInt32BE(19, 0);
20
+ const recovered = deserializeUInt32(uintBuf);
21
+ expect(recovered.elem).toBe(19);
22
+ expect(recovered.adv).toBe(4);
23
+ const paddedBuf = Buffer.concat([randomBytes(10), uintBuf, randomBytes(20)]);
24
+ const recovered2 = deserializeUInt32(paddedBuf, 10);
25
+ expect(recovered2.elem).toBe(19);
26
+ expect(recovered2.adv).toBe(4);
27
+ });
28
+ it('deserialize field', () => {
29
+ const field = Fr.random();
30
+ const recovered = deserializeField(field.toBuffer());
31
+ expect(recovered.elem).toEqual(field);
32
+ expect(recovered.adv).toBe(32);
33
+ const paddedBuf = Buffer.concat([randomBytes(10), field.toBuffer(), randomBytes(20)]);
34
+ const recovered2 = deserializeField(paddedBuf, 10);
35
+ expect(recovered2.elem).toEqual(field);
36
+ expect(recovered2.adv).toBe(32);
37
+ });
38
+ it('serialize buffer array to vector and deserialize it back', () => {
39
+ // Array of uint32
40
+ const uintArr = [7, 13, 16];
41
+ const uintBufArr = uintArr.map(num => {
42
+ const uintBuf = Buffer.alloc(4);
43
+ uintBuf.writeUInt32BE(num, 0);
44
+ return uintBuf;
45
+ });
46
+ const uintArrVec = serializeBufferArrayToVector(uintBufArr);
47
+ expect(uintArrVec.length).toBe(4 + 4 * 3);
48
+ const recoveredUintArr = deserializeArrayFromVector(deserializeUInt32, uintArrVec);
49
+ expect(recoveredUintArr.elem).toEqual(uintArr);
50
+ expect(recoveredUintArr.adv).toEqual(4 + 4 * 3);
51
+ const paddedUintArrVec = Buffer.concat([randomBytes(10), uintArrVec, randomBytes(20)]);
52
+ const recoveredUintArr2 = deserializeArrayFromVector(deserializeUInt32, paddedUintArrVec, 10);
53
+ expect(recoveredUintArr2.elem).toEqual(uintArr);
54
+ expect(recoveredUintArr2.adv).toEqual(4 + 4 * 3);
55
+ // Array of field
56
+ const fieldArr = [Fr.random(), Fr.random(), Fr.random()];
57
+ const fieldArrVec = serializeBufferArrayToVector(fieldArr.map(fr => fr.toBuffer()));
58
+ expect(fieldArrVec.length).toBe(4 + 32 * 3);
59
+ const recoveredFieldArr = deserializeArrayFromVector(deserializeField, fieldArrVec);
60
+ expect(recoveredFieldArr.elem).toEqual(fieldArr);
61
+ expect(recoveredFieldArr.adv).toEqual(4 + 32 * 3);
62
+ const paddedFieldVec = Buffer.concat([randomBytes(10), fieldArrVec, randomBytes(20)]);
63
+ const recoveredFieldArr2 = deserializeArrayFromVector(deserializeField, paddedFieldVec, 10);
64
+ expect(recoveredFieldArr2.elem).toEqual(fieldArr);
65
+ expect(recoveredFieldArr2.adv).toEqual(4 + 32 * 3);
66
+ });
67
+ });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplL3NlcmlhbGl6ZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEdBQ3hCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDNUQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sU0FBUyxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sVUFBVSxHQUFHLDJCQUEyQixDQUFDLFlB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
@@ -0,0 +1,89 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /**
3
+ * The Serializer class provides a convenient and efficient way to serialize various data types into binary format.
4
+ * It supports serialization of primitive types (like boolean, signed/unsigned integers, BigInt), as well as more complex types (like Buffer, Date, and custom structures with their own 'toBuffer()' methods).
5
+ * The class maintains an internal buffer array that accumulates serialized data, allowing for easy concatenation and retrieval of the final serialized Buffer.
6
+ * This can be useful in various applications such as network communication, file storage, or other scenarios where binary data representation is needed.
7
+ */
8
+ export declare class Serializer {
9
+ private buf;
10
+ constructor();
11
+ /**
12
+ * Serialize a boolean value into a Buffer and append it to the internal buffer array.
13
+ * The serialized boolean will be stored as a single byte, where true is represented as 1 and false as 0.
14
+ * This method updates the Serializer's internal state and does not return any values.
15
+ *
16
+ * @param bool - The boolean value to be serialized.
17
+ */
18
+ bool(bool: boolean): void;
19
+ /**
20
+ * Encodes a given unsigned 32-bit integer into a Buffer and appends it to the internal buffer array.
21
+ * The provided number should be within the range of 0 and 2^32 - 1, inclusive.
22
+ * Throws an error if the input value is out of range or not a valid number.
23
+ *
24
+ * @param num - The unsigned 32-bit integer to be encoded and appended.
25
+ */
26
+ uInt32(num: number): void;
27
+ /**
28
+ * Serialize a signed 32-bit integer (int32) into the internal buffer.
29
+ * The number should be within the range of -2147483648 to 2147483647 inclusive.
30
+ * Throws an error if the input is not within the valid int32 range.
31
+ *
32
+ * @param num - The signed 32-bit integer to serialize.
33
+ */
34
+ int32(num: number): void;
35
+ /**
36
+ * Serializes a BigInt into a Buffer and appends it to the internal buffer array.
37
+ * The given 'num' is treated as a signed integer and is serialized using
38
+ * little-endian byte order. This method is useful for efficiently storing
39
+ * large integer values that may not fit within the range of a standard number.
40
+ *
41
+ * @param num - The BigInt value to serialize.
42
+ */
43
+ bigInt(num: bigint): void;
44
+ /**
45
+ * The given buffer is of variable length. Prefixes the buffer with its length.
46
+ * @param buf - The buffer to serialize as a variable-length vector.
47
+ */
48
+ vector(buf: Buffer): void;
49
+ /**
50
+ * Directly serializes a buffer that maybe of fixed, or variable length.
51
+ * It is assumed the corresponding deserialize function will handle variable length data, thus the length
52
+ * does not need to be prefixed here.
53
+ * If serializing a raw, variable length buffer, use vector().
54
+ * @param buf - The buffer to serialize as a fixed-length array.
55
+ */
56
+ buffer(buf: Buffer): void;
57
+ /**
58
+ * Serialize a string by first converting it to a buffer and then encoding its length as a prefix.
59
+ * The serialized string can be deserialized by reading the prefixed length and extracting the corresponding data.
60
+ * This method is useful for serializing strings of variable length in a consistent format.
61
+ *
62
+ * @param str - The input string to be serialized.
63
+ */
64
+ string(str: string): void;
65
+ /**
66
+ * Serialize a given Date instance into a Buffer and append it to the internal buffer list.
67
+ * The serialized date is stored as an 8-byte BigInt representing the number of milliseconds since the Unix epoch.
68
+ * This function facilitates serialization of JavaScript's built-in Date objects for subsequent data transmission or storage.
69
+ *
70
+ * @param date - The Date instance to be serialized.
71
+ */
72
+ date(date: Date): void;
73
+ /**
74
+ * Returns the serialized Buffer object that was created by calling various serialization methods on this Serializer instance.
75
+ * The resulting buffer can be used for sending or storing serialized data in binary format.
76
+ *
77
+ * @returns A Buffer containing the serialized data.
78
+ */
79
+ getBuffer(): Buffer;
80
+ /**
81
+ * Serializes an array of elements, where each element has a 'toBuffer()' method, into a single Buffer.
82
+ * The resulting buffer is prefixed with its length (number of elements), allowing for easy deserialization.
83
+ * This method is useful for serializing arrays of custom classes or data structures that have their own serialization logic.
84
+ *
85
+ * @param arr - The array of elements to be serialized. Each element must have a 'toBuffer()' method for serialization.
86
+ */
87
+ serializeArray<T>(arr: T[]): void;
88
+ }
89
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/serialize/serializer.ts"],"names":[],"mappings":";AAUA;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAgB;;IAI3B;;;;;;OAMG;IACI,IAAI,CAAC,IAAI,EAAE,OAAO;IAIzB;;;;;;OAMG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM;IAIzB;;;;;;OAMG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM;IAIxB;;;;;;;OAOG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM;IAIzB;;;OAGG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM;IAIzB;;;;;;OAMG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM;IAIzB;;;;;;OAMG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM;IAIzB;;;;;;OAMG;IACI,IAAI,CAAC,IAAI,EAAE,IAAI;IAItB;;;;;OAKG;IACI,SAAS;IAIhB;;;;;;OAMG;IACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CAGlC"}
@@ -0,0 +1,111 @@
1
+ import { boolToByte, numToInt32BE, numToUInt32BE, serializeBigInt, serializeBufferToVector, serializeDate, } from './free_funcs.js';
2
+ import { serializeBufferArrayToVector } from './index.js';
3
+ /**
4
+ * The Serializer class provides a convenient and efficient way to serialize various data types into binary format.
5
+ * It supports serialization of primitive types (like boolean, signed/unsigned integers, BigInt), as well as more complex types (like Buffer, Date, and custom structures with their own 'toBuffer()' methods).
6
+ * The class maintains an internal buffer array that accumulates serialized data, allowing for easy concatenation and retrieval of the final serialized Buffer.
7
+ * This can be useful in various applications such as network communication, file storage, or other scenarios where binary data representation is needed.
8
+ */
9
+ export class Serializer {
10
+ constructor() {
11
+ this.buf = [];
12
+ }
13
+ /**
14
+ * Serialize a boolean value into a Buffer and append it to the internal buffer array.
15
+ * The serialized boolean will be stored as a single byte, where true is represented as 1 and false as 0.
16
+ * This method updates the Serializer's internal state and does not return any values.
17
+ *
18
+ * @param bool - The boolean value to be serialized.
19
+ */
20
+ bool(bool) {
21
+ this.buf.push(boolToByte(bool));
22
+ }
23
+ /**
24
+ * Encodes a given unsigned 32-bit integer into a Buffer and appends it to the internal buffer array.
25
+ * The provided number should be within the range of 0 and 2^32 - 1, inclusive.
26
+ * Throws an error if the input value is out of range or not a valid number.
27
+ *
28
+ * @param num - The unsigned 32-bit integer to be encoded and appended.
29
+ */
30
+ uInt32(num) {
31
+ this.buf.push(numToUInt32BE(num));
32
+ }
33
+ /**
34
+ * Serialize a signed 32-bit integer (int32) into the internal buffer.
35
+ * The number should be within the range of -2147483648 to 2147483647 inclusive.
36
+ * Throws an error if the input is not within the valid int32 range.
37
+ *
38
+ * @param num - The signed 32-bit integer to serialize.
39
+ */
40
+ int32(num) {
41
+ this.buf.push(numToInt32BE(num));
42
+ }
43
+ /**
44
+ * Serializes a BigInt into a Buffer and appends it to the internal buffer array.
45
+ * The given 'num' is treated as a signed integer and is serialized using
46
+ * little-endian byte order. This method is useful for efficiently storing
47
+ * large integer values that may not fit within the range of a standard number.
48
+ *
49
+ * @param num - The BigInt value to serialize.
50
+ */
51
+ bigInt(num) {
52
+ this.buf.push(serializeBigInt(num));
53
+ }
54
+ /**
55
+ * The given buffer is of variable length. Prefixes the buffer with its length.
56
+ * @param buf - The buffer to serialize as a variable-length vector.
57
+ */
58
+ vector(buf) {
59
+ this.buf.push(serializeBufferToVector(buf));
60
+ }
61
+ /**
62
+ * Directly serializes a buffer that maybe of fixed, or variable length.
63
+ * It is assumed the corresponding deserialize function will handle variable length data, thus the length
64
+ * does not need to be prefixed here.
65
+ * If serializing a raw, variable length buffer, use vector().
66
+ * @param buf - The buffer to serialize as a fixed-length array.
67
+ */
68
+ buffer(buf) {
69
+ this.buf.push(buf);
70
+ }
71
+ /**
72
+ * Serialize a string by first converting it to a buffer and then encoding its length as a prefix.
73
+ * The serialized string can be deserialized by reading the prefixed length and extracting the corresponding data.
74
+ * This method is useful for serializing strings of variable length in a consistent format.
75
+ *
76
+ * @param str - The input string to be serialized.
77
+ */
78
+ string(str) {
79
+ this.vector(Buffer.from(str));
80
+ }
81
+ /**
82
+ * Serialize a given Date instance into a Buffer and append it to the internal buffer list.
83
+ * The serialized date is stored as an 8-byte BigInt representing the number of milliseconds since the Unix epoch.
84
+ * This function facilitates serialization of JavaScript's built-in Date objects for subsequent data transmission or storage.
85
+ *
86
+ * @param date - The Date instance to be serialized.
87
+ */
88
+ date(date) {
89
+ this.buf.push(serializeDate(date));
90
+ }
91
+ /**
92
+ * Returns the serialized Buffer object that was created by calling various serialization methods on this Serializer instance.
93
+ * The resulting buffer can be used for sending or storing serialized data in binary format.
94
+ *
95
+ * @returns A Buffer containing the serialized data.
96
+ */
97
+ getBuffer() {
98
+ return Buffer.concat(this.buf);
99
+ }
100
+ /**
101
+ * Serializes an array of elements, where each element has a 'toBuffer()' method, into a single Buffer.
102
+ * The resulting buffer is prefixed with its length (number of elements), allowing for easy deserialization.
103
+ * This method is useful for serializing arrays of custom classes or data structures that have their own serialization logic.
104
+ *
105
+ * @param arr - The array of elements to be serialized. Each element must have a 'toBuffer()' method for serialization.
106
+ */
107
+ serializeArray(arr) {
108
+ this.buf.push(serializeBufferArrayToVector(arr.map((e) => e.toBuffer())));
109
+ }
110
+ }
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemUvc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixhQUFhLEdBQ2QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUdyQjtRQUZRLFFBQUcsR0FBYSxFQUFFLENBQUM7SUFFWixDQUFDO0lBRWhCOzs7Ozs7T0FNRztJQUNJLElBQUksQ0FBQyxJQUFhO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLEdBQVc7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxJQUFJLENBQUMsSUFBVTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUFJLEdBQVE7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Represents a fixed-length array.
3
+ */
4
+ export type Tuple<T, N extends number> = N extends N ? (number extends N ? T[] : _Tuple<T, N, []>) : never;
5
+ /**
6
+ * Recursive type helper for constructing a fixed-length tuple of a given type.
7
+ * This is utilized internally by Tuple to create the final fixed-length tuple.
8
+ */
9
+ type _Tuple<T, N extends number, R extends unknown[]> = R['length'] extends N ? R : _Tuple<T, N, [T, ...R]>;
10
+ /**
11
+ * Check an array size, and cast it to a tuple.
12
+ * @param array - The array.
13
+ * @param n - The size.
14
+ * @returns The case tuple, or throws Error.
15
+ */
16
+ export declare function assertLength<T, N extends number>(array: T[], n: N): Tuple<T, N>;
17
+ /**
18
+ * Annoying, mapping a tuple does not preserve length.
19
+ * This is a helper to preserve length during a map operation.
20
+ * @typeparam T - The original array type.
21
+ */
22
+ type MapTuple<T extends any[], F extends (item: any) => any> = {
23
+ [K in keyof T]: T[K] extends infer U ? (F extends (item: U) => infer V ? V : never) : never;
24
+ };
25
+ /**
26
+ * Annoyingly, mapping a tuple does not preserve length.
27
+ * This is a helper to preserve length during a map operation.
28
+ * @see https://github.com/microsoft/TypeScript/issues/29841.
29
+ * @param array - A tuple array.
30
+ */
31
+ export declare function mapTuple<T extends any[], F extends (item: any) => any>(tuple: T, fn: F): MapTuple<T, F>;
32
+ export {};
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/serialize/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3G;;;GAGG;AACH,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE5G;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAK/E;AACD;;;;GAIG;AACH,KAAK,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI;KAC5D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK;CAC5F,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAEvG"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Check an array size, and cast it to a tuple.
3
+ * @param array - The array.
4
+ * @param n - The size.
5
+ * @returns The case tuple, or throws Error.
6
+ */
7
+ export function assertLength(array, n) {
8
+ if (array.length !== n) {
9
+ throw new Error("Wrong 'fixed array' size");
10
+ }
11
+ return array;
12
+ }
13
+ /**
14
+ * Annoyingly, mapping a tuple does not preserve length.
15
+ * This is a helper to preserve length during a map operation.
16
+ * @see https://github.com/microsoft/TypeScript/issues/29841.
17
+ * @param array - A tuple array.
18
+ */
19
+ export function mapTuple(tuple, fn) {
20
+ return tuple.map(fn);
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBc0IsS0FBVSxFQUFFLENBQUk7SUFDaEUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLEtBQW9CLENBQUM7QUFDOUIsQ0FBQztBQVVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBZ0QsS0FBUSxFQUFFLEVBQUs7SUFDckYsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBbUIsQ0FBQztBQUN6QyxDQUFDIn0=