@livestore/common 0.0.0-snapshot-f6ec49b1a18859aad769f0a0d8edf8bae231ed07 → 0.0.0-snapshot-2ef046b02334f52613d31dbe06af53487685edc0

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.
Files changed (102) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +7 -12
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js +1 -7
  5. package/dist/adapter-types.js.map +1 -1
  6. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  7. package/dist/devtools/devtools-messages-common.d.ts +13 -6
  8. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  9. package/dist/devtools/devtools-messages-common.js +6 -0
  10. package/dist/devtools/devtools-messages-common.js.map +1 -1
  11. package/dist/devtools/devtools-messages-leader.d.ts +25 -25
  12. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  13. package/dist/devtools/devtools-messages-leader.js +1 -2
  14. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  15. package/dist/leader-thread/LeaderSyncProcessor.d.ts +16 -6
  16. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  17. package/dist/leader-thread/LeaderSyncProcessor.js +227 -215
  18. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  19. package/dist/leader-thread/apply-mutation.d.ts +14 -9
  20. package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
  21. package/dist/leader-thread/apply-mutation.js +43 -36
  22. package/dist/leader-thread/apply-mutation.js.map +1 -1
  23. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  24. package/dist/leader-thread/leader-worker-devtools.js +2 -5
  25. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  26. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  27. package/dist/leader-thread/make-leader-thread-layer.js +22 -33
  28. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  29. package/dist/leader-thread/mod.d.ts +1 -1
  30. package/dist/leader-thread/mod.d.ts.map +1 -1
  31. package/dist/leader-thread/mod.js +1 -1
  32. package/dist/leader-thread/mod.js.map +1 -1
  33. package/dist/leader-thread/mutationlog.d.ts +20 -3
  34. package/dist/leader-thread/mutationlog.d.ts.map +1 -1
  35. package/dist/leader-thread/mutationlog.js +106 -12
  36. package/dist/leader-thread/mutationlog.js.map +1 -1
  37. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  38. package/dist/leader-thread/recreate-db.js +4 -3
  39. package/dist/leader-thread/recreate-db.js.map +1 -1
  40. package/dist/leader-thread/types.d.ts +35 -19
  41. package/dist/leader-thread/types.d.ts.map +1 -1
  42. package/dist/leader-thread/types.js.map +1 -1
  43. package/dist/rehydrate-from-mutationlog.d.ts +5 -4
  44. package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
  45. package/dist/rehydrate-from-mutationlog.js +7 -9
  46. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  47. package/dist/schema/EventId.d.ts +4 -0
  48. package/dist/schema/EventId.d.ts.map +1 -1
  49. package/dist/schema/EventId.js +7 -1
  50. package/dist/schema/EventId.js.map +1 -1
  51. package/dist/schema/MutationEvent.d.ts +87 -18
  52. package/dist/schema/MutationEvent.d.ts.map +1 -1
  53. package/dist/schema/MutationEvent.js +35 -6
  54. package/dist/schema/MutationEvent.js.map +1 -1
  55. package/dist/schema/schema.js +1 -1
  56. package/dist/schema/schema.js.map +1 -1
  57. package/dist/schema/system-tables.d.ts +67 -0
  58. package/dist/schema/system-tables.d.ts.map +1 -1
  59. package/dist/schema/system-tables.js +12 -1
  60. package/dist/schema/system-tables.js.map +1 -1
  61. package/dist/sync/ClientSessionSyncProcessor.d.ts +11 -1
  62. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  63. package/dist/sync/ClientSessionSyncProcessor.js +54 -47
  64. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  65. package/dist/sync/sync.d.ts +16 -5
  66. package/dist/sync/sync.d.ts.map +1 -1
  67. package/dist/sync/sync.js.map +1 -1
  68. package/dist/sync/syncstate.d.ts +81 -83
  69. package/dist/sync/syncstate.d.ts.map +1 -1
  70. package/dist/sync/syncstate.js +159 -125
  71. package/dist/sync/syncstate.js.map +1 -1
  72. package/dist/sync/syncstate.test.js +97 -138
  73. package/dist/sync/syncstate.test.js.map +1 -1
  74. package/dist/version.d.ts +1 -1
  75. package/dist/version.js +1 -1
  76. package/package.json +2 -2
  77. package/src/adapter-types.ts +5 -12
  78. package/src/devtools/devtools-messages-common.ts +9 -0
  79. package/src/devtools/devtools-messages-leader.ts +1 -2
  80. package/src/leader-thread/LeaderSyncProcessor.ts +398 -370
  81. package/src/leader-thread/apply-mutation.ts +81 -71
  82. package/src/leader-thread/leader-worker-devtools.ts +3 -8
  83. package/src/leader-thread/make-leader-thread-layer.ts +27 -41
  84. package/src/leader-thread/mod.ts +1 -1
  85. package/src/leader-thread/mutationlog.ts +167 -13
  86. package/src/leader-thread/recreate-db.ts +4 -3
  87. package/src/leader-thread/types.ts +34 -23
  88. package/src/rehydrate-from-mutationlog.ts +12 -12
  89. package/src/schema/EventId.ts +8 -1
  90. package/src/schema/MutationEvent.ts +42 -10
  91. package/src/schema/schema.ts +1 -1
  92. package/src/schema/system-tables.ts +20 -1
  93. package/src/sync/ClientSessionSyncProcessor.ts +64 -50
  94. package/src/sync/sync.ts +16 -9
  95. package/src/sync/syncstate.test.ts +173 -217
  96. package/src/sync/syncstate.ts +184 -151
  97. package/src/version.ts +1 -1
  98. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  99. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  100. package/dist/leader-thread/pull-queue-set.js +0 -48
  101. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  102. package/src/leader-thread/pull-queue-set.ts +0 -67
@@ -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,aAAa,MAAM,4BAA4B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,SAAU,SAAQ,cAK7B;IACA,MAAM,QAAO,GAAG,CAOf;CACF;;IAGC,8GAA8G;;;;;;IAG9G,uDAAuD;;;;;;AAJzD,qBAAa,qBAAsB,SAAQ,0BAMzC;CAAG;;;IAIH,uDAAuD;;;;;;AAFzD,qBAAa,sBAAuB,SAAQ,2BAI1C;CAAG;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;AAEL,qBAAa,OAAQ,SAAQ,YAA6E;CAAG;AAE7G,eAAO,MAAM,eAAe,6EAA8D,CAAA;AAE1F,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzD,uCAAuC;AACvC,qBAAa,aAAc,SAAQ,kBAGjC;IACA,MAAM,QAAO,GAAG,CAoBf;CACF;;;;IAKC,qDAAqD;;;;;;IAArD,qDAAqD;;;;;;;;;;;;AAHvD,qBAAa,mBAAoB,SAAQ,wBAMvC;IACA,MAAM,QAAO,GAAG,CAOf;CACF;;;;IAKC,qDAAqD;;;;;;;IAArD,qDAAqD;;;;;;;;;;;;;;;AAHvD,qBAAa,kBAAmB,SAAQ,uBAOtC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;IAIC,mDAAmD;;;;;;;;IAAnD,mDAAmD;;;;;;;;;;;;;;;;AAFrD,qBAAa,kBAAmB,SAAQ,uBAKtC;IACA,MAAM,QAAO,GAAG,CAMf;CACF;;;;;;;;;;;;AAED,qBAAa,2BAA4B,SAAQ,gCAK/C;CAAG;;AAEL,qBAAa,YAAa,SAAQ,iBAKjC;CAAG;AAQJ,eAAO,MAAM,eAAe,GAAI,wEAM7B;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC/D,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC7F,6GAA6G;IAC7G,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,KAAG,OAAO,YAAY,CAAC,IAiNvB,CAAA"}
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,aAAa,MAAM,4BAA4B,CAAA;;;IAyCzD,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;AAeJ,eAAO,MAAM,KAAK,GAAI,0EAMnB;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAChE,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC7F,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,KAAG,OAAO,WAAW,CAAC,IAsMtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,sFAMjC;IACD,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC5D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC5D,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC7F,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAChE,kBAAkB,EAAE,OAAO,CAAA;CAC5B,KAAG,MAuBH,CAAA"}
@@ -1,4 +1,4 @@
1
- import { casesHandled } from '@livestore/utils';
1
+ import { casesHandled, shouldNeverHappen } from '@livestore/utils';
2
2
  import { Match, ReadonlyArray, Schema } from '@livestore/utils/effect';
3
3
  import { UnexpectedError } from '../adapter-types.js';
4
4
  import * as EventId from '../schema/EventId.js';
@@ -7,64 +7,64 @@ import * as MutationEvent from '../schema/MutationEvent.js';
7
7
  * SyncState represents the current sync state of a sync node relative to an upstream node.
8
8
  * Events flow from local to upstream, with each state maintaining its own event head.
9
9
  *
10
- * Event Chain Structure:
10
+ * Example:
11
11
  * ```
12
- * +-------------------------+------------------------+
13
- * | ROLLBACK TAIL | PENDING EVENTS |
14
- * +-------------------------+------------------------+
15
- * ▼ ▼
16
- * Upstream Head Local Head
17
- * Example: (0,0), (0,1), (1,0) (1,1), (1,2), (2,0)
12
+ * +------------------------+
13
+ * | PENDING EVENTS |
14
+ * +------------------------+
15
+ * ▼ ▼
16
+ * Upstream Head Local Head
17
+ * (1,0) (1,1), (1,2), (2,0)
18
18
  * ```
19
19
  *
20
- * State:
21
- * - **Pending Events**: Events awaiting acknowledgment from the upstream.
22
- * - Can be confirmed or rejected by the upstream.
23
- * - Subject to rebase if rejected.
24
- * - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
20
+ * **Pending Events**: Events awaiting acknowledgment from the upstream.
21
+ * - Can be confirmed or rejected by the upstream.
22
+ * - Subject to rebase if rejected.
25
23
  *
26
24
  * Payloads:
27
25
  * - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
28
26
  * and rebase the pending events on top of the new events.
29
27
  * - `PayloadUpstreamAdvance`: Upstream has advanced, so downstream must rebase the pending events on top of the new events.
30
- * - `PayloadUpstreamTrimRollbackTail`: Upstream has advanced, so downstream can trim the rollback tail.
31
28
  * - `PayloadLocalPush`: Local push payload
32
29
  *
33
30
  * Invariants:
34
31
  * 1. **Chain Continuity**: Each event must reference its immediate parent.
35
32
  * 2. **Head Ordering**: Upstream Head ≤ Local Head.
36
- * 3. **ID Sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
33
+ * 3. **Event number sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
37
34
  *
38
- * The `updateSyncState` function processes updates to the sync state based on incoming payloads,
39
- * handling cases such as upstream rebase, advance, local push, and rollback tail trimming.
35
+ * A few further notes to help form an intuition:
36
+ * - The goal is to keep the pending events as small as possible (i.e. to have synced with the next upstream node)
37
+ * - There are 2 cases for rebasing:
38
+ * - The conflicting event only conflicts with the pending events -> only (some of) the pending events need to be rolled back
39
+ *
40
+ * The `merge` function processes updates to the sync state based on incoming payloads,
41
+ * handling cases such as upstream rebase, advance and local push.
40
42
  */
41
43
  export class SyncState extends Schema.Class('SyncState')({
42
44
  pending: Schema.Array(MutationEvent.EncodedWithMeta),
43
- rollbackTail: Schema.Array(MutationEvent.EncodedWithMeta),
45
+ /** What this node expects the next upstream node to have as its own local head */
44
46
  upstreamHead: EventId.EventId,
47
+ /** Equivalent to `pending.at(-1)?.id` if there are pending events */
45
48
  localHead: EventId.EventId,
46
49
  }) {
47
- toJSON = () => {
48
- return {
49
- pending: this.pending.map((e) => e.toJSON()),
50
- rollbackTail: this.rollbackTail.map((e) => e.toJSON()),
51
- upstreamHead: `(${this.upstreamHead.global},${this.upstreamHead.client})`,
52
- localHead: `(${this.localHead.global},${this.localHead.client})`,
53
- };
54
- };
50
+ toJSON = () => ({
51
+ pending: this.pending.map((e) => e.toJSON()),
52
+ upstreamHead: EventId.toString(this.upstreamHead),
53
+ localHead: EventId.toString(this.localHead),
54
+ });
55
55
  }
56
+ /**
57
+ * This payload propagates a rebase from the upstream node
58
+ */
56
59
  export class PayloadUpstreamRebase extends Schema.TaggedStruct('upstream-rebase', {
57
- /** Rollback until this event in the rollback tail (inclusive). Starting from the end of the rollback tail. */
58
- rollbackUntil: EventId.EventId,
60
+ /** Events which need to be rolled back */
61
+ rollbackEvents: Schema.Array(MutationEvent.EncodedWithMeta),
62
+ /** Events which need to be applied after the rollback (already rebased by the upstream node) */
59
63
  newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
60
- /** Trim rollback tail up to this event (inclusive). */
61
- trimRollbackUntil: Schema.optional(EventId.EventId),
62
64
  }) {
63
65
  }
64
66
  export class PayloadUpstreamAdvance extends Schema.TaggedStruct('upstream-advance', {
65
67
  newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
66
- /** Trim rollback tail up to this event (inclusive). */
67
- trimRollbackUntil: Schema.optional(EventId.EventId),
68
68
  }) {
69
69
  }
70
70
  export class PayloadLocalPush extends Schema.TaggedStruct('local-push', {
@@ -73,9 +73,10 @@ export class PayloadLocalPush extends Schema.TaggedStruct('local-push', {
73
73
  }
74
74
  export class Payload extends Schema.Union(PayloadUpstreamRebase, PayloadUpstreamAdvance, PayloadLocalPush) {
75
75
  }
76
- export const PayloadUpstream = Schema.Union(PayloadUpstreamRebase, PayloadUpstreamAdvance);
76
+ export class PayloadUpstream extends Schema.Union(PayloadUpstreamRebase, PayloadUpstreamAdvance) {
77
+ }
77
78
  /** Only used for debugging purposes */
78
- export class UpdateContext extends Schema.Class('UpdateContext')({
79
+ export class MergeContext extends Schema.Class('MergeContext')({
79
80
  payload: Payload,
80
81
  syncState: SyncState,
81
82
  }) {
@@ -86,9 +87,10 @@ export class UpdateContext extends Schema.Class('UpdateContext')({
86
87
  })), Match.tag('upstream-advance', () => ({
87
88
  _tag: 'upstream-advance',
88
89
  newEvents: this.payload.newEvents.map((e) => e.toJSON()),
89
- })), Match.tag('upstream-rebase', () => ({
90
+ })), Match.tag('upstream-rebase', (payload) => ({
90
91
  _tag: 'upstream-rebase',
91
- newEvents: this.payload.newEvents.map((e) => e.toJSON()),
92
+ newEvents: payload.newEvents.map((e) => e.toJSON()),
93
+ rollbackEvents: payload.rollbackEvents.map((e) => e.toJSON()),
92
94
  })), Match.exhaustive);
93
95
  return {
94
96
  payload,
@@ -96,137 +98,143 @@ export class UpdateContext extends Schema.Class('UpdateContext')({
96
98
  };
97
99
  };
98
100
  }
99
- export class UpdateResultAdvance extends Schema.Class('UpdateResultAdvance')({
101
+ export class MergeResultAdvance extends Schema.Class('MergeResultAdvance')({
100
102
  _tag: Schema.Literal('advance'),
101
103
  newSyncState: SyncState,
102
- /** Events which weren't pending before the update */
103
104
  newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
104
- updateContext: UpdateContext,
105
+ /** Events which were previously pending but are now confirmed */
106
+ confirmedEvents: Schema.Array(MutationEvent.EncodedWithMeta),
107
+ mergeContext: MergeContext,
105
108
  }) {
106
109
  toJSON = () => {
107
110
  return {
108
111
  _tag: this._tag,
109
112
  newSyncState: this.newSyncState.toJSON(),
110
113
  newEvents: this.newEvents.map((e) => e.toJSON()),
111
- updateContext: this.updateContext.toJSON(),
114
+ confirmedEvents: this.confirmedEvents.map((e) => e.toJSON()),
115
+ mergeContext: this.mergeContext.toJSON(),
112
116
  };
113
117
  };
114
118
  }
115
- export class UpdateResultRebase extends Schema.Class('UpdateResultRebase')({
119
+ export class MergeResultRebase extends Schema.Class('MergeResultRebase')({
116
120
  _tag: Schema.Literal('rebase'),
117
121
  newSyncState: SyncState,
118
- /** Events which weren't pending before the update */
119
122
  newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
120
- eventsToRollback: Schema.Array(MutationEvent.EncodedWithMeta),
121
- updateContext: UpdateContext,
123
+ /** Events which need to be rolled back */
124
+ rollbackEvents: Schema.Array(MutationEvent.EncodedWithMeta),
125
+ mergeContext: MergeContext,
122
126
  }) {
123
127
  toJSON = () => {
124
128
  return {
125
129
  _tag: this._tag,
126
130
  newSyncState: this.newSyncState.toJSON(),
127
131
  newEvents: this.newEvents.map((e) => e.toJSON()),
128
- eventsToRollback: this.eventsToRollback.map((e) => e.toJSON()),
129
- updateContext: this.updateContext.toJSON(),
132
+ rollbackEvents: this.rollbackEvents.map((e) => e.toJSON()),
133
+ mergeContext: this.mergeContext.toJSON(),
130
134
  };
131
135
  };
132
136
  }
133
- export class UpdateResultReject extends Schema.Class('UpdateResultReject')({
137
+ export class MergeResultReject extends Schema.Class('MergeResultReject')({
134
138
  _tag: Schema.Literal('reject'),
135
139
  /** The minimum id that the new events must have */
136
140
  expectedMinimumId: EventId.EventId,
137
- updateContext: UpdateContext,
141
+ mergeContext: MergeContext,
138
142
  }) {
139
143
  toJSON = () => {
140
144
  return {
141
145
  _tag: this._tag,
142
- expectedMinimumId: `(${this.expectedMinimumId.global},${this.expectedMinimumId.client})`,
143
- updateContext: this.updateContext.toJSON(),
146
+ expectedMinimumId: EventId.toString(this.expectedMinimumId),
147
+ mergeContext: this.mergeContext.toJSON(),
144
148
  };
145
149
  };
146
150
  }
147
- export class UpdateResultUnexpectedError extends Schema.Class('UpdateResultUnexpectedError')({
151
+ export class MergeResultUnexpectedError extends Schema.Class('MergeResultUnexpectedError')({
148
152
  _tag: Schema.Literal('unexpected-error'),
149
153
  cause: UnexpectedError,
150
154
  }) {
151
155
  }
152
- export class UpdateResult extends Schema.Union(UpdateResultAdvance, UpdateResultRebase, UpdateResultReject, UpdateResultUnexpectedError) {
156
+ export class MergeResult extends Schema.Union(MergeResultAdvance, MergeResultRebase, MergeResultReject, MergeResultUnexpectedError) {
153
157
  }
154
- const unexpectedError = (cause) => UpdateResultUnexpectedError.make({
158
+ const unexpectedError = (cause) => MergeResultUnexpectedError.make({
155
159
  _tag: 'unexpected-error',
156
160
  cause: new UnexpectedError({ cause }),
157
161
  });
158
- export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents = false, }) => {
159
- const trimRollbackTail = (rollbackTail) => {
160
- const trimRollbackUntil = payload._tag === 'local-push' ? undefined : payload.trimRollbackUntil;
161
- if (trimRollbackUntil === undefined)
162
- return rollbackTail;
163
- const index = rollbackTail.findIndex((event) => EventId.isEqual(event.id, trimRollbackUntil));
164
- if (index === -1)
165
- return [];
166
- return rollbackTail.slice(index + 1);
167
- };
168
- const updateContext = UpdateContext.make({ payload, syncState });
162
+ // TODO Idea: call merge recursively through hierarchy levels
163
+ /*
164
+ Idea: have a map that maps from `globalEventId` to Array<ClientEvents>
165
+ The same applies to even further hierarchy levels
166
+
167
+ TODO: possibly even keep the client events in a separate table in the client leader
168
+ */
169
+ export const merge = ({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents = false, }) => {
170
+ validateSyncState(syncState);
171
+ const mergeContext = MergeContext.make({ payload, syncState });
169
172
  switch (payload._tag) {
170
173
  case 'upstream-rebase': {
171
- // Find the index of the rollback event in the rollback tail
172
- const rollbackIndex = syncState.rollbackTail.findIndex((event) => EventId.isEqual(event.id, payload.rollbackUntil));
173
- if (rollbackIndex === -1) {
174
- return unexpectedError(`Rollback event not found in rollback tail. Rollback until: [${payload.rollbackUntil.global},${payload.rollbackUntil.client}]. Rollback tail: [${syncState.rollbackTail.map((e) => e.toString()).join(', ')}]`);
175
- }
176
- const eventsToRollback = [...syncState.rollbackTail.slice(rollbackIndex), ...syncState.pending];
174
+ const rollbackEvents = [...payload.rollbackEvents, ...syncState.pending];
177
175
  // Get the last new event's ID as the new upstream head
178
176
  const newUpstreamHead = payload.newEvents.at(-1)?.id ?? syncState.upstreamHead;
179
177
  // Rebase pending events on top of the new events
180
178
  const rebasedPending = rebaseEvents({
181
179
  events: syncState.pending,
182
180
  baseEventId: newUpstreamHead,
183
- isLocalEvent,
181
+ isClientEvent,
184
182
  });
185
- return UpdateResultRebase.make({
183
+ return MergeResultRebase.make({
186
184
  _tag: 'rebase',
187
185
  newSyncState: new SyncState({
188
186
  pending: rebasedPending,
189
- rollbackTail: trimRollbackTail([...syncState.rollbackTail.slice(0, rollbackIndex), ...payload.newEvents]),
190
187
  upstreamHead: newUpstreamHead,
191
188
  localHead: rebasedPending.at(-1)?.id ?? newUpstreamHead,
192
189
  }),
193
190
  newEvents: [...payload.newEvents, ...rebasedPending],
194
- eventsToRollback,
195
- updateContext,
191
+ rollbackEvents,
192
+ mergeContext,
196
193
  });
197
194
  }
195
+ // #region upstream-advance
198
196
  case 'upstream-advance': {
199
197
  if (payload.newEvents.length === 0) {
200
- return UpdateResultAdvance.make({
198
+ return MergeResultAdvance.make({
201
199
  _tag: 'advance',
202
200
  newSyncState: new SyncState({
203
201
  pending: syncState.pending,
204
- rollbackTail: trimRollbackTail(syncState.rollbackTail),
205
202
  upstreamHead: syncState.upstreamHead,
206
203
  localHead: syncState.localHead,
207
204
  }),
208
205
  newEvents: [],
209
- updateContext,
206
+ confirmedEvents: [],
207
+ mergeContext: mergeContext,
210
208
  });
211
209
  }
212
210
  // Validate that newEvents are sorted in ascending order by eventId
213
211
  for (let i = 1; i < payload.newEvents.length; i++) {
214
212
  if (EventId.isGreaterThan(payload.newEvents[i - 1].id, payload.newEvents[i].id)) {
215
- return unexpectedError(`Events must be sorted in ascending order by eventId. Received: [${payload.newEvents.map((e) => `(${e.id.global},${e.id.client})`).join(', ')}]`);
213
+ return unexpectedError(`Events must be sorted in ascending order by eventId. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`);
216
214
  }
217
215
  }
218
216
  // Validate that incoming events are larger than upstream head
219
- if (EventId.isGreaterThan(syncState.upstreamHead, payload.newEvents[0].id)) {
220
- return unexpectedError(`Incoming events must be greater than upstream head. Expected greater than: [${syncState.upstreamHead.global},${syncState.upstreamHead.client}]. Received: [${payload.newEvents.map((e) => `(${e.id.global},${e.id.client})`).join(', ')}]`);
217
+ if (EventId.isGreaterThan(syncState.upstreamHead, payload.newEvents[0].id) ||
218
+ EventId.isEqual(syncState.upstreamHead, payload.newEvents[0].id)) {
219
+ return unexpectedError(`Incoming events must be greater than upstream head. Expected greater than: ${EventId.toString(syncState.upstreamHead)}. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`);
220
+ }
221
+ // Validate that the parent id of the first incoming event is known
222
+ const knownEventGlobalIds = [...syncState.pending].flatMap((e) => [e.id.global, e.parentId.global]);
223
+ knownEventGlobalIds.push(syncState.upstreamHead.global);
224
+ const firstNewEvent = payload.newEvents[0];
225
+ const hasUnknownParentId = knownEventGlobalIds.includes(firstNewEvent.parentId.global) === false;
226
+ if (hasUnknownParentId) {
227
+ return unexpectedError(`Incoming events must have a known parent id. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`);
221
228
  }
222
229
  const newUpstreamHead = payload.newEvents.at(-1).id;
223
230
  const divergentPendingIndex = findDivergencePoint({
224
231
  existingEvents: syncState.pending,
225
232
  incomingEvents: payload.newEvents,
226
233
  isEqualEvent,
227
- isLocalEvent,
228
- ignoreLocalEvents,
234
+ isClientEvent,
235
+ ignoreClientEvents,
229
236
  });
237
+ // No divergent pending events, thus we can just advance (some of) the pending events
230
238
  if (divergentPendingIndex === -1) {
231
239
  const pendingEventIds = new Set(syncState.pending.map((e) => `${e.id.global},${e.id.client}`));
232
240
  const newEvents = payload.newEvents.filter((e) => !pendingEventIds.has(`${e.id.global},${e.id.client}`));
@@ -234,38 +242,29 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
234
242
  // we need to split the pending events into two groups:
235
243
  // - pendingMatching: The pending events up to point where they match the incoming events
236
244
  // - pendingRemaining: The pending events after the point where they match the incoming events
237
- // The `localIndexOffset` is used to account for the local events that are being ignored
238
- let localIndexOffset = 0;
245
+ // The `clientIndexOffset` is used to account for the client events that are being ignored
246
+ let clientIndexOffset = 0;
239
247
  const [pendingMatching, pendingRemaining] = ReadonlyArray.splitWhere(syncState.pending, (pendingEvent, index) => {
240
- if (ignoreLocalEvents && isLocalEvent(pendingEvent)) {
241
- localIndexOffset++;
248
+ if (ignoreClientEvents && isClientEvent(pendingEvent)) {
249
+ clientIndexOffset++;
242
250
  return false;
243
251
  }
244
- const newEvent = payload.newEvents.at(index - localIndexOffset);
252
+ const newEvent = payload.newEvents.at(index - clientIndexOffset);
245
253
  if (!newEvent) {
246
254
  return true;
247
255
  }
248
256
  return isEqualEvent(pendingEvent, newEvent) === false;
249
257
  });
250
- const seenEventIds = new Set();
251
- const pendingAndNewEvents = [...pendingMatching, ...payload.newEvents].filter((event) => {
252
- const eventIdStr = `${event.id.global},${event.id.client}`;
253
- if (seenEventIds.has(eventIdStr)) {
254
- return false;
255
- }
256
- seenEventIds.add(eventIdStr);
257
- return true;
258
- });
259
- return UpdateResultAdvance.make({
258
+ return MergeResultAdvance.make({
260
259
  _tag: 'advance',
261
260
  newSyncState: new SyncState({
262
261
  pending: pendingRemaining,
263
- rollbackTail: trimRollbackTail([...syncState.rollbackTail, ...pendingAndNewEvents]),
264
262
  upstreamHead: newUpstreamHead,
265
263
  localHead: pendingRemaining.at(-1)?.id ?? newUpstreamHead,
266
264
  }),
267
265
  newEvents,
268
- updateContext,
266
+ confirmedEvents: pendingMatching,
267
+ mergeContext: mergeContext,
269
268
  });
270
269
  }
271
270
  else {
@@ -273,59 +272,61 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
273
272
  const rebasedPending = rebaseEvents({
274
273
  events: divergentPending,
275
274
  baseEventId: newUpstreamHead,
276
- isLocalEvent,
275
+ isClientEvent,
277
276
  });
278
277
  const divergentNewEventsIndex = findDivergencePoint({
279
278
  existingEvents: payload.newEvents,
280
279
  incomingEvents: syncState.pending,
281
280
  isEqualEvent,
282
- isLocalEvent,
283
- ignoreLocalEvents,
281
+ isClientEvent,
282
+ ignoreClientEvents,
284
283
  });
285
- return UpdateResultRebase.make({
284
+ return MergeResultRebase.make({
286
285
  _tag: 'rebase',
287
286
  newSyncState: new SyncState({
288
287
  pending: rebasedPending,
289
- rollbackTail: trimRollbackTail([...syncState.rollbackTail, ...payload.newEvents]),
290
288
  upstreamHead: newUpstreamHead,
291
289
  localHead: rebasedPending.at(-1).id,
292
290
  }),
293
291
  newEvents: [...payload.newEvents.slice(divergentNewEventsIndex), ...rebasedPending],
294
- eventsToRollback: [...syncState.rollbackTail, ...divergentPending],
295
- updateContext,
292
+ rollbackEvents: divergentPending,
293
+ mergeContext,
296
294
  });
297
295
  }
298
296
  }
297
+ // #endregion
298
+ // This is the same as what's running in the sync backend
299
299
  case 'local-push': {
300
300
  if (payload.newEvents.length === 0) {
301
- return UpdateResultAdvance.make({
301
+ return MergeResultAdvance.make({
302
302
  _tag: 'advance',
303
303
  newSyncState: syncState,
304
304
  newEvents: [],
305
- updateContext,
305
+ confirmedEvents: [],
306
+ mergeContext: mergeContext,
306
307
  });
307
308
  }
308
309
  const newEventsFirst = payload.newEvents.at(0);
309
310
  const invalidEventId = EventId.isGreaterThan(newEventsFirst.id, syncState.localHead) === false;
310
311
  if (invalidEventId) {
311
312
  const expectedMinimumId = EventId.nextPair(syncState.localHead, true).id;
312
- return UpdateResultReject.make({
313
+ return MergeResultReject.make({
313
314
  _tag: 'reject',
314
315
  expectedMinimumId,
315
- updateContext,
316
+ mergeContext,
316
317
  });
317
318
  }
318
319
  else {
319
- return UpdateResultAdvance.make({
320
+ return MergeResultAdvance.make({
320
321
  _tag: 'advance',
321
322
  newSyncState: new SyncState({
322
323
  pending: [...syncState.pending, ...payload.newEvents],
323
- rollbackTail: syncState.rollbackTail,
324
324
  upstreamHead: syncState.upstreamHead,
325
325
  localHead: payload.newEvents.at(-1).id,
326
326
  }),
327
327
  newEvents: payload.newEvents,
328
- updateContext,
328
+ confirmedEvents: [],
329
+ mergeContext: mergeContext,
329
330
  });
330
331
  }
331
332
  }
@@ -338,19 +339,19 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
338
339
  * Gets the index relative to `existingEvents` where the divergence point is
339
340
  * by comparing each event in `existingEvents` to the corresponding event in `incomingEvents`
340
341
  */
341
- const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isLocalEvent, ignoreLocalEvents, }) => {
342
- if (ignoreLocalEvents) {
343
- const filteredExistingEvents = existingEvents.filter((event) => !isLocalEvent(event));
344
- const divergencePointWithoutLocalEvents = findDivergencePoint({
342
+ export const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isClientEvent, ignoreClientEvents, }) => {
343
+ if (ignoreClientEvents) {
344
+ const filteredExistingEvents = existingEvents.filter((event) => !isClientEvent(event));
345
+ const divergencePointWithoutClientEvents = findDivergencePoint({
345
346
  existingEvents: filteredExistingEvents,
346
347
  incomingEvents,
347
348
  isEqualEvent,
348
- isLocalEvent,
349
- ignoreLocalEvents: false,
349
+ isClientEvent,
350
+ ignoreClientEvents: false,
350
351
  });
351
- if (divergencePointWithoutLocalEvents === -1)
352
+ if (divergencePointWithoutClientEvents === -1)
352
353
  return -1;
353
- const divergencePointEventId = existingEvents[divergencePointWithoutLocalEvents].id;
354
+ const divergencePointEventId = existingEvents[divergencePointWithoutClientEvents].id;
354
355
  // Now find the divergence point in the original array
355
356
  return existingEvents.findIndex((event) => EventId.isEqual(event.id, divergencePointEventId));
356
357
  }
@@ -360,10 +361,10 @@ const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isL
360
361
  return incomingEvent && !isEqualEvent(existingEvent, incomingEvent);
361
362
  });
362
363
  };
363
- const rebaseEvents = ({ events, baseEventId, isLocalEvent, }) => {
364
+ const rebaseEvents = ({ events, baseEventId, isClientEvent, }) => {
364
365
  let prevEventId = baseEventId;
365
366
  return events.map((event) => {
366
- const isLocal = isLocalEvent(event);
367
+ const isLocal = isClientEvent(event);
367
368
  const newEvent = event.rebase(prevEventId, isLocal);
368
369
  prevEventId = newEvent.id;
369
370
  return newEvent;
@@ -376,5 +377,38 @@ const rebaseEvents = ({ events, baseEventId, isLocalEvent, }) => {
376
377
  * it could make sense to "flatten" update results into a single update result which the client session
377
378
  * can process more efficiently which avoids push-threshing
378
379
  */
379
- const _flattenUpdateResults = (_updateResults) => { };
380
+ const _flattenMergeResults = (_updateResults) => { };
381
+ const validateSyncState = (syncState) => {
382
+ for (let i = 0; i < syncState.pending.length; i++) {
383
+ const event = syncState.pending[i];
384
+ const nextEvent = syncState.pending[i + 1];
385
+ if (nextEvent === undefined)
386
+ break; // Reached end of chain
387
+ if (EventId.isGreaterThan(event.id, nextEvent.id)) {
388
+ shouldNeverHappen('Events must be sorted in ascending order by eventId', {
389
+ event,
390
+ nextEvent,
391
+ });
392
+ }
393
+ // If the global id has increased, then the client id must be 0
394
+ const globalIdHasIncreased = nextEvent.id.global > event.id.global;
395
+ if (globalIdHasIncreased) {
396
+ if (nextEvent.id.client !== 0) {
397
+ shouldNeverHappen(`New global events must point to clientId 0 in the parentId. Received: (${EventId.toString(nextEvent.id)})`, syncState.pending, {
398
+ event,
399
+ nextEvent,
400
+ });
401
+ }
402
+ }
403
+ else {
404
+ // Otherwise, the parentId must be the same as the previous event's id
405
+ if (EventId.isEqual(nextEvent.parentId, event.id) === false) {
406
+ shouldNeverHappen('Events must be linked in a continuous chain via the parentId', syncState.pending, {
407
+ event,
408
+ nextEvent,
409
+ });
410
+ }
411
+ }
412
+ }
413
+ };
380
414
  //# sourceMappingURL=syncstate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncstate.js","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncstate.js","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"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"}