@evolu/common 7.4.0 → 8.0.0-next.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/README.md +4 -61
- package/dist/src/Array.d.ts +343 -102
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +181 -85
- package/dist/src/Assert.d.ts +57 -11
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +47 -11
- package/dist/src/BigInt.d.ts +6 -1
- package/dist/src/BigInt.d.ts.map +1 -1
- package/dist/src/BigInt.js +5 -0
- package/dist/src/Brand.d.ts +40 -12
- package/dist/src/Brand.d.ts.map +1 -1
- package/dist/src/Brand.js +5 -0
- package/dist/src/Buffer.d.ts +6 -1
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Buffer.js +7 -2
- package/dist/src/Cache.d.ts +10 -2
- package/dist/src/Cache.d.ts.map +1 -1
- package/dist/src/Cache.js +6 -0
- package/dist/src/Callbacks.d.ts +10 -7
- package/dist/src/Callbacks.d.ts.map +1 -1
- package/dist/src/Callbacks.js +23 -13
- package/dist/src/Console.d.ts +361 -69
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +217 -117
- package/dist/src/Crypto.d.ts +70 -21
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +72 -27
- package/dist/src/Eq.d.ts +22 -2
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +21 -1
- package/dist/src/Error.d.ts +23 -12
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Error.js +27 -11
- package/dist/src/Function.d.ts +128 -56
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +118 -14
- package/dist/src/Identicon.d.ts +5 -0
- package/dist/src/Identicon.d.ts.map +1 -1
- package/dist/src/Identicon.js +6 -1
- package/dist/src/Lookup.d.ts +160 -0
- package/dist/src/Lookup.d.ts.map +1 -0
- package/dist/src/Lookup.js +192 -0
- package/dist/src/Microtask.d.ts +21 -0
- package/dist/src/Microtask.d.ts.map +1 -0
- package/dist/src/Microtask.js +37 -0
- package/dist/src/Number.d.ts +18 -4
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +23 -1
- package/dist/src/Object.d.ts +110 -5
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +108 -5
- package/dist/src/Option.d.ts +58 -0
- package/dist/src/Option.d.ts.map +1 -0
- package/dist/src/Option.js +43 -0
- package/dist/src/Order.d.ts +5 -0
- package/dist/src/Order.d.ts.map +1 -1
- package/dist/src/Order.js +8 -3
- package/dist/src/Platform.d.ts +36 -2
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +10 -6
- package/dist/src/Polyfills.d.ts +27 -0
- package/dist/src/Polyfills.d.ts.map +1 -0
- package/dist/src/Polyfills.js +299 -0
- package/dist/src/Random.d.ts +18 -7
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +9 -7
- package/dist/src/Redacted.d.ts +7 -4
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +5 -0
- package/dist/src/Ref.d.ts +31 -16
- package/dist/src/Ref.d.ts.map +1 -1
- package/dist/src/Ref.js +35 -7
- package/dist/src/RefCount.d.ts +62 -0
- package/dist/src/RefCount.d.ts.map +1 -0
- package/dist/src/RefCount.js +83 -0
- package/dist/src/Relation.d.ts +84 -29
- package/dist/src/Relation.d.ts.map +1 -1
- package/dist/src/Relation.js +83 -105
- package/dist/src/Resource.d.ts +263 -0
- package/dist/src/Resource.d.ts.map +1 -0
- package/dist/src/Resource.js +389 -0
- package/dist/src/Result.d.ts +390 -374
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +142 -70
- package/dist/src/Schedule.d.ts +953 -0
- package/dist/src/Schedule.d.ts.map +1 -0
- package/dist/src/Schedule.js +1199 -0
- package/dist/src/Set.d.ts +181 -0
- package/dist/src/Set.d.ts.map +1 -0
- package/dist/src/Set.js +137 -0
- package/dist/src/Skiplist.d.ts +6 -1
- package/dist/src/Skiplist.d.ts.map +1 -1
- package/dist/src/Skiplist.js +5 -0
- package/dist/src/Sqlite.d.ts +160 -60
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +290 -190
- package/dist/src/Store.d.ts +36 -28
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Store.js +55 -15
- package/dist/src/String.d.ts +5 -0
- package/dist/src/String.d.ts.map +1 -1
- package/dist/src/String.js +5 -0
- package/dist/src/Task.d.ts +2263 -423
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +1488 -348
- package/dist/src/Test.d.ts +122 -0
- package/dist/src/Test.d.ts.map +1 -0
- package/dist/src/Test.js +66 -0
- package/dist/src/Time.d.ts +201 -48
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +190 -86
- package/dist/src/Tracer.d.ts +48 -0
- package/dist/src/Tracer.d.ts.map +1 -0
- package/dist/src/Tracer.js +6 -0
- package/dist/src/Type.d.ts +582 -209
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +362 -240
- package/dist/src/Types.d.ts +160 -6
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/Types.js +22 -2
- package/dist/src/WebSocket.d.ts +113 -58
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +210 -118
- package/dist/src/Worker.d.ts +245 -60
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +220 -64
- package/dist/src/index.d.ts +25 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -3
- package/dist/src/local-first/Db.d.ts +24 -213
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +622 -293
- package/dist/src/local-first/Error.d.ts +12 -0
- package/dist/src/local-first/Error.d.ts.map +1 -0
- package/dist/src/local-first/Error.js +6 -0
- package/dist/src/local-first/Evolu.d.ts +330 -285
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +472 -402
- package/dist/src/local-first/LocalAuth.d.ts +10 -10
- package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
- package/dist/src/local-first/LocalAuth.js +6 -1
- package/dist/src/local-first/Owner.d.ts +70 -27
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +27 -14
- package/dist/src/local-first/Protocol.d.ts +58 -50
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +253 -155
- package/dist/src/local-first/Query.d.ts +133 -43
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +139 -90
- package/dist/src/local-first/Relay.d.ts +18 -38
- package/dist/src/local-first/Relay.d.ts.map +1 -1
- package/dist/src/local-first/Relay.js +59 -171
- package/dist/src/local-first/Schema.d.ts +139 -144
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +78 -163
- package/dist/src/local-first/Shared.d.ts +125 -0
- package/dist/src/local-first/Shared.d.ts.map +1 -0
- package/dist/src/local-first/Shared.js +569 -0
- package/dist/src/local-first/Storage.d.ts +50 -53
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +121 -173
- package/dist/src/local-first/Timestamp.d.ts +28 -35
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +24 -25
- package/dist/src/local-first/index.d.ts +2 -15
- package/dist/src/local-first/index.d.ts.map +1 -1
- package/dist/src/local-first/index.js +2 -15
- package/package.json +36 -26
- package/src/Array.ts +467 -106
- package/src/Assert.ts +87 -12
- package/src/BigInt.ts +7 -1
- package/src/Brand.ts +41 -12
- package/src/Buffer.ts +10 -4
- package/src/Cache.ts +11 -2
- package/src/Callbacks.ts +33 -23
- package/src/Console.ts +567 -178
- package/src/Crypto.ts +111 -62
- package/src/Eq.ts +30 -3
- package/src/Error.ts +50 -34
- package/src/Function.ts +140 -68
- package/src/Identicon.ts +7 -1
- package/src/Lookup.ts +415 -0
- package/src/Microtask.ts +58 -0
- package/src/Number.ts +40 -7
- package/src/Object.ts +155 -16
- package/src/Option.ts +74 -0
- package/src/Order.ts +11 -3
- package/src/Platform.ts +43 -7
- package/src/Polyfills.ts +465 -0
- package/src/Random.ts +25 -11
- package/src/Redacted.ts +8 -4
- package/src/Ref.ts +72 -21
- package/src/RefCount.ts +170 -0
- package/src/Relation.ts +188 -136
- package/src/Resource.ts +864 -0
- package/src/Result.ts +548 -381
- package/src/Schedule.ts +1471 -0
- package/src/Set.ts +247 -0
- package/src/Skiplist.ts +7 -1
- package/src/Sqlite.ts +409 -304
- package/src/Store.ts +94 -48
- package/src/String.ts +6 -0
- package/src/Task.ts +3685 -740
- package/src/Test.ts +162 -0
- package/src/Time.ts +348 -145
- package/src/Tracer.ts +54 -0
- package/src/Type.ts +1064 -630
- package/src/Types.ts +202 -7
- package/src/WebSocket.ts +311 -178
- package/src/Worker.ts +527 -147
- package/src/index.ts +74 -3
- package/src/local-first/Db.ts +871 -597
- package/src/local-first/Error.ts +17 -0
- package/src/local-first/Evolu.ts +884 -823
- package/src/local-first/LocalAuth.ts +10 -10
- package/src/local-first/Owner.ts +94 -42
- package/src/local-first/Protocol.ts +440 -303
- package/src/local-first/Query.ts +243 -194
- package/src/local-first/Relay.ts +91 -252
- package/src/local-first/Schema.ts +284 -394
- package/src/local-first/Shared.ts +932 -0
- package/src/local-first/Storage.ts +209 -282
- package/src/local-first/Timestamp.ts +38 -45
- package/src/local-first/index.ts +2 -16
- package/LICENSE +0 -21
- package/dist/src/Instances.d.ts +0 -34
- package/dist/src/Instances.d.ts.map +0 -1
- package/dist/src/Instances.js +0 -44
- package/dist/src/Resources.d.ts +0 -118
- package/dist/src/Resources.d.ts.map +0 -1
- package/dist/src/Resources.js +0 -197
- package/dist/src/local-first/Platform.d.ts +0 -25
- package/dist/src/local-first/Platform.d.ts.map +0 -1
- package/dist/src/local-first/Platform.js +0 -1
- package/dist/src/local-first/Public.d.ts +0 -22
- package/dist/src/local-first/Public.d.ts.map +0 -1
- package/dist/src/local-first/Public.js +0 -15
- package/dist/src/local-first/PublicKysely.d.ts +0 -148
- package/dist/src/local-first/PublicKysely.d.ts.map +0 -1
- package/dist/src/local-first/PublicKysely.js +0 -184
- package/dist/src/local-first/Sync.d.ts +0 -112
- package/dist/src/local-first/Sync.d.ts.map +0 -1
- package/dist/src/local-first/Sync.js +0 -529
- package/src/Instances.ts +0 -90
- package/src/Resources.ts +0 -367
- package/src/local-first/Platform.ts +0 -27
- package/src/local-first/Public.ts +0 -42
- package/src/local-first/PublicKysely.ts +0 -239
- package/src/local-first/Sync.ts +0 -960
|
@@ -1,48 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database schema definition and validation.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
1
6
|
import * as Kysely from "kysely";
|
|
2
|
-
import { ReadonlyRecord } from "../Object.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { Simplify } from "../Types.js";
|
|
7
|
+
import { type ReadonlyRecord } from "../Object.js";
|
|
8
|
+
import { SqliteBoolean, type SqliteDep, type SqliteQueryOptions, type SqliteSchema, SqliteValue } from "../Sqlite.js";
|
|
9
|
+
import type { InferType } from "../Type.js";
|
|
10
|
+
import { type Id, IdBytes, type StandardSchemaV1 } from "../Type.js";
|
|
11
|
+
import type { Simplify } from "../Types.js";
|
|
7
12
|
import { OwnerId } from "./Owner.js";
|
|
8
|
-
import { Query, Row } from "./Query.js";
|
|
13
|
+
import type { Query, Row } from "./Query.js";
|
|
9
14
|
import type { DbChange } from "./Storage.js";
|
|
10
15
|
import { TimestampBytes } from "./Timestamp.js";
|
|
16
|
+
/** Any {@link StandardSchemaV1}. */
|
|
17
|
+
export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
11
18
|
/**
|
|
12
19
|
* Defines the schema of an Evolu database.
|
|
13
20
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
21
|
+
* Column types are Standard Schema v1 compatible — use Evolu Type, Zod,
|
|
22
|
+
* Valibot, ArkType, or any library that implements Standard Schema.
|
|
23
|
+
*
|
|
24
|
+
* Table schema defines columns that are required for table rows. For optional
|
|
25
|
+
* columns, use a schema whose output type includes `null`.
|
|
16
26
|
*
|
|
17
27
|
* ### Example
|
|
18
28
|
*
|
|
19
29
|
* ```ts
|
|
30
|
+
* // With Evolu Type
|
|
20
31
|
* const TodoId = id("Todo");
|
|
21
32
|
* type TodoId = typeof TodoId.Type;
|
|
22
33
|
*
|
|
23
|
-
* const TodoCategoryId = id("TodoCategory");
|
|
24
|
-
* type TodoCategoryId = typeof TodoCategoryId.Type;
|
|
25
|
-
*
|
|
26
|
-
* const NonEmptyString50 = maxLength(50)(NonEmptyString);
|
|
27
|
-
* type NonEmptyString50 = typeof NonEmptyString50.Type;
|
|
28
|
-
*
|
|
29
|
-
* // Database schema.
|
|
30
34
|
* const Schema = {
|
|
31
35
|
* todo: {
|
|
32
36
|
* id: TodoId,
|
|
33
|
-
* title:
|
|
34
|
-
* isCompleted:
|
|
35
|
-
* categoryId: nullable(TodoCategoryId),
|
|
37
|
+
* title: NonEmptyString100,
|
|
38
|
+
* isCompleted: nullOr(SqliteBoolean),
|
|
36
39
|
* },
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* };
|
|
41
|
+
*
|
|
42
|
+
* // With Zod (or any Standard Schema library)
|
|
43
|
+
* const Schema = {
|
|
44
|
+
* todo: {
|
|
45
|
+
* id: TodoId, // Evolu id() for branded IDs
|
|
46
|
+
* title: z.string().min(1).max(100),
|
|
47
|
+
* isCompleted: z.union([z.literal(0), z.literal(1)]).nullable(),
|
|
41
48
|
* },
|
|
42
49
|
* };
|
|
43
50
|
* ```
|
|
44
51
|
*/
|
|
45
|
-
export type EvoluSchema = ReadonlyRecord<string,
|
|
52
|
+
export type EvoluSchema = ReadonlyRecord<string, TableSchema>;
|
|
53
|
+
/** A table schema: column names mapped to Standard Schema validators. */
|
|
54
|
+
export type TableSchema = ReadonlyRecord<string, AnyStandardSchemaV1>;
|
|
55
|
+
export interface SqliteSchemaDep {
|
|
56
|
+
readonly sqliteSchema: SqliteSchema;
|
|
57
|
+
}
|
|
46
58
|
/**
|
|
47
59
|
* Validates an {@link EvoluSchema} at compile time, returning the first error
|
|
48
60
|
* found as a readable string literal type. This approach provides much clearer
|
|
@@ -52,22 +64,15 @@ export type EvoluSchema = ReadonlyRecord<string, ReadonlyRecord<string, Type<any
|
|
|
52
64
|
* Validates the following schema requirements:
|
|
53
65
|
*
|
|
54
66
|
* 1. All tables must have an 'id' column
|
|
55
|
-
* 2. The 'id' column
|
|
67
|
+
* 2. The 'id' column output type must extend {@link Id}
|
|
56
68
|
* 3. Tables cannot use system column names (createdAt, updatedAt, isDeleted)
|
|
57
|
-
* 4. All column types must be compatible with SQLite (extend SqliteValue)
|
|
69
|
+
* 4. All column output types must be compatible with SQLite (extend SqliteValue)
|
|
58
70
|
*/
|
|
59
71
|
export type ValidateSchema<S extends EvoluSchema> = ValidateSchemaHasId<S> extends never ? ValidateIdColumnType<S> extends never ? ValidateNoSystemColumns<S> extends never ? ValidateColumnTypes<S> extends never ? S : ValidateColumnTypes<S> : ValidateNoSystemColumns<S> : ValidateIdColumnType<S> : ValidateSchemaHasId<S>;
|
|
60
|
-
export type ValidateSchemaHasId<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? never : SchemaValidationError<`Table "${TableName & string}" is missing required id column.`> : never : never;
|
|
61
|
-
export type ValidateIdColumnType<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? S[TableName]["id"] extends TableId<any> ? never : SchemaValidationError<`Table "${TableName & string}" id column must be a branded ID type (created with id("${TableName & string}")).`> : never : never : never;
|
|
62
|
-
export type ValidateNoSystemColumns<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? ColumnName extends "createdAt" | "updatedAt" | "isDeleted" | "ownerId" ? SchemaValidationError<`Table "${TableName & string}" uses system column name "${ColumnName & string}". System columns (createdAt, updatedAt, isDeleted, ownerId) are added automatically.`> : never : never : never : never : never;
|
|
63
|
-
export type ValidateColumnTypes<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? InferType<S[TableName][ColumnName]> extends SqliteValue ? never : SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string, number, Uint8Array, or null).`> : never : never : never : never;
|
|
64
|
-
/** Schema validation error that shows clear, readable messages */
|
|
65
|
-
export type SchemaValidationError<Message extends string> = `❌ Schema Error: ${Message}`;
|
|
66
72
|
export type IndexesConfig = (create: (indexName: string) => Kysely.CreateIndexBuilder) => ReadonlyArray<Kysely.CreateIndexBuilder<any>>;
|
|
67
|
-
export declare const evoluSchemaToDbSchema: (schema: EvoluSchema, indexesConfig?: IndexesConfig) => DbSchema;
|
|
68
73
|
export type CreateQuery<S extends EvoluSchema> = <R extends Row>(queryCallback: (db: Pick<Kysely.Kysely<{
|
|
69
74
|
[Table in keyof S]: {
|
|
70
|
-
readonly [Column in keyof S[Table]]: Column extends "id" ?
|
|
75
|
+
readonly [Column in keyof S[Table]]: Column extends "id" ? StandardSchemaV1.InferOutput<S[Table][Column]> : StandardSchemaV1.InferOutput<S[Table][Column]> | null;
|
|
71
76
|
} & SystemColumns;
|
|
72
77
|
} & {
|
|
73
78
|
readonly evolu_history: {
|
|
@@ -84,30 +89,48 @@ export type CreateQuery<S extends EvoluSchema> = <R extends Row>(queryCallback:
|
|
|
84
89
|
readonly column: string;
|
|
85
90
|
readonly value: SqliteValue;
|
|
86
91
|
};
|
|
87
|
-
}>, "selectFrom" | "fn" | "with" | "withRecursive">) => Kysely.SelectQueryBuilder<any, any, R>, options?: SqliteQueryOptions) => Query<Simplify<R>>;
|
|
92
|
+
}>, "selectFrom" | "fn" | "with" | "withRecursive">) => Kysely.SelectQueryBuilder<any, any, R>, options?: SqliteQueryOptions) => Query<S, Simplify<R>>;
|
|
88
93
|
/**
|
|
89
94
|
* System columns that are implicitly defined by Evolu.
|
|
90
95
|
*
|
|
91
|
-
* - `createdAt`: Set by Evolu on row creation, derived from
|
|
92
|
-
* - `updatedAt`: Set by Evolu on every row change, derived from
|
|
96
|
+
* - `createdAt`: Set by Evolu on row creation, derived from Timestamp.
|
|
97
|
+
* - `updatedAt`: Set by Evolu on every row change, derived from Timestamp.
|
|
93
98
|
* - `isDeleted`: Soft delete flag created by Evolu and used by the developer to
|
|
94
99
|
* mark rows as deleted.
|
|
95
100
|
* - `ownerId`: Represents ownership and logically partitions the database.
|
|
96
101
|
*/
|
|
97
|
-
export declare const SystemColumns: ObjectType<{
|
|
98
|
-
createdAt: import("../Type.js").BrandType<Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
|
|
99
|
-
updatedAt: import("../Type.js").BrandType<Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
|
|
100
|
-
isDeleted: import("../Type.js").UnionType<[Type<"Null", null, null, import("../Type.js").NullError, null, import("../Type.js").NullError>, import("../Type.js").UnionType<[import("../Type.js").LiteralType<0>, import("../Type.js").LiteralType<1>]>]>;
|
|
101
|
-
ownerId: import("../Type.js").BrandType<import("../Type.js").BrandType<Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "Id", import("../Type.js").IdError, import("../Type.js").StringError>, "OwnerId", import("../Type.js").BrandWithoutRefineError<"OwnerId", import("../Type.js").StringError | import("../Type.js").IdError>, never>;
|
|
102
|
+
export declare const SystemColumns: import("../Type.js").ObjectType<{
|
|
103
|
+
createdAt: import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
|
|
104
|
+
updatedAt: import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "DateIso", import("../Type.js").DateIsoError, import("../Type.js").StringError>;
|
|
105
|
+
isDeleted: import("../Type.js").UnionType<[import("../Type.js").Type<"Null", null, null, import("../Type.js").NullError, null, import("../Type.js").NullError>, import("../Type.js").UnionType<[import("../Type.js").LiteralType<0>, import("../Type.js").LiteralType<1>]>]>;
|
|
106
|
+
ownerId: import("../Type.js").BrandType<import("../Type.js").BrandType<import("../Type.js").Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>, "Id", import("../Type.js").IdError, import("../Type.js").StringError>, "OwnerId", import("../Type.js").BrandWithoutRefineError<"OwnerId", import("../Type.js").StringError | import("../Type.js").IdError>, never>;
|
|
102
107
|
}>;
|
|
103
|
-
export
|
|
104
|
-
|
|
105
|
-
export declare const systemColumnsWithId: readonly string[];
|
|
108
|
+
export interface SystemColumns extends InferType<typeof SystemColumns> {
|
|
109
|
+
}
|
|
106
110
|
export type MutationKind = "insert" | "update" | "upsert";
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Mutation function type. Accepts already-validated values — validation is the
|
|
113
|
+
* caller's responsibility using any Standard Schema library (Evolu Type, Zod,
|
|
114
|
+
* Valibot, ArkType, etc.).
|
|
115
|
+
*
|
|
116
|
+
* Evolu does not use SQL for mutations to ensure data can be deterministically
|
|
117
|
+
* merged without conflicts. Explicit mutations also allow Evolu to
|
|
118
|
+
* automatically update {@link SystemColumns} and encourage developers to
|
|
119
|
+
* consider the number of changes produced, unlike SQL where a single query can
|
|
120
|
+
* inadvertently generate a large volume of CRDT messages. Each mutation
|
|
121
|
+
* produces exactly one {@link CrdtMessage} containing all provided columns.
|
|
122
|
+
*
|
|
123
|
+
* Mutations never fail — values are already validated by the caller, and
|
|
124
|
+
* changes are stored locally in SQLite.
|
|
125
|
+
*
|
|
126
|
+
* - **insert**: all non-nullable columns required, nullable columns optional,
|
|
127
|
+
* `id` omitted (auto-generated)
|
|
128
|
+
* - **update**: only `id` required, everything else optional
|
|
129
|
+
* - **upsert**: like insert but `id` required too
|
|
130
|
+
*/
|
|
131
|
+
export type Mutation<S extends EvoluSchema, Kind extends MutationKind> = <TableName extends keyof S>(table: TableName, values: MutationValues<S[TableName], Kind>, options?: MutationOptions) => {
|
|
132
|
+
readonly id: StandardSchemaV1.InferOutput<S[TableName]["id"]>;
|
|
133
|
+
};
|
|
111
134
|
export interface MutationOptions {
|
|
112
135
|
/**
|
|
113
136
|
* Called after the mutation is completed and the local state is updated.
|
|
@@ -145,120 +168,92 @@ export interface MutationOptions {
|
|
|
145
168
|
* { ownerId: sharedOwner.id },
|
|
146
169
|
* );
|
|
147
170
|
* ```
|
|
148
|
-
*
|
|
149
|
-
* @experimental
|
|
150
171
|
*/
|
|
151
172
|
readonly ownerId?: OwnerId;
|
|
152
|
-
/**
|
|
153
|
-
* Only validate, don't mutate.
|
|
154
|
-
*
|
|
155
|
-
* For example, `onChange` handler can call `insert`/`update`/`upsert` with
|
|
156
|
-
* `onlyValidate: true`.
|
|
157
|
-
*/
|
|
158
|
-
readonly onlyValidate?: boolean;
|
|
159
173
|
}
|
|
160
174
|
export interface MutationChange extends DbChange {
|
|
161
|
-
|
|
162
|
-
readonly ownerId?: OwnerId | undefined;
|
|
175
|
+
readonly ownerId: OwnerId;
|
|
163
176
|
}
|
|
164
177
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* {@link maxMutationSize}.
|
|
168
|
-
*
|
|
169
|
-
* ### Example
|
|
170
|
-
*
|
|
171
|
-
* ```ts
|
|
172
|
-
* const InsertableTodo = insertable(Schema.todo);
|
|
173
|
-
* type InsertableTodo = typeof InsertableTodo.Type;
|
|
174
|
-
* const todo = InsertableTodo.from({ title });
|
|
175
|
-
* if (!todo.ok) return; // handle errors
|
|
176
|
-
* ```
|
|
178
|
+
* Derives the expected values type for a mutation from a table's column schemas
|
|
179
|
+
* and a {@link MutationKind}.
|
|
177
180
|
*/
|
|
178
|
-
export
|
|
179
|
-
export type InsertableProps<Props extends Record<string, AnyType>> = Omit<NullableToOptionalProps<Props>, "id">;
|
|
180
|
-
export type Insertable<Props extends Record<string, AnyType>> = InferInput<ObjectType<InsertableProps<Props>>>;
|
|
181
|
+
export type MutationValues<T extends TableSchema, M extends MutationKind> = Simplify<M extends "insert" ? InsertValues<T> : M extends "update" ? UpdateValues<T> : UpsertValues<T>>;
|
|
181
182
|
/**
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
* const UpdateableTodo = updateable(Schema.todo);
|
|
190
|
-
* type UpdateableTodo = typeof UpdateableTodo.Type;
|
|
191
|
-
*
|
|
192
|
-
* // `id` is required; all other fields are optional.
|
|
193
|
-
* const todoResult = UpdateableTodo.from({
|
|
194
|
-
* id: "123",
|
|
195
|
-
* title: "New Title",
|
|
196
|
-
* });
|
|
197
|
-
* if (!todo.ok) return; // handle errors
|
|
198
|
-
* ```
|
|
183
|
+
* Insert values: `id` omitted (auto-generated), nullable columns optional,
|
|
184
|
+
* non-nullable columns required.
|
|
185
|
+
*/
|
|
186
|
+
export type InsertValues<T extends TableSchema> = Omit<NullableColumnsToOptional<T>, "id">;
|
|
187
|
+
/**
|
|
188
|
+
* Update values: `id` required, all other columns optional. Includes
|
|
189
|
+
* `isDeleted` for soft deletes.
|
|
199
190
|
*/
|
|
200
|
-
export
|
|
201
|
-
|
|
202
|
-
|
|
191
|
+
export type UpdateValues<T extends TableSchema> = {
|
|
192
|
+
readonly id: StandardSchemaV1.InferOutput<T["id"]>;
|
|
193
|
+
} & {
|
|
194
|
+
readonly [K in Exclude<keyof T, "id">]?: StandardSchemaV1.InferOutput<T[K]>;
|
|
203
195
|
} & {
|
|
204
|
-
isDeleted
|
|
196
|
+
readonly isDeleted?: SqliteBoolean;
|
|
205
197
|
};
|
|
206
|
-
export type Updateable<Props extends Record<string, AnyType>> = InferInput<ObjectType<UpdateableProps<Props>>>;
|
|
207
198
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
199
|
+
* Upsert values: `id` required, nullable columns optional, non-nullable columns
|
|
200
|
+
* required. Includes `isDeleted` for soft deletes.
|
|
201
|
+
*/
|
|
202
|
+
export type UpsertValues<T extends TableSchema> = NullableColumnsToOptional<T> & {
|
|
203
|
+
readonly isDeleted?: SqliteBoolean;
|
|
204
|
+
};
|
|
205
|
+
export type ValidateSchemaHasId<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? never : SchemaValidationError<`Table "${TableName & string}" is missing required id column.`> : never : never;
|
|
206
|
+
export type ValidateIdColumnType<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName]["id"]> extends Id ? never : SchemaValidationError<`Table "${TableName & string}" id column output type must extend Id. Use id("${TableName & string}") from Evolu Type.`> : never : never : never;
|
|
207
|
+
export type ValidateNoSystemColumns<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? ColumnName extends "createdAt" | "updatedAt" | "isDeleted" | "ownerId" ? SchemaValidationError<`Table "${TableName & string}" uses system column name "${ColumnName & string}". System columns (createdAt, updatedAt, isDeleted, ownerId) are added automatically.`> : never : never : never : never : never;
|
|
208
|
+
export type ValidateColumnTypes<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName][ColumnName]> extends SqliteValue ? never : SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string, number, Uint8Array, or null).`> : never : never : never : never;
|
|
209
|
+
/** Schema validation error that shows clear, readable messages */
|
|
210
|
+
export type SchemaValidationError<Message extends string> = `❌ Schema Error: ${Message}`;
|
|
211
|
+
/** Makes columns whose output type includes `null` optional. */
|
|
212
|
+
export type NullableColumnsToOptional<T extends TableSchema> = {
|
|
213
|
+
readonly [K in RequiredColumnKeys<T>]: StandardSchemaV1.InferOutput<T[K]>;
|
|
214
|
+
} & {
|
|
215
|
+
readonly [K in OptionalColumnKeys<T>]?: StandardSchemaV1.InferOutput<T[K]>;
|
|
216
|
+
};
|
|
217
|
+
export type RequiredColumnKeys<T extends TableSchema> = {
|
|
218
|
+
[K in keyof T]: null extends StandardSchemaV1.InferOutput<T[K]> ? never : K;
|
|
219
|
+
}[keyof T];
|
|
220
|
+
export type OptionalColumnKeys<T extends TableSchema> = {
|
|
221
|
+
[K in keyof T]: null extends StandardSchemaV1.InferOutput<T[K]> ? K : never;
|
|
222
|
+
}[keyof T];
|
|
223
|
+
export declare const systemColumns: ReadonlySet<string>;
|
|
224
|
+
export declare const systemColumnsWithId: ReadonlyArray<string>;
|
|
225
|
+
export declare const evoluSchemaToSqliteSchema: <S extends EvoluSchema>(schema: ValidateSchema<S> extends never ? S : ValidateSchema<S>, indexesConfig?: IndexesConfig) => SqliteSchema;
|
|
226
|
+
/**
|
|
227
|
+
* Creates a query builder from a {@link EvoluSchema}.
|
|
213
228
|
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
229
|
+
* Supports Kysely relation-style query composition (nested objects/arrays via
|
|
230
|
+
* JSON subqueries), such as {@link evoluJsonObjectFrom} and
|
|
231
|
+
* {@link evoluJsonArrayFrom}. These helpers are Evolu's safer SQLite variants of
|
|
232
|
+
* the
|
|
233
|
+
* {@link https://kysely.dev/docs/recipes/relations | Kysely relations recipe}.
|
|
217
234
|
*
|
|
218
235
|
* ### Example
|
|
219
236
|
*
|
|
220
237
|
* ```ts
|
|
221
|
-
* const
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
238
|
+
* const Schema = {
|
|
239
|
+
* todo: {
|
|
240
|
+
* id: id("Todo"),
|
|
241
|
+
* title: NonEmptyString100,
|
|
242
|
+
* isCompleted: nullOr(SqliteBoolean),
|
|
243
|
+
* },
|
|
244
|
+
* };
|
|
245
|
+
*
|
|
246
|
+
* // Create a typed query builder (once per schema)
|
|
247
|
+
* const createQuery = createQueryBuilder(Schema);
|
|
248
|
+
*
|
|
249
|
+
* // Use it for all queries
|
|
250
|
+
* const todosQuery = createQuery((db) =>
|
|
251
|
+
* db.selectFrom("todo").select(["id", "title", "isCompleted"]),
|
|
252
|
+
* );
|
|
228
253
|
* ```
|
|
229
254
|
*/
|
|
230
|
-
export declare const
|
|
231
|
-
export
|
|
232
|
-
|
|
233
|
-
}>;
|
|
234
|
-
export type Upsertable<Props extends Record<string, AnyType>> = InferInput<ObjectType<UpsertableProps<Props>>>;
|
|
235
|
-
export type InferEvoluSchemaError<S extends EvoluSchema> = {
|
|
236
|
-
[Table in keyof S]: InferMutationTypeErrors<S[Table]>;
|
|
237
|
-
}[keyof S];
|
|
238
|
-
export type InferMutationTypeErrors<T extends Record<string, AnyType>> = InferColumnErrors<T, "insert"> | InferColumnErrors<T, "update"> | InferColumnErrors<T, "upsert">;
|
|
239
|
-
export type InferColumnErrors<T extends Record<string, AnyType>, M extends MutationKind> = {
|
|
240
|
-
[Column in keyof MutationMapping<T, M>]: InferErrors<MutationMapping<T, M>[Column]>;
|
|
241
|
-
}[keyof MutationMapping<T, M>];
|
|
242
|
-
export declare const DbIndex: ObjectType<{
|
|
243
|
-
name: Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>;
|
|
244
|
-
sql: Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>;
|
|
245
|
-
}>;
|
|
246
|
-
export type DbIndex = typeof DbIndex.Type;
|
|
247
|
-
export declare const DbSchema: ObjectType<{
|
|
248
|
-
tables: import("../Type.js").RecordType<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError, import("../Type.js").SetType<Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>>>;
|
|
249
|
-
indexes: import("../Type.js").ArrayType<ObjectType<{
|
|
250
|
-
name: Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>;
|
|
251
|
-
sql: Type<"String", string, string, import("../Type.js").StringError, string, import("../Type.js").StringError>;
|
|
252
|
-
}>>;
|
|
253
|
-
}>;
|
|
254
|
-
export type DbSchema = typeof DbSchema.Type;
|
|
255
|
-
export interface DbSchemaDep {
|
|
256
|
-
readonly dbSchema: DbSchema;
|
|
257
|
-
}
|
|
258
|
-
/** Get the current database schema by reading SQLite metadata. */
|
|
259
|
-
export declare const getDbSchema: (deps: SqliteDep) => ({ allIndexes }?: {
|
|
260
|
-
allIndexes?: boolean;
|
|
261
|
-
}) => Result<DbSchema, SqliteError>;
|
|
262
|
-
export declare const ensureDbSchema: (deps: SqliteDep) => (newSchema: DbSchema, currentSchema?: DbSchema) => Result<void, SqliteError>;
|
|
255
|
+
export declare const createQueryBuilder: <S extends EvoluSchema>(_schema: S) => CreateQuery<S>;
|
|
256
|
+
export declare const ensureSqliteSchema: (deps: SqliteDep) => (newSchema: SqliteSchema, currentSchema?: SqliteSchema) => void;
|
|
257
|
+
export declare const getEvoluSqliteSchema: (deps: SqliteDep) => () => SqliteSchema;
|
|
263
258
|
export declare const kysely: Kysely.Kysely<unknown>;
|
|
264
259
|
//# sourceMappingURL=Schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"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"}
|