@livestore/common 0.3.0-dev.27 → 0.3.0-dev.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +22 -15
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +15 -2
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts +1 -1
  11. package/dist/bounded-collections.d.ts.map +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  16. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  17. package/dist/devtools/devtools-messages-leader.d.ts +45 -45
  18. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  19. package/dist/devtools/devtools-messages-leader.js +11 -11
  20. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  21. package/dist/index.d.ts +2 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -5
  24. package/dist/index.js.map +1 -1
  25. package/dist/leader-thread/LeaderSyncProcessor.d.ts +25 -12
  26. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  27. package/dist/leader-thread/LeaderSyncProcessor.js +125 -89
  28. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  29. package/dist/leader-thread/{apply-mutation.d.ts → apply-event.d.ts} +7 -7
  30. package/dist/leader-thread/apply-event.d.ts.map +1 -0
  31. package/dist/leader-thread/apply-event.js +103 -0
  32. package/dist/leader-thread/apply-event.js.map +1 -0
  33. package/dist/leader-thread/eventlog.d.ts +27 -0
  34. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  35. package/dist/leader-thread/eventlog.js +123 -0
  36. package/dist/leader-thread/eventlog.js.map +1 -0
  37. package/dist/leader-thread/leader-worker-devtools.js +18 -18
  38. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  39. package/dist/leader-thread/make-leader-thread-layer.d.ts +16 -4
  40. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  41. package/dist/leader-thread/make-leader-thread-layer.js +23 -16
  42. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  43. package/dist/leader-thread/mod.d.ts +1 -1
  44. package/dist/leader-thread/mod.d.ts.map +1 -1
  45. package/dist/leader-thread/mod.js +1 -1
  46. package/dist/leader-thread/mod.js.map +1 -1
  47. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  48. package/dist/leader-thread/recreate-db.js +6 -8
  49. package/dist/leader-thread/recreate-db.js.map +1 -1
  50. package/dist/leader-thread/types.d.ts +11 -11
  51. package/dist/leader-thread/types.d.ts.map +1 -1
  52. package/dist/materializer-helper.d.ts +23 -0
  53. package/dist/materializer-helper.d.ts.map +1 -0
  54. package/dist/materializer-helper.js +70 -0
  55. package/dist/materializer-helper.js.map +1 -0
  56. package/dist/query-builder/api.d.ts +58 -53
  57. package/dist/query-builder/api.d.ts.map +1 -1
  58. package/dist/query-builder/api.js +3 -5
  59. package/dist/query-builder/api.js.map +1 -1
  60. package/dist/query-builder/astToSql.d.ts.map +1 -1
  61. package/dist/query-builder/astToSql.js +59 -37
  62. package/dist/query-builder/astToSql.js.map +1 -1
  63. package/dist/query-builder/impl.d.ts +2 -3
  64. package/dist/query-builder/impl.d.ts.map +1 -1
  65. package/dist/query-builder/impl.js +48 -46
  66. package/dist/query-builder/impl.js.map +1 -1
  67. package/dist/query-builder/impl.test.d.ts +86 -1
  68. package/dist/query-builder/impl.test.d.ts.map +1 -1
  69. package/dist/query-builder/impl.test.js +244 -36
  70. package/dist/query-builder/impl.test.js.map +1 -1
  71. package/dist/rehydrate-from-eventlog.d.ts +14 -0
  72. package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
  73. package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +25 -26
  74. package/dist/rehydrate-from-eventlog.js.map +1 -0
  75. package/dist/schema/EventDef.d.ts +136 -0
  76. package/dist/schema/EventDef.d.ts.map +1 -0
  77. package/dist/schema/EventDef.js +58 -0
  78. package/dist/schema/EventDef.js.map +1 -0
  79. package/dist/schema/EventId.d.ts +2 -2
  80. package/dist/schema/EventId.d.ts.map +1 -1
  81. package/dist/schema/EventId.js +8 -2
  82. package/dist/schema/EventId.js.map +1 -1
  83. package/dist/schema/{MutationEvent.d.ts → LiveStoreEvent.d.ts} +56 -56
  84. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  85. package/dist/schema/{MutationEvent.js → LiveStoreEvent.js} +25 -25
  86. package/dist/schema/LiveStoreEvent.js.map +1 -0
  87. package/dist/schema/client-document-def.d.ts +223 -0
  88. package/dist/schema/client-document-def.d.ts.map +1 -0
  89. package/dist/schema/client-document-def.js +170 -0
  90. package/dist/schema/client-document-def.js.map +1 -0
  91. package/dist/schema/client-document-def.test.d.ts +2 -0
  92. package/dist/schema/client-document-def.test.d.ts.map +1 -0
  93. package/dist/schema/client-document-def.test.js +201 -0
  94. package/dist/schema/client-document-def.test.js.map +1 -0
  95. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
  96. package/dist/schema/events.d.ts +2 -0
  97. package/dist/schema/events.d.ts.map +1 -0
  98. package/dist/schema/events.js +2 -0
  99. package/dist/schema/events.js.map +1 -0
  100. package/dist/schema/mod.d.ts +4 -3
  101. package/dist/schema/mod.d.ts.map +1 -1
  102. package/dist/schema/mod.js +4 -3
  103. package/dist/schema/mod.js.map +1 -1
  104. package/dist/schema/schema.d.ts +27 -23
  105. package/dist/schema/schema.d.ts.map +1 -1
  106. package/dist/schema/schema.js +45 -43
  107. package/dist/schema/schema.js.map +1 -1
  108. package/dist/schema/sqlite-state.d.ts +12 -0
  109. package/dist/schema/sqlite-state.d.ts.map +1 -0
  110. package/dist/schema/sqlite-state.js +36 -0
  111. package/dist/schema/sqlite-state.js.map +1 -0
  112. package/dist/schema/system-tables.d.ts +67 -98
  113. package/dist/schema/system-tables.d.ts.map +1 -1
  114. package/dist/schema/system-tables.js +62 -48
  115. package/dist/schema/system-tables.js.map +1 -1
  116. package/dist/schema/table-def.d.ts +26 -96
  117. package/dist/schema/table-def.d.ts.map +1 -1
  118. package/dist/schema/table-def.js +16 -64
  119. package/dist/schema/table-def.js.map +1 -1
  120. package/dist/schema/view.d.ts +3 -0
  121. package/dist/schema/view.d.ts.map +1 -0
  122. package/dist/schema/view.js +3 -0
  123. package/dist/schema/view.js.map +1 -0
  124. package/dist/schema-management/common.d.ts +4 -4
  125. package/dist/schema-management/common.d.ts.map +1 -1
  126. package/dist/schema-management/migrations.d.ts.map +1 -1
  127. package/dist/schema-management/migrations.js +6 -6
  128. package/dist/schema-management/migrations.js.map +1 -1
  129. package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
  130. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  131. package/dist/schema-management/validate-mutation-defs.js +17 -17
  132. package/dist/schema-management/validate-mutation-defs.js.map +1 -1
  133. package/dist/sync/ClientSessionSyncProcessor.d.ts +7 -7
  134. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  135. package/dist/sync/ClientSessionSyncProcessor.js +31 -30
  136. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  137. package/dist/sync/next/facts.d.ts +19 -19
  138. package/dist/sync/next/facts.d.ts.map +1 -1
  139. package/dist/sync/next/facts.js +2 -2
  140. package/dist/sync/next/facts.js.map +1 -1
  141. package/dist/sync/next/history-dag-common.d.ts +3 -3
  142. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  143. package/dist/sync/next/history-dag-common.js +1 -1
  144. package/dist/sync/next/history-dag-common.js.map +1 -1
  145. package/dist/sync/next/history-dag.js +1 -1
  146. package/dist/sync/next/history-dag.js.map +1 -1
  147. package/dist/sync/next/rebase-events.d.ts +7 -7
  148. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  149. package/dist/sync/next/rebase-events.js +5 -5
  150. package/dist/sync/next/rebase-events.js.map +1 -1
  151. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  152. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  153. package/dist/sync/next/test/compact-events.test.js +71 -71
  154. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  155. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +29 -29
  156. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  157. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +60 -25
  158. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  159. package/dist/sync/next/test/mod.d.ts +1 -1
  160. package/dist/sync/next/test/mod.d.ts.map +1 -1
  161. package/dist/sync/next/test/mod.js +1 -1
  162. package/dist/sync/next/test/mod.js.map +1 -1
  163. package/dist/sync/sync.d.ts +3 -3
  164. package/dist/sync/sync.d.ts.map +1 -1
  165. package/dist/sync/syncstate.d.ts +32 -32
  166. package/dist/sync/syncstate.d.ts.map +1 -1
  167. package/dist/sync/syncstate.js +31 -25
  168. package/dist/sync/syncstate.js.map +1 -1
  169. package/dist/sync/syncstate.test.js +165 -175
  170. package/dist/sync/syncstate.test.js.map +1 -1
  171. package/dist/sync/validate-push-payload.d.ts +2 -2
  172. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  173. package/dist/sync/validate-push-payload.js.map +1 -1
  174. package/dist/version.d.ts +1 -1
  175. package/dist/version.js +1 -1
  176. package/package.json +3 -3
  177. package/src/__tests__/fixture.ts +36 -15
  178. package/src/adapter-types.ts +23 -16
  179. package/src/debug-info.ts +1 -0
  180. package/src/devtools/devtools-messages-leader.ts +13 -13
  181. package/src/index.ts +2 -5
  182. package/src/leader-thread/LeaderSyncProcessor.ts +183 -122
  183. package/src/leader-thread/{apply-mutation.ts → apply-event.ts} +50 -74
  184. package/src/leader-thread/eventlog.ts +199 -0
  185. package/src/leader-thread/leader-worker-devtools.ts +18 -18
  186. package/src/leader-thread/make-leader-thread-layer.ts +51 -29
  187. package/src/leader-thread/mod.ts +1 -1
  188. package/src/leader-thread/recreate-db.ts +6 -9
  189. package/src/leader-thread/types.ts +12 -12
  190. package/src/materializer-helper.ts +110 -0
  191. package/src/query-builder/api.ts +79 -105
  192. package/src/query-builder/astToSql.ts +68 -39
  193. package/src/query-builder/impl.test.ts +264 -42
  194. package/src/query-builder/impl.ts +72 -56
  195. package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +33 -40
  196. package/src/schema/EventDef.ts +216 -0
  197. package/src/schema/EventId.ts +11 -3
  198. package/src/schema/{MutationEvent.ts → LiveStoreEvent.ts} +68 -69
  199. package/src/schema/client-document-def.test.ts +239 -0
  200. package/src/schema/client-document-def.ts +444 -0
  201. package/src/schema/db-schema/dsl/mod.ts +0 -1
  202. package/src/schema/events.ts +1 -0
  203. package/src/schema/mod.ts +4 -3
  204. package/src/schema/schema.ts +79 -69
  205. package/src/schema/sqlite-state.ts +62 -0
  206. package/src/schema/system-tables.ts +42 -53
  207. package/src/schema/table-def.ts +53 -209
  208. package/src/schema/view.ts +2 -0
  209. package/src/schema-management/common.ts +4 -4
  210. package/src/schema-management/migrations.ts +8 -9
  211. package/src/schema-management/validate-mutation-defs.ts +22 -24
  212. package/src/sync/ClientSessionSyncProcessor.ts +37 -36
  213. package/src/sync/next/facts.ts +31 -32
  214. package/src/sync/next/history-dag-common.ts +4 -4
  215. package/src/sync/next/history-dag.ts +1 -1
  216. package/src/sync/next/rebase-events.ts +13 -13
  217. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  218. package/src/sync/next/test/compact-events.test.ts +73 -73
  219. package/src/sync/next/test/event-fixtures.ts +219 -0
  220. package/src/sync/next/test/mod.ts +1 -1
  221. package/src/sync/sync.ts +3 -3
  222. package/src/sync/syncstate.test.ts +168 -179
  223. package/src/sync/syncstate.ts +48 -38
  224. package/src/sync/validate-push-payload.ts +2 -2
  225. package/src/version.ts +1 -1
  226. package/tmp/pack.tgz +0 -0
  227. package/tsconfig.json +1 -0
  228. package/dist/derived-mutations.d.ts +0 -109
  229. package/dist/derived-mutations.d.ts.map +0 -1
  230. package/dist/derived-mutations.js +0 -54
  231. package/dist/derived-mutations.js.map +0 -1
  232. package/dist/derived-mutations.test.d.ts +0 -2
  233. package/dist/derived-mutations.test.d.ts.map +0 -1
  234. package/dist/derived-mutations.test.js +0 -93
  235. package/dist/derived-mutations.test.js.map +0 -1
  236. package/dist/init-singleton-tables.d.ts +0 -4
  237. package/dist/init-singleton-tables.d.ts.map +0 -1
  238. package/dist/init-singleton-tables.js +0 -16
  239. package/dist/init-singleton-tables.js.map +0 -1
  240. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  241. package/dist/leader-thread/apply-mutation.js +0 -122
  242. package/dist/leader-thread/apply-mutation.js.map +0 -1
  243. package/dist/leader-thread/mutationlog.d.ts +0 -27
  244. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  245. package/dist/leader-thread/mutationlog.js +0 -124
  246. package/dist/leader-thread/mutationlog.js.map +0 -1
  247. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  248. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  249. package/dist/leader-thread/pull-queue-set.js +0 -38
  250. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  251. package/dist/mutation.d.ts +0 -20
  252. package/dist/mutation.d.ts.map +0 -1
  253. package/dist/mutation.js +0 -68
  254. package/dist/mutation.js.map +0 -1
  255. package/dist/query-info.d.ts +0 -41
  256. package/dist/query-info.d.ts.map +0 -1
  257. package/dist/query-info.js +0 -7
  258. package/dist/query-info.js.map +0 -1
  259. package/dist/rehydrate-from-mutationlog.d.ts +0 -15
  260. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  261. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  262. package/dist/schema/MutationEvent.d.ts.map +0 -1
  263. package/dist/schema/MutationEvent.js.map +0 -1
  264. package/dist/schema/mutations.d.ts +0 -115
  265. package/dist/schema/mutations.d.ts.map +0 -1
  266. package/dist/schema/mutations.js +0 -42
  267. package/dist/schema/mutations.js.map +0 -1
  268. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  269. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  270. package/src/derived-mutations.test.ts +0 -101
  271. package/src/derived-mutations.ts +0 -170
  272. package/src/init-singleton-tables.ts +0 -24
  273. package/src/leader-thread/mutationlog.ts +0 -202
  274. package/src/mutation.ts +0 -108
  275. package/src/query-info.ts +0 -83
  276. package/src/schema/mutations.ts +0 -193
  277. package/src/sync/next/test/mutation-fixtures.ts +0 -228
@@ -2,10 +2,10 @@
2
2
  import { describe, expect, it } from 'vitest'
3
3
 
4
4
  import * as EventId from '../schema/EventId.js'
5
- import * as MutationEvent from '../schema/MutationEvent.js'
5
+ import * as LiveStoreEvent from '../schema/LiveStoreEvent.js'
6
6
  import * as SyncState from './syncstate.js'
7
7
 
8
- class TestEvent extends MutationEvent.EncodedWithMeta {
8
+ class TestEvent extends LiveStoreEvent.EncodedWithMeta {
9
9
  constructor(
10
10
  id: EventId.EventId | typeof EventId.EventId.Encoded,
11
11
  parentId: EventId.EventId,
@@ -15,7 +15,7 @@ class TestEvent extends MutationEvent.EncodedWithMeta {
15
15
  super({
16
16
  id: EventId.make(id),
17
17
  parentId: EventId.make(parentId),
18
- mutation: 'a',
18
+ name: 'a',
19
19
  args: payload,
20
20
  clientId: 'static-local-id',
21
21
  sessionId: 'static-session-id',
@@ -31,18 +31,17 @@ class TestEvent extends MutationEvent.EncodedWithMeta {
31
31
  // toString = () => this.toJSON()
32
32
  }
33
33
 
34
- const e_0_1 = new TestEvent({ global: 0, client: 1 }, EventId.ROOT, 'a', true)
35
- const e_1_0 = new TestEvent({ global: 1, client: 0 }, EventId.ROOT, 'a', false)
36
- const e_1_1 = new TestEvent({ global: 1, client: 1 }, e_1_0.id, 'a', true)
37
- const e_1_2 = new TestEvent({ global: 1, client: 2 }, e_1_1.id, 'a', true)
38
- const e_1_3 = new TestEvent({ global: 1, client: 3 }, e_1_2.id, 'a', true)
39
- const e_2_0 = new TestEvent({ global: 2, client: 0 }, e_1_0.id, 'a', false)
40
- const e_2_1 = new TestEvent({ global: 2, client: 1 }, e_2_0.id, 'a', true)
41
- const e_3_0 = new TestEvent({ global: 3, client: 0 }, e_2_0.id, 'a', false)
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)
42
41
 
43
- const isEqualEvent = MutationEvent.isEqualEncoded
42
+ const isEqualEvent = LiveStoreEvent.isEqualEncoded
44
43
 
45
- const isClientEvent = (event: MutationEvent.EncodedWithMeta) => (event as TestEvent).isLocal
44
+ const isClientEvent = (event: LiveStoreEvent.EncodedWithMeta) => (event as TestEvent).isLocal
46
45
 
47
46
  describe('syncstate', () => {
48
47
  describe('merge', () => {
@@ -59,271 +58,261 @@ describe('syncstate', () => {
59
58
  describe('upstream-rebase', () => {
60
59
  it('should rollback until start', () => {
61
60
  const syncState = new SyncState.SyncState({
62
- pending: [e_2_0],
61
+ pending: [e2_0],
63
62
  upstreamHead: EventId.ROOT,
64
- localHead: e_2_0.id,
63
+ localHead: e2_0.id,
65
64
  })
66
- const e_1_0_e_2_0 = e_1_0.rebase_(e_2_0.id)
67
- const e_1_1_e_2_1 = e_1_1.rebase_(e_1_0_e_2_0.id)
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)
68
67
  const result = merge({
69
68
  syncState,
70
69
  payload: SyncState.PayloadUpstreamRebase.make({
71
- rollbackEvents: [e_1_0, e_1_1],
72
- newEvents: [e_1_0_e_2_0, e_1_1_e_2_1],
70
+ rollbackEvents: [e1_0, e1_1],
71
+ newEvents: [e1_0_e2_0, e1_1_e2_1],
73
72
  }),
74
73
  })
75
- const e_2_0_e_3_0 = e_2_0.rebase_(e_1_0_e_2_0.id)
74
+ const e2_0_e3_0 = e2_0.rebase_(e1_0_e2_0.id)
76
75
  expectRebase(result)
77
- expectEventArraysEqual(result.newSyncState.pending, [e_2_0_e_3_0])
78
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1_e_2_1.id)
79
- expect(result.newSyncState.localHead).toMatchObject(e_2_0_e_3_0.id)
80
- expectEventArraysEqual(result.newEvents, [e_1_0_e_2_0, e_1_1_e_2_1, e_2_0_e_3_0])
81
- expectEventArraysEqual(result.rollbackEvents, [e_1_0, e_1_1, e_2_0])
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)
79
+ expectEventArraysEqual(result.newEvents, [e1_0_e2_0, e1_1_e2_1, e2_0_e3_0])
80
+ expectEventArraysEqual(result.rollbackEvents, [e1_0, e1_1, e2_0])
82
81
  })
83
82
 
84
83
  it('should rollback only to specified point', () => {
85
84
  const syncState = new SyncState.SyncState({
86
- pending: [e_2_0],
85
+ pending: [e2_0],
87
86
  upstreamHead: EventId.ROOT,
88
- localHead: e_2_0.id,
87
+ localHead: e2_0.id,
89
88
  })
90
- const e_1_1_e_2_0 = e_1_1.rebase_(e_1_0.id)
89
+ const e1_1_e2_0 = e1_1.rebase_(e1_0.id)
91
90
  const result = merge({
92
91
  syncState,
93
92
  payload: SyncState.PayloadUpstreamRebase.make({
94
- newEvents: [e_1_1_e_2_0],
95
- rollbackEvents: [e_1_1],
93
+ newEvents: [e1_1_e2_0],
94
+ rollbackEvents: [e1_1],
96
95
  }),
97
96
  })
98
- const e_2_0_e_3_0 = e_2_0.rebase_(e_1_1_e_2_0.id)
97
+ const e2_0_e3_0 = e2_0.rebase_(e1_1_e2_0.id)
99
98
  expectRebase(result)
100
- expectEventArraysEqual(result.newSyncState.pending, [e_2_0_e_3_0])
101
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1_e_2_0.id)
102
- expect(result.newSyncState.localHead).toMatchObject(e_2_0_e_3_0.id)
103
- expectEventArraysEqual(result.newEvents, [e_1_1_e_2_0, e_2_0_e_3_0])
104
- expectEventArraysEqual(result.rollbackEvents, [e_1_1, e_2_0])
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)
102
+ expectEventArraysEqual(result.newEvents, [e1_1_e2_0, e2_0_e3_0])
103
+ expectEventArraysEqual(result.rollbackEvents, [e1_1, e2_0])
105
104
  })
106
105
 
107
106
  it('should work for empty pending', () => {
108
107
  const syncState = new SyncState.SyncState({
109
108
  pending: [],
110
109
  upstreamHead: EventId.ROOT,
111
- localHead: e_1_0.id,
110
+ localHead: e1_0.id,
112
111
  })
113
112
  const result = merge({
114
113
  syncState,
115
- payload: SyncState.PayloadUpstreamRebase.make({ rollbackEvents: [e_1_0], newEvents: [e_2_0] }),
114
+ payload: SyncState.PayloadUpstreamRebase.make({ rollbackEvents: [e1_0], newEvents: [e2_0] }),
116
115
  })
117
116
  expectRebase(result)
118
117
  expectEventArraysEqual(result.newSyncState.pending, [])
119
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
120
- expect(result.newSyncState.localHead).toMatchObject(e_2_0.id)
121
- expect(result.newEvents).toStrictEqual([e_2_0])
118
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
119
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
120
+ expect(result.newEvents).toStrictEqual([e2_0])
122
121
  })
123
122
  })
124
123
 
125
124
  describe('upstream-advance: advance', () => {
126
125
  it('should throw error if newEvents are not sorted in ascending order by eventId (client)', () => {
127
126
  const syncState = new SyncState.SyncState({
128
- pending: [e_1_0],
127
+ pending: [e1_0],
129
128
  upstreamHead: EventId.ROOT,
130
- localHead: e_1_0.id,
129
+ localHead: e1_0.id,
131
130
  })
132
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_1, e_1_0] } })
131
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_1, e1_0] } })
133
132
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
134
133
  })
135
134
 
136
135
  it('should throw error if newEvents are not sorted in ascending order by eventId (global)', () => {
137
136
  const syncState = new SyncState.SyncState({
138
- pending: [e_1_0],
137
+ pending: [e1_0],
139
138
  upstreamHead: EventId.ROOT,
140
- localHead: e_1_0.id,
139
+ localHead: e1_0.id,
141
140
  })
142
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_2_0, e_1_0] } })
141
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0, e1_0] } })
143
142
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
144
143
  })
145
144
 
146
145
  it('should throw error if incoming event is < expected upstream head', () => {
147
146
  const syncState = new SyncState.SyncState({
148
147
  pending: [],
149
- upstreamHead: e_2_0.id,
150
- localHead: e_2_0.id,
148
+ upstreamHead: e2_0.id,
149
+ localHead: e2_0.id,
151
150
  })
152
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } })
151
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
153
152
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
154
153
  })
155
154
 
156
155
  it('should throw error if incoming event is = expected upstream head', () => {
157
156
  const syncState = new SyncState.SyncState({
158
157
  pending: [],
159
- upstreamHead: e_2_0.id,
160
- localHead: e_2_0.id,
158
+ upstreamHead: e2_0.id,
159
+ localHead: e2_0.id,
161
160
  })
162
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_2_0] } })
163
- expect(result).toMatchObject({ _tag: 'unexpected-error' })
164
- })
165
-
166
- it('should throw if the parent id of the first incoming event is unknown', () => {
167
- const syncState = new SyncState.SyncState({
168
- pending: [],
169
- upstreamHead: EventId.ROOT,
170
- localHead: e_1_0.id,
171
- })
172
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_3_0] } })
161
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0] } })
173
162
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
174
163
  })
175
164
 
176
165
  it('should confirm pending event when receiving matching event', () => {
177
166
  const syncState = new SyncState.SyncState({
178
- pending: [e_1_0],
167
+ pending: [e1_0],
179
168
  upstreamHead: EventId.ROOT,
180
- localHead: e_1_0.id,
169
+ localHead: e1_0.id,
181
170
  })
182
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } })
171
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
183
172
 
184
173
  expectAdvance(result)
185
174
  expectEventArraysEqual(result.newSyncState.pending, [])
186
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
187
- expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
175
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
176
+ expect(result.newSyncState.localHead).toMatchObject(e1_0.id)
188
177
  expectEventArraysEqual(result.newEvents, [])
189
- expectEventArraysEqual(result.confirmedEvents, [e_1_0])
178
+ expectEventArraysEqual(result.confirmedEvents, [e1_0])
190
179
  })
191
180
 
192
181
  it('should confirm partial pending event when receiving matching event', () => {
193
182
  const syncState = new SyncState.SyncState({
194
- pending: [e_1_0, e_2_0],
183
+ pending: [e1_0, e2_0],
195
184
  upstreamHead: EventId.ROOT,
196
- localHead: e_2_0.id,
185
+ localHead: e2_0.id,
197
186
  })
198
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } })
187
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
199
188
 
200
189
  expectAdvance(result)
201
- expectEventArraysEqual(result.newSyncState.pending, [e_2_0])
202
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
203
- expect(result.newSyncState.localHead).toMatchObject(e_2_0.id)
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)
204
193
  expectEventArraysEqual(result.newEvents, [])
205
- expectEventArraysEqual(result.confirmedEvents, [e_1_0])
194
+ expectEventArraysEqual(result.confirmedEvents, [e1_0])
206
195
  })
207
196
 
208
197
  it('should confirm pending event and add new event', () => {
209
198
  const syncState = new SyncState.SyncState({
210
- pending: [e_1_0],
199
+ pending: [e1_0],
211
200
  upstreamHead: EventId.ROOT,
212
- localHead: e_1_0.id,
201
+ localHead: e1_0.id,
213
202
  })
214
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_1_1] } })
203
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0, e1_1] } })
215
204
 
216
205
  expectAdvance(result)
217
206
  expectEventArraysEqual(result.newSyncState.pending, [])
218
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1.id)
219
- expect(result.newSyncState.localHead).toMatchObject(e_1_1.id)
220
- expect(result.newEvents).toStrictEqual([e_1_1])
221
- expectEventArraysEqual(result.confirmedEvents, [e_1_0])
207
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.id)
208
+ expect(result.newSyncState.localHead).toMatchObject(e1_1.id)
209
+ expect(result.newEvents).toStrictEqual([e1_1])
210
+ expectEventArraysEqual(result.confirmedEvents, [e1_0])
222
211
  })
223
212
 
224
213
  it('should confirm pending event and add multiple new events', () => {
225
214
  const syncState = new SyncState.SyncState({
226
- pending: [e_1_1],
227
- upstreamHead: e_1_0.id,
228
- localHead: e_1_1.id,
215
+ pending: [e1_1],
216
+ upstreamHead: e1_0.id,
217
+ localHead: e1_1.id,
229
218
  })
230
219
  const result = merge({
231
220
  syncState,
232
- payload: { _tag: 'upstream-advance', newEvents: [e_1_1, e_1_2, e_1_3, e_2_0, e_2_1] },
221
+ payload: { _tag: 'upstream-advance', newEvents: [e1_1, e1_2, e1_3, e2_0, e2_1] },
233
222
  })
234
223
 
235
224
  expectAdvance(result)
236
225
  expectEventArraysEqual(result.newSyncState.pending, [])
237
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_1.id)
238
- expect(result.newSyncState.localHead).toMatchObject(e_2_1.id)
239
- expect(result.newEvents).toStrictEqual([e_1_2, e_1_3, e_2_0, e_2_1])
240
- expectEventArraysEqual(result.confirmedEvents, [e_1_1])
226
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_1.id)
227
+ expect(result.newSyncState.localHead).toMatchObject(e2_1.id)
228
+ expect(result.newEvents).toStrictEqual([e1_2, e1_3, e2_0, e2_1])
229
+ expectEventArraysEqual(result.confirmedEvents, [e1_1])
241
230
  })
242
231
 
243
232
  it('should confirm pending global event while keep pending client events', () => {
244
233
  const syncState = new SyncState.SyncState({
245
- pending: [e_1_0, e_1_1],
234
+ pending: [e1_0, e1_1],
246
235
  upstreamHead: EventId.ROOT,
247
- localHead: e_1_1.id,
236
+ localHead: e1_1.id,
248
237
  })
249
238
  const result = merge({
250
239
  syncState,
251
- payload: { _tag: 'upstream-advance', newEvents: [e_1_0] },
240
+ payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
252
241
  })
253
242
 
254
243
  expectAdvance(result)
255
- expectEventArraysEqual(result.newSyncState.pending, [e_1_1])
256
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
257
- expect(result.newSyncState.localHead).toMatchObject(e_1_1.id)
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)
258
247
  expectEventArraysEqual(result.newEvents, [])
259
- expectEventArraysEqual(result.confirmedEvents, [e_1_0])
248
+ expectEventArraysEqual(result.confirmedEvents, [e1_0])
260
249
  })
261
250
 
262
251
  it('should ignore client events (incoming is subset of pending)', () => {
263
252
  const syncState = new SyncState.SyncState({
264
- pending: [e_0_1, e_1_0],
253
+ pending: [e0_1, e1_0],
265
254
  upstreamHead: EventId.ROOT,
266
- localHead: e_1_0.id,
255
+ localHead: e1_0.id,
267
256
  })
268
257
  const result = merge({
269
258
  syncState,
270
- payload: { _tag: 'upstream-advance', newEvents: [e_1_0] },
259
+ payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
271
260
  ignoreClientEvents: true,
272
261
  })
273
262
  expectAdvance(result)
274
263
  expectEventArraysEqual(result.newSyncState.pending, [])
275
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
276
- expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
264
+ expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.id)
265
+ expect(result.newSyncState.localHead).toMatchObject(e1_0.id)
277
266
  expectEventArraysEqual(result.newEvents, [])
278
- expectEventArraysEqual(result.confirmedEvents, [e_0_1, e_1_0])
267
+ expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0])
279
268
  })
280
269
 
281
270
  it('should ignore client events (incoming is subset of pending case 2)', () => {
282
271
  const syncState = new SyncState.SyncState({
283
- pending: [e_0_1, e_1_0, e_2_0],
272
+ pending: [e0_1, e1_0, e2_0],
284
273
  upstreamHead: EventId.ROOT,
285
- localHead: e_1_0.id,
274
+ localHead: e1_0.id,
286
275
  })
287
276
  const result = merge({
288
277
  syncState,
289
- payload: { _tag: 'upstream-advance', newEvents: [e_1_0] },
278
+ payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
290
279
  ignoreClientEvents: true,
291
280
  })
292
281
  expectAdvance(result)
293
- expectEventArraysEqual(result.newSyncState.pending, [e_2_0])
294
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
295
- expect(result.newSyncState.localHead).toMatchObject(e_2_0.id)
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)
296
285
  expectEventArraysEqual(result.newEvents, [])
297
- expectEventArraysEqual(result.confirmedEvents, [e_0_1, e_1_0])
286
+ expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0])
298
287
  })
299
288
 
300
289
  it('should ignore client events (incoming goes beyond pending)', () => {
301
290
  const syncState = new SyncState.SyncState({
302
- pending: [e_0_1, e_1_0, e_1_1],
291
+ pending: [e0_1, e1_0, e1_1],
303
292
  upstreamHead: EventId.ROOT,
304
- localHead: e_1_1.id,
293
+ localHead: e1_1.id,
305
294
  })
306
295
  const result = merge({
307
296
  syncState,
308
- payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_2_0] },
297
+ payload: { _tag: 'upstream-advance', newEvents: [e1_0, e2_0] },
309
298
  ignoreClientEvents: true,
310
299
  })
311
300
 
312
301
  expectAdvance(result)
313
302
  expectEventArraysEqual(result.newSyncState.pending, [])
314
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
315
- expect(result.newSyncState.localHead).toMatchObject(e_2_0.id)
316
- expect(result.newEvents).toStrictEqual([e_2_0])
317
- expectEventArraysEqual(result.confirmedEvents, [e_0_1, e_1_0, e_1_1])
303
+ expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.id)
304
+ expect(result.newSyncState.localHead).toMatchObject(e2_0.id)
305
+ expect(result.newEvents).toStrictEqual([e2_0])
306
+ expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0, e1_1])
318
307
  })
319
308
 
320
309
  it('should fail if incoming event is ≤ local head', () => {
321
310
  const syncState = new SyncState.SyncState({
322
311
  pending: [],
323
- upstreamHead: e_2_0.id,
324
- localHead: e_2_0.id,
312
+ upstreamHead: e2_0.id,
313
+ localHead: e2_0.id,
325
314
  })
326
- const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } })
315
+ const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } })
327
316
  expect(result).toMatchObject({ _tag: 'unexpected-error' })
328
317
  })
329
318
  })
@@ -331,120 +320,120 @@ describe('syncstate', () => {
331
320
  describe('upstream-advance: rebase', () => {
332
321
  it('should rebase single client event to end', () => {
333
322
  const syncState = new SyncState.SyncState({
334
- pending: [e_1_0],
323
+ pending: [e1_0],
335
324
  upstreamHead: EventId.ROOT,
336
- localHead: e_1_0.id,
325
+ localHead: e1_0.id,
337
326
  })
338
- const result = merge({ syncState, payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e_1_1] }) })
327
+ const result = merge({ syncState, payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1] }) })
339
328
 
340
- const e_1_0_e_1_2 = e_1_0.rebase_(e_1_1.id)
329
+ const e1_0_e1_2 = e1_0.rebase_(e1_1.id)
341
330
 
342
331
  expectRebase(result)
343
- expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_1_2])
344
- expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1.id)
345
- expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_1_2.id)
346
- expectEventArraysEqual(result.rollbackEvents, [e_1_0])
347
- expectEventArraysEqual(result.newEvents, [e_1_1, e_1_0_e_1_2])
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)
335
+ expectEventArraysEqual(result.rollbackEvents, [e1_0])
336
+ expectEventArraysEqual(result.newEvents, [e1_1, e1_0_e1_2])
348
337
  })
349
338
 
350
339
  it('should rebase different event with same id', () => {
351
- const e_2_0_b = new TestEvent({ global: 1, client: 0 }, e_1_0.id, '1_0_b', false)
340
+ const e2_0_b = new TestEvent({ global: 1, client: 0 }, e1_0.id, '1_0_b', false)
352
341
  const syncState = new SyncState.SyncState({
353
- pending: [e_2_0_b],
342
+ pending: [e2_0_b],
354
343
  upstreamHead: EventId.ROOT,
355
- localHead: e_2_0_b.id,
344
+ localHead: e2_0_b.id,
356
345
  })
357
- const result = merge({ syncState, payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e_2_0] }) })
358
- const e_2_0_e_3_0 = e_2_0_b.rebase_(e_2_0.id)
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)
359
348
 
360
349
  expectRebase(result)
361
- expectEventArraysEqual(result.newSyncState.pending, [e_2_0_e_3_0])
362
- expectEventArraysEqual(result.newEvents, [e_2_0, e_2_0_e_3_0])
363
- expectEventArraysEqual(result.rollbackEvents, [e_2_0_b])
364
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
365
- expect(result.newSyncState.localHead).toMatchObject(e_2_0_e_3_0.id)
350
+ expectEventArraysEqual(result.newSyncState.pending, [e2_0_e3_0])
351
+ expectEventArraysEqual(result.newEvents, [e2_0, e2_0_e3_0])
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)
366
355
  })
367
356
 
368
357
  it('should rebase single client event to end (more incoming events)', () => {
369
358
  const syncState = new SyncState.SyncState({
370
- pending: [e_1_0],
359
+ pending: [e1_0],
371
360
  upstreamHead: EventId.ROOT,
372
- localHead: e_1_0.id,
361
+ localHead: e1_0.id,
373
362
  })
374
363
  const result = merge({
375
364
  syncState,
376
- payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e_1_1, e_1_2, e_1_3, e_2_0] }),
365
+ payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
377
366
  })
378
367
 
379
- const e_1_0_e_3_0 = e_1_0.rebase_(e_2_0.id)
368
+ const e1_0_e3_0 = e1_0.rebase_(e2_0.id)
380
369
 
381
370
  expectRebase(result)
382
- expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_3_0])
383
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
384
- expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_3_0.id)
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)
385
374
  })
386
375
 
387
376
  it('should only rebase divergent events when first event matches', () => {
388
377
  const syncState = new SyncState.SyncState({
389
- pending: [e_1_0, e_1_1],
378
+ pending: [e1_0, e1_1],
390
379
  upstreamHead: EventId.ROOT,
391
- localHead: e_1_0.id,
380
+ localHead: e1_0.id,
392
381
  })
393
382
  const result = merge({
394
383
  syncState,
395
- payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e_1_0, e_1_2, e_1_3, e_2_0] }),
384
+ payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_0, e1_2, e1_3, e2_0] }),
396
385
  })
397
386
 
398
- const e_1_1_e_2_1 = e_1_1.rebase_(e_2_0.id)
387
+ const e1_1_e2_1 = e1_1.rebase_(e2_0.id)
399
388
 
400
389
  expectRebase(result)
401
- expectEventArraysEqual(result.newSyncState.pending, [e_1_1_e_2_1])
402
- expectEventArraysEqual(result.rollbackEvents, [e_1_1])
403
- expectEventArraysEqual(result.newEvents, [e_1_2, e_1_3, e_2_0, e_1_1_e_2_1])
404
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
405
- expect(result.newSyncState.localHead).toMatchObject(e_1_1_e_2_1.id)
390
+ expectEventArraysEqual(result.newSyncState.pending, [e1_1_e2_1])
391
+ expectEventArraysEqual(result.rollbackEvents, [e1_1])
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)
406
395
  })
407
396
 
408
397
  it('should rebase all client events when incoming chain starts differently', () => {
409
398
  const syncState = new SyncState.SyncState({
410
- pending: [e_1_0, e_1_1],
399
+ pending: [e1_0, e1_1],
411
400
  upstreamHead: EventId.ROOT,
412
- localHead: e_1_1.id,
401
+ localHead: e1_1.id,
413
402
  })
414
403
  const result = merge({
415
404
  syncState,
416
- payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e_1_1, e_1_2, e_1_3, e_2_0] }),
405
+ payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
417
406
  })
418
407
 
419
- const e_1_0_e_2_1 = e_1_0.rebase_(e_2_0.id)
420
- const e_1_1_e_2_2 = e_1_1.rebase_(e_1_0_e_2_1.id)
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)
421
410
 
422
411
  expectRebase(result)
423
- expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_2_1, e_1_1_e_2_2])
424
- expectEventArraysEqual(result.newEvents, [e_1_1, e_1_2, e_1_3, e_2_0, e_1_0_e_2_1, e_1_1_e_2_2])
425
- expectEventArraysEqual(result.rollbackEvents, [e_1_0, e_1_1])
426
- expect(result.newSyncState.upstreamHead).toMatchObject(e_2_0.id)
427
- expect(result.newSyncState.localHead).toMatchObject(e_1_1_e_2_2.id)
412
+ expectEventArraysEqual(result.newSyncState.pending, [e1_0_e2_1, e1_1_e2_2])
413
+ expectEventArraysEqual(result.newEvents, [e1_1, e1_2, e1_3, e2_0, e1_0_e2_1, e1_1_e2_2])
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)
428
417
  })
429
418
 
430
419
  describe('local-push', () => {
431
420
  describe('advance', () => {
432
421
  it('should advance with new events', () => {
433
422
  const syncState = new SyncState.SyncState({
434
- pending: [e_1_0],
423
+ pending: [e1_0],
435
424
  upstreamHead: EventId.ROOT,
436
- localHead: e_1_0.id,
425
+ localHead: e1_0.id,
437
426
  })
438
427
  const result = merge({
439
428
  syncState,
440
- payload: SyncState.PayloadLocalPush.make({ newEvents: [e_1_1, e_1_2, e_1_3] }),
429
+ payload: SyncState.PayloadLocalPush.make({ newEvents: [e1_1, e1_2, e1_3] }),
441
430
  })
442
431
 
443
432
  expectAdvance(result)
444
- expectEventArraysEqual(result.newSyncState.pending, [e_1_0, e_1_1, e_1_2, e_1_3])
433
+ expectEventArraysEqual(result.newSyncState.pending, [e1_0, e1_1, e1_2, e1_3])
445
434
  expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT)
446
- expect(result.newSyncState.localHead).toMatchObject(e_1_3.id)
447
- expectEventArraysEqual(result.newEvents, [e_1_1, e_1_2, e_1_3])
435
+ expect(result.newSyncState.localHead).toMatchObject(e1_3.id)
436
+ expectEventArraysEqual(result.newEvents, [e1_1, e1_2, e1_3])
448
437
  expectEventArraysEqual(result.confirmedEvents, [])
449
438
  })
450
439
  })
@@ -452,17 +441,17 @@ describe('syncstate', () => {
452
441
  describe('reject', () => {
453
442
  it('should reject when new events are greater than pending events', () => {
454
443
  const syncState = new SyncState.SyncState({
455
- pending: [e_1_0, e_1_1],
444
+ pending: [e1_0, e1_1],
456
445
  upstreamHead: EventId.ROOT,
457
- localHead: e_1_1.id,
446
+ localHead: e1_1.id,
458
447
  })
459
448
  const result = merge({
460
449
  syncState,
461
- payload: SyncState.PayloadLocalPush.make({ newEvents: [e_1_1, e_1_2] }),
450
+ payload: SyncState.PayloadLocalPush.make({ newEvents: [e1_1, e1_2] }),
462
451
  })
463
452
 
464
453
  expectReject(result)
465
- expect(result.expectedMinimumId).toMatchObject(e_1_2.id)
454
+ expect(result.expectedMinimumId).toMatchObject(e1_2.id)
466
455
  })
467
456
  })
468
457
  })
@@ -471,14 +460,14 @@ describe('syncstate', () => {
471
460
  })
472
461
 
473
462
  const expectEventArraysEqual = (
474
- actual: ReadonlyArray<MutationEvent.EncodedWithMeta>,
475
- expected: ReadonlyArray<MutationEvent.EncodedWithMeta>,
463
+ actual: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>,
464
+ expected: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>,
476
465
  ) => {
477
466
  expect(actual.length).toBe(expected.length)
478
467
  actual.forEach((event, i) => {
479
468
  expect(event.id).toStrictEqual(expected[i]!.id)
480
469
  expect(event.parentId).toStrictEqual(expected[i]!.parentId)
481
- expect(event.mutation).toStrictEqual(expected[i]!.mutation)
470
+ expect(event.name).toStrictEqual(expected[i]!.name)
482
471
  expect(event.args).toStrictEqual(expected[i]!.args)
483
472
  })
484
473
  }