@livestore/common 0.3.0-dev.47 → 0.3.0-dev.49

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 (154) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +8 -6
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js +2 -2
  5. package/dist/adapter-types.js.map +1 -1
  6. package/dist/devtools/devtools-messages-client-session.d.ts +25 -25
  7. package/dist/devtools/devtools-messages-client-session.js +3 -3
  8. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  9. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  10. package/dist/devtools/devtools-messages-leader.d.ts +30 -30
  11. package/dist/devtools/devtools-messages-leader.js +3 -3
  12. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  13. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  14. package/dist/leader-thread/LeaderSyncProcessor.js +27 -25
  15. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  16. package/dist/leader-thread/eventlog.d.ts +10 -10
  17. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  18. package/dist/leader-thread/eventlog.js +24 -24
  19. package/dist/leader-thread/eventlog.js.map +1 -1
  20. package/dist/leader-thread/leader-worker-devtools.js +1 -1
  21. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  22. package/dist/leader-thread/materialize-event.d.ts +3 -3
  23. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  24. package/dist/leader-thread/materialize-event.js +19 -15
  25. package/dist/leader-thread/materialize-event.js.map +1 -1
  26. package/dist/leader-thread/types.d.ts +4 -4
  27. package/dist/leader-thread/types.d.ts.map +1 -1
  28. package/dist/make-client-session.d.ts +1 -1
  29. package/dist/make-client-session.d.ts.map +1 -1
  30. package/dist/make-client-session.js +2 -1
  31. package/dist/make-client-session.js.map +1 -1
  32. package/dist/materializer-helper.d.ts.map +1 -1
  33. package/dist/materializer-helper.js +4 -2
  34. package/dist/materializer-helper.js.map +1 -1
  35. package/dist/rematerialize-from-eventlog.js +9 -9
  36. package/dist/rematerialize-from-eventlog.js.map +1 -1
  37. package/dist/schema/EventId.d.ts +28 -28
  38. package/dist/schema/EventId.d.ts.map +1 -1
  39. package/dist/schema/EventId.js +9 -9
  40. package/dist/schema/EventId.js.map +1 -1
  41. package/dist/schema/EventId.test.js +5 -5
  42. package/dist/schema/EventId.test.js.map +1 -1
  43. package/dist/schema/EventNumber.d.ts +57 -0
  44. package/dist/schema/EventNumber.d.ts.map +1 -0
  45. package/dist/schema/EventNumber.js +82 -0
  46. package/dist/schema/EventNumber.js.map +1 -0
  47. package/dist/schema/EventNumber.test.d.ts +2 -0
  48. package/dist/schema/EventNumber.test.d.ts.map +1 -0
  49. package/dist/schema/EventNumber.test.js +11 -0
  50. package/dist/schema/EventNumber.test.js.map +1 -0
  51. package/dist/schema/EventSequenceNumber.d.ts +57 -0
  52. package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
  53. package/dist/schema/EventSequenceNumber.js +82 -0
  54. package/dist/schema/EventSequenceNumber.js.map +1 -0
  55. package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
  56. package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
  57. package/dist/schema/EventSequenceNumber.test.js +11 -0
  58. package/dist/schema/EventSequenceNumber.test.js.map +1 -0
  59. package/dist/schema/LiveStoreEvent.d.ts +81 -79
  60. package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
  61. package/dist/schema/LiveStoreEvent.js +31 -32
  62. package/dist/schema/LiveStoreEvent.js.map +1 -1
  63. package/dist/schema/mod.d.ts +1 -1
  64. package/dist/schema/mod.d.ts.map +1 -1
  65. package/dist/schema/mod.js +1 -1
  66. package/dist/schema/mod.js.map +1 -1
  67. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  68. package/dist/schema/state/sqlite/query-builder/impl.js +2 -2
  69. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  70. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +3 -3
  71. package/dist/schema/state/sqlite/query-builder/impl.test.js +9 -0
  72. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  73. package/dist/schema/state/sqlite/system-tables.d.ts +52 -52
  74. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
  75. package/dist/schema/state/sqlite/system-tables.js +11 -10
  76. package/dist/schema/state/sqlite/system-tables.js.map +1 -1
  77. package/dist/sync/ClientSessionSyncProcessor.js +6 -6
  78. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  79. package/dist/sync/next/compact-events.js +38 -35
  80. package/dist/sync/next/compact-events.js.map +1 -1
  81. package/dist/sync/next/facts.d.ts +4 -4
  82. package/dist/sync/next/facts.d.ts.map +1 -1
  83. package/dist/sync/next/facts.js +8 -8
  84. package/dist/sync/next/facts.js.map +1 -1
  85. package/dist/sync/next/history-dag-common.d.ts +4 -4
  86. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  87. package/dist/sync/next/history-dag-common.js +7 -4
  88. package/dist/sync/next/history-dag-common.js.map +1 -1
  89. package/dist/sync/next/history-dag.d.ts +0 -2
  90. package/dist/sync/next/history-dag.d.ts.map +1 -1
  91. package/dist/sync/next/history-dag.js +15 -13
  92. package/dist/sync/next/history-dag.js.map +1 -1
  93. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  94. package/dist/sync/next/rebase-events.js +10 -4
  95. package/dist/sync/next/rebase-events.js.map +1 -1
  96. package/dist/sync/next/test/compact-events.calculator.test.js +13 -13
  97. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  98. package/dist/sync/next/test/compact-events.test.js +31 -31
  99. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  100. package/dist/sync/next/test/event-fixtures.d.ts +10 -0
  101. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  102. package/dist/sync/next/test/event-fixtures.js +19 -13
  103. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  104. package/dist/sync/sync.d.ts +11 -11
  105. package/dist/sync/sync.d.ts.map +1 -1
  106. package/dist/sync/sync.js +5 -5
  107. package/dist/sync/sync.js.map +1 -1
  108. package/dist/sync/syncstate.d.ts +18 -18
  109. package/dist/sync/syncstate.d.ts.map +1 -1
  110. package/dist/sync/syncstate.js +46 -47
  111. package/dist/sync/syncstate.js.map +1 -1
  112. package/dist/sync/syncstate.test.js +110 -110
  113. package/dist/sync/syncstate.test.js.map +1 -1
  114. package/dist/sync/validate-push-payload.d.ts +2 -2
  115. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  116. package/dist/sync/validate-push-payload.js +4 -4
  117. package/dist/sync/validate-push-payload.js.map +1 -1
  118. package/dist/version.d.ts +2 -2
  119. package/dist/version.js +2 -2
  120. package/package.json +4 -4
  121. package/src/adapter-types.ts +6 -4
  122. package/src/devtools/devtools-messages-client-session.ts +3 -3
  123. package/src/devtools/devtools-messages-leader.ts +3 -3
  124. package/src/leader-thread/LeaderSyncProcessor.ts +36 -29
  125. package/src/leader-thread/eventlog.ts +36 -31
  126. package/src/leader-thread/leader-worker-devtools.ts +1 -1
  127. package/src/leader-thread/materialize-event.ts +21 -17
  128. package/src/leader-thread/types.ts +4 -4
  129. package/src/make-client-session.ts +2 -0
  130. package/src/materializer-helper.ts +5 -2
  131. package/src/rematerialize-from-eventlog.ts +10 -10
  132. package/src/schema/EventSequenceNumber.test.ts +12 -0
  133. package/src/schema/EventSequenceNumber.ts +121 -0
  134. package/src/schema/LiveStoreEvent.ts +66 -65
  135. package/src/schema/mod.ts +1 -1
  136. package/src/schema/state/sqlite/query-builder/impl.test.ts +9 -0
  137. package/src/schema/state/sqlite/query-builder/impl.ts +3 -2
  138. package/src/schema/state/sqlite/system-tables.ts +11 -10
  139. package/src/sync/ClientSessionSyncProcessor.ts +6 -6
  140. package/src/sync/next/compact-events.ts +38 -35
  141. package/src/sync/next/facts.ts +12 -9
  142. package/src/sync/next/history-dag-common.ts +9 -6
  143. package/src/sync/next/history-dag.ts +15 -16
  144. package/src/sync/next/rebase-events.ts +10 -4
  145. package/src/sync/next/test/compact-events.calculator.test.ts +13 -13
  146. package/src/sync/next/test/compact-events.test.ts +31 -31
  147. package/src/sync/next/test/event-fixtures.ts +20 -13
  148. package/src/sync/sync.ts +7 -7
  149. package/src/sync/syncstate.test.ts +112 -112
  150. package/src/sync/syncstate.ts +58 -48
  151. package/src/sync/validate-push-payload.ts +5 -5
  152. package/src/version.ts +2 -2
  153. package/src/schema/EventId.test.ts +0 -12
  154. package/src/schema/EventId.ts +0 -106
@@ -2,12 +2,19 @@ import { Schema } from '@livestore/utils/effect'
2
2
 
3
3
  import type { EventDef } from '../../../schema/EventDef.js'
4
4
  import { defineEvent, defineFacts } from '../../../schema/EventDef.js'
5
- import * as EventId from '../../../schema/EventId.js'
5
+ import * as EventSequenceNumber from '../../../schema/EventSequenceNumber.js'
6
6
  import { factsSnapshotForDag, getFactsGroupForEventArgs } from '../facts.js'
7
7
  import { historyDagFromNodes } from '../history-dag.js'
8
8
  import type { HistoryDagNode } from '../history-dag-common.js'
9
9
  import { rootEventNode } from '../history-dag-common.js'
10
10
 
11
+ export const printEvent = ({ seqNum, parentSeqNum, factsGroup, ...rest }: HistoryDagNode) => ({
12
+ seqNum: EventSequenceNumber.toString(seqNum),
13
+ parentSeqNum: EventSequenceNumber.toString(parentSeqNum),
14
+ ...rest,
15
+ facts: factsGroup,
16
+ })
17
+
11
18
  /** Used for conflict detection and event history compaction */
12
19
  export const facts = defineFacts({
13
20
  todoExists: (id: string) => `todo-exists-${id}`,
@@ -131,15 +138,15 @@ export const toEventNodes = (
131
138
  ): HistoryDagNode[] => {
132
139
  const nodesAcc: HistoryDagNode[] = [rootEventNode]
133
140
 
134
- let currentEventId: EventId.EventId = EventId.ROOT
141
+ let currentEventSequenceNumber: EventSequenceNumber.EventSequenceNumber = EventSequenceNumber.ROOT
135
142
 
136
143
  const eventNodes = partialEvents.map((partialEvent) => {
137
144
  const eventDef = eventDefs[partialEvent.name]!
138
- const eventId = EventId.nextPair(currentEventId, eventDef.options.clientOnly).id
139
- currentEventId = eventId
145
+ const eventNum = EventSequenceNumber.nextPair(currentEventSequenceNumber, eventDef.options.clientOnly).seqNum
146
+ currentEventSequenceNumber = eventNum
140
147
 
141
148
  const factsSnapshot = factsSnapshotForDag(historyDagFromNodes(nodesAcc, { skipFactsCheck: true }), undefined)
142
- // console.log('factsSnapshot', eventId, factsSnapshot)
149
+ // console.log('factsSnapshot', eventNum, factsSnapshot)
143
150
  // const depRead: EventDefFactsSnapshot = new Map<string, any>()
144
151
  // const factsSnapshotProxy = new Proxy(factsSnapshot, {
145
152
  // get: (target, prop) => {
@@ -188,8 +195,8 @@ export const toEventNodes = (
188
195
  })
189
196
 
190
197
  const node = {
191
- id: eventId,
192
- parentId: getParentId(eventId),
198
+ seqNum: eventNum,
199
+ parentSeqNum: getParentNum(eventNum),
193
200
  name: partialEvent.name,
194
201
  args: partialEvent.args,
195
202
  factsGroup: facts,
@@ -207,13 +214,13 @@ export const toEventNodes = (
207
214
  return eventNodes
208
215
  }
209
216
 
210
- const getParentId = (eventId: EventId.EventId): EventId.EventId => {
211
- const globalParentId = eventId.global
212
- const clientParentId = eventId.client - 1
217
+ const getParentNum = (eventNum: EventSequenceNumber.EventSequenceNumber): EventSequenceNumber.EventSequenceNumber => {
218
+ const globalParentNum = eventNum.global
219
+ const clientParentNum = eventNum.client - 1
213
220
 
214
- if (clientParentId < 0) {
215
- return EventId.make({ global: globalParentId - 1, client: EventId.clientDefault })
221
+ if (clientParentNum < 0) {
222
+ return EventSequenceNumber.make({ global: globalParentNum - 1, client: EventSequenceNumber.clientDefault })
216
223
  }
217
224
 
218
- return EventId.make({ global: globalParentId, client: clientParentId })
225
+ return EventSequenceNumber.make({ global: globalParentNum, client: clientParentNum })
219
226
  }
package/src/sync/sync.ts CHANGED
@@ -3,7 +3,7 @@ import { Schema } from '@livestore/utils/effect'
3
3
 
4
4
  import type { UnexpectedError } from '../adapter-types.js'
5
5
  import type { InitialSyncOptions } from '../leader-thread/types.js'
6
- import * as EventId from '../schema/EventId.js'
6
+ import * as EventSequenceNumber from '../schema/EventSequenceNumber.js'
7
7
  import type * as LiveStoreEvent from '../schema/LiveStoreEvent.js'
8
8
 
9
9
  /**
@@ -42,7 +42,7 @@ export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
42
42
  connect: Effect.Effect<void, IsOfflineError | UnexpectedError, HttpClient.HttpClient | Scope.Scope>
43
43
  pull: (
44
44
  args: Option.Option<{
45
- cursor: EventId.EventId
45
+ cursor: EventSequenceNumber.EventSequenceNumber
46
46
  metadata: Option.Option<TSyncMetadata>
47
47
  }>,
48
48
  ) => Stream.Stream<
@@ -61,7 +61,7 @@ export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
61
61
  /**
62
62
  * Constraints for batch:
63
63
  * - Number of events: 1-100
64
- * - event ids must be in ascending order
64
+ * - sequence numbers must be in ascending order
65
65
  * */
66
66
  batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>,
67
67
  ) => Effect.Effect<void, IsOfflineError | InvalidPushError, HttpClient.HttpClient>
@@ -80,8 +80,8 @@ export class InvalidPushError extends Schema.TaggedError<InvalidPushError>()('In
80
80
  message: Schema.String,
81
81
  }),
82
82
  Schema.TaggedStruct('ServerAhead', {
83
- minimumExpectedId: Schema.Number,
84
- providedId: Schema.Number,
83
+ minimumExpectedNum: Schema.Number,
84
+ providedNum: Schema.Number,
85
85
  }),
86
86
  ),
87
87
  }) {}
@@ -91,8 +91,8 @@ export class InvalidPullError extends Schema.TaggedError<InvalidPullError>()('In
91
91
  }) {}
92
92
 
93
93
  export class LeaderAheadError extends Schema.TaggedError<LeaderAheadError>()('LeaderAheadError', {
94
- minimumExpectedId: EventId.EventId,
95
- providedId: EventId.EventId,
94
+ minimumExpectedNum: EventSequenceNumber.EventSequenceNumber,
95
+ providedNum: EventSequenceNumber.EventSequenceNumber,
96
96
  /** Generation number the client session should use for subsequent pushes */
97
97
  // nextGeneration: Schema.Number,
98
98
  }) {}
@@ -1,20 +1,20 @@
1
1
  /* eslint-disable prefer-arrow/prefer-arrow-functions */
2
2
  import { describe, expect, it } from 'vitest'
3
3
 
4
- import * as EventId from '../schema/EventId.js'
4
+ import * as EventSequenceNumber from '../schema/EventSequenceNumber.js'
5
5
  import * as LiveStoreEvent from '../schema/LiveStoreEvent.js'
6
6
  import * as SyncState from './syncstate.js'
7
7
 
8
8
  class TestEvent extends LiveStoreEvent.EncodedWithMeta {
9
9
  constructor(
10
- id: EventId.EventId | typeof EventId.EventId.Encoded,
11
- parentId: EventId.EventId,
10
+ seqNum: EventSequenceNumber.EventSequenceNumber | typeof EventSequenceNumber.EventSequenceNumber.Encoded,
11
+ parentSeqNum: EventSequenceNumber.EventSequenceNumber,
12
12
  public readonly payload: string,
13
13
  public readonly isLocal: boolean,
14
14
  ) {
15
15
  super({
16
- id: EventId.make(id),
17
- parentId: EventId.make(parentId),
16
+ seqNum: EventSequenceNumber.make(seqNum),
17
+ parentSeqNum: EventSequenceNumber.make(parentSeqNum),
18
18
  name: 'a',
19
19
  args: payload,
20
20
  clientId: 'static-local-id',
@@ -22,22 +22,22 @@ class TestEvent extends LiveStoreEvent.EncodedWithMeta {
22
22
  })
23
23
  }
24
24
 
25
- rebase_ = (parentId: EventId.EventId) => {
26
- return this.rebase(parentId, this.isLocal)
25
+ rebase_ = (parentSeqNum: EventSequenceNumber.EventSequenceNumber) => {
26
+ return this.rebase(parentSeqNum, this.isLocal)
27
27
  }
28
28
 
29
29
  // Only used for Vitest printing
30
- // toJSON = () => `(${this.id.global},${this.id.client},${this.payload})`
30
+ // toJSON = () => `(${this.seqNum.global},${this.seqNum.client},${this.payload})`
31
31
  // toString = () => this.toJSON()
32
32
  }
33
33
 
34
- const e0_1 = new TestEvent({ global: 0, client: 1 }, EventId.ROOT, 'a', true)
35
- const e1_0 = new TestEvent({ global: 1, client: 0 }, EventId.ROOT, 'a', false)
36
- const e1_1 = new TestEvent({ global: 1, client: 1 }, e1_0.id, 'a', true)
37
- const e1_2 = new TestEvent({ global: 1, client: 2 }, e1_1.id, 'a', true)
38
- const e1_3 = new TestEvent({ global: 1, client: 3 }, e1_2.id, 'a', true)
39
- const e2_0 = new TestEvent({ global: 2, client: 0 }, e1_0.id, 'a', false)
40
- const e2_1 = new TestEvent({ global: 2, client: 1 }, e2_0.id, 'a', true)
34
+ const e0_1 = new TestEvent({ global: 0, client: 1 }, EventSequenceNumber.ROOT, 'a', true)
35
+ const e1_0 = new TestEvent({ global: 1, client: 0 }, EventSequenceNumber.ROOT, 'a', false)
36
+ const e1_1 = new TestEvent({ global: 1, client: 1 }, e1_0.seqNum, 'a', true)
37
+ const e1_2 = new TestEvent({ global: 1, client: 2 }, e1_1.seqNum, 'a', true)
38
+ const e1_3 = new TestEvent({ global: 1, client: 3 }, e1_2.seqNum, 'a', true)
39
+ const e2_0 = new TestEvent({ global: 2, client: 0 }, e1_0.seqNum, 'a', false)
40
+ const e2_1 = new TestEvent({ global: 2, client: 1 }, e2_0.seqNum, 'a', true)
41
41
 
42
42
  const isEqualEvent = LiveStoreEvent.isEqualEncoded
43
43
 
@@ -59,11 +59,11 @@ describe('syncstate', () => {
59
59
  it('should rollback until start', () => {
60
60
  const syncState = new SyncState.SyncState({
61
61
  pending: [e2_0],
62
- upstreamHead: EventId.ROOT,
63
- localHead: e2_0.id,
62
+ upstreamHead: EventSequenceNumber.ROOT,
63
+ localHead: e2_0.seqNum,
64
64
  })
65
- const e1_0_e2_0 = e1_0.rebase_(e2_0.id)
66
- const e1_1_e2_1 = e1_1.rebase_(e1_0_e2_0.id)
65
+ const e1_0_e2_0 = e1_0.rebase_(e2_0.seqNum)
66
+ const e1_1_e2_1 = e1_1.rebase_(e1_0_e2_0.seqNum)
67
67
  const result = merge({
68
68
  syncState,
69
69
  payload: SyncState.PayloadUpstreamRebase.make({
@@ -71,11 +71,11 @@ describe('syncstate', () => {
71
71
  newEvents: [e1_0_e2_0, e1_1_e2_1],
72
72
  }),
73
73
  })
74
- const e2_0_e3_0 = e2_0.rebase_(e1_0_e2_0.id)
74
+ const e2_0_e3_0 = e2_0.rebase_(e1_0_e2_0.seqNum)
75
75
  expectRebase(result)
76
76
  expectEventArraysEqual(result.newSyncState.pending, [e2_0_e3_0])
77
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_1_e2_1.id)
78
- expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.id)
77
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_1_e2_1.seqNum)
78
+ expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum)
79
79
  expectEventArraysEqual(result.newEvents, [e1_0_e2_0, e1_1_e2_1, e2_0_e3_0])
80
80
  expectEventArraysEqual(result.rollbackEvents, [e1_0, e1_1, e2_0])
81
81
  })
@@ -83,10 +83,10 @@ describe('syncstate', () => {
83
83
  it('should rollback only to specified point', () => {
84
84
  const syncState = new SyncState.SyncState({
85
85
  pending: [e2_0],
86
- upstreamHead: EventId.ROOT,
87
- localHead: e2_0.id,
86
+ upstreamHead: EventSequenceNumber.ROOT,
87
+ localHead: e2_0.seqNum,
88
88
  })
89
- const e1_1_e2_0 = e1_1.rebase_(e1_0.id)
89
+ const e1_1_e2_0 = e1_1.rebase_(e1_0.seqNum)
90
90
  const result = merge({
91
91
  syncState,
92
92
  payload: SyncState.PayloadUpstreamRebase.make({
@@ -94,11 +94,11 @@ describe('syncstate', () => {
94
94
  rollbackEvents: [e1_1],
95
95
  }),
96
96
  })
97
- const e2_0_e3_0 = e2_0.rebase_(e1_1_e2_0.id)
97
+ const e2_0_e3_0 = e2_0.rebase_(e1_1_e2_0.seqNum)
98
98
  expectRebase(result)
99
99
  expectEventArraysEqual(result.newSyncState.pending, [e2_0_e3_0])
100
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_1_e2_0.id)
101
- expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.id)
100
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_1_e2_0.seqNum)
101
+ expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum)
102
102
  expectEventArraysEqual(result.newEvents, [e1_1_e2_0, e2_0_e3_0])
103
103
  expectEventArraysEqual(result.rollbackEvents, [e1_1, e2_0])
104
104
  })
@@ -106,8 +106,8 @@ describe('syncstate', () => {
106
106
  it('should work for empty pending', () => {
107
107
  const syncState = new SyncState.SyncState({
108
108
  pending: [],
109
- upstreamHead: EventId.ROOT,
110
- localHead: e1_0.id,
109
+ upstreamHead: EventSequenceNumber.ROOT,
110
+ localHead: e1_0.seqNum,
111
111
  })
112
112
  const result = merge({
113
113
  syncState,
@@ -115,28 +115,28 @@ describe('syncstate', () => {
115
115
  })
116
116
  expectRebase(result)
117
117
  expectEventArraysEqual(result.newSyncState.pending, [])
118
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
119
- expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
118
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
119
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum)
120
120
  expect(result.newEvents).toStrictEqual([e2_0])
121
121
  })
122
122
  })
123
123
 
124
124
  describe('upstream-advance: advance', () => {
125
- it('should throw error if newEvents are not sorted in ascending order by eventId (client)', () => {
125
+ it('should throw error if newEvents are not sorted in ascending order by event number (client)', () => {
126
126
  const syncState = new SyncState.SyncState({
127
127
  pending: [e1_0],
128
- upstreamHead: EventId.ROOT,
129
- localHead: e1_0.id,
128
+ upstreamHead: EventSequenceNumber.ROOT,
129
+ localHead: e1_0.seqNum,
130
130
  })
131
131
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_1, e1_0] } })
132
132
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
133
133
  })
134
134
 
135
- it('should throw error if newEvents are not sorted in ascending order by eventId (global)', () => {
135
+ it('should throw error if newEvents are not sorted in ascending order by event number (global)', () => {
136
136
  const syncState = new SyncState.SyncState({
137
137
  pending: [e1_0],
138
- upstreamHead: EventId.ROOT,
139
- localHead: e1_0.id,
138
+ upstreamHead: EventSequenceNumber.ROOT,
139
+ localHead: e1_0.seqNum,
140
140
  })
141
141
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0, e1_0] } })
142
142
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
@@ -145,8 +145,8 @@ describe('syncstate', () => {
145
145
  it('should throw error if incoming event is < expected upstream head', () => {
146
146
  const syncState = new SyncState.SyncState({
147
147
  pending: [],
148
- upstreamHead: e2_0.id,
149
- localHead: e2_0.id,
148
+ upstreamHead: e2_0.seqNum,
149
+ localHead: e2_0.seqNum,
150
150
  })
151
151
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
152
152
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
@@ -155,8 +155,8 @@ describe('syncstate', () => {
155
155
  it('should throw error if incoming event is = expected upstream head', () => {
156
156
  const syncState = new SyncState.SyncState({
157
157
  pending: [],
158
- upstreamHead: e2_0.id,
159
- localHead: e2_0.id,
158
+ upstreamHead: e2_0.seqNum,
159
+ localHead: e2_0.seqNum,
160
160
  })
161
161
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0] } })
162
162
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
@@ -165,15 +165,15 @@ describe('syncstate', () => {
165
165
  it('should confirm pending event when receiving matching event', () => {
166
166
  const syncState = new SyncState.SyncState({
167
167
  pending: [e1_0],
168
- upstreamHead: EventId.ROOT,
169
- localHead: e1_0.id,
168
+ upstreamHead: EventSequenceNumber.ROOT,
169
+ localHead: e1_0.seqNum,
170
170
  })
171
171
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
172
172
 
173
173
  expectAdvance(result)
174
174
  expectEventArraysEqual(result.newSyncState.pending, [])
175
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
176
- expect(result.newSyncState.localHead).toMatchObject(e1_0.id)
175
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum)
176
+ expect(result.newSyncState.localHead).toMatchObject(e1_0.seqNum)
177
177
  expectEventArraysEqual(result.newEvents, [])
178
178
  expectEventArraysEqual(result.confirmedEvents, [e1_0])
179
179
  })
@@ -181,15 +181,15 @@ describe('syncstate', () => {
181
181
  it('should confirm partial pending event when receiving matching event', () => {
182
182
  const syncState = new SyncState.SyncState({
183
183
  pending: [e1_0, e2_0],
184
- upstreamHead: EventId.ROOT,
185
- localHead: e2_0.id,
184
+ upstreamHead: EventSequenceNumber.ROOT,
185
+ localHead: e2_0.seqNum,
186
186
  })
187
187
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
188
188
 
189
189
  expectAdvance(result)
190
190
  expectEventArraysEqual(result.newSyncState.pending, [e2_0])
191
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
192
- expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
191
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum)
192
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum)
193
193
  expectEventArraysEqual(result.newEvents, [])
194
194
  expectEventArraysEqual(result.confirmedEvents, [e1_0])
195
195
  })
@@ -197,15 +197,15 @@ describe('syncstate', () => {
197
197
  it('should confirm pending event and add new event', () => {
198
198
  const syncState = new SyncState.SyncState({
199
199
  pending: [e1_0],
200
- upstreamHead: EventId.ROOT,
201
- localHead: e1_0.id,
200
+ upstreamHead: EventSequenceNumber.ROOT,
201
+ localHead: e1_0.seqNum,
202
202
  })
203
203
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0, e1_1] } })
204
204
 
205
205
  expectAdvance(result)
206
206
  expectEventArraysEqual(result.newSyncState.pending, [])
207
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.id)
208
- expect(result.newSyncState.localHead).toMatchObject(e1_1.id)
207
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.seqNum)
208
+ expect(result.newSyncState.localHead).toMatchObject(e1_1.seqNum)
209
209
  expect(result.newEvents).toStrictEqual([e1_1])
210
210
  expectEventArraysEqual(result.confirmedEvents, [e1_0])
211
211
  })
@@ -213,8 +213,8 @@ describe('syncstate', () => {
213
213
  it('should confirm pending event and add multiple new events', () => {
214
214
  const syncState = new SyncState.SyncState({
215
215
  pending: [e1_1],
216
- upstreamHead: e1_0.id,
217
- localHead: e1_1.id,
216
+ upstreamHead: e1_0.seqNum,
217
+ localHead: e1_1.seqNum,
218
218
  })
219
219
  const result = merge({
220
220
  syncState,
@@ -223,8 +223,8 @@ describe('syncstate', () => {
223
223
 
224
224
  expectAdvance(result)
225
225
  expectEventArraysEqual(result.newSyncState.pending, [])
226
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_1.id)
227
- expect(result.newSyncState.localHead).toMatchObject(e2_1.id)
226
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_1.seqNum)
227
+ expect(result.newSyncState.localHead).toMatchObject(e2_1.seqNum)
228
228
  expect(result.newEvents).toStrictEqual([e1_2, e1_3, e2_0, e2_1])
229
229
  expectEventArraysEqual(result.confirmedEvents, [e1_1])
230
230
  })
@@ -232,8 +232,8 @@ describe('syncstate', () => {
232
232
  it('should confirm pending global event while keep pending client events', () => {
233
233
  const syncState = new SyncState.SyncState({
234
234
  pending: [e1_0, e1_1],
235
- upstreamHead: EventId.ROOT,
236
- localHead: e1_1.id,
235
+ upstreamHead: EventSequenceNumber.ROOT,
236
+ localHead: e1_1.seqNum,
237
237
  })
238
238
  const result = merge({
239
239
  syncState,
@@ -242,8 +242,8 @@ describe('syncstate', () => {
242
242
 
243
243
  expectAdvance(result)
244
244
  expectEventArraysEqual(result.newSyncState.pending, [e1_1])
245
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
246
- expect(result.newSyncState.localHead).toMatchObject(e1_1.id)
245
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum)
246
+ expect(result.newSyncState.localHead).toMatchObject(e1_1.seqNum)
247
247
  expectEventArraysEqual(result.newEvents, [])
248
248
  expectEventArraysEqual(result.confirmedEvents, [e1_0])
249
249
  })
@@ -251,8 +251,8 @@ describe('syncstate', () => {
251
251
  it('should ignore client events (incoming is subset of pending)', () => {
252
252
  const syncState = new SyncState.SyncState({
253
253
  pending: [e0_1, e1_0],
254
- upstreamHead: EventId.ROOT,
255
- localHead: e1_0.id,
254
+ upstreamHead: EventSequenceNumber.ROOT,
255
+ localHead: e1_0.seqNum,
256
256
  })
257
257
  const result = merge({
258
258
  syncState,
@@ -261,8 +261,8 @@ describe('syncstate', () => {
261
261
  })
262
262
  expectAdvance(result)
263
263
  expectEventArraysEqual(result.newSyncState.pending, [])
264
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
265
- expect(result.newSyncState.localHead).toMatchObject(e1_0.id)
264
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum)
265
+ expect(result.newSyncState.localHead).toMatchObject(e1_0.seqNum)
266
266
  expectEventArraysEqual(result.newEvents, [])
267
267
  expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0])
268
268
  })
@@ -270,8 +270,8 @@ describe('syncstate', () => {
270
270
  it('should ignore client events (incoming is subset of pending case 2)', () => {
271
271
  const syncState = new SyncState.SyncState({
272
272
  pending: [e0_1, e1_0, e2_0],
273
- upstreamHead: EventId.ROOT,
274
- localHead: e1_0.id,
273
+ upstreamHead: EventSequenceNumber.ROOT,
274
+ localHead: e1_0.seqNum,
275
275
  })
276
276
  const result = merge({
277
277
  syncState,
@@ -280,8 +280,8 @@ describe('syncstate', () => {
280
280
  })
281
281
  expectAdvance(result)
282
282
  expectEventArraysEqual(result.newSyncState.pending, [e2_0])
283
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
284
- expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
283
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum)
284
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum)
285
285
  expectEventArraysEqual(result.newEvents, [])
286
286
  expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0])
287
287
  })
@@ -289,8 +289,8 @@ describe('syncstate', () => {
289
289
  it('should ignore client events (incoming goes beyond pending)', () => {
290
290
  const syncState = new SyncState.SyncState({
291
291
  pending: [e0_1, e1_0, e1_1],
292
- upstreamHead: EventId.ROOT,
293
- localHead: e1_1.id,
292
+ upstreamHead: EventSequenceNumber.ROOT,
293
+ localHead: e1_1.seqNum,
294
294
  })
295
295
  const result = merge({
296
296
  syncState,
@@ -300,8 +300,8 @@ describe('syncstate', () => {
300
300
 
301
301
  expectAdvance(result)
302
302
  expectEventArraysEqual(result.newSyncState.pending, [])
303
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
304
- expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
303
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
304
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum)
305
305
  expect(result.newEvents).toStrictEqual([e2_0])
306
306
  expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0, e1_1])
307
307
  })
@@ -309,8 +309,8 @@ describe('syncstate', () => {
309
309
  it('should fail if incoming event is ≤ local head', () => {
310
310
  const syncState = new SyncState.SyncState({
311
311
  pending: [],
312
- upstreamHead: e2_0.id,
313
- localHead: e2_0.id,
312
+ upstreamHead: e2_0.seqNum,
313
+ localHead: e2_0.seqNum,
314
314
  })
315
315
  const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
316
316
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
@@ -321,99 +321,99 @@ describe('syncstate', () => {
321
321
  it('should rebase single client event to end', () => {
322
322
  const syncState = new SyncState.SyncState({
323
323
  pending: [e1_0],
324
- upstreamHead: EventId.ROOT,
325
- localHead: e1_0.id,
324
+ upstreamHead: EventSequenceNumber.ROOT,
325
+ localHead: e1_0.seqNum,
326
326
  })
327
327
  const result = merge({ syncState, payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1] }) })
328
328
 
329
- const e1_0_e1_2 = e1_0.rebase_(e1_1.id)
329
+ const e1_0_e1_2 = e1_0.rebase_(e1_1.seqNum)
330
330
 
331
331
  expectRebase(result)
332
332
  expectEventArraysEqual(result.newSyncState.pending, [e1_0_e1_2])
333
- expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.id)
334
- expect(result.newSyncState.localHead).toMatchObject(e1_0_e1_2.id)
333
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.seqNum)
334
+ expect(result.newSyncState.localHead).toMatchObject(e1_0_e1_2.seqNum)
335
335
  expectEventArraysEqual(result.rollbackEvents, [e1_0])
336
336
  expectEventArraysEqual(result.newEvents, [e1_1, e1_0_e1_2])
337
337
  })
338
338
 
339
339
  it('should rebase different event with same id', () => {
340
- const e2_0_b = new TestEvent({ global: 1, client: 0 }, e1_0.id, '1_0_b', false)
340
+ const e2_0_b = new TestEvent({ global: 1, client: 0 }, e1_0.seqNum, '1_0_b', false)
341
341
  const syncState = new SyncState.SyncState({
342
342
  pending: [e2_0_b],
343
- upstreamHead: EventId.ROOT,
344
- localHead: e2_0_b.id,
343
+ upstreamHead: EventSequenceNumber.ROOT,
344
+ localHead: e2_0_b.seqNum,
345
345
  })
346
346
  const result = merge({ syncState, payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e2_0] }) })
347
- const e2_0_e3_0 = e2_0_b.rebase_(e2_0.id)
347
+ const e2_0_e3_0 = e2_0_b.rebase_(e2_0.seqNum)
348
348
 
349
349
  expectRebase(result)
350
350
  expectEventArraysEqual(result.newSyncState.pending, [e2_0_e3_0])
351
351
  expectEventArraysEqual(result.newEvents, [e2_0, e2_0_e3_0])
352
352
  expectEventArraysEqual(result.rollbackEvents, [e2_0_b])
353
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
354
- expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.id)
353
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
354
+ expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum)
355
355
  })
356
356
 
357
357
  it('should rebase single client event to end (more incoming events)', () => {
358
358
  const syncState = new SyncState.SyncState({
359
359
  pending: [e1_0],
360
- upstreamHead: EventId.ROOT,
361
- localHead: e1_0.id,
360
+ upstreamHead: EventSequenceNumber.ROOT,
361
+ localHead: e1_0.seqNum,
362
362
  })
363
363
  const result = merge({
364
364
  syncState,
365
365
  payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
366
366
  })
367
367
 
368
- const e1_0_e3_0 = e1_0.rebase_(e2_0.id)
368
+ const e1_0_e3_0 = e1_0.rebase_(e2_0.seqNum)
369
369
 
370
370
  expectRebase(result)
371
371
  expectEventArraysEqual(result.newSyncState.pending, [e1_0_e3_0])
372
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
373
- expect(result.newSyncState.localHead).toMatchObject(e1_0_e3_0.id)
372
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
373
+ expect(result.newSyncState.localHead).toMatchObject(e1_0_e3_0.seqNum)
374
374
  })
375
375
 
376
376
  it('should only rebase divergent events when first event matches', () => {
377
377
  const syncState = new SyncState.SyncState({
378
378
  pending: [e1_0, e1_1],
379
- upstreamHead: EventId.ROOT,
380
- localHead: e1_0.id,
379
+ upstreamHead: EventSequenceNumber.ROOT,
380
+ localHead: e1_0.seqNum,
381
381
  })
382
382
  const result = merge({
383
383
  syncState,
384
384
  payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_0, e1_2, e1_3, e2_0] }),
385
385
  })
386
386
 
387
- const e1_1_e2_1 = e1_1.rebase_(e2_0.id)
387
+ const e1_1_e2_1 = e1_1.rebase_(e2_0.seqNum)
388
388
 
389
389
  expectRebase(result)
390
390
  expectEventArraysEqual(result.newSyncState.pending, [e1_1_e2_1])
391
391
  expectEventArraysEqual(result.rollbackEvents, [e1_1])
392
392
  expectEventArraysEqual(result.newEvents, [e1_2, e1_3, e2_0, e1_1_e2_1])
393
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
394
- expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_1.id)
393
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
394
+ expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_1.seqNum)
395
395
  })
396
396
 
397
397
  it('should rebase all client events when incoming chain starts differently', () => {
398
398
  const syncState = new SyncState.SyncState({
399
399
  pending: [e1_0, e1_1],
400
- upstreamHead: EventId.ROOT,
401
- localHead: e1_1.id,
400
+ upstreamHead: EventSequenceNumber.ROOT,
401
+ localHead: e1_1.seqNum,
402
402
  })
403
403
  const result = merge({
404
404
  syncState,
405
405
  payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
406
406
  })
407
407
 
408
- const e1_0_e2_1 = e1_0.rebase_(e2_0.id)
409
- const e1_1_e2_2 = e1_1.rebase_(e1_0_e2_1.id)
408
+ const e1_0_e2_1 = e1_0.rebase_(e2_0.seqNum)
409
+ const e1_1_e2_2 = e1_1.rebase_(e1_0_e2_1.seqNum)
410
410
 
411
411
  expectRebase(result)
412
412
  expectEventArraysEqual(result.newSyncState.pending, [e1_0_e2_1, e1_1_e2_2])
413
413
  expectEventArraysEqual(result.newEvents, [e1_1, e1_2, e1_3, e2_0, e1_0_e2_1, e1_1_e2_2])
414
414
  expectEventArraysEqual(result.rollbackEvents, [e1_0, e1_1])
415
- expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
416
- expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_2.id)
415
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum)
416
+ expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_2.seqNum)
417
417
  })
418
418
 
419
419
  describe('local-push', () => {
@@ -421,8 +421,8 @@ describe('syncstate', () => {
421
421
  it('should advance with new events', () => {
422
422
  const syncState = new SyncState.SyncState({
423
423
  pending: [e1_0],
424
- upstreamHead: EventId.ROOT,
425
- localHead: e1_0.id,
424
+ upstreamHead: EventSequenceNumber.ROOT,
425
+ localHead: e1_0.seqNum,
426
426
  })
427
427
  const result = merge({
428
428
  syncState,
@@ -431,8 +431,8 @@ describe('syncstate', () => {
431
431
 
432
432
  expectAdvance(result)
433
433
  expectEventArraysEqual(result.newSyncState.pending, [e1_0, e1_1, e1_2, e1_3])
434
- expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT)
435
- expect(result.newSyncState.localHead).toMatchObject(e1_3.id)
434
+ expect(result.newSyncState.upstreamHead).toMatchObject(EventSequenceNumber.ROOT)
435
+ expect(result.newSyncState.localHead).toMatchObject(e1_3.seqNum)
436
436
  expectEventArraysEqual(result.newEvents, [e1_1, e1_2, e1_3])
437
437
  expectEventArraysEqual(result.confirmedEvents, [])
438
438
  })
@@ -442,8 +442,8 @@ describe('syncstate', () => {
442
442
  it('should reject when new events are greater than pending events', () => {
443
443
  const syncState = new SyncState.SyncState({
444
444
  pending: [e1_0, e1_1],
445
- upstreamHead: EventId.ROOT,
446
- localHead: e1_1.id,
445
+ upstreamHead: EventSequenceNumber.ROOT,
446
+ localHead: e1_1.seqNum,
447
447
  })
448
448
  const result = merge({
449
449
  syncState,
@@ -451,7 +451,7 @@ describe('syncstate', () => {
451
451
  })
452
452
 
453
453
  expectReject(result)
454
- expect(result.expectedMinimumId).toMatchObject(e1_2.id)
454
+ expect(result.expectedMinimumId).toMatchObject(e1_2.seqNum)
455
455
  })
456
456
  })
457
457
  })
@@ -465,8 +465,8 @@ const expectEventArraysEqual = (
465
465
  ) => {
466
466
  expect(actual.length).toBe(expected.length)
467
467
  actual.forEach((event, i) => {
468
- expect(event.id).toStrictEqual(expected[i]!.id)
469
- expect(event.parentId).toStrictEqual(expected[i]!.parentId)
468
+ expect(event.seqNum).toStrictEqual(expected[i]!.seqNum)
469
+ expect(event.parentSeqNum).toStrictEqual(expected[i]!.parentSeqNum)
470
470
  expect(event.name).toStrictEqual(expected[i]!.name)
471
471
  expect(event.args).toStrictEqual(expected[i]!.args)
472
472
  })