@evolu/common 8.7.0 → 8.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/src/Array.d.ts +21 -21
  2. package/dist/src/Array.js +5 -5
  3. package/dist/src/Assert.d.ts +478 -141
  4. package/dist/src/Assert.d.ts.map +1 -1
  5. package/dist/src/Assert.js +644 -99
  6. package/dist/src/{Buffer.d.ts → Binary.d.ts} +85 -12
  7. package/dist/src/Binary.d.ts.map +1 -0
  8. package/dist/src/{Buffer.js → Binary.js} +206 -24
  9. package/dist/src/Console.d.ts +2 -10
  10. package/dist/src/Console.d.ts.map +1 -1
  11. package/dist/src/Console.js +6 -12
  12. package/dist/src/Crypto.d.ts +5 -5
  13. package/dist/src/Crypto.js +1 -1
  14. package/dist/src/Eq.d.ts +35 -40
  15. package/dist/src/Eq.d.ts.map +1 -1
  16. package/dist/src/Eq.js +51 -87
  17. package/dist/src/Function.d.ts +9 -14
  18. package/dist/src/Function.d.ts.map +1 -1
  19. package/dist/src/Function.js +7 -9
  20. package/dist/src/Http.d.ts +6 -7
  21. package/dist/src/Http.d.ts.map +1 -1
  22. package/dist/src/LeakDetector.d.ts.map +1 -1
  23. package/dist/src/LeakDetector.js +1 -0
  24. package/dist/src/LockManager.d.ts +1 -1
  25. package/dist/src/LockManager.js +1 -1
  26. package/dist/src/Lookup.d.ts +3 -2
  27. package/dist/src/Lookup.d.ts.map +1 -1
  28. package/dist/src/Lookup.js +4 -3
  29. package/dist/src/Number.d.ts +1 -1
  30. package/dist/src/Number.d.ts.map +1 -1
  31. package/dist/src/Number.js +1 -1
  32. package/dist/src/Object.d.ts +4 -4
  33. package/dist/src/Object.d.ts.map +1 -1
  34. package/dist/src/Object.js +5 -4
  35. package/dist/src/Option.d.ts +1 -2
  36. package/dist/src/Option.d.ts.map +1 -1
  37. package/dist/src/Option.js +1 -2
  38. package/dist/src/Platform.js +2 -0
  39. package/dist/src/Polyfills.js +4 -1
  40. package/dist/src/Random.d.ts +1 -1
  41. package/dist/src/Result.d.ts +49 -54
  42. package/dist/src/Result.d.ts.map +1 -1
  43. package/dist/src/Result.js +17 -22
  44. package/dist/src/Set.d.ts +6 -6
  45. package/dist/src/Set.js +2 -2
  46. package/dist/src/Sqlite.js +1 -1
  47. package/dist/src/String.js +3 -2
  48. package/dist/src/Task.d.ts +32 -32
  49. package/dist/src/Task.d.ts.map +1 -1
  50. package/dist/src/Task.js +20 -22
  51. package/dist/src/Test.d.ts +31 -3
  52. package/dist/src/Test.d.ts.map +1 -1
  53. package/dist/src/Test.js +46 -3
  54. package/dist/src/Time.d.ts +3 -11
  55. package/dist/src/Time.d.ts.map +1 -1
  56. package/dist/src/Time.js +10 -18
  57. package/dist/src/Type.d.ts +87 -85
  58. package/dist/src/Type.d.ts.map +1 -1
  59. package/dist/src/Type.js +70 -63
  60. package/dist/src/Types.d.ts +12 -12
  61. package/dist/src/Types.js +1 -1
  62. package/dist/src/WebSocket.d.ts +4 -7
  63. package/dist/src/WebSocket.d.ts.map +1 -1
  64. package/dist/src/Worker.d.ts +1 -1
  65. package/dist/src/Worker.js +7 -7
  66. package/dist/src/index.d.ts +1 -1
  67. package/dist/src/index.js +1 -1
  68. package/dist/src/intl/_en.d.ts.map +1 -1
  69. package/dist/src/intl/_en.js +1 -1
  70. package/dist/src/intl/ar.d.ts.map +1 -1
  71. package/dist/src/intl/ar.js +1 -1
  72. package/dist/src/intl/bn.d.ts.map +1 -1
  73. package/dist/src/intl/bn.js +1 -1
  74. package/dist/src/intl/ca.d.ts.map +1 -1
  75. package/dist/src/intl/ca.js +1 -1
  76. package/dist/src/intl/cs.d.ts.map +1 -1
  77. package/dist/src/intl/cs.js +1 -1
  78. package/dist/src/intl/da.d.ts.map +1 -1
  79. package/dist/src/intl/da.js +1 -1
  80. package/dist/src/intl/de.d.ts.map +1 -1
  81. package/dist/src/intl/de.js +1 -1
  82. package/dist/src/intl/el.d.ts.map +1 -1
  83. package/dist/src/intl/el.js +1 -1
  84. package/dist/src/intl/es.d.ts.map +1 -1
  85. package/dist/src/intl/es.js +1 -1
  86. package/dist/src/intl/fa.d.ts.map +1 -1
  87. package/dist/src/intl/fa.js +1 -1
  88. package/dist/src/intl/fi.d.ts.map +1 -1
  89. package/dist/src/intl/fi.js +1 -1
  90. package/dist/src/intl/fil.d.ts.map +1 -1
  91. package/dist/src/intl/fil.js +1 -1
  92. package/dist/src/intl/fr.d.ts.map +1 -1
  93. package/dist/src/intl/fr.js +1 -1
  94. package/dist/src/intl/he.d.ts.map +1 -1
  95. package/dist/src/intl/he.js +1 -1
  96. package/dist/src/intl/hi.d.ts.map +1 -1
  97. package/dist/src/intl/hi.js +1 -1
  98. package/dist/src/intl/hr.d.ts.map +1 -1
  99. package/dist/src/intl/hr.js +1 -1
  100. package/dist/src/intl/hu.d.ts.map +1 -1
  101. package/dist/src/intl/hu.js +1 -1
  102. package/dist/src/intl/id.d.ts.map +1 -1
  103. package/dist/src/intl/id.js +1 -1
  104. package/dist/src/intl/it.d.ts.map +1 -1
  105. package/dist/src/intl/it.js +1 -1
  106. package/dist/src/intl/ja.d.ts.map +1 -1
  107. package/dist/src/intl/ja.js +1 -1
  108. package/dist/src/intl/ko.d.ts.map +1 -1
  109. package/dist/src/intl/ko.js +1 -1
  110. package/dist/src/intl/ml.d.ts.map +1 -1
  111. package/dist/src/intl/ml.js +1 -1
  112. package/dist/src/intl/mr.d.ts.map +1 -1
  113. package/dist/src/intl/mr.js +1 -1
  114. package/dist/src/intl/ms.d.ts.map +1 -1
  115. package/dist/src/intl/ms.js +1 -1
  116. package/dist/src/intl/nb.d.ts.map +1 -1
  117. package/dist/src/intl/nb.js +1 -1
  118. package/dist/src/intl/nl.d.ts.map +1 -1
  119. package/dist/src/intl/nl.js +1 -1
  120. package/dist/src/intl/pa.d.ts.map +1 -1
  121. package/dist/src/intl/pa.js +1 -1
  122. package/dist/src/intl/pl.d.ts.map +1 -1
  123. package/dist/src/intl/pl.js +1 -1
  124. package/dist/src/intl/pt-BR.d.ts.map +1 -1
  125. package/dist/src/intl/pt-BR.js +1 -1
  126. package/dist/src/intl/pt.d.ts.map +1 -1
  127. package/dist/src/intl/pt.js +1 -1
  128. package/dist/src/intl/ro.d.ts.map +1 -1
  129. package/dist/src/intl/ro.js +1 -1
  130. package/dist/src/intl/sk.d.ts.map +1 -1
  131. package/dist/src/intl/sk.js +1 -1
  132. package/dist/src/intl/sl.d.ts.map +1 -1
  133. package/dist/src/intl/sl.js +1 -1
  134. package/dist/src/intl/sv.d.ts.map +1 -1
  135. package/dist/src/intl/sv.js +1 -1
  136. package/dist/src/intl/sw.d.ts.map +1 -1
  137. package/dist/src/intl/sw.js +1 -1
  138. package/dist/src/intl/ta.d.ts.map +1 -1
  139. package/dist/src/intl/ta.js +1 -1
  140. package/dist/src/intl/te.d.ts.map +1 -1
  141. package/dist/src/intl/te.js +1 -1
  142. package/dist/src/intl/th.d.ts.map +1 -1
  143. package/dist/src/intl/th.js +1 -1
  144. package/dist/src/intl/tr.d.ts.map +1 -1
  145. package/dist/src/intl/tr.js +1 -1
  146. package/dist/src/intl/uk.d.ts.map +1 -1
  147. package/dist/src/intl/uk.js +1 -1
  148. package/dist/src/intl/ur.d.ts.map +1 -1
  149. package/dist/src/intl/ur.js +1 -1
  150. package/dist/src/intl/vi.d.ts.map +1 -1
  151. package/dist/src/intl/vi.js +1 -1
  152. package/dist/src/intl/zh-CN.d.ts.map +1 -1
  153. package/dist/src/intl/zh-CN.js +1 -1
  154. package/dist/src/intl/zh-TW.d.ts.map +1 -1
  155. package/dist/src/intl/zh-TW.js +1 -1
  156. package/dist/src/local-first/Evolu.d.ts +12 -12
  157. package/dist/src/local-first/Evolu.d.ts.map +1 -1
  158. package/dist/src/local-first/Evolu.js +2 -2
  159. package/dist/src/local-first/Protocol.d.ts +14 -76
  160. package/dist/src/local-first/Protocol.d.ts.map +1 -1
  161. package/dist/src/local-first/Protocol.js +29 -206
  162. package/dist/src/local-first/Query.d.ts +11 -11
  163. package/dist/src/local-first/Query.js +6 -6
  164. package/dist/src/local-first/Relay.d.ts +2 -2
  165. package/dist/src/local-first/Schema.d.ts +3 -5
  166. package/dist/src/local-first/Schema.d.ts.map +1 -1
  167. package/dist/src/local-first/Schema.js +2 -4
  168. package/dist/src/local-first/Shared.d.ts.map +1 -1
  169. package/dist/src/local-first/Shared.js +5 -5
  170. package/dist/src/local-first/Storage.js +4 -4
  171. package/dist/src/local-first/Timestamp.d.ts +9 -0
  172. package/dist/src/local-first/Timestamp.d.ts.map +1 -1
  173. package/dist/src/local-first/Timestamp.js +13 -10
  174. package/package.json +7 -4
  175. package/src/Array.test.ts +809 -0
  176. package/src/Array.ts +21 -21
  177. package/src/Assert.test.ts +1181 -0
  178. package/src/Assert.ts +971 -227
  179. package/src/BigInt.test.ts +28 -0
  180. package/src/Binary.test.ts +1128 -0
  181. package/src/{Buffer.ts → Binary.ts} +273 -46
  182. package/src/Brand.test.ts +90 -0
  183. package/src/Cache.test.ts +183 -0
  184. package/src/Callbacks.test.ts +66 -0
  185. package/src/Console.test.ts +809 -0
  186. package/src/Console.ts +9 -17
  187. package/src/Crypto.test.ts +138 -0
  188. package/src/Crypto.ts +5 -5
  189. package/src/Eq.test.ts +333 -0
  190. package/src/Eq.ts +110 -176
  191. package/src/Error.test.ts +118 -0
  192. package/src/Function.test.ts +204 -0
  193. package/src/Function.ts +10 -15
  194. package/src/Http.test.ts +816 -0
  195. package/src/Http.ts +6 -7
  196. package/src/LeakDetector.test.ts +210 -0
  197. package/src/LeakDetector.ts +1 -0
  198. package/src/LockManager.ts +2 -2
  199. package/src/Lookup.test.ts +418 -0
  200. package/src/Lookup.ts +4 -3
  201. package/src/Microtask.test.ts +140 -0
  202. package/src/Number.test.ts +218 -0
  203. package/src/Number.ts +2 -2
  204. package/src/Object.test.ts +293 -0
  205. package/src/Object.ts +5 -4
  206. package/src/Option.test.ts +104 -0
  207. package/src/Option.ts +1 -2
  208. package/src/Order.test.ts +56 -0
  209. package/src/Platform.ts +2 -0
  210. package/src/Polyfills.ts +3 -4
  211. package/src/Random.test.ts +89 -0
  212. package/src/Random.ts +1 -1
  213. package/src/Ref.test.ts +139 -0
  214. package/src/RefCount.test.ts +184 -0
  215. package/src/Relation.test.ts +505 -0
  216. package/src/Resource.test.ts +4623 -0
  217. package/src/Result.test.ts +1829 -0
  218. package/src/Result.ts +49 -54
  219. package/src/Schedule.test.ts +1554 -0
  220. package/src/Set.test.ts +279 -0
  221. package/src/Set.ts +6 -6
  222. package/src/Sqlite.ts +1 -1
  223. package/src/Store.test.ts +288 -0
  224. package/src/String.test.ts +54 -0
  225. package/src/String.ts +3 -3
  226. package/src/Task.test.ts +10820 -0
  227. package/src/Task.ts +38 -43
  228. package/src/Test.test.ts +88 -0
  229. package/src/Test.ts +49 -3
  230. package/src/Time.test.ts +926 -0
  231. package/src/Time.ts +13 -21
  232. package/src/Type.base64.test.ts +88 -0
  233. package/src/Type.test.ts +20465 -0
  234. package/src/Type.ts +114 -111
  235. package/src/Types.test.ts +324 -0
  236. package/src/Types.ts +13 -13
  237. package/src/WebSocket.ts +4 -7
  238. package/src/Worker.test.ts +755 -0
  239. package/src/Worker.ts +13 -18
  240. package/src/index.ts +1 -1
  241. package/src/intl/_en.ts +1 -1
  242. package/src/intl/ar.ts +1 -1
  243. package/src/intl/bn.ts +1 -1
  244. package/src/intl/ca.ts +1 -1
  245. package/src/intl/cs.ts +1 -1
  246. package/src/intl/da.ts +1 -1
  247. package/src/intl/de.ts +1 -1
  248. package/src/intl/el.ts +1 -1
  249. package/src/intl/es.ts +1 -1
  250. package/src/intl/fa.ts +1 -1
  251. package/src/intl/fi.ts +1 -1
  252. package/src/intl/fil.ts +1 -1
  253. package/src/intl/fr.ts +1 -1
  254. package/src/intl/he.ts +1 -1
  255. package/src/intl/hi.ts +1 -1
  256. package/src/intl/hr.ts +1 -1
  257. package/src/intl/hu.ts +1 -1
  258. package/src/intl/id.ts +1 -1
  259. package/src/intl/intl.test.ts +3106 -0
  260. package/src/intl/it.ts +1 -1
  261. package/src/intl/ja.ts +1 -1
  262. package/src/intl/ko.ts +1 -1
  263. package/src/intl/ml.ts +1 -1
  264. package/src/intl/mr.ts +1 -1
  265. package/src/intl/ms.ts +1 -1
  266. package/src/intl/nb.ts +1 -1
  267. package/src/intl/nl.ts +1 -1
  268. package/src/intl/pa.ts +1 -1
  269. package/src/intl/pl.ts +1 -1
  270. package/src/intl/pt-BR.ts +1 -1
  271. package/src/intl/pt.ts +1 -1
  272. package/src/intl/ro.ts +1 -1
  273. package/src/intl/sk.ts +1 -1
  274. package/src/intl/sl.ts +1 -1
  275. package/src/intl/sv.ts +1 -1
  276. package/src/intl/sw.ts +1 -1
  277. package/src/intl/ta.ts +1 -1
  278. package/src/intl/te.ts +1 -1
  279. package/src/intl/th.ts +1 -1
  280. package/src/intl/tr.ts +1 -1
  281. package/src/intl/uk.ts +1 -1
  282. package/src/intl/ur.ts +1 -1
  283. package/src/intl/vi.ts +1 -1
  284. package/src/intl/zh-CN.ts +1 -1
  285. package/src/intl/zh-TW.ts +1 -1
  286. package/src/local-first/Evolu.test.ts +1921 -0
  287. package/src/local-first/Evolu.ts +18 -14
  288. package/src/local-first/Owner.test.ts +83 -0
  289. package/src/local-first/Protocol.test.ts +1037 -0
  290. package/src/local-first/Protocol.ts +58 -261
  291. package/src/local-first/Query.test.ts +349 -0
  292. package/src/local-first/Query.ts +11 -11
  293. package/src/local-first/Relay.ts +2 -2
  294. package/src/local-first/Schema.ts +3 -5
  295. package/src/local-first/Shared.test.ts +1828 -0
  296. package/src/local-first/Shared.ts +9 -8
  297. package/src/local-first/Storage.ts +4 -4
  298. package/src/local-first/Timestamp.test.ts +374 -0
  299. package/src/local-first/Timestamp.ts +22 -10
  300. package/dist/src/Buffer.d.ts.map +0 -1
@@ -10,8 +10,10 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import type { JsonValue, NonNegativeInt } from "./Type.ts";
14
- export { bytesToHex, bytesToUtf8, concatBytes, hexToBytes, utf8ToBytes, } from "@noble/ciphers/utils.js";
13
+ import { bytesToUtf8, utf8ToBytes } from "@noble/ciphers/utils.js";
14
+ import type { FiniteNumber, JsonValue, NonNegativeInt, PositiveInt } from "./Type.ts";
15
+ export { bytesToHex, concatBytes, hexToBytes } from "@noble/ciphers/utils.js";
16
+ export { bytesToUtf8, utf8ToBytes };
15
17
  /**
16
18
  * Custom error for {@link Buffer}-related failures like premature end of data.
17
19
  * Provides better stack traces for debugging binary protocol issues.
@@ -39,9 +41,9 @@ export declare class BufferError extends Error {
39
41
  *
40
42
  * ```ts
41
43
  * import {
42
- * assert,
43
44
  * assertEqual,
44
45
  * assertErr,
46
+ * assertInstanceOf,
45
47
  * createBuffer,
46
48
  * createIdFromString,
47
49
  * IdBytes,
@@ -50,11 +52,9 @@ export declare class BufferError extends Error {
50
52
  * idToIdBytes,
51
53
  * NonNegativeInt,
52
54
  * trySync,
53
- * } from "@evolu/common";
54
- * import {
55
55
  * decodeNonNegativeInt,
56
56
  * encodeNonNegativeInt,
57
- * } from "@evolu/common/local-first";
57
+ * } from "@evolu/common";
58
58
  *
59
59
  * const buffer = createBuffer();
60
60
  * const id = createIdFromString("buffer-example");
@@ -69,11 +69,8 @@ export declare class BufferError extends Error {
69
69
  * assertEqual(decodedId, id);
70
70
  * const result = trySync(() => decodeNonNegativeInt(decoder));
71
71
  * assertErr(result);
72
- * assert(
73
- * result.error instanceof Error &&
74
- * result.error.message === "Buffer parse ended prematurely",
75
- * "Expected the premature-buffer-end error.",
76
- * );
72
+ * assertInstanceOf(result.error, Error);
73
+ * assertEqual(result.error.message, "Buffer parse ended prematurely");
77
74
  * ```
78
75
  *
79
76
  * For more on exponential growth, see:
@@ -121,6 +118,82 @@ export interface Buffer {
121
118
  }
122
119
  /** Creates a {@link Buffer} for efficient byte operations. */
123
120
  export declare const createBuffer: (arrayLike?: Uint8Array | ArrayLike<number>) => Buffer;
121
+ /**
122
+ * Evolu uses MessagePack to handle finite numbers except for NonNegativeInt.
123
+ * For NonNegativeInt, Evolu provides more efficient encoding.
124
+ */
125
+ export declare const encodeNumber: (buffer: Buffer, number: FiniteNumber) => void;
126
+ export declare const decodeNumber: (buffer: Buffer) => FiniteNumber;
127
+ /**
128
+ * Encodes an array of boolean flags into a single byte.
129
+ *
130
+ * Each element in the array corresponds to a bit (0-7). Array can have 0-8
131
+ * elements.
132
+ *
133
+ * ### Example
134
+ *
135
+ * ```ts
136
+ * import { assertEqual, createBuffer, encodeFlags } from "@evolu/common";
137
+ *
138
+ * const buffer = createBuffer();
139
+ * encodeFlags(buffer, [true, false, true]);
140
+ *
141
+ * assertEqual(buffer.unwrap(), new Uint8Array([0b101]));
142
+ * ```
143
+ */
144
+ export declare const encodeFlags: (buffer: Buffer, flags: ReadonlyArray<boolean>) => void;
145
+ /**
146
+ * Decodes a byte into an array of boolean flags.
147
+ *
148
+ * ### Example
149
+ *
150
+ * ```ts
151
+ * import {
152
+ * assertEqual,
153
+ * createBuffer,
154
+ * decodeFlags,
155
+ * PositiveInt,
156
+ * } from "@evolu/common";
157
+ *
158
+ * const buffer = createBuffer([0b101]);
159
+ * const flags = decodeFlags(buffer, PositiveInt.orThrow(3));
160
+ *
161
+ * assertEqual(flags, [true, false, true]);
162
+ * assertEqual(buffer.getLength(), 0);
163
+ * ```
164
+ */
165
+ export declare const decodeFlags: (buffer: Buffer, count: PositiveInt) => ReadonlyArray<boolean>;
166
+ /**
167
+ * Encodes a non-negative integer into a variable-length integer format. It's
168
+ * more efficient than encoding via {@link encodeNumber}.
169
+ *
170
+ * https://en.wikipedia.org/wiki/Variable-length_quantity
171
+ */
172
+ export declare const encodeNonNegativeInt: (buffer: Buffer, value: NonNegativeInt) => void;
173
+ /**
174
+ * Decodes a non-negative integer from a variable-length integer format.
175
+ *
176
+ * https://en.wikipedia.org/wiki/Variable-length_quantity
177
+ */
178
+ export declare const decodeNonNegativeInt: (buffer: Buffer) => NonNegativeInt;
179
+ /** Encodes the length of an array-like value. */
180
+ export declare const encodeLength: (buffer: Buffer, value: ArrayLike<unknown>) => void;
181
+ /** Decodes an array-like value length. */
182
+ export declare const decodeLength: typeof decodeNonNegativeInt;
183
+ /** Encodes a length-prefixed UTF-8 string. */
184
+ export declare const encodeString: (buffer: Buffer, value: string) => void;
185
+ /** Decodes a length-prefixed UTF-8 string. */
186
+ export declare const decodeString: (buffer: Buffer) => string;
187
+ /** Incrementally encodes consecutive equal values using run-length encoding. */
188
+ export interface RunLengthEncoder<T> {
189
+ readonly add: (value: T) => void;
190
+ readonly getLength: () => NonNegativeInt;
191
+ readonly unwrap: () => Uint8Array;
192
+ }
193
+ /** Creates an incremental run-length encoder. */
194
+ export declare const createRunLengthEncoder: <T>(encodeValue: (buffer: Buffer, value: T) => void) => RunLengthEncoder<T>;
195
+ /** Decodes a run-length encoded sequence. */
196
+ export declare const decodeRle: <T>(buffer: Buffer, length: NonNegativeInt, decodeValue: () => T) => ReadonlyArray<T>;
124
197
  /**
125
198
  * Encodes a {@link JsonValue} using the MessagePack format.
126
199
  *
@@ -178,4 +251,4 @@ export declare const encodeJsonValue: (buffer: Buffer, value: JsonValue) => void
178
251
  * ```
179
252
  */
180
253
  export declare const decodeJsonValue: (buffer: Buffer) => JsonValue;
181
- //# sourceMappingURL=Buffer.d.ts.map
254
+ //# sourceMappingURL=Binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../../src/Binary.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,9 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- export { bytesToHex, bytesToUtf8, concatBytes, hexToBytes, utf8ToBytes, } from "@noble/ciphers/utils.js";
13
+ import { bytesToUtf8, utf8ToBytes } from "@noble/ciphers/utils.js";
14
+ export { bytesToHex, concatBytes, hexToBytes } from "@noble/ciphers/utils.js";
15
+ export { bytesToUtf8, utf8ToBytes };
14
16
  /**
15
17
  * Custom error for {@link Buffer}-related failures like premature end of data.
16
18
  * Provides better stack traces for debugging binary protocol issues.
@@ -26,9 +28,7 @@ export class BufferError extends Error {
26
28
  export const createBuffer = (arrayLike) => {
27
29
  const initialLength = arrayLike?.length ?? 0;
28
30
  assertNonNegativeInt(initialLength, "arrayLike.length");
29
- let value = arrayLike
30
- ? new globalThis.Uint8Array(arrayLike)
31
- : new globalThis.Uint8Array(512);
31
+ let value = arrayLike ? new Uint8Array(arrayLike) : new Uint8Array(512);
32
32
  let length = initialLength;
33
33
  const buffer = {
34
34
  getCapacity: () => value.length,
@@ -41,7 +41,7 @@ export const createBuffer = (arrayLike) => {
41
41
  if (value.length < targetSize) {
42
42
  const oldValue = value;
43
43
  const newCapacity = Math.max(value.length * 2, targetSize);
44
- value = new globalThis.Uint8Array(newCapacity);
44
+ value = new Uint8Array(newCapacity);
45
45
  value.set(oldValue);
46
46
  }
47
47
  value.set(arg, length);
@@ -74,23 +74,207 @@ export const createBuffer = (arrayLike) => {
74
74
  };
75
75
  return buffer;
76
76
  };
77
+ /**
78
+ * Evolu uses MessagePack to handle finite numbers except for NonNegativeInt.
79
+ * For NonNegativeInt, Evolu provides more efficient encoding.
80
+ */
81
+ export const encodeNumber = (buffer, number) => {
82
+ encodeJsonValue(buffer, number);
83
+ };
84
+ export const decodeNumber = (buffer) => {
85
+ const value = decodeJsonValue(buffer);
86
+ if (typeof value !== "number") {
87
+ throw new BufferError("Expected an encoded number.");
88
+ }
89
+ return value;
90
+ };
91
+ /**
92
+ * Encodes an array of boolean flags into a single byte.
93
+ *
94
+ * Each element in the array corresponds to a bit (0-7). Array can have 0-8
95
+ * elements.
96
+ *
97
+ * ### Example
98
+ *
99
+ * ```ts
100
+ * import { assertEqual, createBuffer, encodeFlags } from "@evolu/common";
101
+ *
102
+ * const buffer = createBuffer();
103
+ * encodeFlags(buffer, [true, false, true]);
104
+ *
105
+ * assertEqual(buffer.unwrap(), new Uint8Array([0b101]));
106
+ * ```
107
+ */
108
+ export const encodeFlags = (buffer, flags) => {
109
+ let byte = 0;
110
+ for (let i = 0; i < flags.length && i < 8; i++) {
111
+ if (flags[i]) {
112
+ byte |= 1 << i;
113
+ }
114
+ }
115
+ buffer.extend([byte]);
116
+ };
117
+ /**
118
+ * Decodes a byte into an array of boolean flags.
119
+ *
120
+ * ### Example
121
+ *
122
+ * ```ts
123
+ * import {
124
+ * assertEqual,
125
+ * createBuffer,
126
+ * decodeFlags,
127
+ * PositiveInt,
128
+ * } from "@evolu/common";
129
+ *
130
+ * const buffer = createBuffer([0b101]);
131
+ * const flags = decodeFlags(buffer, PositiveInt.orThrow(3));
132
+ *
133
+ * assertEqual(flags, [true, false, true]);
134
+ * assertEqual(buffer.getLength(), 0);
135
+ * ```
136
+ */
137
+ export const decodeFlags = (buffer, count) => {
138
+ const byte = buffer.shift();
139
+ const length = Math.min(count, 8);
140
+ // oxlint-disable-next-line unicorn/no-new-array -- Preallocation is intentional in this decoding hot path.
141
+ const flags = new Array(length);
142
+ for (let i = 0; i < length; i++) {
143
+ flags[i] = (byte & (1 << i)) !== 0;
144
+ }
145
+ return flags;
146
+ };
147
+ /**
148
+ * Encodes a non-negative integer into a variable-length integer format. It's
149
+ * more efficient than encoding via {@link encodeNumber}.
150
+ *
151
+ * https://en.wikipedia.org/wiki/Variable-length_quantity
152
+ */
153
+ export const encodeNonNegativeInt = (buffer, value) => {
154
+ if (value === 0) {
155
+ buffer.extend([0]);
156
+ return;
157
+ }
158
+ let remaining = BigInt(value);
159
+ const bytes = [];
160
+ while (remaining !== 0n) {
161
+ const byte = Number(remaining & 127n);
162
+ bytes.push(byte);
163
+ remaining >>= 7n;
164
+ }
165
+ for (let i = 0; i < bytes.length - 1; i++) {
166
+ bytes[i] |= 128;
167
+ }
168
+ buffer.extend(bytes);
169
+ };
170
+ /**
171
+ * Decodes a non-negative integer from a variable-length integer format.
172
+ *
173
+ * https://en.wikipedia.org/wiki/Variable-length_quantity
174
+ */
175
+ export const decodeNonNegativeInt = (buffer) => {
176
+ let result = 0n;
177
+ let shift = 0n;
178
+ let byte = 0;
179
+ // 8 is the smallest required count
180
+ for (let byteCount = 0; byteCount < 8; byteCount++) {
181
+ byte = buffer.shift();
182
+ result |= BigInt(byte & 127) << shift;
183
+ if ((byte & 128) === 0)
184
+ break;
185
+ shift += 7n;
186
+ }
187
+ if ((byte & 128) !== 0) {
188
+ throw new BufferError("Variable-length quantity must terminate within 8 bytes.");
189
+ }
190
+ const value = Number(result);
191
+ assertNonNegativeInt(value, "Decoded integer");
192
+ return value;
193
+ };
194
+ /** Encodes the length of an array-like value. */
195
+ export const encodeLength = (buffer, value) => {
196
+ assertNonNegativeInt(value.length, "Array-like length");
197
+ encodeNonNegativeInt(buffer, value.length);
198
+ };
199
+ /** Decodes an array-like value length. */
200
+ export const decodeLength = decodeNonNegativeInt;
201
+ /** Encodes a length-prefixed UTF-8 string. */
202
+ export const encodeString = (buffer, value) => {
203
+ const bytes = utf8ToBytes(value);
204
+ encodeLength(buffer, bytes);
205
+ buffer.extend(bytes);
206
+ };
207
+ /** Decodes a length-prefixed UTF-8 string. */
208
+ export const decodeString = (buffer) => {
209
+ const length = decodeLength(buffer);
210
+ const bytes = buffer.shiftN(length);
211
+ return bytesToUtf8(bytes);
212
+ };
213
+ /** Creates an incremental run-length encoder. */
214
+ export const createRunLengthEncoder = (encodeValue) => {
215
+ const buffer = createBuffer();
216
+ let previousLength = 0;
217
+ let previousValue = null;
218
+ let runLength = 0;
219
+ return {
220
+ add: (value) => {
221
+ if (Object.is(value, previousValue)) {
222
+ runLength++;
223
+ buffer.truncate(previousLength);
224
+ }
225
+ else {
226
+ previousValue = value;
227
+ runLength = 1;
228
+ }
229
+ previousLength = buffer.getLength();
230
+ encodeValue(buffer, value);
231
+ encodeNonNegativeInt(buffer, runLength);
232
+ },
233
+ getLength: () => buffer.getLength(),
234
+ unwrap: () => buffer.unwrap(),
235
+ };
236
+ };
237
+ /** Decodes a run-length encoded sequence. */
238
+ export const decodeRle = (buffer, length, decodeValue) => {
239
+ // oxlint-disable-next-line unicorn/no-new-array -- Preallocation is intentional in this decoding hot path.
240
+ const values = new Array(length);
241
+ let index = 0;
242
+ while (index < length) {
243
+ const value = decodeValue();
244
+ const runLength = decodeNonNegativeInt(buffer);
245
+ // Prevent infinite loop on malformed input.
246
+ if (runLength === 0) {
247
+ throw new BufferError("Invalid RLE encoding: runLength must be positive");
248
+ }
249
+ const remaining = length - index;
250
+ // Prevent CPU/memory amplification via oversized runLength.
251
+ if (runLength > remaining) {
252
+ throw new BufferError(`Invalid RLE encoding: runLength ${runLength} exceeds remaining ${remaining}`);
253
+ }
254
+ for (let i = 0; i < runLength; i++) {
255
+ values[index] = value;
256
+ index++;
257
+ }
258
+ }
259
+ return values;
260
+ };
77
261
  const jsonKeyCacheSize = 4096;
78
262
  const maxCachedJsonKeyByteLength = 32;
79
263
  const maxJsonNestingDepth = 1_000;
80
- let jsonEncoderTarget = new globalThis.Uint8Array(8192);
81
- let jsonEncoderTargetView = new globalThis.DataView(jsonEncoderTarget.buffer);
264
+ let jsonEncoderTarget = new Uint8Array(8192);
265
+ let jsonEncoderTargetView = new DataView(jsonEncoderTarget.buffer);
82
266
  let jsonEncoderPosition = 0;
83
267
  let jsonEncoderDepth = 0;
84
268
  let jsonEncoderIsActive = false;
85
- const emptyJsonDecoderSource = new globalThis.Uint8Array(0);
86
- const emptyJsonDecoderView = new globalThis.DataView(emptyJsonDecoderSource.buffer);
269
+ const emptyJsonDecoderSource = new Uint8Array(0);
270
+ const emptyJsonDecoderView = new DataView(emptyJsonDecoderSource.buffer);
87
271
  let jsonDecoderSource = emptyJsonDecoderSource;
88
272
  let jsonDecoderView = emptyJsonDecoderView;
89
273
  let jsonDecoderPosition = 0;
90
274
  let jsonDecoderDepth = 0;
91
- const jsonStringFromCharCode = globalThis.String.fromCharCode;
275
+ const jsonStringFromCharCode = String.fromCharCode;
92
276
  // Cache only short keys and use a fixed table to bound retained memory.
93
- const jsonKeyCache = globalThis.Array.from({ length: jsonKeyCacheSize }, () => undefined);
277
+ const jsonKeyCache = Array.from({ length: jsonKeyCacheSize }, () => undefined);
94
278
  /**
95
279
  * Encodes a {@link JsonValue} using the MessagePack format.
96
280
  *
@@ -165,7 +349,7 @@ export const encodeJsonValue = (buffer, value) => {
165
349
  export const decodeJsonValue = (buffer) => {
166
350
  const source = buffer.unwrap();
167
351
  jsonDecoderSource = source;
168
- jsonDecoderView = new globalThis.DataView(source.buffer, source.byteOffset, source.byteLength);
352
+ jsonDecoderView = new DataView(source.buffer, source.byteOffset, source.byteLength);
169
353
  jsonDecoderPosition = 0;
170
354
  try {
171
355
  const value = decodeJsonValueFromSource();
@@ -195,7 +379,7 @@ const encodeJsonValueToTarget = (value) => {
195
379
  encodeJsonStringToTarget(value);
196
380
  return;
197
381
  case "number": {
198
- if (globalThis.Object.is(value, -0)) {
382
+ if (Object.is(value, -0)) {
199
383
  ensureJsonEncoderCapacity(9);
200
384
  jsonEncoderTarget[jsonEncoderPosition++] = 0xcb;
201
385
  jsonEncoderTargetView.setFloat64(jsonEncoderPosition, value);
@@ -225,9 +409,7 @@ const encodeJsonValueToTarget = (value) => {
225
409
  }
226
410
  return;
227
411
  }
228
- if (globalThis.Number.isInteger(value) &&
229
- value >= -0x80000000 &&
230
- value < 0) {
412
+ if (Number.isInteger(value) && value >= -0x80000000 && value < 0) {
231
413
  if (value >= -0x20) {
232
414
  writeJsonEncoderByte(0x100 + value);
233
415
  }
@@ -264,7 +446,7 @@ const encodeJsonValueToTarget = (value) => {
264
446
  throw new BufferError(`JSON nesting exceeds the maximum depth of ${maxJsonNestingDepth}.`);
265
447
  }
266
448
  jsonEncoderDepth++;
267
- if (globalThis.Array.isArray(value)) {
449
+ if (Array.isArray(value)) {
268
450
  const array = value;
269
451
  const length = array.length;
270
452
  writeJsonCollectionHeader(length, 0x90, 0xdc, 0xdd);
@@ -274,7 +456,7 @@ const encodeJsonValueToTarget = (value) => {
274
456
  return;
275
457
  }
276
458
  const object = value;
277
- const keys = globalThis.Object.keys(object);
459
+ const keys = Object.keys(object);
278
460
  writeJsonCollectionHeader(keys.length, 0x80, 0xde, 0xdf);
279
461
  for (const key of keys) {
280
462
  encodeJsonStringToTarget(key);
@@ -380,12 +562,12 @@ const ensureJsonEncoderCapacity = (additionalLength) => {
380
562
  assertNonNegativeInt(requiredLength, "Encoded JSON value length");
381
563
  if (requiredLength <= jsonEncoderTarget.length)
382
564
  return;
383
- const newCapacity = globalThis.Math.max(jsonEncoderTarget.length * 2, requiredLength);
565
+ const newCapacity = Math.max(jsonEncoderTarget.length * 2, requiredLength);
384
566
  assertNonNegativeInt(newCapacity, "JSON encoder capacity");
385
567
  const oldTarget = jsonEncoderTarget;
386
- jsonEncoderTarget = new globalThis.Uint8Array(newCapacity);
568
+ jsonEncoderTarget = new Uint8Array(newCapacity);
387
569
  jsonEncoderTarget.set(oldTarget.subarray(0, jsonEncoderPosition));
388
- jsonEncoderTargetView = new globalThis.DataView(jsonEncoderTarget.buffer);
570
+ jsonEncoderTargetView = new DataView(jsonEncoderTarget.buffer);
389
571
  };
390
572
  const assertMessagePackLength = (length, name) => {
391
573
  if (length > 0xffffffff) {
@@ -461,7 +643,7 @@ const decodeJsonFloat = (byteLength) => {
461
643
  ? jsonDecoderView.getFloat32(jsonDecoderPosition)
462
644
  : jsonDecoderView.getFloat64(jsonDecoderPosition);
463
645
  jsonDecoderPosition += byteLength;
464
- if (!globalThis.Number.isFinite(value)) {
646
+ if (!Number.isFinite(value)) {
465
647
  throw new BufferError("A decoded JSON number must be finite.");
466
648
  }
467
649
  return value;
@@ -685,7 +867,7 @@ const decodeJsonMap = (length) => {
685
867
  }
686
868
  const entryValue = decodeJsonValueFromSource();
687
869
  if (key === "__proto__") {
688
- globalThis.Object.defineProperty(value, key, {
870
+ Object.defineProperty(value, key, {
689
871
  value: entryValue,
690
872
  configurable: true,
691
873
  enumerable: true,
@@ -765,7 +947,7 @@ const assertJsonDecoderHasRemainingBytes = (requiredBytes) => {
765
947
  }
766
948
  };
767
949
  const assertNonNegativeInt = (value, name) => {
768
- if (!globalThis.Number.isSafeInteger(value) || value < 0) {
950
+ if (!Number.isSafeInteger(value) || value < 0) {
769
951
  throw new BufferError(`${name} must be a non-negative safe integer.`);
770
952
  }
771
953
  };
@@ -326,7 +326,7 @@ export declare const createConsole: ({ name, level, output, path, formatter, }?:
326
326
  *
327
327
  * const output = createNativeConsoleOutput();
328
328
  *
329
- * assertType<ConsoleOutput, typeof output>();
329
+ * assertType<typeof output, ConsoleOutput>();
330
330
  * assertEqual(typeof output.write, "function");
331
331
  * ```
332
332
  */
@@ -371,15 +371,7 @@ export declare const createNativeConsoleOutput: () => ConsoleOutput;
371
371
  * assertType(Data, nested);
372
372
  * assertEqual(nested, ["+1.500s [relay] [db]", "opened"]);
373
373
  *
374
- * const localTimestamp = new globalThis.Date(
375
- * 2026,
376
- * 0,
377
- * 28,
378
- * 14,
379
- * 30,
380
- * 15,
381
- * 123,
382
- * ).getTime();
374
+ * const localTimestamp = new Date(2026, 0, 28, 14, 30, 15, 123).getTime();
383
375
  * const formatAbsolute = createConsoleFormatter({
384
376
  * time: testCreateTime({ startAt: Millis.orThrow(localTimestamp) }),
385
377
  * })({ timestampFormat: "absolute" });
@@ -1 +1 @@
1
- {"version":3,"file":"Console.d.ts","sourceRoot":"","sources":["../../src/Console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Console.d.ts","sourceRoot":"","sources":["../../src/Console.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AACH,MAAM,WAAW,OAAO;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,YAAY,CAAC;IAEtC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IAExD,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC;IAEpC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1C,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE1D,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE1D,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAExD,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEzD,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEzD,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE1D,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAExC,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE3E,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,GACtB,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAErC,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,OAAO,GACP,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,YAAY,CAAC;AAEjB;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7E;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;AAE/E,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAEhC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAEvD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,2DAA2D;AAC3D,MAAM,MAAM,2BAA2B,GACrC,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACtE;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IAE/D,mCAAmC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAYD,iCAAiC;AACjC,eAAO,MAAM,aAAa,+CAMvB,aAAa,KAAQ,OAwDvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,yBAAyB,QAAO,aAU3C,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,sBAAsB,cACP,OAAO,CAAC,OAAO,CAAC,eACjC,sBAAsB,KAAQ,gBA+BtC,CAAC;AAEJ,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,QAAO,kBAM3C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,wBAAwB,YAC1B,KAAK,CAAC,YAAY,CAAC,KAC3B,aAID,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iBAAiB,YACnB,aAAa,CAAC,aAAa,CAAC,KACpC,aAID,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB,gBAE3B;IACD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,KAAQ,WAkBR,CAAC"}
@@ -71,14 +71,16 @@ export const createConsole = ({ name = "", level = "log", output = createNativeC
71
71
  *
72
72
  * const output = createNativeConsoleOutput();
73
73
  *
74
- * assertType<ConsoleOutput, typeof output>();
74
+ * assertType<typeof output, ConsoleOutput>();
75
75
  * assertEqual(typeof output.write, "function");
76
76
  * ```
77
77
  */
78
78
  export const createNativeConsoleOutput = () => ({
79
79
  write: (entry, formatter) => {
80
80
  const args = formatter ? formatter(entry) : entry.args;
81
- globalThis.console[entry.method](...args);
81
+ // oxlint-disable-next-line evolu/no-unnecessary-global-this -- Write to the global object console even if a realm lexical binding shadows it.
82
+ const nativeConsole = globalThis.console;
83
+ nativeConsole[entry.method](...args);
82
84
  },
83
85
  });
84
86
  /**
@@ -121,15 +123,7 @@ export const createNativeConsoleOutput = () => ({
121
123
  * assertType(Data, nested);
122
124
  * assertEqual(nested, ["+1.500s [relay] [db]", "opened"]);
123
125
  *
124
- * const localTimestamp = new globalThis.Date(
125
- * 2026,
126
- * 0,
127
- * 28,
128
- * 14,
129
- * 30,
130
- * 15,
131
- * 123,
132
- * ).getTime();
126
+ * const localTimestamp = new Date(2026, 0, 28, 14, 30, 15, 123).getTime();
133
127
  * const formatAbsolute = createConsoleFormatter({
134
128
  * time: testCreateTime({ startAt: Millis.orThrow(localTimestamp) }),
135
129
  * })({ timestampFormat: "absolute" });
@@ -156,7 +150,7 @@ export const createConsoleFormatter = ({ time = createTime() } = {}) => (config
156
150
  timestamp = formatMillisAsClockTime(now);
157
151
  break;
158
152
  case "iso":
159
- timestamp = new globalThis.Date(now).toISOString();
153
+ timestamp = new Date(now).toISOString();
160
154
  break;
161
155
  }
162
156
  const path = entry.path.length > 0 ? entry.path.map((p) => `[${p}]`).join(" ") : "";
@@ -49,10 +49,10 @@ export interface RandomBytes {
49
49
  * const seed = randomBytes.create(64);
50
50
  * const custom = randomBytes.create(48);
51
51
  *
52
- * assertType<Entropy16, typeof nonce16>();
53
- * assertType<Entropy24, typeof nonce24>();
54
- * assertType<Entropy32, typeof key>();
55
- * assertType<Entropy64, typeof seed>();
52
+ * assertType<typeof nonce16, Entropy16>();
53
+ * assertType<typeof nonce24, Entropy24>();
54
+ * assertType<typeof key, Entropy32>();
55
+ * assertType<typeof seed, Entropy64>();
56
56
  * assertEqual(custom.length, 48);
57
57
  * ```
58
58
  */
@@ -127,7 +127,7 @@ export type XChaCha20Poly1305Ciphertext = typeof XChaCha20Poly1305Ciphertext.Out
127
127
  * randomBytes: createRandomBytes(),
128
128
  * })(plaintext, encryptionKey);
129
129
  *
130
- * assertType<XChaCha20Poly1305Ciphertext, typeof ciphertext>();
130
+ * assertType<typeof ciphertext, XChaCha20Poly1305Ciphertext>();
131
131
  * assertEqual(nonce.length, 24);
132
132
  * ```
133
133
  *
@@ -85,7 +85,7 @@ export const XChaCha20Poly1305Ciphertext = /*#__PURE__*/ brand("XChaCha20Poly130
85
85
  * randomBytes: createRandomBytes(),
86
86
  * })(plaintext, encryptionKey);
87
87
  *
88
- * assertType<XChaCha20Poly1305Ciphertext, typeof ciphertext>();
88
+ * assertType<typeof ciphertext, XChaCha20Poly1305Ciphertext>();
89
89
  * assertEqual(nonce.length, 24);
90
90
  * ```
91
91
  *