@livestore/common 0.3.0-dev.37 → 0.3.0-dev.38
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 +3 -2
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +29 -29
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +24 -24
- package/dist/devtools/devtools-sessioninfo.d.ts +2 -0
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +1 -0
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +48 -32
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +27 -21
- package/dist/devtools/mod.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +21 -13
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/types.d.ts +6 -4
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/make-client-session.d.ts +21 -0
- package/dist/make-client-session.d.ts.map +1 -0
- package/dist/make-client-session.js +51 -0
- package/dist/make-client-session.js.map +1 -0
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +1 -1
- package/dist/materializer-helper.js.map +1 -1
- package/dist/schema/EventDef.d.ts +2 -2
- package/dist/schema/LiveStoreEvent.d.ts +6 -6
- package/dist/schema/state/sqlite/system-tables.d.ts +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts +7 -7
- package/dist/sync/syncstate.d.ts +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -3
- package/src/adapter-types.ts +4 -2
- package/src/devtools/devtools-sessioninfo.ts +1 -0
- package/src/devtools/mod.ts +44 -21
- package/src/index.ts +1 -0
- package/src/leader-thread/leader-worker-devtools.ts +40 -22
- package/src/leader-thread/types.ts +5 -4
- package/src/make-client-session.ts +119 -0
- package/src/materializer-helper.ts +2 -1
- package/src/version.ts +1 -1
- package/dist/derived-mutations.d.ts +0 -77
- package/dist/derived-mutations.d.ts.map +0 -1
- package/dist/derived-mutations.js +0 -54
- package/dist/derived-mutations.js.map +0 -1
- package/dist/derived-mutations.test.d.ts +0 -2
- package/dist/derived-mutations.test.d.ts.map +0 -1
- package/dist/derived-mutations.test.js +0 -93
- package/dist/derived-mutations.test.js.map +0 -1
- package/dist/devtools/devtools-bridge.d.ts +0 -12
- package/dist/devtools/devtools-bridge.d.ts.map +0 -1
- package/dist/devtools/devtools-bridge.js +0 -2
- package/dist/devtools/devtools-bridge.js.map +0 -1
- package/dist/devtools/devtools-window-message.d.ts +0 -29
- package/dist/devtools/devtools-window-message.d.ts.map +0 -1
- package/dist/devtools/devtools-window-message.js +0 -33
- package/dist/devtools/devtools-window-message.js.map +0 -1
- package/dist/devtools/index.d.ts +0 -42
- package/dist/devtools/index.d.ts.map +0 -1
- package/dist/devtools/index.js +0 -49
- package/dist/devtools/index.js.map +0 -1
- package/dist/init-singleton-tables.d.ts +0 -4
- package/dist/init-singleton-tables.d.ts.map +0 -1
- package/dist/init-singleton-tables.js +0 -16
- package/dist/init-singleton-tables.js.map +0 -1
- package/dist/leader-thread/apply-event.d.ts +0 -16
- package/dist/leader-thread/apply-event.d.ts.map +0 -1
- package/dist/leader-thread/apply-event.js +0 -103
- package/dist/leader-thread/apply-event.js.map +0 -1
- package/dist/mutation.d.ts +0 -14
- package/dist/mutation.d.ts.map +0 -1
- package/dist/mutation.js +0 -71
- package/dist/mutation.js.map +0 -1
- package/dist/query-builder/api.d.ts +0 -293
- package/dist/query-builder/api.d.ts.map +0 -1
- package/dist/query-builder/api.js +0 -6
- package/dist/query-builder/api.js.map +0 -1
- package/dist/query-builder/astToSql.d.ts +0 -7
- package/dist/query-builder/astToSql.d.ts.map +0 -1
- package/dist/query-builder/astToSql.js +0 -190
- package/dist/query-builder/astToSql.js.map +0 -1
- package/dist/query-builder/impl.d.ts +0 -7
- package/dist/query-builder/impl.d.ts.map +0 -1
- package/dist/query-builder/impl.js +0 -286
- package/dist/query-builder/impl.js.map +0 -1
- package/dist/query-builder/impl.test.d.ts +0 -87
- package/dist/query-builder/impl.test.d.ts.map +0 -1
- package/dist/query-builder/impl.test.js +0 -554
- package/dist/query-builder/impl.test.js.map +0 -1
- package/dist/query-builder/mod.d.ts +0 -17
- package/dist/query-builder/mod.d.ts.map +0 -1
- package/dist/query-builder/mod.js +0 -17
- package/dist/query-builder/mod.js.map +0 -1
- package/dist/query-info.d.ts +0 -38
- package/dist/query-info.d.ts.map +0 -1
- package/dist/query-info.js +0 -7
- package/dist/query-info.js.map +0 -1
- package/dist/rehydrate-from-eventlog.d.ts +0 -14
- package/dist/rehydrate-from-eventlog.d.ts.map +0 -1
- package/dist/rehydrate-from-eventlog.js +0 -64
- package/dist/rehydrate-from-eventlog.js.map +0 -1
- package/dist/rehydrate-from-mutationlog.d.ts +0 -14
- package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
- package/dist/rehydrate-from-mutationlog.js +0 -72
- package/dist/rehydrate-from-mutationlog.js.map +0 -1
- package/dist/schema/client-document-def.d.ts +0 -223
- package/dist/schema/client-document-def.d.ts.map +0 -1
- package/dist/schema/client-document-def.js +0 -170
- package/dist/schema/client-document-def.js.map +0 -1
- package/dist/schema/client-document-def.test.d.ts +0 -2
- package/dist/schema/client-document-def.test.d.ts.map +0 -1
- package/dist/schema/client-document-def.test.js +0 -201
- package/dist/schema/client-document-def.test.js.map +0 -1
- package/dist/schema/db-schema/ast/sqlite.d.ts +0 -69
- package/dist/schema/db-schema/ast/sqlite.d.ts.map +0 -1
- package/dist/schema/db-schema/ast/sqlite.js +0 -71
- package/dist/schema/db-schema/ast/sqlite.js.map +0 -1
- package/dist/schema/db-schema/ast/validate.d.ts +0 -3
- package/dist/schema/db-schema/ast/validate.d.ts.map +0 -1
- package/dist/schema/db-schema/ast/validate.js +0 -12
- package/dist/schema/db-schema/ast/validate.js.map +0 -1
- package/dist/schema/db-schema/dsl/field-defs.d.ts +0 -90
- package/dist/schema/db-schema/dsl/field-defs.d.ts.map +0 -1
- package/dist/schema/db-schema/dsl/field-defs.js +0 -87
- package/dist/schema/db-schema/dsl/field-defs.js.map +0 -1
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts +0 -2
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts.map +0 -1
- package/dist/schema/db-schema/dsl/field-defs.test.js +0 -29
- package/dist/schema/db-schema/dsl/field-defs.test.js.map +0 -1
- package/dist/schema/db-schema/dsl/mod.d.ts +0 -90
- package/dist/schema/db-schema/dsl/mod.d.ts.map +0 -1
- package/dist/schema/db-schema/dsl/mod.js +0 -41
- package/dist/schema/db-schema/dsl/mod.js.map +0 -1
- package/dist/schema/db-schema/hash.d.ts +0 -2
- package/dist/schema/db-schema/hash.d.ts.map +0 -1
- package/dist/schema/db-schema/hash.js +0 -14
- package/dist/schema/db-schema/hash.js.map +0 -1
- package/dist/schema/db-schema/mod.d.ts +0 -3
- package/dist/schema/db-schema/mod.d.ts.map +0 -1
- package/dist/schema/db-schema/mod.js +0 -3
- package/dist/schema/db-schema/mod.js.map +0 -1
- package/dist/schema/index.d.ts +0 -62
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -67
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/mutations.d.ts +0 -227
- package/dist/schema/mutations.d.ts.map +0 -1
- package/dist/schema/mutations.js +0 -68
- package/dist/schema/mutations.js.map +0 -1
- package/dist/schema/schema-helpers.d.ts +0 -4
- package/dist/schema/schema-helpers.d.ts.map +0 -1
- package/dist/schema/schema-helpers.js +0 -30
- package/dist/schema/schema-helpers.js.map +0 -1
- package/dist/schema/sqlite-state.d.ts +0 -12
- package/dist/schema/sqlite-state.d.ts.map +0 -1
- package/dist/schema/sqlite-state.js +0 -36
- package/dist/schema/sqlite-state.js.map +0 -1
- package/dist/schema/state/sqlite/sqlite-state.d.ts +0 -12
- package/dist/schema/state/sqlite/sqlite-state.d.ts.map +0 -1
- package/dist/schema/state/sqlite/sqlite-state.js +0 -36
- package/dist/schema/state/sqlite/sqlite-state.js.map +0 -1
- package/dist/schema/state/state.d.ts +0 -3
- package/dist/schema/state/state.d.ts.map +0 -1
- package/dist/schema/state/state.js +0 -3
- package/dist/schema/state/state.js.map +0 -1
- package/dist/schema/state.d.ts +0 -3
- package/dist/schema/state.d.ts.map +0 -1
- package/dist/schema/state.js +0 -3
- package/dist/schema/state.js.map +0 -1
- package/dist/schema/system-tables.d.ts +0 -27
- package/dist/schema/system-tables.d.ts.map +0 -1
- package/dist/schema/system-tables.js +0 -86
- package/dist/schema/system-tables.js.map +0 -1
- package/dist/schema/table-def.d.ts +0 -84
- package/dist/schema/table-def.d.ts.map +0 -1
- package/dist/schema/table-def.js +0 -36
- package/dist/schema/table-def.js.map +0 -1
- package/dist/schema/view.d.ts +0 -3
- package/dist/schema/view.d.ts.map +0 -1
- package/dist/schema/view.js +0 -3
- package/dist/schema/view.js.map +0 -1
- package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
- package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
- package/dist/schema-management/validate-mutation-defs.js +0 -39
- package/dist/schema-management/validate-mutation-defs.js.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.d.ts +0 -73
- package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.js +0 -161
- package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
- package/dist/sync/next-mutation-event-id-pair.d.ts +0 -14
- package/dist/sync/next-mutation-event-id-pair.d.ts.map +0 -1
- package/dist/sync/next-mutation-event-id-pair.js +0 -13
- package/dist/sync/next-mutation-event-id-pair.js.map +0 -1
- package/src/devtools/devtools-window-message.ts +0 -27
package/dist/query-info.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"query-info.js","sourceRoot":"","sources":["../src/query-info.ts"],"names":[],"mappings":";AAyEA,wEAAwE;AACxE,mIAAmI;AACnI,gBAAgB;AAChB,mBAAmB;AACnB,IAAI"}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import { Effect } from '@livestore/utils/effect';
|
2
|
-
import { type SqliteDb, UnexpectedError } from './adapter-types.js';
|
3
|
-
import type { ApplyEvent } from './leader-thread/mod.js';
|
4
|
-
import type { LiveStoreSchema } from './schema/mod.js';
|
5
|
-
export declare const rematerializeFromEventlog: ({ dbEventlog, schema, onProgress, applyEvent, }: {
|
6
|
-
dbEventlog: SqliteDb;
|
7
|
-
schema: LiveStoreSchema;
|
8
|
-
onProgress: (_: {
|
9
|
-
done: number;
|
10
|
-
total: number;
|
11
|
-
}) => Effect.Effect<void>;
|
12
|
-
applyEvent: ApplyEvent;
|
13
|
-
}) => Effect.Effect<void, UnexpectedError | import("./adapter-types.js").SqliteError, never>;
|
14
|
-
//# sourceMappingURL=rehydrate-from-eventlog.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"rehydrate-from-eventlog.d.ts","sourceRoot":"","sources":["../src/rehydrate-from-eventlog.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAE/E,OAAO,EAAE,KAAK,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAKhE,eAAO,MAAM,yBAAyB,GAAI,iDAOvC;IACD,UAAU,EAAE,QAAQ,CAAA;IAEpB,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvE,UAAU,EAAE,UAAU,CAAA;CACvB,2FA2FE,CAAA"}
|
@@ -1,64 +0,0 @@
|
|
1
|
-
import { memoizeByRef } from '@livestore/utils';
|
2
|
-
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect';
|
3
|
-
import { UnexpectedError } from './adapter-types.js';
|
4
|
-
import { EventId, getEventDef, LiveStoreEvent, SystemTables } from './schema/mod.js';
|
5
|
-
import { sql } from './util.js';
|
6
|
-
export const rematerializeFromEventlog = ({ dbEventlog,
|
7
|
-
// TODO re-use this db when bringing back the boot in-memory db implementation
|
8
|
-
// db,
|
9
|
-
schema, onProgress, applyEvent, }) => Effect.gen(function* () {
|
10
|
-
const eventsCount = dbEventlog.select(`SELECT COUNT(*) AS count FROM ${SystemTables.EVENTLOG_META_TABLE}`)[0].count;
|
11
|
-
const hashEvent = memoizeByRef((event) => Schema.hash(event.schema));
|
12
|
-
const processEvent = (row) => Effect.gen(function* () {
|
13
|
-
const eventDef = getEventDef(schema, row.name);
|
14
|
-
if (hashEvent(eventDef.eventDef) !== row.schemaHash) {
|
15
|
-
yield* Effect.logWarning(`Schema hash mismatch for mutation ${row.name}. Trying to apply mutation anyway.`);
|
16
|
-
}
|
17
|
-
const args = JSON.parse(row.argsJson);
|
18
|
-
// Checking whether the schema has changed in an incompatible way
|
19
|
-
yield* Schema.decodeUnknown(eventDef.eventDef.schema)(args).pipe(Effect.mapError((cause) => UnexpectedError.make({
|
20
|
-
cause,
|
21
|
-
note: `\
|
22
|
-
There was an error during rehydrating from the eventlog while decoding
|
23
|
-
the persisted mutation event args for mutation "${row.name}".
|
24
|
-
This likely means the schema has changed in an incompatible way.
|
25
|
-
`,
|
26
|
-
})));
|
27
|
-
const eventEncoded = LiveStoreEvent.EncodedWithMeta.make({
|
28
|
-
id: { global: row.idGlobal, client: row.idClient },
|
29
|
-
parentId: { global: row.parentIdGlobal, client: row.parentIdClient },
|
30
|
-
name: row.name,
|
31
|
-
args,
|
32
|
-
clientId: row.clientId,
|
33
|
-
sessionId: row.sessionId,
|
34
|
-
});
|
35
|
-
yield* applyEvent(eventEncoded, { skipEventlog: true });
|
36
|
-
}).pipe(Effect.withSpan(`@livestore/common:rematerializeFromEventlog:processEvent`));
|
37
|
-
const CHUNK_SIZE = 100;
|
38
|
-
const stmt = dbEventlog.prepare(sql `\
|
39
|
-
SELECT * FROM ${SystemTables.EVENTLOG_META_TABLE}
|
40
|
-
WHERE idGlobal > $idGlobal OR (idGlobal = $idGlobal AND idClient > $idClient)
|
41
|
-
ORDER BY idGlobal ASC, idClient ASC
|
42
|
-
LIMIT ${CHUNK_SIZE}
|
43
|
-
`);
|
44
|
-
let processedEvents = 0;
|
45
|
-
yield* Stream.unfoldChunk({ _tag: 'Initial ' }, (item) => {
|
46
|
-
// End stream if no more rows
|
47
|
-
if (Chunk.isChunk(item) && item.length === 0)
|
48
|
-
return Option.none();
|
49
|
-
const lastId = Chunk.isChunk(item)
|
50
|
-
? Chunk.last(item).pipe(Option.map((_) => ({ global: _.idGlobal, client: _.idClient })), Option.getOrElse(() => EventId.ROOT))
|
51
|
-
: EventId.ROOT;
|
52
|
-
const nextItem = Chunk.fromIterable(stmt.select({
|
53
|
-
$idGlobal: lastId?.global,
|
54
|
-
$idClient: lastId?.client,
|
55
|
-
}));
|
56
|
-
const prevItem = Chunk.isChunk(item) ? item : Chunk.empty();
|
57
|
-
return Option.some([prevItem, nextItem]);
|
58
|
-
}).pipe(Stream.bufferChunks({ capacity: 2 }), Stream.tap((row) => Effect.gen(function* () {
|
59
|
-
yield* processEvent(row);
|
60
|
-
processedEvents++;
|
61
|
-
yield* onProgress({ done: processedEvents, total: eventsCount });
|
62
|
-
})), Stream.runDrain);
|
63
|
-
}).pipe(Effect.withPerformanceMeasure('@livestore/common:rematerializeFromEventlog'), Effect.withSpan('@livestore/common:rematerializeFromEventlog'));
|
64
|
-
//# sourceMappingURL=rehydrate-from-eventlog.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"rehydrate-from-eventlog.js","sourceRoot":"","sources":["../src/rehydrate-from-eventlog.ts"],"names":[],"mappings":"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"}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import { Effect } from '@livestore/utils/effect';
|
2
|
-
import { type MigrationOptionsFromMutationLog, type SynchronousDatabase, UnexpectedError } from './adapter-types.js';
|
3
|
-
import type { LiveStoreSchema } from './schema/index.js';
|
4
|
-
export declare const rehydrateFromMutationLog: ({ logDb, db, schema, migrationOptions, onProgress, }: {
|
5
|
-
logDb: SynchronousDatabase;
|
6
|
-
db: SynchronousDatabase;
|
7
|
-
schema: LiveStoreSchema;
|
8
|
-
migrationOptions: MigrationOptionsFromMutationLog;
|
9
|
-
onProgress: (_: {
|
10
|
-
done: number;
|
11
|
-
total: number;
|
12
|
-
}) => Effect.Effect<void>;
|
13
|
-
}) => Effect.Effect<void, UnexpectedError, never>;
|
14
|
-
//# sourceMappingURL=rehydrate-from-mutationlog.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"rehydrate-from-mutationlog.d.ts","sourceRoot":"","sources":["../src/rehydrate-from-mutationlog.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAE/E,OAAO,EAAE,KAAK,+BAA+B,EAAE,KAAK,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpH,OAAO,KAAK,EAAE,eAAe,EAAkD,MAAM,mBAAmB,CAAA;AAKxG,eAAO,MAAM,wBAAwB,GAAI,sDAMtC;IACD,KAAK,EAAE,mBAAmB,CAAA;IAC1B,EAAE,EAAE,mBAAmB,CAAA;IACvB,MAAM,EAAE,eAAe,CAAA;IACvB,gBAAgB,EAAE,+BAA+B,CAAA;IACjD,UAAU,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACxE,gDA4GE,CAAA"}
|
@@ -1,72 +0,0 @@
|
|
1
|
-
import { memoizeByRef, shouldNeverHappen } from '@livestore/utils';
|
2
|
-
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect';
|
3
|
-
import { UnexpectedError } from './adapter-types.js';
|
4
|
-
import { getExecArgsFromMutation } from './mutation.js';
|
5
|
-
import { MUTATION_LOG_META_TABLE } from './schema/index.js';
|
6
|
-
import { sql } from './util.js';
|
7
|
-
export const rehydrateFromMutationLog = ({ logDb, db, schema, migrationOptions, onProgress, }) => Effect.gen(function* () {
|
8
|
-
const mutationsCount = logDb.select(`SELECT COUNT(*) AS count FROM ${MUTATION_LOG_META_TABLE}`)[0].count;
|
9
|
-
const hashMutation = memoizeByRef((mutation) => Schema.hash(mutation.schema));
|
10
|
-
const processMutation = (row) => Effect.gen(function* () {
|
11
|
-
const mutationDef = schema.mutations.get(row.mutation) ?? shouldNeverHappen(`Unknown mutation ${row.mutation}`);
|
12
|
-
if (migrationOptions.excludeMutations?.has(row.mutation) === true)
|
13
|
-
return;
|
14
|
-
if (hashMutation(mutationDef) !== row.schemaHash) {
|
15
|
-
yield* Effect.logWarning(`Schema hash mismatch for mutation ${row.mutation}. Trying to apply mutation anyway.`);
|
16
|
-
}
|
17
|
-
const argsDecoded = yield* Schema.decodeUnknown(Schema.parseJson(mutationDef.schema))(row.argsJson).pipe(Effect.mapError((cause) => UnexpectedError.make({
|
18
|
-
cause,
|
19
|
-
note: `\
|
20
|
-
There was an error during rehydrating from the mutation log while decoding
|
21
|
-
the persisted mutation event args for mutation "${row.mutation}".
|
22
|
-
This likely means the schema has changed in an incompatible way.
|
23
|
-
`,
|
24
|
-
})));
|
25
|
-
const mutationEventDecoded = {
|
26
|
-
id: { global: row.idGlobal, local: row.idLocal },
|
27
|
-
parentId: { global: row.parentIdGlobal, local: row.parentIdLocal },
|
28
|
-
mutation: row.mutation,
|
29
|
-
args: argsDecoded,
|
30
|
-
};
|
31
|
-
const execArgsArr = getExecArgsFromMutation({ mutationDef, mutationEventDecoded });
|
32
|
-
const makeExecuteOptions = (statementSql, bindValues) => ({
|
33
|
-
onRowsChanged: (rowsChanged) => {
|
34
|
-
if (rowsChanged === 0 && migrationOptions.logging?.excludeAffectedRows?.(statementSql) !== true) {
|
35
|
-
console.warn(`Mutation "${mutationDef.name}" did not affect any rows:`, statementSql, bindValues);
|
36
|
-
}
|
37
|
-
},
|
38
|
-
});
|
39
|
-
for (const { statementSql, bindValues } of execArgsArr) {
|
40
|
-
// TODO cache prepared statements for mutations
|
41
|
-
db.execute(statementSql, bindValues, import.meta.env.DEV ? makeExecuteOptions(statementSql, bindValues) : undefined);
|
42
|
-
// console.log(`Re-executed mutation ${mutationSql}`, bindValues)
|
43
|
-
}
|
44
|
-
}).pipe(Effect.withSpan(`@livestore/common:rehydrateFromMutationLog:processMutation`));
|
45
|
-
const CHUNK_SIZE = 100;
|
46
|
-
const stmt = logDb.prepare(sql `\
|
47
|
-
SELECT * FROM ${MUTATION_LOG_META_TABLE}
|
48
|
-
WHERE idGlobal > COALESCE($idGlobal, '') AND idLocal > COALESCE($idLocal, '')
|
49
|
-
ORDER BY idGlobal ASC, idLocal ASC
|
50
|
-
LIMIT ${CHUNK_SIZE}
|
51
|
-
`);
|
52
|
-
let processedMutations = 0;
|
53
|
-
yield* Stream.unfoldChunk({ _tag: 'Initial ' }, (item) => {
|
54
|
-
// End stream if no more rows
|
55
|
-
if (Chunk.isChunk(item) && item.length === 0)
|
56
|
-
return Option.none();
|
57
|
-
const lastId = Chunk.isChunk(item)
|
58
|
-
? Chunk.last(item).pipe(Option.map((_) => ({ global: _.idGlobal, local: _.idLocal })), Option.getOrUndefined)
|
59
|
-
: undefined;
|
60
|
-
const nextItem = Chunk.fromIterable(stmt.select({
|
61
|
-
$idGlobal: lastId?.global,
|
62
|
-
$idLocal: lastId?.local,
|
63
|
-
}));
|
64
|
-
const prevItem = Chunk.isChunk(item) ? item : Chunk.empty();
|
65
|
-
return Option.some([prevItem, nextItem]);
|
66
|
-
}).pipe(Stream.bufferChunks({ capacity: 2 }), Stream.tap((row) => Effect.gen(function* () {
|
67
|
-
yield* processMutation(row);
|
68
|
-
processedMutations++;
|
69
|
-
yield* onProgress({ done: processedMutations, total: mutationsCount });
|
70
|
-
})), Stream.runDrain);
|
71
|
-
}).pipe(Effect.withPerformanceMeasure('@livestore/common:rehydrateFromMutationLog'), Effect.withSpan('@livestore/common:rehydrateFromMutationLog'));
|
72
|
-
//# sourceMappingURL=rehydrate-from-mutationlog.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"rehydrate-from-mutationlog.js","sourceRoot":"","sources":["../src/rehydrate-from-mutationlog.ts"],"names":[],"mappings":"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"}
|
@@ -1,223 +0,0 @@
|
|
1
|
-
import type { Option, Types } from '@livestore/utils/effect';
|
2
|
-
import { Schema } from '@livestore/utils/effect';
|
3
|
-
import { SessionIdSymbol } from '../adapter-types.js';
|
4
|
-
import type { QueryBuilder } from './state/sqlite/query-builder/mod.ts';
|
5
|
-
import { SqliteDsl } from './state/sqlite/db-schema/mod.ts';
|
6
|
-
import type { EventDef, Materializer } from './EventDef.js';
|
7
|
-
import type { TableDef, TableDefBase } from './table-def.js';
|
8
|
-
/**
|
9
|
-
* Special:
|
10
|
-
* - Synced across client sessions (e.g. tabs) but not across different clients
|
11
|
-
* - Derived setters
|
12
|
-
* - Emits client-only events
|
13
|
-
* - Has implicit setter-reducers
|
14
|
-
* - Similar to `React.useState` (except it's persisted)
|
15
|
-
*
|
16
|
-
* Careful:
|
17
|
-
* - When changing the table definitions in a non-backwards compatible way, the state might be lost without
|
18
|
-
* explicit reducers to handle the old auto-generated events
|
19
|
-
*/
|
20
|
-
export declare const clientDocument: <TName extends string, TType, TEncoded, const TOptions extends ClientDocumentTableOptions.Input<NoInfer<TType>>>({ name, schema: valueSchema, ...inputOptions }: {
|
21
|
-
name: TName;
|
22
|
-
schema: Schema.Schema<TType, TEncoded>;
|
23
|
-
} & TOptions) => ClientDocumentTableDef<TName, TType, TEncoded, Types.Simplify<ClientDocumentTableOptions.WithDefaults<TOptions>>>;
|
24
|
-
export declare const deriveEventAndMaterializer: ({ name, valueSchema, defaultValue, partialSet, }: {
|
25
|
-
name: string;
|
26
|
-
valueSchema: Schema.Schema<any, any>;
|
27
|
-
defaultValue: any;
|
28
|
-
partialSet: boolean;
|
29
|
-
}) => {
|
30
|
-
eventDef: EventDef<`${string}Set`, {
|
31
|
-
readonly value: any;
|
32
|
-
readonly id: string | typeof SessionIdSymbol;
|
33
|
-
}, {
|
34
|
-
readonly value: any;
|
35
|
-
readonly id: string | typeof SessionIdSymbol;
|
36
|
-
}, true>;
|
37
|
-
materializer: Materializer<EventDef<`${string}Set`, {
|
38
|
-
readonly value: any;
|
39
|
-
readonly id: string | typeof SessionIdSymbol;
|
40
|
-
}, {
|
41
|
-
readonly value: any;
|
42
|
-
readonly id: string | typeof SessionIdSymbol;
|
43
|
-
}, true>>;
|
44
|
-
};
|
45
|
-
export declare const tableIsClientDocumentTable: <TTableDef extends TableDefBase>(tableDef: TTableDef) => tableDef is TTableDef & {
|
46
|
-
options: {
|
47
|
-
isClientDocumentTable: true;
|
48
|
-
};
|
49
|
-
} & ClientDocumentTableDef.Trait<TTableDef["sqliteDef"]["name"], any, any, any>;
|
50
|
-
export type ClientDocumentTableOptions<TType> = {
|
51
|
-
partialSet: boolean;
|
52
|
-
default: {
|
53
|
-
id: SessionIdSymbol | string | undefined;
|
54
|
-
value: TType;
|
55
|
-
};
|
56
|
-
};
|
57
|
-
export declare namespace ClientDocumentTableOptions {
|
58
|
-
type Input<TType> = {
|
59
|
-
/**
|
60
|
-
* Whether to allow for partial set operations. Only applies if the schema is a struct.
|
61
|
-
*
|
62
|
-
* @default true
|
63
|
-
*/
|
64
|
-
partialSet?: boolean;
|
65
|
-
default: {
|
66
|
-
id?: SessionIdSymbol | string | undefined;
|
67
|
-
value: TType;
|
68
|
-
};
|
69
|
-
};
|
70
|
-
type WithDefaults<TInput extends Input<any>> = {
|
71
|
-
partialSet: TInput['partialSet'] extends false ? false : true;
|
72
|
-
default: {
|
73
|
-
id: TInput['default']['id'] extends string | SessionIdSymbol ? TInput['default']['id'] : undefined;
|
74
|
-
value: TInput['default']['value'];
|
75
|
-
};
|
76
|
-
};
|
77
|
-
}
|
78
|
-
export type ClientDocumentTableDef<TName extends string, TType, TEncoded, TOptions extends ClientDocumentTableOptions<TType>> = TableDef<ClientDocumentTableDef.SqliteDef<TName, TType>, {
|
79
|
-
isClientDocumentTable: true;
|
80
|
-
}> & ClientDocumentTableDef.Trait<TName, TType, TEncoded, TOptions>;
|
81
|
-
export declare namespace ClientDocumentTableDef {
|
82
|
-
type Any = ClientDocumentTableDef<any, any, any, any>;
|
83
|
-
type SqliteDef<TName extends string, TType> = SqliteDsl.TableDefinition<TName, {
|
84
|
-
id: SqliteDsl.ColumnDefinition<string, string> & {
|
85
|
-
default: Option.Some<string>;
|
86
|
-
};
|
87
|
-
value: SqliteDsl.ColumnDefinition<string, TType> & {
|
88
|
-
default: Option.Some<TType>;
|
89
|
-
};
|
90
|
-
}>;
|
91
|
-
type TableDefBase_<TName extends string, TType> = TableDefBase<SqliteDef<TName, TType>, {
|
92
|
-
isClientDocumentTable: true;
|
93
|
-
}>;
|
94
|
-
interface Trait<TName extends string, TType, TEncoded, TOptions extends ClientDocumentTableOptions<TType>> {
|
95
|
-
/**
|
96
|
-
* Get the current value of the client document table.
|
97
|
-
*
|
98
|
-
* @example
|
99
|
-
* ```ts
|
100
|
-
* const someDocumentTable = State.SQLite.clientDocument({
|
101
|
-
* name: 'SomeDocumentTable',
|
102
|
-
* schema: Schema.Struct({
|
103
|
-
* someField: Schema.String,
|
104
|
-
* }),
|
105
|
-
* default: { value: { someField: 'some-value' } },
|
106
|
-
* })
|
107
|
-
*
|
108
|
-
* const value$ = queryDb(someDocumentTable.get('some-id'))
|
109
|
-
*
|
110
|
-
* // When you've set a default id, you can omit the id argument
|
111
|
-
*
|
112
|
-
* const uiState = State.SQLite.clientDocument({
|
113
|
-
* name: 'UiState',
|
114
|
-
* schema: Schema.Struct({
|
115
|
-
* someField: Schema.String,
|
116
|
-
* }),
|
117
|
-
* default: { id: SessionIdSymbol, value: { someField: 'some-value' } },
|
118
|
-
* })
|
119
|
-
*
|
120
|
-
* const value$ = queryDb(uiState.get())
|
121
|
-
* ```
|
122
|
-
*/
|
123
|
-
readonly get: MakeGetQueryBuilder<TName, TType, TOptions>;
|
124
|
-
/**
|
125
|
-
* Derived event definition for setting the value of the client document table.
|
126
|
-
* If the document doesn't exist yet, the first .set event will create it.
|
127
|
-
*
|
128
|
-
* @example
|
129
|
-
* ```ts
|
130
|
-
* const someDocumentTable = State.SQLite.clientDocument({
|
131
|
-
* name: 'SomeDocumentTable',
|
132
|
-
* schema: Schema.Struct({
|
133
|
-
* someField: Schema.String,
|
134
|
-
* someOtherField: Schema.String,
|
135
|
-
* }),
|
136
|
-
* default: { value: { someField: 'some-default-value', someOtherField: 'some-other-default-value' } },
|
137
|
-
* })
|
138
|
-
*
|
139
|
-
* const setEventDef = store.commit(someDocumentTable.set({ someField: 'explicit-value' }, 'some-id'))
|
140
|
-
* // Will commit an event with the following payload:
|
141
|
-
* // { id: 'some-id', value: { someField: 'explicit-value', someOtherField: 'some-other-default-value' } }
|
142
|
-
* ```
|
143
|
-
*
|
144
|
-
* Similar to `.get`, you can omit the id argument if you've set a default id.
|
145
|
-
*
|
146
|
-
* @example
|
147
|
-
* ```ts
|
148
|
-
* const uiState = State.SQLite.clientDocument({
|
149
|
-
* name: 'UiState',
|
150
|
-
* schema: Schema.Struct({ someField: Schema.String }),
|
151
|
-
* default: { id: SessionIdSymbol, value: { someField: 'some-default-value' } },
|
152
|
-
* })
|
153
|
-
*
|
154
|
-
* const setEventDef = store.commit(uiState.set({ someField: 'explicit-value' }))
|
155
|
-
* // Will commit an event with the following payload:
|
156
|
-
* // { id: '...', value: { someField: 'explicit-value' } }
|
157
|
-
* // ^^^
|
158
|
-
* // Automatically replaced with the client session id
|
159
|
-
* ```
|
160
|
-
*/
|
161
|
-
readonly set: SetEventDefLike<TName, TType, TOptions>;
|
162
|
-
readonly Value: TType;
|
163
|
-
readonly valueSchema: Schema.Schema<TType, TEncoded>;
|
164
|
-
readonly default: TOptions['default'];
|
165
|
-
readonly [ClientDocumentTableDefSymbol]: {
|
166
|
-
readonly options: TOptions;
|
167
|
-
readonly derived: {
|
168
|
-
readonly setEventDef: SetEventDef<TName, TType, TOptions>;
|
169
|
-
readonly setMaterializer: Materializer<SetEventDef<TName, TType, TOptions>>;
|
170
|
-
};
|
171
|
-
};
|
172
|
-
}
|
173
|
-
type GetOptions<TTableDef extends TraitAny> = TTableDef extends ClientDocumentTableDef.Trait<any, any, any, infer TOptions> ? TOptions : never;
|
174
|
-
type TraitAny = Trait<any, any, any, any>;
|
175
|
-
type DefaultIdType<TTableDef extends TraitAny> = TTableDef extends ClientDocumentTableDef.Trait<any, any, any, infer TOptions> ? TOptions['default']['id'] extends SessionIdSymbol | string ? TOptions['default']['id'] : never : never;
|
176
|
-
type SetEventDefLike<TName extends string, TType, TOptions extends ClientDocumentTableOptions<TType>> = (TOptions['default']['id'] extends undefined ? (args: TOptions['partialSet'] extends false ? TType : Partial<TType>, id: string | SessionIdSymbol) => {
|
177
|
-
name: `${TName}Set`;
|
178
|
-
args: {
|
179
|
-
id: string;
|
180
|
-
value: TType;
|
181
|
-
};
|
182
|
-
} : (args: TOptions['partialSet'] extends false ? TType : Partial<TType>, id?: string | SessionIdSymbol) => {
|
183
|
-
name: `${TName}Set`;
|
184
|
-
args: {
|
185
|
-
id: string;
|
186
|
-
value: TType;
|
187
|
-
};
|
188
|
-
}) & {
|
189
|
-
readonly name: `${TName}Set`;
|
190
|
-
readonly schema: Schema.Schema<any>;
|
191
|
-
readonly Event: {
|
192
|
-
readonly name: `${TName}Set`;
|
193
|
-
readonly args: {
|
194
|
-
id: string;
|
195
|
-
value: TType;
|
196
|
-
};
|
197
|
-
};
|
198
|
-
readonly options: {
|
199
|
-
derived: true;
|
200
|
-
clientOnly: true;
|
201
|
-
facts: undefined;
|
202
|
-
};
|
203
|
-
};
|
204
|
-
type SetEventDef<TName extends string, TType, TOptions extends ClientDocumentTableOptions<TType>> = EventDef<TName, TOptions['partialSet'] extends false ? {
|
205
|
-
id: string;
|
206
|
-
value: TType;
|
207
|
-
} : {
|
208
|
-
id: string;
|
209
|
-
value: Partial<TType>;
|
210
|
-
}, any, true>;
|
211
|
-
type MakeGetQueryBuilder<TName extends string, TType, TOptions extends ClientDocumentTableOptions<TType>> = TOptions extends ClientDocumentTableOptions<TType> & {
|
212
|
-
default: {
|
213
|
-
id: string | SessionIdSymbol;
|
214
|
-
};
|
215
|
-
} ? (id?: TOptions['default']['id'] | SessionIdSymbol, options?: {
|
216
|
-
default: Partial<TType>;
|
217
|
-
}) => QueryBuilder<TType, ClientDocumentTableDef.TableDefBase_<TName, TType>, QueryBuilder.ApiFeature> : (id: string | SessionIdSymbol, options?: {
|
218
|
-
default: Partial<TType>;
|
219
|
-
}) => QueryBuilder<TType, ClientDocumentTableDef.TableDefBase_<TName, TType>, QueryBuilder.ApiFeature>;
|
220
|
-
}
|
221
|
-
export declare const ClientDocumentTableDefSymbol: unique symbol;
|
222
|
-
export type ClientDocumentTableDefSymbol = typeof ClientDocumentTableDefSymbol;
|
223
|
-
//# sourceMappingURL=client-document-def.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"client-document-def.d.ts","sourceRoot":"","sources":["../../src/schema/client-document-def.ts"],"names":[],"mappings":"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"}
|
@@ -1,170 +0,0 @@
|
|
1
|
-
import { shouldNeverHappen } from '@livestore/utils';
|
2
|
-
import { Schema, SchemaAST } from '@livestore/utils/effect';
|
3
|
-
import { SessionIdSymbol } from '../adapter-types.js';
|
4
|
-
import { QueryBuilderAstSymbol, QueryBuilderTypeId } from '../query-builder/mod.js';
|
5
|
-
import { sql } from '../util.js';
|
6
|
-
import { SqliteDsl } from './db-schema/mod.js';
|
7
|
-
import { defineEvent, defineMaterializer } from './EventDef.js';
|
8
|
-
import { table } from './table-def.js';
|
9
|
-
/**
|
10
|
-
* Special:
|
11
|
-
* - Synced across client sessions (e.g. tabs) but not across different clients
|
12
|
-
* - Derived setters
|
13
|
-
* - Emits client-only events
|
14
|
-
* - Has implicit setter-reducers
|
15
|
-
* - Similar to `React.useState` (except it's persisted)
|
16
|
-
*
|
17
|
-
* Careful:
|
18
|
-
* - When changing the table definitions in a non-backwards compatible way, the state might be lost without
|
19
|
-
* explicit reducers to handle the old auto-generated events
|
20
|
-
*/
|
21
|
-
export const clientDocument = ({ name, schema: valueSchema, ...inputOptions }) => {
|
22
|
-
const options = {
|
23
|
-
partialSet: inputOptions.partialSet ?? true,
|
24
|
-
default: {
|
25
|
-
id: inputOptions.default.id,
|
26
|
-
value: inputOptions.default.value,
|
27
|
-
},
|
28
|
-
};
|
29
|
-
const columns = {
|
30
|
-
id: SqliteDsl.text({ primaryKey: true }),
|
31
|
-
value: SqliteDsl.json({ schema: valueSchema }),
|
32
|
-
};
|
33
|
-
const tableDef = table({ name, columns });
|
34
|
-
// @ts-expect-error TODO properly type this
|
35
|
-
tableDef.options.isClientDocumentTable = true;
|
36
|
-
const { eventDef: derivedSetEventDef, materializer: derivedSetMaterializer } = deriveEventAndMaterializer({
|
37
|
-
name,
|
38
|
-
valueSchema,
|
39
|
-
defaultValue: options.default.value,
|
40
|
-
partialSet: options.partialSet,
|
41
|
-
});
|
42
|
-
const setEventDef = (...args) => {
|
43
|
-
const [value, id = options.default.id] = args;
|
44
|
-
return derivedSetEventDef({ id, value });
|
45
|
-
};
|
46
|
-
Object.defineProperty(setEventDef, 'name', { value: `${name}Set` });
|
47
|
-
Object.defineProperty(setEventDef, 'schema', {
|
48
|
-
value: Schema.Struct({
|
49
|
-
id: Schema.String,
|
50
|
-
value: options.partialSet ? Schema.partial(valueSchema) : valueSchema,
|
51
|
-
}).annotations({ title: `${name}Set:Args` }),
|
52
|
-
});
|
53
|
-
Object.defineProperty(setEventDef, 'options', { value: { derived: true, clientOnly: true, facts: undefined } });
|
54
|
-
const clientDocumentTableDefTrait = {
|
55
|
-
get: makeGetQueryBuilder(() => clientDocumentTableDef),
|
56
|
-
set: setEventDef,
|
57
|
-
Value: 'only-for-type-inference',
|
58
|
-
default: options.default,
|
59
|
-
valueSchema,
|
60
|
-
[ClientDocumentTableDefSymbol]: {
|
61
|
-
derived: {
|
62
|
-
setEventDef: derivedSetEventDef,
|
63
|
-
setMaterializer: derivedSetMaterializer,
|
64
|
-
},
|
65
|
-
options,
|
66
|
-
},
|
67
|
-
};
|
68
|
-
const clientDocumentTableDef = {
|
69
|
-
...tableDef,
|
70
|
-
...clientDocumentTableDefTrait,
|
71
|
-
};
|
72
|
-
return clientDocumentTableDef;
|
73
|
-
};
|
74
|
-
const mergeDefaultValues = (defaultValues, explicitDefaultValues) => {
|
75
|
-
if (typeof defaultValues !== 'object' ||
|
76
|
-
typeof explicitDefaultValues !== 'object' ||
|
77
|
-
defaultValues === null ||
|
78
|
-
explicitDefaultValues === null) {
|
79
|
-
return explicitDefaultValues;
|
80
|
-
}
|
81
|
-
return Object.keys(defaultValues).reduce((acc, key) => {
|
82
|
-
acc[key] = explicitDefaultValues[key] ?? defaultValues[key];
|
83
|
-
return acc;
|
84
|
-
}, {});
|
85
|
-
};
|
86
|
-
export const deriveEventAndMaterializer = ({ name, valueSchema, defaultValue, partialSet, }) => {
|
87
|
-
const derivedSetEventDef = defineEvent({
|
88
|
-
name: `${name}Set`,
|
89
|
-
schema: Schema.Struct({
|
90
|
-
id: Schema.Union(Schema.String, Schema.UniqueSymbolFromSelf(SessionIdSymbol)),
|
91
|
-
value: partialSet ? Schema.partial(valueSchema) : valueSchema,
|
92
|
-
}).annotations({ title: `${name}Set:Args` }),
|
93
|
-
clientOnly: true,
|
94
|
-
derived: true,
|
95
|
-
});
|
96
|
-
const derivedSetMaterializer = defineMaterializer(derivedSetEventDef, ({ id, value }) => {
|
97
|
-
if (id === SessionIdSymbol) {
|
98
|
-
return shouldNeverHappen(`SessionIdSymbol needs to be replaced before materializing the set event`);
|
99
|
-
}
|
100
|
-
// Override the full value if it's not an object or no partial set is allowed
|
101
|
-
const schemaProps = SchemaAST.getPropertySignatures(valueSchema.ast);
|
102
|
-
if (schemaProps.length === 0 || partialSet === false) {
|
103
|
-
const valueColJsonSchema = Schema.parseJson(valueSchema);
|
104
|
-
const encodedInsertValue = Schema.encodeSyncDebug(valueColJsonSchema)(value ?? defaultValue);
|
105
|
-
const encodedUpdateValue = Schema.encodeSyncDebug(valueColJsonSchema)(value);
|
106
|
-
return {
|
107
|
-
sql: `INSERT INTO '${name}' (id, value) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET value = ?`,
|
108
|
-
bindValues: [id, encodedInsertValue, encodedUpdateValue],
|
109
|
-
writeTables: new Set([name]),
|
110
|
-
};
|
111
|
-
}
|
112
|
-
else {
|
113
|
-
const valueColJsonSchema = Schema.parseJson(Schema.partial(valueSchema));
|
114
|
-
const encodedInsertValue = Schema.encodeSyncDebug(valueColJsonSchema)(mergeDefaultValues(defaultValue, value));
|
115
|
-
let jsonSetSql = 'value';
|
116
|
-
const setBindValues = [];
|
117
|
-
const keys = Object.keys(value);
|
118
|
-
const partialUpdateSchema = valueSchema.pipe(Schema.pick(...keys));
|
119
|
-
const encodedPartialUpdate = Schema.encodeSyncDebug(partialUpdateSchema)(value);
|
120
|
-
for (const key in encodedPartialUpdate) {
|
121
|
-
const encodedValueForKey = encodedPartialUpdate[key];
|
122
|
-
// Skipping undefined values
|
123
|
-
if (encodedValueForKey === undefined) {
|
124
|
-
continue;
|
125
|
-
}
|
126
|
-
jsonSetSql = `json_set(${jsonSetSql}, ?, json(?))`;
|
127
|
-
setBindValues.push(`$.${key}`, JSON.stringify(encodedValueForKey));
|
128
|
-
}
|
129
|
-
const onConflictClause = setBindValues.length > 0
|
130
|
-
? `ON CONFLICT (id) DO UPDATE SET value = ${jsonSetSql}`
|
131
|
-
: 'ON CONFLICT (id) DO NOTHING';
|
132
|
-
const sqlQuery = `
|
133
|
-
INSERT INTO '${name}' (id, value)
|
134
|
-
VALUES (?, ?)
|
135
|
-
${onConflictClause}
|
136
|
-
`;
|
137
|
-
return {
|
138
|
-
sql: sqlQuery,
|
139
|
-
bindValues: [id, encodedInsertValue, ...setBindValues],
|
140
|
-
writeTables: new Set([name]),
|
141
|
-
};
|
142
|
-
}
|
143
|
-
});
|
144
|
-
return { eventDef: derivedSetEventDef, materializer: derivedSetMaterializer };
|
145
|
-
};
|
146
|
-
export const tableIsClientDocumentTable = (tableDef) => tableDef.options.isClientDocumentTable === true;
|
147
|
-
const makeGetQueryBuilder = (getTableDef) => {
|
148
|
-
return ((...args) => {
|
149
|
-
const tableDef = getTableDef();
|
150
|
-
const [id = tableDef[ClientDocumentTableDefSymbol].options.default.id, options = {}] = args;
|
151
|
-
const explicitDefaultValues = options.default ?? tableDef[ClientDocumentTableDefSymbol].options.default.value;
|
152
|
-
const ast = {
|
153
|
-
_tag: 'RowQuery',
|
154
|
-
tableDef,
|
155
|
-
id,
|
156
|
-
explicitDefaultValues,
|
157
|
-
};
|
158
|
-
const query = sql `SELECT * FROM '${tableDef.sqliteDef.name}' WHERE id = ?`;
|
159
|
-
return {
|
160
|
-
[QueryBuilderTypeId]: QueryBuilderTypeId,
|
161
|
-
[QueryBuilderAstSymbol]: ast,
|
162
|
-
ResultType: 'only-for-type-inference',
|
163
|
-
asSql: () => ({ query, bindValues: [id] }),
|
164
|
-
toString: () => query.toString(),
|
165
|
-
...{}, // Needed for type cast
|
166
|
-
};
|
167
|
-
});
|
168
|
-
};
|
169
|
-
export const ClientDocumentTableDefSymbol = Symbol('ClientDocumentTableDef');
|
170
|
-
//# sourceMappingURL=client-document-def.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"client-document-def.js","sourceRoot":"","sources":["../../src/schema/client-document-def.ts"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"client-document-def.test.d.ts","sourceRoot":"","sources":["../../src/schema/client-document-def.test.ts"],"names":[],"mappings":""}
|