@livestore/common 0.2.0 → 0.3.0-dev.0

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 (244) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +163 -1
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +3 -1
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +53 -38
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +5 -7
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts +2 -2
  11. package/dist/bounded-collections.d.ts.map +1 -1
  12. package/dist/debug-info.d.ts +13 -13
  13. package/dist/derived-mutations.d.ts +1 -1
  14. package/dist/derived-mutations.d.ts.map +1 -1
  15. package/dist/devtools/devtools-bridge.d.ts +2 -2
  16. package/dist/devtools/devtools-bridge.d.ts.map +1 -1
  17. package/dist/devtools/devtools-messages.d.ts +84 -196
  18. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  19. package/dist/devtools/devtools-messages.js +55 -61
  20. package/dist/devtools/devtools-messages.js.map +1 -1
  21. package/dist/devtools/index.d.ts.map +1 -1
  22. package/dist/devtools/index.js +1 -2
  23. package/dist/devtools/index.js.map +1 -1
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/init-singleton-tables.d.ts +1 -1
  29. package/dist/init-singleton-tables.d.ts.map +1 -1
  30. package/dist/leader-thread/apply-mutation.d.ts +8 -0
  31. package/dist/leader-thread/apply-mutation.d.ts.map +1 -0
  32. package/dist/leader-thread/apply-mutation.js +95 -0
  33. package/dist/leader-thread/apply-mutation.js.map +1 -0
  34. package/dist/leader-thread/connection.d.ts +11 -0
  35. package/dist/leader-thread/connection.d.ts.map +1 -0
  36. package/dist/leader-thread/connection.js +44 -0
  37. package/dist/leader-thread/connection.js.map +1 -0
  38. package/dist/leader-thread/leader-sync-processor.d.ts +47 -0
  39. package/dist/leader-thread/leader-sync-processor.d.ts.map +1 -0
  40. package/dist/leader-thread/leader-sync-processor.js +422 -0
  41. package/dist/leader-thread/leader-sync-processor.js.map +1 -0
  42. package/dist/leader-thread/leader-worker-devtools.d.ts +6 -0
  43. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -0
  44. package/dist/leader-thread/leader-worker-devtools.js +216 -0
  45. package/dist/leader-thread/leader-worker-devtools.js.map +1 -0
  46. package/dist/leader-thread/make-leader-thread-layer.d.ts +20 -0
  47. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -0
  48. package/dist/leader-thread/make-leader-thread-layer.js +106 -0
  49. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -0
  50. package/dist/leader-thread/mod.d.ts +7 -0
  51. package/dist/leader-thread/mod.d.ts.map +1 -0
  52. package/dist/leader-thread/mod.js +7 -0
  53. package/dist/leader-thread/mod.js.map +1 -0
  54. package/dist/leader-thread/mutationlog.d.ts +23 -0
  55. package/dist/leader-thread/mutationlog.d.ts.map +1 -0
  56. package/dist/leader-thread/mutationlog.js +27 -0
  57. package/dist/leader-thread/mutationlog.js.map +1 -0
  58. package/dist/leader-thread/pull-queue-set.d.ts +7 -0
  59. package/dist/leader-thread/pull-queue-set.d.ts.map +1 -0
  60. package/dist/leader-thread/pull-queue-set.js +39 -0
  61. package/dist/leader-thread/pull-queue-set.js.map +1 -0
  62. package/dist/leader-thread/recreate-db.d.ts +7 -0
  63. package/dist/leader-thread/recreate-db.d.ts.map +1 -0
  64. package/dist/leader-thread/recreate-db.js +69 -0
  65. package/dist/leader-thread/recreate-db.js.map +1 -0
  66. package/dist/leader-thread/shutdown-channel.d.ts +15 -0
  67. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -0
  68. package/dist/leader-thread/shutdown-channel.js +7 -0
  69. package/dist/leader-thread/shutdown-channel.js.map +1 -0
  70. package/dist/leader-thread/types.d.ts +87 -0
  71. package/dist/leader-thread/types.d.ts.map +1 -0
  72. package/dist/leader-thread/types.js +11 -0
  73. package/dist/leader-thread/types.js.map +1 -0
  74. package/dist/mutation.d.ts +3 -4
  75. package/dist/mutation.d.ts.map +1 -1
  76. package/dist/mutation.js +0 -14
  77. package/dist/mutation.js.map +1 -1
  78. package/dist/otel.d.ts +7 -0
  79. package/dist/otel.d.ts.map +1 -0
  80. package/dist/otel.js +11 -0
  81. package/dist/otel.js.map +1 -0
  82. package/dist/query-builder/api.d.ts +2 -2
  83. package/dist/query-builder/api.d.ts.map +1 -1
  84. package/dist/query-builder/api.js.map +1 -1
  85. package/dist/query-builder/impl.d.ts +1 -1
  86. package/dist/query-builder/impl.d.ts.map +1 -1
  87. package/dist/query-builder/impl.js +21 -4
  88. package/dist/query-builder/impl.js.map +1 -1
  89. package/dist/query-builder/impl.test.js +24 -1
  90. package/dist/query-builder/impl.test.js.map +1 -1
  91. package/dist/query-info.d.ts +1 -1
  92. package/dist/query-info.d.ts.map +1 -1
  93. package/dist/rehydrate-from-mutationlog.d.ts +1 -1
  94. package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
  95. package/dist/rehydrate-from-mutationlog.js +6 -6
  96. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  97. package/dist/schema/EventId.d.ts +37 -0
  98. package/dist/schema/EventId.d.ts.map +1 -0
  99. package/dist/schema/EventId.js +30 -0
  100. package/dist/schema/EventId.js.map +1 -0
  101. package/dist/schema/MutationEvent.d.ts +191 -0
  102. package/dist/schema/MutationEvent.d.ts.map +1 -0
  103. package/dist/schema/MutationEvent.js +56 -0
  104. package/dist/schema/MutationEvent.js.map +1 -0
  105. package/dist/schema/mod.d.ts +8 -0
  106. package/dist/schema/mod.d.ts.map +1 -0
  107. package/dist/schema/mod.js +8 -0
  108. package/dist/schema/mod.js.map +1 -0
  109. package/dist/schema/mutations.d.ts +3 -123
  110. package/dist/schema/mutations.d.ts.map +1 -1
  111. package/dist/schema/mutations.js +0 -26
  112. package/dist/schema/mutations.js.map +1 -1
  113. package/dist/schema/{index.d.ts → schema.d.ts} +1 -5
  114. package/dist/schema/schema.d.ts.map +1 -0
  115. package/dist/schema/{index.js → schema.js} +1 -5
  116. package/dist/schema/schema.js.map +1 -0
  117. package/dist/schema/system-tables.d.ts +55 -29
  118. package/dist/schema/system-tables.d.ts.map +1 -1
  119. package/dist/schema/system-tables.js +10 -5
  120. package/dist/schema/system-tables.js.map +1 -1
  121. package/dist/schema-management/migrations.d.ts +1 -1
  122. package/dist/schema-management/migrations.d.ts.map +1 -1
  123. package/dist/schema-management/migrations.js +6 -1
  124. package/dist/schema-management/migrations.js.map +1 -1
  125. package/dist/schema-management/validate-mutation-defs.d.ts +1 -1
  126. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  127. package/dist/sync/client-session-sync-processor.d.ts +45 -0
  128. package/dist/sync/client-session-sync-processor.d.ts.map +1 -0
  129. package/dist/sync/client-session-sync-processor.js +131 -0
  130. package/dist/sync/client-session-sync-processor.js.map +1 -0
  131. package/dist/sync/index.d.ts +2 -0
  132. package/dist/sync/index.d.ts.map +1 -1
  133. package/dist/sync/index.js +2 -0
  134. package/dist/sync/index.js.map +1 -1
  135. package/dist/sync/next/compact-events.d.ts +1 -1
  136. package/dist/sync/next/compact-events.d.ts.map +1 -1
  137. package/dist/sync/next/compact-events.js +2 -1
  138. package/dist/sync/next/compact-events.js.map +1 -1
  139. package/dist/sync/next/facts.d.ts +5 -5
  140. package/dist/sync/next/facts.d.ts.map +1 -1
  141. package/dist/sync/next/facts.js +1 -1
  142. package/dist/sync/next/facts.js.map +1 -1
  143. package/dist/sync/next/history-dag-common.d.ts +30 -0
  144. package/dist/sync/next/history-dag-common.d.ts.map +1 -0
  145. package/dist/sync/next/history-dag-common.js +20 -0
  146. package/dist/sync/next/history-dag-common.js.map +1 -0
  147. package/dist/sync/next/history-dag.d.ts +4 -27
  148. package/dist/sync/next/history-dag.d.ts.map +1 -1
  149. package/dist/sync/next/history-dag.js +1 -19
  150. package/dist/sync/next/history-dag.js.map +1 -1
  151. package/dist/sync/next/mod.d.ts +1 -0
  152. package/dist/sync/next/mod.d.ts.map +1 -1
  153. package/dist/sync/next/mod.js +1 -0
  154. package/dist/sync/next/mod.js.map +1 -1
  155. package/dist/sync/next/rebase-events.d.ts +3 -2
  156. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  157. package/dist/sync/next/rebase-events.js.map +1 -1
  158. package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
  159. package/dist/sync/next/test/compact-events.test.js +2 -1
  160. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  161. package/dist/sync/next/test/mutation-fixtures.d.ts +1 -1
  162. package/dist/sync/next/test/mutation-fixtures.d.ts.map +1 -1
  163. package/dist/sync/next/test/mutation-fixtures.js +4 -3
  164. package/dist/sync/next/test/mutation-fixtures.js.map +1 -1
  165. package/dist/sync/sync.d.ts +33 -12
  166. package/dist/sync/sync.d.ts.map +1 -1
  167. package/dist/sync/sync.js +10 -1
  168. package/dist/sync/sync.js.map +1 -1
  169. package/dist/sync/syncstate.d.ts +123 -0
  170. package/dist/sync/syncstate.d.ts.map +1 -0
  171. package/dist/sync/syncstate.js +248 -0
  172. package/dist/sync/syncstate.js.map +1 -0
  173. package/dist/sync/syncstate.test.d.ts +2 -0
  174. package/dist/sync/syncstate.test.d.ts.map +1 -0
  175. package/dist/sync/syncstate.test.js +399 -0
  176. package/dist/sync/syncstate.test.js.map +1 -0
  177. package/dist/sync/validate-push-payload.d.ts +5 -0
  178. package/dist/sync/validate-push-payload.d.ts.map +1 -0
  179. package/dist/sync/validate-push-payload.js +15 -0
  180. package/dist/sync/validate-push-payload.js.map +1 -0
  181. package/dist/util.d.ts +2 -2
  182. package/dist/util.d.ts.map +1 -1
  183. package/dist/version.d.ts +2 -2
  184. package/dist/version.d.ts.map +1 -1
  185. package/dist/version.js +2 -2
  186. package/dist/version.js.map +1 -1
  187. package/package.json +13 -6
  188. package/src/__tests__/fixture.ts +5 -1
  189. package/src/adapter-types.ts +60 -34
  190. package/src/derived-mutations.test.ts +1 -1
  191. package/src/derived-mutations.ts +1 -1
  192. package/src/devtools/devtools-bridge.ts +2 -2
  193. package/src/devtools/devtools-messages.ts +70 -74
  194. package/src/devtools/index.ts +1 -2
  195. package/src/index.ts +2 -1
  196. package/src/init-singleton-tables.ts +1 -1
  197. package/src/leader-thread/apply-mutation.ts +143 -0
  198. package/src/leader-thread/connection.ts +67 -0
  199. package/src/leader-thread/leader-sync-processor.ts +666 -0
  200. package/src/leader-thread/leader-worker-devtools.ts +358 -0
  201. package/src/leader-thread/make-leader-thread-layer.ts +192 -0
  202. package/src/leader-thread/mod.ts +6 -0
  203. package/src/leader-thread/mutationlog.ts +42 -0
  204. package/src/leader-thread/pull-queue-set.ts +58 -0
  205. package/src/leader-thread/recreate-db.ts +109 -0
  206. package/src/leader-thread/shutdown-channel.ts +13 -0
  207. package/src/leader-thread/types.ts +129 -0
  208. package/src/mutation.ts +3 -21
  209. package/src/otel.ts +20 -0
  210. package/src/query-builder/api.ts +3 -2
  211. package/src/query-builder/impl.test.ts +28 -1
  212. package/src/query-builder/impl.ts +21 -5
  213. package/src/query-info.ts +1 -1
  214. package/src/rehydrate-from-mutationlog.ts +7 -11
  215. package/src/schema/EventId.ts +46 -0
  216. package/src/schema/MutationEvent.ts +161 -0
  217. package/src/schema/mod.ts +7 -0
  218. package/src/schema/mutations.ts +5 -126
  219. package/src/schema/{index.ts → schema.ts} +0 -5
  220. package/src/schema/system-tables.ts +18 -5
  221. package/src/schema-management/migrations.ts +9 -2
  222. package/src/schema-management/validate-mutation-defs.ts +1 -1
  223. package/src/sync/client-session-sync-processor.ts +207 -0
  224. package/src/sync/index.ts +2 -0
  225. package/src/sync/next/compact-events.ts +3 -2
  226. package/src/sync/next/facts.ts +11 -5
  227. package/src/sync/next/history-dag-common.ts +44 -0
  228. package/src/sync/next/history-dag.ts +3 -45
  229. package/src/sync/next/mod.ts +1 -0
  230. package/src/sync/next/rebase-events.ts +6 -5
  231. package/src/sync/next/test/compact-events.test.ts +3 -2
  232. package/src/sync/next/test/mutation-fixtures.ts +7 -6
  233. package/src/sync/sync.ts +32 -12
  234. package/src/sync/syncstate.test.ts +464 -0
  235. package/src/sync/syncstate.ts +385 -0
  236. package/src/sync/validate-push-payload.ts +18 -0
  237. package/src/version.ts +2 -2
  238. package/dist/schema/index.d.ts.map +0 -1
  239. package/dist/schema/index.js.map +0 -1
  240. package/dist/sync/next-mutation-event-id-pair.d.ts +0 -14
  241. package/dist/sync/next-mutation-event-id-pair.d.ts.map +0 -1
  242. package/dist/sync/next-mutation-event-id-pair.js +0 -13
  243. package/dist/sync/next-mutation-event-id-pair.js.map +0 -1
  244. package/src/sync/next-mutation-event-id-pair.ts +0 -20
@@ -0,0 +1,399 @@
1
+ /* eslint-disable prefer-arrow/prefer-arrow-functions */
2
+ import { describe, expect, it } from 'vitest';
3
+ import * as EventId from '../schema/EventId.js';
4
+ import * as MutationEvent from '../schema/MutationEvent.js';
5
+ import * as SyncState from './syncstate.js';
6
+ class TestEvent extends MutationEvent.EncodedWithMeta {
7
+ id;
8
+ parentId;
9
+ payload;
10
+ isLocal;
11
+ constructor(id, parentId, payload, isLocal) {
12
+ super({
13
+ id,
14
+ parentId,
15
+ mutation: 'a',
16
+ args: payload,
17
+ meta: {},
18
+ });
19
+ this.id = id;
20
+ this.parentId = parentId;
21
+ this.payload = payload;
22
+ this.isLocal = isLocal;
23
+ }
24
+ rebase_ = (parentId) => {
25
+ return this.rebase(parentId, this.isLocal);
26
+ };
27
+ }
28
+ const e_r_1 = new TestEvent({ global: -1, local: 1 }, EventId.ROOT, 'a', true);
29
+ const e_0_0 = new TestEvent({ global: 0, local: 0 }, EventId.ROOT, 'a', false);
30
+ const e_0_1 = new TestEvent({ global: 0, local: 1 }, e_0_0.id, 'a', true);
31
+ const e_0_2 = new TestEvent({ global: 0, local: 2 }, e_0_1.id, 'a', true);
32
+ const e_0_3 = new TestEvent({ global: 0, local: 3 }, e_0_2.id, 'a', true);
33
+ const e_1_0 = new TestEvent({ global: 1, local: 0 }, e_0_0.id, 'a', false);
34
+ const e_1_1 = new TestEvent({ global: 1, local: 1 }, e_1_0.id, 'a', true);
35
+ const isEqualEvent = MutationEvent.isEqualEncoded;
36
+ const isLocalEvent = (event) => event.isLocal;
37
+ describe('syncstate', () => {
38
+ describe('updateSyncState', () => {
39
+ const run = ({ syncState, payload, ignoreLocalEvents = false, }) => SyncState.updateSyncState({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents });
40
+ describe.each([{ trimRollbackUntil: false }, { trimRollbackUntil: true }])('upstream-rebase (trimRollbackUntil: $trimRollbackUntil)', ({ trimRollbackUntil }) => {
41
+ it('should rollback until start', () => {
42
+ const syncState = {
43
+ pending: [e_1_0],
44
+ rollbackTail: [e_0_0, e_0_1],
45
+ upstreamHead: EventId.ROOT,
46
+ localHead: e_1_0.id,
47
+ };
48
+ const e_0_0_e_1_0 = e_0_0.rebase_(e_1_0.id);
49
+ const e_0_1_e_1_1 = e_0_1.rebase_(e_0_0_e_1_0.id);
50
+ const result = run({
51
+ syncState,
52
+ payload: {
53
+ _tag: 'upstream-rebase',
54
+ rollbackUntil: e_0_0.id,
55
+ newEvents: [e_0_0_e_1_0, e_0_1_e_1_1],
56
+ trimRollbackUntil: trimRollbackUntil ? e_0_1_e_1_1.id : undefined,
57
+ },
58
+ });
59
+ const e_1_0_e_2_0 = e_1_0.rebase_(e_0_0_e_1_0.id);
60
+ expectRebase(result);
61
+ expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_2_0]);
62
+ if (trimRollbackUntil) {
63
+ expectEventArraysEqual(result.newSyncState.rollbackTail, []);
64
+ }
65
+ else {
66
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0_e_1_0, e_0_1_e_1_1]);
67
+ }
68
+ expect(result.newSyncState.upstreamHead).toBe(e_0_1_e_1_1.id);
69
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
70
+ expectEventArraysEqual(result.newEvents, [e_0_0_e_1_0, e_0_1_e_1_1]);
71
+ expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0]);
72
+ });
73
+ it('should rollback only to specified point', () => {
74
+ const syncState = {
75
+ pending: [e_1_0],
76
+ rollbackTail: [e_0_0, e_0_1],
77
+ upstreamHead: EventId.ROOT,
78
+ localHead: e_1_0.id,
79
+ };
80
+ const e_0_1_e_1_0 = e_0_1.rebase_(e_0_0.id);
81
+ const result = run({
82
+ syncState,
83
+ payload: {
84
+ _tag: 'upstream-rebase',
85
+ rollbackUntil: e_0_1.id,
86
+ newEvents: [e_0_1_e_1_0],
87
+ trimRollbackUntil: trimRollbackUntil ? e_0_0.id : undefined,
88
+ },
89
+ });
90
+ const e_1_0_e_2_0 = e_1_0.rebase_(e_0_1_e_1_0.id);
91
+ expectRebase(result);
92
+ expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_2_0]);
93
+ if (trimRollbackUntil) {
94
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1_e_1_0]);
95
+ }
96
+ else {
97
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1_e_1_0]);
98
+ }
99
+ expect(result.newSyncState.upstreamHead).toBe(e_0_1_e_1_0.id);
100
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
101
+ expectEventArraysEqual(result.newEvents, [e_0_1_e_1_0]);
102
+ expectEventArraysEqual(result.eventsToRollback, [e_0_1, e_1_0]);
103
+ });
104
+ it('should work for empty pending', () => {
105
+ const syncState = { pending: [], rollbackTail: [e_0_0], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
106
+ const result = run({
107
+ syncState,
108
+ payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
109
+ });
110
+ expectRebase(result);
111
+ expectEventArraysEqual(result.newSyncState.pending, []);
112
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_1_0]);
113
+ expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
114
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
115
+ expect(result.newEvents).toEqual([e_1_0]);
116
+ });
117
+ it('should fail for empty rollback tail', () => {
118
+ const syncState = { pending: [], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
119
+ expect(() => run({
120
+ syncState,
121
+ payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
122
+ })).toThrow();
123
+ });
124
+ it('should work for empty incoming', () => {
125
+ const syncState = { pending: [], rollbackTail: [e_0_0], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
126
+ const result = run({
127
+ syncState,
128
+ payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [] },
129
+ });
130
+ expectRebase(result);
131
+ expectEventArraysEqual(result.newSyncState.pending, []);
132
+ expectEventArraysEqual(result.newSyncState.rollbackTail, []);
133
+ expect(result.newSyncState.upstreamHead).toBe(EventId.ROOT);
134
+ expect(result.newSyncState.localHead).toMatchObject(EventId.ROOT);
135
+ expect(result.newEvents).toEqual([]);
136
+ });
137
+ });
138
+ describe('upstream-advance: advance', () => {
139
+ 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 };
141
+ expect(() => run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_0] } })).toThrow();
142
+ });
143
+ 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 };
145
+ expect(() => run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_0_0] } })).toThrow();
146
+ });
147
+ 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 };
149
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
150
+ expectAdvance(result);
151
+ expectEventArraysEqual(result.newSyncState.pending, []);
152
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
153
+ expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
154
+ expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
155
+ expect(result.newEvents).toEqual([]);
156
+ });
157
+ it('should acknowledge partial pending event when receiving matching event', () => {
158
+ const syncState = {
159
+ pending: [e_0_0, e_1_0],
160
+ rollbackTail: [],
161
+ upstreamHead: EventId.ROOT,
162
+ localHead: e_1_0.id,
163
+ };
164
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
165
+ expectAdvance(result);
166
+ expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
167
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
168
+ expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
169
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
170
+ expect(result.newEvents).toEqual([]);
171
+ });
172
+ 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 };
174
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_1] } });
175
+ expectAdvance(result);
176
+ expectEventArraysEqual(result.newSyncState.pending, []);
177
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1]);
178
+ expect(result.newSyncState.upstreamHead).toBe(e_0_1.id);
179
+ expect(result.newSyncState.localHead).toMatchObject(e_0_1.id);
180
+ expect(result.newEvents).toEqual([e_0_1]);
181
+ });
182
+ 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 };
184
+ const result = run({
185
+ syncState,
186
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1] },
187
+ });
188
+ expectAdvance(result);
189
+ expectEventArraysEqual(result.newSyncState.pending, []);
190
+ 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);
192
+ 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]);
194
+ });
195
+ it('should ignore local events (incoming is subset of pending)', () => {
196
+ const syncState = {
197
+ pending: [e_r_1, e_0_0],
198
+ rollbackTail: [],
199
+ upstreamHead: EventId.ROOT,
200
+ localHead: e_0_0.id,
201
+ };
202
+ const result = run({
203
+ syncState,
204
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
205
+ ignoreLocalEvents: true,
206
+ });
207
+ expectAdvance(result);
208
+ expectEventArraysEqual(result.newSyncState.pending, []);
209
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
210
+ expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
211
+ expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
212
+ expect(result.newEvents).toEqual([]);
213
+ });
214
+ it('should ignore local events (incoming is subset of pending case 2)', () => {
215
+ const syncState = {
216
+ pending: [e_r_1, e_0_0, e_1_0],
217
+ rollbackTail: [],
218
+ upstreamHead: EventId.ROOT,
219
+ localHead: e_0_0.id,
220
+ };
221
+ const result = run({
222
+ syncState,
223
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
224
+ ignoreLocalEvents: true,
225
+ });
226
+ expectAdvance(result);
227
+ expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
228
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
229
+ expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
230
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
231
+ expect(result.newEvents).toEqual([]);
232
+ });
233
+ it('should ignore local events (incoming goes beyond pending)', () => {
234
+ const syncState = {
235
+ pending: [e_r_1, e_0_0, e_0_1],
236
+ rollbackTail: [],
237
+ upstreamHead: EventId.ROOT,
238
+ localHead: e_0_1.id,
239
+ };
240
+ const result = run({
241
+ syncState,
242
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_1_0] },
243
+ ignoreLocalEvents: true,
244
+ });
245
+ expectAdvance(result);
246
+ expectEventArraysEqual(result.newSyncState.pending, []);
247
+ 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);
249
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
250
+ expect(result.newEvents).toEqual([e_1_0]);
251
+ });
252
+ });
253
+ describe('upstream-advance: rebase', () => {
254
+ it('should rebase single local event to end', () => {
255
+ const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
256
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1] } });
257
+ const e_0_0_e_0_2 = e_0_0.rebase_(e_0_1.id);
258
+ expectRebase(result);
259
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_0_2]);
260
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1]);
261
+ expect(result.newSyncState.upstreamHead).toBe(e_0_1.id);
262
+ expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_0_2.id);
263
+ expectEventArraysEqual(result.eventsToRollback, [e_0_0]);
264
+ expectEventArraysEqual(result.newEvents, [e_0_1, e_0_0_e_0_2]);
265
+ });
266
+ it('should rebase different event with same id (no rollback tail)', () => {
267
+ 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 };
269
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
270
+ const e_0_0_e_1_0 = e_0_0_b.rebase_(e_0_0.id);
271
+ expectRebase(result);
272
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_1_0]);
273
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
274
+ expectEventArraysEqual(result.newEvents, [e_0_0, e_0_0_e_1_0]);
275
+ expectEventArraysEqual(result.eventsToRollback, [e_0_0_b]);
276
+ expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
277
+ expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_1_0.id);
278
+ });
279
+ it('should rebase different event with same id', () => {
280
+ const e_1_0_b = new TestEvent({ global: 1, local: 0 }, e_0_0.id, '1_0_b', false);
281
+ const syncState = {
282
+ pending: [e_1_0_b],
283
+ rollbackTail: [e_0_0, e_0_1],
284
+ upstreamHead: EventId.ROOT,
285
+ localHead: e_1_0_b.id,
286
+ };
287
+ const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } });
288
+ const e_1_0_e_2_0 = e_1_0_b.rebase_(e_1_0.id);
289
+ expectRebase(result);
290
+ expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_2_0]);
291
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1, e_1_0]);
292
+ expectEventArraysEqual(result.newEvents, [e_1_0, e_1_0_e_2_0]);
293
+ expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0_b]);
294
+ expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
295
+ expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id);
296
+ });
297
+ 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 };
299
+ const result = run({
300
+ syncState,
301
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
302
+ });
303
+ const e_0_0_e_2_0 = e_0_0.rebase_(e_1_0.id);
304
+ expectRebase(result);
305
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_2_0]);
306
+ 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);
308
+ expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_2_0.id);
309
+ });
310
+ it('should only rebase divergent events when first event matches', () => {
311
+ const syncState = {
312
+ pending: [e_0_0, e_0_1],
313
+ rollbackTail: [],
314
+ upstreamHead: EventId.ROOT,
315
+ localHead: e_0_0.id,
316
+ };
317
+ const result = run({
318
+ syncState,
319
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_2, e_0_3, e_1_0] },
320
+ });
321
+ const e_0_1_e_1_1 = e_0_1.rebase_(e_1_0.id);
322
+ expectRebase(result);
323
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_1_e_1_1]);
324
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_2, e_0_3, e_1_0]);
325
+ expectEventArraysEqual(result.eventsToRollback, [e_0_1]);
326
+ 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);
328
+ expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_1.id);
329
+ });
330
+ it('should rebase all local events when incoming chain starts differently', () => {
331
+ const syncState = {
332
+ pending: [e_0_0, e_0_1],
333
+ rollbackTail: [],
334
+ upstreamHead: EventId.ROOT,
335
+ localHead: e_0_1.id,
336
+ };
337
+ const result = run({
338
+ syncState,
339
+ payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
340
+ });
341
+ const e_0_0_e_1_1 = e_0_0.rebase_(e_1_0.id);
342
+ const e_0_1_e_1_2 = e_0_1.rebase_(e_0_0_e_1_1.id);
343
+ expectRebase(result);
344
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_1_1, e_0_1_e_1_2]);
345
+ expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0]);
346
+ 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
+ expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1]);
348
+ expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
349
+ expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_2.id);
350
+ });
351
+ describe('local-push', () => {
352
+ describe('advance', () => {
353
+ it('should advance with new events', () => {
354
+ const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
355
+ const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2, e_0_3] } });
356
+ expectAdvance(result);
357
+ expectEventArraysEqual(result.newSyncState.pending, [e_0_0, e_0_1, e_0_2, e_0_3]);
358
+ expectEventArraysEqual(result.newSyncState.rollbackTail, []);
359
+ expect(result.newSyncState.upstreamHead).toBe(EventId.ROOT);
360
+ expect(result.newSyncState.localHead).toMatchObject(e_0_3.id);
361
+ expectEventArraysEqual(result.newEvents, [e_0_1, e_0_2, e_0_3]);
362
+ });
363
+ });
364
+ describe('reject', () => {
365
+ it('should reject when new events are greater than pending events', () => {
366
+ const syncState = {
367
+ pending: [e_0_0, e_0_1],
368
+ rollbackTail: [],
369
+ upstreamHead: EventId.ROOT,
370
+ localHead: e_0_1.id,
371
+ };
372
+ const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2] } });
373
+ expectReject(result);
374
+ expect(result.expectedMinimumId).toMatchObject(e_0_2.id);
375
+ });
376
+ });
377
+ });
378
+ });
379
+ });
380
+ });
381
+ const expectEventArraysEqual = (actual, expected) => {
382
+ expect(actual.length).toBe(expected.length);
383
+ 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);
388
+ });
389
+ };
390
+ function expectAdvance(result) {
391
+ expect(result._tag).toBe('advance');
392
+ }
393
+ function expectRebase(result) {
394
+ expect(result._tag).toBe('rebase');
395
+ }
396
+ function expectReject(result) {
397
+ expect(result._tag).toBe('reject');
398
+ }
399
+ //# sourceMappingURL=syncstate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncstate.test.js","sourceRoot":"","sources":["../../src/sync/syncstate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from '@livestore/utils/effect';
2
+ import type { MutationEvent } from '../schema/mod.js';
3
+ import { InvalidPushError } from './sync.js';
4
+ export declare const validatePushPayload: (batch: ReadonlyArray<MutationEvent.AnyEncoded>, currentEventId: number) => Effect.Effect<undefined, InvalidPushError, never>;
5
+ //# sourceMappingURL=validate-push-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-push-payload.d.ts","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAG5C,eAAO,MAAM,mBAAmB,UAAW,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,MAAM,sDAWtG,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { Effect } from '@livestore/utils/effect';
2
+ import { InvalidPushError } from './sync.js';
3
+ // TODO proper batch validation
4
+ export const validatePushPayload = (batch, currentEventId) => Effect.gen(function* () {
5
+ if (batch[0].id.global <= currentEventId) {
6
+ return yield* InvalidPushError.make({
7
+ reason: {
8
+ _tag: 'ServerAhead',
9
+ minimumExpectedId: currentEventId + 1,
10
+ providedId: batch[0].id.global,
11
+ },
12
+ });
13
+ }
14
+ });
15
+ //# sourceMappingURL=validate-push-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-push-payload.js","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAA8C,EAAE,cAAsB,EAAE,EAAE,CAC5G,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClC,MAAM,EAAE;gBACN,IAAI,EAAE,aAAa;gBACnB,iBAAiB,EAAE,cAAc,GAAG,CAAC;gBACrC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,MAAM;aAChC;SACF,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
package/dist/util.d.ts CHANGED
@@ -3,8 +3,8 @@ import { Schema } from '@livestore/utils/effect';
3
3
  export type ParamsObject = Record<string, SqlValue>;
4
4
  export type SqlValue = string | number | Uint8Array | null;
5
5
  export type Bindable = ReadonlyArray<SqlValue> | ParamsObject;
6
- export declare const SqlValueSchema: Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array, readonly number[], never>, typeof Schema.Null]>;
7
- export declare const PreparedBindValues: Schema.brand<Schema.Union<[Schema.Array$<Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array, readonly number[], never>, typeof Schema.Null]>>, Schema.Record$<typeof Schema.String, Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array, readonly number[], never>, typeof Schema.Null]>>]>, "PreparedBindValues">;
6
+ export declare const SqlValueSchema: Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array<ArrayBufferLike>, readonly number[], never>, typeof Schema.Null]>;
7
+ export declare const PreparedBindValues: Schema.brand<Schema.Union<[Schema.Array$<Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array<ArrayBufferLike>, readonly number[], never>, typeof Schema.Null]>>, Schema.Record$<typeof Schema.String, Schema.Union<[typeof Schema.String, typeof Schema.Number, Schema.Schema<Uint8Array<ArrayBufferLike>, readonly number[], never>, typeof Schema.Null]>>]>, "PreparedBindValues">;
8
8
  export type PreparedBindValues = Brand.Branded<Bindable, 'PreparedBindValues'>;
9
9
  /**
10
10
  * This is a tag function for tagged literals.
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;AAE1D,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;AAE7D,eAAO,MAAM,cAAc,qIAA6E,CAAA;AAExG,eAAO,MAAM,kBAAkB,mXAGW,CAAA;AAE1C,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAA;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,GAAG,aAAc,oBAAoB,WAAW,OAAO,EAAE,KAAG,MASxE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,WAAY,QAAQ,aAAa,MAAM,KAAG,kBAWvE,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;AAE1D,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;AAE7D,eAAO,MAAM,cAAc,sJAA6E,CAAA;AAExG,eAAO,MAAM,kBAAkB,qZAGW,CAAA;AAE1C,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAA;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,GAAG,aAAc,oBAAoB,WAAW,OAAO,EAAE,KAAG,MASxE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,WAAY,QAAQ,aAAa,MAAM,KAAG,kBAWvE,CAAA"}
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const liveStoreVersion: "0.2.0-dev.2";
1
+ export declare const liveStoreVersion: "0.2.0";
2
2
  /**
3
3
  * This version number is incremented whenever the internal storage format changes in a breaking way.
4
4
  * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
@@ -6,5 +6,5 @@ export declare const liveStoreVersion: "0.2.0-dev.2";
6
6
  * While LiveStore is in alpha, this might happen more frequently.
7
7
  * In the future, LiveStore will provide a migration path for older database files to avoid the impression of data loss.
8
8
  */
9
- export declare const liveStoreStorageFormatVersion = 2;
9
+ export declare const liveStoreStorageFormatVersion = 3;
10
10
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,eAAyB,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAG,OAAgB,CAAA;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAA"}
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // TODO bring back when Expo and Playwright supports `with` imports
2
2
  // import packageJson from '../package.json' with { type: 'json' }
3
3
  // export const liveStoreVersion = packageJson.version
4
- export const liveStoreVersion = '0.2.0-dev.2';
4
+ export const liveStoreVersion = '0.2.0';
5
5
  /**
6
6
  * This version number is incremented whenever the internal storage format changes in a breaking way.
7
7
  * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
@@ -9,5 +9,5 @@ export const liveStoreVersion = '0.2.0-dev.2';
9
9
  * While LiveStore is in alpha, this might happen more frequently.
10
10
  * In the future, LiveStore will provide a migration path for older database files to avoid the impression of data loss.
11
11
  */
12
- export const liveStoreStorageFormatVersion = 2;
12
+ export const liveStoreStorageFormatVersion = 3;
13
13
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAsB,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAgB,CAAA;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/common",
3
- "version": "0.2.0",
3
+ "version": "0.3.0-dev.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -11,9 +11,13 @@
11
11
  "types": "./dist/sql-queries/index.d.ts",
12
12
  "default": "./dist/sql-queries/index.js"
13
13
  },
14
+ "./leader-thread": {
15
+ "types": "./dist/leader-thread/mod.d.ts",
16
+ "default": "./dist/leader-thread/mod.js"
17
+ },
14
18
  "./schema": {
15
- "types": "./dist/schema/index.d.ts",
16
- "default": "./dist/schema/index.js"
19
+ "types": "./dist/schema/mod.d.ts",
20
+ "default": "./dist/schema/mod.js"
17
21
  },
18
22
  "./sync/next": {
19
23
  "types": "./dist/sync/next/mod.d.ts",
@@ -28,11 +32,14 @@
28
32
  "typesVersions": {
29
33
  "*": {
30
34
  "schema": [
31
- "./dist/schema/index.d.ts"
35
+ "./dist/schema/mod.d.ts"
32
36
  ],
33
37
  "sql-queries": [
34
38
  "./dist/sql-queries/index.d.ts"
35
39
  ],
40
+ "leader-thread": [
41
+ "./dist/leader-thread/mod.d.ts"
42
+ ],
36
43
  "sync/next": [
37
44
  "./dist/sync/next/mod.d.ts"
38
45
  ],
@@ -46,8 +53,8 @@
46
53
  "graphology": "0.26.0-alpha1",
47
54
  "graphology-dag": "0.4.1",
48
55
  "graphology-types": "0.24.7",
49
- "@livestore/utils": "0.2.0",
50
- "@livestore/db-schema": "0.2.0"
56
+ "@livestore/utils": "0.3.0-dev.0",
57
+ "@livestore/db-schema": "0.3.0-dev.0"
51
58
  },
52
59
  "devDependencies": {
53
60
  "vitest": "^2.1.4"
@@ -1,6 +1,6 @@
1
1
  import { Schema } from '@livestore/utils/effect'
2
2
 
3
- import { DbSchema } from '../schema/index.js'
3
+ import { DbSchema, makeSchema } from '../schema/mod.js'
4
4
 
5
5
  export const todos = DbSchema.table(
6
6
  'todos',
@@ -21,3 +21,7 @@ export const appConfig = DbSchema.table('app_config', DbSchema.json({ schema: Co
21
21
  isSingleton: true,
22
22
  deriveMutations: true,
23
23
  })
24
+
25
+ export const tables = [todos, appConfig]
26
+
27
+ export const schema = makeSchema({ tables })