@livestore/common 0.4.0-dev.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +27 -12
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
- package/dist/WorkerTransportError.d.ts +11 -0
- package/dist/WorkerTransportError.d.ts.map +1 -0
- package/dist/WorkerTransportError.js +11 -0
- package/dist/WorkerTransportError.js.map +1 -0
- package/dist/adapter-types.d.ts +37 -7
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +27 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/bounded-collections.d.ts.map +1 -1
- package/dist/bounded-collections.js +6 -4
- package/dist/bounded-collections.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-compatibility.test.d.ts +2 -0
- package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
- package/dist/devtools/devtools-compatibility.test.js +15 -0
- package/dist/devtools/devtools-compatibility.test.js.map +1 -0
- package/dist/devtools/devtools-messages-client-session.d.ts +55 -24
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +22 -5
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +11 -14
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +7 -9
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +65 -30
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +29 -11
- 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 +48 -18
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -12
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +53 -6
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +325 -257
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/RejectedPushError.d.ts +107 -0
- package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
- package/dist/leader-thread/RejectedPushError.js +78 -0
- package/dist/leader-thread/RejectedPushError.js.map +1 -0
- package/dist/leader-thread/connection.js +1 -1
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +19 -14
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +78 -18
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +90 -58
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +15 -7
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +49 -17
- 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 +1 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +28 -9
- 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 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +6 -6
- 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 +167 -0
- package/dist/leader-thread/stream-events.js.map +1 -0
- package/dist/leader-thread/types.d.ts +95 -17
- 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 +7 -4
- 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 +18 -8
- 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 +7 -2
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +3 -3
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +40 -29
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +161 -0
- package/dist/schema/EventDef/define.d.ts.map +1 -0
- package/dist/schema/EventDef/define.js +140 -0
- package/dist/schema/EventDef/define.js.map +1 -0
- package/dist/schema/EventDef/deprecated.d.ts +99 -0
- package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
- package/dist/schema/EventDef/deprecated.js +144 -0
- package/dist/schema/EventDef/deprecated.js.map +1 -0
- package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
- package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
- package/dist/schema/EventDef/deprecated.test.js +95 -0
- package/dist/schema/EventDef/deprecated.test.js.map +1 -0
- package/dist/schema/EventDef/event-def.d.ts +110 -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 +6 -0
- package/dist/schema/EventDef/mod.d.ts.map +1 -0
- package/dist/schema/EventDef/mod.js +6 -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 +44 -44
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +102 -111
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/client.js +176 -0
- package/dist/schema/LiveStoreEvent/client.js.map +1 -0
- package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
- package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/client.test.js +111 -0
- package/dist/schema/LiveStoreEvent/client.test.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 +32 -4
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +2 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +36 -15
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +121 -2
- 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 +1 -1
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +2 -2
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +96 -47
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +51 -12
- 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 +24 -15
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +2 -2
- 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 +16 -10
- 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 +15 -4
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +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 +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.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 +5 -7
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +51 -22
- 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 +99 -22
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +28 -15
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +231 -93
- 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 +24 -14
- 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} +21 -450
- 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 +5 -3
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +1 -1
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +92 -3
- 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/common.js +2 -2
- package/dist/schema-management/common.js.map +1 -1
- 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 +38 -6
- 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 +18 -6
- 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.map +1 -1
- package/dist/sqlite-db-helper.js +3 -3
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +5 -5
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sqlite-types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +12 -12
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +99 -114
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +0 -33
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +5 -22
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +10 -8
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +71 -69
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +11 -12
- 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 +7 -8
- 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 +11 -11
- 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 +6 -6
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +2 -2
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +2 -2
- package/dist/sync/next/test/compact-events.test.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 +11 -11
- 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 +33 -13
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/sync-backend.js +38 -1
- package/dist/sync/sync-backend.js.map +1 -1
- package/dist/sync/sync.d.ts +23 -2
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +55 -55
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +80 -98
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +221 -132
- 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 +4 -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/util.js +2 -2
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +24 -5
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +25 -8
- package/dist/version.js.map +1 -1
- package/package.json +69 -16
- package/src/ClientSessionLeaderThreadProxy.ts +27 -12
- package/src/WorkerTransportError.ts +12 -0
- package/src/adapter-types.ts +50 -7
- package/src/bounded-collections.ts +6 -5
- package/src/debug-info.ts +37 -6
- package/src/devtools/devtools-compatibility.test.ts +18 -0
- package/src/devtools/devtools-messages-client-session.ts +22 -4
- package/src/devtools/devtools-messages-common.ts +7 -12
- package/src/devtools/devtools-messages-leader.ts +29 -10
- package/src/devtools/devtools-sessioninfo.ts +8 -5
- package/src/devtools/mod.ts +11 -2
- package/src/errors.ts +32 -24
- package/src/index.ts +4 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +523 -373
- package/src/leader-thread/RejectedPushError.ts +106 -0
- package/src/leader-thread/connection.ts +1 -1
- package/src/leader-thread/eventlog.ts +112 -39
- package/src/leader-thread/leader-worker-devtools.ts +201 -120
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +125 -40
- package/src/leader-thread/materialize-event.ts +40 -10
- package/src/leader-thread/mod.ts +1 -0
- package/src/leader-thread/recreate-db.ts +7 -7
- package/src/leader-thread/shutdown-channel.ts +4 -8
- package/src/leader-thread/stream-events.ts +206 -0
- package/src/leader-thread/types.ts +68 -18
- package/src/logging.ts +62 -0
- package/src/make-client-session.ts +11 -5
- package/src/materializer-helper.ts +27 -16
- package/src/otel.ts +13 -2
- package/src/rematerialize-from-eventlog.ts +61 -51
- package/src/schema/EventDef/define.ts +217 -0
- package/src/schema/EventDef/deprecated.test.ts +129 -0
- package/src/schema/EventDef/deprecated.ts +175 -0
- package/src/schema/EventDef/event-def.ts +125 -0
- package/src/schema/EventDef/facts.ts +135 -0
- package/src/schema/EventDef/materializer.ts +172 -0
- package/src/schema/EventDef/mod.ts +5 -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 +72 -53
- package/src/schema/LiveStoreEvent/client.test.ts +129 -0
- package/src/schema/LiveStoreEvent/client.ts +235 -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 +46 -5
- package/src/schema/state/sqlite/client-document-def.test.ts +144 -5
- package/src/schema/state/sqlite/client-document-def.ts +47 -34
- package/src/schema/state/sqlite/column-annotations.test.ts +3 -2
- package/src/schema/state/sqlite/column-annotations.ts +2 -1
- package/src/schema/state/sqlite/column-def.test.ts +66 -12
- package/src/schema/state/sqlite/column-def.ts +119 -47
- package/src/schema/state/sqlite/column-spec.test.ts +32 -17
- package/src/schema/state/sqlite/column-spec.ts +37 -11
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -2
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +2 -1
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +41 -15
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +13 -19
- package/src/schema/state/sqlite/mod.ts +7 -8
- package/src/schema/state/sqlite/query-builder/api.ts +55 -17
- package/src/schema/state/sqlite/query-builder/astToSql.ts +110 -21
- package/src/schema/state/sqlite/query-builder/impl.test.ts +267 -93
- package/src/schema/state/sqlite/query-builder/impl.ts +26 -13
- package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
- package/src/schema/state/sqlite/schema-helpers.ts +30 -22
- 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 +114 -3
- package/src/schema/state/sqlite/table-def.ts +16 -22
- package/src/schema/unknown-events.ts +131 -0
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
- package/src/schema-management/common.ts +2 -2
- package/src/schema-management/migrations.ts +42 -9
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/sql-queries/sql-queries.ts +18 -6
- package/src/sql-queries/sql-query-builder.ts +1 -0
- package/src/sqlite-db-helper.ts +3 -3
- package/src/sqlite-types.ts +6 -5
- package/src/sync/ClientSessionSyncProcessor.ts +152 -142
- package/src/sync/errors.ts +12 -24
- package/src/sync/index.ts +2 -0
- package/src/sync/mock-sync-backend.ts +146 -104
- package/src/sync/next/compact-events.ts +10 -11
- package/src/sync/next/facts.ts +13 -14
- package/src/sync/next/history-dag-common.ts +280 -26
- package/src/sync/next/history-dag.ts +17 -13
- package/src/sync/next/rebase-events.ts +12 -12
- package/src/sync/next/test/compact-events.calculator.test.ts +3 -2
- package/src/sync/next/test/compact-events.test.ts +4 -3
- package/src/sync/next/test/event-fixtures.ts +13 -13
- package/src/sync/sync-backend-kv.ts +4 -3
- package/src/sync/sync-backend.ts +66 -17
- package/src/sync/sync.ts +24 -2
- package/src/sync/syncstate.test.ts +583 -419
- package/src/sync/syncstate.ts +127 -122
- package/src/sync/transport-chunking.ts +90 -0
- package/src/sync/validate-push-payload.ts +6 -8
- package/src/testing/event-factory.ts +131 -0
- package/src/testing/mod.ts +1 -0
- package/src/util.ts +2 -2
- package/src/version.ts +33 -8
- 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 -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 +0 -147
- 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 -81
- package/dist/schema/state/sqlite/system-tables.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 -222
- package/src/schema/EventSequenceNumber.ts +0 -199
- package/src/schema/LiveStoreEvent.ts +0 -286
- package/src/schema/state/sqlite/system-tables.ts +0 -106
- 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,199 +0,0 @@
|
|
|
1
|
-
import { Brand, Schema } from '@livestore/utils/effect'
|
|
2
|
-
|
|
3
|
-
export type ClientEventSequenceNumber = Brand.Branded<number, 'ClientEventSequenceNumber'>
|
|
4
|
-
export const localEventSequenceNumber = Brand.nominal<ClientEventSequenceNumber>()
|
|
5
|
-
export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int)
|
|
6
|
-
|
|
7
|
-
export type GlobalEventSequenceNumber = Brand.Branded<number, 'GlobalEventSequenceNumber'>
|
|
8
|
-
export const globalEventSequenceNumber = Brand.nominal<GlobalEventSequenceNumber>()
|
|
9
|
-
export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int)
|
|
10
|
-
|
|
11
|
-
export const clientDefault = 0 as any as ClientEventSequenceNumber
|
|
12
|
-
|
|
13
|
-
export const rebaseGenerationDefault = 0
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* LiveStore event sequence number value consisting of a globally unique event sequence number
|
|
17
|
-
* and a client sequence number.
|
|
18
|
-
*
|
|
19
|
-
* The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
|
|
20
|
-
*/
|
|
21
|
-
export type EventSequenceNumber = {
|
|
22
|
-
global: GlobalEventSequenceNumber
|
|
23
|
-
client: ClientEventSequenceNumber
|
|
24
|
-
/**
|
|
25
|
-
* Generation integer that is incremented whenever the client rebased.
|
|
26
|
-
* Starts from and resets to 0 for each global sequence number.
|
|
27
|
-
*/
|
|
28
|
-
rebaseGeneration: number
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type EventSequenceNumberInput =
|
|
32
|
-
| EventSequenceNumber
|
|
33
|
-
| (Omit<typeof EventSequenceNumber.Encoded, 'rebaseGeneration'> & { rebaseGeneration?: number })
|
|
34
|
-
|
|
35
|
-
// TODO adjust name to `ClientEventSequenceNumber`
|
|
36
|
-
/**
|
|
37
|
-
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
|
38
|
-
*/
|
|
39
|
-
export const EventSequenceNumber = Schema.Struct({
|
|
40
|
-
global: GlobalEventSequenceNumber,
|
|
41
|
-
/** Only increments for clientOnly events */
|
|
42
|
-
client: ClientEventSequenceNumber,
|
|
43
|
-
|
|
44
|
-
// TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
|
|
45
|
-
|
|
46
|
-
// Client only
|
|
47
|
-
rebaseGeneration: Schema.Int,
|
|
48
|
-
}).annotations({
|
|
49
|
-
title: 'LiveStore.EventSequenceNumber',
|
|
50
|
-
pretty: () => (seqNum) => toString(seqNum),
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Compare two event sequence numbers i.e. checks if the first event sequence number is less than the second.
|
|
55
|
-
* Comparison hierarchy: global > client > rebaseGeneration
|
|
56
|
-
*/
|
|
57
|
-
export const compare = (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
|
58
|
-
if (a.global !== b.global) {
|
|
59
|
-
return a.global - b.global
|
|
60
|
-
}
|
|
61
|
-
if (a.client !== b.client) {
|
|
62
|
-
return a.client - b.client
|
|
63
|
-
}
|
|
64
|
-
return a.rebaseGeneration - b.rebaseGeneration
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Convert an event sequence number to a string representation.
|
|
69
|
-
*/
|
|
70
|
-
export const toString = (seqNum: EventSequenceNumber) => {
|
|
71
|
-
const rebaseGenerationStr = seqNum.rebaseGeneration > 0 ? `r${seqNum.rebaseGeneration}` : ''
|
|
72
|
-
return seqNum.client === 0
|
|
73
|
-
? `e${seqNum.global}${rebaseGenerationStr}`
|
|
74
|
-
: `e${seqNum.global}+${seqNum.client}${rebaseGenerationStr}`
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Convert a string representation of an event sequence number to an event sequence number.
|
|
79
|
-
* Parses strings in the format: e{global}[+{client}][r{rebaseGeneration}]
|
|
80
|
-
* Examples: "e0", "e0r1", "e0+1", "e0+1r1"
|
|
81
|
-
*/
|
|
82
|
-
export const fromString = (str: string): EventSequenceNumber => {
|
|
83
|
-
if (!str.startsWith('e')) {
|
|
84
|
-
throw new Error('Invalid event sequence number string: must start with "e"')
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Remove the 'e' prefix
|
|
88
|
-
const remaining = str.slice(1)
|
|
89
|
-
|
|
90
|
-
// Parse rebase generation if present
|
|
91
|
-
let rebaseGeneration = rebaseGenerationDefault
|
|
92
|
-
let withoutRebase = remaining
|
|
93
|
-
const rebaseMatch = remaining.match(/r(\d+)$/)
|
|
94
|
-
if (rebaseMatch !== null) {
|
|
95
|
-
rebaseGeneration = Number.parseInt(rebaseMatch[1]!, 10)
|
|
96
|
-
withoutRebase = remaining.slice(0, -rebaseMatch[0].length)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Parse global and client parts
|
|
100
|
-
const parts = withoutRebase.split('+')
|
|
101
|
-
|
|
102
|
-
// Validate that parts contain only digits (and possibly empty for client)
|
|
103
|
-
if (parts[0] === '' || !/^\d+$/.test(parts[0]!)) {
|
|
104
|
-
throw new Error('Invalid event sequence number string: invalid number format')
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (parts.length > 1 && parts[1] !== undefined && (parts[1] === '' || !/^\d+$/.test(parts[1]))) {
|
|
108
|
-
throw new Error('Invalid event sequence number string: invalid number format')
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const global = Number.parseInt(parts[0]!, 10)
|
|
112
|
-
const client = parts.length > 1 && parts[1] !== undefined ? Number.parseInt(parts[1], 10) : 0
|
|
113
|
-
|
|
114
|
-
if (Number.isNaN(global) || Number.isNaN(client) || Number.isNaN(rebaseGeneration)) {
|
|
115
|
-
throw new TypeError('Invalid event sequence number string: invalid number format')
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return {
|
|
119
|
-
global: global as any as GlobalEventSequenceNumber,
|
|
120
|
-
client: client as any as ClientEventSequenceNumber,
|
|
121
|
-
rebaseGeneration,
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export const fromGlobal = (seqNum: GlobalEventSequenceNumber) => ({
|
|
126
|
-
global: seqNum,
|
|
127
|
-
client: clientDefault,
|
|
128
|
-
rebaseGeneration: rebaseGenerationDefault,
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
export const isEqual = (a: EventSequenceNumber, b: EventSequenceNumber) =>
|
|
132
|
-
a.global === b.global && a.client === b.client && a.rebaseGeneration === b.rebaseGeneration
|
|
133
|
-
|
|
134
|
-
export type EventSequenceNumberPair = { seqNum: EventSequenceNumber; parentSeqNum: EventSequenceNumber }
|
|
135
|
-
|
|
136
|
-
export const ROOT = {
|
|
137
|
-
global: 0 as any as GlobalEventSequenceNumber,
|
|
138
|
-
client: clientDefault,
|
|
139
|
-
rebaseGeneration: rebaseGenerationDefault,
|
|
140
|
-
} satisfies EventSequenceNumber
|
|
141
|
-
|
|
142
|
-
export const isGreaterThan = (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
|
143
|
-
return a.global > b.global || (a.global === b.global && a.client > b.client)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export const isGreaterThanOrEqual = (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
|
147
|
-
return a.global > b.global || (a.global === b.global && a.client >= b.client)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export const max = (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
|
151
|
-
return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export const diff = (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
|
155
|
-
return {
|
|
156
|
-
global: a.global - b.global,
|
|
157
|
-
client: a.client - b.client,
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export const make = (seqNum: EventSequenceNumberInput): EventSequenceNumber => {
|
|
162
|
-
return Schema.is(EventSequenceNumber)(seqNum)
|
|
163
|
-
? seqNum
|
|
164
|
-
: Schema.decodeSync(EventSequenceNumber)({
|
|
165
|
-
...seqNum,
|
|
166
|
-
rebaseGeneration: seqNum.rebaseGeneration ?? rebaseGenerationDefault,
|
|
167
|
-
})
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export const nextPair = ({
|
|
171
|
-
seqNum,
|
|
172
|
-
isClient,
|
|
173
|
-
rebaseGeneration,
|
|
174
|
-
}: {
|
|
175
|
-
seqNum: EventSequenceNumber
|
|
176
|
-
isClient: boolean
|
|
177
|
-
rebaseGeneration?: number
|
|
178
|
-
}): EventSequenceNumberPair => {
|
|
179
|
-
if (isClient) {
|
|
180
|
-
return {
|
|
181
|
-
seqNum: {
|
|
182
|
-
global: seqNum.global,
|
|
183
|
-
client: (seqNum.client + 1) as any as ClientEventSequenceNumber,
|
|
184
|
-
rebaseGeneration: rebaseGeneration ?? seqNum.rebaseGeneration,
|
|
185
|
-
},
|
|
186
|
-
parentSeqNum: seqNum,
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return {
|
|
191
|
-
seqNum: {
|
|
192
|
-
global: (seqNum.global + 1) as any as GlobalEventSequenceNumber,
|
|
193
|
-
client: clientDefault,
|
|
194
|
-
rebaseGeneration: rebaseGenerationDefault,
|
|
195
|
-
},
|
|
196
|
-
// NOTE we always point to `client: 0` for non-clientOnly events
|
|
197
|
-
parentSeqNum: { global: seqNum.global, client: clientDefault, rebaseGeneration: seqNum.rebaseGeneration },
|
|
198
|
-
}
|
|
199
|
-
}
|
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import { memoizeByRef } from '@livestore/utils'
|
|
2
|
-
import { Option, Schema } from '@livestore/utils/effect'
|
|
3
|
-
|
|
4
|
-
import type { EventDef, EventDefRecord } from './EventDef.ts'
|
|
5
|
-
import * as EventSequenceNumber from './EventSequenceNumber.ts'
|
|
6
|
-
import type { LiveStoreSchema } from './schema.ts'
|
|
7
|
-
|
|
8
|
-
export namespace ForEventDef {
|
|
9
|
-
export type PartialDecoded<TEventDef extends EventDef.Any> = {
|
|
10
|
-
name: TEventDef['name']
|
|
11
|
-
args: Schema.Schema.Type<TEventDef['schema']>
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type PartialEncoded<TEventDef extends EventDef.Any> = {
|
|
15
|
-
name: TEventDef['name']
|
|
16
|
-
args: Schema.Schema.Encoded<TEventDef['schema']>
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export type Decoded<TEventDef extends EventDef.Any> = {
|
|
20
|
-
name: TEventDef['name']
|
|
21
|
-
args: Schema.Schema.Type<TEventDef['schema']>
|
|
22
|
-
seqNum: EventSequenceNumber.EventSequenceNumber
|
|
23
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber
|
|
24
|
-
clientId: string
|
|
25
|
-
sessionId: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type Encoded<TEventDef extends EventDef.Any> = {
|
|
29
|
-
name: TEventDef['name']
|
|
30
|
-
args: Schema.Schema.Encoded<TEventDef['schema']>
|
|
31
|
-
seqNum: EventSequenceNumber.EventSequenceNumber
|
|
32
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber
|
|
33
|
-
clientId: string
|
|
34
|
-
sessionId: string
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export type AnyDecoded = ForEventDef.Decoded<EventDef.Any>
|
|
39
|
-
export const AnyDecoded = Schema.Struct({
|
|
40
|
-
name: Schema.String,
|
|
41
|
-
args: Schema.Any,
|
|
42
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
43
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
44
|
-
clientId: Schema.String,
|
|
45
|
-
sessionId: Schema.String,
|
|
46
|
-
}).annotations({ title: 'LiveStoreEvent.AnyDecoded' })
|
|
47
|
-
|
|
48
|
-
export type AnyEncoded = ForEventDef.Encoded<EventDef.Any>
|
|
49
|
-
export const AnyEncoded = Schema.Struct({
|
|
50
|
-
name: Schema.String,
|
|
51
|
-
args: Schema.Any,
|
|
52
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
53
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
54
|
-
clientId: Schema.String,
|
|
55
|
-
sessionId: Schema.String,
|
|
56
|
-
}).annotations({ title: 'LiveStoreEvent.AnyEncoded' })
|
|
57
|
-
|
|
58
|
-
export const AnyEncodedGlobal = Schema.Struct({
|
|
59
|
-
name: Schema.String,
|
|
60
|
-
args: Schema.Any,
|
|
61
|
-
seqNum: EventSequenceNumber.GlobalEventSequenceNumber,
|
|
62
|
-
parentSeqNum: EventSequenceNumber.GlobalEventSequenceNumber,
|
|
63
|
-
clientId: Schema.String,
|
|
64
|
-
sessionId: Schema.String,
|
|
65
|
-
}).annotations({ title: 'LiveStoreEvent.AnyEncodedGlobal' })
|
|
66
|
-
export type AnyEncodedGlobal = typeof AnyEncodedGlobal.Type
|
|
67
|
-
|
|
68
|
-
export type PartialAnyDecoded = ForEventDef.PartialDecoded<EventDef.Any>
|
|
69
|
-
export type PartialAnyEncoded = ForEventDef.PartialEncoded<EventDef.Any>
|
|
70
|
-
|
|
71
|
-
export const PartialAnyEncoded = Schema.Struct({
|
|
72
|
-
name: Schema.String,
|
|
73
|
-
args: Schema.Any,
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
export type PartialForSchema<TSchema extends LiveStoreSchema> = {
|
|
77
|
-
[K in keyof TSchema['_EventDefMapType']]: ForEventDef.PartialDecoded<TSchema['_EventDefMapType'][K]>
|
|
78
|
-
}[keyof TSchema['_EventDefMapType']]
|
|
79
|
-
|
|
80
|
-
export type ForSchema<TSchema extends LiveStoreSchema> = {
|
|
81
|
-
[K in keyof TSchema['_EventDefMapType']]: ForEventDef.Decoded<TSchema['_EventDefMapType'][K]>
|
|
82
|
-
}[keyof TSchema['_EventDefMapType']]
|
|
83
|
-
|
|
84
|
-
export const isPartialEventDef = (event: AnyDecoded | PartialAnyDecoded): event is PartialAnyDecoded =>
|
|
85
|
-
'num' in event === false && 'parentSeqNum' in event === false
|
|
86
|
-
|
|
87
|
-
export type ForEventDefRecord<TEventDefRecord extends EventDefRecord> = Schema.Schema<
|
|
88
|
-
{
|
|
89
|
-
[K in keyof TEventDefRecord]: {
|
|
90
|
-
name: K
|
|
91
|
-
args: Schema.Schema.Type<TEventDefRecord[K]['schema']>
|
|
92
|
-
seqNum: EventSequenceNumber.EventSequenceNumber
|
|
93
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber
|
|
94
|
-
clientId: string
|
|
95
|
-
sessionId: string
|
|
96
|
-
}
|
|
97
|
-
}[keyof TEventDefRecord],
|
|
98
|
-
{
|
|
99
|
-
[K in keyof TEventDefRecord]: {
|
|
100
|
-
name: K
|
|
101
|
-
args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>
|
|
102
|
-
seqNum: EventSequenceNumber.EventSequenceNumber
|
|
103
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber
|
|
104
|
-
clientId: string
|
|
105
|
-
sessionId: string
|
|
106
|
-
}
|
|
107
|
-
}[keyof TEventDefRecord]
|
|
108
|
-
>
|
|
109
|
-
|
|
110
|
-
export type EventDefPartialSchema<TEventDefRecord extends EventDefRecord> = Schema.Schema<
|
|
111
|
-
{
|
|
112
|
-
[K in keyof TEventDefRecord]: {
|
|
113
|
-
name: K
|
|
114
|
-
args: Schema.Schema.Type<TEventDefRecord[K]['schema']>
|
|
115
|
-
}
|
|
116
|
-
}[keyof TEventDefRecord],
|
|
117
|
-
{
|
|
118
|
-
[K in keyof TEventDefRecord]: {
|
|
119
|
-
name: K
|
|
120
|
-
args: Schema.Schema.Encoded<TEventDefRecord[K]['schema']>
|
|
121
|
-
}
|
|
122
|
-
}[keyof TEventDefRecord]
|
|
123
|
-
>
|
|
124
|
-
|
|
125
|
-
export const makeEventDefSchema = <TSchema extends LiveStoreSchema>(
|
|
126
|
-
schema: TSchema,
|
|
127
|
-
): ForEventDefRecord<TSchema['_EventDefMapType']> =>
|
|
128
|
-
Schema.Union(
|
|
129
|
-
...[...schema.eventsDefsMap.values()].map((def) =>
|
|
130
|
-
Schema.Struct({
|
|
131
|
-
name: Schema.Literal(def.name),
|
|
132
|
-
args: def.schema,
|
|
133
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
134
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
135
|
-
clientId: Schema.String,
|
|
136
|
-
sessionId: Schema.String,
|
|
137
|
-
}),
|
|
138
|
-
),
|
|
139
|
-
).annotations({ title: 'EventDef' }) as any
|
|
140
|
-
|
|
141
|
-
export const makeEventDefPartialSchema = <TSchema extends LiveStoreSchema>(
|
|
142
|
-
schema: TSchema,
|
|
143
|
-
): EventDefPartialSchema<TSchema['_EventDefMapType']> =>
|
|
144
|
-
Schema.Union(
|
|
145
|
-
...[...schema.eventsDefsMap.values()].map((def) =>
|
|
146
|
-
Schema.Struct({
|
|
147
|
-
name: Schema.Literal(def.name),
|
|
148
|
-
args: def.schema,
|
|
149
|
-
}),
|
|
150
|
-
),
|
|
151
|
-
).annotations({ title: 'EventDefPartial' }) as any
|
|
152
|
-
|
|
153
|
-
export const makeEventDefSchemaMemo = memoizeByRef(makeEventDefSchema)
|
|
154
|
-
|
|
155
|
-
export const encodedFromGlobal = (event: AnyEncodedGlobal): AnyEncoded => ({
|
|
156
|
-
...event,
|
|
157
|
-
seqNum: EventSequenceNumber.fromGlobal(event.seqNum),
|
|
158
|
-
parentSeqNum: EventSequenceNumber.fromGlobal(event.parentSeqNum),
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
/** Equivalent to AnyEncoded but with a meta field and some convenience methods */
|
|
162
|
-
export class EncodedWithMeta extends Schema.Class<EncodedWithMeta>('LiveStoreEvent.EncodedWithMeta')({
|
|
163
|
-
name: Schema.String,
|
|
164
|
-
args: Schema.Any,
|
|
165
|
-
seqNum: EventSequenceNumber.EventSequenceNumber,
|
|
166
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber,
|
|
167
|
-
clientId: Schema.String,
|
|
168
|
-
sessionId: Schema.String,
|
|
169
|
-
// TODO get rid of `meta` again by cleaning up the usage implementations
|
|
170
|
-
meta: Schema.Struct({
|
|
171
|
-
sessionChangeset: Schema.Union(
|
|
172
|
-
Schema.TaggedStruct('sessionChangeset', {
|
|
173
|
-
data: Schema.Uint8Array as any as Schema.Schema<Uint8Array<ArrayBuffer>>,
|
|
174
|
-
debug: Schema.Any.pipe(Schema.optional),
|
|
175
|
-
}),
|
|
176
|
-
Schema.TaggedStruct('no-op', {}),
|
|
177
|
-
Schema.TaggedStruct('unset', {}),
|
|
178
|
-
),
|
|
179
|
-
syncMetadata: Schema.Option(Schema.JsonValue),
|
|
180
|
-
/** Used to detect if the materializer is side effecting (during dev) */
|
|
181
|
-
materializerHashLeader: Schema.Option(Schema.Number),
|
|
182
|
-
materializerHashSession: Schema.Option(Schema.Number),
|
|
183
|
-
}).pipe(
|
|
184
|
-
Schema.mutable,
|
|
185
|
-
Schema.optional,
|
|
186
|
-
Schema.withDefaults({
|
|
187
|
-
constructor: () => ({
|
|
188
|
-
sessionChangeset: { _tag: 'unset' as const },
|
|
189
|
-
syncMetadata: Option.none(),
|
|
190
|
-
materializerHashLeader: Option.none(),
|
|
191
|
-
materializerHashSession: Option.none(),
|
|
192
|
-
}),
|
|
193
|
-
decoding: () => ({
|
|
194
|
-
sessionChangeset: { _tag: 'unset' as const },
|
|
195
|
-
syncMetadata: Option.none(),
|
|
196
|
-
materializerHashLeader: Option.none(),
|
|
197
|
-
materializerHashSession: Option.none(),
|
|
198
|
-
}),
|
|
199
|
-
}),
|
|
200
|
-
),
|
|
201
|
-
}) {
|
|
202
|
-
toJSON = (): any => {
|
|
203
|
-
// Only used for logging/debugging
|
|
204
|
-
// - More readable way to print the seqNum + parentSeqNum
|
|
205
|
-
// - not including `meta`, `clientId`, `sessionId`
|
|
206
|
-
return {
|
|
207
|
-
seqNum: `${EventSequenceNumber.toString(this.seqNum)} → ${EventSequenceNumber.toString(this.parentSeqNum)} (${this.clientId}, ${this.sessionId})`,
|
|
208
|
-
name: this.name,
|
|
209
|
-
args: this.args,
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Example: (global event)
|
|
215
|
-
* For event e2 → e1 which should be rebased on event e3 → e2
|
|
216
|
-
* the resulting event num will be e4 → e3
|
|
217
|
-
*
|
|
218
|
-
* Example: (client event)
|
|
219
|
-
* For event e2+1 → e2 which should be rebased on event e3 → e2
|
|
220
|
-
* the resulting event num will be e3+1 → e3
|
|
221
|
-
*
|
|
222
|
-
* Syntax: e2+2 → e2+1
|
|
223
|
-
* ^ ^ ^ ^
|
|
224
|
-
* | | | +- client parent number
|
|
225
|
-
* | | +--- global parent number
|
|
226
|
-
* | +-- client number
|
|
227
|
-
* +---- global number
|
|
228
|
-
* Client num is ommitted for global events
|
|
229
|
-
*/
|
|
230
|
-
rebase = ({
|
|
231
|
-
parentSeqNum,
|
|
232
|
-
isClient,
|
|
233
|
-
rebaseGeneration,
|
|
234
|
-
}: {
|
|
235
|
-
parentSeqNum: EventSequenceNumber.EventSequenceNumber
|
|
236
|
-
isClient: boolean
|
|
237
|
-
rebaseGeneration: number
|
|
238
|
-
}) =>
|
|
239
|
-
new EncodedWithMeta({
|
|
240
|
-
...this,
|
|
241
|
-
...EventSequenceNumber.nextPair({ seqNum: parentSeqNum, isClient, rebaseGeneration }),
|
|
242
|
-
})
|
|
243
|
-
|
|
244
|
-
static fromGlobal = (
|
|
245
|
-
event: AnyEncodedGlobal,
|
|
246
|
-
meta: {
|
|
247
|
-
syncMetadata: Option.Option<Schema.JsonValue>
|
|
248
|
-
materializerHashLeader: Option.Option<number>
|
|
249
|
-
materializerHashSession: Option.Option<number>
|
|
250
|
-
},
|
|
251
|
-
) =>
|
|
252
|
-
new EncodedWithMeta({
|
|
253
|
-
...event,
|
|
254
|
-
seqNum: {
|
|
255
|
-
global: event.seqNum,
|
|
256
|
-
client: EventSequenceNumber.clientDefault,
|
|
257
|
-
rebaseGeneration: EventSequenceNumber.rebaseGenerationDefault,
|
|
258
|
-
},
|
|
259
|
-
parentSeqNum: {
|
|
260
|
-
global: event.parentSeqNum,
|
|
261
|
-
client: EventSequenceNumber.clientDefault,
|
|
262
|
-
rebaseGeneration: EventSequenceNumber.rebaseGenerationDefault,
|
|
263
|
-
},
|
|
264
|
-
meta: {
|
|
265
|
-
sessionChangeset: { _tag: 'unset' as const },
|
|
266
|
-
syncMetadata: meta.syncMetadata,
|
|
267
|
-
materializerHashLeader: meta.materializerHashLeader,
|
|
268
|
-
materializerHashSession: meta.materializerHashSession,
|
|
269
|
-
},
|
|
270
|
-
})
|
|
271
|
-
|
|
272
|
-
toGlobal = (): AnyEncodedGlobal => ({
|
|
273
|
-
...this,
|
|
274
|
-
seqNum: this.seqNum.global,
|
|
275
|
-
parentSeqNum: this.parentSeqNum.global,
|
|
276
|
-
})
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/** NOTE `meta` is not considered for equality */
|
|
280
|
-
export const isEqualEncoded = (a: AnyEncoded, b: AnyEncoded) =>
|
|
281
|
-
a.seqNum.global === b.seqNum.global &&
|
|
282
|
-
a.seqNum.client === b.seqNum.client &&
|
|
283
|
-
a.name === b.name &&
|
|
284
|
-
a.clientId === b.clientId &&
|
|
285
|
-
a.sessionId === b.sessionId &&
|
|
286
|
-
JSON.stringify(a.args) === JSON.stringify(b.args) // TODO use schema equality here
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Schema } from '@livestore/utils/effect'
|
|
2
|
-
|
|
3
|
-
import * as EventSequenceNumber from '../../EventSequenceNumber.ts'
|
|
4
|
-
import { SqliteDsl } from './db-schema/mod.ts'
|
|
5
|
-
import { table } from './table-def.ts'
|
|
6
|
-
|
|
7
|
-
/// State DB
|
|
8
|
-
|
|
9
|
-
export const SCHEMA_META_TABLE = '__livestore_schema'
|
|
10
|
-
|
|
11
|
-
export const schemaMetaTable = table({
|
|
12
|
-
name: SCHEMA_META_TABLE,
|
|
13
|
-
columns: {
|
|
14
|
-
tableName: SqliteDsl.text({ primaryKey: true }),
|
|
15
|
-
schemaHash: SqliteDsl.integer({ nullable: false }),
|
|
16
|
-
/** ISO date format */
|
|
17
|
-
updatedAt: SqliteDsl.text({ nullable: false }),
|
|
18
|
-
},
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
export type SchemaMetaRow = typeof schemaMetaTable.Type
|
|
22
|
-
|
|
23
|
-
export const SCHEMA_EVENT_DEFS_META_TABLE = '__livestore_schema_event_defs'
|
|
24
|
-
|
|
25
|
-
export const schemaEventDefsMetaTable = table({
|
|
26
|
-
name: SCHEMA_EVENT_DEFS_META_TABLE,
|
|
27
|
-
columns: {
|
|
28
|
-
eventName: SqliteDsl.text({ primaryKey: true }),
|
|
29
|
-
schemaHash: SqliteDsl.integer({ nullable: false }),
|
|
30
|
-
/** ISO date format */
|
|
31
|
-
updatedAt: SqliteDsl.text({ nullable: false }),
|
|
32
|
-
},
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
export type SchemaEventDefsMetaRow = typeof schemaEventDefsMetaTable.Type
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Table which stores SQLite changeset blobs which is used for rolling back
|
|
39
|
-
* read-model state during rebasing.
|
|
40
|
-
*/
|
|
41
|
-
export const SESSION_CHANGESET_META_TABLE = '__livestore_session_changeset'
|
|
42
|
-
|
|
43
|
-
export const sessionChangesetMetaTable = table({
|
|
44
|
-
name: SESSION_CHANGESET_META_TABLE,
|
|
45
|
-
columns: {
|
|
46
|
-
// TODO bring back primary key
|
|
47
|
-
seqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
|
48
|
-
seqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
|
49
|
-
seqNumRebaseGeneration: SqliteDsl.integer({}),
|
|
50
|
-
changeset: SqliteDsl.blob({ nullable: true }),
|
|
51
|
-
debug: SqliteDsl.json({ nullable: true }),
|
|
52
|
-
},
|
|
53
|
-
indexes: [{ columns: ['seqNumGlobal', 'seqNumClient'], name: 'idx_session_changeset_id' }],
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
export type SessionChangesetMetaRow = typeof sessionChangesetMetaTable.Type
|
|
57
|
-
|
|
58
|
-
export const stateSystemTables = [schemaMetaTable, schemaEventDefsMetaTable, sessionChangesetMetaTable] as const
|
|
59
|
-
|
|
60
|
-
export const isStateSystemTable = (tableName: string) => stateSystemTables.some((_) => _.sqliteDef.name === tableName)
|
|
61
|
-
|
|
62
|
-
/// Eventlog DB
|
|
63
|
-
|
|
64
|
-
export const EVENTLOG_META_TABLE = 'eventlog'
|
|
65
|
-
|
|
66
|
-
export const eventlogMetaTable = table({
|
|
67
|
-
name: EVENTLOG_META_TABLE,
|
|
68
|
-
columns: {
|
|
69
|
-
// TODO Adjust modeling so a global event never needs a client id component
|
|
70
|
-
seqNumGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
|
71
|
-
seqNumClient: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
|
72
|
-
seqNumRebaseGeneration: SqliteDsl.integer({ primaryKey: true }),
|
|
73
|
-
parentSeqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
|
74
|
-
parentSeqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
|
75
|
-
parentSeqNumRebaseGeneration: SqliteDsl.integer({}),
|
|
76
|
-
/** Event definition name */
|
|
77
|
-
name: SqliteDsl.text({}),
|
|
78
|
-
argsJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Any) }),
|
|
79
|
-
clientId: SqliteDsl.text({}),
|
|
80
|
-
sessionId: SqliteDsl.text({}),
|
|
81
|
-
schemaHash: SqliteDsl.integer({}),
|
|
82
|
-
syncMetadataJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Option(Schema.JsonValue)) }),
|
|
83
|
-
},
|
|
84
|
-
indexes: [
|
|
85
|
-
{ columns: ['seqNumGlobal'], name: 'idx_eventlog_seqNumGlobal' },
|
|
86
|
-
{ columns: ['seqNumGlobal', 'seqNumClient', 'seqNumRebaseGeneration'], name: 'idx_eventlog_seqNum' },
|
|
87
|
-
],
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
export type EventlogMetaRow = typeof eventlogMetaTable.Type
|
|
91
|
-
|
|
92
|
-
export const SYNC_STATUS_TABLE = '__livestore_sync_status'
|
|
93
|
-
|
|
94
|
-
// TODO support sync backend identity (to detect if sync backend changes)
|
|
95
|
-
export const syncStatusTable = table({
|
|
96
|
-
name: SYNC_STATUS_TABLE,
|
|
97
|
-
columns: {
|
|
98
|
-
head: SqliteDsl.integer({ primaryKey: true }),
|
|
99
|
-
// Null means the sync backend is not yet connected and we haven't yet seen a backend ID
|
|
100
|
-
backendId: SqliteDsl.text({ nullable: true }),
|
|
101
|
-
},
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
export type SyncStatusRow = typeof syncStatusTable.Type
|
|
105
|
-
|
|
106
|
-
export const eventlogSystemTables = [eventlogMetaTable, syncStatusTable] as const
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// TODO re-enable when `graphology` supports ESM `exports` and `.js` import/export syntax
|
|
2
|
-
// import {} from 'graphology'
|
|
3
|
-
import * as graphology_ from 'graphology'
|
|
4
|
-
import type * as graphologyTypes from 'graphology-types'
|
|
5
|
-
|
|
6
|
-
export const graphology = graphology_ as any
|
|
7
|
-
|
|
8
|
-
export declare class IGraph<
|
|
9
|
-
NodeAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes,
|
|
10
|
-
EdgeAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes,
|
|
11
|
-
GraphAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes,
|
|
12
|
-
> extends graphologyTypes.AbstractGraph<NodeAttributes, EdgeAttributes, GraphAttributes> {
|
|
13
|
-
constructor(options?: graphologyTypes.GraphOptions)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const DirectedGraph = class DirectedGraph extends graphology.DirectedGraph {} as typeof IGraph
|
|
17
|
-
|
|
18
|
-
export const Graph = class Graph extends graphology.Graph {} as typeof IGraph
|
|
19
|
-
|
|
20
|
-
// export const graphology = graphology_ as graphologyTypes
|
|
21
|
-
|
|
22
|
-
/*
|
|
23
|
-
|
|
24
|
-
Example usage:
|
|
25
|
-
|
|
26
|
-
const dag = new graphology.DirectedGraph({ allowSelfLoops: false })
|
|
27
|
-
|
|
28
|
-
nodes.forEach((node) => dag.addNode(node.id, { width: node.data.label.length * 100, height: 40 }))
|
|
29
|
-
edges.forEach((edge) => {
|
|
30
|
-
// TODO do this filtering earlier
|
|
31
|
-
if (!nodeIds.has(edge.source) || !nodeIds.has(edge.target)) return
|
|
32
|
-
|
|
33
|
-
dag.addEdge(edge.source, edge.target)
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
graphologyLayout.random.assign(dag) // needed for initial `x`, `y` values
|
|
37
|
-
const sensibleSettings = forceAtlas2.inferSettings(dag)
|
|
38
|
-
// forceAtlas2.assign(dag, { iterations: 100, settings: { adjustSizes: true, } })
|
|
39
|
-
forceAtlas2.assign(dag, { iterations: 100, settings: sensibleSettings })
|
|
40
|
-
|
|
41
|
-
*/
|