@evolu/common 6.0.1-preview.17 → 6.0.1-preview.18
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/Brand.d.ts +75 -0
- package/dist/src/Brand.d.ts.map +1 -0
- package/dist/src/Brand.js +1 -0
- package/dist/src/Callbacks.d.ts +1 -1
- package/dist/src/Crypto.d.ts +1 -1
- package/dist/src/Evolu/Db.d.ts +4 -4
- package/dist/src/Evolu/Owner.d.ts +1 -1
- package/dist/src/Evolu/Protocol.d.ts +1 -1
- package/dist/src/Evolu/Protocol.d.ts.map +1 -1
- package/dist/src/Evolu/Query.d.ts +2 -1
- package/dist/src/Evolu/Query.d.ts.map +1 -1
- package/dist/src/Evolu/Timestamp.d.ts +1 -1
- package/dist/src/Number.d.ts +2 -1
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Result.d.ts +11 -37
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +3 -241
- package/dist/src/Sqlite.d.ts +2 -1
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Type.d.ts +2 -1
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Types.d.ts +0 -74
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/package.json +5 -5
- package/src/Brand.ts +75 -0
- package/src/Callbacks.ts +1 -1
- package/src/Crypto.ts +1 -1
- package/src/Evolu/Protocol.ts +2 -1
- package/src/Evolu/Query.ts +2 -1
- package/src/Evolu/Storage.ts +1 -1
- package/src/Evolu/Timestamp.ts +1 -1
- package/src/Number.ts +2 -6
- package/src/Result.ts +12 -40
- package/src/Sqlite.ts +2 -1
- package/src/Type.ts +2 -1
- package/src/Types.ts +0 -76
- package/src/index.ts +1 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility interface for creating branded types.
|
|
3
|
+
*
|
|
4
|
+
* Branded types enhance type safety by differentiating otherwise identical base
|
|
5
|
+
* types, such as `number` or `string`, to enforce stricter type checks.
|
|
6
|
+
*
|
|
7
|
+
* Supports multiple brands, allowing types to act like flags.
|
|
8
|
+
*
|
|
9
|
+
* ### Example 1: Single Brand
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* // A branded type definition
|
|
13
|
+
* type UserId = number & Brand<"UserId">;
|
|
14
|
+
*
|
|
15
|
+
* // A function that creates `UserId` values.
|
|
16
|
+
* // Casting with `as UserId` is unsafe, so `createUserId` must be unit-tested.
|
|
17
|
+
* const createUserId = (): UserId => {
|
|
18
|
+
* return 123 as UserId; // Unsafe casting
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* const userId = createUserId();
|
|
22
|
+
*
|
|
23
|
+
* // A function that accepts only `UserId`.
|
|
24
|
+
* const getUser = (id: UserId) => {
|
|
25
|
+
* // Implementation
|
|
26
|
+
* };
|
|
27
|
+
*
|
|
28
|
+
* getUser(userId); // ✅ Valid
|
|
29
|
+
* getUser(123); // ❌ TypeScript error
|
|
30
|
+
* getUser("123"); // ❌ TypeScript error
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* ### Example 2: Multiple Brands
|
|
34
|
+
*
|
|
35
|
+
* ```ts
|
|
36
|
+
* // Define branded types
|
|
37
|
+
* type Min1 = string & Brand<"Min1">;
|
|
38
|
+
* type Max100 = string & Brand<"Max100">;
|
|
39
|
+
* type Min1Max100 = string & Brand<"Min1" | "Max100">;
|
|
40
|
+
*
|
|
41
|
+
* // Functions requiring specific brands
|
|
42
|
+
* const requiresMin1 = (value: Min1): void => {};
|
|
43
|
+
* const requiresMax100 = (value: Max100): void => {};
|
|
44
|
+
*
|
|
45
|
+
* // Values with single brands
|
|
46
|
+
* const min1Value: Min1 = "hello" as Min1;
|
|
47
|
+
* const max100Value: Max100 = "world" as Max100;
|
|
48
|
+
*
|
|
49
|
+
* // Value with multiple brands
|
|
50
|
+
* const min1Max100Value: Min1Max100 = "typescript" as Min1Max100;
|
|
51
|
+
*
|
|
52
|
+
* // Valid cases
|
|
53
|
+
* requiresMin1(min1Value); // ✅ Valid
|
|
54
|
+
* requiresMax100(max100Value); // ✅ Valid
|
|
55
|
+
* requiresMin1(min1Max100Value); // ✅ Valid: Min1Max100 satisfies Min1
|
|
56
|
+
* requiresMax100(min1Max100Value); // ✅ Valid: Min1Max100 satisfies Max100
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export interface Brand<B extends string> {
|
|
60
|
+
readonly [__brand]: Readonly<Record<B, true>>;
|
|
61
|
+
}
|
|
62
|
+
declare const __brand: unique symbol;
|
|
63
|
+
/**
|
|
64
|
+
* Determines whether a type `T` is a branded type.
|
|
65
|
+
*
|
|
66
|
+
* Works with any base type intersected with a `Brand`.
|
|
67
|
+
*
|
|
68
|
+
* ### Examples
|
|
69
|
+
*
|
|
70
|
+
* - `IsBranded<string>` -> false
|
|
71
|
+
* - `IsBranded<string & Brand<"X">>` -> true
|
|
72
|
+
*/
|
|
73
|
+
export type IsBranded<T> = T extends Brand<string> ? true : false;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=Brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../../src/Brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM;IACrC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAC/C;AAED,OAAO,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,CAAC;AAErC;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/src/Callbacks.d.ts
CHANGED
package/dist/src/Crypto.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Result } from "./Result.js";
|
|
7
7
|
import { Id, Mnemonic, NonNegativeInt } from "./Type.js";
|
|
8
|
-
import { Brand } from "./
|
|
8
|
+
import { Brand } from "./Brand.js";
|
|
9
9
|
/** `Uint8Array` created by {@link createRandomBytes}. */
|
|
10
10
|
export type RandomBytes = Uint8Array & Brand<"RandomBytes">;
|
|
11
11
|
export type CreateRandomBytes = (bytesLength?: number) => RandomBytes;
|
package/dist/src/Evolu/Db.d.ts
CHANGED
|
@@ -19,8 +19,8 @@ import { SqliteStorageBase } from "./Storage.js";
|
|
|
19
19
|
import { CreateSyncDep } from "./Sync.js";
|
|
20
20
|
import { TimestampError } from "./Timestamp.js";
|
|
21
21
|
export declare const DbTable: import("../Type.js").ObjectType<{
|
|
22
|
-
name: import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../
|
|
23
|
-
columns: import("../Type.js").ArrayType<import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../
|
|
22
|
+
name: import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../Brand.js").Brand<"Base64Url">, string, import("../Type.js").RegexError<"Base64Url">, string, import("../Type.js").StringError>, "MaxLength256", import("../Type.js").MaxLengthError<256>, import("../Type.js").StringError | import("../Type.js").RegexError<"Base64Url">>;
|
|
23
|
+
columns: import("../Type.js").ArrayType<import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../Brand.js").Brand<"Base64Url">, string, import("../Type.js").RegexError<"Base64Url">, string, import("../Type.js").StringError>, "MaxLength256", import("../Type.js").MaxLengthError<256>, import("../Type.js").StringError | import("../Type.js").RegexError<"Base64Url">>>;
|
|
24
24
|
}>;
|
|
25
25
|
export type DbTable = typeof DbTable.Type;
|
|
26
26
|
export declare const DbIndex: import("../Type.js").ObjectType<{
|
|
@@ -30,8 +30,8 @@ export declare const DbIndex: import("../Type.js").ObjectType<{
|
|
|
30
30
|
export type DbIndex = typeof DbIndex.Type;
|
|
31
31
|
export declare const DbSchema: import("../Type.js").ObjectType<{
|
|
32
32
|
tables: import("../Type.js").ArrayType<import("../Type.js").ObjectType<{
|
|
33
|
-
name: import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../
|
|
34
|
-
columns: import("../Type.js").ArrayType<import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../
|
|
33
|
+
name: import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../Brand.js").Brand<"Base64Url">, string, import("../Type.js").RegexError<"Base64Url">, string, import("../Type.js").StringError>, "MaxLength256", import("../Type.js").MaxLengthError<256>, import("../Type.js").StringError | import("../Type.js").RegexError<"Base64Url">>;
|
|
34
|
+
columns: import("../Type.js").ArrayType<import("../Type.js").BrandType<import("../Type.js").Type<"Brand", string & import("../Brand.js").Brand<"Base64Url">, string, import("../Type.js").RegexError<"Base64Url">, string, import("../Type.js").StringError>, "MaxLength256", import("../Type.js").MaxLengthError<256>, import("../Type.js").StringError | import("../Type.js").RegexError<"Base64Url">>>;
|
|
35
35
|
}>>;
|
|
36
36
|
indexes: import("../Type.js").ArrayType<import("../Type.js").ObjectType<{
|
|
37
37
|
name: import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>;
|
|
@@ -59,7 +59,7 @@ export declare const writeKeyLength: NonNegativeInt;
|
|
|
59
59
|
* A secure token proving that the initiator can write changes. Derived from a
|
|
60
60
|
* mnemonic or randomly generated via {@link createWriteKey}. It is rotatable.
|
|
61
61
|
*/
|
|
62
|
-
export declare const WriteKey: import("../Type.js").BrandType<import("../Type.js").BrandType<import("../Type.js").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError>, `Length${number & import("../
|
|
62
|
+
export declare const WriteKey: import("../Type.js").BrandType<import("../Type.js").BrandType<import("../Type.js").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError>, `Length${number & import("../Brand.js").Brand<"Int"> & import("../Brand.js").Brand<"NonNegative">}`, import("../Type.js").LengthError<number & import("../Brand.js").Brand<"Int"> & import("../Brand.js").Brand<"NonNegative">>, import("../Type.js").Uint8ArrayError>, "WriteKey", import("../Type.js").BrandWithoutRefineError<"WriteKey", import("../Type.js").Uint8ArrayError | import("../Type.js").LengthError<number & import("../Brand.js").Brand<"Int"> & import("../Brand.js").Brand<"NonNegative">>>, never>;
|
|
63
63
|
export type WriteKey = typeof WriteKey.Type;
|
|
64
64
|
/** Creates a randomly generated {@link WriteKey}. */
|
|
65
65
|
export declare const createWriteKey: (deps: CreateRandomBytesDep) => WriteKey;
|
|
@@ -148,7 +148,7 @@ import { CreateRandomBytesDep, EncryptionKey, SymmetricCryptoDecryptError, Symme
|
|
|
148
148
|
import { Result } from "../Result.js";
|
|
149
149
|
import { SqliteValue } from "../Sqlite.js";
|
|
150
150
|
import { Id, NanoId, NonNegativeInt, PositiveInt } from "../Type.js";
|
|
151
|
-
import { Brand } from "../
|
|
151
|
+
import { Brand } from "../Brand.js";
|
|
152
152
|
import { Owner, OwnerId, WriteKey } from "./Owner.js";
|
|
153
153
|
import { BinaryTimestamp, NodeId, Timestamp } from "./Timestamp.js";
|
|
154
154
|
/** Maximum size of the entire protocol message in bytes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Protocol.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AAIH,OAAO,EAA2B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EACL,MAAM,EAMP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,EAEb,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAIL,EAAE,EAIF,MAAM,EACN,cAAc,EAGd,WAAW,EAEZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SqliteQuery, SqliteRow, SqliteValue } from "../Sqlite.js";
|
|
2
2
|
import { Store, StoreSubscribe } from "../Store.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Simplify } from "../Types.js";
|
|
4
|
+
import { Brand } from "../Brand.js";
|
|
4
5
|
/**
|
|
5
6
|
* A type-safe SQL query.
|
|
6
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Query.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EAEX,SAAS,EACT,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Query.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EAEX,SAAS,EACT,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,MAAM,GAC7C,KAAK,CAAC,OAAO,CAAC,GAAG;IACf;;;;;;;;;;;OAWG;IACH,GAAG,EAAE,CAAC,CAAC;CACR,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,GAAG,EAAE,OAAO,WAAW,KAAG,KAAK,CAAC,CAAC,CAYzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,GAAG,EAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,KACd,WAoBF,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE7E,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,GAAG,EAAE,MAAM,GACjB,WAAW,GACX,GAAG,GACH,aAAa,CAAC,GAAG,CAAC,CAAC;CACxB;AAGD,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,GAAG,CAAM,CAAC;AAEhD,gCAAgC;AAChC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,aAAa,CACxD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,OAAO,IAAI;KACjD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK;CACnE,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI;KACzD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC5E,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,CACZ,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KACnE,IAAI,CAAC;IACV,QAAQ,CAAC,GAAG,EAAE,MAAM,YAAY,CAAC;CAClC;AAED,eAAO,MAAM,oBAAoB,QAAO,cAWvC,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,cAAc,CAAC;IAE5C,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAE/B,GAAG,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,uBAAuB,GAClC,WAAW,KAAK,CAAC,YAAY,CAAC,KAC7B,iBAwBF,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { NanoIdLibDep } from "../NanoId.js";
|
|
|
2
2
|
import { Order } from "../Order.js";
|
|
3
3
|
import { Result } from "../Result.js";
|
|
4
4
|
import { TimeDep } from "../Time.js";
|
|
5
|
-
import { Brand } from "../
|
|
5
|
+
import { Brand } from "../Brand.js";
|
|
6
6
|
export interface TimestampConfig {
|
|
7
7
|
/**
|
|
8
8
|
* Maximum physical clock drift allowed in ms.
|
package/dist/src/Number.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { NonEmptyReadonlyArray } from "./Array.js";
|
|
2
2
|
import { Result } from "./Result.js";
|
|
3
3
|
import { NonNegativeInt, PositiveInt } from "./Type.js";
|
|
4
|
-
import {
|
|
4
|
+
import { Predicate, WidenLiteral } from "./Types.js";
|
|
5
|
+
import { IsBranded } from "./Brand.js";
|
|
5
6
|
export declare const increment: (n: number) => number;
|
|
6
7
|
export declare const decrement: (n: number) => number;
|
|
7
8
|
/** Clamps a number within a given range. */
|
package/dist/src/Number.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Number.d.ts","sourceRoot":"","sources":["../../src/Number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAW,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"Number.d.ts","sourceRoot":"","sources":["../../src/Number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAW,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAoB,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAe,CAAC;AAEtD,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAe,CAAC;AAEtD,4CAA4C;AAC5C,eAAO,MAAM,KAAK,GACf,KAAK,MAAM,EAAE,KAAK,MAAM,MACxB,GAAG,MAAM,KAAG,MACoB,CAAC;AAEpC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,GACnB,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,SAAS,CAAC,MAAM,CAEd,CAAC;AAEjC,wEAAwE;AACxE,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,MAAM,EAClC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAClC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CACa,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,MAAM,EAClC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAClC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CACa,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,GACjC,eAAe,cAAc;AAE7B,kBAAkB;AAClB,kBAAwB,WAAW;AAEnC,iBAAiB;AACjB,4BAAiC,WAAW,KAC3C,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,WAAW,CAoBxD,CAAC"}
|
package/dist/src/Result.d.ts
CHANGED
|
@@ -1,36 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 🛡️ Type-safe errors
|
|
3
3
|
*
|
|
4
|
-
* ## Intro
|
|
5
|
-
*
|
|
6
4
|
* The problem with throwing an exception in JavaScript is that the caught error
|
|
7
5
|
* is always of an unknown type. The unknown type is a problem because we can't
|
|
8
6
|
* be sure all errors have been handled because the TypeScript compiler can't
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* type, such as Result or Either, allowing the developer to handle all errors
|
|
14
|
-
* safely. ✅
|
|
15
|
-
*
|
|
16
|
-
* ✨ Evolu uses {@link Result}, and it looks like this:
|
|
17
|
-
*
|
|
18
|
-
* ```ts
|
|
19
|
-
* type Result<T, E> = Ok<T> | Err<E>;
|
|
20
|
-
*
|
|
21
|
-
* interface Ok<T> {
|
|
22
|
-
* readonly ok: true;
|
|
23
|
-
* readonly value: T;
|
|
24
|
-
* }
|
|
7
|
+
* tell us. Some other languages like Rust 🦀 or Haskell 📚 use a type-safe
|
|
8
|
+
* approach to error handling, where errors are explicitly represented as part
|
|
9
|
+
* of the return type, such as Result or Either, allowing the developer to
|
|
10
|
+
* handle all errors safely. ✅
|
|
25
11
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* }
|
|
30
|
-
*
|
|
31
|
-
* const ok = <T>(value: T): Ok<T> => ({ ok: true, value });
|
|
32
|
-
* const err = <E>(error: E): Err<E> => ({ ok: false, error });
|
|
33
|
-
* ```
|
|
12
|
+
* This type models that approach in TypeScript. A `Result` can be either
|
|
13
|
+
* {@link Ok} (success) or {@link Err} (error). Use {@link ok} to create a
|
|
14
|
+
* successful result and {@link err} to create an error result.
|
|
34
15
|
*
|
|
35
16
|
* Now let's look at how `Result` can be used for safe JSON parsing:
|
|
36
17
|
*
|
|
@@ -197,9 +178,8 @@
|
|
|
197
178
|
* ### How do I handle an array of operations and short-circuit on the first error?
|
|
198
179
|
*
|
|
199
180
|
* If you have an array of operations (not results), you should make them
|
|
200
|
-
* _lazy_—that is, represent each operation as a function
|
|
201
|
-
*
|
|
202
|
-
* stop on the first error:
|
|
181
|
+
* _lazy_—that is, represent each operation as a function. This way, you only
|
|
182
|
+
* execute each operation as needed, and can stop on the first error:
|
|
203
183
|
*
|
|
204
184
|
* ```ts
|
|
205
185
|
* import type { LazyValue } from "./Function";
|
|
@@ -234,14 +214,6 @@
|
|
|
234
214
|
* developers. While monads and functional helpers can be powerful, they often
|
|
235
215
|
* obscure control flow and make debugging harder. Evolu's approach keeps error
|
|
236
216
|
* handling explicit and straightforward.
|
|
237
|
-
*
|
|
238
|
-
* @module
|
|
239
|
-
*/
|
|
240
|
-
/**
|
|
241
|
-
* A `Result` can be either {@link Ok} (success) or {@link Err} (error).
|
|
242
|
-
*
|
|
243
|
-
* Use {@link ok} to create a successful result and {@link err} to create an error
|
|
244
|
-
* result.
|
|
245
217
|
*/
|
|
246
218
|
export type Result<T, E> = Ok<T> | Err<E>;
|
|
247
219
|
/** A successful {@link Result}. */
|
|
@@ -346,6 +318,8 @@ export declare const err: <E>(error: E) => Err<E>;
|
|
|
346
318
|
* const config = getOrThrow(loadConfig());
|
|
347
319
|
* // Safe to use config here
|
|
348
320
|
* ```
|
|
321
|
+
*
|
|
322
|
+
* Throws: `Error` with the original error attached as `cause`.
|
|
349
323
|
*/
|
|
350
324
|
export declare const getOrThrow: <T, E>(result: Result<T, E>) => T;
|
|
351
325
|
/**
|
package/dist/src/Result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../src/Result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../src/Result.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwNG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1C,mCAAmC;AACnC,MAAM,WAAW,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAC/B,2DAA2D;AAC3D,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAKvC;;;;;;;;;GASG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAA2B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAMvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAC1B,IAAI,MAAM,CAAC,EACX,UAAU,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAC9B,MAAM,CAAC,CAAC,EAAE,CAAC,CAMb,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,CAAC,EACjC,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,UAAU,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAC9B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAIpB,CAAC"}
|
package/dist/src/Result.js
CHANGED
|
@@ -1,243 +1,3 @@
|
|
|
1
|
-
/* eslint-disable jsdoc/no-undefined-types */
|
|
2
|
-
/**
|
|
3
|
-
* 🛡️ Type-safe errors
|
|
4
|
-
*
|
|
5
|
-
* ## Intro
|
|
6
|
-
*
|
|
7
|
-
* The problem with throwing an exception in JavaScript is that the caught error
|
|
8
|
-
* is always of an unknown type. The unknown type is a problem because we can't
|
|
9
|
-
* be sure all errors have been handled because the TypeScript compiler can't
|
|
10
|
-
* help us.
|
|
11
|
-
*
|
|
12
|
-
* Some other languages like Rust 🦀 or Haskell 📚 use a type-safe approach to
|
|
13
|
-
* error handling, where errors are explicitly represented as part of the return
|
|
14
|
-
* type, such as Result or Either, allowing the developer to handle all errors
|
|
15
|
-
* safely. ✅
|
|
16
|
-
*
|
|
17
|
-
* ✨ Evolu uses {@link Result}, and it looks like this:
|
|
18
|
-
*
|
|
19
|
-
* ```ts
|
|
20
|
-
* type Result<T, E> = Ok<T> | Err<E>;
|
|
21
|
-
*
|
|
22
|
-
* interface Ok<T> {
|
|
23
|
-
* readonly ok: true;
|
|
24
|
-
* readonly value: T;
|
|
25
|
-
* }
|
|
26
|
-
*
|
|
27
|
-
* interface Err<E> {
|
|
28
|
-
* readonly ok: false;
|
|
29
|
-
* readonly error: E;
|
|
30
|
-
* }
|
|
31
|
-
*
|
|
32
|
-
* const ok = <T>(value: T): Ok<T> => ({ ok: true, value });
|
|
33
|
-
* const err = <E>(error: E): Err<E> => ({ ok: false, error });
|
|
34
|
-
* ```
|
|
35
|
-
*
|
|
36
|
-
* Now let's look at how `Result` can be used for safe JSON parsing:
|
|
37
|
-
*
|
|
38
|
-
* ```ts
|
|
39
|
-
* interface ParseJsonError {
|
|
40
|
-
* readonly type: "ParseJsonError";
|
|
41
|
-
* readonly message: string;
|
|
42
|
-
* }
|
|
43
|
-
*
|
|
44
|
-
* const parseJson = (value: string): Result<unknown, ParseJsonError> => {
|
|
45
|
-
* try {
|
|
46
|
-
* return ok(JSON.parse(value));
|
|
47
|
-
* } catch (error) {
|
|
48
|
-
* return err({ type: "ParseJsonError", message: String(error) });
|
|
49
|
-
* }
|
|
50
|
-
* };
|
|
51
|
-
*
|
|
52
|
-
* // Result<unknown, ParseJsonError>
|
|
53
|
-
* const json = parseJson('{"key": "value"}');
|
|
54
|
-
*
|
|
55
|
-
* // Fail fast to handle errors early.
|
|
56
|
-
* if (!json.ok) return json; // Err<ParseJsonError>
|
|
57
|
-
*
|
|
58
|
-
* // Now, we have access to the json.value.
|
|
59
|
-
* expectTypeOf(json.value).toBeUnknown();
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* Note how we didn't have to use the try/catch, just `if (!json.ok)`, and how
|
|
63
|
-
* the error isn't unknown but has a type.
|
|
64
|
-
*
|
|
65
|
-
* But we had to use `try/catch` in the `parseJson` function. For such a case,
|
|
66
|
-
* wrapping unsafe code, Evolu provides the {@link trySync} helper:
|
|
67
|
-
*
|
|
68
|
-
* ```ts
|
|
69
|
-
* const parseJson = (value: string): Result<unknown, ParseJsonError> =>
|
|
70
|
-
* trySync(
|
|
71
|
-
* () => JSON.parse(value) as unknown,
|
|
72
|
-
* (error) => ({ type: "ParseJsonError", message: String(error) }),
|
|
73
|
-
* );
|
|
74
|
-
* ```
|
|
75
|
-
*
|
|
76
|
-
* ✨ {@link trySync} helper makes unsafe (can throw) synchronous code safe; for
|
|
77
|
-
* unsafe asynchronous code, use {@link tryAsync}.
|
|
78
|
-
*
|
|
79
|
-
* Let's summarize it:
|
|
80
|
-
*
|
|
81
|
-
* - For synchronous safe code, use `ok` and `err`.
|
|
82
|
-
* - For unsafe code, use `trySync` or `tryAsync`.
|
|
83
|
-
* - For asynchronous safe code, use `Promise` with {@link Result}.
|
|
84
|
-
*
|
|
85
|
-
* Asynchronous safe (because of a Promise using Result) code is
|
|
86
|
-
* straightforward:
|
|
87
|
-
*
|
|
88
|
-
* ```ts
|
|
89
|
-
* const fetchUser = async (
|
|
90
|
-
* userId: string,
|
|
91
|
-
* ): Promise<Result<User, FetchUserError>> => {
|
|
92
|
-
* // Simulate an API call
|
|
93
|
-
* return new Promise((resolve) => {
|
|
94
|
-
* setTimeout(() => {
|
|
95
|
-
* if (userId === "1") {
|
|
96
|
-
* resolve(ok({ id: "1", name: "Alice" }));
|
|
97
|
-
* } else {
|
|
98
|
-
* resolve(
|
|
99
|
-
* err({ type: "FetchUserError", reason: "user not found" }),
|
|
100
|
-
* );
|
|
101
|
-
* }
|
|
102
|
-
* }, 1000);
|
|
103
|
-
* });
|
|
104
|
-
* };
|
|
105
|
-
* ```
|
|
106
|
-
*
|
|
107
|
-
* ## Examples
|
|
108
|
-
*
|
|
109
|
-
* ### Sequential Operations with Short-Circuiting
|
|
110
|
-
*
|
|
111
|
-
* When performing a sequence of operations where any failure should stop
|
|
112
|
-
* further processing, use the `Result` type with early returns.
|
|
113
|
-
*
|
|
114
|
-
* Here's an example of a database reset operation that drops tables, restores a
|
|
115
|
-
* schema, and initializes the database, stopping on the first error:
|
|
116
|
-
*
|
|
117
|
-
* ```ts
|
|
118
|
-
* const resetResult = deps.sqlite.transaction(() => {
|
|
119
|
-
* const dropAllTablesResult = dropAllTables(deps);
|
|
120
|
-
* if (!dropAllTablesResult.ok) return dropAllTablesResult;
|
|
121
|
-
*
|
|
122
|
-
* if (message.restore) {
|
|
123
|
-
* const dbSchema = getDbSchema(deps)();
|
|
124
|
-
* if (!dbSchema.ok) return dbSchema;
|
|
125
|
-
*
|
|
126
|
-
* const ensureDbSchemaResult = ensureDbSchema(deps)(
|
|
127
|
-
* message.restore.dbSchema,
|
|
128
|
-
* dbSchema.value,
|
|
129
|
-
* );
|
|
130
|
-
* if (!ensureDbSchemaResult.ok) return ensureDbSchemaResult;
|
|
131
|
-
*
|
|
132
|
-
* const initializeDbResult = initializeDb(deps)(
|
|
133
|
-
* message.restore.mnemonic,
|
|
134
|
-
* );
|
|
135
|
-
* if (!initializeDbResult.ok) return initializeDbResult;
|
|
136
|
-
* }
|
|
137
|
-
* return ok();
|
|
138
|
-
* });
|
|
139
|
-
*
|
|
140
|
-
* if (!resetResult.ok) {
|
|
141
|
-
* deps.postMessage({ type: "onError", error: resetResult.error });
|
|
142
|
-
* return;
|
|
143
|
-
* }
|
|
144
|
-
* ```
|
|
145
|
-
*
|
|
146
|
-
* In this pattern:
|
|
147
|
-
*
|
|
148
|
-
* - Each operation returns a `Result` (e.g., `Result<void, E>` or `Result<T,
|
|
149
|
-
* E>`).
|
|
150
|
-
* - After each operation, check `if (!result.ok)` and return the `Err` to
|
|
151
|
-
* short-circuit.
|
|
152
|
-
* - If all operations succeed, return `ok()` (or another value if needed).
|
|
153
|
-
* - Outside the transaction, handle the final `Result` to report success or
|
|
154
|
-
* failure.
|
|
155
|
-
*
|
|
156
|
-
* This approach ensures type-safe error handling, avoids nested try/catch
|
|
157
|
-
* blocks, and clearly communicates the control flow.
|
|
158
|
-
*
|
|
159
|
-
* ### A function with two different errors:
|
|
160
|
-
*
|
|
161
|
-
* ```ts
|
|
162
|
-
* const example = (value: string): Result<number, FooError | BarError> => {
|
|
163
|
-
* const foo = getFoo(value);
|
|
164
|
-
* if (!foo.ok) return foo;
|
|
165
|
-
*
|
|
166
|
-
* const bar = barize(foo.value);
|
|
167
|
-
* if (!bar.ok) return bar;
|
|
168
|
-
*
|
|
169
|
-
* return ok(barToNumber(bar.value));
|
|
170
|
-
* };
|
|
171
|
-
* ```
|
|
172
|
-
*
|
|
173
|
-
* ## FAQ
|
|
174
|
-
*
|
|
175
|
-
* ### What if my function doesn't return a value on success?
|
|
176
|
-
*
|
|
177
|
-
* If your function performs an operation but doesn't need to return a value on
|
|
178
|
-
* success, you can use `Result<void, E>`. Using `Result<void, E>` is clearer
|
|
179
|
-
* than using `Result<true, E>` or `Result<null, E>` because it communicates
|
|
180
|
-
* that the function doesn't produce a value but can produce errors.
|
|
181
|
-
*
|
|
182
|
-
* ### How do I short-circuit processing of an array on the first error?
|
|
183
|
-
*
|
|
184
|
-
* If you want to stop processing as soon as an error occurs (short-circuit),
|
|
185
|
-
* you should produce and check each `Result` inside a loop:
|
|
186
|
-
*
|
|
187
|
-
* ```ts
|
|
188
|
-
* for (const query of [
|
|
189
|
-
* sql`drop table evolu_owner;`,
|
|
190
|
-
* sql`drop table evolu_message;`,
|
|
191
|
-
* ]) {
|
|
192
|
-
* const result = deps.sqlite.exec(query);
|
|
193
|
-
* if (!result.ok) return result;
|
|
194
|
-
* }
|
|
195
|
-
* // All queries succeeded
|
|
196
|
-
* ```
|
|
197
|
-
*
|
|
198
|
-
* ### How do I handle an array of operations and short-circuit on the first error?
|
|
199
|
-
*
|
|
200
|
-
* If you have an array of operations (not results), you should make them
|
|
201
|
-
* _lazy_—that is, represent each operation as a function (see `LazyValue` in
|
|
202
|
-
* `Function.ts`). This way, you only execute each operation as needed, and can
|
|
203
|
-
* stop on the first error:
|
|
204
|
-
*
|
|
205
|
-
* ```ts
|
|
206
|
-
* import type { LazyValue } from "./Function";
|
|
207
|
-
*
|
|
208
|
-
* const operations: LazyValue<Result<void, MyError>>[] = [
|
|
209
|
-
* () => doSomething(),
|
|
210
|
-
* () => doSomethingElse(),
|
|
211
|
-
* ];
|
|
212
|
-
*
|
|
213
|
-
* for (const op of operations) {
|
|
214
|
-
* const result = op();
|
|
215
|
-
* if (!result.ok) return result;
|
|
216
|
-
* }
|
|
217
|
-
* // All operations succeeded
|
|
218
|
-
* ```
|
|
219
|
-
*
|
|
220
|
-
* If you already have an array of `Result`s, the processing has already
|
|
221
|
-
* happened, so you can't short-circuit. In that case, you can check for the
|
|
222
|
-
* first error:
|
|
223
|
-
*
|
|
224
|
-
* ```ts
|
|
225
|
-
* const firstError = results.find((r) => !r.ok);
|
|
226
|
-
* if (firstError) return firstError;
|
|
227
|
-
* // All results are Ok
|
|
228
|
-
* ```
|
|
229
|
-
*
|
|
230
|
-
* ### Why doesn't Evolu provide "handy helpers"?
|
|
231
|
-
*
|
|
232
|
-
* Evolu intentionally favors imperative patterns (like the `for...of` loop
|
|
233
|
-
* above) over monadic helpers. Imperative code is generally more readable,
|
|
234
|
-
* easier to debug, and more familiar to most JavaScript and TypeScript
|
|
235
|
-
* developers. While monads and functional helpers can be powerful, they often
|
|
236
|
-
* obscure control flow and make debugging harder. Evolu's approach keeps error
|
|
237
|
-
* handling explicit and straightforward.
|
|
238
|
-
*
|
|
239
|
-
* @module
|
|
240
|
-
*/
|
|
241
1
|
export function ok(value = undefined) {
|
|
242
2
|
return { ok: true, value: value };
|
|
243
3
|
}
|
|
@@ -270,13 +30,15 @@ export const err = (error) => ({ ok: false, error });
|
|
|
270
30
|
* const config = getOrThrow(loadConfig());
|
|
271
31
|
* // Safe to use config here
|
|
272
32
|
* ```
|
|
33
|
+
*
|
|
34
|
+
* Throws: `Error` with the original error attached as `cause`.
|
|
273
35
|
*/
|
|
274
36
|
export const getOrThrow = (result) => {
|
|
275
37
|
if (result.ok) {
|
|
276
38
|
return result.value;
|
|
277
39
|
}
|
|
278
40
|
else {
|
|
279
|
-
throw new Error(
|
|
41
|
+
throw new Error("getOrThrow failed", { cause: result.error });
|
|
280
42
|
}
|
|
281
43
|
};
|
|
282
44
|
/**
|
package/dist/src/Sqlite.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { ConsoleDep } from "./Console.js";
|
|
|
2
2
|
import { TransferableError } from "./Error.js";
|
|
3
3
|
import { Result } from "./Result.js";
|
|
4
4
|
import { SimpleName } from "./Type.js";
|
|
5
|
-
import {
|
|
5
|
+
import { Predicate } from "./Types.js";
|
|
6
|
+
import { Brand } from "./Brand.js";
|
|
6
7
|
/**
|
|
7
8
|
* SQLite driver interface. This is the minimal interface that platform-specific
|
|
8
9
|
* drivers must implement.
|
package/dist/src/Sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAA2B,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAW,MAAM,EAAqB,MAAM,aAAa,CAAC;AACjE,OAAO,EAIL,UAAU,EAKX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Type.d.ts
CHANGED
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
*/
|
|
71
71
|
import { NanoIdLibDep } from "./NanoId.js";
|
|
72
72
|
import { Ok, Result } from "./Result.js";
|
|
73
|
-
import type {
|
|
73
|
+
import type { Literal, Simplify, WidenLiteral } from "./Types.js";
|
|
74
|
+
import type { Brand } from "./Brand.js";
|
|
74
75
|
export interface Type<Name extends TypeName,
|
|
75
76
|
/** The type this Type resolves to. */
|
|
76
77
|
T,
|