@evolu/common 2.2.3 → 2.2.4
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 +1 -1
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Evolu.d.ts +21 -18
- package/dist/src/Evolu.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/Db.ts +2 -2
- package/src/Evolu.ts +27 -18
package/dist/src/Db.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ 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
|
-
export type
|
|
9
|
+
export type DatabaseSchema = ReadonlyRecord.ReadonlyRecord<TableSchema>;
|
|
10
10
|
export type TableSchema = ReadonlyRecord.ReadonlyRecord<Value> & {
|
|
11
11
|
readonly id: Id;
|
|
12
12
|
};
|
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,EAGf,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAOjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAO9C,OAAO,EAEL,MAAM,EACN,WAAW,EACX,KAAK,EAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Evolu.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Context, Layer } from "effect";
|
|
|
3
3
|
import * as Kysely from "kysely";
|
|
4
4
|
import { Config } from "./Config.js";
|
|
5
5
|
import { Mnemonic } from "./Crypto.js";
|
|
6
|
-
import { Queries, Query, QueryResult, QueryResultsPromisesFromQueries, Row, RowsStore,
|
|
6
|
+
import { Queries, Query, QueryResult, QueryResultsPromisesFromQueries, Row, RowsStore, DatabaseSchema } from "./Db.js";
|
|
7
7
|
import { DbWorker } from "./DbWorker.js";
|
|
8
8
|
import { EvoluError } from "./ErrorStore.js";
|
|
9
9
|
import { SqliteBoolean, SqliteDate } from "./Model.js";
|
|
@@ -11,7 +11,7 @@ import { Owner } from "./Owner.js";
|
|
|
11
11
|
import { AppState, FlushSync } from "./Platform.js";
|
|
12
12
|
import { Store } from "./Store.js";
|
|
13
13
|
import { SyncState } from "./SyncWorker.js";
|
|
14
|
-
export interface Evolu<
|
|
14
|
+
export interface Evolu<S extends DatabaseSchema = DatabaseSchema> {
|
|
15
15
|
/**
|
|
16
16
|
* Subscribe to {@link EvoluError} changes.
|
|
17
17
|
*
|
|
@@ -42,7 +42,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
42
42
|
* db.selectFrom("todo").selectAll().where("id", "=", id),
|
|
43
43
|
* );
|
|
44
44
|
*/
|
|
45
|
-
readonly createQuery: CreateQuery<
|
|
45
|
+
readonly createQuery: CreateQuery<S>;
|
|
46
46
|
/**
|
|
47
47
|
* Load {@link Query} and return a promise with {@link QueryResult}.
|
|
48
48
|
*
|
|
@@ -182,7 +182,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
182
182
|
* // onComplete callback
|
|
183
183
|
* });
|
|
184
184
|
*/
|
|
185
|
-
create: Create<
|
|
185
|
+
create: Create<S>;
|
|
186
186
|
/**
|
|
187
187
|
* Update a row in the database and returns the existing ID. The first
|
|
188
188
|
* argument is the table name, and the second is an object.
|
|
@@ -209,7 +209,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
209
209
|
* // To delete a row, set `isDeleted` to true.
|
|
210
210
|
* evolu.update("todo", { id, isDeleted: true });
|
|
211
211
|
*/
|
|
212
|
-
update: Update<
|
|
212
|
+
update: Update<S>;
|
|
213
213
|
/**
|
|
214
214
|
* Delete {@link Owner} and all their data from the current device. After the
|
|
215
215
|
* deletion, Evolu will purge the application state. For browsers, this will
|
|
@@ -218,8 +218,11 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
218
218
|
readonly resetOwner: () => void;
|
|
219
219
|
/** Restore {@link Owner} with all their synced data. */
|
|
220
220
|
readonly restoreOwner: (mnemonic: Mnemonic) => void;
|
|
221
|
-
/**
|
|
222
|
-
|
|
221
|
+
/**
|
|
222
|
+
* Ensure tables and columns defined in {@link DatabaseSchema} exist in the
|
|
223
|
+
* database.
|
|
224
|
+
*/
|
|
225
|
+
readonly ensureSchema: <From, To extends S>(schema: S.Schema<From, To>) => void;
|
|
223
226
|
/**
|
|
224
227
|
* Force sync with Evolu Server.
|
|
225
228
|
*
|
|
@@ -229,10 +232,10 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
229
232
|
*/
|
|
230
233
|
readonly sync: () => void;
|
|
231
234
|
}
|
|
232
|
-
export declare const Evolu: Context.Tag<Evolu<
|
|
233
|
-
type CreateQuery<S extends
|
|
234
|
-
type QueryCallback<S extends
|
|
235
|
-
type QuerySchema<S extends
|
|
235
|
+
export declare const Evolu: Context.Tag<Evolu<DatabaseSchema>, Evolu<DatabaseSchema>>;
|
|
236
|
+
type CreateQuery<S extends DatabaseSchema> = <R extends Row>(queryCallback: QueryCallback<S, R>) => Query<R>;
|
|
237
|
+
type QueryCallback<S extends DatabaseSchema, R extends Row> = (db: Pick<Kysely.Kysely<QuerySchema<S>>, "selectFrom" | "fn">) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
238
|
+
type QuerySchema<S extends DatabaseSchema> = {
|
|
236
239
|
readonly [Table in keyof S]: NullableExceptId<{
|
|
237
240
|
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
238
241
|
} & CommonColumns>;
|
|
@@ -245,7 +248,7 @@ export interface CommonColumns {
|
|
|
245
248
|
readonly updatedAt: SqliteDate;
|
|
246
249
|
readonly isDeleted: SqliteBoolean;
|
|
247
250
|
}
|
|
248
|
-
export declare const makeCreateQuery: <S extends
|
|
251
|
+
export declare const makeCreateQuery: <S extends DatabaseSchema = DatabaseSchema>() => CreateQuery<S>;
|
|
249
252
|
export interface LoadingPromises {
|
|
250
253
|
readonly get: <R extends Row>(query: Query<R>) => {
|
|
251
254
|
readonly promise: LoadingPromise<R>;
|
|
@@ -274,14 +277,14 @@ export interface SubscribedQueries {
|
|
|
274
277
|
}
|
|
275
278
|
export declare const SubscribedQueries: Context.Tag<SubscribedQueries, SubscribedQueries>;
|
|
276
279
|
export declare const SubscribedQueriesLive: Layer.Layer<RowsStore, never, SubscribedQueries>;
|
|
277
|
-
export type Create<S extends
|
|
278
|
-
export type Update<S extends
|
|
279
|
-
export type Mutate<S extends
|
|
280
|
+
export type Create<S extends DatabaseSchema = DatabaseSchema> = Mutate<S, "create">;
|
|
281
|
+
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"> & Pick<CommonColumns, "isDeleted">>> & {
|
|
280
283
|
readonly id: S[K]["id"];
|
|
281
284
|
}>, onComplete?: () => void) => {
|
|
282
285
|
readonly id: S[K]["id"];
|
|
283
286
|
};
|
|
284
|
-
export declare const Mutate: Context.Tag<Mutate<
|
|
287
|
+
export declare const Mutate: Context.Tag<Mutate<DatabaseSchema, "update">, Mutate<DatabaseSchema, "update">>;
|
|
285
288
|
type PartialForNullable<T, NK extends keyof T = {
|
|
286
289
|
[K in keyof T]: null extends T[K] ? K : never;
|
|
287
290
|
}[keyof T], NP = Pick<T, Exclude<keyof T, NK>> & Partial<Pick<T, NK>>> = {
|
|
@@ -298,7 +301,7 @@ type Castable<T> = {
|
|
|
298
301
|
readonly [K in keyof T]: T[K] extends SqliteBoolean ? boolean | SqliteBoolean : T[K] extends null | SqliteBoolean ? null | boolean | SqliteBoolean : T[K] extends SqliteDate ? Date | SqliteDate : T[K] extends null | SqliteDate ? null | Date | SqliteDate : T[K];
|
|
299
302
|
};
|
|
300
303
|
/** EvoluCommonLive has only platform independent side-effects. */
|
|
301
|
-
export declare const EvoluCommonLive: Layer.Layer<Config | FlushSync | AppState | DbWorker, never, Evolu<
|
|
302
|
-
export declare const makeCreateEvolu: (EvoluLive: Layer.Layer<Config, never, Evolu
|
|
304
|
+
export declare const EvoluCommonLive: Layer.Layer<Config | FlushSync | AppState | DbWorker, never, Evolu<DatabaseSchema>>;
|
|
305
|
+
export declare const makeCreateEvolu: (EvoluLive: Layer.Layer<Config, never, Evolu>) => <From, To extends DatabaseSchema>(schema: S.Schema<From, To>, config?: Partial<Config>) => Evolu<To>;
|
|
303
306
|
export {};
|
|
304
307
|
//# sourceMappingURL=Evolu.d.ts.map
|
package/dist/src/Evolu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
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",
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"nanoid": "^5.0.4"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@effect/schema": "0.
|
|
55
|
+
"@effect/schema": "0.53.0",
|
|
56
56
|
"@protobuf-ts/plugin": "^2.9.3",
|
|
57
57
|
"@protobuf-ts/protoc": "^2.9.3",
|
|
58
58
|
"array-shuffle": "^3.0.0",
|
|
59
|
-
"effect": "2.0.0-next.
|
|
59
|
+
"effect": "2.0.0-next.60",
|
|
60
60
|
"eslint": "^8.54.0",
|
|
61
61
|
"typescript": "^5.3.3",
|
|
62
62
|
"vitest": "^1.0.4",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"eslint-config-evolu": "1.0.0"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
|
-
"@effect/schema": "0.
|
|
68
|
-
"effect": "2.0.0-next.
|
|
67
|
+
"@effect/schema": "0.53.0",
|
|
68
|
+
"effect": "2.0.0-next.60"
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
package/src/Db.ts
CHANGED
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
} from "./Sqlite.js";
|
|
41
41
|
import { Store, makeStore } from "./Store.js";
|
|
42
42
|
|
|
43
|
-
export type
|
|
43
|
+
export type DatabaseSchema = ReadonlyRecord.ReadonlyRecord<TableSchema>;
|
|
44
44
|
|
|
45
45
|
export type TableSchema = ReadonlyRecord.ReadonlyRecord<Value> & {
|
|
46
46
|
readonly id: Id;
|
|
@@ -168,7 +168,7 @@ const getPropertySignatures = <I extends { [K in keyof A]: any }, A>(
|
|
|
168
168
|
return out as any;
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
-
const commonColumns = ["createdAt", "updatedAt", "isDeleted"];
|
|
171
|
+
const commonColumns = ["createdAt", "updatedAt", "isDeleted"] as const;
|
|
172
172
|
|
|
173
173
|
export const schemaToTables = (schema: S.Schema<any, any>): Tables =>
|
|
174
174
|
pipe(
|
package/src/Evolu.ts
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
Row,
|
|
23
23
|
RowsStore,
|
|
24
24
|
RowsStoreLive,
|
|
25
|
-
|
|
25
|
+
DatabaseSchema,
|
|
26
26
|
emptyRows,
|
|
27
27
|
queryResultFromRows,
|
|
28
28
|
schemaToTables,
|
|
@@ -39,7 +39,7 @@ import { SqliteQuery } from "./Sqlite.js";
|
|
|
39
39
|
import { Store, Unsubscribe, makeStore } from "./Store.js";
|
|
40
40
|
import { SyncState } from "./SyncWorker.js";
|
|
41
41
|
|
|
42
|
-
export interface Evolu<
|
|
42
|
+
export interface Evolu<S extends DatabaseSchema = DatabaseSchema> {
|
|
43
43
|
/**
|
|
44
44
|
* Subscribe to {@link EvoluError} changes.
|
|
45
45
|
*
|
|
@@ -72,7 +72,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
72
72
|
* db.selectFrom("todo").selectAll().where("id", "=", id),
|
|
73
73
|
* );
|
|
74
74
|
*/
|
|
75
|
-
readonly createQuery: CreateQuery<
|
|
75
|
+
readonly createQuery: CreateQuery<S>;
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* Load {@link Query} and return a promise with {@link QueryResult}.
|
|
@@ -223,7 +223,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
223
223
|
* // onComplete callback
|
|
224
224
|
* });
|
|
225
225
|
*/
|
|
226
|
-
create: Create<
|
|
226
|
+
create: Create<S>;
|
|
227
227
|
|
|
228
228
|
/**
|
|
229
229
|
* Update a row in the database and returns the existing ID. The first
|
|
@@ -251,7 +251,7 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
251
251
|
* // To delete a row, set `isDeleted` to true.
|
|
252
252
|
* evolu.update("todo", { id, isDeleted: true });
|
|
253
253
|
*/
|
|
254
|
-
update: Update<
|
|
254
|
+
update: Update<S>;
|
|
255
255
|
|
|
256
256
|
/**
|
|
257
257
|
* Delete {@link Owner} and all their data from the current device. After the
|
|
@@ -263,8 +263,11 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
263
263
|
/** Restore {@link Owner} with all their synced data. */
|
|
264
264
|
readonly restoreOwner: (mnemonic: Mnemonic) => void;
|
|
265
265
|
|
|
266
|
-
/**
|
|
267
|
-
|
|
266
|
+
/**
|
|
267
|
+
* Ensure tables and columns defined in {@link DatabaseSchema} exist in the
|
|
268
|
+
* database.
|
|
269
|
+
*/
|
|
270
|
+
readonly ensureSchema: <From, To extends S>(
|
|
268
271
|
schema: S.Schema<From, To>,
|
|
269
272
|
) => void;
|
|
270
273
|
|
|
@@ -280,11 +283,11 @@ export interface Evolu<T extends Schema = Schema> {
|
|
|
280
283
|
|
|
281
284
|
export const Evolu = Context.Tag<Evolu>();
|
|
282
285
|
|
|
283
|
-
type CreateQuery<S extends
|
|
286
|
+
type CreateQuery<S extends DatabaseSchema> = <R extends Row>(
|
|
284
287
|
queryCallback: QueryCallback<S, R>,
|
|
285
288
|
) => Query<R>;
|
|
286
289
|
|
|
287
|
-
type QueryCallback<S extends
|
|
290
|
+
type QueryCallback<S extends DatabaseSchema, R extends Row> = (
|
|
288
291
|
db: Pick<
|
|
289
292
|
Kysely.Kysely<QuerySchema<S>>,
|
|
290
293
|
| "selectFrom"
|
|
@@ -294,7 +297,7 @@ type QueryCallback<S extends Schema, R extends Row> = (
|
|
|
294
297
|
>,
|
|
295
298
|
) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
296
299
|
|
|
297
|
-
type QuerySchema<S extends
|
|
300
|
+
type QuerySchema<S extends DatabaseSchema> = {
|
|
298
301
|
readonly [Table in keyof S]: NullableExceptId<
|
|
299
302
|
{
|
|
300
303
|
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
@@ -312,7 +315,7 @@ export interface CommonColumns {
|
|
|
312
315
|
readonly isDeleted: SqliteBoolean;
|
|
313
316
|
}
|
|
314
317
|
|
|
315
|
-
const kysely = new Kysely.Kysely<QuerySchema<
|
|
318
|
+
const kysely = new Kysely.Kysely<QuerySchema<DatabaseSchema>>({
|
|
316
319
|
dialect: {
|
|
317
320
|
createAdapter: (): Kysely.DialectAdapter => new Kysely.SqliteAdapter(),
|
|
318
321
|
createDriver: (): Kysely.Driver => new Kysely.DummyDriver(),
|
|
@@ -325,7 +328,7 @@ const kysely = new Kysely.Kysely<QuerySchema<Schema>>({
|
|
|
325
328
|
});
|
|
326
329
|
|
|
327
330
|
export const makeCreateQuery =
|
|
328
|
-
<S extends
|
|
331
|
+
<S extends DatabaseSchema = DatabaseSchema>(): CreateQuery<S> =>
|
|
329
332
|
<R extends Row>(queryCallback: QueryCallback<S, R>) =>
|
|
330
333
|
pipe(
|
|
331
334
|
queryCallback(kysely as Kysely.Kysely<QuerySchema<S>>).compile(),
|
|
@@ -548,12 +551,18 @@ export const SubscribedQueriesLive = Layer.effect(
|
|
|
548
551
|
}),
|
|
549
552
|
);
|
|
550
553
|
|
|
551
|
-
export type Create<S extends
|
|
554
|
+
export type Create<S extends DatabaseSchema = DatabaseSchema> = Mutate<
|
|
555
|
+
S,
|
|
556
|
+
"create"
|
|
557
|
+
>;
|
|
552
558
|
|
|
553
|
-
export type Update<S extends
|
|
559
|
+
export type Update<S extends DatabaseSchema = DatabaseSchema> = Mutate<
|
|
560
|
+
S,
|
|
561
|
+
"update"
|
|
562
|
+
>;
|
|
554
563
|
|
|
555
564
|
export type Mutate<
|
|
556
|
-
S extends
|
|
565
|
+
S extends DatabaseSchema = DatabaseSchema,
|
|
557
566
|
Mode extends "create" | "update" = "update",
|
|
558
567
|
> = <K extends keyof S>(
|
|
559
568
|
table: K,
|
|
@@ -716,7 +725,7 @@ const EvoluCommon = Layer.effect(
|
|
|
716
725
|
subscribeSyncState: syncStateStore.subscribe,
|
|
717
726
|
getSyncState: syncStateStore.getState,
|
|
718
727
|
|
|
719
|
-
create: mutate as Mutate<
|
|
728
|
+
create: mutate as Mutate<DatabaseSchema, "create">,
|
|
720
729
|
update: mutate,
|
|
721
730
|
|
|
722
731
|
resetOwner: () => dbWorker.postMessage({ _tag: "reset" }),
|
|
@@ -746,8 +755,8 @@ export const EvoluCommonLive = EvoluCommon.pipe(
|
|
|
746
755
|
);
|
|
747
756
|
|
|
748
757
|
export const makeCreateEvolu =
|
|
749
|
-
(EvoluLive: Layer.Layer<Config, never, Evolu
|
|
750
|
-
<From, To extends
|
|
758
|
+
(EvoluLive: Layer.Layer<Config, never, Evolu>) =>
|
|
759
|
+
<From, To extends DatabaseSchema>(
|
|
751
760
|
schema: S.Schema<From, To>,
|
|
752
761
|
config?: Partial<Config>,
|
|
753
762
|
): Evolu<To> => {
|