@livestore/common 0.0.0-snapshot-2b8a9de3ec1a701aca891ebc2c98eb328274ae9e → 0.0.0-snapshot-2c861249e50661661613204300b1fc0d902c2e46
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 +36 -22
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +20 -8
- package/dist/adapter-types.js.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 +13 -6
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +6 -0
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +46 -46
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +12 -13
- 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 +34 -12
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +284 -226
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/apply-event.d.ts +16 -0
- package/dist/leader-thread/apply-event.d.ts.map +1 -0
- package/dist/leader-thread/apply-event.js +122 -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.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +22 -23
- 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 +36 -41
- 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 +7 -7
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/types.d.ts +40 -25
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js.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 +55 -50
- 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 +47 -43
- 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 +223 -36
- package/dist/query-builder/impl.test.js.map +1 -1
- package/dist/rehydrate-from-eventlog.d.ts +15 -0
- package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
- package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +27 -28
- 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 +10 -1
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +24 -3
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/LiveStoreEvent.d.ts +255 -0
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent.js +118 -0
- 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 +164 -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 +161 -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 +26 -22
- 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 +121 -85
- package/dist/schema/system-tables.d.ts.map +1 -1
- package/dist/schema/system-tables.js +68 -43
- 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 +14 -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 +16 -8
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +50 -43
- 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} +25 -25
- 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 +8 -7
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +69 -93
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +143 -146
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +208 -289
- 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 +2 -2
- package/src/__tests__/fixture.ts +36 -15
- package/src/adapter-types.ts +34 -23
- package/src/debug-info.ts +1 -0
- package/src/devtools/devtools-messages-common.ts +9 -0
- package/src/devtools/devtools-messages-leader.ts +14 -15
- package/src/index.ts +2 -5
- package/src/leader-thread/LeaderSyncProcessor.ts +485 -389
- package/src/leader-thread/apply-event.ts +197 -0
- package/src/leader-thread/eventlog.ts +199 -0
- package/src/leader-thread/leader-worker-devtools.ts +23 -25
- package/src/leader-thread/make-leader-thread-layer.ts +68 -61
- package/src/leader-thread/mod.ts +1 -1
- package/src/leader-thread/recreate-db.ts +7 -8
- package/src/leader-thread/types.ts +39 -29
- package/src/materializer-helper.ts +110 -0
- package/src/query-builder/api.ts +76 -102
- package/src/query-builder/astToSql.ts +68 -39
- package/src/query-builder/impl.test.ts +239 -42
- package/src/query-builder/impl.ts +66 -54
- package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +37 -40
- package/src/schema/EventDef.ts +216 -0
- package/src/schema/EventId.ts +30 -4
- package/src/schema/LiveStoreEvent.ts +239 -0
- package/src/schema/client-document-def.test.ts +188 -0
- package/src/schema/client-document-def.ts +436 -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 +78 -68
- package/src/schema/sqlite-state.ts +62 -0
- package/src/schema/system-tables.ts +54 -46
- package/src/schema/table-def.ts +51 -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 +66 -53
- 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 +9 -12
- package/src/sync/syncstate.test.ts +236 -323
- package/src/sync/syncstate.ts +218 -203
- package/src/sync/validate-push-payload.ts +2 -2
- package/src/version.ts +1 -1
- 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 +0 -11
- package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
- package/dist/leader-thread/apply-mutation.js +0 -115
- package/dist/leader-thread/apply-mutation.js.map +0 -1
- package/dist/leader-thread/mutationlog.d.ts +0 -11
- package/dist/leader-thread/mutationlog.d.ts.map +0 -1
- package/dist/leader-thread/mutationlog.js +0 -31
- 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 -48
- 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 -14
- 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 +0 -202
- package/dist/schema/MutationEvent.d.ts.map +0 -1
- package/dist/schema/MutationEvent.js +0 -105
- 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/apply-mutation.ts +0 -187
- package/src/leader-thread/mutationlog.ts +0 -49
- package/src/leader-thread/pull-queue-set.ts +0 -67
- package/src/mutation.ts +0 -108
- package/src/query-info.ts +0 -83
- package/src/schema/MutationEvent.ts +0 -224
- package/src/schema/mutations.ts +0 -193
- package/src/sync/next/test/mutation-fixtures.ts +0 -228
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import { defineEvent, defineFacts } from '../../../schema/EventDef.js';
|
|
2
3
|
import * as EventId from '../../../schema/EventId.js';
|
|
3
|
-
import {
|
|
4
|
-
import { factsSnapshotForDag, getFactsGroupForMutationArgs } from '../facts.js';
|
|
4
|
+
import { factsSnapshotForDag, getFactsGroupForEventArgs } from '../facts.js';
|
|
5
5
|
import { historyDagFromNodes } from '../history-dag.js';
|
|
6
6
|
import { rootEventNode } from '../history-dag-common.js';
|
|
7
7
|
/** Used for conflict detection and event history compaction */
|
|
@@ -12,24 +12,35 @@ export const facts = defineFacts({
|
|
|
12
12
|
todoTextUpdated: (id) => `todo-text-updated-${id}`,
|
|
13
13
|
inputValue: (id) => `input-value-${id}`,
|
|
14
14
|
});
|
|
15
|
-
export const
|
|
16
|
-
createTodo:
|
|
15
|
+
export const events = {
|
|
16
|
+
createTodo: defineEvent({
|
|
17
|
+
name: 'createTodo',
|
|
18
|
+
schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
19
|
+
// 'INSERT INTO todos (id, text) VALUES ($id, $text)',
|
|
20
|
+
// {
|
|
17
21
|
facts: ({ id }) => ({
|
|
18
22
|
modify: {
|
|
19
23
|
set: [facts.todoExists(id), facts.todoIsWriteable(id, true), facts.todoCompleted(id, false)],
|
|
20
24
|
},
|
|
21
25
|
}),
|
|
22
26
|
}),
|
|
23
|
-
upsertTodo:
|
|
27
|
+
upsertTodo: defineEvent({
|
|
28
|
+
name: 'upsertTodo',
|
|
29
|
+
schema: Schema.Struct({ id: Schema.String, text: Schema.optional(Schema.String) }),
|
|
30
|
+
// 'INSERT INTO todos (id, text) VALUES ($id, $text) ON CONFLICT (id) DO UPDATE SET text = $text',
|
|
31
|
+
// {
|
|
24
32
|
facts: ({ id }, currentFacts) =>
|
|
25
33
|
// TODO enable an API along the lines of `map.has(key, value)`
|
|
26
34
|
currentFacts.has(facts.todoExists(id)) && currentFacts.get(facts.todoIsWriteable(id, true)[0]) === false
|
|
27
35
|
? { require: [facts.todoExists(id), facts.todoIsWriteable(id, true)] }
|
|
28
36
|
: { modify: { set: [facts.todoExists(id), facts.todoIsWriteable(id, true), facts.todoTextUpdated(id)] } },
|
|
29
37
|
}),
|
|
30
|
-
todoCompleted:
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
todoCompleted: defineEvent({
|
|
39
|
+
name: 'todoCompleted',
|
|
40
|
+
schema: Schema.Struct({ id: Schema.String }),
|
|
41
|
+
// consider `RETURNING` to validate before applying facts
|
|
42
|
+
// 'UPDATE todos SET completed = true WHERE id = $id',
|
|
43
|
+
// {
|
|
33
44
|
// prewrite assertions from DB
|
|
34
45
|
// enables more concurrency
|
|
35
46
|
// turning database inside out
|
|
@@ -39,19 +50,31 @@ export const mutations = {
|
|
|
39
50
|
modify: { set: [facts.todoCompleted(id, true)] },
|
|
40
51
|
}),
|
|
41
52
|
}),
|
|
42
|
-
todoUncompleted:
|
|
53
|
+
todoUncompleted: defineEvent({
|
|
54
|
+
name: 'todoUncompleted',
|
|
55
|
+
schema: Schema.Struct({ id: Schema.String }),
|
|
56
|
+
// 'UPDATE todos SET completed = false WHERE id = $id',
|
|
57
|
+
// {
|
|
43
58
|
facts: ({ id }) => ({
|
|
44
59
|
require: [facts.todoExists(id), facts.todoIsWriteable(id, true)],
|
|
45
60
|
modify: { set: [facts.todoCompleted(id, false)] },
|
|
46
61
|
}),
|
|
47
62
|
}),
|
|
48
|
-
todoCompleteds:
|
|
63
|
+
todoCompleteds: defineEvent({
|
|
64
|
+
name: 'todoCompleteds',
|
|
65
|
+
schema: Schema.Struct({ ids: Schema.Array(Schema.String) }),
|
|
66
|
+
// 'UPDATE todos SET completed = true WHERE id IN ($ids:csv)',
|
|
67
|
+
// {
|
|
49
68
|
facts: ({ ids }) => ({
|
|
50
69
|
require: ids.flatMap((id) => [facts.todoExists(id), facts.todoIsWriteable(id, true)]),
|
|
51
70
|
modify: { set: ids.map((id) => facts.todoCompleted(id, true)) },
|
|
52
71
|
}),
|
|
53
72
|
}),
|
|
54
|
-
toggleTodo:
|
|
73
|
+
toggleTodo: defineEvent({
|
|
74
|
+
name: 'toggleTodo',
|
|
75
|
+
schema: Schema.Struct({ id: Schema.String }),
|
|
76
|
+
// 'UPDATE todos SET completed = NOT completed WHERE id = $id',
|
|
77
|
+
// {
|
|
55
78
|
facts: ({ id }, currentFacts) => {
|
|
56
79
|
const currentIsCompleted = currentFacts.get(facts.todoCompleted(id, true)[0]) === true;
|
|
57
80
|
return {
|
|
@@ -63,33 +86,45 @@ export const mutations = {
|
|
|
63
86
|
};
|
|
64
87
|
},
|
|
65
88
|
}),
|
|
66
|
-
setReadonlyTodo:
|
|
89
|
+
setReadonlyTodo: defineEvent({
|
|
90
|
+
name: 'setReadonlyTodo',
|
|
91
|
+
schema: Schema.Struct({ id: Schema.String, readonly: Schema.Boolean }),
|
|
92
|
+
// 'UPDATE todos SET readonly = $readonly WHERE id = $id',
|
|
93
|
+
// {
|
|
67
94
|
facts: ({ id, readonly }) => ({
|
|
68
95
|
require: [facts.todoExists(id)],
|
|
69
96
|
modify: { set: [facts.todoIsWriteable(id, !readonly)] },
|
|
70
97
|
}),
|
|
71
98
|
}),
|
|
72
|
-
setTextTodo:
|
|
99
|
+
setTextTodo: defineEvent({
|
|
100
|
+
name: 'setTextTodo',
|
|
101
|
+
schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
102
|
+
// 'UPDATE todos SET text = $text WHERE id = $id',
|
|
103
|
+
// {
|
|
73
104
|
facts: ({ id }) => ({
|
|
74
105
|
require: [facts.todoExists(id), facts.todoIsWriteable(id, true)],
|
|
75
106
|
modify: { set: [facts.todoTextUpdated(id)] },
|
|
76
107
|
}),
|
|
77
108
|
}),
|
|
78
|
-
setInputValue:
|
|
109
|
+
setInputValue: defineEvent({
|
|
110
|
+
name: 'setInputValue',
|
|
111
|
+
schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
112
|
+
// 'UPDATE todos SET text = $text WHERE id = $id',
|
|
113
|
+
// {
|
|
79
114
|
clientOnly: true,
|
|
80
115
|
facts: ({ id }) => ({ modify: { set: [facts.inputValue(id)] } }),
|
|
81
116
|
}),
|
|
82
117
|
};
|
|
83
|
-
export const toEventNodes = (partialEvents,
|
|
118
|
+
export const toEventNodes = (partialEvents, eventDefs, clientId, sessionId) => {
|
|
84
119
|
const nodesAcc = [rootEventNode];
|
|
85
120
|
let currentEventId = EventId.ROOT;
|
|
86
121
|
const eventNodes = partialEvents.map((partialEvent) => {
|
|
87
|
-
const
|
|
88
|
-
const eventId = EventId.nextPair(currentEventId,
|
|
122
|
+
const eventDef = eventDefs[partialEvent.name];
|
|
123
|
+
const eventId = EventId.nextPair(currentEventId, eventDef.options.clientOnly).id;
|
|
89
124
|
currentEventId = eventId;
|
|
90
125
|
const factsSnapshot = factsSnapshotForDag(historyDagFromNodes(nodesAcc, { skipFactsCheck: true }), undefined);
|
|
91
126
|
// console.log('factsSnapshot', eventId, factsSnapshot)
|
|
92
|
-
// const depRead:
|
|
127
|
+
// const depRead: EventDefFactsSnapshot = new Map<string, any>()
|
|
93
128
|
// const factsSnapshotProxy = new Proxy(factsSnapshot, {
|
|
94
129
|
// get: (target, prop) => {
|
|
95
130
|
// if (prop === 'has') {
|
|
@@ -106,9 +141,9 @@ export const toEventNodes = (partialEvents, mutationDefs, clientId, sessionId) =
|
|
|
106
141
|
// notYetImplemented(`toEventNodes: ${prop.toString()} is not yet implemented`)
|
|
107
142
|
// },
|
|
108
143
|
// })
|
|
109
|
-
// const factsRes =
|
|
144
|
+
// const factsRes = eventDef.options.facts?.(partialEvent.args, factsSnapshotProxy)
|
|
110
145
|
// console.log('factsRes', factsRes?.modify, factsRes?.require)
|
|
111
|
-
// const iterableToMap = (iterable: Iterable<
|
|
146
|
+
// const iterableToMap = (iterable: Iterable<EventDefFactInput>) => {
|
|
112
147
|
// const map = new Map()
|
|
113
148
|
// for (const item of iterable) {
|
|
114
149
|
// if (typeof item === 'string') {
|
|
@@ -124,17 +159,17 @@ export const toEventNodes = (partialEvents, mutationDefs, clientId, sessionId) =
|
|
|
124
159
|
// modifyRemove: factsRes?.modify.remove ? iterableToMap(factsRes.modify.remove) : new Map(),
|
|
125
160
|
// depRequire: factsRes?.require ? iterableToMap(factsRes.require) : new Map(),
|
|
126
161
|
// depRead,
|
|
127
|
-
// } satisfies
|
|
162
|
+
// } satisfies EventDefFactsGroup
|
|
128
163
|
// applyFactGroup(facts, factsSnapshot)
|
|
129
|
-
const facts =
|
|
130
|
-
factsCallback:
|
|
164
|
+
const facts = getFactsGroupForEventArgs({
|
|
165
|
+
factsCallback: eventDef.options.facts,
|
|
131
166
|
args: partialEvent.args,
|
|
132
167
|
currentFacts: factsSnapshot,
|
|
133
168
|
});
|
|
134
169
|
const node = {
|
|
135
170
|
id: eventId,
|
|
136
171
|
parentId: getParentId(eventId),
|
|
137
|
-
|
|
172
|
+
name: partialEvent.name,
|
|
138
173
|
args: partialEvent.args,
|
|
139
174
|
factsGroup: facts,
|
|
140
175
|
clientId,
|
|
@@ -155,4 +190,4 @@ const getParentId = (eventId) => {
|
|
|
155
190
|
}
|
|
156
191
|
return EventId.make({ global: globalParentId, client: clientParentId });
|
|
157
192
|
};
|
|
158
|
-
//# sourceMappingURL=
|
|
193
|
+
//# sourceMappingURL=event-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-fixtures.js","sourceRoot":"","sources":["../../../../src/sync/next/test/event-fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './event-fixtures.js';
|
|
2
2
|
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './event-fixtures.js';
|
|
2
2
|
//# sourceMappingURL=mod.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
package/dist/sync/sync.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Schema } from '@livestore/utils/effect';
|
|
|
3
3
|
import type { UnexpectedError } from '../adapter-types.js';
|
|
4
4
|
import type { InitialSyncOptions } from '../leader-thread/types.js';
|
|
5
5
|
import * as EventId from '../schema/EventId.js';
|
|
6
|
-
import type * as
|
|
6
|
+
import type * as LiveStoreEvent from '../schema/LiveStoreEvent.js';
|
|
7
7
|
/**
|
|
8
8
|
* Those arguments can be used to implement multi-tenancy etc and are passed in from the store.
|
|
9
9
|
*/
|
|
@@ -29,12 +29,16 @@ export type SyncOptions = {
|
|
|
29
29
|
};
|
|
30
30
|
export type SyncBackendConstructor<TSyncMetadata = Schema.JsonValue> = (args: MakeBackendArgs) => Effect.Effect<SyncBackend<TSyncMetadata>, UnexpectedError, Scope.Scope | HttpClient.HttpClient>;
|
|
31
31
|
export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
|
|
32
|
+
/**
|
|
33
|
+
* Can be implemented to prepare a connection to the sync backend to speed up the first pull/push.
|
|
34
|
+
*/
|
|
35
|
+
connect: Effect.Effect<void, IsOfflineError | UnexpectedError, HttpClient.HttpClient | Scope.Scope>;
|
|
32
36
|
pull: (args: Option.Option<{
|
|
33
37
|
cursor: EventId.EventId;
|
|
34
38
|
metadata: Option.Option<TSyncMetadata>;
|
|
35
39
|
}>) => Stream.Stream<{
|
|
36
40
|
batch: ReadonlyArray<{
|
|
37
|
-
|
|
41
|
+
eventEncoded: LiveStoreEvent.AnyEncodedGlobal;
|
|
38
42
|
metadata: Option.Option<TSyncMetadata>;
|
|
39
43
|
}>;
|
|
40
44
|
remaining: number;
|
|
@@ -45,13 +49,10 @@ export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
|
|
|
45
49
|
* - Number of events: 1-100
|
|
46
50
|
* - event ids must be in ascending order
|
|
47
51
|
* */
|
|
48
|
-
batch: ReadonlyArray<
|
|
49
|
-
/** Indexes are relative to `batch` */
|
|
50
|
-
metadata: ReadonlyArray<Option.Option<TSyncMetadata>>;
|
|
51
|
-
}, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
|
|
52
|
+
batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>) => Effect.Effect<void, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
|
|
52
53
|
isConnected: SubscriptionRef.SubscriptionRef<boolean>;
|
|
53
54
|
/**
|
|
54
|
-
* Metadata describing the sync backend.
|
|
55
|
+
* Metadata describing the sync backend. (Currently only used by devtools.)
|
|
55
56
|
*/
|
|
56
57
|
metadata: {
|
|
57
58
|
name: string;
|
package/dist/sync/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACrC,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;;;;SAQK;IACL,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI,CACrE,IAAI,EAAE,eAAe,KAClB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AAEpG,MAAM,MAAM,WAAW,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI;IAC1D;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,EAAE,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACnG,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;QACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;KACvC,CAAC,KACC,MAAM,CAAC,MAAM,CAChB;QACE,KAAK,EAAE,aAAa,CAAC;YACnB,YAAY,EAAE,cAAc,CAAC,gBAAgB,CAAA;YAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;SACvC,CAAC,CAAA;QACF,SAAS,EAAE,MAAM,CAAA;KAClB,EACD,cAAc,GAAG,gBAAgB,EACjC,UAAU,CAAC,UAAU,CACtB,CAAA;IAED,IAAI,EAAE;IACJ;;;;SAIK;IACL,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAClD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IAClF,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACrD;;OAEG;IACH,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;CACnF,CAAA;;;;AAED,qBAAa,cAAe,SAAQ,mBAA0D;CAAG;;;;;;;;;;;AAEjG,qBAAa,gBAAiB,SAAQ,qBAUpC;CAAG;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;;;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG"}
|
package/dist/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAqE/C,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC;CAAG;AAEjG,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,MAAM,EAAE,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM;KACvB,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM;KAC1B,CAAC,CACH;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,iBAAiB,EAAE,OAAO,CAAC,OAAO;IAClC,UAAU,EAAE,OAAO,CAAC,OAAO;IAC3B,4EAA4E;IAC5E,iCAAiC;CAClC,CAAC;CAAG"}
|
package/dist/sync/syncstate.d.ts
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { Schema } from '@livestore/utils/effect';
|
|
2
2
|
import { UnexpectedError } from '../adapter-types.js';
|
|
3
|
-
import * as
|
|
3
|
+
import * as LiveStoreEvent from '../schema/LiveStoreEvent.js';
|
|
4
4
|
declare const SyncState_base: Schema.Class<SyncState, {
|
|
5
|
-
pending: Schema.Array$<typeof
|
|
6
|
-
rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
|
|
5
|
+
pending: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
7
6
|
/** What this node expects the next upstream node to have as its own local head */
|
|
8
7
|
upstreamHead: Schema.Struct<{
|
|
9
8
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
10
9
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
11
10
|
}>;
|
|
11
|
+
/** Equivalent to `pending.at(-1)?.id` if there are pending events */
|
|
12
12
|
localHead: Schema.Struct<{
|
|
13
13
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
14
14
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
15
15
|
}>;
|
|
16
16
|
}, Schema.Struct.Encoded<{
|
|
17
|
-
pending: Schema.Array$<typeof
|
|
18
|
-
rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
|
|
17
|
+
pending: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
19
18
|
/** What this node expects the next upstream node to have as its own local head */
|
|
20
19
|
upstreamHead: Schema.Struct<{
|
|
21
20
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
22
21
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
23
22
|
}>;
|
|
23
|
+
/** Equivalent to `pending.at(-1)?.id` if there are pending events */
|
|
24
24
|
localHead: Schema.Struct<{
|
|
25
25
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
26
26
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
27
27
|
}>;
|
|
28
28
|
}>, never, {
|
|
29
|
-
readonly pending: readonly
|
|
29
|
+
readonly pending: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
30
30
|
} & {
|
|
31
31
|
readonly upstreamHead: {
|
|
32
32
|
readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
|
|
@@ -37,92 +37,75 @@ declare const SyncState_base: Schema.Class<SyncState, {
|
|
|
37
37
|
readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
|
|
38
38
|
readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
|
|
39
39
|
};
|
|
40
|
-
} & {
|
|
41
|
-
readonly rollbackTail: readonly MutationEvent.EncodedWithMeta[];
|
|
42
40
|
}, {}, {}>;
|
|
43
41
|
/**
|
|
44
42
|
* SyncState represents the current sync state of a sync node relative to an upstream node.
|
|
45
43
|
* Events flow from local to upstream, with each state maintaining its own event head.
|
|
46
44
|
*
|
|
47
|
-
*
|
|
45
|
+
* Example:
|
|
48
46
|
* ```
|
|
49
|
-
*
|
|
50
|
-
* |
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
47
|
+
* +------------------------+
|
|
48
|
+
* | PENDING EVENTS |
|
|
49
|
+
* +------------------------+
|
|
50
|
+
* ▼ ▼
|
|
51
|
+
* Upstream Head Local Head
|
|
52
|
+
* (1,0) (1,1), (1,2), (2,0)
|
|
55
53
|
* ```
|
|
56
54
|
*
|
|
57
|
-
*
|
|
58
|
-
* -
|
|
59
|
-
*
|
|
60
|
-
* - Subject to rebase if rejected.
|
|
61
|
-
* - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
|
|
62
|
-
* - Currently only needed for ClientSessionSyncProcessor.
|
|
63
|
-
* - Note: Confirmation of an event is stronger than acknowledgment of an event and can only be done by the
|
|
64
|
-
* absolute authority in the sync hierarchy (i.e. the sync backend in our case).
|
|
55
|
+
* **Pending Events**: Events awaiting acknowledgment from the upstream.
|
|
56
|
+
* - Can be confirmed or rejected by the upstream.
|
|
57
|
+
* - Subject to rebase if rejected.
|
|
65
58
|
*
|
|
66
59
|
* Payloads:
|
|
67
60
|
* - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
|
|
68
61
|
* and rebase the pending events on top of the new events.
|
|
69
62
|
* - `PayloadUpstreamAdvance`: Upstream has advanced, so downstream must rebase the pending events on top of the new events.
|
|
70
|
-
* - `PayloadUpstreamTrimRollbackTail`: Upstream has advanced, so downstream can trim the rollback tail.
|
|
71
63
|
* - `PayloadLocalPush`: Local push payload
|
|
72
64
|
*
|
|
73
65
|
* Invariants:
|
|
74
66
|
* 1. **Chain Continuity**: Each event must reference its immediate parent.
|
|
75
67
|
* 2. **Head Ordering**: Upstream Head ≤ Local Head.
|
|
76
|
-
* 3. **
|
|
68
|
+
* 3. **Event number sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
|
|
77
69
|
*
|
|
78
70
|
* A few further notes to help form an intuition:
|
|
79
71
|
* - The goal is to keep the pending events as small as possible (i.e. to have synced with the next upstream node)
|
|
80
72
|
* - There are 2 cases for rebasing:
|
|
81
73
|
* - The conflicting event only conflicts with the pending events -> only (some of) the pending events need to be rolled back
|
|
82
|
-
* - The conflicting event conflicts even with the rollback tail (additionally to the pending events) -> events from both need to be rolled back
|
|
83
74
|
*
|
|
84
75
|
* The `merge` function processes updates to the sync state based on incoming payloads,
|
|
85
|
-
* handling cases such as upstream rebase, advance
|
|
76
|
+
* handling cases such as upstream rebase, advance and local push.
|
|
86
77
|
*/
|
|
87
78
|
export declare class SyncState extends SyncState_base {
|
|
88
79
|
toJSON: () => any;
|
|
89
80
|
}
|
|
90
81
|
declare const PayloadUpstreamRebase_base: Schema.TaggedStruct<"upstream-rebase", {
|
|
91
|
-
/**
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}>;
|
|
96
|
-
newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
|
|
97
|
-
/** Trim rollback tail up to this event (inclusive). */
|
|
98
|
-
trimRollbackUntil: Schema.optional<Schema.Struct<{
|
|
99
|
-
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
100
|
-
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
101
|
-
}>>;
|
|
82
|
+
/** Events which need to be rolled back */
|
|
83
|
+
rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
84
|
+
/** Events which need to be applied after the rollback (already rebased by the upstream node) */
|
|
85
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
102
86
|
}>;
|
|
87
|
+
/**
|
|
88
|
+
* This payload propagates a rebase from the upstream node
|
|
89
|
+
*/
|
|
103
90
|
export declare class PayloadUpstreamRebase extends PayloadUpstreamRebase_base {
|
|
104
91
|
}
|
|
105
92
|
declare const PayloadUpstreamAdvance_base: Schema.TaggedStruct<"upstream-advance", {
|
|
106
|
-
newEvents: Schema.Array$<typeof
|
|
107
|
-
/** Trim rollback tail up to this event (inclusive). */
|
|
108
|
-
trimRollbackUntil: Schema.optional<Schema.Struct<{
|
|
109
|
-
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
110
|
-
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
111
|
-
}>>;
|
|
93
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
112
94
|
}>;
|
|
113
95
|
export declare class PayloadUpstreamAdvance extends PayloadUpstreamAdvance_base {
|
|
114
96
|
}
|
|
115
97
|
declare const PayloadLocalPush_base: Schema.TaggedStruct<"local-push", {
|
|
116
|
-
newEvents: Schema.Array$<typeof
|
|
98
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
117
99
|
}>;
|
|
118
100
|
export declare class PayloadLocalPush extends PayloadLocalPush_base {
|
|
119
101
|
}
|
|
120
102
|
declare const Payload_base: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance, typeof PayloadLocalPush]>;
|
|
121
103
|
export declare class Payload extends Payload_base {
|
|
122
104
|
}
|
|
123
|
-
|
|
124
|
-
export
|
|
125
|
-
|
|
105
|
+
declare const PayloadUpstream_base: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance]>;
|
|
106
|
+
export declare class PayloadUpstream extends PayloadUpstream_base {
|
|
107
|
+
}
|
|
108
|
+
declare const MergeContext_base: Schema.Class<MergeContext, {
|
|
126
109
|
payload: typeof Payload;
|
|
127
110
|
syncState: typeof SyncState;
|
|
128
111
|
}, Schema.Struct.Encoded<{
|
|
@@ -131,53 +114,46 @@ declare const UpdateContext_base: Schema.Class<UpdateContext, {
|
|
|
131
114
|
}>, never, {
|
|
132
115
|
readonly payload: {
|
|
133
116
|
readonly _tag: "upstream-rebase";
|
|
134
|
-
readonly
|
|
135
|
-
|
|
136
|
-
readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
|
|
137
|
-
};
|
|
138
|
-
readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
|
|
139
|
-
readonly trimRollbackUntil?: {
|
|
140
|
-
readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
|
|
141
|
-
readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
|
|
142
|
-
} | undefined;
|
|
117
|
+
readonly rollbackEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
118
|
+
readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
143
119
|
} | {
|
|
144
120
|
readonly _tag: "upstream-advance";
|
|
145
|
-
readonly newEvents: readonly
|
|
146
|
-
readonly trimRollbackUntil?: {
|
|
147
|
-
readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
|
|
148
|
-
readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
|
|
149
|
-
} | undefined;
|
|
121
|
+
readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
150
122
|
} | {
|
|
151
123
|
readonly _tag: "local-push";
|
|
152
|
-
readonly newEvents: readonly
|
|
124
|
+
readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
153
125
|
};
|
|
154
126
|
} & {
|
|
155
127
|
readonly syncState: SyncState;
|
|
156
128
|
}, {}, {}>;
|
|
157
129
|
/** Only used for debugging purposes */
|
|
158
|
-
export declare class
|
|
130
|
+
export declare class MergeContext extends MergeContext_base {
|
|
159
131
|
toJSON: () => any;
|
|
160
132
|
}
|
|
161
133
|
declare const MergeResultAdvance_base: Schema.Class<MergeResultAdvance, {
|
|
162
134
|
_tag: Schema.Literal<["advance"]>;
|
|
163
135
|
newSyncState: typeof SyncState;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
136
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
137
|
+
/** Events which were previously pending but are now confirmed */
|
|
138
|
+
confirmedEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
139
|
+
mergeContext: typeof MergeContext;
|
|
167
140
|
}, Schema.Struct.Encoded<{
|
|
168
141
|
_tag: Schema.Literal<["advance"]>;
|
|
169
142
|
newSyncState: typeof SyncState;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
143
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
144
|
+
/** Events which were previously pending but are now confirmed */
|
|
145
|
+
confirmedEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
146
|
+
mergeContext: typeof MergeContext;
|
|
173
147
|
}>, never, {
|
|
174
148
|
readonly _tag: "advance";
|
|
175
149
|
} & {
|
|
176
|
-
readonly newEvents: readonly
|
|
150
|
+
readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
177
151
|
} & {
|
|
178
152
|
readonly newSyncState: SyncState;
|
|
179
153
|
} & {
|
|
180
|
-
readonly
|
|
154
|
+
readonly mergeContext: MergeContext;
|
|
155
|
+
} & {
|
|
156
|
+
readonly confirmedEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
181
157
|
}, {}, {}>;
|
|
182
158
|
export declare class MergeResultAdvance extends MergeResultAdvance_base {
|
|
183
159
|
toJSON: () => any;
|
|
@@ -185,27 +161,27 @@ export declare class MergeResultAdvance extends MergeResultAdvance_base {
|
|
|
185
161
|
declare const MergeResultRebase_base: Schema.Class<MergeResultRebase, {
|
|
186
162
|
_tag: Schema.Literal<["rebase"]>;
|
|
187
163
|
newSyncState: typeof SyncState;
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
164
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
165
|
+
/** Events which need to be rolled back */
|
|
166
|
+
rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
167
|
+
mergeContext: typeof MergeContext;
|
|
192
168
|
}, Schema.Struct.Encoded<{
|
|
193
169
|
_tag: Schema.Literal<["rebase"]>;
|
|
194
170
|
newSyncState: typeof SyncState;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
171
|
+
newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
172
|
+
/** Events which need to be rolled back */
|
|
173
|
+
rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
|
|
174
|
+
mergeContext: typeof MergeContext;
|
|
199
175
|
}>, never, {
|
|
200
176
|
readonly _tag: "rebase";
|
|
201
177
|
} & {
|
|
202
|
-
readonly
|
|
178
|
+
readonly rollbackEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
203
179
|
} & {
|
|
204
|
-
readonly
|
|
180
|
+
readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
|
|
205
181
|
} & {
|
|
206
|
-
readonly
|
|
182
|
+
readonly newSyncState: SyncState;
|
|
207
183
|
} & {
|
|
208
|
-
readonly
|
|
184
|
+
readonly mergeContext: MergeContext;
|
|
209
185
|
}, {}, {}>;
|
|
210
186
|
export declare class MergeResultRebase extends MergeResultRebase_base {
|
|
211
187
|
toJSON: () => any;
|
|
@@ -217,7 +193,7 @@ declare const MergeResultReject_base: Schema.Class<MergeResultReject, {
|
|
|
217
193
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
218
194
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
219
195
|
}>;
|
|
220
|
-
|
|
196
|
+
mergeContext: typeof MergeContext;
|
|
221
197
|
}, Schema.Struct.Encoded<{
|
|
222
198
|
_tag: Schema.Literal<["reject"]>;
|
|
223
199
|
/** The minimum id that the new events must have */
|
|
@@ -225,11 +201,11 @@ declare const MergeResultReject_base: Schema.Class<MergeResultReject, {
|
|
|
225
201
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
|
|
226
202
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
|
|
227
203
|
}>;
|
|
228
|
-
|
|
204
|
+
mergeContext: typeof MergeContext;
|
|
229
205
|
}>, never, {
|
|
230
206
|
readonly _tag: "reject";
|
|
231
207
|
} & {
|
|
232
|
-
readonly
|
|
208
|
+
readonly mergeContext: MergeContext;
|
|
233
209
|
} & {
|
|
234
210
|
readonly expectedMinimumId: {
|
|
235
211
|
readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
|
|
@@ -258,8 +234,8 @@ export declare class MergeResult extends MergeResult_base {
|
|
|
258
234
|
export declare const merge: ({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents, }: {
|
|
259
235
|
syncState: SyncState;
|
|
260
236
|
payload: typeof Payload.Type;
|
|
261
|
-
isClientEvent: (event:
|
|
262
|
-
isEqualEvent: (a:
|
|
237
|
+
isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean;
|
|
238
|
+
isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean;
|
|
263
239
|
/** This is used in the leader which should ignore client events when receiving an upstream-advance payload */
|
|
264
240
|
ignoreClientEvents?: boolean;
|
|
265
241
|
}) => typeof MergeResult.Type;
|
|
@@ -268,10 +244,10 @@ export declare const merge: ({ syncState, payload, isClientEvent, isEqualEvent,
|
|
|
268
244
|
* by comparing each event in `existingEvents` to the corresponding event in `incomingEvents`
|
|
269
245
|
*/
|
|
270
246
|
export declare const findDivergencePoint: ({ existingEvents, incomingEvents, isEqualEvent, isClientEvent, ignoreClientEvents, }: {
|
|
271
|
-
existingEvents: ReadonlyArray<
|
|
272
|
-
incomingEvents: ReadonlyArray<
|
|
273
|
-
isEqualEvent: (a:
|
|
274
|
-
isClientEvent: (event:
|
|
247
|
+
existingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>;
|
|
248
|
+
incomingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>;
|
|
249
|
+
isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean;
|
|
250
|
+
isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean;
|
|
275
251
|
ignoreClientEvents: boolean;
|
|
276
252
|
}) => number;
|
|
277
253
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;;;IAyC3D,kFAAkF;;;;;IAElF,qEAAqE;;;;;;;IAFrE,kFAAkF;;;;;IAElF,qEAAqE;;;;;;;;;;;;;;;;;;AAzCvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,SAAU,SAAQ,cAM7B;IACA,MAAM,QAAO,GAAG,CAId;CACH;;IAMC,0CAA0C;;IAE1C,gGAAgG;;;AANlG;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,0BAKzC;CAAG;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAE1C;CAAG;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;AAEL,qBAAa,OAAQ,SAAQ,YAA6E;CAAG;;AAE7G,qBAAa,eAAgB,SAAQ,oBAA2D;CAAG;;;;;;;;;;;;;;;;;;;;;;AAEnG,uCAAuC;AACvC,qBAAa,YAAa,SAAQ,iBAGhC;IACA,MAAM,QAAO,GAAG,CAqBf;CACF;;;;;IAMC,iEAAiE;;;;;;;IAAjE,iEAAiE;;;;;;;;;;;;;;AAJnE,qBAAa,kBAAmB,SAAQ,uBAOtC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;;;IAMC,0CAA0C;;;;;;;IAA1C,0CAA0C;;;;;;;;;;;;;;AAJ5C,qBAAa,iBAAkB,SAAQ,sBAOrC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;IAIC,mDAAmD;;;;;;;;IAAnD,mDAAmD;;;;;;;;;;;;;;;;AAFrD,qBAAa,iBAAkB,SAAQ,sBAKrC;IACA,MAAM,QAAO,GAAG,CAMf;CACF;;;;;;;;;;;;AAED,qBAAa,0BAA2B,SAAQ,+BAG9C;CAAG;;AAEL,qBAAa,WAAY,SAAQ,gBAKhC;CAAG;AAoBJ,eAAO,MAAM,KAAK,GAAI,0EAMnB;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IACjE,YAAY,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IAC/F,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,KAAG,OAAO,WAAW,CAAC,IA0MtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,sFAMjC;IACD,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAC7D,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAC7D,YAAY,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IAC/F,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IACjE,kBAAkB,EAAE,OAAO,CAAA;CAC5B,KAAG,MAuBH,CAAA"}
|