@evolu/common 8.10.0 → 8.12.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 (152) hide show
  1. package/dist/src/Bytes.d.ts +39 -2
  2. package/dist/src/Bytes.d.ts.map +1 -1
  3. package/dist/src/Bytes.js +50 -2
  4. package/dist/src/Config.d.ts +22 -22
  5. package/dist/src/Config.d.ts.map +1 -1
  6. package/dist/src/Console.d.ts +62 -7
  7. package/dist/src/Console.d.ts.map +1 -1
  8. package/dist/src/Console.js +20 -4
  9. package/dist/src/Crypto.d.ts +76 -4
  10. package/dist/src/Crypto.d.ts.map +1 -1
  11. package/dist/src/Crypto.js +55 -4
  12. package/dist/src/Error.d.ts +45 -0
  13. package/dist/src/Error.d.ts.map +1 -1
  14. package/dist/src/Error.js +69 -0
  15. package/dist/src/Fs.d.ts +92 -18
  16. package/dist/src/Fs.d.ts.map +1 -1
  17. package/dist/src/Fs.js +2 -0
  18. package/dist/src/Identicon.d.ts +2 -2
  19. package/dist/src/Identicon.js +2 -2
  20. package/dist/src/LeakDetector.d.ts +22 -3
  21. package/dist/src/LeakDetector.d.ts.map +1 -1
  22. package/dist/src/LeakDetector.js +12 -2
  23. package/dist/src/LockManager.d.ts +8 -0
  24. package/dist/src/LockManager.d.ts.map +1 -1
  25. package/dist/src/LockManager.js +6 -0
  26. package/dist/src/Object.d.ts.map +1 -1
  27. package/dist/src/Object.js +5 -0
  28. package/dist/src/Platform.d.ts +47 -7
  29. package/dist/src/Platform.d.ts.map +1 -1
  30. package/dist/src/Platform.js +24 -5
  31. package/dist/src/Random.d.ts +25 -2
  32. package/dist/src/Random.d.ts.map +1 -1
  33. package/dist/src/Random.js +14 -2
  34. package/dist/src/Resource.d.ts +156 -1
  35. package/dist/src/Resource.d.ts.map +1 -1
  36. package/dist/src/Resource.js +201 -72
  37. package/dist/src/Schedule.d.ts +11 -10
  38. package/dist/src/Schedule.d.ts.map +1 -1
  39. package/dist/src/Schedule.js +1 -1
  40. package/dist/src/Sqlite.d.ts +132 -16
  41. package/dist/src/Sqlite.d.ts.map +1 -1
  42. package/dist/src/Sqlite.js +63 -9
  43. package/dist/src/Task.d.ts +15 -4
  44. package/dist/src/Task.d.ts.map +1 -1
  45. package/dist/src/Task.js +41 -15
  46. package/dist/src/Test.d.ts +9 -0
  47. package/dist/src/Test.d.ts.map +1 -1
  48. package/dist/src/Test.js +4 -0
  49. package/dist/src/Time.d.ts +106 -9
  50. package/dist/src/Time.d.ts.map +1 -1
  51. package/dist/src/Time.js +55 -4
  52. package/dist/src/Type.d.ts +1455 -1310
  53. package/dist/src/Type.d.ts.map +1 -1
  54. package/dist/src/Type.js +1274 -517
  55. package/dist/src/WebSocket.d.ts +164 -13
  56. package/dist/src/WebSocket.d.ts.map +1 -1
  57. package/dist/src/WebSocket.js +133 -24
  58. package/dist/src/Worker.d.ts +90 -8
  59. package/dist/src/Worker.d.ts.map +1 -1
  60. package/dist/src/Worker.js +28 -2
  61. package/dist/src/index.d.ts +6 -7
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js +2 -3
  64. package/dist/src/local-first/Db.d.ts +52 -3
  65. package/dist/src/local-first/Db.d.ts.map +1 -1
  66. package/dist/src/local-first/Db.js +412 -137
  67. package/dist/src/local-first/Evolu.d.ts +412 -213
  68. package/dist/src/local-first/Evolu.d.ts.map +1 -1
  69. package/dist/src/local-first/Evolu.js +181 -18
  70. package/dist/src/local-first/Owner.d.ts +13 -30
  71. package/dist/src/local-first/Owner.d.ts.map +1 -1
  72. package/dist/src/local-first/Owner.js +13 -30
  73. package/dist/src/local-first/Protocol.d.ts +106 -19
  74. package/dist/src/local-first/Protocol.d.ts.map +1 -1
  75. package/dist/src/local-first/Protocol.js +162 -60
  76. package/dist/src/local-first/Query.d.ts +8 -15
  77. package/dist/src/local-first/Query.d.ts.map +1 -1
  78. package/dist/src/local-first/Relay.d.ts.map +1 -1
  79. package/dist/src/local-first/Relay.js +4 -2
  80. package/dist/src/local-first/Schema.d.ts +346 -23
  81. package/dist/src/local-first/Schema.d.ts.map +1 -1
  82. package/dist/src/local-first/Schema.js +214 -17
  83. package/dist/src/local-first/Shared.d.ts +537 -22
  84. package/dist/src/local-first/Shared.d.ts.map +1 -1
  85. package/dist/src/local-first/Shared.js +1437 -234
  86. package/dist/src/local-first/Storage.d.ts +195 -17
  87. package/dist/src/local-first/Storage.d.ts.map +1 -1
  88. package/dist/src/local-first/Storage.js +85 -22
  89. package/dist/src/local-first/Timestamp.d.ts +392 -41
  90. package/dist/src/local-first/Timestamp.d.ts.map +1 -1
  91. package/dist/src/local-first/Timestamp.js +403 -81
  92. package/dist/src/local-first/index.d.ts +0 -1
  93. package/dist/src/local-first/index.d.ts.map +1 -1
  94. package/dist/src/local-first/index.js +0 -1
  95. package/package.json +1 -1
  96. package/src/Assert.test.ts +2 -5
  97. package/src/Bytes.test.ts +27 -0
  98. package/src/Bytes.ts +58 -2
  99. package/src/Config.test.ts +2 -6
  100. package/src/Config.ts +133 -133
  101. package/src/Console.ts +62 -7
  102. package/src/Crypto.ts +76 -4
  103. package/src/Eq.test.ts +2 -3
  104. package/src/Error.test.ts +76 -3
  105. package/src/Error.ts +71 -0
  106. package/src/Fs.ts +92 -18
  107. package/src/Identicon.ts +2 -2
  108. package/src/LeakDetector.ts +22 -3
  109. package/src/LockManager.ts +8 -0
  110. package/src/Object.test.ts +27 -12
  111. package/src/Object.ts +5 -0
  112. package/src/Platform.ts +50 -8
  113. package/src/Random.ts +25 -2
  114. package/src/Resource.test.ts +837 -0
  115. package/src/Resource.ts +235 -15
  116. package/src/Schedule.test.ts +50 -12
  117. package/src/Schedule.ts +24 -14
  118. package/src/Sqlite.ts +137 -17
  119. package/src/Task.test.ts +189 -8
  120. package/src/Task.ts +56 -17
  121. package/src/Test.ts +9 -0
  122. package/src/Time.ts +106 -9
  123. package/src/Type.test.ts +946 -1028
  124. package/src/Type.ts +4195 -3136
  125. package/src/Types.test.ts +4 -14
  126. package/src/WebSocket.ts +313 -40
  127. package/src/Worker.ts +90 -8
  128. package/src/index.ts +20 -6
  129. package/src/local-first/Db.ts +644 -339
  130. package/src/local-first/Evolu.test.ts +994 -22
  131. package/src/local-first/Evolu.ts +625 -232
  132. package/src/local-first/Owner.ts +13 -30
  133. package/src/local-first/Protocol.test.ts +634 -10
  134. package/src/local-first/Protocol.ts +255 -109
  135. package/src/local-first/Query.ts +8 -15
  136. package/src/local-first/Relay.ts +4 -2
  137. package/src/local-first/Schema.test.ts +143 -0
  138. package/src/local-first/Schema.ts +376 -26
  139. package/src/local-first/Shared.test.ts +7731 -559
  140. package/src/local-first/Shared.ts +2036 -267
  141. package/src/local-first/Storage.ts +224 -36
  142. package/src/local-first/Timestamp.test.ts +344 -70
  143. package/src/local-first/Timestamp.ts +434 -118
  144. package/src/local-first/index.ts +0 -1
  145. package/dist/src/local-first/Error.d.ts +0 -12
  146. package/dist/src/local-first/Error.d.ts.map +0 -1
  147. package/dist/src/local-first/Error.js +0 -6
  148. package/dist/src/local-first/LocalAuth.d.ts +0 -150
  149. package/dist/src/local-first/LocalAuth.d.ts.map +0 -1
  150. package/dist/src/local-first/LocalAuth.js +0 -179
  151. package/src/local-first/Error.ts +0 -17
  152. package/src/local-first/LocalAuth.ts +0 -457
@@ -10,6 +10,11 @@
10
10
  import type { RandomLibDep } from "./Random.ts";
11
11
  import type { Result } from "./Result.ts";
12
12
  import { NonNegativeInt, type Typed } from "./Type.ts";
13
+ /**
14
+ * Cryptographically secure random bytes with length-branded results.
15
+ *
16
+ * @group Random bytes
17
+ */
13
18
  export interface RandomBytes {
14
19
  /**
15
20
  * Creates cryptographically secure random bytes with type-safe length
@@ -62,42 +67,89 @@ export interface RandomBytes {
62
67
  create(bytesLength: 64): Entropy64;
63
68
  create(bytesLength: number): Entropy;
64
69
  }
70
+ /**
71
+ * Dependency wrapper for {@link RandomBytes}.
72
+ *
73
+ * @group Random bytes
74
+ */
65
75
  export interface RandomBytesDep {
66
76
  readonly randomBytes: RandomBytes;
67
77
  }
68
78
  declare const Entropy: import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>;
69
79
  type Entropy = typeof Entropy.Output;
80
+ /**
81
+ * Cryptographic entropy of exactly 16 bytes.
82
+ *
83
+ * @group Random bytes
84
+ */
70
85
  export declare const Entropy16: import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>, "Length16", import("./Type.ts").LengthError<16>>;
71
86
  export type Entropy16 = typeof Entropy16.Output;
87
+ /**
88
+ * Cryptographic entropy of exactly 24 bytes.
89
+ *
90
+ * @group Random bytes
91
+ */
72
92
  export declare const Entropy24: import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>, "Length24", import("./Type.ts").LengthError<24>>;
73
93
  export type Entropy24 = typeof Entropy24.Output;
94
+ /**
95
+ * Cryptographic entropy of exactly 32 bytes.
96
+ *
97
+ * @group Random bytes
98
+ */
74
99
  export declare const Entropy32: import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>, "Length32", import("./Type.ts").LengthError<32>>;
75
100
  export type Entropy32 = typeof Entropy32.Output;
101
+ /**
102
+ * Cryptographic entropy of exactly 64 bytes.
103
+ *
104
+ * @group Random bytes
105
+ */
76
106
  export declare const Entropy64: import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>, "Length64", import("./Type.ts").LengthError<64>>;
77
107
  export type Entropy64 = typeof Entropy64.Output;
108
+ /**
109
+ * Creates {@link RandomBytes} backed by the platform's secure random number
110
+ * generator.
111
+ *
112
+ * @group Random bytes
113
+ */
78
114
  export declare const createRandomBytes: () => RandomBytes;
79
- /** Creates seeded random bytes for deterministic tests. */
115
+ /**
116
+ * Creates seeded random bytes for deterministic tests.
117
+ *
118
+ * @group Testing
119
+ */
80
120
  export declare const testCreateRandomBytes: (deps: RandomLibDep) => RandomBytes;
81
121
  /**
82
122
  * SLIP21.
83
123
  *
84
124
  * https://github.com/satoshilabs/slips/blob/master/slip-0021.md
125
+ *
126
+ * @group Key derivation
85
127
  */
86
128
  export declare const createSlip21: (seed: Entropy16 | Entropy32 | Entropy64, path: ReadonlyArray<string | number>) => Entropy32;
87
129
  /**
88
130
  * Derives a single node in the SLIP-21 hierarchical key derivation.
89
131
  *
132
+ * @group Key derivation
90
133
  * @see {@link createSlip21}
91
134
  */
92
135
  export declare const deriveSlip21Node: (label: string, parentNode: Entropy64) => Entropy64;
93
- /** The encryption key for symmetric encryption. */
136
+ /**
137
+ * The encryption key for symmetric encryption.
138
+ *
139
+ * @group Encryption
140
+ */
94
141
  export declare const EncryptionKey: import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "Entropy", never>, "Length32", import("./Type.ts").LengthError<32>>, "EncryptionKey", never>;
95
142
  export type EncryptionKey = typeof EncryptionKey.Output;
96
- /** The nonce length for XChaCha20-Poly1305 encryption. */
143
+ /**
144
+ * The nonce length for XChaCha20-Poly1305 encryption.
145
+ *
146
+ * @group Encryption
147
+ */
97
148
  export declare const xChaCha20Poly1305NonceLength = 24;
98
149
  /**
99
150
  * Branded Uint8Array for XChaCha20-Poly1305 encryption.
100
151
  *
152
+ * @group Encryption
101
153
  * @see {@link encryptWithXChaCha20Poly1305}
102
154
  */
103
155
  export declare const XChaCha20Poly1305Ciphertext: import("./Type.ts").BrandType<import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>, "XChaCha20Poly1305Ciphertext", never>;
@@ -131,9 +183,15 @@ export type XChaCha20Poly1305Ciphertext = typeof XChaCha20Poly1305Ciphertext.Out
131
183
  * assertEqual(nonce.length, 24);
132
184
  * ```
133
185
  *
186
+ * @group Encryption
134
187
  * @see https://github.com/paulmillr/noble-ciphers
135
188
  */
136
189
  export declare const encryptWithXChaCha20Poly1305: (deps: RandomBytesDep) => (plaintext: Uint8Array, encryptionKey: EncryptionKey) => [XChaCha20Poly1305Ciphertext, Entropy24];
190
+ /**
191
+ * Error returned by {@link decryptWithXChaCha20Poly1305} when decryption fails.
192
+ *
193
+ * @group Encryption
194
+ */
137
195
  export interface DecryptWithXChaCha20Poly1305Error extends Typed<"DecryptWithXChaCha20Poly1305Error"> {
138
196
  readonly error: unknown;
139
197
  }
@@ -176,6 +234,8 @@ export interface DecryptWithXChaCha20Poly1305Error extends Typed<"DecryptWithXCh
176
234
  *
177
235
  * assertOk(decryptMessage(), "secret message");
178
236
  * ```
237
+ *
238
+ * @group Encryption
179
239
  */
180
240
  export declare const decryptWithXChaCha20Poly1305: (ciphertext: XChaCha20Poly1305Ciphertext, nonce: Entropy24, encryptionKey: EncryptionKey) => Result<Uint8Array, DecryptWithXChaCha20Poly1305Error>;
181
241
  /**
@@ -185,18 +245,30 @@ export declare const decryptWithXChaCha20Poly1305: (ciphertext: XChaCha20Poly130
185
245
  * wide range of encrypted data sizes.
186
246
  *
187
247
  * See the PURBs paper for details: https://bford.info/pub/sec/purb.pdf
248
+ *
249
+ * @group Padding
188
250
  */
189
251
  export declare const createPadmePaddedLength: (length: NonNegativeInt) => NonNegativeInt;
190
- /** Creates a PADMÉ padding array of zeros for the given input length. */
252
+ /**
253
+ * Creates a PADMÉ padding array of zeros for the given input length.
254
+ *
255
+ * @group Padding
256
+ */
191
257
  export declare const createPadmePadding: (length: NonNegativeInt) => Uint8Array;
192
258
  /**
193
259
  * Performs a timing-safe comparison of two Uint8Arrays. Returns true if they
194
260
  * are equal, false otherwise. Takes constant time regardless of where the
195
261
  * arrays differ.
196
262
  *
263
+ * @group Comparison
197
264
  * @see https://nodejs.org/api/crypto.html#cryptotimingsafeequala-b
198
265
  */
199
266
  export type TimingSafeEqual = (a: Uint8Array, b: Uint8Array) => boolean;
267
+ /**
268
+ * Dependency wrapper for {@link TimingSafeEqual}.
269
+ *
270
+ * @group Comparison
271
+ */
200
272
  export interface TimingSafeEqualDep {
201
273
  readonly timingSafeEqual: TimingSafeEqual;
202
274
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"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"}
@@ -14,14 +14,44 @@ import { randomBytes, utf8ToBytes } from "@noble/hashes/utils.js";
14
14
  import { trySync } from "./Result.js";
15
15
  import { brand, length, NonNegativeInt, Uint8Array, zeroNonNegativeInt, } from "./Type.js";
16
16
  const Entropy = /*#__PURE__*/ brand("Entropy", Uint8Array);
17
+ /**
18
+ * Cryptographic entropy of exactly 16 bytes.
19
+ *
20
+ * @group Random bytes
21
+ */
17
22
  export const Entropy16 = /*#__PURE__*/ length(16)(Entropy);
23
+ /**
24
+ * Cryptographic entropy of exactly 24 bytes.
25
+ *
26
+ * @group Random bytes
27
+ */
18
28
  export const Entropy24 = /*#__PURE__*/ length(24)(Entropy);
29
+ /**
30
+ * Cryptographic entropy of exactly 32 bytes.
31
+ *
32
+ * @group Random bytes
33
+ */
19
34
  export const Entropy32 = /*#__PURE__*/ length(32)(Entropy);
35
+ /**
36
+ * Cryptographic entropy of exactly 64 bytes.
37
+ *
38
+ * @group Random bytes
39
+ */
20
40
  export const Entropy64 = /*#__PURE__*/ length(64)(Entropy);
41
+ /**
42
+ * Creates {@link RandomBytes} backed by the platform's secure random number
43
+ * generator.
44
+ *
45
+ * @group Random bytes
46
+ */
21
47
  export const createRandomBytes = () => ({
22
48
  create: randomBytes,
23
49
  });
24
- /** Creates seeded random bytes for deterministic tests. */
50
+ /**
51
+ * Creates seeded random bytes for deterministic tests.
52
+ *
53
+ * @group Testing
54
+ */
25
55
  export const testCreateRandomBytes = (deps) => ({
26
56
  create: (bytesLength) => globalThis.Uint8Array.from({ length: bytesLength }, () => deps.randomLib.int(0, 255)),
27
57
  });
@@ -29,6 +59,8 @@ export const testCreateRandomBytes = (deps) => ({
29
59
  * SLIP21.
30
60
  *
31
61
  * https://github.com/satoshilabs/slips/blob/master/slip-0021.md
62
+ *
63
+ * @group Key derivation
32
64
  */
33
65
  export const createSlip21 = (seed, path) => {
34
66
  let currentNode = hmac(sha512, utf8ToBytes("Symmetric key seed"), seed);
@@ -41,6 +73,7 @@ export const createSlip21 = (seed, path) => {
41
73
  /**
42
74
  * Derives a single node in the SLIP-21 hierarchical key derivation.
43
75
  *
76
+ * @group Key derivation
44
77
  * @see {@link createSlip21}
45
78
  */
46
79
  export const deriveSlip21Node = (label, parentNode) => {
@@ -50,13 +83,22 @@ export const deriveSlip21Node = (label, parentNode) => {
50
83
  message.set(labelBytes, 1);
51
84
  return hmac(sha512, parentNode.slice(0, 32), message);
52
85
  };
53
- /** The encryption key for symmetric encryption. */
86
+ /**
87
+ * The encryption key for symmetric encryption.
88
+ *
89
+ * @group Encryption
90
+ */
54
91
  export const EncryptionKey = /*#__PURE__*/ brand("EncryptionKey", Entropy32);
55
- /** The nonce length for XChaCha20-Poly1305 encryption. */
92
+ /**
93
+ * The nonce length for XChaCha20-Poly1305 encryption.
94
+ *
95
+ * @group Encryption
96
+ */
56
97
  export const xChaCha20Poly1305NonceLength = 24;
57
98
  /**
58
99
  * Branded Uint8Array for XChaCha20-Poly1305 encryption.
59
100
  *
101
+ * @group Encryption
60
102
  * @see {@link encryptWithXChaCha20Poly1305}
61
103
  */
62
104
  export const XChaCha20Poly1305Ciphertext = /*#__PURE__*/ brand("XChaCha20Poly1305Ciphertext", Uint8Array);
@@ -89,6 +131,7 @@ export const XChaCha20Poly1305Ciphertext = /*#__PURE__*/ brand("XChaCha20Poly130
89
131
  * assertEqual(nonce.length, 24);
90
132
  * ```
91
133
  *
134
+ * @group Encryption
92
135
  * @see https://github.com/paulmillr/noble-ciphers
93
136
  */
94
137
  export const encryptWithXChaCha20Poly1305 = (deps) => (plaintext, encryptionKey) => {
@@ -135,6 +178,8 @@ export const encryptWithXChaCha20Poly1305 = (deps) => (plaintext, encryptionKey)
135
178
  *
136
179
  * assertOk(decryptMessage(), "secret message");
137
180
  * ```
181
+ *
182
+ * @group Encryption
138
183
  */
139
184
  export const decryptWithXChaCha20Poly1305 = (ciphertext, nonce, encryptionKey) => trySync(() => xchacha20poly1305(encryptionKey, nonce).decrypt(ciphertext), (error) => ({
140
185
  type: "DecryptWithXChaCha20Poly1305Error",
@@ -147,6 +192,8 @@ export const decryptWithXChaCha20Poly1305 = (ciphertext, nonce, encryptionKey) =
147
192
  * wide range of encrypted data sizes.
148
193
  *
149
194
  * See the PURBs paper for details: https://bford.info/pub/sec/purb.pdf
195
+ *
196
+ * @group Padding
150
197
  */
151
198
  export const createPadmePaddedLength = (length) => {
152
199
  if (length <= 0)
@@ -157,7 +204,11 @@ export const createPadmePaddedLength = (length) => {
157
204
  const mask = (1 << z) - 1;
158
205
  return NonNegativeInt.orThrow((length + mask) & ~mask);
159
206
  };
160
- /** Creates a PADMÉ padding array of zeros for the given input length. */
207
+ /**
208
+ * Creates a PADMÉ padding array of zeros for the given input length.
209
+ *
210
+ * @group Padding
211
+ */
161
212
  export const createPadmePadding = (length) => {
162
213
  const paddedLength = createPadmePaddedLength(length);
163
214
  const paddingLength = NonNegativeInt.orThrow(paddedLength - length);
@@ -29,4 +29,49 @@ export interface UnknownError extends InferType<typeof UnknownError> {
29
29
  * non-enumerable. This function extracts those properties into a plain object.
30
30
  */
31
31
  export declare const createUnknownError: (error: unknown) => UnknownError;
32
+ /**
33
+ * Converts a reported defect to an `Error` that a host error reporter shows
34
+ * readably.
35
+ *
36
+ * Hosts such as browsers and React Native show a reported value that is not an
37
+ * `Error` only as text such as "[object Object]", and a worker's error reaches
38
+ * its page, including an error tracker listening there, as that text alone. A
39
+ * panic reports a plain {@link AbortError}, so its defect is converted instead.
40
+ * An `Error` is returned as it is, including one from another realm, such as an
41
+ * iframe. A `DOMException` is described in an `Error` with its name and
42
+ * message, because Chromium reports one from a worker without them. Any other
43
+ * value is described in an `Error` whose cause is what was reported.
44
+ *
45
+ * Platform {@link createRun} adapters use it for their default reporting. A
46
+ * custom {@link ReportDefect} can use it too, such as before passing a defect to
47
+ * an error tracker.
48
+ *
49
+ * ### Example
50
+ *
51
+ * ```ts
52
+ * import {
53
+ * assertEqual,
54
+ * assertSame,
55
+ * createRun,
56
+ * defectToError,
57
+ * } from "@evolu/common";
58
+ *
59
+ * const errors: Array<Error> = [];
60
+ * await using run = createRun({
61
+ * reportDefect: (reported) => {
62
+ * errors.push(defectToError(reported));
63
+ * },
64
+ * });
65
+ * const defect = new Error("boom");
66
+ *
67
+ * run.panic(defect);
68
+ *
69
+ * assertSame(errors[0], defect);
70
+ * assertEqual(
71
+ * defectToError({ type: "UnexpectedState" }).message,
72
+ * 'Defect: {"type":"UnexpectedState"}',
73
+ * );
74
+ * ```
75
+ */
76
+ export declare const defectToError: (reported: unknown) => Error;
32
77
  //# sourceMappingURL=Error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Error.d.ts","sourceRoot":"","sources":["../../src/Error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAS,KAAK,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,CAClC,cAAc,EACd;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,OAAO,CAAA;CAAE,CAGlC,CAAC;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,OAAO,YAAY,CAAC;CAAG;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,YAkDnD,CAAC"}
1
+ {"version":3,"file":"Error.d.ts","sourceRoot":"","sources":["../../src/Error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,SAAS,EAAS,KAAK,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,CAClC,cAAc,EACd;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,OAAO,CAAA;CAAE,CAGlC,CAAC;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,OAAO,YAAY,CAAC;CAAG;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,YAkDnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,aAAa,aAAc,OAAO,KAAG,KAuBjD,CAAC"}
package/dist/src/Error.js CHANGED
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
+ import { safelyStringifyUnknownValue } from "./String.js";
7
+ import { AbortError } from "./Task.js";
6
8
  import { typed, Unknown } from "./Type.js";
7
9
  /**
8
10
  * A wrapper for unknown errors caught at runtime.
@@ -76,3 +78,70 @@ export const createUnknownError = (error) => {
76
78
  }
77
79
  }
78
80
  };
81
+ /**
82
+ * Converts a reported defect to an `Error` that a host error reporter shows
83
+ * readably.
84
+ *
85
+ * Hosts such as browsers and React Native show a reported value that is not an
86
+ * `Error` only as text such as "[object Object]", and a worker's error reaches
87
+ * its page, including an error tracker listening there, as that text alone. A
88
+ * panic reports a plain {@link AbortError}, so its defect is converted instead.
89
+ * An `Error` is returned as it is, including one from another realm, such as an
90
+ * iframe. A `DOMException` is described in an `Error` with its name and
91
+ * message, because Chromium reports one from a worker without them. Any other
92
+ * value is described in an `Error` whose cause is what was reported.
93
+ *
94
+ * Platform {@link createRun} adapters use it for their default reporting. A
95
+ * custom {@link ReportDefect} can use it too, such as before passing a defect to
96
+ * an error tracker.
97
+ *
98
+ * ### Example
99
+ *
100
+ * ```ts
101
+ * import {
102
+ * assertEqual,
103
+ * assertSame,
104
+ * createRun,
105
+ * defectToError,
106
+ * } from "@evolu/common";
107
+ *
108
+ * const errors: Array<Error> = [];
109
+ * await using run = createRun({
110
+ * reportDefect: (reported) => {
111
+ * errors.push(defectToError(reported));
112
+ * },
113
+ * });
114
+ * const defect = new Error("boom");
115
+ *
116
+ * run.panic(defect);
117
+ *
118
+ * assertSame(errors[0], defect);
119
+ * assertEqual(
120
+ * defectToError({ type: "UnexpectedState" }).message,
121
+ * 'Defect: {"type":"UnexpectedState"}',
122
+ * );
123
+ * ```
124
+ */
125
+ export const defectToError = (reported) => {
126
+ const defect = AbortError.is(reported) && reported.reason.type === "PanicAbortReason"
127
+ ? reported.reason.defect
128
+ : reported;
129
+ // The internal tag survives crossing realms, such as from an iframe, where
130
+ // instanceof fails.
131
+ const tag = Object.prototype.toString.call(defect);
132
+ // Chromium reports a DOMException from a worker without its name or message,
133
+ // so it is described in an Error.
134
+ if (tag === "[object DOMException]") {
135
+ const { name, message } = defect;
136
+ return new Error(`${name}: ${message}`, { cause: defect });
137
+ }
138
+ if (defect instanceof Error || tag === "[object Error]") {
139
+ return defect;
140
+ }
141
+ // A value with a cycle or a bigint falls back to String, often
142
+ // "[object Object]", and a nested Error shows as "{}". That is enough:
143
+ // Evolu's own defects are Errors, and the cause still holds the value.
144
+ return new Error(`Defect: ${safelyStringifyUnknownValue(defect)}`, {
145
+ cause: reported,
146
+ });
147
+ };
package/dist/src/Fs.d.ts CHANGED
@@ -58,7 +58,11 @@
58
58
  import type { ByteLength } from "./Bytes.ts";
59
59
  import type { Task } from "./Task.ts";
60
60
  import type { Typed } from "./Type.ts";
61
- /** Asynchronous file system operations. */
61
+ /**
62
+ * Asynchronous file system operations.
63
+ *
64
+ * @group Core
65
+ */
62
66
  export interface Fs {
63
67
  /**
64
68
  * Reads a whole file, as bytes by default or as a string with an encoding. An
@@ -127,24 +131,48 @@ export interface Fs {
127
131
  */
128
132
  readonly createTempDirectory: (options?: FsCreateTempDirectoryOptions) => Task<FsTempDirectory, FsError>;
129
133
  }
130
- /** Dependency wrapper for {@link Fs}. */
134
+ /**
135
+ * Dependency wrapper for {@link Fs}.
136
+ *
137
+ * @group Core
138
+ */
131
139
  export interface FsDep {
132
140
  readonly fs: Fs;
133
141
  }
134
- /** A file system path, or a `file:` URL. */
142
+ /**
143
+ * A file system path, or a `file:` URL.
144
+ *
145
+ * @group Core
146
+ */
135
147
  export type FsPath = string | URL;
136
- /** Supported text encodings. */
148
+ /**
149
+ * Supported text encodings.
150
+ *
151
+ * @group Core
152
+ */
137
153
  export type FsEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "utf-16le" | "ucs2" | "ucs-2" | "base64" | "base64url" | "latin1" | "binary" | "hex";
138
- /** Supported file opening modes for {@link Fs.writeFile}. */
154
+ /**
155
+ * Supported file opening modes for {@link Fs.writeFile}.
156
+ *
157
+ * @group Core
158
+ */
139
159
  export type FsOpenFlag = "a" | "ax" | "a+" | "ax+" | "as" | "as+" | "r" | "r+" | "rs+" | "w" | "wx" | "w+" | "wx+";
140
- /** Reads bytes by default, or text when an encoding is specified. */
160
+ /**
161
+ * Reads bytes by default, or text when an encoding is specified.
162
+ *
163
+ * @group Core
164
+ */
141
165
  export interface FsReadFile {
142
166
  (path: FsPath): Task<Uint8Array, FsError>;
143
167
  (path: FsPath, encoding: FsEncoding | {
144
168
  readonly encoding: FsEncoding;
145
169
  }): Task<string, FsError>;
146
170
  }
147
- /** Options for {@link Fs.writeFile}. */
171
+ /**
172
+ * Options for {@link Fs.writeFile}.
173
+ *
174
+ * @group Options
175
+ */
148
176
  export interface FsWriteFileOptions {
149
177
  /** Encoding of string data. Defaults to `utf8`. */
150
178
  readonly encoding?: FsEncoding;
@@ -153,19 +181,31 @@ export interface FsWriteFileOptions {
153
181
  /** Open flag. Defaults to `w`; use `wx` to fail when the file exists. */
154
182
  readonly flag?: FsOpenFlag;
155
183
  }
156
- /** Options for {@link Fs.readDirectory}. */
184
+ /**
185
+ * Options for {@link Fs.readDirectory}.
186
+ *
187
+ * @group Options
188
+ */
157
189
  export interface FsReadDirectoryOptions {
158
190
  /** Includes entries from nested directories. Defaults to `false`. */
159
191
  readonly recursive?: boolean;
160
192
  }
161
- /** Options for {@link Fs.createDirectory}. */
193
+ /**
194
+ * Options for {@link Fs.createDirectory}.
195
+ *
196
+ * @group Options
197
+ */
162
198
  export interface FsCreateDirectoryOptions {
163
199
  /** Creates missing parents and accepts an existing directory. */
164
200
  readonly recursive?: boolean;
165
201
  /** Directory mode. Defaults to `0o777`. */
166
202
  readonly mode?: number;
167
203
  }
168
- /** Options for {@link Fs.copy}. */
204
+ /**
205
+ * Options for {@link Fs.copy}.
206
+ *
207
+ * @group Options
208
+ */
169
209
  export interface FsCopyOptions {
170
210
  /**
171
211
  * Node's `force` option. Replaces existing files; `false` skips them unless
@@ -182,12 +222,20 @@ export interface FsCopyOptions {
182
222
  /** Preserves access and modification times. Defaults to `false`. */
183
223
  readonly preserveTimestamps?: boolean;
184
224
  }
185
- /** Options for {@link Fs.copyFile}. */
225
+ /**
226
+ * Options for {@link Fs.copyFile}.
227
+ *
228
+ * @group Options
229
+ */
186
230
  export interface FsCopyFileOptions {
187
231
  /** Replaces an existing destination file. Defaults to `false`. */
188
232
  readonly overwrite?: boolean;
189
233
  }
190
- /** Options for {@link Fs.remove}. */
234
+ /**
235
+ * Options for {@link Fs.remove}.
236
+ *
237
+ * @group Options
238
+ */
191
239
  export interface FsRemoveOptions {
192
240
  /** Removes directories and their contents. */
193
241
  readonly recursive?: boolean;
@@ -204,7 +252,11 @@ export interface FsRemoveOptions {
204
252
  */
205
253
  readonly retryDelay?: number;
206
254
  }
207
- /** File metadata as data, with Node's numeric and timestamp field names. */
255
+ /**
256
+ * File metadata as data, with Node's numeric and timestamp field names.
257
+ *
258
+ * @group Core
259
+ */
208
260
  export interface FsMetadata {
209
261
  readonly type: FsEntryType;
210
262
  readonly dev: number;
@@ -226,20 +278,36 @@ export interface FsMetadata {
226
278
  readonly ctime: Date;
227
279
  readonly birthtime: Date;
228
280
  }
229
- /** The kind of file system entry described by {@link FsMetadata}. */
281
+ /**
282
+ * The kind of file system entry described by {@link FsMetadata}.
283
+ *
284
+ * @group Core
285
+ */
230
286
  export type FsEntryType = "File" | "Directory" | "SymbolicLink" | "BlockDevice" | "CharacterDevice" | "FIFO" | "Socket" | "Unknown";
231
- /** Options for {@link Fs.createTempDirectory}. */
287
+ /**
288
+ * Options for {@link Fs.createTempDirectory}.
289
+ *
290
+ * @group Options
291
+ */
232
292
  export interface FsCreateTempDirectoryOptions {
233
293
  /** Existing parent directory. Defaults to the system temporary directory. */
234
294
  readonly directory?: string;
235
295
  /** Prefix for the directory name. Defaults to an empty string. */
236
296
  readonly prefix?: string;
237
297
  }
238
- /** A temporary directory removed, with its contents, on asynchronous disposal. */
298
+ /**
299
+ * A temporary directory removed, with its contents, on asynchronous disposal.
300
+ *
301
+ * @group Core
302
+ */
239
303
  export interface FsTempDirectory extends AsyncDisposable {
240
304
  readonly path: string;
241
305
  }
242
- /** A failed file system operation. */
306
+ /**
307
+ * A failed file system operation.
308
+ *
309
+ * @group Errors
310
+ */
243
311
  export interface FsError extends Typed<"FsError"> {
244
312
  readonly reason: FsErrorReason;
245
313
  /**
@@ -259,7 +327,11 @@ export interface FsError extends Typed<"FsError"> {
259
327
  /** The platform's diagnostic message. */
260
328
  readonly message: string;
261
329
  }
262
- /** Why a file system operation failed, mapped from the platform's error code. */
330
+ /**
331
+ * Why a file system operation failed, mapped from the platform's error code.
332
+ *
333
+ * @group Errors
334
+ */
263
335
  export type FsErrorReason = "NotFound" | "AlreadyExists" | "PermissionDenied" | "IsDirectory" | "NotDirectory" | "NotEmpty" | "Busy" | "Unknown";
264
336
  /**
265
337
  * Creates a test {@link Fs} with the supplied operation overrides.
@@ -297,6 +369,8 @@ export type FsErrorReason = "NotFound" | "AlreadyExists" | "PermissionDenied" |
297
369
  *
298
370
  * assertOk(await run(saveMessage));
299
371
  * ```
372
+ *
373
+ * @group Testing
300
374
  */
301
375
  export declare const testCreateFs: (overrides?: Partial<Fs>) => Fs;
302
376
  //# sourceMappingURL=Fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Fs.d.ts","sourceRoot":"","sources":["../../src/Fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Fs.d.ts","sourceRoot":"","sources":["../../src/Fs.ts"],"names":[],"mappings":"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"}
package/dist/src/Fs.js CHANGED
@@ -91,6 +91,8 @@
91
91
  *
92
92
  * assertOk(await run(saveMessage));
93
93
  * ```
94
+ *
95
+ * @group Testing
94
96
  */
95
97
  export const testCreateFs = (overrides = {}) => ({
96
98
  readFile: createUnexpectedFsOperation("readFile"),