@livestore/common 0.3.0-dev.1 → 0.3.0-dev.10

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 (146) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +26 -23
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js.map +1 -1
  5. package/dist/derived-mutations.d.ts +4 -4
  6. package/dist/derived-mutations.d.ts.map +1 -1
  7. package/dist/derived-mutations.test.js.map +1 -1
  8. package/dist/devtools/devtools-bridge.d.ts +2 -1
  9. package/dist/devtools/devtools-bridge.d.ts.map +1 -1
  10. package/dist/devtools/devtools-messages.d.ts +98 -110
  11. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  12. package/dist/devtools/devtools-messages.js +9 -6
  13. package/dist/devtools/devtools-messages.js.map +1 -1
  14. package/dist/index.d.ts +0 -4
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/leader-thread/LeaderSyncProcessor.d.ts +37 -0
  17. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
  18. package/dist/leader-thread/LeaderSyncProcessor.js +417 -0
  19. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
  20. package/dist/leader-thread/apply-mutation.d.ts +5 -2
  21. package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
  22. package/dist/leader-thread/apply-mutation.js +38 -26
  23. package/dist/leader-thread/apply-mutation.js.map +1 -1
  24. package/dist/leader-thread/leader-sync-processor.d.ts +2 -2
  25. package/dist/leader-thread/leader-sync-processor.d.ts.map +1 -1
  26. package/dist/leader-thread/leader-sync-processor.js +20 -12
  27. package/dist/leader-thread/leader-sync-processor.js.map +1 -1
  28. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  29. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  30. package/dist/leader-thread/leader-worker-devtools.js +22 -66
  31. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  32. package/dist/leader-thread/make-leader-thread-layer.d.ts +8 -7
  33. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  34. package/dist/leader-thread/make-leader-thread-layer.js +11 -5
  35. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  36. package/dist/leader-thread/mutationlog.d.ts +4 -17
  37. package/dist/leader-thread/mutationlog.d.ts.map +1 -1
  38. package/dist/leader-thread/mutationlog.js +2 -1
  39. package/dist/leader-thread/mutationlog.js.map +1 -1
  40. package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
  41. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  42. package/dist/leader-thread/recreate-db.js +9 -3
  43. package/dist/leader-thread/recreate-db.js.map +1 -1
  44. package/dist/leader-thread/types.d.ts +17 -9
  45. package/dist/leader-thread/types.d.ts.map +1 -1
  46. package/dist/leader-thread/types.js.map +1 -1
  47. package/dist/mutation.d.ts +9 -2
  48. package/dist/mutation.d.ts.map +1 -1
  49. package/dist/mutation.js +5 -5
  50. package/dist/mutation.js.map +1 -1
  51. package/dist/query-builder/impl.d.ts +1 -1
  52. package/dist/rehydrate-from-mutationlog.d.ts +2 -2
  53. package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
  54. package/dist/rehydrate-from-mutationlog.js +13 -19
  55. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  56. package/dist/schema/EventId.d.ts +16 -14
  57. package/dist/schema/EventId.d.ts.map +1 -1
  58. package/dist/schema/EventId.js +15 -7
  59. package/dist/schema/EventId.js.map +1 -1
  60. package/dist/schema/EventId.test.d.ts +2 -0
  61. package/dist/schema/EventId.test.d.ts.map +1 -0
  62. package/dist/schema/EventId.test.js +11 -0
  63. package/dist/schema/EventId.test.js.map +1 -0
  64. package/dist/schema/MutationEvent.d.ts +49 -80
  65. package/dist/schema/MutationEvent.d.ts.map +1 -1
  66. package/dist/schema/MutationEvent.js +32 -15
  67. package/dist/schema/MutationEvent.js.map +1 -1
  68. package/dist/schema/MutationEvent.test.d.ts +2 -0
  69. package/dist/schema/MutationEvent.test.d.ts.map +1 -0
  70. package/dist/schema/MutationEvent.test.js +2 -0
  71. package/dist/schema/MutationEvent.test.js.map +1 -0
  72. package/dist/schema/system-tables.d.ts +26 -26
  73. package/dist/schema/system-tables.d.ts.map +1 -1
  74. package/dist/schema/system-tables.js +19 -11
  75. package/dist/schema/system-tables.js.map +1 -1
  76. package/dist/schema-management/migrations.js +6 -6
  77. package/dist/schema-management/migrations.js.map +1 -1
  78. package/dist/sync/ClientSessionSyncProcessor.d.ts +45 -0
  79. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
  80. package/dist/sync/ClientSessionSyncProcessor.js +134 -0
  81. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
  82. package/dist/sync/client-session-sync-processor.d.ts +4 -4
  83. package/dist/sync/client-session-sync-processor.d.ts.map +1 -1
  84. package/dist/sync/index.d.ts +1 -1
  85. package/dist/sync/index.d.ts.map +1 -1
  86. package/dist/sync/index.js +1 -1
  87. package/dist/sync/index.js.map +1 -1
  88. package/dist/sync/next/history-dag-common.d.ts +1 -4
  89. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  90. package/dist/sync/next/history-dag-common.js +1 -1
  91. package/dist/sync/next/history-dag-common.js.map +1 -1
  92. package/dist/sync/next/rebase-events.d.ts +3 -3
  93. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  94. package/dist/sync/next/rebase-events.js +3 -2
  95. package/dist/sync/next/rebase-events.js.map +1 -1
  96. package/dist/sync/next/test/mutation-fixtures.d.ts.map +1 -1
  97. package/dist/sync/next/test/mutation-fixtures.js +3 -9
  98. package/dist/sync/next/test/mutation-fixtures.js.map +1 -1
  99. package/dist/sync/sync.d.ts +21 -11
  100. package/dist/sync/sync.d.ts.map +1 -1
  101. package/dist/sync/sync.js.map +1 -1
  102. package/dist/sync/syncstate.d.ts +45 -23
  103. package/dist/sync/syncstate.d.ts.map +1 -1
  104. package/dist/sync/syncstate.js +56 -12
  105. package/dist/sync/syncstate.js.map +1 -1
  106. package/dist/sync/syncstate.test.js +125 -69
  107. package/dist/sync/syncstate.test.js.map +1 -1
  108. package/dist/sync/validate-push-payload.d.ts +2 -2
  109. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  110. package/dist/sync/validate-push-payload.js +2 -2
  111. package/dist/sync/validate-push-payload.js.map +1 -1
  112. package/dist/version.d.ts +1 -1
  113. package/dist/version.d.ts.map +1 -1
  114. package/dist/version.js +1 -1
  115. package/dist/version.js.map +1 -1
  116. package/package.json +6 -5
  117. package/src/adapter-types.ts +22 -24
  118. package/src/derived-mutations.test.ts +1 -1
  119. package/src/derived-mutations.ts +9 -5
  120. package/src/devtools/devtools-bridge.ts +2 -1
  121. package/src/devtools/devtools-messages.ts +9 -6
  122. package/src/index.ts +0 -6
  123. package/src/leader-thread/{leader-sync-processor.ts → LeaderSyncProcessor.ts} +235 -230
  124. package/src/leader-thread/apply-mutation.ts +49 -31
  125. package/src/leader-thread/leader-worker-devtools.ts +30 -109
  126. package/src/leader-thread/make-leader-thread-layer.ts +24 -13
  127. package/src/leader-thread/mutationlog.ts +9 -5
  128. package/src/leader-thread/recreate-db.ts +9 -5
  129. package/src/leader-thread/types.ts +18 -11
  130. package/src/mutation.ts +17 -7
  131. package/src/rehydrate-from-mutationlog.ts +15 -23
  132. package/src/schema/EventId.test.ts +12 -0
  133. package/src/schema/EventId.ts +23 -9
  134. package/src/schema/MutationEvent.ts +46 -24
  135. package/src/schema/system-tables.ts +19 -11
  136. package/src/schema-management/migrations.ts +6 -6
  137. package/src/sync/{client-session-sync-processor.ts → ClientSessionSyncProcessor.ts} +11 -9
  138. package/src/sync/index.ts +1 -1
  139. package/src/sync/next/history-dag-common.ts +1 -1
  140. package/src/sync/next/rebase-events.ts +7 -7
  141. package/src/sync/next/test/mutation-fixtures.ts +3 -10
  142. package/src/sync/sync.ts +19 -6
  143. package/src/sync/syncstate.test.ts +127 -67
  144. package/src/sync/syncstate.ts +21 -19
  145. package/src/sync/validate-push-payload.ts +7 -4
  146. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IACrD,YAAY,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC1D,YAAY,EAAE,OAAO,CAAC,OAAO,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAA;CAC3B;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;EAKgB,CAAA;;IAGpC,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,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,YAAY,EAAE,SAAS,CAAA;IACvB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,qDAAqD;IACrD,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,EAAE,SAAS,CAAA;IACvB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,qDAAqD;IACrD,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IACvD,gBAAgB,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;CAC/D,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,iBAAiB,EAAE,SAAS,CAAA;IAC5B,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,CAAA;AAExF,eAAO,MAAM,eAAe,2EAMzB;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,YA+MH,CAAA"}
1
+ {"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,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,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,YAAY,EAAE,SAAS,CAAA;IACvB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,qDAAqD;IACrD,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,EAAE,SAAS,CAAA;IACvB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,qDAAqD;IACrD,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IACvD,gBAAgB,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;CAC/D,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,iBAAiB,EAAE,SAAS,CAAA;IAC5B,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,CAAA;AAExF,eAAO,MAAM,eAAe,2EAMzB;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,YA+MH,CAAA"}
@@ -2,12 +2,56 @@ import { shouldNeverHappen } from '@livestore/utils';
2
2
  import { ReadonlyArray, Schema } from '@livestore/utils/effect';
3
3
  import * as EventId from '../schema/EventId.js';
4
4
  import * as MutationEvent from '../schema/MutationEvent.js';
5
- export const SyncState = Schema.Struct({
5
+ /**
6
+ * SyncState represents the current sync state of a sync node relative to an upstream node.
7
+ * Events flow from local to upstream, with each state maintaining its own event head.
8
+ *
9
+ * Event Chain Structure:
10
+ * ```
11
+ * +-------------------------+------------------------+
12
+ * | ROLLBACK TAIL | PENDING EVENTS |
13
+ * +-------------------------+------------------------+
14
+ * ▼ ▼
15
+ * Upstream Head Local Head
16
+ * Example: (0,0), (0,1), (1,0) (1,1), (1,2), (2,0)
17
+ * ```
18
+ *
19
+ * State:
20
+ * - **Pending Events**: Events awaiting acknowledgment from the upstream.
21
+ * - Can be confirmed or rejected by the upstream.
22
+ * - Subject to rebase if rejected.
23
+ * - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
24
+ *
25
+ * Payloads:
26
+ * - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
27
+ * and rebase the pending events on top of the new events.
28
+ * - `PayloadUpstreamAdvance`: Upstream has advanced, so downstream must rebase the pending events on top of the new events.
29
+ * - `PayloadUpstreamTrimRollbackTail`: Upstream has advanced, so downstream can trim the rollback tail.
30
+ * - `PayloadLocalPush`: Local push payload
31
+ *
32
+ * Invariants:
33
+ * 1. **Chain Continuity**: Each event must reference its immediate parent.
34
+ * 2. **Head Ordering**: Upstream Head ≤ Local Head.
35
+ * 3. **ID Sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
36
+ *
37
+ * The `updateSyncState` function processes updates to the sync state based on incoming payloads,
38
+ * handling cases such as upstream rebase, advance, local push, and rollback tail trimming.
39
+ */
40
+ export class SyncState extends Schema.Class('SyncState')({
6
41
  pending: Schema.Array(MutationEvent.EncodedWithMeta),
7
42
  rollbackTail: Schema.Array(MutationEvent.EncodedWithMeta),
8
43
  upstreamHead: EventId.EventId,
9
44
  localHead: EventId.EventId,
10
- }).annotations({ title: 'SyncState' });
45
+ }) {
46
+ toJSON = () => {
47
+ return {
48
+ pending: this.pending.map((e) => e.toJSON()),
49
+ rollbackTail: this.rollbackTail.map((e) => e.toJSON()),
50
+ upstreamHead: `(${this.upstreamHead.global},${this.upstreamHead.local})`,
51
+ localHead: `(${this.localHead.global},${this.localHead.local})`,
52
+ };
53
+ };
54
+ }
11
55
  export class PayloadUpstreamRebase extends Schema.TaggedStruct('upstream-rebase', {
12
56
  /** Rollback until this event in the rollback tail (inclusive). Starting from the end of the rollback tail. */
13
57
  rollbackUntil: EventId.EventId,
@@ -57,12 +101,12 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
57
101
  });
58
102
  return {
59
103
  _tag: 'rebase',
60
- newSyncState: {
104
+ newSyncState: new SyncState({
61
105
  pending: rebasedPending,
62
106
  rollbackTail: trimRollbackTail([...syncState.rollbackTail.slice(0, rollbackIndex), ...payload.newEvents]),
63
107
  upstreamHead: newUpstreamHead,
64
108
  localHead: rebasedPending.at(-1)?.id ?? newUpstreamHead,
65
- },
109
+ }),
66
110
  previousSyncState: syncState,
67
111
  newEvents: payload.newEvents,
68
112
  eventsToRollback,
@@ -72,12 +116,12 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
72
116
  if (payload.newEvents.length === 0) {
73
117
  return {
74
118
  _tag: 'advance',
75
- newSyncState: {
119
+ newSyncState: new SyncState({
76
120
  pending: syncState.pending,
77
121
  rollbackTail: trimRollbackTail(syncState.rollbackTail),
78
122
  upstreamHead: syncState.upstreamHead,
79
123
  localHead: syncState.localHead,
80
- },
124
+ }),
81
125
  previousSyncState: syncState,
82
126
  newEvents: [],
83
127
  };
@@ -127,12 +171,12 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
127
171
  });
128
172
  return {
129
173
  _tag: 'advance',
130
- newSyncState: {
174
+ newSyncState: new SyncState({
131
175
  pending: pendingRemaining,
132
176
  rollbackTail: trimRollbackTail([...syncState.rollbackTail, ...pendingAndNewEvents]),
133
177
  upstreamHead: newUpstreamHead,
134
178
  localHead: pendingRemaining.at(-1)?.id ?? newUpstreamHead,
135
- },
179
+ }),
136
180
  previousSyncState: syncState,
137
181
  newEvents,
138
182
  };
@@ -153,12 +197,12 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
153
197
  });
154
198
  return {
155
199
  _tag: 'rebase',
156
- newSyncState: {
200
+ newSyncState: new SyncState({
157
201
  pending: rebasedPending,
158
202
  rollbackTail: trimRollbackTail([...syncState.rollbackTail, ...payload.newEvents]),
159
203
  upstreamHead: newUpstreamHead,
160
204
  localHead: rebasedPending.at(-1).id,
161
- },
205
+ }),
162
206
  previousSyncState: syncState,
163
207
  newEvents: [...payload.newEvents.slice(divergentNewEventsIndex), ...rebasedPending],
164
208
  eventsToRollback: [...syncState.rollbackTail, ...divergentPending],
@@ -178,12 +222,12 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
178
222
  else {
179
223
  return {
180
224
  _tag: 'advance',
181
- newSyncState: {
225
+ newSyncState: new SyncState({
182
226
  pending: [...syncState.pending, ...payload.newEvents],
183
227
  rollbackTail: syncState.rollbackTail,
184
228
  upstreamHead: syncState.upstreamHead,
185
229
  localHead: payload.newEvents.at(-1).id,
186
- },
230
+ }),
187
231
  previousSyncState: syncState,
188
232
  newEvents: payload.newEvents,
189
233
  };
@@ -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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"}
@@ -4,20 +4,16 @@ import * as EventId from '../schema/EventId.js';
4
4
  import * as MutationEvent from '../schema/MutationEvent.js';
5
5
  import * as SyncState from './syncstate.js';
6
6
  class TestEvent extends MutationEvent.EncodedWithMeta {
7
- id;
8
- parentId;
9
7
  payload;
10
8
  isLocal;
11
9
  constructor(id, parentId, payload, isLocal) {
12
10
  super({
13
- id,
14
- parentId,
11
+ id: EventId.make(id),
12
+ parentId: EventId.make(parentId),
15
13
  mutation: 'a',
16
14
  args: payload,
17
15
  meta: {},
18
16
  });
19
- this.id = id;
20
- this.parentId = parentId;
21
17
  this.payload = payload;
22
18
  this.isLocal = isLocal;
23
19
  }
@@ -39,12 +35,12 @@ describe('syncstate', () => {
39
35
  const run = ({ syncState, payload, ignoreLocalEvents = false, }) => SyncState.updateSyncState({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents });
40
36
  describe.each([{ trimRollbackUntil: false }, { trimRollbackUntil: true }])('upstream-rebase (trimRollbackUntil: $trimRollbackUntil)', ({ trimRollbackUntil }) => {
41
37
  it('should rollback until start', () => {
42
- const syncState = {
38
+ const syncState = new SyncState.SyncState({
43
39
  pending: [e_1_0],
44
40
  rollbackTail: [e_0_0, e_0_1],
45
41
  upstreamHead: EventId.ROOT,
46
42
  localHead: e_1_0.id,
47
- };
43
+ });
48
44
  const e_0_0_e_1_0 = e_0_0.rebase_(e_1_0.id);
49
45
  const e_0_1_e_1_1 = e_0_1.rebase_(e_0_0_e_1_0.id);
50
46
  const result = run({
@@ -65,18 +61,18 @@ describe('syncstate', () => {
65
61
  else {
66
62
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0_e_1_0, e_0_1_e_1_1]);
67
63
  }
68
- expect(result.newSyncState.upstreamHead).toBe(e_0_1_e_1_1.id);
64
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1_e_1_1.id);
69
65
  expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
70
66
  expectEventArraysEqual(result.newEvents, [e_0_0_e_1_0, e_0_1_e_1_1]);
71
67
  expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0]);
72
68
  });
73
69
  it('should rollback only to specified point', () => {
74
- const syncState = {
70
+ const syncState = new SyncState.SyncState({
75
71
  pending: [e_1_0],
76
72
  rollbackTail: [e_0_0, e_0_1],
77
73
  upstreamHead: EventId.ROOT,
78
74
  localHead: e_1_0.id,
79
- };
75
+ });
80
76
  const e_0_1_e_1_0 = e_0_1.rebase_(e_0_0.id);
81
77
  const result = run({
82
78
  syncState,
@@ -96,13 +92,18 @@ describe('syncstate', () => {
96
92
  else {
97
93
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1_e_1_0]);
98
94
  }
99
- expect(result.newSyncState.upstreamHead).toBe(e_0_1_e_1_0.id);
95
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1_e_1_0.id);
100
96
  expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
101
97
  expectEventArraysEqual(result.newEvents, [e_0_1_e_1_0]);
102
98
  expectEventArraysEqual(result.eventsToRollback, [e_0_1, e_1_0]);
103
99
  });
104
100
  it('should work for empty pending', () => {
105
- const syncState = { pending: [], rollbackTail: [e_0_0], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
101
+ const syncState = new SyncState.SyncState({
102
+ pending: [],
103
+ rollbackTail: [e_0_0],
104
+ upstreamHead: EventId.ROOT,
105
+ localHead: e_0_0.id,
106
+ });
106
107
  const result = run({
107
108
  syncState,
108
109
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
@@ -110,19 +111,29 @@ describe('syncstate', () => {
110
111
  expectRebase(result);
111
112
  expectEventArraysEqual(result.newSyncState.pending, []);
112
113
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_1_0]);
113
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
114
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
114
115
  expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
115
- expect(result.newEvents).toEqual([e_1_0]);
116
+ expect(result.newEvents).toStrictEqual([e_1_0]);
116
117
  });
117
118
  it('should fail for empty rollback tail', () => {
118
- const syncState = { pending: [], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
119
+ const syncState = new SyncState.SyncState({
120
+ pending: [],
121
+ rollbackTail: [],
122
+ upstreamHead: EventId.ROOT,
123
+ localHead: e_0_0.id,
124
+ });
119
125
  expect(() => run({
120
126
  syncState,
121
127
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
122
128
  })).toThrow();
123
129
  });
124
130
  it('should work for empty incoming', () => {
125
- const syncState = { pending: [], rollbackTail: [e_0_0], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
131
+ const syncState = new SyncState.SyncState({
132
+ pending: [],
133
+ rollbackTail: [e_0_0],
134
+ upstreamHead: EventId.ROOT,
135
+ localHead: e_0_0.id,
136
+ });
126
137
  const result = run({
127
138
  syncState,
128
139
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [] },
@@ -130,57 +141,82 @@ describe('syncstate', () => {
130
141
  expectRebase(result);
131
142
  expectEventArraysEqual(result.newSyncState.pending, []);
132
143
  expectEventArraysEqual(result.newSyncState.rollbackTail, []);
133
- expect(result.newSyncState.upstreamHead).toBe(EventId.ROOT);
144
+ expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT);
134
145
  expect(result.newSyncState.localHead).toMatchObject(EventId.ROOT);
135
- expect(result.newEvents).toEqual([]);
146
+ expect(result.newEvents).toStrictEqual([]);
136
147
  });
137
148
  });
138
149
  describe('upstream-advance: advance', () => {
139
150
  it('should throw error if newEvents are not sorted in ascending order by eventId (local)', () => {
140
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
151
+ const syncState = new SyncState.SyncState({
152
+ pending: [e_0_0],
153
+ rollbackTail: [],
154
+ upstreamHead: EventId.ROOT,
155
+ localHead: e_0_0.id,
156
+ });
141
157
  expect(() => run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_0] } })).toThrow();
142
158
  });
143
159
  it('should throw error if newEvents are not sorted in ascending order by eventId (global)', () => {
144
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
160
+ const syncState = new SyncState.SyncState({
161
+ pending: [e_0_0],
162
+ rollbackTail: [],
163
+ upstreamHead: EventId.ROOT,
164
+ localHead: e_0_0.id,
165
+ });
145
166
  expect(() => run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_0_0] } })).toThrow();
146
167
  });
147
168
  it('should acknowledge pending event when receiving matching event', () => {
148
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
169
+ const syncState = new SyncState.SyncState({
170
+ pending: [e_0_0],
171
+ rollbackTail: [],
172
+ upstreamHead: EventId.ROOT,
173
+ localHead: e_0_0.id,
174
+ });
149
175
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
150
176
  expectAdvance(result);
151
177
  expectEventArraysEqual(result.newSyncState.pending, []);
152
178
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
153
- expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
179
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id);
154
180
  expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
155
- expect(result.newEvents).toEqual([]);
181
+ expect(result.newEvents).toStrictEqual([]);
156
182
  });
157
183
  it('should acknowledge partial pending event when receiving matching event', () => {
158
- const syncState = {
184
+ const syncState = new SyncState.SyncState({
159
185
  pending: [e_0_0, e_1_0],
160
186
  rollbackTail: [],
161
187
  upstreamHead: EventId.ROOT,
162
188
  localHead: e_1_0.id,
163
- };
189
+ });
164
190
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
165
191
  expectAdvance(result);
166
192
  expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
167
193
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
168
- expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
194
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id);
169
195
  expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
170
- expect(result.newEvents).toEqual([]);
196
+ expect(result.newEvents).toStrictEqual([]);
171
197
  });
172
198
  it('should acknowledge pending event and add new event', () => {
173
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
199
+ const syncState = new SyncState.SyncState({
200
+ pending: [e_0_0],
201
+ rollbackTail: [],
202
+ upstreamHead: EventId.ROOT,
203
+ localHead: e_0_0.id,
204
+ });
174
205
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_1] } });
175
206
  expectAdvance(result);
176
207
  expectEventArraysEqual(result.newSyncState.pending, []);
177
208
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1]);
178
- expect(result.newSyncState.upstreamHead).toBe(e_0_1.id);
209
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1.id);
179
210
  expect(result.newSyncState.localHead).toMatchObject(e_0_1.id);
180
- expect(result.newEvents).toEqual([e_0_1]);
211
+ expect(result.newEvents).toStrictEqual([e_0_1]);
181
212
  });
182
213
  it('should acknowledge pending event and add multiple new events', () => {
183
- const syncState = { pending: [e_0_1], rollbackTail: [], upstreamHead: e_0_0.id, localHead: e_0_1.id };
214
+ const syncState = new SyncState.SyncState({
215
+ pending: [e_0_1],
216
+ rollbackTail: [],
217
+ upstreamHead: e_0_0.id,
218
+ localHead: e_0_1.id,
219
+ });
184
220
  const result = run({
185
221
  syncState,
186
222
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1] },
@@ -188,17 +224,17 @@ describe('syncstate', () => {
188
224
  expectAdvance(result);
189
225
  expectEventArraysEqual(result.newSyncState.pending, []);
190
226
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1]);
191
- expect(result.newSyncState.upstreamHead).toBe(e_1_1.id);
227
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1.id);
192
228
  expect(result.newSyncState.localHead).toMatchObject(e_1_1.id);
193
- expect(result.newEvents).toEqual([e_0_2, e_0_3, e_1_0, e_1_1]);
229
+ expect(result.newEvents).toStrictEqual([e_0_2, e_0_3, e_1_0, e_1_1]);
194
230
  });
195
231
  it('should ignore local events (incoming is subset of pending)', () => {
196
- const syncState = {
232
+ const syncState = new SyncState.SyncState({
197
233
  pending: [e_r_1, e_0_0],
198
234
  rollbackTail: [],
199
235
  upstreamHead: EventId.ROOT,
200
236
  localHead: e_0_0.id,
201
- };
237
+ });
202
238
  const result = run({
203
239
  syncState,
204
240
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
@@ -207,17 +243,17 @@ describe('syncstate', () => {
207
243
  expectAdvance(result);
208
244
  expectEventArraysEqual(result.newSyncState.pending, []);
209
245
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
210
- expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
246
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id);
211
247
  expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
212
- expect(result.newEvents).toEqual([]);
248
+ expect(result.newEvents).toStrictEqual([]);
213
249
  });
214
250
  it('should ignore local events (incoming is subset of pending case 2)', () => {
215
- const syncState = {
251
+ const syncState = new SyncState.SyncState({
216
252
  pending: [e_r_1, e_0_0, e_1_0],
217
253
  rollbackTail: [],
218
254
  upstreamHead: EventId.ROOT,
219
255
  localHead: e_0_0.id,
220
- };
256
+ });
221
257
  const result = run({
222
258
  syncState,
223
259
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
@@ -226,17 +262,17 @@ describe('syncstate', () => {
226
262
  expectAdvance(result);
227
263
  expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
228
264
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
229
- expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
265
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id);
230
266
  expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
231
- expect(result.newEvents).toEqual([]);
267
+ expect(result.newEvents).toStrictEqual([]);
232
268
  });
233
269
  it('should ignore local events (incoming goes beyond pending)', () => {
234
- const syncState = {
270
+ const syncState = new SyncState.SyncState({
235
271
  pending: [e_r_1, e_0_0, e_0_1],
236
272
  rollbackTail: [],
237
273
  upstreamHead: EventId.ROOT,
238
274
  localHead: e_0_1.id,
239
- };
275
+ });
240
276
  const result = run({
241
277
  syncState,
242
278
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_1_0] },
@@ -245,27 +281,37 @@ describe('syncstate', () => {
245
281
  expectAdvance(result);
246
282
  expectEventArraysEqual(result.newSyncState.pending, []);
247
283
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0, e_0_1, e_1_0]);
248
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
284
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
249
285
  expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
250
- expect(result.newEvents).toEqual([e_1_0]);
286
+ expect(result.newEvents).toStrictEqual([e_1_0]);
251
287
  });
252
288
  });
253
289
  describe('upstream-advance: rebase', () => {
254
290
  it('should rebase single local event to end', () => {
255
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
291
+ const syncState = new SyncState.SyncState({
292
+ pending: [e_0_0],
293
+ rollbackTail: [],
294
+ upstreamHead: EventId.ROOT,
295
+ localHead: e_0_0.id,
296
+ });
256
297
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1] } });
257
298
  const e_0_0_e_0_2 = e_0_0.rebase_(e_0_1.id);
258
299
  expectRebase(result);
259
300
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_0_2]);
260
301
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1]);
261
- expect(result.newSyncState.upstreamHead).toBe(e_0_1.id);
302
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1.id);
262
303
  expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_0_2.id);
263
304
  expectEventArraysEqual(result.eventsToRollback, [e_0_0]);
264
305
  expectEventArraysEqual(result.newEvents, [e_0_1, e_0_0_e_0_2]);
265
306
  });
266
307
  it('should rebase different event with same id (no rollback tail)', () => {
267
308
  const e_0_0_b = new TestEvent({ global: 0, local: 0 }, EventId.ROOT, '0_0_b', true);
268
- const syncState = { pending: [e_0_0_b], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0_b.id };
309
+ const syncState = new SyncState.SyncState({
310
+ pending: [e_0_0_b],
311
+ rollbackTail: [],
312
+ upstreamHead: EventId.ROOT,
313
+ localHead: e_0_0_b.id,
314
+ });
269
315
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
270
316
  const e_0_0_e_1_0 = e_0_0_b.rebase_(e_0_0.id);
271
317
  expectRebase(result);
@@ -273,17 +319,17 @@ describe('syncstate', () => {
273
319
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
274
320
  expectEventArraysEqual(result.newEvents, [e_0_0, e_0_0_e_1_0]);
275
321
  expectEventArraysEqual(result.eventsToRollback, [e_0_0_b]);
276
- expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
322
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id);
277
323
  expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_1_0.id);
278
324
  });
279
325
  it('should rebase different event with same id', () => {
280
326
  const e_1_0_b = new TestEvent({ global: 1, local: 0 }, e_0_0.id, '1_0_b', false);
281
- const syncState = {
327
+ const syncState = new SyncState.SyncState({
282
328
  pending: [e_1_0_b],
283
329
  rollbackTail: [e_0_0, e_0_1],
284
330
  upstreamHead: EventId.ROOT,
285
331
  localHead: e_1_0_b.id,
286
- };
332
+ });
287
333
  const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } });
288
334
  const e_1_0_e_2_0 = e_1_0_b.rebase_(e_1_0.id);
289
335
  expectRebase(result);
@@ -291,11 +337,16 @@ describe('syncstate', () => {
291
337
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1, e_1_0]);
292
338
  expectEventArraysEqual(result.newEvents, [e_1_0, e_1_0_e_2_0]);
293
339
  expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0_b]);
294
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
340
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
295
341
  expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
296
342
  });
297
343
  it('should rebase single local event to end (more incoming events)', () => {
298
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
344
+ const syncState = new SyncState.SyncState({
345
+ pending: [e_0_0],
346
+ rollbackTail: [],
347
+ upstreamHead: EventId.ROOT,
348
+ localHead: e_0_0.id,
349
+ });
299
350
  const result = run({
300
351
  syncState,
301
352
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
@@ -304,16 +355,16 @@ describe('syncstate', () => {
304
355
  expectRebase(result);
305
356
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_2_0]);
306
357
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0]);
307
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
358
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
308
359
  expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_2_0.id);
309
360
  });
310
361
  it('should only rebase divergent events when first event matches', () => {
311
- const syncState = {
362
+ const syncState = new SyncState.SyncState({
312
363
  pending: [e_0_0, e_0_1],
313
364
  rollbackTail: [],
314
365
  upstreamHead: EventId.ROOT,
315
366
  localHead: e_0_0.id,
316
- };
367
+ });
317
368
  const result = run({
318
369
  syncState,
319
370
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_2, e_0_3, e_1_0] },
@@ -324,16 +375,16 @@ describe('syncstate', () => {
324
375
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_2, e_0_3, e_1_0]);
325
376
  expectEventArraysEqual(result.eventsToRollback, [e_0_1]);
326
377
  expectEventArraysEqual(result.newEvents, [e_0_2, e_0_3, e_1_0, e_0_1_e_1_1]);
327
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
378
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
328
379
  expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_1.id);
329
380
  });
330
381
  it('should rebase all local events when incoming chain starts differently', () => {
331
- const syncState = {
382
+ const syncState = new SyncState.SyncState({
332
383
  pending: [e_0_0, e_0_1],
333
384
  rollbackTail: [],
334
385
  upstreamHead: EventId.ROOT,
335
386
  localHead: e_0_1.id,
336
- };
387
+ });
337
388
  const result = run({
338
389
  syncState,
339
390
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
@@ -345,30 +396,35 @@ describe('syncstate', () => {
345
396
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0]);
346
397
  expectEventArraysEqual(result.newEvents, [e_0_1, e_0_2, e_0_3, e_1_0, e_0_0_e_1_1, e_0_1_e_1_2]);
347
398
  expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1]);
348
- expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
399
+ expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id);
349
400
  expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_2.id);
350
401
  });
351
402
  describe('local-push', () => {
352
403
  describe('advance', () => {
353
404
  it('should advance with new events', () => {
354
- const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
405
+ const syncState = new SyncState.SyncState({
406
+ pending: [e_0_0],
407
+ rollbackTail: [],
408
+ upstreamHead: EventId.ROOT,
409
+ localHead: e_0_0.id,
410
+ });
355
411
  const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2, e_0_3] } });
356
412
  expectAdvance(result);
357
413
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0, e_0_1, e_0_2, e_0_3]);
358
414
  expectEventArraysEqual(result.newSyncState.rollbackTail, []);
359
- expect(result.newSyncState.upstreamHead).toBe(EventId.ROOT);
415
+ expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT);
360
416
  expect(result.newSyncState.localHead).toMatchObject(e_0_3.id);
361
417
  expectEventArraysEqual(result.newEvents, [e_0_1, e_0_2, e_0_3]);
362
418
  });
363
419
  });
364
420
  describe('reject', () => {
365
421
  it('should reject when new events are greater than pending events', () => {
366
- const syncState = {
422
+ const syncState = new SyncState.SyncState({
367
423
  pending: [e_0_0, e_0_1],
368
424
  rollbackTail: [],
369
425
  upstreamHead: EventId.ROOT,
370
426
  localHead: e_0_1.id,
371
- };
427
+ });
372
428
  const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2] } });
373
429
  expectReject(result);
374
430
  expect(result.expectedMinimumId).toMatchObject(e_0_2.id);
@@ -381,10 +437,10 @@ describe('syncstate', () => {
381
437
  const expectEventArraysEqual = (actual, expected) => {
382
438
  expect(actual.length).toBe(expected.length);
383
439
  actual.forEach((event, i) => {
384
- expect(event.id).toEqual(expected[i].id);
385
- expect(event.parentId).toEqual(expected[i].parentId);
386
- expect(event.mutation).toEqual(expected[i].mutation);
387
- expect(event.args).toEqual(expected[i].args);
440
+ expect(event.id).toStrictEqual(expected[i].id);
441
+ expect(event.parentId).toStrictEqual(expected[i].parentId);
442
+ expect(event.mutation).toStrictEqual(expected[i].mutation);
443
+ expect(event.args).toStrictEqual(expected[i].args);
388
444
  });
389
445
  };
390
446
  function expectAdvance(result) {