@livestore/common 0.3.0-dev.27 → 0.3.0-dev.29
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/__tests__/fixture.d.ts +83 -221
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +33 -11
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/adapter-types.d.ts +22 -15
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +15 -2
- package/dist/adapter-types.js.map +1 -1
- package/dist/bounded-collections.d.ts +1 -1
- package/dist/bounded-collections.d.ts.map +1 -1
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +1 -0
- package/dist/debug-info.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +45 -45
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +11 -11
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +25 -12
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +125 -89
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/{apply-mutation.d.ts → apply-event.d.ts} +7 -7
- package/dist/leader-thread/apply-event.d.ts.map +1 -0
- package/dist/leader-thread/apply-event.js +103 -0
- package/dist/leader-thread/apply-event.js.map +1 -0
- package/dist/leader-thread/eventlog.d.ts +27 -0
- package/dist/leader-thread/eventlog.d.ts.map +1 -0
- package/dist/leader-thread/eventlog.js +123 -0
- package/dist/leader-thread/eventlog.js.map +1 -0
- package/dist/leader-thread/leader-worker-devtools.js +18 -18
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +16 -4
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +23 -16
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/mod.d.ts +1 -1
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +1 -1
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +6 -8
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/types.d.ts +11 -11
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/materializer-helper.d.ts +23 -0
- package/dist/materializer-helper.d.ts.map +1 -0
- package/dist/materializer-helper.js +70 -0
- package/dist/materializer-helper.js.map +1 -0
- package/dist/query-builder/api.d.ts +58 -53
- package/dist/query-builder/api.d.ts.map +1 -1
- package/dist/query-builder/api.js +3 -5
- package/dist/query-builder/api.js.map +1 -1
- package/dist/query-builder/astToSql.d.ts.map +1 -1
- package/dist/query-builder/astToSql.js +59 -37
- package/dist/query-builder/astToSql.js.map +1 -1
- package/dist/query-builder/impl.d.ts +2 -3
- package/dist/query-builder/impl.d.ts.map +1 -1
- package/dist/query-builder/impl.js +48 -46
- package/dist/query-builder/impl.js.map +1 -1
- package/dist/query-builder/impl.test.d.ts +86 -1
- package/dist/query-builder/impl.test.d.ts.map +1 -1
- package/dist/query-builder/impl.test.js +244 -36
- package/dist/query-builder/impl.test.js.map +1 -1
- package/dist/rehydrate-from-eventlog.d.ts +14 -0
- package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
- package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +25 -26
- package/dist/rehydrate-from-eventlog.js.map +1 -0
- package/dist/schema/EventDef.d.ts +136 -0
- package/dist/schema/EventDef.d.ts.map +1 -0
- package/dist/schema/EventDef.js +58 -0
- package/dist/schema/EventDef.js.map +1 -0
- package/dist/schema/EventId.d.ts +2 -2
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +8 -2
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/{MutationEvent.d.ts → LiveStoreEvent.d.ts} +56 -56
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
- package/dist/schema/{MutationEvent.js → LiveStoreEvent.js} +25 -25
- package/dist/schema/LiveStoreEvent.js.map +1 -0
- package/dist/schema/client-document-def.d.ts +223 -0
- package/dist/schema/client-document-def.d.ts.map +1 -0
- package/dist/schema/client-document-def.js +170 -0
- package/dist/schema/client-document-def.js.map +1 -0
- package/dist/schema/client-document-def.test.d.ts +2 -0
- package/dist/schema/client-document-def.test.d.ts.map +1 -0
- package/dist/schema/client-document-def.test.js +201 -0
- package/dist/schema/client-document-def.test.js.map +1 -0
- package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/events.d.ts +2 -0
- package/dist/schema/events.d.ts.map +1 -0
- package/dist/schema/events.js +2 -0
- package/dist/schema/events.js.map +1 -0
- package/dist/schema/mod.d.ts +4 -3
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +4 -3
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +27 -23
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +45 -43
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/sqlite-state.d.ts +12 -0
- package/dist/schema/sqlite-state.d.ts.map +1 -0
- package/dist/schema/sqlite-state.js +36 -0
- package/dist/schema/sqlite-state.js.map +1 -0
- package/dist/schema/system-tables.d.ts +67 -98
- package/dist/schema/system-tables.d.ts.map +1 -1
- package/dist/schema/system-tables.js +62 -48
- package/dist/schema/system-tables.js.map +1 -1
- package/dist/schema/table-def.d.ts +26 -96
- package/dist/schema/table-def.d.ts.map +1 -1
- package/dist/schema/table-def.js +16 -64
- package/dist/schema/table-def.js.map +1 -1
- package/dist/schema/view.d.ts +3 -0
- package/dist/schema/view.d.ts.map +1 -0
- package/dist/schema/view.js +3 -0
- package/dist/schema/view.js.map +1 -0
- package/dist/schema-management/common.d.ts +4 -4
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +6 -6
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
- package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
- package/dist/schema-management/validate-mutation-defs.js +17 -17
- package/dist/schema-management/validate-mutation-defs.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +7 -7
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +31 -30
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/next/facts.d.ts +19 -19
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +2 -2
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +3 -3
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +1 -1
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.js +1 -1
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +7 -7
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +5 -5
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +71 -71
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +29 -29
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
- package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +60 -25
- package/dist/sync/next/test/event-fixtures.js.map +1 -0
- package/dist/sync/next/test/mod.d.ts +1 -1
- package/dist/sync/next/test/mod.d.ts.map +1 -1
- package/dist/sync/next/test/mod.js +1 -1
- package/dist/sync/next/test/mod.js.map +1 -1
- package/dist/sync/sync.d.ts +3 -3
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +32 -32
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +31 -25
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +165 -175
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/src/__tests__/fixture.ts +36 -15
- package/src/adapter-types.ts +23 -16
- package/src/debug-info.ts +1 -0
- package/src/devtools/devtools-messages-leader.ts +13 -13
- package/src/index.ts +2 -5
- package/src/leader-thread/LeaderSyncProcessor.ts +183 -122
- package/src/leader-thread/{apply-mutation.ts → apply-event.ts} +50 -74
- package/src/leader-thread/eventlog.ts +199 -0
- package/src/leader-thread/leader-worker-devtools.ts +18 -18
- package/src/leader-thread/make-leader-thread-layer.ts +51 -29
- package/src/leader-thread/mod.ts +1 -1
- package/src/leader-thread/recreate-db.ts +6 -9
- package/src/leader-thread/types.ts +12 -12
- package/src/materializer-helper.ts +110 -0
- package/src/query-builder/api.ts +79 -105
- package/src/query-builder/astToSql.ts +68 -39
- package/src/query-builder/impl.test.ts +264 -42
- package/src/query-builder/impl.ts +72 -56
- package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +33 -40
- package/src/schema/EventDef.ts +216 -0
- package/src/schema/EventId.ts +11 -3
- package/src/schema/{MutationEvent.ts → LiveStoreEvent.ts} +68 -69
- package/src/schema/client-document-def.test.ts +239 -0
- package/src/schema/client-document-def.ts +444 -0
- package/src/schema/db-schema/dsl/mod.ts +0 -1
- package/src/schema/events.ts +1 -0
- package/src/schema/mod.ts +4 -3
- package/src/schema/schema.ts +79 -69
- package/src/schema/sqlite-state.ts +62 -0
- package/src/schema/system-tables.ts +42 -53
- package/src/schema/table-def.ts +53 -209
- package/src/schema/view.ts +2 -0
- package/src/schema-management/common.ts +4 -4
- package/src/schema-management/migrations.ts +8 -9
- package/src/schema-management/validate-mutation-defs.ts +22 -24
- package/src/sync/ClientSessionSyncProcessor.ts +37 -36
- package/src/sync/next/facts.ts +31 -32
- package/src/sync/next/history-dag-common.ts +4 -4
- package/src/sync/next/history-dag.ts +1 -1
- package/src/sync/next/rebase-events.ts +13 -13
- package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
- package/src/sync/next/test/compact-events.test.ts +73 -73
- package/src/sync/next/test/event-fixtures.ts +219 -0
- package/src/sync/next/test/mod.ts +1 -1
- package/src/sync/sync.ts +3 -3
- package/src/sync/syncstate.test.ts +168 -179
- package/src/sync/syncstate.ts +48 -38
- package/src/sync/validate-push-payload.ts +2 -2
- package/src/version.ts +1 -1
- package/tmp/pack.tgz +0 -0
- package/tsconfig.json +1 -0
- package/dist/derived-mutations.d.ts +0 -109
- 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/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-mutation.d.ts.map +0 -1
- package/dist/leader-thread/apply-mutation.js +0 -122
- package/dist/leader-thread/apply-mutation.js.map +0 -1
- package/dist/leader-thread/mutationlog.d.ts +0 -27
- package/dist/leader-thread/mutationlog.d.ts.map +0 -1
- package/dist/leader-thread/mutationlog.js +0 -124
- package/dist/leader-thread/mutationlog.js.map +0 -1
- package/dist/leader-thread/pull-queue-set.d.ts +0 -7
- package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
- package/dist/leader-thread/pull-queue-set.js +0 -38
- package/dist/leader-thread/pull-queue-set.js.map +0 -1
- package/dist/mutation.d.ts +0 -20
- package/dist/mutation.d.ts.map +0 -1
- package/dist/mutation.js +0 -68
- package/dist/mutation.js.map +0 -1
- package/dist/query-info.d.ts +0 -41
- 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-mutationlog.d.ts +0 -15
- package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
- package/dist/rehydrate-from-mutationlog.js.map +0 -1
- package/dist/schema/MutationEvent.d.ts.map +0 -1
- package/dist/schema/MutationEvent.js.map +0 -1
- package/dist/schema/mutations.d.ts +0 -115
- package/dist/schema/mutations.d.ts.map +0 -1
- package/dist/schema/mutations.js +0 -42
- package/dist/schema/mutations.js.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
- package/src/derived-mutations.test.ts +0 -101
- package/src/derived-mutations.ts +0 -170
- package/src/init-singleton-tables.ts +0 -24
- package/src/leader-thread/mutationlog.ts +0 -202
- package/src/mutation.ts +0 -108
- package/src/query-info.ts +0 -83
- package/src/schema/mutations.ts +0 -193
- package/src/sync/next/test/mutation-fixtures.ts +0 -228
package/src/sync/syncstate.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
import { casesHandled, shouldNeverHappen } from '@livestore/utils'
|
1
|
+
import { casesHandled, LS_DEV, shouldNeverHappen } from '@livestore/utils'
|
2
2
|
import { Match, ReadonlyArray, Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
4
|
import { UnexpectedError } from '../adapter-types.js'
|
5
5
|
import * as EventId from '../schema/EventId.js'
|
6
|
-
import * as
|
6
|
+
import * as LiveStoreEvent from '../schema/LiveStoreEvent.js'
|
7
7
|
|
8
8
|
/**
|
9
9
|
* SyncState represents the current sync state of a sync node relative to an upstream node.
|
@@ -43,7 +43,7 @@ import * as MutationEvent from '../schema/MutationEvent.js'
|
|
43
43
|
* handling cases such as upstream rebase, advance and local push.
|
44
44
|
*/
|
45
45
|
export class SyncState extends Schema.Class<SyncState>('SyncState')({
|
46
|
-
pending: Schema.Array(
|
46
|
+
pending: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
47
47
|
/** What this node expects the next upstream node to have as its own local head */
|
48
48
|
upstreamHead: EventId.EventId,
|
49
49
|
/** Equivalent to `pending.at(-1)?.id` if there are pending events */
|
@@ -61,17 +61,17 @@ export class SyncState extends Schema.Class<SyncState>('SyncState')({
|
|
61
61
|
*/
|
62
62
|
export class PayloadUpstreamRebase extends Schema.TaggedStruct('upstream-rebase', {
|
63
63
|
/** Events which need to be rolled back */
|
64
|
-
rollbackEvents: Schema.Array(
|
64
|
+
rollbackEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
65
65
|
/** Events which need to be applied after the rollback (already rebased by the upstream node) */
|
66
|
-
newEvents: Schema.Array(
|
66
|
+
newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
67
67
|
}) {}
|
68
68
|
|
69
69
|
export class PayloadUpstreamAdvance extends Schema.TaggedStruct('upstream-advance', {
|
70
|
-
newEvents: Schema.Array(
|
70
|
+
newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
71
71
|
}) {}
|
72
72
|
|
73
73
|
export class PayloadLocalPush extends Schema.TaggedStruct('local-push', {
|
74
|
-
newEvents: Schema.Array(
|
74
|
+
newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
75
75
|
}) {}
|
76
76
|
|
77
77
|
export class Payload extends Schema.Union(PayloadUpstreamRebase, PayloadUpstreamAdvance, PayloadLocalPush) {}
|
@@ -110,9 +110,9 @@ export class MergeContext extends Schema.Class<MergeContext>('MergeContext')({
|
|
110
110
|
export class MergeResultAdvance extends Schema.Class<MergeResultAdvance>('MergeResultAdvance')({
|
111
111
|
_tag: Schema.Literal('advance'),
|
112
112
|
newSyncState: SyncState,
|
113
|
-
newEvents: Schema.Array(
|
113
|
+
newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
114
114
|
/** Events which were previously pending but are now confirmed */
|
115
|
-
confirmedEvents: Schema.Array(
|
115
|
+
confirmedEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
116
116
|
mergeContext: MergeContext,
|
117
117
|
}) {
|
118
118
|
toJSON = (): any => {
|
@@ -129,9 +129,9 @@ export class MergeResultAdvance extends Schema.Class<MergeResultAdvance>('MergeR
|
|
129
129
|
export class MergeResultRebase extends Schema.Class<MergeResultRebase>('MergeResultRebase')({
|
130
130
|
_tag: Schema.Literal('rebase'),
|
131
131
|
newSyncState: SyncState,
|
132
|
-
newEvents: Schema.Array(
|
132
|
+
newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
133
133
|
/** Events which need to be rolled back */
|
134
|
-
rollbackEvents: Schema.Array(
|
134
|
+
rollbackEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
|
135
135
|
mergeContext: MergeContext,
|
136
136
|
}) {
|
137
137
|
toJSON = (): any => {
|
@@ -172,11 +172,16 @@ export class MergeResult extends Schema.Union(
|
|
172
172
|
MergeResultUnexpectedError,
|
173
173
|
) {}
|
174
174
|
|
175
|
-
const unexpectedError = (cause: unknown): MergeResultUnexpectedError =>
|
176
|
-
|
175
|
+
const unexpectedError = (cause: unknown): MergeResultUnexpectedError => {
|
176
|
+
if (LS_DEV) {
|
177
|
+
debugger
|
178
|
+
}
|
179
|
+
|
180
|
+
return MergeResultUnexpectedError.make({
|
177
181
|
_tag: 'unexpected-error',
|
178
182
|
cause: new UnexpectedError({ cause }),
|
179
183
|
})
|
184
|
+
}
|
180
185
|
|
181
186
|
// TODO Idea: call merge recursively through hierarchy levels
|
182
187
|
/*
|
@@ -194,12 +199,13 @@ export const merge = ({
|
|
194
199
|
}: {
|
195
200
|
syncState: SyncState
|
196
201
|
payload: typeof Payload.Type
|
197
|
-
isClientEvent: (event:
|
198
|
-
isEqualEvent: (a:
|
202
|
+
isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
|
203
|
+
isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean
|
199
204
|
/** This is used in the leader which should ignore client events when receiving an upstream-advance payload */
|
200
205
|
ignoreClientEvents?: boolean
|
201
206
|
}): typeof MergeResult.Type => {
|
202
207
|
validateSyncState(syncState)
|
208
|
+
validatePayload(payload)
|
203
209
|
|
204
210
|
const mergeContext = MergeContext.make({ payload, syncState })
|
205
211
|
|
@@ -269,17 +275,6 @@ export const merge = ({
|
|
269
275
|
)
|
270
276
|
}
|
271
277
|
|
272
|
-
// Validate that the parent id of the first incoming event is known
|
273
|
-
const knownEventGlobalIds = [...syncState.pending].flatMap((e) => [e.id.global, e.parentId.global])
|
274
|
-
knownEventGlobalIds.push(syncState.upstreamHead.global)
|
275
|
-
const firstNewEvent = payload.newEvents[0]!
|
276
|
-
const hasUnknownParentId = knownEventGlobalIds.includes(firstNewEvent.parentId.global) === false
|
277
|
-
if (hasUnknownParentId) {
|
278
|
-
return unexpectedError(
|
279
|
-
`Incoming events must have a known parent id. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`,
|
280
|
-
)
|
281
|
-
}
|
282
|
-
|
283
278
|
const newUpstreamHead = payload.newEvents.at(-1)!.id
|
284
279
|
|
285
280
|
const divergentPendingIndex = findDivergencePoint({
|
@@ -423,10 +418,10 @@ export const findDivergencePoint = ({
|
|
423
418
|
isClientEvent,
|
424
419
|
ignoreClientEvents,
|
425
420
|
}: {
|
426
|
-
existingEvents: ReadonlyArray<
|
427
|
-
incomingEvents: ReadonlyArray<
|
428
|
-
isEqualEvent: (a:
|
429
|
-
isClientEvent: (event:
|
421
|
+
existingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
|
422
|
+
incomingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
|
423
|
+
isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean
|
424
|
+
isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
|
430
425
|
ignoreClientEvents: boolean
|
431
426
|
}): number => {
|
432
427
|
if (ignoreClientEvents) {
|
@@ -458,10 +453,10 @@ const rebaseEvents = ({
|
|
458
453
|
baseEventId,
|
459
454
|
isClientEvent,
|
460
455
|
}: {
|
461
|
-
events: ReadonlyArray<
|
456
|
+
events: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
|
462
457
|
baseEventId: EventId.EventId
|
463
|
-
isClientEvent: (event:
|
464
|
-
}): ReadonlyArray<
|
458
|
+
isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
|
459
|
+
}): ReadonlyArray<LiveStoreEvent.EncodedWithMeta> => {
|
465
460
|
let prevEventId = baseEventId
|
466
461
|
return events.map((event) => {
|
467
462
|
const isLocal = isClientEvent(event)
|
@@ -480,17 +475,30 @@ const rebaseEvents = ({
|
|
480
475
|
*/
|
481
476
|
const _flattenMergeResults = (_updateResults: ReadonlyArray<MergeResult>) => {}
|
482
477
|
|
478
|
+
const validatePayload = (payload: typeof Payload.Type) => {
|
479
|
+
for (let i = 1; i < payload.newEvents.length; i++) {
|
480
|
+
if (EventId.isGreaterThanOrEqual(payload.newEvents[i - 1]!.id, payload.newEvents[i]!.id)) {
|
481
|
+
return unexpectedError(
|
482
|
+
`Events must be ordered in monotonically ascending order by eventId. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`,
|
483
|
+
)
|
484
|
+
}
|
485
|
+
}
|
486
|
+
}
|
487
|
+
|
483
488
|
const validateSyncState = (syncState: SyncState) => {
|
484
489
|
for (let i = 0; i < syncState.pending.length; i++) {
|
485
490
|
const event = syncState.pending[i]!
|
486
491
|
const nextEvent = syncState.pending[i + 1]
|
487
492
|
if (nextEvent === undefined) break // Reached end of chain
|
488
493
|
|
489
|
-
if (EventId.
|
490
|
-
shouldNeverHappen(
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
+
if (EventId.isGreaterThanOrEqual(event.id, nextEvent.id)) {
|
495
|
+
shouldNeverHappen(
|
496
|
+
`Events must be ordered in monotonically ascending order by eventId. Received: [${syncState.pending.map((e) => EventId.toString(e.id)).join(', ')}]`,
|
497
|
+
{
|
498
|
+
event,
|
499
|
+
nextEvent,
|
500
|
+
},
|
501
|
+
)
|
494
502
|
}
|
495
503
|
|
496
504
|
// If the global id has increased, then the client id must be 0
|
@@ -521,6 +529,8 @@ const validateSyncState = (syncState: SyncState) => {
|
|
521
529
|
const validateMergeResult = (mergeResult: typeof MergeResult.Type) => {
|
522
530
|
if (mergeResult._tag === 'unexpected-error' || mergeResult._tag === 'reject') return mergeResult
|
523
531
|
|
532
|
+
validateSyncState(mergeResult.newSyncState)
|
533
|
+
|
524
534
|
// Ensure local head is always greater than or equal to upstream head
|
525
535
|
if (EventId.isGreaterThan(mergeResult.newSyncState.upstreamHead, mergeResult.newSyncState.localHead)) {
|
526
536
|
shouldNeverHappen('Local head must be greater than or equal to upstream head', {
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import { Effect } from '@livestore/utils/effect'
|
2
2
|
|
3
|
-
import type { EventId,
|
3
|
+
import type { EventId, LiveStoreEvent } from '../schema/mod.js'
|
4
4
|
import { InvalidPushError } from './sync.js'
|
5
5
|
|
6
6
|
// TODO proper batch validation
|
7
7
|
export const validatePushPayload = (
|
8
|
-
batch: ReadonlyArray<
|
8
|
+
batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>,
|
9
9
|
currentEventId: EventId.GlobalEventId,
|
10
10
|
) =>
|
11
11
|
Effect.gen(function* () {
|
package/src/version.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
// import packageJson from '../package.json' with { type: 'json' }
|
3
3
|
// export const liveStoreVersion = packageJson.version
|
4
4
|
|
5
|
-
export const liveStoreVersion = '0.3.0-dev.
|
5
|
+
export const liveStoreVersion = '0.3.0-dev.29' as const
|
6
6
|
|
7
7
|
/**
|
8
8
|
* This version number is incremented whenever the internal storage format changes in a breaking way.
|
package/tmp/pack.tgz
CHANGED
Binary file
|
package/tsconfig.json
CHANGED
@@ -1,109 +0,0 @@
|
|
1
|
-
import type { GetValForKey } from '@livestore/utils';
|
2
|
-
import type { SqliteDsl } from './schema/db-schema/mod.js';
|
3
|
-
import type * as MutationEvent from './schema/MutationEvent.js';
|
4
|
-
import type * as DbSchema from './schema/table-def.js';
|
5
|
-
export declare const makeDerivedMutationDefsForTable: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
|
6
|
-
deriveMutations: {
|
7
|
-
enabled: true;
|
8
|
-
};
|
9
|
-
}>>(table: TTableDef) => {
|
10
|
-
insert: import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
|
11
|
-
readonly [x: string]: any;
|
12
|
-
} & {
|
13
|
-
readonly [x: string]: any;
|
14
|
-
}, {
|
15
|
-
readonly [x: string]: any;
|
16
|
-
} & {
|
17
|
-
readonly [x: string]: any;
|
18
|
-
}>;
|
19
|
-
update: import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
|
20
|
-
readonly where: {
|
21
|
-
[x: string]: any;
|
22
|
-
};
|
23
|
-
readonly values: {
|
24
|
-
[x: string]: any;
|
25
|
-
};
|
26
|
-
}, {
|
27
|
-
readonly where: {
|
28
|
-
[x: string]: any;
|
29
|
-
};
|
30
|
-
readonly values: {
|
31
|
-
[x: string]: any;
|
32
|
-
};
|
33
|
-
}>;
|
34
|
-
delete: import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
|
35
|
-
readonly where: {
|
36
|
-
[x: string]: any;
|
37
|
-
};
|
38
|
-
}, {
|
39
|
-
readonly where: {
|
40
|
-
[x: string]: any;
|
41
|
-
};
|
42
|
-
}>;
|
43
|
-
};
|
44
|
-
export declare const deriveCreateMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
|
45
|
-
deriveMutations: {
|
46
|
-
enabled: true;
|
47
|
-
};
|
48
|
-
}>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
|
49
|
-
readonly [x: string]: any;
|
50
|
-
} & {
|
51
|
-
readonly [x: string]: any;
|
52
|
-
}, {
|
53
|
-
readonly [x: string]: any;
|
54
|
-
} & {
|
55
|
-
readonly [x: string]: any;
|
56
|
-
}>;
|
57
|
-
export declare const deriveUpdateMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
|
58
|
-
deriveMutations: {
|
59
|
-
enabled: true;
|
60
|
-
};
|
61
|
-
}>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
|
62
|
-
readonly where: {
|
63
|
-
[x: string]: any;
|
64
|
-
};
|
65
|
-
readonly values: {
|
66
|
-
[x: string]: any;
|
67
|
-
};
|
68
|
-
}, {
|
69
|
-
readonly where: {
|
70
|
-
[x: string]: any;
|
71
|
-
};
|
72
|
-
readonly values: {
|
73
|
-
[x: string]: any;
|
74
|
-
};
|
75
|
-
}>;
|
76
|
-
export declare const deriveDeleteMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
|
77
|
-
deriveMutations: {
|
78
|
-
enabled: true;
|
79
|
-
};
|
80
|
-
}>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
|
81
|
-
readonly where: {
|
82
|
-
[x: string]: any;
|
83
|
-
};
|
84
|
-
}, {
|
85
|
-
readonly where: {
|
86
|
-
[x: string]: any;
|
87
|
-
};
|
88
|
-
}>;
|
89
|
-
/**
|
90
|
-
* Convenience helper functions on top of the derived mutation definitions.
|
91
|
-
*/
|
92
|
-
export type DerivedMutationHelperFns<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = {
|
93
|
-
insert: DerivedMutationHelperFns.InsertMutationFn<TColumns, TOptions>;
|
94
|
-
update: DerivedMutationHelperFns.UpdateMutationFn<TColumns, TOptions>;
|
95
|
-
delete: DerivedMutationHelperFns.DeleteMutationFn<TColumns, TOptions>;
|
96
|
-
};
|
97
|
-
export declare namespace DerivedMutationHelperFns {
|
98
|
-
export type InsertMutationFn<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = SqliteDsl.AnyIfConstained<TColumns, UseShortcut<TOptions> extends true ? (values?: GetValForKey<SqliteDsl.FromColumns.InsertRowDecoded<TColumns>, 'value'>) => MutationEvent.PartialAnyDecoded : (values: SqliteDsl.FromColumns.InsertRowDecoded<TColumns>) => MutationEvent.PartialAnyDecoded>;
|
99
|
-
export type UpdateMutationFn<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = SqliteDsl.AnyIfConstained<TColumns, UseShortcut<TOptions> extends true ? (values: Partial<GetValForKey<SqliteDsl.FromColumns.RowDecoded<TColumns>, 'value'>>) => MutationEvent.PartialAnyDecoded : (args: {
|
100
|
-
where: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
|
101
|
-
values: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
|
102
|
-
}) => MutationEvent.PartialAnyDecoded>;
|
103
|
-
export type DeleteMutationFn<TColumns extends SqliteDsl.ConstraintColumns, _TOptions extends DbSchema.TableOptions> = (args: {
|
104
|
-
where: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
|
105
|
-
}) => MutationEvent.PartialAnyDecoded;
|
106
|
-
type UseShortcut<TOptions extends DbSchema.TableOptions> = TOptions['isSingleColumn'] extends true ? TOptions['isSingleton'] extends true ? true : false : false;
|
107
|
-
export {};
|
108
|
-
}
|
109
|
-
//# sourceMappingURL=derived-mutations.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"derived-mutations.d.ts","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
|
@@ -1,54 +0,0 @@
|
|
1
|
-
import { ReadonlyRecord, Schema } from '@livestore/utils/effect';
|
2
|
-
import { defineMutation } from './schema/mutations.js';
|
3
|
-
import { getDefaultValuesDecoded } from './schema/schema-helpers.js';
|
4
|
-
import { deleteRows, insertRow, updateRows } from './sql-queries/sql-queries.js';
|
5
|
-
export const makeDerivedMutationDefsForTable = (table) => ({
|
6
|
-
insert: deriveCreateMutationDef(table),
|
7
|
-
update: deriveUpdateMutationDef(table),
|
8
|
-
delete: deriveDeleteMutationDef(table),
|
9
|
-
});
|
10
|
-
export const deriveCreateMutationDef = (table) => {
|
11
|
-
const tableName = table.sqliteDef.name;
|
12
|
-
const [optionalFields, requiredColumns] = ReadonlyRecord.partition(table.sqliteDef.columns, (col) => col.nullable === false && col.default._tag === 'None');
|
13
|
-
const insertSchema = Schema.Struct(ReadonlyRecord.map(requiredColumns, (col) => col.schema))
|
14
|
-
.pipe(Schema.extend(Schema.partial(Schema.Struct(ReadonlyRecord.map(optionalFields, (col) => col.schema)))))
|
15
|
-
.annotations({ title: `${tableName}:Insert` });
|
16
|
-
return defineMutation(`_Derived_Create_${tableName}`, insertSchema, ({ id, ...explicitDefaultValues }) => {
|
17
|
-
const defaultValues = getDefaultValuesDecoded(table, explicitDefaultValues);
|
18
|
-
const [sql, bindValues] = insertRow({
|
19
|
-
tableName: table.sqliteDef.name,
|
20
|
-
columns: table.sqliteDef.columns,
|
21
|
-
values: { ...defaultValues, id },
|
22
|
-
});
|
23
|
-
return { sql, bindValues, writeTables: new Set([tableName]) };
|
24
|
-
}, { clientOnly: table.options.deriveMutations.clientOnly });
|
25
|
-
};
|
26
|
-
export const deriveUpdateMutationDef = (table) => {
|
27
|
-
const tableName = table.sqliteDef.name;
|
28
|
-
return defineMutation(`_Derived_Update_${tableName}`, Schema.Struct({
|
29
|
-
where: Schema.partial(table.schema),
|
30
|
-
values: Schema.partial(table.schema),
|
31
|
-
}).annotations({ title: `${tableName}:Update` }), ({ where, values }) => {
|
32
|
-
const [sql, bindValues] = updateRows({
|
33
|
-
tableName: table.sqliteDef.name,
|
34
|
-
columns: table.sqliteDef.columns,
|
35
|
-
where,
|
36
|
-
updateValues: values,
|
37
|
-
});
|
38
|
-
return { sql, bindValues, writeTables: new Set([tableName]) };
|
39
|
-
}, { clientOnly: table.options.deriveMutations.clientOnly });
|
40
|
-
};
|
41
|
-
export const deriveDeleteMutationDef = (table) => {
|
42
|
-
const tableName = table.sqliteDef.name;
|
43
|
-
return defineMutation(`_Derived_Delete_${tableName}`, Schema.Struct({
|
44
|
-
where: Schema.partial(table.schema),
|
45
|
-
}), ({ where }) => {
|
46
|
-
const [sql, bindValues] = deleteRows({
|
47
|
-
tableName: table.sqliteDef.name,
|
48
|
-
columns: table.sqliteDef.columns,
|
49
|
-
where,
|
50
|
-
});
|
51
|
-
return { sql, bindValues, writeTables: new Set([tableName]) };
|
52
|
-
}, { clientOnly: table.options.deriveMutations.clientOnly });
|
53
|
-
};
|
54
|
-
//# sourceMappingURL=derived-mutations.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"derived-mutations.js","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"derived-mutations.test.d.ts","sourceRoot":"","sources":["../src/derived-mutations.test.ts"],"names":[],"mappings":""}
|
@@ -1,93 +0,0 @@
|
|
1
|
-
import { describe, expect, test } from 'vitest';
|
2
|
-
import { appConfig, todos } from './__tests__/fixture.js';
|
3
|
-
describe('derived mutations', () => {
|
4
|
-
test('todos', () => {
|
5
|
-
expect(patchId(todos.insert({ id: 't1', completed: true, text: 'Task 1' }))).toMatchInlineSnapshot(`
|
6
|
-
{
|
7
|
-
"args": {
|
8
|
-
"completed": true,
|
9
|
-
"id": "t1",
|
10
|
-
"text": "Task 1",
|
11
|
-
},
|
12
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
13
|
-
"mutation": "_Derived_Create_todos",
|
14
|
-
}
|
15
|
-
`);
|
16
|
-
expect(patchId(todos.update({ where: { id: 't1' }, values: { text: 'Task 1 - fixed' } }))).toMatchInlineSnapshot(`
|
17
|
-
{
|
18
|
-
"args": {
|
19
|
-
"values": {
|
20
|
-
"text": "Task 1 - fixed",
|
21
|
-
},
|
22
|
-
"where": {
|
23
|
-
"id": "t1",
|
24
|
-
},
|
25
|
-
},
|
26
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
27
|
-
"mutation": "_Derived_Update_todos",
|
28
|
-
}
|
29
|
-
`);
|
30
|
-
expect(patchId(todos.delete({ where: { id: 't1' } }))).toMatchInlineSnapshot(`
|
31
|
-
{
|
32
|
-
"args": {
|
33
|
-
"where": {
|
34
|
-
"id": "t1",
|
35
|
-
},
|
36
|
-
},
|
37
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
38
|
-
"mutation": "_Derived_Delete_todos",
|
39
|
-
}
|
40
|
-
`);
|
41
|
-
});
|
42
|
-
test('app_config', () => {
|
43
|
-
expect(patchId(appConfig.insert())).toMatchInlineSnapshot(`
|
44
|
-
{
|
45
|
-
"args": {
|
46
|
-
"id": "singleton",
|
47
|
-
"value": {
|
48
|
-
"value": undefined,
|
49
|
-
},
|
50
|
-
},
|
51
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
52
|
-
"mutation": "_Derived_Create_app_config",
|
53
|
-
}
|
54
|
-
`);
|
55
|
-
expect(patchId(appConfig.insert({ fontSize: 12, theme: 'dark' }))).toMatchInlineSnapshot(`
|
56
|
-
{
|
57
|
-
"args": {
|
58
|
-
"id": "singleton",
|
59
|
-
"value": {
|
60
|
-
"value": {
|
61
|
-
"fontSize": 12,
|
62
|
-
"theme": "dark",
|
63
|
-
},
|
64
|
-
},
|
65
|
-
},
|
66
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
67
|
-
"mutation": "_Derived_Create_app_config",
|
68
|
-
}
|
69
|
-
`);
|
70
|
-
expect(patchId(appConfig.update({ fontSize: 13 }))).toMatchInlineSnapshot(`
|
71
|
-
{
|
72
|
-
"args": {
|
73
|
-
"values": {
|
74
|
-
"value": {
|
75
|
-
"fontSize": 13,
|
76
|
-
},
|
77
|
-
},
|
78
|
-
"where": {
|
79
|
-
"id": "singleton",
|
80
|
-
},
|
81
|
-
},
|
82
|
-
"id": "00000000-0000-0000-0000-000000000000",
|
83
|
-
"mutation": "_Derived_Update_app_config",
|
84
|
-
}
|
85
|
-
`);
|
86
|
-
});
|
87
|
-
});
|
88
|
-
const patchId = (muationEvent) => {
|
89
|
-
// TODO use new id paradigm
|
90
|
-
const id = `00000000-0000-0000-0000-000000000000`;
|
91
|
-
return { ...muationEvent, id };
|
92
|
-
};
|
93
|
-
//# sourceMappingURL=derived-mutations.test.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"derived-mutations.test.js","sourceRoot":"","sources":["../src/derived-mutations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGzD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;KAUlG,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;KAahH,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;KAU5E,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QACtB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;KAWzD,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;KAcxF,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;KAezE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,CAAC,YAA6C,EAAE,EAAE;IAChE,2BAA2B;IAC3B,MAAM,EAAE,GAAG,sCAAsC,CAAA;IACjD,OAAO,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,CAAA;AAChC,CAAC,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"init-singleton-tables.d.ts","sourceRoot":"","sources":["../src/init-singleton-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,eAAO,MAAM,yBAAyB,GAAI,QAAQ,eAAe,EAAE,IAAI,QAAQ,SAkB9E,CAAA"}
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { getDefaultValuesEncoded } from './schema/schema-helpers.js';
|
2
|
-
import { prepareBindValues, sql } from './util.js';
|
3
|
-
export const initializeSingletonTables = (schema, db) => {
|
4
|
-
for (const [, tableDef] of schema.tables) {
|
5
|
-
if (tableDef.options.isSingleton) {
|
6
|
-
const defaultValues = getDefaultValuesEncoded(tableDef, undefined);
|
7
|
-
const defaultColumnNames = [...Object.keys(defaultValues), 'id'];
|
8
|
-
const columnValues = defaultColumnNames.map((name) => `$${name}`).join(', ');
|
9
|
-
const tableName = tableDef.sqliteDef.name;
|
10
|
-
const insertQuery = sql `insert into ${tableName} (${defaultColumnNames.join(', ')}) select ${columnValues} where not exists(select 1 from ${tableName} where id = 'singleton')`;
|
11
|
-
const bindValues = prepareBindValues({ ...defaultValues, id: 'singleton' }, insertQuery);
|
12
|
-
db.execute(insertQuery, bindValues);
|
13
|
-
}
|
14
|
-
}
|
15
|
-
};
|
16
|
-
//# sourceMappingURL=init-singleton-tables.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"init-singleton-tables.js","sourceRoot":"","sources":["../src/init-singleton-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAuB,EAAE,EAAY,EAAE,EAAE;IACjF,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAElE,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;YAChE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAE5E,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAA;YACzC,MAAM,WAAW,GAAG,GAAG,CAAA,eAAe,SAAS,KAAK,kBAAkB,CAAC,IAAI,CACzE,IAAI,CACL,YAAY,YAAY,mCAAmC,SAAS,0BAA0B,CAAA;YAE/F,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,GAAG,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,CAAA;YAExF,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"apply-mutation.d.ts","sourceRoot":"","sources":["../../src/leader-thread/apply-mutation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAyB,MAAM,yBAAyB,CAAA;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAA0C,MAAM,kBAAkB,CAAA;AAC/F,OAAO,EACL,OAAO,EAKR,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,iBAAiB,GAAI,6CAI/B;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,aAAa,EAAE,QAAQ,CAAA;CACxB,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAoGlC,CAAA;AAEJ,eAAO,MAAM,QAAQ,GAAI,4CAItB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,aAAa,EAAE,QAAQ,CAAA;IACvB,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;CACtC,sCAsCE,CAAA"}
|