@livestore/common 0.4.0-dev.2 → 0.4.0-dev.21
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 +20 -12
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
- package/dist/adapter-types.d.ts +14 -6
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +33 -6
- package/dist/debug-info.js.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 +7 -14
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +1 -6
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +38 -29
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +9 -8
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +7 -4
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +13 -2
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +10 -3
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +52 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +25 -6
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +41 -4
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +158 -75
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +21 -22
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +77 -20
- 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 +56 -45
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +6 -6
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +79 -27
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
- 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 +25 -11
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/mod.d.ts +1 -0
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +1 -0
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -3
- 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/stream-events.d.ts +56 -0
- package/dist/leader-thread/stream-events.d.ts.map +1 -0
- package/dist/leader-thread/stream-events.js +166 -0
- package/dist/leader-thread/stream-events.js.map +1 -0
- package/dist/leader-thread/types.d.ts +98 -20
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +13 -0
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +40 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +33 -0
- package/dist/logging.js.map +1 -0
- package/dist/make-client-session.d.ts +5 -3
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +5 -2
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +6 -6
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +20 -4
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +2 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +5 -0
- package/dist/otel.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 +29 -20
- 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/client.js +193 -0
- 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 +43 -43
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +89 -106
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/{LiveStoreEvent.js → LiveStoreEvent/client.js} +74 -58
- 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 +6 -4
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +5 -4
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +16 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +27 -2
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +36 -6
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +97 -6
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +16 -0
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +14 -6
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +69 -22
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +48 -10
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-spec.js +30 -12
- package/dist/schema/state/sqlite/column-spec.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.test.js +23 -14
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +23 -6
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +14 -8
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +5 -3
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +2 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +3 -3
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +3 -3
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +19 -11
- 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 +22 -15
- package/dist/schema/state/sqlite/query-builder/astToSql.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 +6 -3
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +252 -88
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
- package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +22 -12
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
- package/dist/schema/state/sqlite/{system-tables.d.ts → system-tables/eventlog-tables.d.ts} +63 -456
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +4 -4
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +2 -2
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +80 -0
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +47 -0
- package/dist/schema/unknown-events.d.ts.map +1 -0
- package/dist/schema/unknown-events.js +69 -0
- package/dist/schema/unknown-events.js.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
- package/dist/schema-management/migrations.d.ts +32 -2
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +37 -5
- 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/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +11 -1
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.js +2 -1
- package/dist/sql-queries/sql-query-builder.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 +11 -13
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +45 -42
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +66 -0
- package/dist/sync/errors.d.ts.map +1 -0
- package/dist/sync/errors.js +36 -0
- package/dist/sync/errors.js.map +1 -0
- package/dist/sync/index.d.ts +3 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +23 -0
- package/dist/sync/mock-sync-backend.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.js +114 -0
- package/dist/sync/mock-sync-backend.js.map +1 -0
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +6 -7
- 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 +1 -2
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +54 -15
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +198 -9
- 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 +10 -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 +7 -0
- package/dist/sync/sync-backend-kv.d.ts.map +1 -0
- package/dist/sync/sync-backend-kv.js +18 -0
- package/dist/sync/sync-backend-kv.js.map +1 -0
- package/dist/sync/sync-backend.d.ts +105 -0
- package/dist/sync/sync-backend.d.ts.map +1 -0
- package/dist/sync/sync-backend.js +61 -0
- package/dist/sync/sync-backend.js.map +1 -0
- package/dist/sync/sync.d.ts +9 -86
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +2 -27
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +57 -44
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +50 -45
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +83 -46
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +36 -0
- package/dist/sync/transport-chunking.d.ts.map +1 -0
- package/dist/sync/transport-chunking.js +56 -0
- package/dist/sync/transport-chunking.js.map +1 -0
- 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 +6 -6
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/testing/event-factory.d.ts +68 -0
- package/dist/testing/event-factory.d.ts.map +1 -0
- package/dist/testing/event-factory.js +78 -0
- package/dist/testing/event-factory.js.map +1 -0
- package/dist/testing/mod.d.ts +2 -0
- package/dist/testing/mod.d.ts.map +1 -0
- package/dist/testing/mod.js +2 -0
- package/dist/testing/mod.js.map +1 -0
- package/dist/version.d.ts +16 -6
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +16 -6
- package/dist/version.js.map +1 -1
- package/package.json +7 -8
- package/src/ClientSessionLeaderThreadProxy.ts +20 -12
- package/src/adapter-types.ts +18 -6
- package/src/debug-info.ts +37 -6
- package/src/devtools/devtools-messages-client-session.ts +2 -2
- package/src/devtools/devtools-messages-common.ts +1 -8
- package/src/devtools/devtools-messages-leader.ts +9 -8
- package/src/devtools/devtools-sessioninfo.ts +8 -5
- package/src/devtools/mod.ts +11 -2
- package/src/errors.ts +38 -11
- package/src/index.ts +2 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +277 -105
- package/src/leader-thread/eventlog.ts +113 -38
- package/src/leader-thread/leader-worker-devtools.ts +86 -55
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +156 -37
- package/src/leader-thread/materialize-event.ts +37 -12
- package/src/leader-thread/mod.ts +1 -0
- package/src/leader-thread/recreate-db.ts +15 -7
- package/src/leader-thread/shutdown-channel.ts +16 -2
- package/src/leader-thread/stream-events.ts +201 -0
- package/src/leader-thread/types.ts +70 -20
- package/src/logging.ts +62 -0
- package/src/make-client-session.ts +9 -3
- package/src/materializer-helper.ts +27 -10
- package/src/otel.ts +10 -0
- package/src/rematerialize-from-eventlog.ts +37 -27
- 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 +70 -52
- 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 +6 -4
- package/src/schema/schema.ts +39 -3
- package/src/schema/state/sqlite/client-document-def.test.ts +19 -2
- package/src/schema/state/sqlite/client-document-def.ts +127 -25
- package/src/schema/state/sqlite/column-annotations.test.ts +1 -1
- package/src/schema/state/sqlite/column-annotations.ts +16 -6
- package/src/schema/state/sqlite/column-def.test.ts +62 -10
- package/src/schema/state/sqlite/column-def.ts +88 -21
- package/src/schema/state/sqlite/column-spec.test.ts +29 -16
- package/src/schema/state/sqlite/column-spec.ts +36 -11
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +26 -6
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +29 -12
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +12 -17
- package/src/schema/state/sqlite/mod.ts +4 -3
- package/src/schema/state/sqlite/query-builder/api.ts +25 -11
- package/src/schema/state/sqlite/query-builder/astToSql.ts +23 -14
- package/src/schema/state/sqlite/query-builder/impl.test.ts +305 -92
- package/src/schema/state/sqlite/query-builder/impl.ts +8 -3
- package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
- package/src/schema/state/sqlite/schema-helpers.ts +28 -20
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
- package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
- package/src/schema/state/sqlite/system-tables/state-tables.ts +69 -0
- package/src/schema/state/sqlite/table-def.test.ts +101 -0
- package/src/schema/state/sqlite/table-def.ts +8 -6
- package/src/schema/unknown-events.ts +131 -0
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +86 -0
- package/src/schema-management/migrations.ts +41 -8
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/sql-queries/sql-queries.ts +9 -1
- package/src/sql-queries/sql-query-builder.ts +2 -1
- package/src/sqlite-types.ts +3 -3
- package/src/sync/ClientSessionSyncProcessor.ts +69 -62
- package/src/sync/errors.ts +38 -0
- package/src/sync/index.ts +3 -0
- package/src/sync/mock-sync-backend.ts +184 -0
- package/src/sync/next/compact-events.ts +6 -7
- package/src/sync/next/facts.ts +7 -9
- package/src/sync/next/history-dag-common.ts +277 -26
- package/src/sync/next/history-dag.ts +16 -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 +22 -0
- package/src/sync/sync-backend.ts +185 -0
- package/src/sync/sync.ts +9 -91
- package/src/sync/syncstate.test.ts +96 -52
- package/src/sync/syncstate.ts +69 -58
- package/src/sync/transport-chunking.ts +90 -0
- package/src/sync/validate-push-payload.ts +8 -9
- package/src/testing/event-factory.ts +131 -0
- package/src/testing/mod.ts +1 -0
- package/src/version.ts +16 -6
- package/dist/schema/EventDef.d.ts +0 -123
- 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 -80
- package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
- package/dist/schema/EventSequenceNumber.js +0 -139
- 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/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
- package/dist/schema/state/sqlite/system-tables.js +0 -79
- package/dist/schema/state/sqlite/system-tables.js.map +0 -1
- package/dist/schema-management/migrations.test.d.ts +0 -2
- package/dist/schema-management/migrations.test.d.ts.map +0 -1
- package/dist/schema-management/migrations.test.js +0 -52
- package/dist/schema-management/migrations.test.js.map +0 -1
- package/dist/sync/next/graphology.d.ts +0 -8
- package/dist/sync/next/graphology.d.ts.map +0 -1
- package/dist/sync/next/graphology.js +0 -30
- package/dist/sync/next/graphology.js.map +0 -1
- package/dist/sync/next/graphology_.d.ts +0 -3
- package/dist/sync/next/graphology_.d.ts.map +0 -1
- package/dist/sync/next/graphology_.js +0 -3
- package/dist/sync/next/graphology_.js.map +0 -1
- package/src/schema/EventDef.ts +0 -219
- package/src/schema/EventSequenceNumber.ts +0 -199
- package/src/schema/LiveStoreEvent.ts +0 -287
- package/src/schema/state/sqlite/system-tables.ts +0 -104
- package/src/sync/next/ambient.d.ts +0 -3
- package/src/sync/next/graphology.ts +0 -41
- package/src/sync/next/graphology_.ts +0 -2
|
@@ -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<":", {
|
|
@@ -266,9 +230,14 @@ declare const EncodedWithMeta_base: Schema.Class<EncodedWithMeta, {
|
|
|
266
230
|
syncMetadata: Option.Option<Schema.JsonValue>;
|
|
267
231
|
materializerHashLeader: Option.Option<number>;
|
|
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
|
/**
|
|
@@ -277,30 +246,44 @@ export declare class EncodedWithMeta extends EncodedWithMeta_base {
|
|
|
277
246
|
* the resulting event num will be e4 → e3
|
|
278
247
|
*
|
|
279
248
|
* Example: (client event)
|
|
280
|
-
* For event e2
|
|
281
|
-
* the resulting event num will be e3
|
|
249
|
+
* For event e2.1 → e2 which should be rebased on event e3 → e2
|
|
250
|
+
* the resulting event num will be e3.1 → e3
|
|
282
251
|
*
|
|
283
|
-
* Syntax: e2
|
|
252
|
+
* Syntax: e2.2 → e2.1
|
|
284
253
|
* ^ ^ ^ ^
|
|
285
254
|
* | | | +- client parent number
|
|
286
255
|
* | | +--- global parent number
|
|
287
256
|
* | +-- client number
|
|
288
257
|
* +---- global number
|
|
289
|
-
* Client num is
|
|
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
|
};
|
|
@@ -97,32 +93,32 @@ export class EncodedWithMeta extends Schema.Class('LiveStoreEvent.EncodedWithMet
|
|
|
97
93
|
* the resulting event num will be e4 → e3
|
|
98
94
|
*
|
|
99
95
|
* Example: (client event)
|
|
100
|
-
* For event e2
|
|
101
|
-
* the resulting event num will be e3
|
|
96
|
+
* For event e2.1 → e2 which should be rebased on event e3 → e2
|
|
97
|
+
* the resulting event num will be e3.1 → e3
|
|
102
98
|
*
|
|
103
|
-
* Syntax: e2
|
|
99
|
+
* Syntax: e2.2 → e2.1
|
|
104
100
|
* ^ ^ ^ ^
|
|
105
101
|
* | | | +- client parent number
|
|
106
102
|
* | | +--- global parent number
|
|
107
103
|
* | +-- client number
|
|
108
104
|
* +---- global number
|
|
109
|
-
* Client num is
|
|
105
|
+
* Client num is omitted for global events
|
|
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,12 +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
|
-
// TODO use schema equality here
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
JSON.stringify(a.args) === JSON.stringify(b.args); // TODO use schema equality here
|
|
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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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import type { EventDef, EventDefRecord } from '../EventDef/mod.ts';
|
|
3
|
+
import type * as EventSequenceNumber from '../EventSequenceNumber/mod.ts';
|
|
4
|
+
/** Event without sequence numbers, with decoded (native TypeScript) args. Used as input to `store.commit()`. */
|
|
5
|
+
export type InputDecoded<TEventDef extends EventDef.Any> = {
|
|
6
|
+
name: TEventDef['name'];
|
|
7
|
+
args: Schema.Schema.Type<TEventDef['schema']>;
|
|
8
|
+
};
|
|
9
|
+
/** Event without sequence numbers, with encoded (serialized) args. Used as input to `store.commit()`. */
|
|
10
|
+
export type InputEncoded<TEventDef extends EventDef.Any> = {
|
|
11
|
+
name: TEventDef['name'];
|
|
12
|
+
args: Schema.Schema.Encoded<TEventDef['schema']>;
|
|
13
|
+
};
|
|
14
|
+
/** Full event with composite sequence numbers and decoded args. Includes clientId/sessionId for sync. */
|
|
15
|
+
export type Decoded<TEventDef extends EventDef.Any> = {
|
|
16
|
+
name: TEventDef['name'];
|
|
17
|
+
args: Schema.Schema.Type<TEventDef['schema']>;
|
|
18
|
+
seqNum: EventSequenceNumber.Client.Composite;
|
|
19
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
20
|
+
clientId: string;
|
|
21
|
+
sessionId: string;
|
|
22
|
+
};
|
|
23
|
+
/** Full event with composite sequence numbers and encoded args. Includes clientId/sessionId for sync. */
|
|
24
|
+
export type Encoded<TEventDef extends EventDef.Any> = {
|
|
25
|
+
name: TEventDef['name'];
|
|
26
|
+
args: Schema.Schema.Encoded<TEventDef['schema']>;
|
|
27
|
+
seqNum: EventSequenceNumber.Client.Composite;
|
|
28
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
29
|
+
clientId: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
};
|
|
32
|
+
/** Effect Schema union of all event types in an EventDefRecord (with composite sequence numbers). */
|
|
33
|
+
export type ForRecord<TEventDefRecord extends EventDefRecord> = Schema.Schema<{
|
|
34
|
+
[K in keyof TEventDefRecord]: {
|
|
35
|
+
name: K;
|
|
36
|
+
args: Schema.Schema.Type<TEventDefRecord[K]['schema']>;
|
|
37
|
+
seqNum: EventSequenceNumber.Client.Composite;
|
|
38
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
39
|
+
clientId: string;
|
|
40
|
+
sessionId: string;
|
|
41
|
+
};
|
|
42
|
+
}[keyof TEventDefRecord], {
|
|
43
|
+
[K in keyof TEventDefRecord]: {
|
|
44
|
+
name: K;
|
|
45
|
+
args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>;
|
|
46
|
+
seqNum: EventSequenceNumber.Client.Composite;
|
|
47
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
48
|
+
clientId: string;
|
|
49
|
+
sessionId: string;
|
|
50
|
+
};
|
|
51
|
+
}[keyof TEventDefRecord]>;
|
|
52
|
+
//# sourceMappingURL=for-event-def.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for-event-def.d.ts","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/for-event-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,KAAK,KAAK,mBAAmB,MAAM,+BAA+B,CAAA;AAEzE,gHAAgH;AAChH,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,IAAI;IACzD,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC9C,CAAA;AAED,yGAAyG;AACzG,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,IAAI;IACzD,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CACjD,CAAA;AAED,yGAAyG;AACzG,MAAM,MAAM,OAAO,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,IAAI;IACpD,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7C,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAC5C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAClD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,yGAAyG;AACzG,MAAM,MAAM,OAAO,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,IAAI;IACpD,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChD,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAC5C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAClD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,qGAAqG;AACrG,MAAM,MAAM,SAAS,CAAC,eAAe,SAAS,cAAc,IAAI,MAAM,CAAC,MAAM,CAC3E;KACG,CAAC,IAAI,MAAM,eAAe,GAAG;QAC5B,IAAI,EAAE,CAAC,CAAA;QACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtD,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QAC5C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QAClD,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB;CACF,CAAC,MAAM,eAAe,CAAC,EACxB;KACG,CAAC,IAAI,MAAM,eAAe,GAAG;QAC5B,IAAI,EAAE,CAAC,CAAA;QACP,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QACzD,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QAC5C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QAClD,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB;CACF,CAAC,MAAM,eAAe,CAAC,CACzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for-event-def.js","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/for-event-def.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import * as EventSequenceNumber from '../EventSequenceNumber/mod.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Effect Schema for global events with integer sequence numbers.
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const event: LiveStoreEvent.Global.Encoded = {
|
|
8
|
+
* name: 'todoCreated-v1',
|
|
9
|
+
* args: { id: 'abc', text: 'Buy milk' },
|
|
10
|
+
* seqNum: 5, // This event's position in the global log
|
|
11
|
+
* parentSeqNum: 4, // Points to the previous event
|
|
12
|
+
* clientId: 'client-xyz',
|
|
13
|
+
* sessionId: 'session-123'
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const Encoded: Schema.Struct<{
|
|
18
|
+
name: typeof Schema.String;
|
|
19
|
+
args: typeof Schema.Any;
|
|
20
|
+
seqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
21
|
+
parentSeqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
22
|
+
clientId: typeof Schema.String;
|
|
23
|
+
sessionId: typeof Schema.String;
|
|
24
|
+
}>;
|
|
25
|
+
/** Event with integer sequence numbers for sync backend wire format. */
|
|
26
|
+
export type Encoded = typeof Encoded.Type;
|
|
27
|
+
/** Converts a Global event to Client format by expanding integer seqNums to composite form. */
|
|
28
|
+
export declare const toClientEncoded: (event: Encoded) => {
|
|
29
|
+
name: string;
|
|
30
|
+
args: any;
|
|
31
|
+
seqNum: EventSequenceNumber.Client.Composite;
|
|
32
|
+
parentSeqNum: EventSequenceNumber.Client.Composite;
|
|
33
|
+
clientId: string;
|
|
34
|
+
sessionId: string;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=global.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAA;AAEpE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO;;;;;;;EAOsC,CAAA;AAE1D,wEAAwE;AACxE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,+FAA+F;AAC/F,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,KACb;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAC5C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IAClD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAKjB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import * as EventSequenceNumber from "../EventSequenceNumber/mod.js";
|
|
3
|
+
/**
|
|
4
|
+
* Effect Schema for global events with integer sequence numbers.
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const event: LiveStoreEvent.Global.Encoded = {
|
|
8
|
+
* name: 'todoCreated-v1',
|
|
9
|
+
* args: { id: 'abc', text: 'Buy milk' },
|
|
10
|
+
* seqNum: 5, // This event's position in the global log
|
|
11
|
+
* parentSeqNum: 4, // Points to the previous event
|
|
12
|
+
* clientId: 'client-xyz',
|
|
13
|
+
* sessionId: 'session-123'
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export const Encoded = Schema.Struct({
|
|
18
|
+
name: Schema.String,
|
|
19
|
+
args: Schema.Any,
|
|
20
|
+
seqNum: EventSequenceNumber.Global.Schema,
|
|
21
|
+
parentSeqNum: EventSequenceNumber.Global.Schema,
|
|
22
|
+
clientId: Schema.String,
|
|
23
|
+
sessionId: Schema.String,
|
|
24
|
+
}).annotations({ title: 'LiveStoreEvent.Global.Encoded' });
|
|
25
|
+
/** Converts a Global event to Client format by expanding integer seqNums to composite form. */
|
|
26
|
+
export const toClientEncoded = (event) => ({
|
|
27
|
+
...event,
|
|
28
|
+
seqNum: EventSequenceNumber.Client.fromGlobal(event.seqNum),
|
|
29
|
+
parentSeqNum: EventSequenceNumber.Client.fromGlobal(event.parentSeqNum),
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/schema/LiveStoreEvent/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAA;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC,GAAG;IAChB,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM;IACzC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM;IAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAA;AAK1D,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAc,EAQd,EAAE,CAAC,CAAC;IACJ,GAAG,KAAK;IACR,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3D,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;CACxE,CAAC,CAAA"}
|