@aztec/foundation 0.0.1-commit.0208eb9 → 0.0.1-commit.031e54b

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 (307) hide show
  1. package/dest/array/sorted_array.d.ts +6 -1
  2. package/dest/array/sorted_array.d.ts.map +1 -1
  3. package/dest/array/sorted_array.js +18 -15
  4. package/dest/bigint-buffer/index.d.ts +1 -1
  5. package/dest/bigint-buffer/index.d.ts.map +1 -1
  6. package/dest/bigint-buffer/index.js +6 -1
  7. package/dest/branded-types/block_number.d.ts +3 -3
  8. package/dest/branded-types/block_number.d.ts.map +1 -1
  9. package/dest/branded-types/block_number.js +15 -4
  10. package/dest/branded-types/buffer32_hash.d.ts +27 -0
  11. package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
  12. package/dest/branded-types/buffer32_hash.js +12 -0
  13. package/dest/branded-types/checkpoint_number.d.ts +9 -3
  14. package/dest/branded-types/checkpoint_number.d.ts.map +1 -1
  15. package/dest/branded-types/checkpoint_number.js +11 -0
  16. package/dest/branded-types/epoch.d.ts +2 -2
  17. package/dest/branded-types/epoch.d.ts.map +1 -1
  18. package/dest/branded-types/index.d.ts +2 -1
  19. package/dest/branded-types/index.d.ts.map +1 -1
  20. package/dest/branded-types/index.js +1 -0
  21. package/dest/branded-types/index_within_checkpoint.d.ts +2 -2
  22. package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -1
  23. package/dest/branded-types/slot.d.ts +5 -2
  24. package/dest/branded-types/slot.d.ts.map +1 -1
  25. package/dest/branded-types/slot.js +3 -0
  26. package/dest/buffer/buffer16.d.ts +3 -1
  27. package/dest/buffer/buffer16.d.ts.map +1 -1
  28. package/dest/buffer/buffer32.d.ts +28 -61
  29. package/dest/buffer/buffer32.d.ts.map +1 -1
  30. package/dest/buffer/buffer32.js +29 -63
  31. package/dest/buffer/index.d.ts +2 -1
  32. package/dest/buffer/index.d.ts.map +1 -1
  33. package/dest/buffer/index.js +1 -0
  34. package/dest/buffer/utils.d.ts +3 -0
  35. package/dest/buffer/utils.d.ts.map +1 -0
  36. package/dest/buffer/utils.js +7 -0
  37. package/dest/collection/array.d.ts +11 -1
  38. package/dest/collection/array.d.ts.map +1 -1
  39. package/dest/collection/array.js +33 -0
  40. package/dest/collection/index.d.ts +3 -1
  41. package/dest/collection/index.d.ts.map +1 -1
  42. package/dest/collection/index.js +2 -0
  43. package/dest/collection/lru_map.d.ts +41 -0
  44. package/dest/collection/lru_map.d.ts.map +1 -0
  45. package/dest/collection/lru_map.js +119 -0
  46. package/dest/collection/lru_set.d.ts +35 -0
  47. package/dest/collection/lru_set.d.ts.map +1 -0
  48. package/dest/collection/lru_set.js +95 -0
  49. package/dest/committable/committable.js +1 -1
  50. package/dest/config/env_var.d.ts +2 -2
  51. package/dest/config/env_var.d.ts.map +1 -1
  52. package/dest/config/index.d.ts +47 -30
  53. package/dest/config/index.d.ts.map +1 -1
  54. package/dest/config/index.js +44 -44
  55. package/dest/config/network_config.d.ts +15 -41
  56. package/dest/config/network_config.d.ts.map +1 -1
  57. package/dest/config/network_config.js +4 -1
  58. package/dest/config/network_name.d.ts +2 -2
  59. package/dest/config/network_name.d.ts.map +1 -1
  60. package/dest/config/network_name.js +3 -3
  61. package/dest/config/secret_value.d.ts +2 -2
  62. package/dest/config/secret_value.d.ts.map +1 -1
  63. package/dest/crypto/aes128/index.d.ts +2 -1
  64. package/dest/crypto/aes128/index.d.ts.map +1 -1
  65. package/dest/crypto/aes128/index.js +11 -2
  66. package/dest/crypto/bls/bn254_keystore.d.ts +9 -176
  67. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
  68. package/dest/crypto/bls/bn254_keystore.js +0 -17
  69. package/dest/crypto/poseidon/index.d.ts +1 -1
  70. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  71. package/dest/crypto/poseidon/index.js +40 -33
  72. package/dest/crypto/schnorr/index.d.ts +8 -7
  73. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  74. package/dest/crypto/schnorr/index.js +6 -6
  75. package/dest/crypto/schnorr/signature.d.ts +9 -29
  76. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  77. package/dest/crypto/schnorr/signature.js +20 -36
  78. package/dest/crypto/secp256k1-signer/utils.d.ts +12 -1
  79. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  80. package/dest/crypto/secp256k1-signer/utils.js +26 -0
  81. package/dest/curves/bls12/field.d.ts +3 -3
  82. package/dest/curves/bls12/field.d.ts.map +1 -1
  83. package/dest/curves/bls12/field.js +0 -5
  84. package/dest/curves/bls12/point.d.ts +2 -2
  85. package/dest/curves/bls12/point.d.ts.map +1 -1
  86. package/dest/curves/bn254/field.d.ts +24 -19
  87. package/dest/curves/bn254/field.d.ts.map +1 -1
  88. package/dest/curves/bn254/field.js +28 -19
  89. package/dest/curves/grumpkin/point.d.ts +14 -28
  90. package/dest/curves/grumpkin/point.d.ts.map +1 -1
  91. package/dest/curves/grumpkin/point.js +29 -43
  92. package/dest/eth-address/index.d.ts +2 -2
  93. package/dest/eth-address/index.d.ts.map +1 -1
  94. package/dest/eth-address/index.js +0 -3
  95. package/dest/eth-signature/eth_signature.d.ts +3 -2
  96. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  97. package/dest/eth-signature/eth_signature.js +7 -2
  98. package/dest/fifo/fifo_frame_reader.d.ts +41 -0
  99. package/dest/fifo/fifo_frame_reader.d.ts.map +1 -0
  100. package/dest/fifo/fifo_frame_reader.js +91 -0
  101. package/dest/fifo/index.d.ts +2 -0
  102. package/dest/fifo/index.d.ts.map +1 -0
  103. package/dest/fifo/index.js +1 -0
  104. package/dest/fifo_set/fifo_set.d.ts +15 -0
  105. package/dest/fifo_set/fifo_set.d.ts.map +1 -0
  106. package/dest/fifo_set/fifo_set.js +39 -0
  107. package/dest/fifo_set/index.d.ts +2 -0
  108. package/dest/fifo_set/index.d.ts.map +1 -0
  109. package/dest/fifo_set/index.js +1 -0
  110. package/dest/jest/setup.js +24 -0
  111. package/dest/json-rpc/client/fetch.d.ts +1 -1
  112. package/dest/json-rpc/client/fetch.d.ts.map +1 -1
  113. package/dest/json-rpc/client/fetch.js +4 -3
  114. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +2 -1
  115. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  116. package/dest/json-rpc/client/safe_json_rpc_client.js +3 -3
  117. package/dest/json-rpc/client/undici.d.ts +1 -1
  118. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  119. package/dest/json-rpc/client/undici.js +5 -3
  120. package/dest/json-rpc/fixtures/test_state.d.ts +4 -8
  121. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  122. package/dest/json-rpc/fixtures/test_state.js +57 -17
  123. package/dest/json-rpc/server/api_key_auth.d.ts +19 -0
  124. package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
  125. package/dest/json-rpc/server/api_key_auth.js +57 -0
  126. package/dest/json-rpc/server/index.d.ts +2 -1
  127. package/dest/json-rpc/server/index.d.ts.map +1 -1
  128. package/dest/json-rpc/server/index.js +1 -0
  129. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +8 -3
  130. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  131. package/dest/json-rpc/server/safe_json_rpc_server.js +27 -13
  132. package/dest/log/bigint-utils.d.ts +5 -0
  133. package/dest/log/bigint-utils.d.ts.map +1 -0
  134. package/dest/log/bigint-utils.js +21 -0
  135. package/dest/log/gcloud-logger-config.d.ts +1 -1
  136. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  137. package/dest/log/gcloud-logger-config.js +3 -0
  138. package/dest/log/log-filters.d.ts +17 -4
  139. package/dest/log/log-filters.d.ts.map +1 -1
  140. package/dest/log/log-filters.js +26 -12
  141. package/dest/log/pino-logger.d.ts +1 -1
  142. package/dest/log/pino-logger.d.ts.map +1 -1
  143. package/dest/log/pino-logger.js +23 -4
  144. package/dest/noir/noir_package_config.d.ts +19 -104
  145. package/dest/noir/noir_package_config.d.ts.map +1 -1
  146. package/dest/noir/noir_package_config.js +1 -1
  147. package/dest/queue/base_memory_queue.d.ts +2 -2
  148. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  149. package/dest/queue/batch_queue.d.ts +1 -1
  150. package/dest/queue/batch_queue.d.ts.map +1 -1
  151. package/dest/queue/batch_queue.js +1 -0
  152. package/dest/retry/index.d.ts +12 -1
  153. package/dest/retry/index.d.ts.map +1 -1
  154. package/dest/retry/index.js +21 -0
  155. package/dest/schemas/api.d.ts +12 -10
  156. package/dest/schemas/api.d.ts.map +1 -1
  157. package/dest/schemas/api.js +7 -1
  158. package/dest/schemas/parse.d.ts +4 -4
  159. package/dest/schemas/parse.d.ts.map +1 -1
  160. package/dest/schemas/parse.js +6 -5
  161. package/dest/schemas/schemas.d.ts +15 -15
  162. package/dest/schemas/types.d.ts +3 -3
  163. package/dest/schemas/types.d.ts.map +1 -1
  164. package/dest/schemas/utils.d.ts +7 -11
  165. package/dest/schemas/utils.d.ts.map +1 -1
  166. package/dest/schemas/utils.js +2 -18
  167. package/dest/serialize/buffer_reader.d.ts +8 -1
  168. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  169. package/dest/serialize/buffer_reader.js +13 -0
  170. package/dest/serialize/buffer_sink.d.ts +134 -0
  171. package/dest/serialize/buffer_sink.d.ts.map +1 -0
  172. package/dest/serialize/buffer_sink.js +297 -0
  173. package/dest/serialize/index.d.ts +2 -1
  174. package/dest/serialize/index.d.ts.map +1 -1
  175. package/dest/serialize/index.js +1 -0
  176. package/dest/serialize/serialize.d.ts +19 -1
  177. package/dest/serialize/serialize.d.ts.map +1 -1
  178. package/dest/serialize/serialize.js +31 -0
  179. package/dest/sleep/index.d.ts +2 -1
  180. package/dest/sleep/index.d.ts.map +1 -1
  181. package/dest/sleep/index.js +10 -1
  182. package/dest/string/index.js +1 -1
  183. package/dest/timer/date.d.ts +25 -1
  184. package/dest/timer/date.d.ts.map +1 -1
  185. package/dest/timer/date.js +33 -0
  186. package/dest/timer/index.d.ts +2 -2
  187. package/dest/timer/index.d.ts.map +1 -1
  188. package/dest/timer/index.js +1 -1
  189. package/dest/timer/timeout.d.ts +3 -1
  190. package/dest/timer/timeout.d.ts.map +1 -1
  191. package/dest/timer/timeout.js +26 -0
  192. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +11 -2
  193. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
  194. package/dest/transport/index.d.ts +1 -2
  195. package/dest/transport/index.d.ts.map +1 -1
  196. package/dest/transport/index.js +0 -1
  197. package/dest/transport/transport_client.js +2 -2
  198. package/dest/trees/balanced_merkle_tree_root.d.ts +2 -3
  199. package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -1
  200. package/dest/trees/balanced_merkle_tree_root.js +2 -3
  201. package/dest/trees/hasher.d.ts +3 -2
  202. package/dest/trees/hasher.d.ts.map +1 -1
  203. package/dest/trees/hasher.js +5 -5
  204. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  205. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  206. package/dest/trees/indexed_merkle_tree_calculator.js +5 -1
  207. package/dest/trees/membership_witness.d.ts +2 -2
  208. package/dest/trees/membership_witness.d.ts.map +1 -1
  209. package/dest/trees/merkle_tree_calculator.d.ts +4 -2
  210. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  211. package/dest/trees/merkle_tree_calculator.js +1 -5
  212. package/dest/trees/sibling_path.d.ts +5 -4
  213. package/dest/trees/sibling_path.d.ts.map +1 -1
  214. package/dest/trees/sibling_path.js +10 -8
  215. package/dest/trees/unbalanced_merkle_tree_root.d.ts +2 -3
  216. package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -1
  217. package/dest/trees/unbalanced_merkle_tree_root.js +2 -3
  218. package/dest/types/index.d.ts +23 -1
  219. package/dest/types/index.d.ts.map +1 -1
  220. package/dest/types/index.js +15 -0
  221. package/package.json +26 -4
  222. package/src/array/sorted_array.ts +22 -17
  223. package/src/bigint-buffer/index.ts +6 -1
  224. package/src/branded-types/block_number.ts +20 -2
  225. package/src/branded-types/buffer32_hash.ts +38 -0
  226. package/src/branded-types/checkpoint_number.ts +16 -1
  227. package/src/branded-types/epoch.ts +1 -1
  228. package/src/branded-types/index.ts +1 -0
  229. package/src/branded-types/index_within_checkpoint.ts +1 -1
  230. package/src/branded-types/slot.ts +6 -1
  231. package/src/buffer/buffer16.ts +3 -0
  232. package/src/buffer/buffer32.ts +39 -68
  233. package/src/buffer/index.ts +1 -0
  234. package/src/buffer/utils.ts +8 -0
  235. package/src/collection/array.ts +34 -0
  236. package/src/collection/index.ts +2 -0
  237. package/src/collection/lru_map.ts +143 -0
  238. package/src/collection/lru_set.ts +115 -0
  239. package/src/committable/committable.ts +1 -1
  240. package/src/config/env_var.ts +62 -23
  241. package/src/config/index.ts +116 -96
  242. package/src/config/network_config.ts +3 -0
  243. package/src/config/network_name.ts +6 -6
  244. package/src/config/secret_value.ts +1 -1
  245. package/src/crypto/aes128/index.ts +11 -2
  246. package/src/crypto/bls/bn254_keystore.ts +0 -23
  247. package/src/crypto/poseidon/index.ts +42 -34
  248. package/src/crypto/schnorr/index.ts +9 -8
  249. package/src/crypto/schnorr/signature.ts +17 -46
  250. package/src/crypto/secp256k1-signer/utils.ts +32 -0
  251. package/src/curves/bls12/field.ts +0 -7
  252. package/src/curves/bn254/field.ts +41 -36
  253. package/src/curves/grumpkin/point.ts +23 -40
  254. package/src/eth-address/index.ts +0 -4
  255. package/src/eth-signature/eth_signature.ts +7 -1
  256. package/src/fifo/fifo_frame_reader.ts +113 -0
  257. package/src/fifo/index.ts +1 -0
  258. package/src/fifo_set/fifo_set.ts +52 -0
  259. package/src/fifo_set/index.ts +1 -0
  260. package/src/jest/setup.mjs +27 -0
  261. package/src/json-rpc/client/fetch.ts +4 -3
  262. package/src/json-rpc/client/safe_json_rpc_client.ts +4 -2
  263. package/src/json-rpc/client/undici.ts +5 -3
  264. package/src/json-rpc/fixtures/test_state.ts +10 -10
  265. package/src/json-rpc/server/api_key_auth.ts +63 -0
  266. package/src/json-rpc/server/index.ts +1 -0
  267. package/src/json-rpc/server/safe_json_rpc_server.ts +31 -13
  268. package/src/log/bigint-utils.ts +25 -0
  269. package/src/log/gcloud-logger-config.ts +5 -0
  270. package/src/log/log-filters.ts +29 -11
  271. package/src/log/pino-logger.ts +25 -4
  272. package/src/noir/noir_package_config.ts +32 -20
  273. package/src/queue/base_memory_queue.ts +1 -1
  274. package/src/queue/batch_queue.ts +1 -0
  275. package/src/retry/index.ts +30 -0
  276. package/src/schemas/api.ts +25 -25
  277. package/src/schemas/parse.ts +9 -6
  278. package/src/schemas/schemas.ts +4 -4
  279. package/src/schemas/types.ts +2 -2
  280. package/src/schemas/utils.ts +4 -38
  281. package/src/serialize/buffer_reader.ts +15 -0
  282. package/src/serialize/buffer_sink.ts +350 -0
  283. package/src/serialize/index.ts +1 -0
  284. package/src/serialize/serialize.ts +32 -0
  285. package/src/sleep/index.ts +10 -1
  286. package/src/string/index.ts +1 -1
  287. package/src/timer/date.ts +48 -0
  288. package/src/timer/index.ts +1 -1
  289. package/src/timer/timeout.ts +31 -0
  290. package/src/transport/dispatch/create_dispatch_proxy.ts +11 -1
  291. package/src/transport/index.ts +0 -1
  292. package/src/transport/transport_client.ts +2 -2
  293. package/src/trees/balanced_merkle_tree_root.ts +2 -5
  294. package/src/trees/hasher.ts +6 -3
  295. package/src/trees/indexed_merkle_tree_calculator.ts +5 -1
  296. package/src/trees/merkle_tree_calculator.ts +4 -10
  297. package/src/trees/sibling_path.ts +11 -6
  298. package/src/trees/unbalanced_merkle_tree_root.ts +2 -5
  299. package/src/types/index.ts +47 -0
  300. package/dest/crypto/serialize.d.ts +0 -51
  301. package/dest/crypto/serialize.d.ts.map +0 -1
  302. package/dest/crypto/serialize.js +0 -68
  303. package/dest/transport/dispatch/create_dispatch_fn.d.ts +0 -25
  304. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +0 -1
  305. package/dest/transport/dispatch/create_dispatch_fn.js +0 -17
  306. package/src/crypto/serialize.ts +0 -85
  307. package/src/transport/dispatch/create_dispatch_fn.ts +0 -35
@@ -0,0 +1,297 @@
1
+ /**
2
+ * A value that can be appended to a {@link BufferSink}. Mirrors `Bufferable`, but the object arm allows the
3
+ * optional-sink overload of `toBuffer` so a legacy `toBuffer(): Buffer` and a migrated `toBuffer(sink?)` both fit.
4
+ */ const DEFAULT_INITIAL_CAPACITY = 1024;
5
+ const MASK_64 = (1n << 64n) - 1n;
6
+ /**
7
+ * A growable, append-only binary sink backed by a single `ArrayBuffer`.
8
+ *
9
+ * It exists to replace the recursive `toBuffer()` chain — which allocates a `Buffer` at every node and
10
+ * `Buffer.concat`s at every level — with one buffer that the whole object graph streams into and that is sliced
11
+ * exactly once at the root. Encodings are big-endian, matching `serializeToBuffer` byte-for-byte.
12
+ *
13
+ * The migration contract is the optional-sink `toBuffer`:
14
+ *
15
+ * ```ts
16
+ * toBuffer(): Buffer;
17
+ * toBuffer(sink: BufferSink): void;
18
+ * toBuffer(sink?: BufferSink): Buffer | void {
19
+ * if (!sink) return BufferSink.serialize(this); // own a sink, fill it, slice once
20
+ * serializeToSink(sink, this.a, this.b, this.c); // stream into the caller's sink
21
+ * }
22
+ * ```
23
+ *
24
+ * When a sink is passed it writes and returns `undefined`; otherwise it returns its own buffer. Nodes that have
25
+ * not been migrated keep their plain `toBuffer(): Buffer` and are folded in via the return-value fallback in
26
+ * {@link serializeToSink}, so the tree stays valid at every step of an incremental migration.
27
+ *
28
+ * Performance note: bigints are written via `DataView.setBigUint64` limbs ({@link writeBigInt},
29
+ * {@link writeField}), NOT a per-byte shift loop. The limb form is ~16x faster than the legacy hex round-trip
30
+ * on field-heavy structures, and faster than the legacy path at every width — a naive per-byte shift loop is
31
+ * actually the slowest option, since each byte allocates a fresh BigInt. See the spike benchmark.
32
+ */ export class BufferSink {
33
+ buffer;
34
+ view;
35
+ offset = 0;
36
+ constructor(initialCapacity = DEFAULT_INITIAL_CAPACITY){
37
+ const ab = new ArrayBuffer(initialCapacity);
38
+ this.buffer = new Uint8Array(ab);
39
+ this.view = new DataView(ab);
40
+ }
41
+ /** Number of bytes written so far. */ get length() {
42
+ return this.offset;
43
+ }
44
+ /**
45
+ * Serialize a migrated value into a fresh sink and return the single resulting buffer. This is the no-sink
46
+ * branch of every migrated `toBuffer`: one allocation, one slice, only at the root.
47
+ *
48
+ * @param obj - The value to serialize via its sink-aware `toBuffer`.
49
+ * @param initialCapacity - Optional size hint (e.g. from `getSize()`) to skip reallocations on hot paths.
50
+ */ static serialize(obj, initialCapacity) {
51
+ const sink = new BufferSink(initialCapacity);
52
+ obj.toBuffer(sink);
53
+ return sink.toBuffer();
54
+ }
55
+ ensure(extra) {
56
+ const required = this.offset + extra;
57
+ if (required <= this.buffer.length) {
58
+ return;
59
+ }
60
+ let next = this.buffer.length * 2;
61
+ while(next < required){
62
+ next *= 2;
63
+ }
64
+ const grown = new Uint8Array(next);
65
+ grown.set(this.buffer.subarray(0, this.offset));
66
+ this.buffer = grown;
67
+ this.view = new DataView(grown.buffer);
68
+ }
69
+ /** Append a single byte (0/1) for a boolean, matching `boolToBuffer`. */ writeBool(value) {
70
+ this.ensure(1);
71
+ this.buffer[this.offset++] = value ? 1 : 0;
72
+ }
73
+ /** Append an unsigned 8-bit integer. */ writeUInt8(value) {
74
+ this.ensure(1);
75
+ this.buffer[this.offset++] = value & 0xff;
76
+ }
77
+ /** Append a big-endian unsigned 16-bit integer. */ writeUInt16(value) {
78
+ this.ensure(2);
79
+ this.view.setUint16(this.offset, value, false);
80
+ this.offset += 2;
81
+ }
82
+ /** Append a big-endian unsigned 32-bit integer, matching `numToUInt32BE`. */ writeNumber(value) {
83
+ this.ensure(4);
84
+ this.view.setUint32(this.offset, value, false);
85
+ this.offset += 4;
86
+ }
87
+ /** Append a big-endian unsigned 64-bit integer, matching `bigintToUInt64BE`. */ writeUInt64(value) {
88
+ this.ensure(8);
89
+ this.view.setBigUint64(this.offset, value, false);
90
+ this.offset += 8;
91
+ }
92
+ /**
93
+ * Append a non-negative bigint as a big-endian unsigned integer of `width` bytes (default 32), matching
94
+ * `serializeBigInt` / `toBufferBE`. Every width is written limb-wise via `setBigUint64` rather than the
95
+ * legacy per-byte BigInt shift loop — that loop allocated a fresh BigInt per byte and benchmarked as the
96
+ * *slowest* option (slower even than the legacy hex round-trip); the limb form is faster at every width.
97
+ *
98
+ * The bulk of the value is written as 64-bit big-endian limbs from the least-significant tail upward, and
99
+ * a final `width % 8` (at most 7) high bytes that don't fill a whole limb are written individually. The
100
+ * common widths (8/16/32) are exact multiples of 8, so they take the pure-limb path with no remainder.
101
+ * `width === 32` keeps its own straight-line four-limb form (shared with {@link writeField}) since it is
102
+ * the `Fr`/`Fq`/Chonk-proof hot path and the unrolled body is marginally faster than the loop.
103
+ *
104
+ * @param value - The non-negative bigint to serialize.
105
+ * @param width - Output width in bytes.
106
+ */ writeBigInt(value, width = 32) {
107
+ if (value < 0n) {
108
+ throw new Error(`Cannot serialize negative bigint ${value}`);
109
+ }
110
+ this.ensure(width);
111
+ const o = this.offset;
112
+ if (width === 32) {
113
+ let x = value;
114
+ this.view.setBigUint64(o + 24, x & MASK_64, false);
115
+ x >>= 64n;
116
+ this.view.setBigUint64(o + 16, x & MASK_64, false);
117
+ x >>= 64n;
118
+ this.view.setBigUint64(o + 8, x & MASK_64, false);
119
+ x >>= 64n;
120
+ this.view.setBigUint64(o, x & MASK_64, false);
121
+ x >>= 64n;
122
+ if (x !== 0n) {
123
+ throw new Error(`BigInt ${value} does not fit into 32 bytes`);
124
+ }
125
+ this.offset += 32;
126
+ return;
127
+ }
128
+ let x = value;
129
+ let pos = o + width;
130
+ while(pos - 8 >= o){
131
+ pos -= 8;
132
+ this.view.setBigUint64(pos, x & MASK_64, false);
133
+ x >>= 64n;
134
+ }
135
+ for(let i = pos - 1; i >= o; i--){
136
+ this.buffer[i] = Number(x & 0xffn);
137
+ x >>= 8n;
138
+ }
139
+ if (x !== 0n) {
140
+ throw new Error(`BigInt ${value} does not fit into ${width} bytes`);
141
+ }
142
+ this.offset += width;
143
+ }
144
+ /**
145
+ * Append a 32-byte (256-bit) big-endian non-negative bigint. Specialized form of {@link writeBigInt}
146
+ * with no width parameter and no width-branch, so V8 can inline the four `setBigUint64` limb writes
147
+ * without the wider branchy form's instability. This is the Fr/Fq leaf hot path; prefer it over
148
+ * `writeBigInt(value, 32)` in callers that always serialize 32-byte fields.
149
+ */ writeField(value) {
150
+ if (value < 0n) {
151
+ throw new Error(`Cannot serialize negative bigint ${value}`);
152
+ }
153
+ this.ensure(32);
154
+ const o = this.offset;
155
+ let x = value;
156
+ this.view.setBigUint64(o + 24, x & MASK_64, false);
157
+ x >>= 64n;
158
+ this.view.setBigUint64(o + 16, x & MASK_64, false);
159
+ x >>= 64n;
160
+ this.view.setBigUint64(o + 8, x & MASK_64, false);
161
+ x >>= 64n;
162
+ this.view.setBigUint64(o, x & MASK_64, false);
163
+ if (x >> 64n !== 0n) {
164
+ throw new Error(`BigInt ${value} does not fit into 32 bytes`);
165
+ }
166
+ this.offset = o + 32;
167
+ }
168
+ /**
169
+ * Append an array of field elements (or any objects exposing `toBigInt(): bigint`) as a contiguous
170
+ * sequence of 32-byte big-endian limbs. Iterates inline — no per-element `toBuffer` dispatch and no
171
+ * per-element function-call indirection through the generic sinkable dispatcher. Use this in classes
172
+ * that hold large flat field arrays (e.g. the 1632-element ChonkProof field list).
173
+ */ writeFields(fields) {
174
+ this.ensure(32 * fields.length);
175
+ for(let i = 0, n = fields.length; i < n; i++){
176
+ const value = fields[i].toBigInt();
177
+ if (value < 0n) {
178
+ throw new Error(`Cannot serialize negative bigint ${value}`);
179
+ }
180
+ const o = this.offset;
181
+ let x = value;
182
+ this.view.setBigUint64(o + 24, x & MASK_64, false);
183
+ x >>= 64n;
184
+ this.view.setBigUint64(o + 16, x & MASK_64, false);
185
+ x >>= 64n;
186
+ this.view.setBigUint64(o + 8, x & MASK_64, false);
187
+ x >>= 64n;
188
+ this.view.setBigUint64(o, x & MASK_64, false);
189
+ if (x >> 64n !== 0n) {
190
+ throw new Error(`BigInt ${value} does not fit into 32 bytes`);
191
+ }
192
+ this.offset = o + 32;
193
+ }
194
+ }
195
+ /** Append raw bytes verbatim (no length prefix), matching how a `Buffer`/`Uint8Array` is serialized inline. */ writeBytes(bytes) {
196
+ this.ensure(bytes.length);
197
+ this.buffer.set(bytes, this.offset);
198
+ this.offset += bytes.length;
199
+ }
200
+ /** Append a string as a 4-byte big-endian length prefix followed by its UTF-8 bytes, matching the string case. */ writeString(value) {
201
+ const bytes = Buffer.from(value);
202
+ this.writeNumber(bytes.length);
203
+ this.writeBytes(bytes);
204
+ }
205
+ /**
206
+ * Reset the write cursor without releasing the backing buffer. Lets the same sink be reused across many
207
+ * serializations without reallocating — the per-call cost drops to the bytes written (no `new ArrayBuffer`).
208
+ * Any `Buffer` previously returned by {@link toBuffer} is a fresh copy and remains valid; any view from
209
+ * {@link asUint8Array} aliases the buffer and is invalidated.
210
+ */ reset() {
211
+ this.offset = 0;
212
+ }
213
+ /** Copy the written region into a freshly allocated `Buffer`. The single allocation of the whole serialization. */ toBuffer() {
214
+ return Buffer.from(this.buffer.subarray(0, this.offset));
215
+ }
216
+ /** A zero-copy view of the written region. Valid only until the next write (which may reallocate). */ asUint8Array() {
217
+ return this.buffer.subarray(0, this.offset);
218
+ }
219
+ }
220
+ /**
221
+ * Streaming counterpart to `serializeToBufferArray`: walk a list of {@link Sinkable}s and append each to the sink.
222
+ * Dispatch matches `serializeToBufferArray` byte-for-byte. An object is serialized via `obj.toBuffer(sink)`; a
223
+ * migrated node writes into the sink and returns `undefined`, while a not-yet-migrated node ignores the argument
224
+ * and returns its `Buffer`, which we copy in. That return-value fallback is what makes the migration incremental.
225
+ *
226
+ * Dispatch is hot-pathed for the common case of objects exposing `toBuffer` (Fr/Fq and every other migrated leaf),
227
+ * and arrays recurse via an inner-array helper to avoid the per-call rest-args allocation that a spread-recurse
228
+ * would force on large flat arrays like the 1632-element ChonkProof field list.
229
+ *
230
+ * @param sink - The destination sink.
231
+ * @param objs - The values to serialize, in order.
232
+ */ export function serializeToSink(sink, ...objs) {
233
+ serializeArrayToSinkInner(sink, objs);
234
+ }
235
+ function serializeArrayToSinkInner(sink, objs) {
236
+ for(let i = 0, n = objs.length; i < n; i++){
237
+ serializeOneToSink(sink, objs[i]);
238
+ }
239
+ }
240
+ function serializeOneToSink(sink, obj) {
241
+ if (typeof obj === 'object' && obj !== null) {
242
+ // Hot path: migrated nodes (anything implementing toBuffer, including Fr/Fq via BaseField). This branch
243
+ // is taken for the vast majority of recursive serialization, so it is checked before the typeof primitives.
244
+ if (obj.toBuffer !== undefined) {
245
+ const ret = obj.toBuffer(sink);
246
+ if (ret !== undefined) {
247
+ sink.writeBytes(ret);
248
+ }
249
+ return;
250
+ }
251
+ if (Array.isArray(obj)) {
252
+ serializeArrayToSinkInner(sink, obj);
253
+ return;
254
+ }
255
+ if (Buffer.isBuffer(obj) || obj instanceof Uint8Array) {
256
+ sink.writeBytes(obj);
257
+ return;
258
+ }
259
+ throw new Error(`Cannot serialize input to sink: ${typeof obj} ${obj.constructor?.name}`);
260
+ }
261
+ if (typeof obj === 'boolean') {
262
+ sink.writeBool(obj);
263
+ } else if (typeof obj === 'bigint') {
264
+ sink.writeBigInt(obj);
265
+ } else if (typeof obj === 'number') {
266
+ sink.writeNumber(obj);
267
+ } else if (typeof obj === 'string') {
268
+ sink.writeString(obj);
269
+ } else {
270
+ throw new Error(`Cannot serialize input to sink: ${typeof obj}`);
271
+ }
272
+ }
273
+ /**
274
+ * Streaming counterpart to `serializeArrayOfBufferableToVector`: write a length prefix (1 or 4 bytes) giving the
275
+ * number of serialized elements, then each element. Byte-identical to the buffer version.
276
+ *
277
+ * @param sink - The destination sink.
278
+ * @param objs - The vector elements.
279
+ * @param prefixLength - Width of the count prefix in bytes (1 or 4).
280
+ */ export function serializeArrayToSink(sink, objs, prefixLength = 4) {
281
+ const count = countSinkables(objs);
282
+ if (prefixLength === 1) {
283
+ sink.writeUInt8(count);
284
+ } else if (prefixLength === 4) {
285
+ sink.writeNumber(count);
286
+ } else {
287
+ throw new Error(`Unsupported prefix length. Got ${prefixLength}, expected 1 or 4`);
288
+ }
289
+ serializeArrayToSinkInner(sink, objs);
290
+ }
291
+ /** Count how many top-level buffers `serializeToBufferArray` would emit, flattening nested arrays as it does. */ function countSinkables(objs) {
292
+ let count = 0;
293
+ for (const obj of objs){
294
+ count += Array.isArray(obj) ? countSinkables(obj) : 1;
295
+ }
296
+ return count;
297
+ }
@@ -1,7 +1,8 @@
1
1
  export * from './free_funcs.js';
2
2
  export * from './buffer_reader.js';
3
+ export * from './buffer_sink.js';
3
4
  export * from './field_reader.js';
4
5
  export * from './types.js';
5
6
  export * from './serialize.js';
6
7
  export * from './type_registry.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsb0JBQW9CLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export * from './free_funcs.js';
2
2
  export * from './buffer_reader.js';
3
+ export * from './buffer_sink.js';
3
4
  export * from './field_reader.js';
4
5
  export * from './types.js';
5
6
  export * from './serialize.js';
@@ -115,6 +115,13 @@ export declare function toFriendlyJSON(obj: object): string;
115
115
  * @returns A Buffer containing the serialized BigInt value in big-endian format.
116
116
  */
117
117
  export declare function serializeBigInt(n: bigint, width?: number): Buffer<ArrayBufferLike>;
118
+ /**
119
+ * Serialize a signed BigInt value into a Buffer of specified width using two's complement.
120
+ * @param n - The signed BigInt value to be serialized.
121
+ * @param width - The width (in bytes) of the output Buffer, optional with default value 32.
122
+ * @returns A Buffer containing the serialized signed BigInt value in big-endian format.
123
+ */
124
+ export declare function serializeSignedBigInt(n: bigint, width?: number): Buffer<ArrayBufferLike>;
118
125
  /**
119
126
  * Deserialize a big integer from a buffer, given an offset and width.
120
127
  * 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).
@@ -128,6 +135,17 @@ export declare function deserializeBigInt(buf: Buffer, offset?: number, width?:
128
135
  elem: bigint;
129
136
  adv: number;
130
137
  };
138
+ /**
139
+ * Deserialize a signed BigInt from a buffer (two's complement).
140
+ * @param buf - The buffer containing the signed big integer to be deserialized.
141
+ * @param offset - The position in the buffer where the integer starts. Defaults to 0.
142
+ * @param width - The number of bytes to read from the buffer for the integer. Defaults to 32.
143
+ * @returns An object containing the deserialized signed bigint value ('elem') and bytes advanced ('adv').
144
+ */
145
+ export declare function deserializeSignedBigInt(buf: Buffer, offset?: number, width?: number): {
146
+ elem: bigint;
147
+ adv: number;
148
+ };
131
149
  /**
132
150
  * Serializes a Date object into a Buffer containing its timestamp as a big integer value.
133
151
  * The resulting Buffer has a fixed width of 8 bytes, representing a 64-bit big-endian integer.
@@ -178,4 +196,4 @@ export declare function deserializeInt32(buf: Buffer, offset?: number): {
178
196
  adv: number;
179
197
  };
180
198
  export {};
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplL3NlcmlhbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHOUM7Ozs7O0dBS0c7QUFDSCx3QkFBZ0Isa0NBQWtDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLFlBQVksU0FBSSxHQUFHLE1BQU0sQ0FhL0Y7QUFFRDs7R0FFRztBQUNILEtBQUssYUFBYSxDQUFDLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUUsTUFBTSxFQUNYLE1BQU0sRUFBRSxNQUFNLEtBQ1g7SUFDSDs7T0FFRztJQUNILElBQUksRUFBRSxDQUFDLENBQUM7SUFDUjs7T0FFRztJQUNILEdBQUcsRUFBRSxNQUFNLENBQUM7Q0FDYixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDBCQUEwQixDQUFDLENBQUMsRUFDMUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDN0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLFNBQUksR0FDVDtJQUNEOztPQUVHO0lBQ0gsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ1Y7O09BRUc7SUFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2IsQ0FXQTtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUd6RDtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxTQUFJLEdBQUcsTUFBTSxDQUluRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJOzs7RUFHdkQ7QUFFRCw4Q0FBOEM7QUFDOUMsTUFBTSxNQUFNLFVBQVUsR0FDbEIsT0FBTyxHQUNQLE1BQU0sR0FDTixVQUFVLEdBQ1YsTUFBTSxHQUNOLE1BQU0sR0FDTixNQUFNLEdBQ047SUFDRTs7T0FFRztJQUNILFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztDQUN4QixHQUNELFVBQVUsRUFBRSxDQUFDO0FBRWpCLGdFQUFnRTtBQUNoRSxNQUFNLE1BQU0sU0FBUyxHQUNqQixFQUFFLEdBQ0YsT0FBTyxHQUNQLE1BQU0sR0FDTixNQUFNLEdBQ04sTUFBTSxHQUNOO0lBQ0U7OztPQUdHO0lBQ0gsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2hCLEdBQ0Q7SUFDRSw0QkFBNEI7SUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ25CLEdBQ0Q7SUFDRSx1Q0FBdUM7SUFDdkMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDdEIsR0FDRCxTQUFTLEVBQUUsQ0FBQztBQUVoQixNQUFNLE1BQU0sWUFBWSxHQUFHLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILHdCQUFnQixzQkFBc0IsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0E0QnRFO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixpQkFBaUIsQ0FBQyxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FzQjVEO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixpQkFBaUIsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBRS9EO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBNEJsRDtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFnQixlQUFlLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLFNBQUssMkJBRXBEO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQUksRUFBRSxLQUFLLFNBQUs7OztFQUVwRTtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBZ0IsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLDJCQUV2QztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBSTs7O0VBR3REO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQUk7OztFQUd4RDtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBSTs7O0VBR3ZEIn0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplL3NlcmlhbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHOUM7Ozs7O0dBS0c7QUFDSCx3QkFBZ0Isa0NBQWtDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLFlBQVksU0FBSSxHQUFHLE1BQU0sQ0FhL0Y7QUFFRDs7R0FFRztBQUNILEtBQUssYUFBYSxDQUFDLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUUsTUFBTSxFQUNYLE1BQU0sRUFBRSxNQUFNLEtBQ1g7SUFDSDs7T0FFRztJQUNILElBQUksRUFBRSxDQUFDLENBQUM7SUFDUjs7T0FFRztJQUNILEdBQUcsRUFBRSxNQUFNLENBQUM7Q0FDYixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDBCQUEwQixDQUFDLENBQUMsRUFDMUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDN0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLFNBQUksR0FDVDtJQUNEOztPQUVHO0lBQ0gsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ1Y7O09BRUc7SUFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2IsQ0FXQTtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUd6RDtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxTQUFJLEdBQUcsTUFBTSxDQUluRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJOzs7RUFHdkQ7QUFFRCw4Q0FBOEM7QUFDOUMsTUFBTSxNQUFNLFVBQVUsR0FDbEIsT0FBTyxHQUNQLE1BQU0sR0FDTixVQUFVLEdBQ1YsTUFBTSxHQUNOLE1BQU0sR0FDTixNQUFNLEdBQ047SUFDRTs7T0FFRztJQUNILFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztDQUN4QixHQUNELFVBQVUsRUFBRSxDQUFDO0FBRWpCLGdFQUFnRTtBQUNoRSxNQUFNLE1BQU0sU0FBUyxHQUNqQixFQUFFLEdBQ0YsT0FBTyxHQUNQLE1BQU0sR0FDTixNQUFNLEdBQ04sTUFBTSxHQUNOO0lBQ0U7OztPQUdHO0lBQ0gsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ2hCLEdBQ0Q7SUFDRSw0QkFBNEI7SUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ25CLEdBQ0Q7SUFDRSx1Q0FBdUM7SUFDdkMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDdEIsR0FDRCxTQUFTLEVBQUUsQ0FBQztBQUVoQixNQUFNLE1BQU0sWUFBWSxHQUFHLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILHdCQUFnQixzQkFBc0IsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0E0QnRFO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixpQkFBaUIsQ0FBQyxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FzQjVEO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixpQkFBaUIsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBRS9EO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBNEJsRDtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFnQixlQUFlLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLFNBQUssMkJBRXBEO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLFNBQUssMkJBUTFEO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQUksRUFBRSxLQUFLLFNBQUs7OztFQUVwRTtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQix1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBSSxFQUFFLEtBQUssU0FBSzs7O0VBTzFFO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFnQixhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksMkJBRXZDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBZ0IsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJOzs7RUFHdEQ7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFnQixpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBSTs7O0VBR3hEO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsd0JBQWdCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJOzs7RUFHdkQifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/serialize/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,SAAI,GAAG,MAAM,CAa/F;AAED;;GAEG;AACH,KAAK,aAAa,CAAC,CAAC,IAAI,CACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,KACX;IACH;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC;IACR;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT;IACD;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAWA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,SAAI,GAAG,MAAM,CAInE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGvD;AAED,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN;IACE;;OAEG;IACH,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB,GACD,UAAU,EAAE,CAAC;AAEjB,gEAAgE;AAChE,MAAM,MAAM,SAAS,GACjB,EAAE,GACF,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN;IACE;;;OAGG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GACD;IACE,4BAA4B;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GACD;IACE,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;CACtB,GACD,SAAS,EAAE,CAAC;AAEhB,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CA4BtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAsB5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,2BAEpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK;;;EAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,2BAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGvD"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/serialize/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,SAAI,GAAG,MAAM,CAa/F;AAED;;GAEG;AACH,KAAK,aAAa,CAAC,CAAC,IAAI,CACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,KACX;IACH;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC;IACR;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT;IACD;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAWA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,SAAI,GAAG,MAAM,CAInE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGvD;AAED,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN;IACE;;OAEG;IACH,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB,GACD,UAAU,EAAE,CAAC;AAEjB,gEAAgE;AAChE,MAAM,MAAM,SAAS,GACjB,EAAE,GACF,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN;IACE;;;OAGG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GACD;IACE,4BAA4B;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GACD;IACE,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;CACtB,GACD,SAAS,EAAE,CAAC;AAEhB,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CA4BtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAsB5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,2BAEpD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,2BAQ1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK;;;EAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK;;;EAO1E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,2BAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;EAGvD"}
@@ -176,6 +176,20 @@ import { numToUInt32BE } from './free_funcs.js';
176
176
  */ export function serializeBigInt(n, width = 32) {
177
177
  return toBufferBE(n, width);
178
178
  }
179
+ /**
180
+ * Serialize a signed BigInt value into a Buffer of specified width using two's complement.
181
+ * @param n - The signed BigInt value to be serialized.
182
+ * @param width - The width (in bytes) of the output Buffer, optional with default value 32.
183
+ * @returns A Buffer containing the serialized signed BigInt value in big-endian format.
184
+ */ export function serializeSignedBigInt(n, width = 32) {
185
+ const widthBits = BigInt(width * 8);
186
+ const max = 1n << widthBits - 1n;
187
+ if (n < -max || n >= max) {
188
+ throw new Error(`Signed BigInt ${n.toString()} does not fit into ${width} bytes`);
189
+ }
190
+ const unsigned = n < 0n ? (1n << widthBits) + n : n;
191
+ return toBufferBE(unsigned, width);
192
+ }
179
193
  /**
180
194
  * Deserialize a big integer from a buffer, given an offset and width.
181
195
  * 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).
@@ -190,6 +204,23 @@ import { numToUInt32BE } from './free_funcs.js';
190
204
  adv: width
191
205
  };
192
206
  }
207
+ /**
208
+ * Deserialize a signed BigInt from a buffer (two's complement).
209
+ * @param buf - The buffer containing the signed big integer to be deserialized.
210
+ * @param offset - The position in the buffer where the integer starts. Defaults to 0.
211
+ * @param width - The number of bytes to read from the buffer for the integer. Defaults to 32.
212
+ * @returns An object containing the deserialized signed bigint value ('elem') and bytes advanced ('adv').
213
+ */ export function deserializeSignedBigInt(buf, offset = 0, width = 32) {
214
+ const { elem, adv } = deserializeBigInt(buf, offset, width);
215
+ const widthBits = BigInt(width * 8);
216
+ const signBit = 1n << widthBits - 1n;
217
+ const fullRange = 1n << widthBits;
218
+ const signed = elem >= signBit ? elem - fullRange : elem;
219
+ return {
220
+ elem: signed,
221
+ adv
222
+ };
223
+ }
193
224
  /**
194
225
  * Serializes a Date object into a Buffer containing its timestamp as a big integer value.
195
226
  * The resulting Buffer has a fixed width of 8 bytes, representing a 64-bit big-endian integer.
@@ -20,6 +20,7 @@
20
20
  */
21
21
  export declare class InterruptibleSleep {
22
22
  private interrupts;
23
+ private timeoutIds;
23
24
  /**
24
25
  * Sleep for a specified amount of time in milliseconds.
25
26
  * The sleep function will pause the execution of the current async function
@@ -50,4 +51,4 @@ export declare class InterruptibleSleep {
50
51
  export declare function sleep<T>(ms: number, returnValue?: T): Promise<T>;
51
52
  /** Sleeps until the target date */
52
53
  export declare function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T>;
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zbGVlcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILHFCQUFhLGtCQUFrQjtJQUM3QixPQUFPLENBQUMsVUFBVSxDQUE2QztJQUUvRDs7Ozs7OztPQU9HO0lBQ1UsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWU1QztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxnQkFBZ0IsVUFBUSxHQUFHLElBQUksQ0FHL0M7Q0FDRjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUVoRTtBQUVELG1DQUFtQztBQUNuQyx3QkFBZ0IsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FHbEYifQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zbGVlcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILHFCQUFhLGtCQUFrQjtJQUM3QixPQUFPLENBQUMsVUFBVSxDQUE2QztJQUMvRCxPQUFPLENBQUMsVUFBVSxDQUF3QjtJQUUxQzs7Ozs7OztPQU9HO0lBQ1UsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXFCNUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsZ0JBQWdCLFVBQVEsR0FBRyxJQUFJLENBSy9DO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FFaEU7QUFFRCxtQ0FBbUM7QUFDbkMsd0JBQWdCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBR2xGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sleep/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA6C;IAE/D;;;;;;;OAOG;IACU,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5C;IAED;;;;;;OAMG;IACI,SAAS,CAAC,gBAAgB,UAAQ,GAAG,IAAI,CAG/C;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sleep/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,UAAU,CAAwB;IAE1C;;;;;;;OAOG;IACU,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5C;IAED;;;;;;OAMG;IACI,SAAS,CAAC,gBAAgB,UAAQ,GAAG,IAAI,CAK/C;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlF"}
@@ -20,6 +20,7 @@ import { InterruptError } from '../error/index.js';
20
20
  * setTimeout(() =\> sleeper.interrupt(true), 1500); // Interrupt the sleep after 1.5 seconds
21
21
  */ export class InterruptibleSleep {
22
22
  interrupts = [];
23
+ timeoutIds = [];
23
24
  /**
24
25
  * Sleep for a specified amount of time in milliseconds.
25
26
  * The sleep function will pause the execution of the current async function
@@ -33,11 +34,17 @@ import { InterruptError } from '../error/index.js';
33
34
  interruptResolve = resolve;
34
35
  this.interrupts.push(resolve);
35
36
  });
36
- const timeoutPromise = new Promise((resolve)=>setTimeout(()=>resolve(false), ms));
37
+ let timeoutId;
38
+ const timeoutPromise = new Promise((resolve)=>{
39
+ timeoutId = setTimeout(()=>resolve(false), ms);
40
+ this.timeoutIds.push(timeoutId);
41
+ });
37
42
  const shouldThrow = await Promise.race([
38
43
  interruptPromise,
39
44
  timeoutPromise
40
45
  ]);
46
+ clearTimeout(timeoutId);
47
+ this.timeoutIds = this.timeoutIds.filter((id)=>id !== timeoutId);
41
48
  this.interrupts = this.interrupts.filter((res)=>res !== interruptResolve);
42
49
  if (shouldThrow) {
43
50
  throw new InterruptError('Interrupted.');
@@ -52,6 +59,8 @@ import { InterruptError } from '../error/index.js';
52
59
  */ interrupt(sleepShouldThrow = false) {
53
60
  this.interrupts.forEach((resolve)=>resolve(sleepShouldThrow));
54
61
  this.interrupts = [];
62
+ this.timeoutIds.forEach((id)=>clearTimeout(id));
63
+ this.timeoutIds = [];
55
64
  }
56
65
  }
57
66
  /**
@@ -42,7 +42,7 @@ export function urlJoin(...args) {
42
42
  while(end >= start && arg[end] === '/'){
43
43
  end--;
44
44
  }
45
- if (start < end) {
45
+ if (start <= end) {
46
46
  processed.push(arg.slice(start, end + 1));
47
47
  }
48
48
  }
@@ -11,5 +11,29 @@ export declare class TestDateProvider extends DateProvider {
11
11
  constructor(logger?: import("../log/pino-logger.js").Logger);
12
12
  now(): number;
13
13
  setTime(timeMs: number): void;
14
+ /** Resets the time back to real time (offset = 0). */
15
+ reset(): void;
16
+ /** Advances the time by the given number of seconds. */
17
+ advanceTime(seconds: number): void;
14
18
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZ0NBQWdDO0FBQ2hDLHFCQUFhLFlBQVk7SUFDaEIsR0FBRyxJQUFJLE1BQU0sQ0FFbkI7SUFFTSxZQUFZLElBQUksTUFBTSxDQUU1QjtJQUVNLFNBQVMsSUFBSSxJQUFJLENBRXZCO0NBQ0Y7QUFFRCwwREFBMEQ7QUFDMUQscUJBQWEsZ0JBQWlCLFNBQVEsWUFBWTtJQUdwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFGbkMsT0FBTyxDQUFDLE1BQU0sQ0FBSztJQUVuQixZQUE2QixNQUFNLHlDQUFnRCxFQUVsRjtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzVCO0NBQ0YifQ==
19
+ /**
20
+ * A date provider for tests that only advances time via explicit advanceTime() calls.
21
+ * Unlike TestDateProvider, this does NOT track real time progression - time is completely
22
+ * frozen until explicitly advanced. This eliminates flakiness from tests taking
23
+ * varying amounts of real time to execute.
24
+ */
25
+ export declare class ManualDateProvider extends DateProvider {
26
+ private currentTimeMs;
27
+ /**
28
+ * @param initialTimeMs - Initial time in milliseconds. Defaults to a round timestamp for easy visualization.
29
+ */
30
+ constructor(initialTimeMs?: number);
31
+ now(): number;
32
+ /** Sets the current time to the given timestamp in milliseconds. */
33
+ setTime(timeMs: number): void;
34
+ /** Advances the time by the given number of seconds. */
35
+ advanceTime(seconds: number): void;
36
+ /** Advances the time by the given number of milliseconds. */
37
+ advanceTimeMs(ms: number): void;
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZ0NBQWdDO0FBQ2hDLHFCQUFhLFlBQVk7SUFDaEIsR0FBRyxJQUFJLE1BQU0sQ0FFbkI7SUFFTSxZQUFZLElBQUksTUFBTSxDQUU1QjtJQUVNLFNBQVMsSUFBSSxJQUFJLENBRXZCO0NBQ0Y7QUFFRCwwREFBMEQ7QUFDMUQscUJBQWEsZ0JBQWlCLFNBQVEsWUFBWTtJQUdwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFGbkMsT0FBTyxDQUFDLE1BQU0sQ0FBSztJQUVuQixZQUE2QixNQUFNLHlDQUFnRCxFQUVsRjtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzVCO0lBRUQsc0RBQXNEO0lBQy9DLEtBQUssU0FHWDtJQUVELHdEQUF3RDtJQUNqRCxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sUUFFakM7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsa0JBQW1CLFNBQVEsWUFBWTtJQUNsRCxPQUFPLENBQUMsYUFBYSxDQUFTO0lBRTlCOztPQUVHO0lBQ0gsWUFBWSxhQUFhLEdBQUUsTUFBc0MsRUFHaEU7SUFFZSxHQUFHLElBQUksTUFBTSxDQUU1QjtJQUVELG9FQUFvRTtJQUM3RCxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFNUI7SUFFRCx3REFBd0Q7SUFDakQsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLFFBRWpDO0lBRUQsNkRBQTZEO0lBQ3RELGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUU5QjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/timer/date.ts"],"names":[],"mappings":"AAEA,gCAAgC;AAChC,qBAAa,YAAY;IAChB,GAAG,IAAI,MAAM,CAEnB;IAEM,YAAY,IAAI,MAAM,CAE5B;IAEM,SAAS,IAAI,IAAI,CAEvB;CACF;AAED,0DAA0D;AAC1D,qBAAa,gBAAiB,SAAQ,YAAY;IAGpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAK;IAEnB,YAA6B,MAAM,yCAAgD,EAElF;IAEe,GAAG,IAAI,MAAM,CAE5B;IAEM,OAAO,CAAC,MAAM,EAAE,MAAM,QAG5B;CACF"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/timer/date.ts"],"names":[],"mappings":"AAEA,gCAAgC;AAChC,qBAAa,YAAY;IAChB,GAAG,IAAI,MAAM,CAEnB;IAEM,YAAY,IAAI,MAAM,CAE5B;IAEM,SAAS,IAAI,IAAI,CAEvB;CACF;AAED,0DAA0D;AAC1D,qBAAa,gBAAiB,SAAQ,YAAY;IAGpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAK;IAEnB,YAA6B,MAAM,yCAAgD,EAElF;IAEe,GAAG,IAAI,MAAM,CAE5B;IAEM,OAAO,CAAC,MAAM,EAAE,MAAM,QAG5B;IAED,sDAAsD;IAC/C,KAAK,SAGX;IAED,wDAAwD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,QAEjC;CACF;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,YAAY,aAAa,GAAE,MAAsC,EAGhE;IAEe,GAAG,IAAI,MAAM,CAE5B;IAED,oEAAoE;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,QAE5B;IAED,wDAAwD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,QAEjC;IAED,6DAA6D;IACtD,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;CACF"}
@@ -26,4 +26,37 @@ import { createLogger } from '../log/pino-logger.js';
26
26
  timeMs
27
27
  });
28
28
  }
29
+ /** Resets the time back to real time (offset = 0). */ reset() {
30
+ this.offset = 0;
31
+ this.logger.warn('Time reset to real time');
32
+ }
33
+ /** Advances the time by the given number of seconds. */ advanceTime(seconds) {
34
+ this.offset += seconds * 1000;
35
+ }
36
+ }
37
+ /**
38
+ * A date provider for tests that only advances time via explicit advanceTime() calls.
39
+ * Unlike TestDateProvider, this does NOT track real time progression - time is completely
40
+ * frozen until explicitly advanced. This eliminates flakiness from tests taking
41
+ * varying amounts of real time to execute.
42
+ */ export class ManualDateProvider extends DateProvider {
43
+ currentTimeMs;
44
+ /**
45
+ * @param initialTimeMs - Initial time in milliseconds. Defaults to a round timestamp for easy visualization.
46
+ */ constructor(initialTimeMs = Date.UTC(2025, 0, 1, 0, 0, 0)){
47
+ super();
48
+ this.currentTimeMs = initialTimeMs;
49
+ }
50
+ now() {
51
+ return this.currentTimeMs;
52
+ }
53
+ /** Sets the current time to the given timestamp in milliseconds. */ setTime(timeMs) {
54
+ this.currentTimeMs = timeMs;
55
+ }
56
+ /** Advances the time by the given number of seconds. */ advanceTime(seconds) {
57
+ this.currentTimeMs += seconds * 1000;
58
+ }
59
+ /** Advances the time by the given number of milliseconds. */ advanceTimeMs(ms) {
60
+ this.currentTimeMs += ms;
61
+ }
29
62
  }
@@ -1,5 +1,5 @@
1
1
  export * from './date.js';
2
2
  export { elapsed, elapsedSync } from './elapsed.js';
3
- export { TimeoutTask, executeTimeout, timeoutPromise } from './timeout.js';
3
+ export { TimeoutTask, execWithSignal, executeTimeout, timeoutPromise } from './timeout.js';
4
4
  export { Timer } from './timer.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aW1lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQyJ9
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aW1lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/timer/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/timer/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from './date.js';
2
2
  export { elapsed, elapsedSync } from './elapsed.js';
3
- export { TimeoutTask, executeTimeout, timeoutPromise } from './timeout.js';
3
+ export { TimeoutTask, execWithSignal, executeTimeout, timeoutPromise } from './timeout.js';
4
4
  export { Timer } from './timer.js';
@@ -49,6 +49,8 @@ export declare class TimeoutTask<T> {
49
49
  *
50
50
  * */
51
51
  export declare function executeTimeout<T>(fn: (signal: AbortSignal) => Promise<T>, timeout: number, errorOrFnName?: string | (() => Error), onAbort?: () => void): Promise<T>;
52
+ /** Executes a function until it completes or the given signal aborts. */
53
+ export declare function execWithSignal<T>(fn: (signal: AbortSignal) => Promise<T>, signal: AbortSignal, errorFn?: (signal: AbortSignal) => Error): Promise<T>;
52
54
  /** Returns a promise that rejects after the given timeout */
53
55
  export declare function timeoutPromise(timeoutMs: number, errorMessage?: string): Promise<never>;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL3RpbWVvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7OztHQU1HO0FBQ0gscUJBQWEsV0FBVyxDQUFDLENBQUM7SUFLdEIsT0FBTyxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQVBsQixPQUFPLENBQUMsU0FBUyxDQUFLO0lBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQTZCO0lBRW5ELFlBQ1UsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLE1BQU0sS0FBSyxFQUNwQixPQUFPLENBQUMsMEJBQVksRUFDMUI7SUFFSjs7Ozs7OztPQU9HO0lBQ1UsSUFBSSxlQWlCaEI7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBbUIsK0JBRXpCO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLFdBRWI7Q0FDRjtBQUVEOzs7Ozs7Ozs7S0FTSztBQUNMLHdCQUFzQixjQUFjLENBQUMsQ0FBQyxFQUNwQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN0QyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksY0FRckI7QUFFRCw2REFBNkQ7QUFDN0Qsd0JBQWdCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLE1BQU0sa0JBU3RFIn0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL3RpbWVvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7OztHQU1HO0FBQ0gscUJBQWEsV0FBVyxDQUFDLENBQUM7SUFLdEIsT0FBTyxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQVBsQixPQUFPLENBQUMsU0FBUyxDQUFLO0lBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQTZCO0lBRW5ELFlBQ1UsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLE1BQU0sS0FBSyxFQUNwQixPQUFPLENBQUMsMEJBQVksRUFDMUI7SUFFSjs7Ozs7OztPQU9HO0lBQ1UsSUFBSSxlQWlCaEI7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBbUIsK0JBRXpCO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLFdBRWI7Q0FDRjtBQUVEOzs7Ozs7Ozs7S0FTSztBQUNMLHdCQUFzQixjQUFjLENBQUMsQ0FBQyxFQUNwQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN0QyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksY0FRckI7QUFVRCx5RUFBeUU7QUFDekUsd0JBQXNCLGNBQWMsQ0FBQyxDQUFDLEVBQ3BDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUNuQixPQUFPLEdBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxLQUFLLEtBQTBCLGNBaUI3RDtBQUVELDZEQUE2RDtBQUM3RCx3QkFBZ0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsTUFBTSxrQkFTdEUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timer/timeout.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO,CAAC;IAPlB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAA6B;IAEnD,YACU,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,KAAK,EACpB,OAAO,CAAC,0BAAY,EAC1B;IAEJ;;;;;;;OAOG;IACU,IAAI,eAiBhB;IAED;;;;;;OAMG;IACI,mBAAmB,+BAEzB;IAED;;;;;OAKG;IACI,OAAO,WAEb;CACF;AAED;;;;;;;;;KASK;AACL,wBAAsB,cAAc,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,EACtC,OAAO,CAAC,EAAE,MAAM,IAAI,cAQrB;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,kBAStE"}
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timer/timeout.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO,CAAC;IAPlB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAA6B;IAEnD,YACU,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,KAAK,EACpB,OAAO,CAAC,0BAAY,EAC1B;IAEJ;;;;;;;OAOG;IACU,IAAI,eAiBhB;IAED;;;;;;OAMG;IACI,mBAAmB,+BAEzB;IAED;;;;;OAKG;IACI,OAAO,WAEb;CACF;AAED;;;;;;;;;KASK;AACL,wBAAsB,cAAc,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,EACtC,OAAO,CAAC,EAAE,MAAM,IAAI,cAQrB;AAUD,yEAAyE;AACzE,wBAAsB,cAAc,CAAC,CAAC,EACpC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAA0B,cAiB7D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,kBAStE"}