@livestore/common 0.4.0-dev.18 → 0.4.0-dev.19
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/ClientSessionLeaderThreadProxy.d.ts +10 -10
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/adapter-types.d.ts +5 -5
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +28 -23
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +2 -2
- 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 +33 -28
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +8 -8
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/errors.d.ts +6 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -7
- package/dist/errors.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +2 -2
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +28 -28
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +13 -13
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +12 -11
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +2 -2
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +3 -3
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +2 -2
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +10 -8
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +1 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +2 -2
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +5 -5
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +15 -15
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/make-client-session.d.ts +2 -2
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/materializer-helper.d.ts +5 -5
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +2 -2
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +6 -6
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +147 -0
- package/dist/schema/EventDef/define.d.ts.map +1 -0
- package/dist/schema/EventDef/define.js +139 -0
- package/dist/schema/EventDef/define.js.map +1 -0
- package/dist/schema/EventDef/event-def.d.ts +106 -0
- package/dist/schema/EventDef/event-def.d.ts.map +1 -0
- package/dist/schema/EventDef/event-def.js +2 -0
- package/dist/schema/EventDef/event-def.js.map +1 -0
- package/dist/schema/EventDef/facts.d.ts +118 -0
- package/dist/schema/EventDef/facts.d.ts.map +1 -0
- package/dist/schema/EventDef/facts.js +53 -0
- package/dist/schema/EventDef/facts.js.map +1 -0
- package/dist/schema/EventDef/materializer.d.ts +155 -0
- package/dist/schema/EventDef/materializer.d.ts.map +1 -0
- package/dist/schema/EventDef/materializer.js +83 -0
- package/dist/schema/EventDef/materializer.js.map +1 -0
- package/dist/schema/EventDef/mod.d.ts +5 -0
- package/dist/schema/EventDef/mod.d.ts.map +1 -0
- package/dist/schema/EventDef/mod.js +5 -0
- package/dist/schema/EventDef/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
- package/dist/schema/{EventSequenceNumber.js → EventSequenceNumber/client.js} +86 -39
- package/dist/schema/EventSequenceNumber/client.js.map +1 -0
- package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/global.js +14 -0
- package/dist/schema/EventSequenceNumber/global.js.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.js +37 -0
- package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +41 -41
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +84 -101
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/{LiveStoreEvent.js → LiveStoreEvent/client.js} +69 -52
- package/dist/schema/LiveStoreEvent/client.js.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
- package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/global.js +31 -0
- package/dist/schema/LiveStoreEvent/global.js.map +1 -0
- package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/input.js +26 -0
- package/dist/schema/LiveStoreEvent/input.js.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.js +5 -0
- package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +3 -3
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +3 -3
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +1 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +2 -2
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +13 -0
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +2 -1
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +1 -1
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +12 -8
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.js +18 -11
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +119 -90
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +5 -5
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js +3 -3
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +3 -3
- package/dist/schema/unknown-events.d.ts.map +1 -1
- package/dist/schema-management/migrations.d.ts +2 -2
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +3 -3
- package/dist/schema-management/validate-schema.d.ts.map +1 -1
- package/dist/schema-management/validate-schema.js +2 -2
- package/dist/schema-management/validate-schema.js.map +1 -1
- package/dist/sqlite-types.d.ts +3 -3
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +5 -5
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +12 -12
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +9 -4
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +6 -6
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +6 -6
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +4 -4
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/next/compact-events.js +2 -2
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +5 -5
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +5 -5
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +5 -5
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +8 -8
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +5 -5
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +5 -5
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +9 -9
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/sync-backend-kv.d.ts +3 -3
- package/dist/sync/sync-backend-kv.d.ts.map +1 -1
- package/dist/sync/sync-backend-kv.js +3 -3
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +9 -9
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +55 -42
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +42 -42
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +40 -40
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +1 -1
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +2 -2
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/testing/event-factory.d.ts +3 -3
- package/dist/testing/event-factory.d.ts.map +1 -1
- package/dist/testing/event-factory.js +5 -7
- package/dist/testing/event-factory.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/ClientSessionLeaderThreadProxy.ts +10 -10
- package/src/adapter-types.ts +5 -5
- package/src/devtools/devtools-messages-client-session.ts +2 -2
- package/src/devtools/devtools-messages-leader.ts +8 -8
- package/src/errors.ts +11 -13
- package/src/leader-thread/LeaderSyncProcessor.ts +54 -56
- package/src/leader-thread/eventlog.ts +21 -26
- package/src/leader-thread/leader-worker-devtools.ts +3 -3
- package/src/leader-thread/make-leader-thread-layer.ts +12 -10
- package/src/leader-thread/materialize-event.ts +3 -3
- package/src/leader-thread/recreate-db.ts +6 -6
- package/src/leader-thread/shutdown-channel.ts +2 -2
- package/src/leader-thread/types.ts +15 -15
- package/src/make-client-session.ts +2 -2
- package/src/materializer-helper.ts +5 -5
- package/src/rematerialize-from-eventlog.ts +6 -6
- package/src/schema/EventDef/define.ts +201 -0
- package/src/schema/EventDef/event-def.ts +120 -0
- package/src/schema/EventDef/facts.ts +135 -0
- package/src/schema/EventDef/materializer.ts +172 -0
- package/src/schema/EventDef/mod.ts +4 -0
- package/src/schema/EventSequenceNumber/client.ts +257 -0
- package/src/schema/EventSequenceNumber/global.ts +19 -0
- package/src/schema/EventSequenceNumber/mod.ts +37 -0
- package/src/schema/EventSequenceNumber.test.ts +68 -50
- package/src/schema/LiveStoreEvent/client.ts +221 -0
- package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
- package/src/schema/LiveStoreEvent/global.ts +45 -0
- package/src/schema/LiveStoreEvent/input.ts +63 -0
- package/src/schema/LiveStoreEvent/mod.ts +4 -0
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +3 -3
- package/src/schema/schema.ts +1 -1
- package/src/schema/state/sqlite/client-document-def.test.ts +2 -2
- package/src/schema/state/sqlite/client-document-def.ts +3 -3
- package/src/schema/state/sqlite/column-def.test.ts +2 -1
- package/src/schema/state/sqlite/column-def.ts +17 -0
- package/src/schema/state/sqlite/mod.ts +2 -2
- package/src/schema/state/sqlite/query-builder/api.ts +12 -8
- package/src/schema/state/sqlite/query-builder/astToSql.ts +20 -11
- package/src/schema/state/sqlite/query-builder/impl.test.ts +122 -90
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +5 -5
- package/src/schema/state/sqlite/system-tables/state-tables.ts +3 -3
- package/src/schema/unknown-events.ts +3 -3
- package/src/schema-management/migrations.ts +2 -2
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/sqlite-types.ts +3 -3
- package/src/sync/ClientSessionSyncProcessor.ts +17 -17
- package/src/sync/errors.ts +6 -6
- package/src/sync/mock-sync-backend.ts +16 -16
- package/src/sync/next/compact-events.ts +2 -2
- package/src/sync/next/facts.ts +6 -6
- package/src/sync/next/history-dag-common.ts +8 -8
- package/src/sync/next/history-dag.ts +14 -10
- package/src/sync/next/rebase-events.ts +11 -11
- package/src/sync/next/test/event-fixtures.ts +11 -11
- package/src/sync/sync-backend-kv.ts +3 -3
- package/src/sync/sync-backend.ts +9 -9
- package/src/sync/syncstate.test.ts +46 -46
- package/src/sync/syncstate.ts +59 -55
- package/src/sync/validate-push-payload.ts +4 -4
- package/src/testing/event-factory.ts +10 -12
- package/src/version.ts +1 -1
- package/dist/schema/EventDef.d.ts +0 -126
- package/dist/schema/EventDef.d.ts.map +0 -1
- package/dist/schema/EventDef.js +0 -46
- package/dist/schema/EventDef.js.map +0 -1
- package/dist/schema/EventSequenceNumber.d.ts +0 -89
- package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
- package/dist/schema/EventSequenceNumber.js.map +0 -1
- package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
- package/dist/schema/LiveStoreEvent.js.map +0 -1
- package/src/schema/EventDef.ts +0 -222
- package/src/schema/EventSequenceNumber.ts +0 -208
- package/src/schema/LiveStoreEvent.ts +0 -286
|
@@ -3,56 +3,56 @@ import { expect } from 'vitest';
|
|
|
3
3
|
import { EventSequenceNumber } from "./mod.js";
|
|
4
4
|
Vitest.describe('EventSequenceNumber', () => {
|
|
5
5
|
Vitest.test('nextPair (no rebase)', () => {
|
|
6
|
-
const e_0_0 = EventSequenceNumber.make({ global: 0, client: 0 });
|
|
7
|
-
expect(EventSequenceNumber.nextPair({ seqNum: e_0_0, isClient: false }).seqNum).toStrictEqual({
|
|
6
|
+
const e_0_0 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 0 });
|
|
7
|
+
expect(EventSequenceNumber.Client.nextPair({ seqNum: e_0_0, isClient: false }).seqNum).toStrictEqual({
|
|
8
8
|
global: 1,
|
|
9
9
|
client: 0,
|
|
10
10
|
rebaseGeneration: 0,
|
|
11
11
|
});
|
|
12
|
-
expect(EventSequenceNumber.nextPair({ seqNum: e_0_0, isClient: true }).seqNum).toStrictEqual({
|
|
12
|
+
expect(EventSequenceNumber.Client.nextPair({ seqNum: e_0_0, isClient: true }).seqNum).toStrictEqual({
|
|
13
13
|
global: 0,
|
|
14
14
|
client: 1,
|
|
15
15
|
rebaseGeneration: 0,
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
18
|
Vitest.test('nextPair (rebase)', () => {
|
|
19
|
-
const e_0_0 = EventSequenceNumber.make({ global: 0, client: 0 });
|
|
20
|
-
expect(EventSequenceNumber.nextPair({ seqNum: e_0_0, isClient: false, rebaseGeneration: 1 }).seqNum).toStrictEqual({
|
|
19
|
+
const e_0_0 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 0 });
|
|
20
|
+
expect(EventSequenceNumber.Client.nextPair({ seqNum: e_0_0, isClient: false, rebaseGeneration: 1 }).seqNum).toStrictEqual({
|
|
21
21
|
global: 1,
|
|
22
22
|
client: 0,
|
|
23
23
|
rebaseGeneration: 1,
|
|
24
24
|
});
|
|
25
|
-
expect(EventSequenceNumber.nextPair({ seqNum: e_0_0, isClient: true, rebaseGeneration: 1 }).seqNum).toStrictEqual({
|
|
25
|
+
expect(EventSequenceNumber.Client.nextPair({ seqNum: e_0_0, isClient: true, rebaseGeneration: 1 }).seqNum).toStrictEqual({
|
|
26
26
|
global: 0,
|
|
27
27
|
client: 1,
|
|
28
28
|
rebaseGeneration: 1,
|
|
29
29
|
});
|
|
30
|
-
const e_0_0_g1 = EventSequenceNumber.make({ global: 0, client: 0, rebaseGeneration: 2 });
|
|
31
|
-
expect(EventSequenceNumber.nextPair({ seqNum: e_0_0_g1, isClient: false }).seqNum).toStrictEqual({
|
|
30
|
+
const e_0_0_g1 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 0, rebaseGeneration: 2 });
|
|
31
|
+
expect(EventSequenceNumber.Client.nextPair({ seqNum: e_0_0_g1, isClient: false }).seqNum).toStrictEqual({
|
|
32
32
|
global: 1,
|
|
33
33
|
client: 0,
|
|
34
34
|
rebaseGeneration: 2,
|
|
35
35
|
});
|
|
36
36
|
});
|
|
37
37
|
Vitest.test('toString', () => {
|
|
38
|
-
expect(EventSequenceNumber.toString(EventSequenceNumber.make({ global: 0, client: 0 }))).toBe('e0');
|
|
39
|
-
expect(EventSequenceNumber.toString(EventSequenceNumber.make({ global: 0, client: 0, rebaseGeneration: 1 }))).toBe('e0r1');
|
|
40
|
-
expect(EventSequenceNumber.toString(EventSequenceNumber.make({ global: 0, client: 1 }))).toBe('e0.1');
|
|
41
|
-
expect(EventSequenceNumber.toString(EventSequenceNumber.make({ global: 0, client: 1, rebaseGeneration: 1 }))).toBe('e0.1r1');
|
|
42
|
-
expect(EventSequenceNumber.toString(EventSequenceNumber.make({ global: 5, client: 3, rebaseGeneration: 2 }))).toBe('e5.3r2');
|
|
38
|
+
expect(EventSequenceNumber.Client.toString(EventSequenceNumber.Client.Composite.make({ global: 0, client: 0 }))).toBe('e0');
|
|
39
|
+
expect(EventSequenceNumber.Client.toString(EventSequenceNumber.Client.Composite.make({ global: 0, client: 0, rebaseGeneration: 1 }))).toBe('e0r1');
|
|
40
|
+
expect(EventSequenceNumber.Client.toString(EventSequenceNumber.Client.Composite.make({ global: 0, client: 1 }))).toBe('e0.1');
|
|
41
|
+
expect(EventSequenceNumber.Client.toString(EventSequenceNumber.Client.Composite.make({ global: 0, client: 1, rebaseGeneration: 1 }))).toBe('e0.1r1');
|
|
42
|
+
expect(EventSequenceNumber.Client.toString(EventSequenceNumber.Client.Composite.make({ global: 5, client: 3, rebaseGeneration: 2 }))).toBe('e5.3r2');
|
|
43
43
|
});
|
|
44
44
|
Vitest.test('fromString', () => {
|
|
45
45
|
// Basic cases
|
|
46
|
-
expect(EventSequenceNumber.fromString('e0')).toStrictEqual(EventSequenceNumber.make({ global: 0, client: 0 }));
|
|
47
|
-
expect(EventSequenceNumber.fromString('e0r1')).toStrictEqual(EventSequenceNumber.make({ global: 0, client: 0, rebaseGeneration: 1 }));
|
|
48
|
-
expect(EventSequenceNumber.fromString('e0.1')).toStrictEqual(EventSequenceNumber.make({ global: 0, client: 1 }));
|
|
49
|
-
expect(EventSequenceNumber.fromString('e0.1r1')).toStrictEqual(EventSequenceNumber.make({ global: 0, client: 1, rebaseGeneration: 1 }));
|
|
50
|
-
expect(EventSequenceNumber.fromString('e5.3r2')).toStrictEqual(EventSequenceNumber.make({ global: 5, client: 3, rebaseGeneration: 2 }));
|
|
46
|
+
expect(EventSequenceNumber.Client.fromString('e0')).toStrictEqual(EventSequenceNumber.Client.Composite.make({ global: 0, client: 0 }));
|
|
47
|
+
expect(EventSequenceNumber.Client.fromString('e0r1')).toStrictEqual(EventSequenceNumber.Client.Composite.make({ global: 0, client: 0, rebaseGeneration: 1 }));
|
|
48
|
+
expect(EventSequenceNumber.Client.fromString('e0.1')).toStrictEqual(EventSequenceNumber.Client.Composite.make({ global: 0, client: 1 }));
|
|
49
|
+
expect(EventSequenceNumber.Client.fromString('e0.1r1')).toStrictEqual(EventSequenceNumber.Client.Composite.make({ global: 0, client: 1, rebaseGeneration: 1 }));
|
|
50
|
+
expect(EventSequenceNumber.Client.fromString('e5.3r2')).toStrictEqual(EventSequenceNumber.Client.Composite.make({ global: 5, client: 3, rebaseGeneration: 2 }));
|
|
51
51
|
// Error cases
|
|
52
|
-
expect(() => EventSequenceNumber.fromString('0')).toThrow('Invalid event sequence number string: must start with "e"');
|
|
53
|
-
expect(() => EventSequenceNumber.fromString('eabc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
54
|
-
expect(() => EventSequenceNumber.fromString('e0.abc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
55
|
-
expect(() => EventSequenceNumber.fromString('e0rabc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
52
|
+
expect(() => EventSequenceNumber.Client.fromString('0')).toThrow('Invalid event sequence number string: must start with "e"');
|
|
53
|
+
expect(() => EventSequenceNumber.Client.fromString('eabc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
54
|
+
expect(() => EventSequenceNumber.Client.fromString('e0.abc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
55
|
+
expect(() => EventSequenceNumber.Client.fromString('e0rabc')).toThrow('Invalid event sequence number string: invalid number format');
|
|
56
56
|
});
|
|
57
57
|
Vitest.test('toString/fromString roundtrip', () => {
|
|
58
58
|
const testCases = [
|
|
@@ -64,33 +64,33 @@ Vitest.describe('EventSequenceNumber', () => {
|
|
|
64
64
|
{ global: 100, client: 50, rebaseGeneration: 10 },
|
|
65
65
|
];
|
|
66
66
|
for (const testCase of testCases) {
|
|
67
|
-
const original = EventSequenceNumber.make(testCase);
|
|
68
|
-
const str = EventSequenceNumber.toString(original);
|
|
69
|
-
const parsed = EventSequenceNumber.fromString(str);
|
|
67
|
+
const original = EventSequenceNumber.Client.Composite.make(testCase);
|
|
68
|
+
const str = EventSequenceNumber.Client.toString(original);
|
|
69
|
+
const parsed = EventSequenceNumber.Client.fromString(str);
|
|
70
70
|
expect(parsed).toStrictEqual(original);
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
Vitest.test('compare', () => {
|
|
74
|
-
const e_0_0_r0 = EventSequenceNumber.make({ global: 0, client: 0, rebaseGeneration: 0 });
|
|
75
|
-
const e_0_0_r1 = EventSequenceNumber.make({ global: 0, client: 0, rebaseGeneration: 1 });
|
|
76
|
-
const e_0_1_r0 = EventSequenceNumber.make({ global: 0, client: 1, rebaseGeneration: 0 });
|
|
77
|
-
const e_0_1_r1 = EventSequenceNumber.make({ global: 0, client: 1, rebaseGeneration: 1 });
|
|
78
|
-
const e_1_0_r0 = EventSequenceNumber.make({ global: 1, client: 0, rebaseGeneration: 0 });
|
|
79
|
-
const e_1_1_r0 = EventSequenceNumber.make({ global: 1, client: 1, rebaseGeneration: 0 });
|
|
74
|
+
const e_0_0_r0 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 0, rebaseGeneration: 0 });
|
|
75
|
+
const e_0_0_r1 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 0, rebaseGeneration: 1 });
|
|
76
|
+
const e_0_1_r0 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 1, rebaseGeneration: 0 });
|
|
77
|
+
const e_0_1_r1 = EventSequenceNumber.Client.Composite.make({ global: 0, client: 1, rebaseGeneration: 1 });
|
|
78
|
+
const e_1_0_r0 = EventSequenceNumber.Client.Composite.make({ global: 1, client: 0, rebaseGeneration: 0 });
|
|
79
|
+
const e_1_1_r0 = EventSequenceNumber.Client.Composite.make({ global: 1, client: 1, rebaseGeneration: 0 });
|
|
80
80
|
// Global comparison (strongest level)
|
|
81
|
-
expect(EventSequenceNumber.compare(e_0_0_r0, e_1_0_r0)).toBeLessThan(0);
|
|
82
|
-
expect(EventSequenceNumber.compare(e_1_0_r0, e_0_0_r0)).toBeGreaterThan(0);
|
|
83
|
-
expect(EventSequenceNumber.compare(e_0_1_r1, e_1_0_r0)).toBeLessThan(0); // global overrides client and rebase
|
|
81
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r0, e_1_0_r0)).toBeLessThan(0);
|
|
82
|
+
expect(EventSequenceNumber.Client.compare(e_1_0_r0, e_0_0_r0)).toBeGreaterThan(0);
|
|
83
|
+
expect(EventSequenceNumber.Client.compare(e_0_1_r1, e_1_0_r0)).toBeLessThan(0); // global overrides client and rebase
|
|
84
84
|
// Client comparison (second level)
|
|
85
|
-
expect(EventSequenceNumber.compare(e_0_0_r0, e_0_1_r0)).toBeLessThan(0);
|
|
86
|
-
expect(EventSequenceNumber.compare(e_0_1_r0, e_0_0_r0)).toBeGreaterThan(0);
|
|
87
|
-
expect(EventSequenceNumber.compare(e_0_0_r1, e_0_1_r0)).toBeLessThan(0); // client overrides rebase
|
|
85
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r0, e_0_1_r0)).toBeLessThan(0);
|
|
86
|
+
expect(EventSequenceNumber.Client.compare(e_0_1_r0, e_0_0_r0)).toBeGreaterThan(0);
|
|
87
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r1, e_0_1_r0)).toBeLessThan(0); // client overrides rebase
|
|
88
88
|
// Rebase generation comparison (weakest level)
|
|
89
|
-
expect(EventSequenceNumber.compare(e_0_0_r0, e_0_0_r1)).toBeLessThan(0);
|
|
90
|
-
expect(EventSequenceNumber.compare(e_0_0_r1, e_0_0_r0)).toBeGreaterThan(0);
|
|
89
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r0, e_0_0_r1)).toBeLessThan(0);
|
|
90
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r1, e_0_0_r0)).toBeGreaterThan(0);
|
|
91
91
|
// Equal comparison
|
|
92
|
-
expect(EventSequenceNumber.compare(e_0_0_r0, e_0_0_r0)).toBe(0);
|
|
93
|
-
expect(EventSequenceNumber.compare(e_1_1_r0, e_1_1_r0)).toBe(0);
|
|
92
|
+
expect(EventSequenceNumber.Client.compare(e_0_0_r0, e_0_0_r0)).toBe(0);
|
|
93
|
+
expect(EventSequenceNumber.Client.compare(e_1_1_r0, e_1_1_r0)).toBe(0);
|
|
94
94
|
});
|
|
95
95
|
});
|
|
96
96
|
//# sourceMappingURL=EventSequenceNumber.test.js.map
|
|
@@ -1 +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,sBAAsB,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"EventSequenceNumber.test.js","sourceRoot":"","sources":["../../src/schema/EventSequenceNumber.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,123 +1,79 @@
|
|
|
1
1
|
import { Option, Schema } from '@livestore/utils/effect';
|
|
2
|
-
import type { EventDef
|
|
3
|
-
import * as EventSequenceNumber from '
|
|
4
|
-
import type { LiveStoreSchema } from '
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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>;
|
|
32
|
-
export declare const AnyDecoded: Schema.Struct<{
|
|
2
|
+
import type { EventDef } from '../EventDef/mod.ts';
|
|
3
|
+
import * as EventSequenceNumber from '../EventSequenceNumber/mod.ts';
|
|
4
|
+
import type { LiveStoreSchema } from '../schema.ts';
|
|
5
|
+
import type * as ForEventDef from './for-event-def.ts';
|
|
6
|
+
import type * as Global from './global.ts';
|
|
7
|
+
/** Effect Schema for client events with decoded args. */
|
|
8
|
+
export declare const Decoded: Schema.Struct<{
|
|
33
9
|
name: typeof Schema.String;
|
|
34
10
|
args: typeof Schema.Any;
|
|
35
11
|
seqNum: Schema.Struct<{
|
|
36
12
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
37
13
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
38
14
|
rebaseGeneration: typeof Schema.Int;
|
|
39
|
-
}
|
|
15
|
+
}> & {
|
|
16
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
17
|
+
};
|
|
40
18
|
parentSeqNum: Schema.Struct<{
|
|
41
19
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
42
20
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
43
21
|
rebaseGeneration: typeof Schema.Int;
|
|
44
|
-
}
|
|
22
|
+
}> & {
|
|
23
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
24
|
+
};
|
|
45
25
|
clientId: typeof Schema.String;
|
|
46
26
|
sessionId: typeof Schema.String;
|
|
47
27
|
}>;
|
|
48
|
-
|
|
49
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Effect Schema for client events with encoded args.
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // Confirmed event (client=0)
|
|
33
|
+
* const event: LiveStoreEvent.Client.Encoded = {
|
|
34
|
+
* name: 'todoCreated-v1',
|
|
35
|
+
* args: { id: 'abc', text: 'Buy milk' },
|
|
36
|
+
* seqNum: { global: 5, client: 0, rebaseGeneration: 0 },
|
|
37
|
+
* parentSeqNum: { global: 4, client: 0, rebaseGeneration: 0 },
|
|
38
|
+
* clientId: 'client-xyz',
|
|
39
|
+
* sessionId: 'session-123'
|
|
40
|
+
* }
|
|
41
|
+
*
|
|
42
|
+
* // Pending local event (client=1, not yet synced)
|
|
43
|
+
* const pending: LiveStoreEvent.Client.Encoded = {
|
|
44
|
+
* ...event,
|
|
45
|
+
* seqNum: { global: 5, client: 1, rebaseGeneration: 0 }, // e5.1
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare const Encoded: Schema.Struct<{
|
|
50
50
|
name: typeof Schema.String;
|
|
51
51
|
args: typeof Schema.Any;
|
|
52
52
|
seqNum: Schema.Struct<{
|
|
53
53
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
54
54
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
55
55
|
rebaseGeneration: typeof Schema.Int;
|
|
56
|
-
}
|
|
56
|
+
}> & {
|
|
57
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
58
|
+
};
|
|
57
59
|
parentSeqNum: Schema.Struct<{
|
|
58
60
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
59
61
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
60
62
|
rebaseGeneration: typeof Schema.Int;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}>;
|
|
65
|
-
export declare const AnyEncodedGlobal: Schema.Struct<{
|
|
66
|
-
name: typeof Schema.String;
|
|
67
|
-
args: typeof Schema.Any;
|
|
68
|
-
seqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
69
|
-
parentSeqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
63
|
+
}> & {
|
|
64
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
65
|
+
};
|
|
70
66
|
clientId: typeof Schema.String;
|
|
71
67
|
sessionId: typeof Schema.String;
|
|
72
68
|
}>;
|
|
73
|
-
|
|
74
|
-
export type
|
|
75
|
-
|
|
76
|
-
export
|
|
77
|
-
|
|
78
|
-
args: typeof Schema.Any;
|
|
79
|
-
}>;
|
|
80
|
-
export type PartialForSchema<TSchema extends LiveStoreSchema> = {
|
|
81
|
-
[K in keyof TSchema['_EventDefMapType']]: ForEventDef.PartialDecoded<TSchema['_EventDefMapType'][K]>;
|
|
82
|
-
}[keyof TSchema['_EventDefMapType']];
|
|
69
|
+
/** Event with composite sequence numbers and decoded (native TypeScript) args. */
|
|
70
|
+
export type Decoded = ForEventDef.Decoded<EventDef.Any>;
|
|
71
|
+
/** Event with composite sequence numbers and encoded (serialized) args. */
|
|
72
|
+
export type Encoded = ForEventDef.Encoded<EventDef.Any>;
|
|
73
|
+
/** Union of all client event types for a given schema (type-safe event discrimination). */
|
|
83
74
|
export type ForSchema<TSchema extends LiveStoreSchema> = {
|
|
84
75
|
[K in keyof TSchema['_EventDefMapType']]: ForEventDef.Decoded<TSchema['_EventDefMapType'][K]>;
|
|
85
76
|
}[keyof TSchema['_EventDefMapType']];
|
|
86
|
-
export declare const isPartialEventDef: (event: AnyDecoded | PartialAnyDecoded) => event is PartialAnyDecoded;
|
|
87
|
-
export type ForEventDefRecord<TEventDefRecord extends EventDefRecord> = Schema.Schema<{
|
|
88
|
-
[K in keyof TEventDefRecord]: {
|
|
89
|
-
name: K;
|
|
90
|
-
args: Schema.Schema.Type<TEventDefRecord[K]['schema']>;
|
|
91
|
-
seqNum: EventSequenceNumber.EventSequenceNumber;
|
|
92
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber;
|
|
93
|
-
clientId: string;
|
|
94
|
-
sessionId: string;
|
|
95
|
-
};
|
|
96
|
-
}[keyof TEventDefRecord], {
|
|
97
|
-
[K in keyof TEventDefRecord]: {
|
|
98
|
-
name: K;
|
|
99
|
-
args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>;
|
|
100
|
-
seqNum: EventSequenceNumber.EventSequenceNumber;
|
|
101
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber;
|
|
102
|
-
clientId: string;
|
|
103
|
-
sessionId: string;
|
|
104
|
-
};
|
|
105
|
-
}[keyof TEventDefRecord]>;
|
|
106
|
-
export type EventDefPartialSchema<TEventDefRecord extends EventDefRecord> = Schema.Schema<{
|
|
107
|
-
[K in keyof TEventDefRecord]: {
|
|
108
|
-
name: K;
|
|
109
|
-
args: Schema.Schema.Type<TEventDefRecord[K]['schema']>;
|
|
110
|
-
};
|
|
111
|
-
}[keyof TEventDefRecord], {
|
|
112
|
-
[K in keyof TEventDefRecord]: {
|
|
113
|
-
name: K;
|
|
114
|
-
args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>;
|
|
115
|
-
};
|
|
116
|
-
}[keyof TEventDefRecord]>;
|
|
117
|
-
export declare const makeEventDefSchema: <TSchema extends LiveStoreSchema>(schema: TSchema) => ForEventDefRecord<TSchema["_EventDefMapType"]>;
|
|
118
|
-
export declare const makeEventDefPartialSchema: <TSchema extends LiveStoreSchema>(schema: TSchema) => EventDefPartialSchema<TSchema["_EventDefMapType"]>;
|
|
119
|
-
export declare const makeEventDefSchemaMemo: <TSchema extends LiveStoreSchema>(schema: TSchema) => ForEventDefRecord<TSchema["_EventDefMapType"]>;
|
|
120
|
-
export declare const encodedFromGlobal: (event: AnyEncodedGlobal) => AnyEncoded;
|
|
121
77
|
declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
|
|
122
78
|
name: typeof Schema.String;
|
|
123
79
|
args: typeof Schema.Any;
|
|
@@ -125,12 +81,16 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
|
|
|
125
81
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
126
82
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
127
83
|
rebaseGeneration: typeof Schema.Int;
|
|
128
|
-
}
|
|
84
|
+
}> & {
|
|
85
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
86
|
+
};
|
|
129
87
|
parentSeqNum: Schema.Struct<{
|
|
130
88
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
131
89
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
132
90
|
rebaseGeneration: typeof Schema.Int;
|
|
133
|
-
}
|
|
91
|
+
}> & {
|
|
92
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
93
|
+
};
|
|
134
94
|
clientId: typeof Schema.String;
|
|
135
95
|
sessionId: typeof Schema.String;
|
|
136
96
|
meta: Schema.PropertySignature<":", {
|
|
@@ -182,12 +142,16 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
|
|
|
182
142
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
183
143
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
184
144
|
rebaseGeneration: typeof Schema.Int;
|
|
185
|
-
}
|
|
145
|
+
}> & {
|
|
146
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
147
|
+
};
|
|
186
148
|
parentSeqNum: Schema.Struct<{
|
|
187
149
|
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
188
150
|
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
189
151
|
rebaseGeneration: typeof Schema.Int;
|
|
190
|
-
}
|
|
152
|
+
}> & {
|
|
153
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
154
|
+
};
|
|
191
155
|
clientId: typeof Schema.String;
|
|
192
156
|
sessionId: typeof Schema.String;
|
|
193
157
|
meta: Schema.PropertySignature<":", {
|
|
@@ -268,7 +232,12 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
|
|
|
268
232
|
materializerHashSession: Option.Option<number>;
|
|
269
233
|
};
|
|
270
234
|
}, {}, {}>;
|
|
271
|
-
/**
|
|
235
|
+
/**
|
|
236
|
+
* Internal event representation with metadata for sync processing.
|
|
237
|
+
* Includes changeset data and materializer hashes for conflict detection and rebasing.
|
|
238
|
+
*
|
|
239
|
+
* Note: This class is exported for internal use. The preferred access is via `LiveStoreEvent.Client.EncodedWithMeta`.
|
|
240
|
+
*/
|
|
272
241
|
export declare class EncodedWithMeta extends EncodedWithMeta_base {
|
|
273
242
|
toJSON: () => any;
|
|
274
243
|
/**
|
|
@@ -289,18 +258,32 @@ export declare class EncodedWithMeta extends EncodedWithMeta_base {
|
|
|
289
258
|
* Client num is omitted for global events
|
|
290
259
|
*/
|
|
291
260
|
rebase: ({ parentSeqNum, isClient, rebaseGeneration, }: {
|
|
292
|
-
parentSeqNum: EventSequenceNumber.
|
|
261
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
293
262
|
isClient: boolean;
|
|
294
263
|
rebaseGeneration: number;
|
|
295
264
|
}) => EncodedWithMeta;
|
|
296
|
-
static fromGlobal: (event:
|
|
265
|
+
static fromGlobal: (event: Global.Encoded, meta: {
|
|
297
266
|
syncMetadata: Option.Option<Schema.JsonValue>;
|
|
298
267
|
materializerHashLeader: Option.Option<number>;
|
|
299
268
|
materializerHashSession: Option.Option<number>;
|
|
300
269
|
}) => EncodedWithMeta;
|
|
301
|
-
toGlobal: () =>
|
|
270
|
+
toGlobal: () => Global.Encoded;
|
|
302
271
|
}
|
|
303
|
-
/**
|
|
304
|
-
|
|
272
|
+
/**
|
|
273
|
+
* Structural equality check for client events. Compares seqNum (global + client),
|
|
274
|
+
* name, clientId, sessionId, and args. The `meta` field is ignored.
|
|
275
|
+
*/
|
|
276
|
+
export declare const isEqualEncoded: (a: Encoded, b: Encoded) => boolean;
|
|
277
|
+
/**
|
|
278
|
+
* Creates an Effect Schema union for all event types in a schema (with composite sequence numbers).
|
|
279
|
+
* @example
|
|
280
|
+
* ```ts
|
|
281
|
+
* const eventSchema = LiveStoreEvent.Client.makeSchema(schema)
|
|
282
|
+
* const event = Schema.decodeUnknownSync(eventSchema)(rawEvent)
|
|
283
|
+
* ```
|
|
284
|
+
*/
|
|
285
|
+
export declare const makeSchema: <TSchema extends LiveStoreSchema>(schema: TSchema) => ForEventDef.ForRecord<TSchema["_EventDefMapType"]>;
|
|
286
|
+
/** Memoized `makeSchema` - caches the generated schema by reference. */
|
|
287
|
+
export declare const makeSchemaMemo: <TSchema extends LiveStoreSchema>(schema: TSchema) => ForEventDef.ForRecord<TSchema["_EventDefMapType"]>;
|
|
305
288
|
export {};
|
|
306
|
-
//# sourceMappingURL=
|
|
289
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAE1C,yDAAyD;AACzD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;EAOsC,CAAA;AAE1D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;EAOsC,CAAA;AAE1D,kFAAkF;AAClF,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAEvD,2EAA2E;AAC3E,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAEvD,2FAA2F;AAC3F,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,eAAe,IAAI;KACtD,CAAC,IAAI,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9F,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEpC;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,oBAuCnC;IACA,MAAM,QAAO,GAAG,CASf;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,GAAI,+CAIP;QACD,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QAClD,QAAQ,EAAE,OAAO,CAAA;QACjB,gBAAgB,EAAE,MAAM,CAAA;KACzB,qBAIG;IAEJ,MAAM,CAAC,UAAU,GACf,OAAO,MAAM,CAAC,OAAO,EACrB,MAAM;QACJ,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7C,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7C,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC/C,qBAoBC;IAEJ,QAAQ,QAAO,MAAM,CAAC,OAAO,CAI3B;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,YAMF,CAAA;AAEnD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,eAAe,EACxD,QAAQ,OAAO,KACd,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAYM,CAAA;AAE1D,wEAAwE;AACxE,eAAO,MAAM,cAAc,GAjBA,OAAO,SAAS,eAAe,UAChD,OAAO,KACd,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAeE,CAAA"}
|
|
@@ -1,59 +1,55 @@
|
|
|
1
1
|
import { memoizeByRef } from '@livestore/utils';
|
|
2
2
|
import { Option, Schema } from '@livestore/utils/effect';
|
|
3
|
-
import * as EventSequenceNumber from "
|
|
4
|
-
|
|
3
|
+
import * as EventSequenceNumber from "../EventSequenceNumber/mod.js";
|
|
4
|
+
/** Effect Schema for client events with decoded args. */
|
|
5
|
+
export const Decoded = Schema.Struct({
|
|
5
6
|
name: Schema.String,
|
|
6
7
|
args: Schema.Any,
|
|
7
|
-
seqNum: EventSequenceNumber.
|
|
8
|
-
parentSeqNum: EventSequenceNumber.
|
|
8
|
+
seqNum: EventSequenceNumber.Client.Composite,
|
|
9
|
+
parentSeqNum: EventSequenceNumber.Client.Composite,
|
|
9
10
|
clientId: Schema.String,
|
|
10
11
|
sessionId: Schema.String,
|
|
11
|
-
}).annotations({ title: 'LiveStoreEvent.
|
|
12
|
-
|
|
12
|
+
}).annotations({ title: 'LiveStoreEvent.Client.Decoded' });
|
|
13
|
+
/**
|
|
14
|
+
* Effect Schema for client events with encoded args.
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* // Confirmed event (client=0)
|
|
18
|
+
* const event: LiveStoreEvent.Client.Encoded = {
|
|
19
|
+
* name: 'todoCreated-v1',
|
|
20
|
+
* args: { id: 'abc', text: 'Buy milk' },
|
|
21
|
+
* seqNum: { global: 5, client: 0, rebaseGeneration: 0 },
|
|
22
|
+
* parentSeqNum: { global: 4, client: 0, rebaseGeneration: 0 },
|
|
23
|
+
* clientId: 'client-xyz',
|
|
24
|
+
* sessionId: 'session-123'
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // Pending local event (client=1, not yet synced)
|
|
28
|
+
* const pending: LiveStoreEvent.Client.Encoded = {
|
|
29
|
+
* ...event,
|
|
30
|
+
* seqNum: { global: 5, client: 1, rebaseGeneration: 0 }, // e5.1
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export const Encoded = Schema.Struct({
|
|
13
35
|
name: Schema.String,
|
|
14
36
|
args: Schema.Any,
|
|
15
|
-
seqNum: EventSequenceNumber.
|
|
16
|
-
parentSeqNum: EventSequenceNumber.
|
|
37
|
+
seqNum: EventSequenceNumber.Client.Composite,
|
|
38
|
+
parentSeqNum: EventSequenceNumber.Client.Composite,
|
|
17
39
|
clientId: Schema.String,
|
|
18
40
|
sessionId: Schema.String,
|
|
19
|
-
}).annotations({ title: 'LiveStoreEvent.
|
|
20
|
-
|
|
41
|
+
}).annotations({ title: 'LiveStoreEvent.Client.Encoded' });
|
|
42
|
+
/**
|
|
43
|
+
* Internal event representation with metadata for sync processing.
|
|
44
|
+
* Includes changeset data and materializer hashes for conflict detection and rebasing.
|
|
45
|
+
*
|
|
46
|
+
* Note: This class is exported for internal use. The preferred access is via `LiveStoreEvent.Client.EncodedWithMeta`.
|
|
47
|
+
*/
|
|
48
|
+
export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.Client.EncodedWithMeta')({
|
|
21
49
|
name: Schema.String,
|
|
22
50
|
args: Schema.Any,
|
|
23
|
-
seqNum: EventSequenceNumber.
|
|
24
|
-
parentSeqNum: EventSequenceNumber.
|
|
25
|
-
clientId: Schema.String,
|
|
26
|
-
sessionId: Schema.String,
|
|
27
|
-
}).annotations({ title: 'LiveStoreEvent.AnyEncodedGlobal' });
|
|
28
|
-
export const PartialAnyEncoded = Schema.Struct({
|
|
29
|
-
name: Schema.String,
|
|
30
|
-
args: Schema.Any,
|
|
31
|
-
});
|
|
32
|
-
export const isPartialEventDef = (event) => 'num' in event === false && 'parentSeqNum' in event === false;
|
|
33
|
-
export const makeEventDefSchema = (schema) => Schema.Union(...[...schema.eventsDefsMap.values()].map((def) => Schema.Struct({
|
|
34
|
-
name: Schema.Literal(def.name),
|
|
35
|
-
args: def.schema,
|
|
36
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
37
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
38
|
-
clientId: Schema.String,
|
|
39
|
-
sessionId: Schema.String,
|
|
40
|
-
}))).annotations({ title: 'EventDef' });
|
|
41
|
-
export const makeEventDefPartialSchema = (schema) => Schema.Union(...[...schema.eventsDefsMap.values()].map((def) => Schema.Struct({
|
|
42
|
-
name: Schema.Literal(def.name),
|
|
43
|
-
args: def.schema,
|
|
44
|
-
}))).annotations({ title: 'EventDefPartial' });
|
|
45
|
-
export const makeEventDefSchemaMemo = memoizeByRef(makeEventDefSchema);
|
|
46
|
-
export const encodedFromGlobal = (event) => ({
|
|
47
|
-
...event,
|
|
48
|
-
seqNum: EventSequenceNumber.fromGlobal(event.seqNum),
|
|
49
|
-
parentSeqNum: EventSequenceNumber.fromGlobal(event.parentSeqNum),
|
|
50
|
-
});
|
|
51
|
-
/** Equivalent to AnyEncoded but with a meta field and some convenience methods */
|
|
52
|
-
export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.EncodedWithMeta')({
|
|
53
|
-
name: Schema.String,
|
|
54
|
-
args: Schema.Any,
|
|
55
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
56
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
51
|
+
seqNum: EventSequenceNumber.Client.Composite,
|
|
52
|
+
parentSeqNum: EventSequenceNumber.Client.Composite,
|
|
57
53
|
clientId: Schema.String,
|
|
58
54
|
sessionId: Schema.String,
|
|
59
55
|
// TODO get rid of `meta` again by cleaning up the usage implementations
|
|
@@ -86,7 +82,7 @@ export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.EncodedWithMet
|
|
|
86
82
|
// - More readable way to print the seqNum + parentSeqNum
|
|
87
83
|
// - not including `meta`, `clientId`, `sessionId`
|
|
88
84
|
return {
|
|
89
|
-
seqNum: `${EventSequenceNumber.toString(this.seqNum)} → ${EventSequenceNumber.toString(this.parentSeqNum)} (${this.clientId}, ${this.sessionId})`,
|
|
85
|
+
seqNum: `${EventSequenceNumber.Client.toString(this.seqNum)} → ${EventSequenceNumber.Client.toString(this.parentSeqNum)} (${this.clientId}, ${this.sessionId})`,
|
|
90
86
|
name: this.name,
|
|
91
87
|
args: this.args,
|
|
92
88
|
};
|
|
@@ -110,19 +106,19 @@ export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.EncodedWithMet
|
|
|
110
106
|
*/
|
|
111
107
|
rebase = ({ parentSeqNum, isClient, rebaseGeneration, }) => new EncodedWithMeta({
|
|
112
108
|
...this,
|
|
113
|
-
...EventSequenceNumber.nextPair({ seqNum: parentSeqNum, isClient, rebaseGeneration }),
|
|
109
|
+
...EventSequenceNumber.Client.nextPair({ seqNum: parentSeqNum, isClient, rebaseGeneration }),
|
|
114
110
|
});
|
|
115
111
|
static fromGlobal = (event, meta) => new EncodedWithMeta({
|
|
116
112
|
...event,
|
|
117
113
|
seqNum: {
|
|
118
114
|
global: event.seqNum,
|
|
119
|
-
client: EventSequenceNumber.
|
|
120
|
-
rebaseGeneration: EventSequenceNumber.
|
|
115
|
+
client: EventSequenceNumber.Client.DEFAULT,
|
|
116
|
+
rebaseGeneration: EventSequenceNumber.Client.REBASE_GENERATION_DEFAULT,
|
|
121
117
|
},
|
|
122
118
|
parentSeqNum: {
|
|
123
119
|
global: event.parentSeqNum,
|
|
124
|
-
client: EventSequenceNumber.
|
|
125
|
-
rebaseGeneration: EventSequenceNumber.
|
|
120
|
+
client: EventSequenceNumber.Client.DEFAULT,
|
|
121
|
+
rebaseGeneration: EventSequenceNumber.Client.REBASE_GENERATION_DEFAULT,
|
|
126
122
|
},
|
|
127
123
|
meta: {
|
|
128
124
|
sessionChangeset: { _tag: 'unset' },
|
|
@@ -137,11 +133,32 @@ export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.EncodedWithMet
|
|
|
137
133
|
parentSeqNum: this.parentSeqNum.global,
|
|
138
134
|
});
|
|
139
135
|
}
|
|
140
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Structural equality check for client events. Compares seqNum (global + client),
|
|
138
|
+
* name, clientId, sessionId, and args. The `meta` field is ignored.
|
|
139
|
+
*/
|
|
141
140
|
export const isEqualEncoded = (a, b) => a.seqNum.global === b.seqNum.global &&
|
|
142
141
|
a.seqNum.client === b.seqNum.client &&
|
|
143
142
|
a.name === b.name &&
|
|
144
143
|
a.clientId === b.clientId &&
|
|
145
144
|
a.sessionId === b.sessionId &&
|
|
146
145
|
JSON.stringify(a.args) === JSON.stringify(b.args); // TODO use schema equality here
|
|
147
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Creates an Effect Schema union for all event types in a schema (with composite sequence numbers).
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* const eventSchema = LiveStoreEvent.Client.makeSchema(schema)
|
|
151
|
+
* const event = Schema.decodeUnknownSync(eventSchema)(rawEvent)
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export const makeSchema = (schema) => Schema.Union(...[...schema.eventsDefsMap.values()].map((def) => Schema.Struct({
|
|
155
|
+
name: Schema.Literal(def.name),
|
|
156
|
+
args: def.schema,
|
|
157
|
+
seqNum: EventSequenceNumber.Client.Composite,
|
|
158
|
+
parentSeqNum: EventSequenceNumber.Client.Composite,
|
|
159
|
+
clientId: Schema.String,
|
|
160
|
+
sessionId: Schema.String,
|
|
161
|
+
}))).annotations({ title: 'LiveStoreEvent.Client' });
|
|
162
|
+
/** Memoized `makeSchema` - caches the generated schema by reference. */
|
|
163
|
+
export const makeSchemaMemo = memoizeByRef(makeSchema);
|
|
164
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/client.ts"],"names":[],"mappings":"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"}
|