@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.
- package/dist/src/Array.d.ts +21 -21
- package/dist/src/Array.js +5 -5
- package/dist/src/Assert.d.ts +478 -141
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +644 -99
- package/dist/src/{Buffer.d.ts → Binary.d.ts} +85 -12
- package/dist/src/Binary.d.ts.map +1 -0
- package/dist/src/{Buffer.js → Binary.js} +206 -24
- package/dist/src/Console.d.ts +2 -10
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +6 -12
- package/dist/src/Crypto.d.ts +5 -5
- package/dist/src/Crypto.js +1 -1
- package/dist/src/Eq.d.ts +35 -40
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +51 -87
- package/dist/src/Function.d.ts +9 -14
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +7 -9
- package/dist/src/Http.d.ts +6 -7
- package/dist/src/Http.d.ts.map +1 -1
- package/dist/src/LeakDetector.d.ts.map +1 -1
- package/dist/src/LeakDetector.js +1 -0
- package/dist/src/LockManager.d.ts +1 -1
- package/dist/src/LockManager.js +1 -1
- package/dist/src/Lookup.d.ts +3 -2
- package/dist/src/Lookup.d.ts.map +1 -1
- package/dist/src/Lookup.js +4 -3
- package/dist/src/Number.d.ts +1 -1
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +1 -1
- package/dist/src/Object.d.ts +4 -4
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +5 -4
- package/dist/src/Option.d.ts +1 -2
- package/dist/src/Option.d.ts.map +1 -1
- package/dist/src/Option.js +1 -2
- package/dist/src/Platform.js +2 -0
- package/dist/src/Polyfills.js +4 -1
- package/dist/src/Random.d.ts +1 -1
- package/dist/src/Result.d.ts +49 -54
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +17 -22
- package/dist/src/Set.d.ts +6 -6
- package/dist/src/Set.js +2 -2
- package/dist/src/Sqlite.js +1 -1
- package/dist/src/String.js +3 -2
- package/dist/src/Task.d.ts +32 -32
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +20 -22
- package/dist/src/Test.d.ts +31 -3
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +46 -3
- package/dist/src/Time.d.ts +3 -11
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +10 -18
- package/dist/src/Type.d.ts +87 -85
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +70 -63
- package/dist/src/Types.d.ts +12 -12
- package/dist/src/Types.js +1 -1
- package/dist/src/WebSocket.d.ts +4 -7
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/Worker.d.ts +1 -1
- package/dist/src/Worker.js +7 -7
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/intl/_en.d.ts.map +1 -1
- package/dist/src/intl/_en.js +1 -1
- package/dist/src/intl/ar.d.ts.map +1 -1
- package/dist/src/intl/ar.js +1 -1
- package/dist/src/intl/bn.d.ts.map +1 -1
- package/dist/src/intl/bn.js +1 -1
- package/dist/src/intl/ca.d.ts.map +1 -1
- package/dist/src/intl/ca.js +1 -1
- package/dist/src/intl/cs.d.ts.map +1 -1
- package/dist/src/intl/cs.js +1 -1
- package/dist/src/intl/da.d.ts.map +1 -1
- package/dist/src/intl/da.js +1 -1
- package/dist/src/intl/de.d.ts.map +1 -1
- package/dist/src/intl/de.js +1 -1
- package/dist/src/intl/el.d.ts.map +1 -1
- package/dist/src/intl/el.js +1 -1
- package/dist/src/intl/es.d.ts.map +1 -1
- package/dist/src/intl/es.js +1 -1
- package/dist/src/intl/fa.d.ts.map +1 -1
- package/dist/src/intl/fa.js +1 -1
- package/dist/src/intl/fi.d.ts.map +1 -1
- package/dist/src/intl/fi.js +1 -1
- package/dist/src/intl/fil.d.ts.map +1 -1
- package/dist/src/intl/fil.js +1 -1
- package/dist/src/intl/fr.d.ts.map +1 -1
- package/dist/src/intl/fr.js +1 -1
- package/dist/src/intl/he.d.ts.map +1 -1
- package/dist/src/intl/he.js +1 -1
- package/dist/src/intl/hi.d.ts.map +1 -1
- package/dist/src/intl/hi.js +1 -1
- package/dist/src/intl/hr.d.ts.map +1 -1
- package/dist/src/intl/hr.js +1 -1
- package/dist/src/intl/hu.d.ts.map +1 -1
- package/dist/src/intl/hu.js +1 -1
- package/dist/src/intl/id.d.ts.map +1 -1
- package/dist/src/intl/id.js +1 -1
- package/dist/src/intl/it.d.ts.map +1 -1
- package/dist/src/intl/it.js +1 -1
- package/dist/src/intl/ja.d.ts.map +1 -1
- package/dist/src/intl/ja.js +1 -1
- package/dist/src/intl/ko.d.ts.map +1 -1
- package/dist/src/intl/ko.js +1 -1
- package/dist/src/intl/ml.d.ts.map +1 -1
- package/dist/src/intl/ml.js +1 -1
- package/dist/src/intl/mr.d.ts.map +1 -1
- package/dist/src/intl/mr.js +1 -1
- package/dist/src/intl/ms.d.ts.map +1 -1
- package/dist/src/intl/ms.js +1 -1
- package/dist/src/intl/nb.d.ts.map +1 -1
- package/dist/src/intl/nb.js +1 -1
- package/dist/src/intl/nl.d.ts.map +1 -1
- package/dist/src/intl/nl.js +1 -1
- package/dist/src/intl/pa.d.ts.map +1 -1
- package/dist/src/intl/pa.js +1 -1
- package/dist/src/intl/pl.d.ts.map +1 -1
- package/dist/src/intl/pl.js +1 -1
- package/dist/src/intl/pt-BR.d.ts.map +1 -1
- package/dist/src/intl/pt-BR.js +1 -1
- package/dist/src/intl/pt.d.ts.map +1 -1
- package/dist/src/intl/pt.js +1 -1
- package/dist/src/intl/ro.d.ts.map +1 -1
- package/dist/src/intl/ro.js +1 -1
- package/dist/src/intl/sk.d.ts.map +1 -1
- package/dist/src/intl/sk.js +1 -1
- package/dist/src/intl/sl.d.ts.map +1 -1
- package/dist/src/intl/sl.js +1 -1
- package/dist/src/intl/sv.d.ts.map +1 -1
- package/dist/src/intl/sv.js +1 -1
- package/dist/src/intl/sw.d.ts.map +1 -1
- package/dist/src/intl/sw.js +1 -1
- package/dist/src/intl/ta.d.ts.map +1 -1
- package/dist/src/intl/ta.js +1 -1
- package/dist/src/intl/te.d.ts.map +1 -1
- package/dist/src/intl/te.js +1 -1
- package/dist/src/intl/th.d.ts.map +1 -1
- package/dist/src/intl/th.js +1 -1
- package/dist/src/intl/tr.d.ts.map +1 -1
- package/dist/src/intl/tr.js +1 -1
- package/dist/src/intl/uk.d.ts.map +1 -1
- package/dist/src/intl/uk.js +1 -1
- package/dist/src/intl/ur.d.ts.map +1 -1
- package/dist/src/intl/ur.js +1 -1
- package/dist/src/intl/vi.d.ts.map +1 -1
- package/dist/src/intl/vi.js +1 -1
- package/dist/src/intl/zh-CN.d.ts.map +1 -1
- package/dist/src/intl/zh-CN.js +1 -1
- package/dist/src/intl/zh-TW.d.ts.map +1 -1
- package/dist/src/intl/zh-TW.js +1 -1
- package/dist/src/local-first/Evolu.d.ts +12 -12
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +2 -2
- package/dist/src/local-first/Protocol.d.ts +14 -76
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +29 -206
- package/dist/src/local-first/Query.d.ts +11 -11
- package/dist/src/local-first/Query.js +6 -6
- package/dist/src/local-first/Relay.d.ts +2 -2
- package/dist/src/local-first/Schema.d.ts +3 -5
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +2 -4
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +5 -5
- package/dist/src/local-first/Storage.js +4 -4
- package/dist/src/local-first/Timestamp.d.ts +9 -0
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +13 -10
- package/package.json +7 -4
- package/src/Array.test.ts +809 -0
- package/src/Array.ts +21 -21
- package/src/Assert.test.ts +1181 -0
- package/src/Assert.ts +971 -227
- package/src/BigInt.test.ts +28 -0
- package/src/Binary.test.ts +1128 -0
- package/src/{Buffer.ts → Binary.ts} +273 -46
- package/src/Brand.test.ts +90 -0
- package/src/Cache.test.ts +183 -0
- package/src/Callbacks.test.ts +66 -0
- package/src/Console.test.ts +809 -0
- package/src/Console.ts +9 -17
- package/src/Crypto.test.ts +138 -0
- package/src/Crypto.ts +5 -5
- package/src/Eq.test.ts +333 -0
- package/src/Eq.ts +110 -176
- package/src/Error.test.ts +118 -0
- package/src/Function.test.ts +204 -0
- package/src/Function.ts +10 -15
- package/src/Http.test.ts +816 -0
- package/src/Http.ts +6 -7
- package/src/LeakDetector.test.ts +210 -0
- package/src/LeakDetector.ts +1 -0
- package/src/LockManager.ts +2 -2
- package/src/Lookup.test.ts +418 -0
- package/src/Lookup.ts +4 -3
- package/src/Microtask.test.ts +140 -0
- package/src/Number.test.ts +218 -0
- package/src/Number.ts +2 -2
- package/src/Object.test.ts +293 -0
- package/src/Object.ts +5 -4
- package/src/Option.test.ts +104 -0
- package/src/Option.ts +1 -2
- package/src/Order.test.ts +56 -0
- package/src/Platform.ts +2 -0
- package/src/Polyfills.ts +3 -4
- package/src/Random.test.ts +89 -0
- package/src/Random.ts +1 -1
- package/src/Ref.test.ts +139 -0
- package/src/RefCount.test.ts +184 -0
- package/src/Relation.test.ts +505 -0
- package/src/Resource.test.ts +4623 -0
- package/src/Result.test.ts +1829 -0
- package/src/Result.ts +49 -54
- package/src/Schedule.test.ts +1554 -0
- package/src/Set.test.ts +279 -0
- package/src/Set.ts +6 -6
- package/src/Sqlite.ts +1 -1
- package/src/Store.test.ts +288 -0
- package/src/String.test.ts +54 -0
- package/src/String.ts +3 -3
- package/src/Task.test.ts +10820 -0
- package/src/Task.ts +38 -43
- package/src/Test.test.ts +88 -0
- package/src/Test.ts +49 -3
- package/src/Time.test.ts +926 -0
- package/src/Time.ts +13 -21
- package/src/Type.base64.test.ts +88 -0
- package/src/Type.test.ts +20465 -0
- package/src/Type.ts +114 -111
- package/src/Types.test.ts +324 -0
- package/src/Types.ts +13 -13
- package/src/WebSocket.ts +4 -7
- package/src/Worker.test.ts +755 -0
- package/src/Worker.ts +13 -18
- package/src/index.ts +1 -1
- package/src/intl/_en.ts +1 -1
- package/src/intl/ar.ts +1 -1
- package/src/intl/bn.ts +1 -1
- package/src/intl/ca.ts +1 -1
- package/src/intl/cs.ts +1 -1
- package/src/intl/da.ts +1 -1
- package/src/intl/de.ts +1 -1
- package/src/intl/el.ts +1 -1
- package/src/intl/es.ts +1 -1
- package/src/intl/fa.ts +1 -1
- package/src/intl/fi.ts +1 -1
- package/src/intl/fil.ts +1 -1
- package/src/intl/fr.ts +1 -1
- package/src/intl/he.ts +1 -1
- package/src/intl/hi.ts +1 -1
- package/src/intl/hr.ts +1 -1
- package/src/intl/hu.ts +1 -1
- package/src/intl/id.ts +1 -1
- package/src/intl/intl.test.ts +3106 -0
- package/src/intl/it.ts +1 -1
- package/src/intl/ja.ts +1 -1
- package/src/intl/ko.ts +1 -1
- package/src/intl/ml.ts +1 -1
- package/src/intl/mr.ts +1 -1
- package/src/intl/ms.ts +1 -1
- package/src/intl/nb.ts +1 -1
- package/src/intl/nl.ts +1 -1
- package/src/intl/pa.ts +1 -1
- package/src/intl/pl.ts +1 -1
- package/src/intl/pt-BR.ts +1 -1
- package/src/intl/pt.ts +1 -1
- package/src/intl/ro.ts +1 -1
- package/src/intl/sk.ts +1 -1
- package/src/intl/sl.ts +1 -1
- package/src/intl/sv.ts +1 -1
- package/src/intl/sw.ts +1 -1
- package/src/intl/ta.ts +1 -1
- package/src/intl/te.ts +1 -1
- package/src/intl/th.ts +1 -1
- package/src/intl/tr.ts +1 -1
- package/src/intl/uk.ts +1 -1
- package/src/intl/ur.ts +1 -1
- package/src/intl/vi.ts +1 -1
- package/src/intl/zh-CN.ts +1 -1
- package/src/intl/zh-TW.ts +1 -1
- package/src/local-first/Evolu.test.ts +1921 -0
- package/src/local-first/Evolu.ts +18 -14
- package/src/local-first/Owner.test.ts +83 -0
- package/src/local-first/Protocol.test.ts +1037 -0
- package/src/local-first/Protocol.ts +58 -261
- package/src/local-first/Query.test.ts +349 -0
- package/src/local-first/Query.ts +11 -11
- package/src/local-first/Relay.ts +2 -2
- package/src/local-first/Schema.ts +3 -5
- package/src/local-first/Shared.test.ts +1828 -0
- package/src/local-first/Shared.ts +9 -8
- package/src/local-first/Storage.ts +4 -4
- package/src/local-first/Timestamp.test.ts +374 -0
- package/src/local-first/Timestamp.ts +22 -10
- package/dist/src/Buffer.d.ts.map +0 -1
package/src/Result.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* try {
|
|
29
29
|
* throw new Error("Not found");
|
|
30
30
|
* } catch (error) {
|
|
31
|
-
* assertType<
|
|
31
|
+
* assertType<typeof error, unknown>();
|
|
32
32
|
* }
|
|
33
33
|
*
|
|
34
34
|
* // With Result, errors are part of the return type.
|
|
@@ -130,8 +130,8 @@
|
|
|
130
130
|
*
|
|
131
131
|
* const profile = getCurrentProfile();
|
|
132
132
|
* assertType<
|
|
133
|
-
*
|
|
134
|
-
*
|
|
133
|
+
* typeof profile,
|
|
134
|
+
* Result<Profile, UserNotFoundError | ProfileNotFoundError>
|
|
135
135
|
* >();
|
|
136
136
|
* assertOk(profile, { userId: "user-1" });
|
|
137
137
|
* ```
|
|
@@ -241,8 +241,8 @@ export type AnyResult = Result<any, any>;
|
|
|
241
241
|
* const result = ok();
|
|
242
242
|
* const count = ok(42);
|
|
243
243
|
*
|
|
244
|
-
* assertType<Result<void
|
|
245
|
-
* assertType<Result<number
|
|
244
|
+
* assertType<typeof result, Result<void>>();
|
|
245
|
+
* assertType<typeof count, Result<number>>();
|
|
246
246
|
* assertOk(result, undefined);
|
|
247
247
|
* assertOk(count, 42);
|
|
248
248
|
* ```
|
|
@@ -366,7 +366,7 @@ export const err = <E>(error: E): Result<never, E> => ({ ok: false, error });
|
|
|
366
366
|
*
|
|
367
367
|
* const count = getCount();
|
|
368
368
|
* if (isOk(count)) {
|
|
369
|
-
* assertType<Ok<number
|
|
369
|
+
* assertType<typeof count, Ok<number>>();
|
|
370
370
|
* assertEqual(count.value, 2);
|
|
371
371
|
* }
|
|
372
372
|
* ```
|
|
@@ -398,7 +398,7 @@ export const isOk = <T, E>(result: Result<T, E>): result is Ok<T> => result.ok;
|
|
|
398
398
|
*
|
|
399
399
|
* const count = getCount();
|
|
400
400
|
* if (isErr(count)) {
|
|
401
|
-
* assertType<Err<CountUnavailableError
|
|
401
|
+
* assertType<typeof count, Err<CountUnavailableError>>();
|
|
402
402
|
* assertErr(count, { type: "CountUnavailable" });
|
|
403
403
|
* }
|
|
404
404
|
* ```
|
|
@@ -429,9 +429,10 @@ export const isErr = <T, E>(result: Result<T, E>): result is Err<E> =>
|
|
|
429
429
|
*
|
|
430
430
|
* ```ts
|
|
431
431
|
* import {
|
|
432
|
-
* assert,
|
|
433
|
-
* assertErr,
|
|
434
432
|
* assertEqual,
|
|
433
|
+
* assertErr,
|
|
434
|
+
* assertInstanceOf,
|
|
435
|
+
* assertSame,
|
|
435
436
|
* assertType,
|
|
436
437
|
* err,
|
|
437
438
|
* getOrThrow,
|
|
@@ -452,21 +453,15 @@ export const isErr = <T, E>(result: Result<T, E>): result is Err<E> =>
|
|
|
452
453
|
*
|
|
453
454
|
* // At app startup, crash if the config is invalid.
|
|
454
455
|
* const config = getOrThrow(loadConfig());
|
|
455
|
-
* assertType<
|
|
456
|
+
* assertType<typeof config, Config>();
|
|
456
457
|
* assertEqual(config.port, 3000);
|
|
457
458
|
*
|
|
458
|
-
* const
|
|
459
|
+
* const invalidConfigError: InvalidConfigError = { type: "InvalidConfig" };
|
|
460
|
+
* const thrown = trySync(() => getOrThrow(err(invalidConfigError)));
|
|
459
461
|
* assertErr(thrown);
|
|
460
|
-
*
|
|
462
|
+
* assertInstanceOf(thrown.error, Error);
|
|
461
463
|
* assertEqual(thrown.error.message, "getOrThrow");
|
|
462
|
-
*
|
|
463
|
-
* assert(
|
|
464
|
-
* typeof cause === "object" &&
|
|
465
|
-
* cause !== null &&
|
|
466
|
-
* "type" in cause &&
|
|
467
|
-
* cause.type === "InvalidConfig",
|
|
468
|
-
* "Expected InvalidConfig cause.",
|
|
469
|
-
* );
|
|
464
|
+
* assertSame(thrown.error.cause, invalidConfigError);
|
|
470
465
|
* ```
|
|
471
466
|
*
|
|
472
467
|
* Throws: `Error` with the original error attached as `cause`.
|
|
@@ -515,7 +510,7 @@ export const getOrThrow = <T, E>(result: Result<T, E>): T => {
|
|
|
515
510
|
* const user = getOrNull(findUser("user-1"));
|
|
516
511
|
* const missingUser = getOrNull(findUser("missing"));
|
|
517
512
|
*
|
|
518
|
-
* assertType<User | null
|
|
513
|
+
* assertType<typeof user, User | null>();
|
|
519
514
|
* assertEqual(user, { id: "user-1" });
|
|
520
515
|
* assertEqual(missingUser, null);
|
|
521
516
|
* ```
|
|
@@ -545,7 +540,7 @@ export const getOrNull = <T, E>(result: Result<T, E>): T | null =>
|
|
|
545
540
|
*
|
|
546
541
|
* const getCount = (): Result<number> => ok(2);
|
|
547
542
|
* const count = getOk(getCount());
|
|
548
|
-
* assertType<
|
|
543
|
+
* assertType<typeof count, number>();
|
|
549
544
|
* assertEqual(count, 2);
|
|
550
545
|
* ```
|
|
551
546
|
*
|
|
@@ -571,9 +566,9 @@ export const getOk = <T>(result: Result<T>): T => {
|
|
|
571
566
|
*
|
|
572
567
|
* ```ts
|
|
573
568
|
* import {
|
|
574
|
-
* assert,
|
|
575
|
-
* assertErr,
|
|
576
569
|
* assertEqual,
|
|
570
|
+
* assertErr,
|
|
571
|
+
* assertInstanceOf,
|
|
577
572
|
* assertOk,
|
|
578
573
|
* assertType,
|
|
579
574
|
* trySync,
|
|
@@ -604,12 +599,12 @@ export const getOk = <T>(result: Result<T>): T => {
|
|
|
604
599
|
* }
|
|
605
600
|
*
|
|
606
601
|
* const result = reserveSeat("B2");
|
|
607
|
-
* assertType<Result<void, SeatUnavailableError
|
|
602
|
+
* assertType<typeof result, Result<void, SeatUnavailableError>>();
|
|
608
603
|
* assertOk(result, undefined);
|
|
609
604
|
* assertErr(reserveSeat("A1"), { type: "SeatUnavailable", seat: "A1" });
|
|
610
605
|
* const databaseError = trySync(() => reserveSeat("B1"));
|
|
611
606
|
* assertErr(databaseError);
|
|
612
|
-
*
|
|
607
|
+
* assertInstanceOf(databaseError.error, Error);
|
|
613
608
|
* assertEqual(databaseError.error.message, "Database error");
|
|
614
609
|
* ```
|
|
615
610
|
*
|
|
@@ -648,9 +643,9 @@ export function trySync<T, E>(
|
|
|
648
643
|
*
|
|
649
644
|
* ```ts
|
|
650
645
|
* import {
|
|
651
|
-
* assert,
|
|
652
|
-
* assertErr,
|
|
653
646
|
* assertEqual,
|
|
647
|
+
* assertErr,
|
|
648
|
+
* assertInstanceOf,
|
|
654
649
|
* assertOk,
|
|
655
650
|
* assertType,
|
|
656
651
|
* tryAsync,
|
|
@@ -686,7 +681,7 @@ export function trySync<T, E>(
|
|
|
686
681
|
* }
|
|
687
682
|
*
|
|
688
683
|
* const result = await reserveSeat("B2");
|
|
689
|
-
* assertType<Result<void, SeatUnavailableError
|
|
684
|
+
* assertType<typeof result, Result<void, SeatUnavailableError>>();
|
|
690
685
|
* assertOk(result, undefined);
|
|
691
686
|
* assertErr(await reserveSeat("A1"), {
|
|
692
687
|
* type: "SeatUnavailable",
|
|
@@ -694,7 +689,7 @@ export function trySync<T, E>(
|
|
|
694
689
|
* });
|
|
695
690
|
* const databaseError = await tryAsync(() => reserveSeat("B1"));
|
|
696
691
|
* assertErr(databaseError);
|
|
697
|
-
*
|
|
692
|
+
* assertInstanceOf(databaseError.error, Error);
|
|
698
693
|
* assertEqual(databaseError.error.message, "Database error");
|
|
699
694
|
* ```
|
|
700
695
|
*
|
|
@@ -757,7 +752,7 @@ export async function tryAsync<T, E>(
|
|
|
757
752
|
* interface ReadFailedError extends Typed<"ReadFailed"> {}
|
|
758
753
|
*
|
|
759
754
|
* const value = next(0);
|
|
760
|
-
* assertType<NextResult<string, ReadFailedError, number
|
|
755
|
+
* assertType<typeof value, NextResult<string, ReadFailedError, number>>();
|
|
761
756
|
* assertOk(value, "first");
|
|
762
757
|
* assertErr(next(1), { type: "ReadFailed" });
|
|
763
758
|
* assertErr(next(2), { type: "Done", done: 2 });
|
|
@@ -783,8 +778,8 @@ export type NextResult<A, E = never, D = void> = Result<A, E | Done<D>>;
|
|
|
783
778
|
*
|
|
784
779
|
* const withoutValue = done();
|
|
785
780
|
* const withValue = done(42);
|
|
786
|
-
* assertType<Done<void
|
|
787
|
-
* assertType<Done<number
|
|
781
|
+
* assertType<typeof withoutValue, Done<void>>();
|
|
782
|
+
* assertType<typeof withValue, Done<number>>();
|
|
788
783
|
* assertEqual(withoutValue, { type: "Done", done: undefined });
|
|
789
784
|
* assertEqual(withValue, { type: "Done", done: 42 });
|
|
790
785
|
* ```
|
|
@@ -833,7 +828,7 @@ export function done<D>(value?: D): Done<D> {
|
|
|
833
828
|
*
|
|
834
829
|
* interface ReadFailedError extends Typed<"ReadFailed"> {}
|
|
835
830
|
*
|
|
836
|
-
* assertType<
|
|
831
|
+
* assertType<ExcludeDone<Errors>, ReadFailedError>();
|
|
837
832
|
* ```
|
|
838
833
|
*
|
|
839
834
|
* @group Pull
|
|
@@ -860,7 +855,7 @@ export type ExcludeDone<E> = Exclude<E, Done<any>>;
|
|
|
860
855
|
*
|
|
861
856
|
* interface ReadFailedError extends Typed<"ReadFailed"> {}
|
|
862
857
|
*
|
|
863
|
-
* assertType<
|
|
858
|
+
* assertType<OnlyDone<Errors>, Done<number>>();
|
|
864
859
|
* ```
|
|
865
860
|
*
|
|
866
861
|
* @group Pull
|
|
@@ -884,7 +879,7 @@ export type OnlyDone<E> = Extract<E, Done<any>>;
|
|
|
884
879
|
*
|
|
885
880
|
* interface ReadFailedError extends Typed<"ReadFailed"> {}
|
|
886
881
|
*
|
|
887
|
-
* assertType<
|
|
882
|
+
* assertType<InferDone<ReadResult>, number>();
|
|
888
883
|
* ```
|
|
889
884
|
*
|
|
890
885
|
* @group Pull
|
|
@@ -936,8 +931,8 @@ export type InferDone<R extends Result<any, any>> =
|
|
|
936
931
|
* const user: Result<User, UserNotFoundError> = ok({ id: "user-1" });
|
|
937
932
|
* const profile = flatMapResult(user, ({ id }) => getProfile(id));
|
|
938
933
|
* assertType<
|
|
939
|
-
*
|
|
940
|
-
*
|
|
934
|
+
* typeof profile,
|
|
935
|
+
* Result<Profile, UserNotFoundError | ProfileNotFoundError>
|
|
941
936
|
* >();
|
|
942
937
|
* assertOk(profile, { userId: "user-1" });
|
|
943
938
|
* ```
|
|
@@ -981,11 +976,11 @@ export const flatMapResult = <T, E, U, F>(
|
|
|
981
976
|
*
|
|
982
977
|
* const values = allResult([getCount(), getLabel()]);
|
|
983
978
|
* assertType<
|
|
979
|
+
* typeof values,
|
|
984
980
|
* Result<
|
|
985
981
|
* readonly [number, string],
|
|
986
982
|
* CountUnavailableError | LabelUnavailableError
|
|
987
|
-
*
|
|
988
|
-
* typeof values
|
|
983
|
+
* >
|
|
989
984
|
* >();
|
|
990
985
|
* assertOk(values, [2, "books"]);
|
|
991
986
|
* ```
|
|
@@ -1013,8 +1008,8 @@ export function allResult<
|
|
|
1013
1008
|
* const resultsByName = { a: ok(1), b: ok(2) } as const;
|
|
1014
1009
|
* const valuesByName = allResult(resultsByName);
|
|
1015
1010
|
* assertType<
|
|
1016
|
-
*
|
|
1017
|
-
*
|
|
1011
|
+
* typeof valuesByName,
|
|
1012
|
+
* Result<{ readonly a: number; readonly b: number }>
|
|
1018
1013
|
* >();
|
|
1019
1014
|
* assertOk(valuesByName, { a: 1, b: 2 });
|
|
1020
1015
|
* ```
|
|
@@ -1042,7 +1037,7 @@ export function allResult<T extends Readonly<Record<string, AnyResult>>>(
|
|
|
1042
1037
|
*
|
|
1043
1038
|
* const results: ReadonlyArray<Result<number>> = [ok(1), ok(2)];
|
|
1044
1039
|
* const numbers = allResult(results);
|
|
1045
|
-
* assertType<Result<ReadonlyArray<number
|
|
1040
|
+
* assertType<typeof numbers, Result<ReadonlyArray<number>>>();
|
|
1046
1041
|
* assertOk(numbers, [1, 2]);
|
|
1047
1042
|
* ```
|
|
1048
1043
|
*/
|
|
@@ -1067,7 +1062,7 @@ export function allResult<T, E>(
|
|
|
1067
1062
|
*
|
|
1068
1063
|
* const results: NonEmptyReadonlyArray<Result<number>> = [ok(1), ok(2)];
|
|
1069
1064
|
* const numbers = allResult(results);
|
|
1070
|
-
* assertType<Result<NonEmptyReadonlyArray<number
|
|
1065
|
+
* assertType<typeof numbers, Result<NonEmptyReadonlyArray<number>>>();
|
|
1071
1066
|
* assertOk(numbers, [1, 2]);
|
|
1072
1067
|
* ```
|
|
1073
1068
|
*/
|
|
@@ -1090,7 +1085,7 @@ export function allResult<T, E>(
|
|
|
1090
1085
|
* } from "@evolu/common";
|
|
1091
1086
|
*
|
|
1092
1087
|
* const result = allResult({ a: ok(1), b: ok(2) }, { collect: false });
|
|
1093
|
-
* assertType<Result<void
|
|
1088
|
+
* assertType<typeof result, Result<void>>();
|
|
1094
1089
|
* assertOk(result, undefined);
|
|
1095
1090
|
* ```
|
|
1096
1091
|
*/
|
|
@@ -1118,7 +1113,7 @@ export function allResult<T extends Readonly<Record<string, AnyResult>>>(
|
|
|
1118
1113
|
*
|
|
1119
1114
|
* const results: ReadonlyArray<Result<number>> = [ok(1), ok(2)];
|
|
1120
1115
|
* const result = allResult(results, { collect: false });
|
|
1121
|
-
* assertType<Result<void
|
|
1116
|
+
* assertType<typeof result, Result<void>>();
|
|
1122
1117
|
* assertOk(result, undefined);
|
|
1123
1118
|
* ```
|
|
1124
1119
|
*/
|
|
@@ -1144,11 +1139,11 @@ export function allResult<R extends AnyResult>(
|
|
|
1144
1139
|
*
|
|
1145
1140
|
* const numbers: NonEmptyReadonlyArray<number> = [1, 2];
|
|
1146
1141
|
* const doubled = allResult(numbers, (number) => ok(number * 2));
|
|
1147
|
-
* assertType<Result<NonEmptyReadonlyArray<number
|
|
1142
|
+
* assertType<typeof doubled, Result<NonEmptyReadonlyArray<number>>>();
|
|
1148
1143
|
* assertOk(doubled, [2, 4]);
|
|
1149
1144
|
*
|
|
1150
1145
|
* const tuple = allResult([1, 2] as const, (number) => ok(number * 2));
|
|
1151
|
-
* assertType<Result<readonly [number, number]
|
|
1146
|
+
* assertType<typeof tuple, Result<readonly [number, number]>>();
|
|
1152
1147
|
* assertOk(tuple, [2, 4]);
|
|
1153
1148
|
* ```
|
|
1154
1149
|
*/
|
|
@@ -1176,7 +1171,7 @@ export function allResult<
|
|
|
1176
1171
|
*
|
|
1177
1172
|
* const numbers: Iterable<number> = new Set([1, 2]);
|
|
1178
1173
|
* const doubled = allResult(numbers, (number) => ok(number * 2));
|
|
1179
|
-
* assertType<Result<ReadonlyArray<number
|
|
1174
|
+
* assertType<typeof doubled, Result<ReadonlyArray<number>>>();
|
|
1180
1175
|
* assertOk(doubled, [2, 4]);
|
|
1181
1176
|
* ```
|
|
1182
1177
|
*/
|
|
@@ -1208,8 +1203,8 @@ export function allResult<A, R extends AnyResult>(
|
|
|
1208
1203
|
* const userIdsByRole = { owner: "user-1", reviewer: "user-2" } as const;
|
|
1209
1204
|
* const usersByRole = allResult(userIdsByRole, toUser);
|
|
1210
1205
|
* assertType<
|
|
1211
|
-
*
|
|
1212
|
-
*
|
|
1206
|
+
* typeof usersByRole,
|
|
1207
|
+
* Result<Readonly<Record<"owner" | "reviewer", User>>>
|
|
1213
1208
|
* >();
|
|
1214
1209
|
* assertOk(usersByRole, {
|
|
1215
1210
|
* owner: { id: "user-1" },
|
|
@@ -1251,7 +1246,7 @@ export function allResult<A, R extends AnyResult, K extends string>(
|
|
|
1251
1246
|
* collect: false,
|
|
1252
1247
|
* },
|
|
1253
1248
|
* );
|
|
1254
|
-
* assertType<Result<void
|
|
1249
|
+
* assertType<typeof result, Result<void>>();
|
|
1255
1250
|
* assertOk(result, undefined);
|
|
1256
1251
|
* assertEqual(visited, [1, 2]);
|
|
1257
1252
|
* ```
|
|
@@ -1279,7 +1274,7 @@ export function allResult<A, R extends AnyResult>(
|
|
|
1279
1274
|
* const result = allResult({ a: 1, b: 2 }, (number) => ok(number * 2), {
|
|
1280
1275
|
* collect: false,
|
|
1281
1276
|
* });
|
|
1282
|
-
* assertType<Result<void
|
|
1277
|
+
* assertType<typeof result, Result<void>>();
|
|
1283
1278
|
* assertOk(result, undefined);
|
|
1284
1279
|
* ```
|
|
1285
1280
|
*/
|
|
@@ -1382,7 +1377,7 @@ export function allResult(
|
|
|
1382
1377
|
* interface CacheMissError extends Typed<"CacheMiss"> {}
|
|
1383
1378
|
*
|
|
1384
1379
|
* const number = anyResult([getCachedPrice(), ok(42)]);
|
|
1385
|
-
* assertType<Result<number, CacheMissError
|
|
1380
|
+
* assertType<typeof number, Result<number, CacheMissError>>();
|
|
1386
1381
|
* assertOk(number, 42);
|
|
1387
1382
|
* ```
|
|
1388
1383
|
*
|