@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
@@ -0,0 +1,82 @@
1
+ import { Brand, Schema } from '@livestore/utils/effect';
2
+ export const localEventSequenceNumber = Brand.nominal();
3
+ export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int);
4
+ export const globalEventSequenceNumber = Brand.nominal();
5
+ export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int);
6
+ export const clientDefault = 0;
7
+ // export const EventSequenceNumber = Schema.Struct({})
8
+ // export const EventSequenceNumber = Schema.Struct({})
9
+ // export const ClientEventSequenceNumber = Schema.Struct({})
10
+ // export const GlobalEventSequenceNumber = Schema.Struct({})
11
+ /**
12
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
13
+ */
14
+ export const EventSequenceNumber = Schema.Struct({
15
+ global: GlobalEventSequenceNumber,
16
+ /** Only increments for clientOnly events */
17
+ client: ClientEventSequenceNumber,
18
+ // TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
19
+ // TODO: actually add this field
20
+ // Client only
21
+ // generation: Schema.Number.pipe(Schema.optional),
22
+ }).annotations({ title: 'LiveStore.EventSequenceNumber' });
23
+ /**
24
+ * Compare two event ids i.e. checks if the first event id is less than the second.
25
+ */
26
+ export const compare = (a, b) => {
27
+ if (a.global !== b.global) {
28
+ return a.global - b.global;
29
+ }
30
+ return a.client - b.client;
31
+ };
32
+ /**
33
+ * Convert an event id to a string representation.
34
+ */
35
+ export const toString = (seqNum) => seqNum.client === 0 ? `e${seqNum.global}` : `e${seqNum.global}+${seqNum.client}`;
36
+ /**
37
+ * Convert a string representation of an event id to an event id.
38
+ */
39
+ export const fromString = (str) => {
40
+ const [global, client] = str.slice(1, -1).split(',').map(Number);
41
+ if (global === undefined || client === undefined) {
42
+ throw new Error('Invalid event id string');
43
+ }
44
+ return { global, client };
45
+ };
46
+ export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
47
+ export const ROOT = {
48
+ global: 0,
49
+ client: clientDefault,
50
+ };
51
+ export const isGreaterThan = (a, b) => {
52
+ return a.global > b.global || (a.global === b.global && a.client > b.client);
53
+ };
54
+ export const isGreaterThanOrEqual = (a, b) => {
55
+ return a.global > b.global || (a.global === b.global && a.client >= b.client);
56
+ };
57
+ export const max = (a, b) => {
58
+ return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
59
+ };
60
+ export const diff = (a, b) => {
61
+ return {
62
+ global: a.global - b.global,
63
+ client: a.client - b.client,
64
+ };
65
+ };
66
+ export const make = (seqNum) => {
67
+ return Schema.is(EventSequenceNumber)(seqNum) ? seqNum : Schema.decodeSync(EventSequenceNumber)(seqNum);
68
+ };
69
+ export const nextPair = (seqNum, isLocal) => {
70
+ if (isLocal) {
71
+ return {
72
+ seqNum: { global: seqNum.global, client: (seqNum.client + 1) },
73
+ parentSeqNum: seqNum,
74
+ };
75
+ }
76
+ return {
77
+ seqNum: { global: (seqNum.global + 1), client: clientDefault },
78
+ // NOTE we always point to `client: 0` for non-clientOnly events
79
+ parentSeqNum: { global: seqNum.global, client: clientDefault },
80
+ };
81
+ };
82
+ //# sourceMappingURL=EventNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.js","sourceRoot":"","sources":["../../src/schema/EventNumber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EventNumber.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
2
+ import { expect } from 'vitest';
3
+ import { EventSequenceNumber } from './mod.js';
4
+ Vitest.describe('EventSequenceNumber', () => {
5
+ Vitest.test('nextPair', () => {
6
+ const e_0_0 = EventSequenceNumber.make({ global: 0, client: 0 });
7
+ expect(EventSequenceNumber.nextPair(e_0_0, false).seqNum).toStrictEqual({ global: 1, client: 0 });
8
+ expect(EventSequenceNumber.nextPair(e_0_0, true).seqNum).toStrictEqual({ global: 0, client: 1 });
9
+ });
10
+ });
11
+ //# sourceMappingURL=EventNumber.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.test.js","sourceRoot":"","sources":["../../src/schema/EventNumber.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACjG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,57 @@
1
+ import { Brand, Schema } from '@livestore/utils/effect';
2
+ export type ClientEventSequenceNumber = Brand.Branded<number, 'ClientEventSequenceNumber'>;
3
+ export declare const localEventSequenceNumber: Brand.Brand.Constructor<ClientEventSequenceNumber>;
4
+ export declare const ClientEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
5
+ export type GlobalEventSequenceNumber = Brand.Branded<number, 'GlobalEventSequenceNumber'>;
6
+ export declare const globalEventSequenceNumber: Brand.Brand.Constructor<GlobalEventSequenceNumber>;
7
+ export declare const GlobalEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
8
+ export declare const clientDefault: ClientEventSequenceNumber;
9
+ /**
10
+ * LiveStore event sequence number value consisting of a globally unique event sequence number
11
+ * and a client sequence number.
12
+ *
13
+ * The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
14
+ */
15
+ export type EventSequenceNumber = {
16
+ global: GlobalEventSequenceNumber;
17
+ client: ClientEventSequenceNumber;
18
+ };
19
+ /**
20
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
21
+ */
22
+ export declare const EventSequenceNumber: Schema.Struct<{
23
+ global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
24
+ /** Only increments for clientOnly events */
25
+ client: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
26
+ }>;
27
+ /**
28
+ * Compare two event sequence numbers i.e. checks if the first event sequence number is less than the second.
29
+ */
30
+ export declare const compare: (a: EventSequenceNumber, b: EventSequenceNumber) => number;
31
+ /**
32
+ * Convert an event sequence number to a string representation.
33
+ */
34
+ export declare const toString: (seqNum: EventSequenceNumber) => string;
35
+ /**
36
+ * Convert a string representation of an event sequence number to an event sequence number.
37
+ */
38
+ export declare const fromString: (str: string) => EventSequenceNumber;
39
+ export declare const isEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
40
+ export type EventSequenceNumberPair = {
41
+ seqNum: EventSequenceNumber;
42
+ parentSeqNum: EventSequenceNumber;
43
+ };
44
+ export declare const ROOT: {
45
+ global: GlobalEventSequenceNumber;
46
+ client: ClientEventSequenceNumber;
47
+ };
48
+ export declare const isGreaterThan: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
49
+ export declare const isGreaterThanOrEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
50
+ export declare const max: (a: EventSequenceNumber, b: EventSequenceNumber) => EventSequenceNumber;
51
+ export declare const diff: (a: EventSequenceNumber, b: EventSequenceNumber) => {
52
+ global: number;
53
+ client: number;
54
+ };
55
+ export declare const make: (seqNum: EventSequenceNumber | typeof EventSequenceNumber.Encoded) => EventSequenceNumber;
56
+ export declare const nextPair: (seqNum: EventSequenceNumber, isLocal: boolean) => EventSequenceNumberPair;
57
+ //# sourceMappingURL=EventSequenceNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSequenceNumber.d.ts","sourceRoot":"","sources":["../../src/schema/EventSequenceNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,wBAAwB,oDAA6C,CAAA;AAClF,eAAO,MAAM,yBAAyB,sFAAyD,CAAA;AAE/F,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,yBAAyB,oDAA6C,CAAA;AACnF,eAAO,MAAM,yBAAyB,sFAA0D,CAAA;AAEhG,eAAO,MAAM,aAAa,EAAe,yBAAyB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,yBAAyB,CAAA;IACjC,MAAM,EAAE,yBAAyB,CAAA;CAKlC,CAAA;AAOD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;IAE9B,4CAA4C;;EAQY,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,WAKrE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,WAC8B,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,mBAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YACtB,CAAA;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAExG,eAAO,MAAM,IAAI;YACK,yBAAyB;;CAEhB,CAAA;AAE/B,eAAO,MAAM,aAAa,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAE3E,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAElF,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,wBAEjE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB;;;CAKlE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,OAAO,KAAG,mBAEvF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,EAAE,SAAS,OAAO,KAAG,uBAaxE,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { Brand, Schema } from '@livestore/utils/effect';
2
+ export const localEventSequenceNumber = Brand.nominal();
3
+ export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int);
4
+ export const globalEventSequenceNumber = Brand.nominal();
5
+ export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int);
6
+ export const clientDefault = 0;
7
+ // export const EventSequenceNumber = Schema.Struct({})
8
+ // export const EventSequenceNumber = Schema.Struct({})
9
+ // export const ClientEventSequenceNumber = Schema.Struct({})
10
+ // export const GlobalEventSequenceNumber = Schema.Struct({})
11
+ /**
12
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
13
+ */
14
+ export const EventSequenceNumber = Schema.Struct({
15
+ global: GlobalEventSequenceNumber,
16
+ /** Only increments for clientOnly events */
17
+ client: ClientEventSequenceNumber,
18
+ // TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
19
+ // TODO: actually add this field
20
+ // Client only
21
+ // generation: Schema.Number.pipe(Schema.optional),
22
+ }).annotations({ title: 'LiveStore.EventSequenceNumber' });
23
+ /**
24
+ * Compare two event sequence numbers i.e. checks if the first event sequence number is less than the second.
25
+ */
26
+ export const compare = (a, b) => {
27
+ if (a.global !== b.global) {
28
+ return a.global - b.global;
29
+ }
30
+ return a.client - b.client;
31
+ };
32
+ /**
33
+ * Convert an event sequence number to a string representation.
34
+ */
35
+ export const toString = (seqNum) => seqNum.client === 0 ? `e${seqNum.global}` : `e${seqNum.global}+${seqNum.client}`;
36
+ /**
37
+ * Convert a string representation of an event sequence number to an event sequence number.
38
+ */
39
+ export const fromString = (str) => {
40
+ const [global, client] = str.slice(1, -1).split(',').map(Number);
41
+ if (global === undefined || client === undefined) {
42
+ throw new Error('Invalid event sequence number string');
43
+ }
44
+ return { global, client };
45
+ };
46
+ export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
47
+ export const ROOT = {
48
+ global: 0,
49
+ client: clientDefault,
50
+ };
51
+ export const isGreaterThan = (a, b) => {
52
+ return a.global > b.global || (a.global === b.global && a.client > b.client);
53
+ };
54
+ export const isGreaterThanOrEqual = (a, b) => {
55
+ return a.global > b.global || (a.global === b.global && a.client >= b.client);
56
+ };
57
+ export const max = (a, b) => {
58
+ return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
59
+ };
60
+ export const diff = (a, b) => {
61
+ return {
62
+ global: a.global - b.global,
63
+ client: a.client - b.client,
64
+ };
65
+ };
66
+ export const make = (seqNum) => {
67
+ return Schema.is(EventSequenceNumber)(seqNum) ? seqNum : Schema.decodeSync(EventSequenceNumber)(seqNum);
68
+ };
69
+ export const nextPair = (seqNum, isLocal) => {
70
+ if (isLocal) {
71
+ return {
72
+ seqNum: { global: seqNum.global, client: (seqNum.client + 1) },
73
+ parentSeqNum: seqNum,
74
+ };
75
+ }
76
+ return {
77
+ seqNum: { global: (seqNum.global + 1), client: clientDefault },
78
+ // NOTE we always point to `client: 0` for non-clientOnly events
79
+ parentSeqNum: { global: seqNum.global, client: clientDefault },
80
+ };
81
+ };
82
+ //# sourceMappingURL=EventSequenceNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSequenceNumber.js","sourceRoot":"","sources":["../../src/schema/EventSequenceNumber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EventSequenceNumber.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSequenceNumber.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventSequenceNumber.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
2
+ import { expect } from 'vitest';
3
+ import { EventSequenceNumber } from './mod.js';
4
+ Vitest.describe('EventSequenceNumber', () => {
5
+ Vitest.test('nextPair', () => {
6
+ const e_0_0 = EventSequenceNumber.make({ global: 0, client: 0 });
7
+ expect(EventSequenceNumber.nextPair(e_0_0, false).seqNum).toStrictEqual({ global: 1, client: 0 });
8
+ expect(EventSequenceNumber.nextPair(e_0_0, true).seqNum).toStrictEqual({ global: 0, client: 1 });
9
+ });
10
+ });
11
+ //# sourceMappingURL=EventSequenceNumber.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSequenceNumber.test.js","sourceRoot":"","sources":["../../src/schema/EventSequenceNumber.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACjG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,57 +1,59 @@
1
1
  import { Option, Schema } from '@livestore/utils/effect';
2
2
  import type { EventDef, EventDefRecord } from './EventDef.js';
3
- import * as EventId from './EventId.js';
3
+ import * as EventSequenceNumber from './EventSequenceNumber.js';
4
4
  import type { LiveStoreSchema } from './schema.js';
5
- export type EventDefPartial<TEventDef extends EventDef.Any> = {
6
- name: TEventDef['name'];
7
- args: Schema.Schema.Type<TEventDef['schema']>;
8
- };
9
- export type PartialEncoded<TEventDef extends EventDef.Any> = {
10
- name: TEventDef['name'];
11
- args: Schema.Schema.Encoded<TEventDef['schema']>;
12
- };
13
- export type ForEventDef<TEventDef extends EventDef.Any> = {
14
- name: TEventDef['name'];
15
- args: Schema.Schema.Type<TEventDef['schema']>;
16
- id: EventId.EventId;
17
- parentId: EventId.EventId;
18
- clientId: string;
19
- sessionId: string;
20
- };
21
- export type EventDefEncoded<TEventDef extends EventDef.Any> = {
22
- name: TEventDef['name'];
23
- args: Schema.Schema.Encoded<TEventDef['schema']>;
24
- id: EventId.EventId;
25
- parentId: EventId.EventId;
26
- clientId: string;
27
- sessionId: string;
28
- };
29
- export type AnyDecoded = ForEventDef<EventDef.Any>;
5
+ export declare namespace ForEventDef {
6
+ type PartialDecoded<TEventDef extends EventDef.Any> = {
7
+ name: TEventDef['name'];
8
+ args: Schema.Schema.Type<TEventDef['schema']>;
9
+ };
10
+ type PartialEncoded<TEventDef extends EventDef.Any> = {
11
+ name: TEventDef['name'];
12
+ args: Schema.Schema.Encoded<TEventDef['schema']>;
13
+ };
14
+ type Decoded<TEventDef extends EventDef.Any> = {
15
+ name: TEventDef['name'];
16
+ args: Schema.Schema.Type<TEventDef['schema']>;
17
+ seqNum: EventSequenceNumber.EventSequenceNumber;
18
+ parentSeqNum: EventSequenceNumber.EventSequenceNumber;
19
+ clientId: string;
20
+ sessionId: string;
21
+ };
22
+ type Encoded<TEventDef extends EventDef.Any> = {
23
+ name: TEventDef['name'];
24
+ args: Schema.Schema.Encoded<TEventDef['schema']>;
25
+ seqNum: EventSequenceNumber.EventSequenceNumber;
26
+ parentSeqNum: EventSequenceNumber.EventSequenceNumber;
27
+ clientId: string;
28
+ sessionId: string;
29
+ };
30
+ }
31
+ export type AnyDecoded = ForEventDef.Decoded<EventDef.Any>;
30
32
  export declare const AnyDecoded: Schema.Struct<{
31
33
  name: typeof Schema.String;
32
34
  args: typeof Schema.Any;
33
- id: Schema.Struct<{
34
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
35
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
35
+ seqNum: Schema.Struct<{
36
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
37
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
36
38
  }>;
37
- parentId: Schema.Struct<{
38
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
39
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
39
+ parentSeqNum: Schema.Struct<{
40
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
41
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
40
42
  }>;
41
43
  clientId: typeof Schema.String;
42
44
  sessionId: typeof Schema.String;
43
45
  }>;
44
- export type AnyEncoded = EventDefEncoded<EventDef.Any>;
46
+ export type AnyEncoded = ForEventDef.Encoded<EventDef.Any>;
45
47
  export declare const AnyEncoded: Schema.Struct<{
46
48
  name: typeof Schema.String;
47
49
  args: typeof Schema.Any;
48
- id: Schema.Struct<{
49
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
50
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
50
+ seqNum: Schema.Struct<{
51
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
52
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
51
53
  }>;
52
- parentId: Schema.Struct<{
53
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
54
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
54
+ parentSeqNum: Schema.Struct<{
55
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
56
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
55
57
  }>;
56
58
  clientId: typeof Schema.String;
57
59
  sessionId: typeof Schema.String;
@@ -59,31 +61,31 @@ export declare const AnyEncoded: Schema.Struct<{
59
61
  export declare const AnyEncodedGlobal: Schema.Struct<{
60
62
  name: typeof Schema.String;
61
63
  args: typeof Schema.Any;
62
- id: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
63
- parentId: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
64
+ seqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
65
+ parentSeqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
64
66
  clientId: typeof Schema.String;
65
67
  sessionId: typeof Schema.String;
66
68
  }>;
67
69
  export type AnyEncodedGlobal = typeof AnyEncodedGlobal.Type;
68
- export type PartialAnyDecoded = EventDefPartial<EventDef.Any>;
69
- export type PartialAnyEncoded = PartialEncoded<EventDef.Any>;
70
+ export type PartialAnyDecoded = ForEventDef.PartialDecoded<EventDef.Any>;
71
+ export type PartialAnyEncoded = ForEventDef.PartialEncoded<EventDef.Any>;
70
72
  export declare const PartialAnyEncoded: Schema.Struct<{
71
73
  name: typeof Schema.String;
72
74
  args: typeof Schema.Any;
73
75
  }>;
74
76
  export type PartialForSchema<TSchema extends LiveStoreSchema> = {
75
- [K in keyof TSchema['_EventDefMapType']]: EventDefPartial<TSchema['_EventDefMapType'][K]>;
77
+ [K in keyof TSchema['_EventDefMapType']]: ForEventDef.PartialDecoded<TSchema['_EventDefMapType'][K]>;
76
78
  }[keyof TSchema['_EventDefMapType']];
77
79
  export type ForSchema<TSchema extends LiveStoreSchema> = {
78
- [K in keyof TSchema['_EventDefMapType']]: ForEventDef<TSchema['_EventDefMapType'][K]>;
80
+ [K in keyof TSchema['_EventDefMapType']]: ForEventDef.Decoded<TSchema['_EventDefMapType'][K]>;
79
81
  }[keyof TSchema['_EventDefMapType']];
80
82
  export declare const isPartialEventDef: (event: AnyDecoded | PartialAnyDecoded) => event is PartialAnyDecoded;
81
83
  export type ForEventDefRecord<TEventDefRecord extends EventDefRecord> = Schema.Schema<{
82
84
  [K in keyof TEventDefRecord]: {
83
85
  name: K;
84
86
  args: Schema.Schema.Type<TEventDefRecord[K]['schema']>;
85
- id: EventId.EventId;
86
- parentId: EventId.EventId;
87
+ seqNum: EventSequenceNumber.EventSequenceNumber;
88
+ parentSeqNum: EventSequenceNumber.EventSequenceNumber;
87
89
  clientId: string;
88
90
  sessionId: string;
89
91
  };
@@ -91,8 +93,8 @@ export type ForEventDefRecord<TEventDefRecord extends EventDefRecord> = Schema.S
91
93
  [K in keyof TEventDefRecord]: {
92
94
  name: K;
93
95
  args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>;
94
- id: EventId.EventId;
95
- parentId: EventId.EventId;
96
+ seqNum: EventSequenceNumber.EventSequenceNumber;
97
+ parentSeqNum: EventSequenceNumber.EventSequenceNumber;
96
98
  clientId: string;
97
99
  sessionId: string;
98
100
  };
@@ -114,13 +116,13 @@ export declare const makeEventDefSchemaMemo: <TSchema extends LiveStoreSchema>(s
114
116
  declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
115
117
  name: typeof Schema.String;
116
118
  args: typeof Schema.Any;
117
- id: Schema.Struct<{
118
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
119
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
119
+ seqNum: Schema.Struct<{
120
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
121
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
120
122
  }>;
121
- parentId: Schema.Struct<{
122
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
123
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
123
+ parentSeqNum: Schema.Struct<{
124
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
125
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
124
126
  }>;
125
127
  clientId: typeof Schema.String;
126
128
  sessionId: typeof Schema.String;
@@ -155,13 +157,13 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
155
157
  }, Schema.Struct.Encoded<{
156
158
  name: typeof Schema.String;
157
159
  args: typeof Schema.Any;
158
- id: Schema.Struct<{
159
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
160
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
160
+ seqNum: Schema.Struct<{
161
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
162
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
161
163
  }>;
162
- parentId: Schema.Struct<{
163
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
164
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
164
+ parentSeqNum: Schema.Struct<{
165
+ global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
166
+ client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
165
167
  }>;
166
168
  clientId: typeof Schema.String;
167
169
  sessionId: typeof Schema.String;
@@ -199,17 +201,17 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
199
201
  readonly sessionId: string;
200
202
  } & {
201
203
  readonly name: string;
202
- } & {
203
- readonly id: {
204
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
205
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
206
- };
207
204
  } & {
208
205
  readonly args: any;
209
206
  } & {
210
- readonly parentId: {
211
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
212
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
207
+ readonly seqNum: {
208
+ readonly global: number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">;
209
+ readonly client: number & import("effect/Brand").Brand<"ClientEventSequenceNumber">;
210
+ };
211
+ } & {
212
+ readonly parentSeqNum: {
213
+ readonly global: number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">;
214
+ readonly client: number & import("effect/Brand").Brand<"ClientEventSequenceNumber">;
213
215
  };
214
216
  } & {
215
217
  readonly meta?: {
@@ -230,22 +232,22 @@ export declare class EncodedWithMeta extends EncodedWithMeta_base {
230
232
  toJSON: () => any;
231
233
  /**
232
234
  * Example: (global event)
233
- * For event id e2 → e1 which should be rebased on event id e3 → e2
234
- * the resulting event id will be e4 → e3
235
+ * For event e2 → e1 which should be rebased on event e3 → e2
236
+ * the resulting event num will be e4 → e3
235
237
  *
236
238
  * Example: (client event)
237
- * For event id e2+1 → e2 which should be rebased on event id e3 → e2
238
- * the resulting event id will be e3+1 → e3
239
+ * For event e2+1 → e2 which should be rebased on event e3 → e2
240
+ * the resulting event num will be e3+1 → e3
239
241
  *
240
242
  * Syntax: e2+2 → e2+1
241
243
  * ^ ^ ^ ^
242
- * | | | +- client parent id
243
- * | | +--- global parent id
244
- * | +-- client id
245
- * +---- global id
246
- * Client id is ommitted for global events
244
+ * | | | +- client parent number
245
+ * | | +--- global parent number
246
+ * | +-- client number
247
+ * +---- global number
248
+ * Client num is ommitted for global events
247
249
  */
248
- rebase: (parentId: EventId.EventId, isClient: boolean) => EncodedWithMeta;
250
+ rebase: (parentSeqNum: EventSequenceNumber.EventSequenceNumber, isClient: boolean) => EncodedWithMeta;
249
251
  static fromGlobal: (event: AnyEncodedGlobal, syncMetadata: Option.Option<Schema.JsonValue>) => EncodedWithMeta;
250
252
  toGlobal: () => AnyEncodedGlobal;
251
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LiveStoreEvent.d.ts","sourceRoot":"","sources":["../../src/schema/LiveStoreEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LiveStoreEvent.d.ts","sourceRoot":"","sources":["../../src/schema/LiveStoreEvent.ts"],"names":[],"mappings":"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"}