@livestore/common 0.3.0-dev.46 → 0.3.0-dev.48
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapter-types.d.ts +11 -9
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +5 -3
- package/dist/adapter-types.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +25 -25
- package/dist/devtools/devtools-messages-client-session.js +3 -3
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +30 -30
- package/dist/devtools/devtools-messages-leader.js +3 -3
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/mod.js +1 -1
- package/dist/devtools/mod.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +27 -25
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +10 -10
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +24 -24
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +1 -1
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +3 -3
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +19 -15
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/types.d.ts +4 -4
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/make-client-session.d.ts +2 -1
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +11 -12
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +4 -2
- package/dist/materializer-helper.js.map +1 -1
- package/dist/rematerialize-from-eventlog.js +9 -9
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventId.d.ts +28 -28
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +9 -9
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/EventId.test.js +5 -5
- package/dist/schema/EventId.test.js.map +1 -1
- package/dist/schema/EventNumber.d.ts +57 -0
- package/dist/schema/EventNumber.d.ts.map +1 -0
- package/dist/schema/EventNumber.js +82 -0
- package/dist/schema/EventNumber.js.map +1 -0
- package/dist/schema/EventNumber.test.d.ts +2 -0
- package/dist/schema/EventNumber.test.d.ts.map +1 -0
- package/dist/schema/EventNumber.test.js +11 -0
- package/dist/schema/EventNumber.test.js.map +1 -0
- package/dist/schema/EventSequenceNumber.d.ts +57 -0
- package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber.js +82 -0
- package/dist/schema/EventSequenceNumber.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
- package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +11 -0
- package/dist/schema/EventSequenceNumber.test.js.map +1 -0
- package/dist/schema/LiveStoreEvent.d.ts +81 -79
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent.js +31 -32
- package/dist/schema/LiveStoreEvent.js.map +1 -1
- package/dist/schema/mod.d.ts +1 -1
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +1 -1
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +2 -2
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +3 -3
- package/dist/schema/state/sqlite/query-builder/impl.test.js +9 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +52 -52
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables.js +11 -10
- package/dist/schema/state/sqlite/system-tables.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +7 -7
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/next/compact-events.js +38 -35
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +4 -4
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +8 -8
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +4 -4
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +7 -4
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts +0 -2
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +15 -13
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +10 -4
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +13 -13
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +31 -31
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +10 -0
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +19 -13
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/sync.d.ts +11 -11
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +5 -5
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +18 -18
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +46 -47
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +110 -110
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +4 -4
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/package.json +4 -4
- package/src/adapter-types.ts +11 -7
- package/src/devtools/devtools-messages-client-session.ts +3 -3
- package/src/devtools/devtools-messages-leader.ts +3 -3
- package/src/devtools/mod.ts +1 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +36 -29
- package/src/leader-thread/eventlog.ts +36 -31
- package/src/leader-thread/leader-worker-devtools.ts +1 -1
- package/src/leader-thread/materialize-event.ts +21 -17
- package/src/leader-thread/types.ts +4 -4
- package/src/make-client-session.ts +14 -11
- package/src/materializer-helper.ts +5 -2
- package/src/rematerialize-from-eventlog.ts +10 -10
- package/src/schema/EventSequenceNumber.test.ts +12 -0
- package/src/schema/EventSequenceNumber.ts +121 -0
- package/src/schema/LiveStoreEvent.ts +66 -65
- package/src/schema/mod.ts +1 -1
- package/src/schema/state/sqlite/query-builder/impl.test.ts +9 -0
- package/src/schema/state/sqlite/query-builder/impl.ts +3 -2
- package/src/schema/state/sqlite/system-tables.ts +11 -10
- package/src/sync/ClientSessionSyncProcessor.ts +7 -7
- package/src/sync/next/compact-events.ts +38 -35
- package/src/sync/next/facts.ts +12 -9
- package/src/sync/next/history-dag-common.ts +9 -6
- package/src/sync/next/history-dag.ts +15 -16
- package/src/sync/next/rebase-events.ts +10 -4
- package/src/sync/next/test/compact-events.calculator.test.ts +13 -13
- package/src/sync/next/test/compact-events.test.ts +31 -31
- package/src/sync/next/test/event-fixtures.ts +20 -13
- package/src/sync/sync.ts +7 -7
- package/src/sync/syncstate.test.ts +112 -112
- package/src/sync/syncstate.ts +58 -48
- package/src/sync/validate-push-payload.ts +5 -5
- package/src/version.ts +2 -2
- package/src/schema/EventId.test.ts +0 -12
- package/src/schema/EventId.ts +0 -106
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE/E,OAAO,EAAiB,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGnE,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/EventId.d.ts
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
-
export type
|
3
|
-
export declare const
|
4
|
-
export declare const
|
5
|
-
export type
|
6
|
-
export declare const
|
7
|
-
export declare const
|
8
|
-
export declare const clientDefault:
|
2
|
+
export type ClientEventNumber = Brand.Branded<number, 'ClientEventNumber'>;
|
3
|
+
export declare const localEventNumber: Brand.Brand.Constructor<ClientEventNumber>;
|
4
|
+
export declare const ClientEventNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
|
5
|
+
export type GlobalEventNumber = Brand.Branded<number, 'GlobalEventNumber'>;
|
6
|
+
export declare const globalEventNumber: Brand.Brand.Constructor<GlobalEventNumber>;
|
7
|
+
export declare const GlobalEventNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
|
8
|
+
export declare const clientDefault: ClientEventNumber;
|
9
9
|
/**
|
10
10
|
* LiveStore event id value consisting of a globally unique event sequence number
|
11
11
|
* and a client sequence number.
|
12
12
|
*
|
13
13
|
* The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
|
14
14
|
*/
|
15
|
-
export type
|
16
|
-
global:
|
17
|
-
client:
|
15
|
+
export type EventNumber = {
|
16
|
+
global: GlobalEventNumber;
|
17
|
+
client: ClientEventNumber;
|
18
18
|
};
|
19
19
|
/**
|
20
20
|
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
21
21
|
*/
|
22
|
-
export declare const
|
23
|
-
global: Schema.BrandSchema<number & Brand.Brand<"
|
22
|
+
export declare const EventNumber: Schema.Struct<{
|
23
|
+
global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
|
24
24
|
/** Only increments for clientOnly events */
|
25
|
-
client: Schema.BrandSchema<number & Brand.Brand<"
|
25
|
+
client: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
|
26
26
|
}>;
|
27
27
|
/**
|
28
28
|
* Compare two event ids i.e. checks if the first event id is less than the second.
|
29
29
|
*/
|
30
|
-
export declare const compare: (a:
|
30
|
+
export declare const compare: (a: EventNumber, b: EventNumber) => number;
|
31
31
|
/**
|
32
32
|
* Convert an event id to a string representation.
|
33
33
|
*/
|
34
|
-
export declare const toString: (id:
|
34
|
+
export declare const toString: (id: EventNumber) => string;
|
35
35
|
/**
|
36
36
|
* Convert a string representation of an event id to an event id.
|
37
37
|
*/
|
38
|
-
export declare const fromString: (str: string) =>
|
39
|
-
export declare const isEqual: (a:
|
40
|
-
export type
|
41
|
-
id:
|
42
|
-
parentId:
|
38
|
+
export declare const fromString: (str: string) => EventNumber;
|
39
|
+
export declare const isEqual: (a: EventNumber, b: EventNumber) => boolean;
|
40
|
+
export type EventNumberPair = {
|
41
|
+
id: EventNumber;
|
42
|
+
parentId: EventNumber;
|
43
43
|
};
|
44
44
|
export declare const ROOT: {
|
45
|
-
global:
|
46
|
-
client:
|
45
|
+
global: GlobalEventNumber;
|
46
|
+
client: ClientEventNumber;
|
47
47
|
};
|
48
|
-
export declare const isGreaterThan: (a:
|
49
|
-
export declare const isGreaterThanOrEqual: (a:
|
50
|
-
export declare const max: (a:
|
51
|
-
export declare const diff: (a:
|
48
|
+
export declare const isGreaterThan: (a: EventNumber, b: EventNumber) => boolean;
|
49
|
+
export declare const isGreaterThanOrEqual: (a: EventNumber, b: EventNumber) => boolean;
|
50
|
+
export declare const max: (a: EventNumber, b: EventNumber) => EventNumber;
|
51
|
+
export declare const diff: (a: EventNumber, b: EventNumber) => {
|
52
52
|
global: number;
|
53
53
|
client: number;
|
54
54
|
};
|
55
|
-
export declare const make: (id:
|
56
|
-
export declare const nextPair: (id:
|
55
|
+
export declare const make: (id: EventNumber | typeof EventNumber.Encoded) => EventNumber;
|
56
|
+
export declare const nextPair: (id: EventNumber, isLocal: boolean) => EventNumberPair;
|
57
57
|
//# sourceMappingURL=EventId.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,
|
1
|
+
{"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,gBAAgB,4CAAqC,CAAA;AAClE,eAAO,MAAM,iBAAiB,8EAAiD,CAAA;AAE/E,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,iBAAiB,4CAAqC,CAAA;AACnE,eAAO,MAAM,iBAAiB,8EAAkD,CAAA;AAEhF,eAAO,MAAM,aAAa,EAAe,iBAAiB,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAOlF;;GAEG;AACH,eAAO,MAAM,WAAW;;IAEtB,4CAA4C;;EAQI,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,WAKrD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,WAAuE,CAAA;AAE/G;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,WAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAAmD,CAAA;AAEzG,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAA;AAExE,eAAO,MAAM,IAAI;YAAyB,iBAAiB;;CAA+C,CAAA;AAE1G,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAE3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAElE,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,gBAEjD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW;;;CAKlD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,WAAW,GAAG,OAAO,WAAW,CAAC,OAAO,KAAG,WAEnE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,EAAE,SAAS,OAAO,KAAG,eAU5D,CAAA"}
|
package/dist/schema/EventId.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
-
export const
|
3
|
-
export const
|
4
|
-
export const
|
5
|
-
export const
|
2
|
+
export const localEventNumber = Brand.nominal();
|
3
|
+
export const ClientEventNumber = Schema.fromBrand(localEventNumber)(Schema.Int);
|
4
|
+
export const globalEventNumber = Brand.nominal();
|
5
|
+
export const GlobalEventNumber = Schema.fromBrand(globalEventNumber)(Schema.Int);
|
6
6
|
export const clientDefault = 0;
|
7
7
|
// export const EventSequenceNumber = Schema.Struct({})
|
8
8
|
// export const EventNumber = Schema.Struct({})
|
@@ -11,15 +11,15 @@ export const clientDefault = 0;
|
|
11
11
|
/**
|
12
12
|
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
13
13
|
*/
|
14
|
-
export const
|
15
|
-
global:
|
14
|
+
export const EventNumber = Schema.Struct({
|
15
|
+
global: GlobalEventNumber,
|
16
16
|
/** Only increments for clientOnly events */
|
17
|
-
client:
|
17
|
+
client: ClientEventNumber,
|
18
18
|
// TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
|
19
19
|
// TODO: actually add this field
|
20
20
|
// Client only
|
21
21
|
// generation: Schema.Number.pipe(Schema.optional),
|
22
|
-
}).annotations({ title: 'LiveStore.
|
22
|
+
}).annotations({ title: 'LiveStore.EventNumber' });
|
23
23
|
/**
|
24
24
|
* Compare two event ids i.e. checks if the first event id is less than the second.
|
25
25
|
*/
|
@@ -61,7 +61,7 @@ export const diff = (a, b) => {
|
|
61
61
|
};
|
62
62
|
};
|
63
63
|
export const make = (id) => {
|
64
|
-
return Schema.is(
|
64
|
+
return Schema.is(EventNumber)(id) ? id : Schema.decodeSync(EventNumber)(id);
|
65
65
|
};
|
66
66
|
export const nextPair = (id, isLocal) => {
|
67
67
|
if (isLocal) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
2
2
|
import { expect } from 'vitest';
|
3
|
-
import {
|
4
|
-
Vitest.describe('
|
3
|
+
import { EventNumber } from './mod.js';
|
4
|
+
Vitest.describe('EventNumber', () => {
|
5
5
|
Vitest.test('nextPair', () => {
|
6
|
-
const e_0_0 =
|
7
|
-
expect(
|
8
|
-
expect(
|
6
|
+
const e_0_0 = EventNumber.make({ global: 0, client: 0 });
|
7
|
+
expect(EventNumber.nextPair(e_0_0, false).id).toStrictEqual({ global: 1, client: 0 });
|
8
|
+
expect(EventNumber.nextPair(e_0_0, true).id).toStrictEqual({ global: 0, client: 1 });
|
9
9
|
});
|
10
10
|
});
|
11
11
|
//# sourceMappingURL=EventId.test.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.test.js","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"EventId.test.js","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAClC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACxD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACtF,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 id 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 ids i.e. checks if the first event id is less than the second.
|
29
|
+
*/
|
30
|
+
export declare const compare: (a: EventSequenceNumber, b: EventSequenceNumber) => number;
|
31
|
+
/**
|
32
|
+
* Convert an event id to a string representation.
|
33
|
+
*/
|
34
|
+
export declare const toString: (seqNum: EventSequenceNumber) => string;
|
35
|
+
/**
|
36
|
+
* Convert a string representation of an event id to an event id.
|
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=EventNumber.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventNumber.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.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;IAAE,MAAM,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAA;AAO1G;;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 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 @@
|
|
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 @@
|
|
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"}
|