@evolu/common 2.2.4 → 3.0.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/Db.d.ts +61 -2
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +44 -2
- package/dist/src/ErrorStore.d.ts +3 -0
- package/dist/src/ErrorStore.d.ts.map +1 -1
- package/dist/src/Evolu.d.ts +2 -7
- package/dist/src/Evolu.d.ts.map +1 -1
- package/dist/src/Public.d.ts +1 -0
- package/dist/src/Public.d.ts.map +1 -1
- package/dist/src/Public.js +1 -0
- package/package.json +3 -3
- package/src/Db.ts +96 -7
- package/src/ErrorStore.ts +4 -0
- package/src/Evolu.ts +9 -15
- package/src/Public.ts +1 -0
package/dist/src/Db.d.ts
CHANGED
|
@@ -1,15 +1,74 @@
|
|
|
1
1
|
import * as S from "@effect/schema/Schema";
|
|
2
|
-
import { Brand, Context, Effect, Layer, ReadonlyArray, ReadonlyRecord } from "effect";
|
|
2
|
+
import { Brand, Context, Effect, Layer, ReadonlyArray, ReadonlyRecord, Types } from "effect";
|
|
3
3
|
import * as Kysely from "kysely";
|
|
4
4
|
import { Bip39, Mnemonic, NanoId } from "./Crypto.js";
|
|
5
5
|
import { Id } from "./Model.js";
|
|
6
6
|
import { Owner } from "./Owner.js";
|
|
7
7
|
import { Sqlite, SqliteQuery, Value } from "./Sqlite.js";
|
|
8
8
|
import { Store } from "./Store.js";
|
|
9
|
+
import { EvoluTypeError } from "./ErrorStore.js";
|
|
9
10
|
export type DatabaseSchema = ReadonlyRecord.ReadonlyRecord<TableSchema>;
|
|
10
|
-
|
|
11
|
+
type TableSchema = ReadonlyRecord.ReadonlyRecord<Value> & {
|
|
11
12
|
readonly id: Id;
|
|
12
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* Create table schema.
|
|
16
|
+
*
|
|
17
|
+
* Supported types are null, string, number, Uint8Array, JSON Object, and JSON
|
|
18
|
+
* Array. Use SqliteDate for dates and SqliteBoolean for booleans.
|
|
19
|
+
*
|
|
20
|
+
* Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added
|
|
21
|
+
* by default.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const TodoId = id("Todo");
|
|
25
|
+
* type TodoId = S.Schema.To<typeof TodoId>;
|
|
26
|
+
*
|
|
27
|
+
* const TodoTable = table({
|
|
28
|
+
* id: TodoId,
|
|
29
|
+
* title: NonEmptyString1000,
|
|
30
|
+
* isCompleted: S.nullable(SqliteBoolean),
|
|
31
|
+
* });
|
|
32
|
+
* type TodoTable = S.Schema.To<typeof TodoTable>;
|
|
33
|
+
*/
|
|
34
|
+
export declare const table: <Fields extends TableFields>(fields: Fields) => ValidateFieldsTypes<Fields> extends true ? ValidateFieldsNames<Fields> extends true ? ValidateFieldsHasId<Fields> extends true ? S.Schema<Types.Simplify<{ readonly [K in Exclude<keyof Fields, S.FromOptionalKeys<Fields>>]: S.Schema.From<Fields[K]>; } & { readonly [K_1 in S.FromOptionalKeys<Fields>]?: S.Schema.From<Fields[K_1]>; } & {
|
|
35
|
+
readonly createdAt: string;
|
|
36
|
+
readonly updatedAt: string;
|
|
37
|
+
readonly isDeleted: number;
|
|
38
|
+
}>, Types.Simplify<{ readonly [K_2 in Exclude<keyof Fields, S.ToOptionalKeys<Fields>>]: S.Schema.To<Fields[K_2]>; } & { readonly [K_3 in S.ToOptionalKeys<Fields>]?: S.Schema.To<Fields[K_3]>; } & {
|
|
39
|
+
readonly createdAt: string & Brand.Brand<"SqliteDate">;
|
|
40
|
+
readonly updatedAt: string & Brand.Brand<"SqliteDate">;
|
|
41
|
+
readonly isDeleted: number & Brand.Brand<"SqliteBoolean">;
|
|
42
|
+
}>> : EvoluTypeError<"table() called without id column."> : EvoluTypeError<"table() called with a reserved column. Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added by default."> : EvoluTypeError<"table() called with unsupported type. Supported types are null, string, number, Uint8Array, JSON Object, and JSON Array. Use SqliteDate for dates and SqliteBoolean for booleans.">;
|
|
43
|
+
declare const ReservedColumns: S.Schema<{
|
|
44
|
+
readonly createdAt: string;
|
|
45
|
+
readonly updatedAt: string;
|
|
46
|
+
readonly isDeleted: number;
|
|
47
|
+
}, {
|
|
48
|
+
readonly createdAt: string & Brand.Brand<"SqliteDate">;
|
|
49
|
+
readonly updatedAt: string & Brand.Brand<"SqliteDate">;
|
|
50
|
+
readonly isDeleted: number & Brand.Brand<"SqliteBoolean">;
|
|
51
|
+
}>;
|
|
52
|
+
type TableFields = Record<string, S.Schema<any, any>>;
|
|
53
|
+
type ValidateFieldsTypes<Fields extends TableFields> = keyof Fields extends infer K ? K extends keyof Fields ? Fields[K] extends TableFields ? ValidateFieldsTypes<Fields[K]> : Fields[K] extends S.Schema<infer _I, infer A> ? A extends Value ? true : false : never : never : never;
|
|
54
|
+
type ValidateFieldsNames<Fields extends TableFields> = keyof Fields extends infer K ? K extends keyof Fields ? K extends "createdAt" | "updatedAt" | "isDeleted" ? false : true : never : never;
|
|
55
|
+
type ValidateFieldsHasId<Fields extends TableFields> = "id" extends keyof Fields ? true : false;
|
|
56
|
+
/**
|
|
57
|
+
* Create database schema.
|
|
58
|
+
*
|
|
59
|
+
* Tables with a name prefixed with _ are local-only, which means they are not
|
|
60
|
+
* synced. Local-only tables are useful for device-specific or temporal data.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const Database = database({
|
|
64
|
+
* // A local-only table.
|
|
65
|
+
* _todo: TodoTable,
|
|
66
|
+
* todo: TodoTable,
|
|
67
|
+
* todoCategory: TodoCategoryTable,
|
|
68
|
+
* });
|
|
69
|
+
* type Database = S.Schema.To<typeof Database>;
|
|
70
|
+
*/
|
|
71
|
+
export declare const database: <Fields extends S.StructFields>(fields: Fields) => S.Schema<Types.Simplify<S.FromStruct<Fields>>, Types.Simplify<S.ToStruct<Fields>>>;
|
|
13
72
|
declare const __queryBrand: unique symbol;
|
|
14
73
|
/**
|
|
15
74
|
* The query is an SQL query serialized as a string with a branded type
|
package/dist/src/Db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAG3C,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EAEN,KAAK,EAGL,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Db.js
CHANGED
|
@@ -4,10 +4,53 @@ import { make } from "@effect/schema/Schema";
|
|
|
4
4
|
import { bytesToHex } from "@noble/ciphers/utils";
|
|
5
5
|
import { Context, Effect, Exit, Layer, Option, Predicate, ReadonlyArray, ReadonlyRecord, String, pipe, } from "effect";
|
|
6
6
|
import { initialMerkleTree, makeInitialTimestamp, merkleTreeToString, timestampToString, } from "./Crdt.js";
|
|
7
|
+
import { SqliteBoolean, SqliteDate } from "./Model.js";
|
|
7
8
|
import { makeOwner } from "./Owner.js";
|
|
8
9
|
import { createMessageTable, createMessageTableIndex, createOwnerTable, insertOwner, } from "./Sql.js";
|
|
9
10
|
import { Sqlite, isJsonObjectOrArray, } from "./Sqlite.js";
|
|
10
11
|
import { makeStore } from "./Store.js";
|
|
12
|
+
/**
|
|
13
|
+
* Create table schema.
|
|
14
|
+
*
|
|
15
|
+
* Supported types are null, string, number, Uint8Array, JSON Object, and JSON
|
|
16
|
+
* Array. Use SqliteDate for dates and SqliteBoolean for booleans.
|
|
17
|
+
*
|
|
18
|
+
* Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added
|
|
19
|
+
* by default.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const TodoId = id("Todo");
|
|
23
|
+
* type TodoId = S.Schema.To<typeof TodoId>;
|
|
24
|
+
*
|
|
25
|
+
* const TodoTable = table({
|
|
26
|
+
* id: TodoId,
|
|
27
|
+
* title: NonEmptyString1000,
|
|
28
|
+
* isCompleted: S.nullable(SqliteBoolean),
|
|
29
|
+
* });
|
|
30
|
+
* type TodoTable = S.Schema.To<typeof TodoTable>;
|
|
31
|
+
*/
|
|
32
|
+
export const table = (fields) => S.struct(fields).pipe(S.extend(ReservedColumns));
|
|
33
|
+
const ReservedColumns = S.struct({
|
|
34
|
+
createdAt: SqliteDate,
|
|
35
|
+
updatedAt: SqliteDate,
|
|
36
|
+
isDeleted: SqliteBoolean,
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Create database schema.
|
|
40
|
+
*
|
|
41
|
+
* Tables with a name prefixed with _ are local-only, which means they are not
|
|
42
|
+
* synced. Local-only tables are useful for device-specific or temporal data.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const Database = database({
|
|
46
|
+
* // A local-only table.
|
|
47
|
+
* _todo: TodoTable,
|
|
48
|
+
* todo: TodoTable,
|
|
49
|
+
* todoCategory: TodoCategoryTable,
|
|
50
|
+
* });
|
|
51
|
+
* type Database = S.Schema.To<typeof Database>;
|
|
52
|
+
*/
|
|
53
|
+
export const database = S.struct;
|
|
11
54
|
// We use queries as keys, hence JSON.stringify.
|
|
12
55
|
export const serializeQuery = ({ sql, parameters, }) => {
|
|
13
56
|
const query = {
|
|
@@ -55,10 +98,9 @@ const getPropertySignatures = (schema) => {
|
|
|
55
98
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
56
99
|
return out;
|
|
57
100
|
};
|
|
58
|
-
const commonColumns = ["createdAt", "updatedAt", "isDeleted"];
|
|
59
101
|
export const schemaToTables = (schema) => pipe(getPropertySignatures(schema), ReadonlyRecord.toEntries, ReadonlyArray.map(([name, schema]) => ({
|
|
60
102
|
name,
|
|
61
|
-
columns: Object.keys(getPropertySignatures(schema))
|
|
103
|
+
columns: Object.keys(getPropertySignatures(schema)),
|
|
62
104
|
})));
|
|
63
105
|
export const transaction = (effect) => Effect.flatMap(Sqlite, (sqlite) => Effect.acquireUseRelease(sqlite.exec("BEGIN"), () => effect, (_, exit) => Exit.isFailure(exit) ? sqlite.exec("ROLLBACK") : sqlite.exec("END")));
|
|
64
106
|
export const SqliteNoSuchTableOrColumnError = S.struct({
|
package/dist/src/ErrorStore.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorStore.d.ts","sourceRoot":"","sources":["../../src/ErrorStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,eAAO,MAAM,cAAc,4EAAqC,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,eAAO,MAAM,mBAAmB,UACvB,OAAO,KACb,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAU7C,CAAC;AAEF;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC"}
|
|
1
|
+
{"version":3,"file":"ErrorStore.d.ts","sourceRoot":"","sources":["../../src/ErrorStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,eAAO,MAAM,cAAc,4EAAqC,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,eAAO,MAAM,mBAAmB,UACvB,OAAO,KACb,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAU7C,CAAC;AAEF;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;CAChC"}
|
package/dist/src/Evolu.d.ts
CHANGED
|
@@ -238,16 +238,11 @@ type QueryCallback<S extends DatabaseSchema, R extends Row> = (db: Pick<Kysely.K
|
|
|
238
238
|
type QuerySchema<S extends DatabaseSchema> = {
|
|
239
239
|
readonly [Table in keyof S]: NullableExceptId<{
|
|
240
240
|
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
241
|
-
}
|
|
241
|
+
}>;
|
|
242
242
|
};
|
|
243
243
|
type NullableExceptId<T> = {
|
|
244
244
|
readonly [K in keyof T]: K extends "id" ? T[K] : T[K] | null;
|
|
245
245
|
};
|
|
246
|
-
export interface CommonColumns {
|
|
247
|
-
readonly createdAt: SqliteDate;
|
|
248
|
-
readonly updatedAt: SqliteDate;
|
|
249
|
-
readonly isDeleted: SqliteBoolean;
|
|
250
|
-
}
|
|
251
246
|
export declare const makeCreateQuery: <S extends DatabaseSchema = DatabaseSchema>() => CreateQuery<S>;
|
|
252
247
|
export interface LoadingPromises {
|
|
253
248
|
readonly get: <R extends Row>(query: Query<R>) => {
|
|
@@ -279,7 +274,7 @@ export declare const SubscribedQueries: Context.Tag<SubscribedQueries, Subscribe
|
|
|
279
274
|
export declare const SubscribedQueriesLive: Layer.Layer<RowsStore, never, SubscribedQueries>;
|
|
280
275
|
export type Create<S extends DatabaseSchema = DatabaseSchema> = Mutate<S, "create">;
|
|
281
276
|
export type Update<S extends DatabaseSchema = DatabaseSchema> = Mutate<S, "update">;
|
|
282
|
-
export type Mutate<S extends DatabaseSchema = DatabaseSchema, Mode extends "create" | "update" = "update"> = <K extends keyof S>(table: K, values: Kysely.Simplify<Mode extends "create" ? PartialForNullable<Castable<Omit<S[K], "id">>> : Partial<Castable<Omit<S[K], "id"
|
|
277
|
+
export type Mutate<S extends DatabaseSchema = DatabaseSchema, Mode extends "create" | "update" = "update"> = <K extends keyof S>(table: K, values: Kysely.Simplify<Mode extends "create" ? PartialForNullable<Castable<Omit<S[K], "id" | "createdAt" | "updatedAt" | "isDeleted">>> : Partial<Castable<Omit<S[K], "id" | "createdAt" | "updatedAt">>> & {
|
|
283
278
|
readonly id: S[K]["id"];
|
|
284
279
|
}>, onComplete?: () => void) => {
|
|
285
280
|
readonly id: S[K]["id"];
|
package/dist/src/Evolu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,OAAO,EAIP,KAAK,EAKN,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,OAAO,EACP,KAAK,EACL,WAAW,EACX,+BAA+B,EAC/B,GAAG,EACH,SAAS,EAET,cAAc,EAKf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAmC,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,KAAK,EAA0B,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAC9D;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAExD;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EACxD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KACZ,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAE7D;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;IAE1D;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAEnD;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;IAE3D;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;IAEpD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAElB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEhC,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAEpD;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,EACxC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,KACvB,IAAI,CAAC;IAEV;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,KAAK,2DAAuB,CAAC;AAE1C,KAAK,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,CAAC,SAAS,GAAG,EACzD,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAC/B,KAAK,CAAC,CAAC,CAAC,CAAC;AAEd,KAAK,aAAa,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,GAAG,IAAI,CAC5D,EAAE,EAAE,IAAI,CACN,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC3B,YAAY,GAGZ,IAAI,CACP,KACE,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAE5C,KAAK,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI;IAC3C,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,GAAG,gBAAgB,CAAC;QAC5C,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;KACtD,CAAC;CACH,CAAC;AAEF,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;CAC7D,CAAC;AAcF,eAAO,MAAM,eAAe,iEAUvB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,GAAG,EAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KACZ;QACH,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;KACzB,CAAC;IAEF,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,GAAG,EAC9B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KACnB,IAAI,CAAC;IAEV;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,eAAe,+CAAiC,CAAC;AAE9D,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;IACpE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,kBAAkB,wDAwD9B,CAAC;AAYF,KAAK,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E,QAAA,MAAM,SAAS,mCAA2B,CAAC;AAsE3C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,OAAO,CAAC;CAC9C;AAED,eAAO,MAAM,iBAAiB,mDAAmC,CAAC;AAElE,eAAO,MAAM,qBAAqB,kDAkCjC,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,MAAM,CACpE,CAAC,EACD,QAAQ,CACT,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,MAAM,CACpE,CAAC,EACD,QAAQ,CACT,CAAC;AAEF,MAAM,MAAM,MAAM,CAChB,CAAC,SAAS,cAAc,GAAG,cAAc,EACzC,IAAI,SAAS,QAAQ,GAAG,QAAQ,GAAG,QAAQ,IACzC,CAAC,CAAC,SAAS,MAAM,CAAC,EACpB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,MAAM,CAAC,QAAQ,CACrB,IAAI,SAAS,QAAQ,GACjB,kBAAkB,CAChB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CACrE,GACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG;IAChE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACzB,CACN,EACD,UAAU,CAAC,EAAE,MAAM,IAAI,KACpB;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,MAAM,iFAAwB,CAAC;AAG5C,KAAK,kBAAkB,CACrB,CAAC,EACD,EAAE,SAAS,MAAM,CAAC,GAAG;KAClB,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAC9C,CAAC,MAAM,CAAC,CAAC,EACV,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IACvD;KAAG,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAAE,CAAC;AAE/B;;;;;;GAMG;AACH,KAAK,QAAQ,CAAC,CAAC,IAAI;IACjB,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAC/C,OAAO,GAAG,aAAa,GACvB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,aAAa,GAC/B,IAAI,GAAG,OAAO,GAAG,aAAa,GAC9B,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,GACrB,IAAI,GAAG,UAAU,GACjB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,UAAU,GAC5B,IAAI,GAAG,IAAI,GAAG,UAAU,GACxB,CAAC,CAAC,CAAC,CAAC;CACf,CAAC;AA+IF,kEAAkE;AAClE,eAAO,MAAM,eAAe,qFAE3B,CAAC;AAEF,eAAO,MAAM,eAAe,cACd,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,4EAGlC,QAAQ,MAAM,CAAC,cAYzB,CAAC"}
|
package/dist/src/Public.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type { Timestamp, TimestampError } from "./Crdt.js";
|
|
|
3
3
|
export type { Mnemonic, InvalidMnemonicError } from "./Crypto.js";
|
|
4
4
|
export type { EvoluError, UnexpectedError } from "./ErrorStore.js";
|
|
5
5
|
export * from "./Model.js";
|
|
6
|
+
export { table, database } from "./Db.js";
|
|
6
7
|
export type { Owner, OwnerId } from "./Owner.js";
|
|
7
8
|
export { canUseDom } from "./Platform.js";
|
|
8
9
|
export type { SyncState } from "./SyncWorker.js";
|
package/dist/src/Public.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Public.d.ts","sourceRoot":"","sources":["../../src/Public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"Public.d.ts","sourceRoot":"","sources":["../../src/Public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/src/Public.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Local-first platform designed for privacy, ease of use, and no vendor lock-in to sync and backup people's lifetime data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"evolu",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"README.md"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@noble/ciphers": "^0.4.
|
|
48
|
-
"@noble/hashes": "^1.3.
|
|
47
|
+
"@noble/ciphers": "^0.4.1",
|
|
48
|
+
"@noble/hashes": "^1.3.3",
|
|
49
49
|
"@protobuf-ts/runtime": "^2.9.3",
|
|
50
50
|
"@scure/bip39": "^1.2.1",
|
|
51
51
|
"kysely": "^0.26.3",
|
package/src/Db.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
ReadonlyArray,
|
|
14
14
|
ReadonlyRecord,
|
|
15
15
|
String,
|
|
16
|
+
Types,
|
|
16
17
|
pipe,
|
|
17
18
|
} from "effect";
|
|
18
19
|
import * as Kysely from "kysely";
|
|
@@ -23,7 +24,7 @@ import {
|
|
|
23
24
|
timestampToString,
|
|
24
25
|
} from "./Crdt.js";
|
|
25
26
|
import { Bip39, Mnemonic, NanoId } from "./Crypto.js";
|
|
26
|
-
import { Id } from "./Model.js";
|
|
27
|
+
import { Id, SqliteBoolean, SqliteDate } from "./Model.js";
|
|
27
28
|
import { Owner, makeOwner } from "./Owner.js";
|
|
28
29
|
import {
|
|
29
30
|
createMessageTable,
|
|
@@ -39,13 +40,105 @@ import {
|
|
|
39
40
|
isJsonObjectOrArray,
|
|
40
41
|
} from "./Sqlite.js";
|
|
41
42
|
import { Store, makeStore } from "./Store.js";
|
|
43
|
+
import { EvoluTypeError } from "./ErrorStore.js";
|
|
42
44
|
|
|
43
45
|
export type DatabaseSchema = ReadonlyRecord.ReadonlyRecord<TableSchema>;
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
type TableSchema = ReadonlyRecord.ReadonlyRecord<Value> & {
|
|
46
48
|
readonly id: Id;
|
|
47
49
|
};
|
|
48
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Create table schema.
|
|
53
|
+
*
|
|
54
|
+
* Supported types are null, string, number, Uint8Array, JSON Object, and JSON
|
|
55
|
+
* Array. Use SqliteDate for dates and SqliteBoolean for booleans.
|
|
56
|
+
*
|
|
57
|
+
* Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added
|
|
58
|
+
* by default.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const TodoId = id("Todo");
|
|
62
|
+
* type TodoId = S.Schema.To<typeof TodoId>;
|
|
63
|
+
*
|
|
64
|
+
* const TodoTable = table({
|
|
65
|
+
* id: TodoId,
|
|
66
|
+
* title: NonEmptyString1000,
|
|
67
|
+
* isCompleted: S.nullable(SqliteBoolean),
|
|
68
|
+
* });
|
|
69
|
+
* type TodoTable = S.Schema.To<typeof TodoTable>;
|
|
70
|
+
*/
|
|
71
|
+
export const table = <Fields extends TableFields>(
|
|
72
|
+
fields: Fields,
|
|
73
|
+
// Because Schema is invariant, we have to do validation like this.
|
|
74
|
+
): ValidateFieldsTypes<Fields> extends true
|
|
75
|
+
? ValidateFieldsNames<Fields> extends true
|
|
76
|
+
? ValidateFieldsHasId<Fields> extends true
|
|
77
|
+
? S.Schema<
|
|
78
|
+
Types.Simplify<
|
|
79
|
+
S.FromStruct<Fields> & S.Schema.From<typeof ReservedColumns>
|
|
80
|
+
>,
|
|
81
|
+
Types.Simplify<
|
|
82
|
+
S.ToStruct<Fields> & S.Schema.To<typeof ReservedColumns>
|
|
83
|
+
>
|
|
84
|
+
>
|
|
85
|
+
: EvoluTypeError<"table() called without id column.">
|
|
86
|
+
: EvoluTypeError<"table() called with a reserved column. Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added by default.">
|
|
87
|
+
: EvoluTypeError<"table() called with unsupported type. Supported types are null, string, number, Uint8Array, JSON Object, and JSON Array. Use SqliteDate for dates and SqliteBoolean for booleans."> =>
|
|
88
|
+
S.struct(fields).pipe(S.extend(ReservedColumns)) as never;
|
|
89
|
+
|
|
90
|
+
const ReservedColumns = S.struct({
|
|
91
|
+
createdAt: SqliteDate,
|
|
92
|
+
updatedAt: SqliteDate,
|
|
93
|
+
isDeleted: SqliteBoolean,
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
type TableFields = Record<string, S.Schema<any, any>>;
|
|
97
|
+
|
|
98
|
+
type ValidateFieldsTypes<Fields extends TableFields> =
|
|
99
|
+
keyof Fields extends infer K
|
|
100
|
+
? K extends keyof Fields
|
|
101
|
+
? Fields[K] extends TableFields
|
|
102
|
+
? ValidateFieldsTypes<Fields[K]>
|
|
103
|
+
: // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
104
|
+
Fields[K] extends S.Schema<infer _I, infer A>
|
|
105
|
+
? A extends Value
|
|
106
|
+
? true
|
|
107
|
+
: false
|
|
108
|
+
: never
|
|
109
|
+
: never
|
|
110
|
+
: never;
|
|
111
|
+
|
|
112
|
+
type ValidateFieldsNames<Fields extends TableFields> =
|
|
113
|
+
keyof Fields extends infer K
|
|
114
|
+
? K extends keyof Fields
|
|
115
|
+
? K extends "createdAt" | "updatedAt" | "isDeleted"
|
|
116
|
+
? false
|
|
117
|
+
: true
|
|
118
|
+
: never
|
|
119
|
+
: never;
|
|
120
|
+
|
|
121
|
+
type ValidateFieldsHasId<Fields extends TableFields> = "id" extends keyof Fields
|
|
122
|
+
? true
|
|
123
|
+
: false;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Create database schema.
|
|
127
|
+
*
|
|
128
|
+
* Tables with a name prefixed with _ are local-only, which means they are not
|
|
129
|
+
* synced. Local-only tables are useful for device-specific or temporal data.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* const Database = database({
|
|
133
|
+
* // A local-only table.
|
|
134
|
+
* _todo: TodoTable,
|
|
135
|
+
* todo: TodoTable,
|
|
136
|
+
* todoCategory: TodoCategoryTable,
|
|
137
|
+
* });
|
|
138
|
+
* type Database = S.Schema.To<typeof Database>;
|
|
139
|
+
*/
|
|
140
|
+
export const database = S.struct;
|
|
141
|
+
|
|
49
142
|
// https://blog.beraliv.dev/2021-05-07-opaque-type-in-typescript
|
|
50
143
|
declare const __queryBrand: unique symbol;
|
|
51
144
|
|
|
@@ -168,8 +261,6 @@ const getPropertySignatures = <I extends { [K in keyof A]: any }, A>(
|
|
|
168
261
|
return out as any;
|
|
169
262
|
};
|
|
170
263
|
|
|
171
|
-
const commonColumns = ["createdAt", "updatedAt", "isDeleted"] as const;
|
|
172
|
-
|
|
173
264
|
export const schemaToTables = (schema: S.Schema<any, any>): Tables =>
|
|
174
265
|
pipe(
|
|
175
266
|
getPropertySignatures(schema),
|
|
@@ -177,9 +268,7 @@ export const schemaToTables = (schema: S.Schema<any, any>): Tables =>
|
|
|
177
268
|
ReadonlyArray.map(
|
|
178
269
|
([name, schema]): Table => ({
|
|
179
270
|
name,
|
|
180
|
-
columns: Object.keys(getPropertySignatures(schema))
|
|
181
|
-
commonColumns,
|
|
182
|
-
),
|
|
271
|
+
columns: Object.keys(getPropertySignatures(schema)),
|
|
183
272
|
}),
|
|
184
273
|
),
|
|
185
274
|
);
|
package/src/ErrorStore.ts
CHANGED
package/src/Evolu.ts
CHANGED
|
@@ -298,23 +298,15 @@ type QueryCallback<S extends DatabaseSchema, R extends Row> = (
|
|
|
298
298
|
) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
299
299
|
|
|
300
300
|
type QuerySchema<S extends DatabaseSchema> = {
|
|
301
|
-
readonly [Table in keyof S]: NullableExceptId<
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
} & CommonColumns
|
|
305
|
-
>;
|
|
301
|
+
readonly [Table in keyof S]: NullableExceptId<{
|
|
302
|
+
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
303
|
+
}>;
|
|
306
304
|
};
|
|
307
305
|
|
|
308
306
|
type NullableExceptId<T> = {
|
|
309
307
|
readonly [K in keyof T]: K extends "id" ? T[K] : T[K] | null;
|
|
310
308
|
};
|
|
311
309
|
|
|
312
|
-
export interface CommonColumns {
|
|
313
|
-
readonly createdAt: SqliteDate;
|
|
314
|
-
readonly updatedAt: SqliteDate;
|
|
315
|
-
readonly isDeleted: SqliteBoolean;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
310
|
const kysely = new Kysely.Kysely<QuerySchema<DatabaseSchema>>({
|
|
319
311
|
dialect: {
|
|
320
312
|
createAdapter: (): Kysely.DialectAdapter => new Kysely.SqliteAdapter(),
|
|
@@ -568,10 +560,12 @@ export type Mutate<
|
|
|
568
560
|
table: K,
|
|
569
561
|
values: Kysely.Simplify<
|
|
570
562
|
Mode extends "create"
|
|
571
|
-
? PartialForNullable<
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
563
|
+
? PartialForNullable<
|
|
564
|
+
Castable<Omit<S[K], "id" | "createdAt" | "updatedAt" | "isDeleted">>
|
|
565
|
+
>
|
|
566
|
+
: Partial<Castable<Omit<S[K], "id" | "createdAt" | "updatedAt">>> & {
|
|
567
|
+
readonly id: S[K]["id"];
|
|
568
|
+
}
|
|
575
569
|
>,
|
|
576
570
|
onComplete?: () => void,
|
|
577
571
|
) => {
|
package/src/Public.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type { Timestamp, TimestampError } from "./Crdt.js";
|
|
|
3
3
|
export type { Mnemonic, InvalidMnemonicError } from "./Crypto.js";
|
|
4
4
|
export type { EvoluError, UnexpectedError } from "./ErrorStore.js";
|
|
5
5
|
export * from "./Model.js";
|
|
6
|
+
export { table, database } from "./Db.js";
|
|
6
7
|
export type { Owner, OwnerId } from "./Owner.js";
|
|
7
8
|
export { canUseDom } from "./Platform.js";
|
|
8
9
|
export type { SyncState } from "./SyncWorker.js";
|