@livestore/common 0.3.0-dev.10 → 0.3.0-dev.12
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/.tsbuildinfo +1 -1
- package/dist/adapter-types.d.ts +62 -30
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +12 -0
- package/dist/adapter-types.js.map +1 -1
- package/dist/devtools/devtool-message-leader.d.ts +2 -0
- package/dist/devtools/devtool-message-leader.d.ts.map +1 -0
- package/dist/devtools/devtool-message-leader.js +2 -0
- package/dist/devtools/devtool-message-leader.js.map +1 -0
- package/dist/devtools/devtools-bridge.d.ts +10 -7
- package/dist/devtools/devtools-bridge.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +370 -0
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-client-session.js +77 -0
- package/dist/devtools/devtools-messages-client-session.js.map +1 -0
- package/dist/devtools/devtools-messages-common.d.ts +57 -0
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-common.js +44 -0
- package/dist/devtools/devtools-messages-common.js.map +1 -0
- package/dist/devtools/devtools-messages-leader.d.ts +437 -0
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-leader.js +132 -0
- package/dist/devtools/devtools-messages-leader.js.map +1 -0
- package/dist/devtools/devtools-messages.d.ts +3 -580
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -174
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/init-singleton-tables.d.ts +2 -2
- package/dist/init-singleton-tables.d.ts.map +1 -1
- package/dist/init-singleton-tables.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +4 -4
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +64 -36
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
- package/dist/leader-thread/apply-mutation.js +4 -4
- package/dist/leader-thread/apply-mutation.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +34 -6
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +22 -7
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +67 -36
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +6 -6
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +38 -13
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/mutationlog.d.ts +4 -4
- package/dist/leader-thread/mutationlog.d.ts.map +1 -1
- package/dist/leader-thread/mutationlog.js +6 -6
- package/dist/leader-thread/mutationlog.js.map +1 -1
- package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +4 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +27 -22
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/types.d.ts +32 -17
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +0 -2
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/query-builder/api.d.ts +2 -2
- package/dist/query-builder/api.d.ts.map +1 -1
- package/dist/query-builder/impl.js.map +1 -1
- package/dist/query-builder/impl.test.js +16 -1
- package/dist/query-builder/impl.test.js.map +1 -1
- package/dist/query-info.d.ts +3 -3
- package/dist/query-info.d.ts.map +1 -1
- package/dist/rehydrate-from-mutationlog.d.ts +3 -3
- package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
- package/dist/rehydrate-from-mutationlog.js.map +1 -1
- package/dist/schema/EventId.d.ts +1 -0
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +3 -0
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/mutations.d.ts +1 -1
- package/dist/schema/system-tables.d.ts +1 -1
- package/dist/schema-management/common.d.ts +3 -3
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/common.js.map +1 -1
- package/dist/schema-management/migrations.d.ts +5 -5
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +6 -1
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +8 -12
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +31 -13
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/next/test/mutation-fixtures.d.ts +7 -7
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/src/adapter-types.ts +52 -33
- package/src/devtools/devtools-bridge.ts +10 -7
- package/src/devtools/devtools-messages-client-session.ts +125 -0
- package/src/devtools/devtools-messages-common.ts +81 -0
- package/src/devtools/devtools-messages-leader.ts +176 -0
- package/src/devtools/devtools-messages.ts +3 -246
- package/src/init-singleton-tables.ts +2 -2
- package/src/leader-thread/LeaderSyncProcessor.ts +94 -46
- package/src/leader-thread/apply-mutation.ts +5 -5
- package/src/leader-thread/connection.ts +54 -9
- package/src/leader-thread/leader-worker-devtools.ts +105 -41
- package/src/leader-thread/make-leader-thread-layer.ts +55 -22
- package/src/leader-thread/mutationlog.ts +9 -9
- package/src/leader-thread/recreate-db.ts +33 -24
- package/src/leader-thread/types.ts +38 -21
- package/src/query-builder/api.ts +3 -3
- package/src/query-builder/impl.test.ts +22 -1
- package/src/query-builder/impl.ts +2 -2
- package/src/query-info.ts +3 -3
- package/src/rehydrate-from-mutationlog.ts +3 -3
- package/src/schema/EventId.ts +4 -0
- package/src/schema-management/common.ts +3 -3
- package/src/schema-management/migrations.ts +12 -8
- package/src/sync/ClientSessionSyncProcessor.ts +38 -22
- package/src/version.ts +1 -1
package/dist/schema/EventId.js
CHANGED
@@ -22,6 +22,9 @@ export const ROOT = { global: -1, local: localDefault };
|
|
22
22
|
export const isGreaterThan = (a, b) => {
|
23
23
|
return a.global > b.global || (a.global === b.global && a.local > b.local);
|
24
24
|
};
|
25
|
+
export const isGreaterThanOrEqual = (a, b) => {
|
26
|
+
return a.global > b.global || (a.global === b.global && a.local >= b.local);
|
27
|
+
};
|
25
28
|
export const make = (id) => {
|
26
29
|
return Schema.is(EventId)(id) ? id : Schema.decodeSync(EventId)(id);
|
27
30
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAgB,CAAA;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,EAAiB,CAAA;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAwB,CAAA;AAUpD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;CACpB,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAA;AAI/F,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAoB,CAAA;AAEjG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IACtD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAoC,EAAW,EAAE;IACpE,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAE,OAAgB,EAAe,EAAE;IACrE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAwB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAClG,CAAC;IAED,OAAO;QACL,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAE;QAC5E,iEAAiE;QACjE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;KACrD,CAAA;AACH,CAAC,CAAA"}
|
1
|
+
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"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"}
|
@@ -96,10 +96,10 @@ export declare const rawSqlMutation: MutationDef<"livestore.RawSql", {
|
|
96
96
|
} | undefined;
|
97
97
|
readonly writeTables?: readonly string[] | undefined;
|
98
98
|
}, {
|
99
|
+
readonly sql: string;
|
99
100
|
readonly bindValues?: {
|
100
101
|
readonly [x: string]: any;
|
101
102
|
} | undefined;
|
102
|
-
readonly sql: string;
|
103
103
|
readonly writeTables?: ReadonlySet<string> | undefined;
|
104
104
|
}>;
|
105
105
|
export type RawSqlMutation = typeof rawSqlMutation;
|
@@ -349,7 +349,7 @@ export declare const mutationLogMetaTable: import("./table-def.js").TableDef<{
|
|
349
349
|
disableAutomaticIdColumn: true;
|
350
350
|
deriveMutations: never;
|
351
351
|
isSingleColumn: false;
|
352
|
-
requiredInsertColumnNames: "schemaHash" | "idGlobal" | "idLocal" | "
|
352
|
+
requiredInsertColumnNames: "schemaHash" | "idGlobal" | "idLocal" | "mutation" | "parentIdGlobal" | "parentIdLocal" | "argsJson" | "syncMetadataJson";
|
353
353
|
}, Schema.Schema<{
|
354
354
|
readonly idGlobal: number & import("effect/Brand").Brand<"GlobalEventId">;
|
355
355
|
readonly idLocal: number & import("effect/Brand").Brand<"LocalEventId">;
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import type {
|
1
|
+
import type { SqliteDb } from '../adapter-types.js';
|
2
2
|
import type { ParamsObject } from '../util.js';
|
3
|
-
export declare const dbExecute: (db:
|
4
|
-
export declare const dbSelect: <T>(db:
|
3
|
+
export declare const dbExecute: (db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => void;
|
4
|
+
export declare const dbSelect: <T>(db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => readonly T[];
|
5
5
|
export interface SchemaManager {
|
6
6
|
getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>;
|
7
7
|
setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,SAAS,OAAQ,QAAQ,YAAY,MAAM,eAAe,YAAY,SAYlF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,MAAM,QAAQ,YAAY,MAAM,eAAe,YAAY,iBAUpF,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;IAEzD,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,oCAAoC;AACpC,uGAAuG;AACvG,2DAA2D;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,oCAAoC;AACpC,uGAAuG;AACvG,2DAA2D;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAY,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IACrF,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE3F,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEhC,IAAI,CAAC,QAAQ,EAAE,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,EAAY,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IACvF,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAI,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5F,IAAI,CAAC,QAAQ,EAAE,CAAA;IACf,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
@@ -1,19 +1,19 @@
|
|
1
1
|
import { SqliteAst } from '@livestore/db-schema';
|
2
2
|
import { Effect } from '@livestore/utils/effect';
|
3
|
-
import type {
|
3
|
+
import type { MigrationsReport, SqliteDb, UnexpectedError } from '../adapter-types.js';
|
4
4
|
import type { LiveStoreSchema } from '../schema/mod.js';
|
5
5
|
import type { SchemaManager } from './common.js';
|
6
|
-
export declare const makeSchemaManager: (db:
|
6
|
+
export declare const makeSchemaManager: (db: SqliteDb) => Effect.Effect<SchemaManager>;
|
7
7
|
export declare const migrateDb: ({ db, schema, onProgress, }: {
|
8
|
-
db:
|
8
|
+
db: SqliteDb;
|
9
9
|
schema: LiveStoreSchema;
|
10
10
|
onProgress?: (opts: {
|
11
11
|
done: number;
|
12
12
|
total: number;
|
13
13
|
}) => Effect.Effect<void>;
|
14
|
-
}) => Effect.Effect<
|
14
|
+
}) => Effect.Effect<MigrationsReport, UnexpectedError>;
|
15
15
|
export declare const migrateTable: ({ db, tableAst, schemaHash, behaviour, skipMetaTable, }: {
|
16
|
-
db:
|
16
|
+
db: SqliteDb;
|
17
17
|
tableAst: SqliteAst.Table;
|
18
18
|
schemaHash?: number;
|
19
19
|
behaviour: "drop-and-recreate" | "create-if-not-exists";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAExE,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAyB,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC7G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,eAAO,MAAM,iBAAiB,OAAQ,QAAQ,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAwBxE,CAAA;AAGJ,eAAO,MAAM,SAAS,gCAInB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC5E,KAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAyD/C,CAAA;AAEJ,eAAO,MAAM,YAAY,4DAMtB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,mBAAmB,GAAG,sBAAsB,CAAA;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,sCAqCE,CAAA;AAOH,eAAO,MAAM,cAAc,aAAc,SAAS,CAAC,KAAK,WAQvD,CAAA"}
|
@@ -41,6 +41,7 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
|
|
41
41
|
...Array.from(schema.tables.values()).filter((_) => _.sqliteDef.name !== SCHEMA_META_TABLE),
|
42
42
|
]);
|
43
43
|
const tablesToMigrate = new Set();
|
44
|
+
const migrationsReportEntries = [];
|
44
45
|
for (const tableDef of tableDefs) {
|
45
46
|
const tableAst = tableDef.sqliteDef.ast;
|
46
47
|
const tableName = tableAst.name;
|
@@ -48,7 +49,10 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
|
|
48
49
|
const schemaHash = SqliteAst.hash(tableAst);
|
49
50
|
if (schemaHash !== dbSchemaHash) {
|
50
51
|
tablesToMigrate.add({ tableAst, schemaHash });
|
51
|
-
|
52
|
+
migrationsReportEntries.push({
|
53
|
+
tableName,
|
54
|
+
hashes: { expected: schemaHash, actual: dbSchemaHash },
|
55
|
+
});
|
52
56
|
}
|
53
57
|
}
|
54
58
|
let processedTables = 0;
|
@@ -60,6 +64,7 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
|
|
60
64
|
yield* onProgress({ done: processedTables, total: tablesCount });
|
61
65
|
}
|
62
66
|
}
|
67
|
+
return { migrations: migrationsReportEntries };
|
63
68
|
});
|
64
69
|
export const migrateTable = ({ db, tableAst, schemaHash = SqliteAst.hash(tableAst), behaviour, skipMetaTable = false, }) => Effect.gen(function* () {
|
65
70
|
// console.log(`Migrating table '${tableAst.name}'...`)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKxE,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,wBAAwB,EACxB,YAAY,GACb,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +1,10 @@
|
|
1
|
-
import type { Scope } from '@livestore/utils/effect';
|
2
|
-
import { Effect } from '@livestore/utils/effect';
|
1
|
+
import type { Runtime, Scope } from '@livestore/utils/effect';
|
2
|
+
import { Effect, Subscribable } from '@livestore/utils/effect';
|
3
3
|
import * as otel from '@opentelemetry/api';
|
4
|
-
import type {
|
5
|
-
import * as EventId from '../schema/EventId.js';
|
4
|
+
import type { ClientSession, UnexpectedError } from '../adapter-types.js';
|
6
5
|
import { type LiveStoreSchema } from '../schema/mod.js';
|
7
6
|
import * as MutationEvent from '../schema/MutationEvent.js';
|
8
|
-
import
|
7
|
+
import * as SyncState from './syncstate.js';
|
9
8
|
/**
|
10
9
|
* Rebase behaviour:
|
11
10
|
* - We continously pull mutations from the leader and apply them to the local store.
|
@@ -15,11 +14,10 @@ import { SyncState } from './syncstate.js';
|
|
15
14
|
* - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
|
16
15
|
* - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
|
17
16
|
*/
|
18
|
-
export declare const makeClientSessionSyncProcessor: ({ schema,
|
17
|
+
export declare const makeClientSessionSyncProcessor: ({ schema, clientSession, runtime, applyMutation, rollback, refreshTables, span, }: {
|
19
18
|
schema: LiveStoreSchema;
|
20
|
-
|
21
|
-
|
22
|
-
pullFromLeader: ClientSessionLeaderThreadProxy["mutations"]["pull"];
|
19
|
+
clientSession: ClientSession;
|
20
|
+
runtime: Runtime.Runtime<Scope.Scope>;
|
23
21
|
applyMutation: (mutationEventDecoded: MutationEvent.PartialAnyDecoded, options: {
|
24
22
|
otelContext: otel.Context;
|
25
23
|
withChangeset: boolean;
|
@@ -38,8 +36,6 @@ export interface ClientSessionSyncProcessor {
|
|
38
36
|
writeTables: Set<string>;
|
39
37
|
};
|
40
38
|
boot: Effect.Effect<void, UnexpectedError, Scope.Scope>;
|
41
|
-
|
42
|
-
current: SyncState;
|
43
|
-
};
|
39
|
+
syncState: Subscribable.Subscribable<SyncState.SyncState>;
|
44
40
|
}
|
45
41
|
//# sourceMappingURL=ClientSessionSyncProcessor.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ClientSessionSyncProcessor.d.ts","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"ClientSessionSyncProcessor.d.ts","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAyB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,sFAQxC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrC,aAAa,EAAE,CACb,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,KAC3D;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;KACzC,CAAA;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAA;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAA;CAChB,KAAG,0BA0KH,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,CACJ,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;KAAE,KACnC;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KACzB,CAAA;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAEvD,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;CAC1D"}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { LS_DEV, shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
|
2
|
-
import { Effect, Schema, Stream } from '@livestore/utils/effect';
|
2
|
+
import { Effect, Queue, Schema, Stream, Subscribable } from '@livestore/utils/effect';
|
3
3
|
import * as otel from '@opentelemetry/api';
|
4
4
|
import * as EventId from '../schema/EventId.js';
|
5
5
|
import * as MutationEvent from '../schema/MutationEvent.js';
|
6
|
-
import
|
6
|
+
import * as SyncState from './syncstate.js';
|
7
7
|
/**
|
8
8
|
* Rebase behaviour:
|
9
9
|
* - We continously pull mutations from the leader and apply them to the local store.
|
@@ -13,17 +13,18 @@ import { SyncState, updateSyncState } from './syncstate.js';
|
|
13
13
|
* - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
|
14
14
|
* - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
|
15
15
|
*/
|
16
|
-
export const makeClientSessionSyncProcessor = ({ schema,
|
16
|
+
export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime, applyMutation, rollback, refreshTables, span, }) => {
|
17
17
|
const mutationEventSchema = MutationEvent.makeMutationEventSchemaMemo(schema);
|
18
18
|
const syncStateRef = {
|
19
|
-
current: new SyncState({
|
20
|
-
localHead:
|
21
|
-
upstreamHead:
|
19
|
+
current: new SyncState.SyncState({
|
20
|
+
localHead: clientSession.leaderThread.initialState.leaderHead,
|
21
|
+
upstreamHead: clientSession.leaderThread.initialState.leaderHead,
|
22
22
|
pending: [],
|
23
23
|
// TODO init rollbackTail from leader to be ready for backend rebasing
|
24
24
|
rollbackTail: [],
|
25
25
|
}),
|
26
26
|
};
|
27
|
+
const syncStateUpdateQueue = Queue.unbounded().pipe(Effect.runSync);
|
27
28
|
const isLocalEvent = (mutationEventEncoded) => {
|
28
29
|
const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
|
29
30
|
return mutationDef.options.localOnly;
|
@@ -37,7 +38,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
37
38
|
baseEventId = nextIdPair.id;
|
38
39
|
return new MutationEvent.EncodedWithMeta(Schema.encodeUnknownSync(mutationEventSchema)({ ...mutationEvent, ...nextIdPair }));
|
39
40
|
});
|
40
|
-
const updateResult = updateSyncState({
|
41
|
+
const updateResult = SyncState.updateSyncState({
|
41
42
|
syncState: syncStateRef.current,
|
42
43
|
payload: { _tag: 'local-push', newEvents: encodedMutationEvents },
|
43
44
|
isLocalEvent,
|
@@ -51,6 +52,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
51
52
|
return shouldNeverHappen(`Expected advance, got ${updateResult._tag}`);
|
52
53
|
}
|
53
54
|
syncStateRef.current = updateResult.newSyncState;
|
55
|
+
syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
|
54
56
|
const writeTables = new Set();
|
55
57
|
for (const mutationEvent of updateResult.newEvents) {
|
56
58
|
// TODO avoid encoding and decoding here again
|
@@ -62,14 +64,19 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
62
64
|
mutationEvent.meta.sessionChangeset = res.sessionChangeset;
|
63
65
|
}
|
64
66
|
// console.debug('pushToLeader', encodedMutationEvents.length, ...encodedMutationEvents.map((_) => _.toJSON()))
|
65
|
-
|
67
|
+
clientSession.leaderThread.mutations
|
68
|
+
.push(encodedMutationEvents)
|
69
|
+
.pipe(Effect.tapCauseLogPretty, Effect.provide(runtime), Effect.runFork);
|
66
70
|
return { writeTables };
|
67
71
|
};
|
68
72
|
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
69
73
|
const boot = Effect.gen(function* () {
|
70
|
-
yield*
|
74
|
+
yield* clientSession.leaderThread.mutations.pull.pipe(Stream.tap(({ payload, remaining }) => Effect.gen(function* () {
|
71
75
|
// console.log('pulled payload from leader', { payload, remaining })
|
72
|
-
|
76
|
+
if (clientSession.devtools.enabled) {
|
77
|
+
yield* clientSession.devtools.pullLatch.await;
|
78
|
+
}
|
79
|
+
const updateResult = SyncState.updateSyncState({
|
73
80
|
syncState: syncStateRef.current,
|
74
81
|
payload,
|
75
82
|
isLocalEvent,
|
@@ -80,6 +87,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
80
87
|
throw new Error('TODO: implement reject in client-session-sync-queue for pull');
|
81
88
|
}
|
82
89
|
syncStateRef.current = updateResult.newSyncState;
|
90
|
+
syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
|
83
91
|
if (updateResult._tag === 'rebase') {
|
84
92
|
span.addEvent('pull:rebase', {
|
85
93
|
payloadTag: payload._tag,
|
@@ -90,7 +98,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
90
98
|
remaining,
|
91
99
|
});
|
92
100
|
if (LS_DEV) {
|
93
|
-
|
101
|
+
Effect.logDebug('pull:rebase: rollback', updateResult.eventsToRollback.length, ...updateResult.eventsToRollback.map((_) => _.toJSON())).pipe(Effect.provide(runtime), Effect.runSync);
|
94
102
|
}
|
95
103
|
for (let i = updateResult.eventsToRollback.length - 1; i >= 0; i--) {
|
96
104
|
const event = updateResult.eventsToRollback[i];
|
@@ -99,7 +107,9 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
99
107
|
event.meta.sessionChangeset = undefined;
|
100
108
|
}
|
101
109
|
}
|
102
|
-
|
110
|
+
clientSession.leaderThread.mutations
|
111
|
+
.push(updateResult.newSyncState.pending)
|
112
|
+
.pipe(Effect.tapCauseLogPretty, Effect.provide(runtime), Effect.runFork);
|
103
113
|
}
|
104
114
|
else {
|
105
115
|
span.addEvent('pull:advance', {
|
@@ -128,7 +138,15 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
|
|
128
138
|
return {
|
129
139
|
push,
|
130
140
|
boot,
|
131
|
-
|
141
|
+
syncState: Subscribable.make({
|
142
|
+
get: Effect.gen(function* () {
|
143
|
+
const syncState = syncStateRef.current;
|
144
|
+
if (syncStateRef === undefined)
|
145
|
+
return shouldNeverHappen('Not initialized');
|
146
|
+
return syncState;
|
147
|
+
}),
|
148
|
+
changes: Stream.fromQueue(syncStateUpdateQueue),
|
149
|
+
}),
|
132
150
|
};
|
133
151
|
};
|
134
152
|
//# sourceMappingURL=ClientSessionSyncProcessor.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"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"}
|
@@ -10,18 +10,18 @@ export declare const facts: {
|
|
10
10
|
};
|
11
11
|
export declare const mutations: {
|
12
12
|
createTodo: MutationDef<"createTodo", {
|
13
|
-
readonly text: string;
|
14
13
|
readonly id: string;
|
15
|
-
}, {
|
16
14
|
readonly text: string;
|
15
|
+
}, {
|
17
16
|
readonly id: string;
|
17
|
+
readonly text: string;
|
18
18
|
}>;
|
19
19
|
upsertTodo: MutationDef<"upsertTodo", {
|
20
20
|
readonly id: string;
|
21
21
|
readonly text?: string | undefined;
|
22
22
|
}, {
|
23
|
-
readonly text?: string | undefined;
|
24
23
|
readonly id: string;
|
24
|
+
readonly text?: string | undefined;
|
25
25
|
}>;
|
26
26
|
completeTodo: MutationDef<"completeTodo", {
|
27
27
|
readonly id: string;
|
@@ -51,18 +51,18 @@ export declare const mutations: {
|
|
51
51
|
readonly readonly: boolean;
|
52
52
|
}>;
|
53
53
|
setTextTodo: MutationDef<"setTextTodo", {
|
54
|
-
readonly text: string;
|
55
54
|
readonly id: string;
|
56
|
-
}, {
|
57
55
|
readonly text: string;
|
56
|
+
}, {
|
58
57
|
readonly id: string;
|
58
|
+
readonly text: string;
|
59
59
|
}>;
|
60
60
|
setInputValue: MutationDef<"setInputValue", {
|
61
|
-
readonly text: string;
|
62
61
|
readonly id: string;
|
63
|
-
}, {
|
64
62
|
readonly text: string;
|
63
|
+
}, {
|
65
64
|
readonly id: string;
|
65
|
+
readonly text: string;
|
66
66
|
}>;
|
67
67
|
};
|
68
68
|
export type PartialEvent = {
|
package/dist/version.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
export declare const liveStoreVersion: "0.3.0-dev.
|
1
|
+
export declare const liveStoreVersion: "0.3.0-dev.12";
|
2
2
|
/**
|
3
3
|
* This version number is incremented whenever the internal storage format changes in a breaking way.
|
4
4
|
* Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
|
package/dist/version.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
// TODO bring back when Expo and Playwright supports `with` imports
|
2
2
|
// import packageJson from '../package.json' with { type: 'json' }
|
3
3
|
// export const liveStoreVersion = packageJson.version
|
4
|
-
export const liveStoreVersion = '0.3.0-dev.
|
4
|
+
export const liveStoreVersion = '0.3.0-dev.12';
|
5
5
|
/**
|
6
6
|
* This version number is incremented whenever the internal storage format changes in a breaking way.
|
7
7
|
* Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@livestore/common",
|
3
|
-
"version": "0.3.0-dev.
|
3
|
+
"version": "0.3.0-dev.12",
|
4
4
|
"type": "module",
|
5
5
|
"sideEffects": false,
|
6
6
|
"exports": {
|
@@ -54,8 +54,8 @@
|
|
54
54
|
"graphology": "0.26.0-alpha1",
|
55
55
|
"graphology-dag": "0.4.1",
|
56
56
|
"graphology-types": "0.24.8",
|
57
|
-
"@livestore/db-schema": "0.3.0-dev.
|
58
|
-
"@livestore/utils": "0.3.0-dev.
|
57
|
+
"@livestore/db-schema": "0.3.0-dev.12",
|
58
|
+
"@livestore/utils": "0.3.0-dev.12"
|
59
59
|
},
|
60
60
|
"devDependencies": {
|
61
61
|
"vitest": "^2.1.4"
|
package/src/adapter-types.ts
CHANGED
@@ -2,8 +2,7 @@ import type { Cause, Queue, Scope, SubscriptionRef, WebChannel } from '@livestor
|
|
2
2
|
import { Effect, Schema, Stream } from '@livestore/utils/effect'
|
3
3
|
|
4
4
|
import type * as Devtools from './devtools/index.js'
|
5
|
-
import type { EventId } from './schema/
|
6
|
-
import type { LiveStoreSchema, MutationEvent } from './schema/mod.js'
|
5
|
+
import type { EventId, LiveStoreSchema, MutationEvent } from './schema/mod.js'
|
7
6
|
import type { InvalidPushError } from './sync/sync.js'
|
8
7
|
import type { PayloadUpstream, SyncState } from './sync/syncstate.js'
|
9
8
|
import type { PreparedBindValues } from './util.js'
|
@@ -15,21 +14,21 @@ export interface PreparedStatement {
|
|
15
14
|
sql: string
|
16
15
|
}
|
17
16
|
|
18
|
-
export type
|
17
|
+
export type SqliteDbSession = {
|
19
18
|
changeset: () => Uint8Array | undefined
|
20
19
|
finish: () => void
|
21
20
|
}
|
22
21
|
|
23
|
-
export type
|
22
|
+
export type SqliteDbChangeset = {
|
24
23
|
// TODO combining changesets (requires changes in the SQLite WASM binding)
|
25
|
-
invert: () =>
|
24
|
+
invert: () => SqliteDbChangeset
|
26
25
|
apply: () => void
|
27
26
|
}
|
28
27
|
|
29
|
-
export
|
28
|
+
export interface ClientSession {
|
30
29
|
/** SQLite database with synchronous API running in the same thread (usually in-memory) */
|
31
|
-
|
32
|
-
devtools: { enabled:
|
30
|
+
sqliteDb: SqliteDb
|
31
|
+
devtools: { enabled: false } | { enabled: true; pullLatch: Effect.Latch; pushLatch: Effect.Latch }
|
33
32
|
clientId: string
|
34
33
|
sessionId: string
|
35
34
|
/** Status info whether current session is leader or not */
|
@@ -39,22 +38,33 @@ export type ClientSession = {
|
|
39
38
|
leaderThread: ClientSessionLeaderThreadProxy
|
40
39
|
}
|
41
40
|
|
42
|
-
export
|
41
|
+
export interface ClientSessionLeaderThreadProxy {
|
43
42
|
mutations: {
|
44
43
|
pull: Stream.Stream<{ payload: PayloadUpstream; remaining: number }, UnexpectedError>
|
45
44
|
push(batch: ReadonlyArray<MutationEvent.AnyEncoded>): Effect.Effect<void, UnexpectedError | InvalidPushError>
|
46
|
-
|
45
|
+
}
|
46
|
+
/** The initial state after the leader thread has booted */
|
47
|
+
readonly initialState: {
|
48
|
+
/** The latest mutation event id during boot. Used for the client session to resume syncing. */
|
49
|
+
readonly leaderHead: EventId.EventId
|
50
|
+
/** The migrations report from the leader thread */
|
51
|
+
readonly migrationsReport: MigrationsReport
|
47
52
|
}
|
48
53
|
export: Effect.Effect<Uint8Array, UnexpectedError>
|
49
54
|
getMutationLogData: Effect.Effect<Uint8Array, UnexpectedError>
|
50
55
|
getSyncState: Effect.Effect<SyncState, UnexpectedError>
|
51
56
|
networkStatus: SubscriptionRef.SubscriptionRef<NetworkStatus>
|
52
57
|
/** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
|
53
|
-
sendDevtoolsMessage: (message: Devtools.
|
58
|
+
sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnexpectedError>
|
54
59
|
}
|
55
60
|
|
56
|
-
|
57
|
-
|
61
|
+
/**
|
62
|
+
* Common interface for SQLite databases used by LiveStore to facilitate a consistent API across different platforms.
|
63
|
+
* Always assumes a synchronous SQLite build with the `bytecode` and `session` extensions enabled.
|
64
|
+
* Can be either in-memory or persisted to disk.
|
65
|
+
*/
|
66
|
+
export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
|
67
|
+
_tag: 'SqliteDb'
|
58
68
|
metadata: TMetadata
|
59
69
|
prepare(queryStr: string): PreparedStatement
|
60
70
|
execute(
|
@@ -64,14 +74,14 @@ export type SynchronousDatabase<TReq = any, TMetadata extends TReq = TReq> = {
|
|
64
74
|
): void
|
65
75
|
select<T>(queryStr: string, bindValues?: PreparedBindValues | undefined): ReadonlyArray<T>
|
66
76
|
export(): Uint8Array
|
67
|
-
import: (data: Uint8Array |
|
77
|
+
import: (data: Uint8Array | SqliteDb<TReq>) => void
|
68
78
|
close(): void
|
69
79
|
destroy(): void
|
70
|
-
session():
|
71
|
-
makeChangeset: (data: Uint8Array) =>
|
80
|
+
session(): SqliteDbSession
|
81
|
+
makeChangeset: (data: Uint8Array) => SqliteDbChangeset
|
72
82
|
}
|
73
83
|
|
74
|
-
export type
|
84
|
+
export type MakeSqliteDb<
|
75
85
|
TReq = { dbPointer: number; persistenceInfo: PersistenceInfo },
|
76
86
|
TInput_ extends { _tag: string } = { _tag: string },
|
77
87
|
TMetadata_ extends TReq = TReq,
|
@@ -81,11 +91,7 @@ export type MakeSynchronousDatabase<
|
|
81
91
|
TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
|
82
92
|
>(
|
83
93
|
input: TInput,
|
84
|
-
) => Effect.Effect<
|
85
|
-
SynchronousDatabase<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>,
|
86
|
-
SqliteError | UnexpectedError,
|
87
|
-
R
|
88
|
-
>
|
94
|
+
) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnexpectedError, R>
|
89
95
|
|
90
96
|
export const PersistenceInfo = Schema.Struct(
|
91
97
|
{
|
@@ -101,12 +107,11 @@ export type ResetMode = 'all-data' | 'only-app-db'
|
|
101
107
|
export const NetworkStatus = Schema.Struct({
|
102
108
|
isConnected: Schema.Boolean,
|
103
109
|
timestampMs: Schema.Number,
|
110
|
+
/** Whether the network status devtools latch is closed. Used to simulate network disconnection. */
|
111
|
+
latchClosed: Schema.Boolean,
|
104
112
|
})
|
105
113
|
|
106
|
-
export type NetworkStatus =
|
107
|
-
isConnected: boolean
|
108
|
-
timestampMs: number
|
109
|
-
}
|
114
|
+
export type NetworkStatus = typeof NetworkStatus.Type
|
110
115
|
|
111
116
|
export const BootStateProgress = Schema.Struct({
|
112
117
|
done: Schema.Number,
|
@@ -196,9 +201,9 @@ export type MigrationHooks = {
|
|
196
201
|
post: MigrationHook
|
197
202
|
}
|
198
203
|
|
199
|
-
export type MigrationHook = (db:
|
204
|
+
export type MigrationHook = (db: SqliteDb) => void | Promise<void> | Effect.Effect<void, unknown>
|
200
205
|
|
201
|
-
export
|
206
|
+
export interface MigrationOptionsFromMutationLog<TSchema extends LiveStoreSchema = LiveStoreSchema> {
|
202
207
|
strategy: 'from-mutation-log'
|
203
208
|
/**
|
204
209
|
* Mutations to exclude in the mutation log
|
@@ -212,13 +217,11 @@ export type MigrationOptionsFromMutationLog<TSchema extends LiveStoreSchema = Li
|
|
212
217
|
}
|
213
218
|
}
|
214
219
|
|
215
|
-
export
|
216
|
-
Devtools.
|
217
|
-
Devtools.MessageFromAppClientSession
|
218
|
-
>
|
220
|
+
export interface ClientSessionDevtoolsChannel
|
221
|
+
extends WebChannel.WebChannel<Devtools.ClientSession.MessageToApp, Devtools.ClientSession.MessageFromApp> {}
|
219
222
|
|
220
223
|
export type ConnectDevtoolsToStore = (
|
221
|
-
storeDevtoolsChannel:
|
224
|
+
storeDevtoolsChannel: ClientSessionDevtoolsChannel,
|
222
225
|
) => Effect.Effect<void, UnexpectedError, Scope.Scope>
|
223
226
|
|
224
227
|
export type Adapter = (opts: {
|
@@ -230,3 +233,19 @@ export type Adapter = (opts: {
|
|
230
233
|
shutdown: (cause: Cause.Cause<any>) => Effect.Effect<void>
|
231
234
|
connectDevtoolsToStore: ConnectDevtoolsToStore
|
232
235
|
}) => Effect.Effect<ClientSession, UnexpectedError, Scope.Scope>
|
236
|
+
|
237
|
+
export const MigrationsReportEntry = Schema.Struct({
|
238
|
+
tableName: Schema.String,
|
239
|
+
hashes: Schema.Struct({
|
240
|
+
expected: Schema.Number,
|
241
|
+
actual: Schema.optional(Schema.Number),
|
242
|
+
}),
|
243
|
+
})
|
244
|
+
|
245
|
+
export const MigrationsReport = Schema.Struct({
|
246
|
+
migrations: Schema.Array(MigrationsReportEntry),
|
247
|
+
})
|
248
|
+
|
249
|
+
export type MigrationsReport = typeof MigrationsReport.Type
|
250
|
+
|
251
|
+
export type MigrationsReportEntry = typeof MigrationsReportEntry.Type
|