@livestore/common 0.4.0-dev.9 → 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 +3 -3
- package/dist/testing/event-factory.d.ts.map +1 -1
- package/dist/testing/event-factory.js +5 -7
- package/dist/testing/event-factory.js.map +1 -1
- package/dist/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 +67 -15
- 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 +10 -12
- 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,30 +1,21 @@
|
|
|
1
1
|
import { memoizeByRef } from '@livestore/utils';
|
|
2
2
|
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect';
|
|
3
|
-
import {
|
|
4
|
-
import { EventSequenceNumber,
|
|
3
|
+
import { UnknownError } from "./adapter-types.js";
|
|
4
|
+
import { EventSequenceNumber, LiveStoreEvent, resolveEventDef, SystemTables } from "./schema/mod.js";
|
|
5
5
|
import { sql } from "./util.js";
|
|
6
|
-
|
|
6
|
+
/** Parse JSON string to unknown value */
|
|
7
|
+
const jsonParse = Schema.decodeUnknownSync(Schema.parseJson());
|
|
8
|
+
export const rematerializeFromEventlog = Effect.fn('@livestore/common:rematerializeFromEventlog')(function* ({ dbEventlog,
|
|
7
9
|
// TODO re-use this db when bringing back the boot in-memory db implementation
|
|
8
10
|
// db,
|
|
9
|
-
schema, onProgress, materializeEvent, })
|
|
11
|
+
schema, onProgress, materializeEvent, }) {
|
|
10
12
|
const eventsCount = dbEventlog.select(`SELECT COUNT(*) AS count FROM ${SystemTables.EVENTLOG_META_TABLE}`)[0].count;
|
|
11
13
|
const hashEventDef = memoizeByRef((event) => Schema.hash(event.schema));
|
|
12
|
-
const processEvent =
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const args = JSON.parse(row.argsJson);
|
|
18
|
-
// Checking whether the schema has changed in an incompatible way
|
|
19
|
-
yield* Schema.decodeUnknown(eventDef.eventDef.schema)(args).pipe(Effect.mapError((cause) => UnexpectedError.make({
|
|
20
|
-
cause,
|
|
21
|
-
note: `\
|
|
22
|
-
There was an error during rematerializing from the eventlog while decoding
|
|
23
|
-
the persisted event args for event definition "${row.name}".
|
|
24
|
-
This likely means the schema has changed in an incompatible way.
|
|
25
|
-
`,
|
|
26
|
-
})));
|
|
27
|
-
const eventEncoded = LiveStoreEvent.EncodedWithMeta.make({
|
|
14
|
+
const processEvent = Effect.fn(`@livestore/common:rematerializeFromEventlog:processEvent`)(function* (row) {
|
|
15
|
+
const args = jsonParse(row.argsJson);
|
|
16
|
+
const eventEncoded = LiveStoreEvent.Client.EncodedWithMeta.make({
|
|
17
|
+
name: row.name,
|
|
18
|
+
args,
|
|
28
19
|
seqNum: {
|
|
29
20
|
global: row.seqNumGlobal,
|
|
30
21
|
client: row.seqNumClient,
|
|
@@ -35,13 +26,33 @@ This likely means the schema has changed in an incompatible way.
|
|
|
35
26
|
client: row.parentSeqNumClient,
|
|
36
27
|
rebaseGeneration: row.parentSeqNumRebaseGeneration,
|
|
37
28
|
},
|
|
38
|
-
name: row.name,
|
|
39
|
-
args,
|
|
40
29
|
clientId: row.clientId,
|
|
41
30
|
sessionId: row.sessionId,
|
|
42
31
|
});
|
|
32
|
+
const resolution = yield* resolveEventDef(schema, {
|
|
33
|
+
operation: '@livestore/common:rematerializeFromEventlog:processEvent',
|
|
34
|
+
event: eventEncoded,
|
|
35
|
+
}).pipe(UnknownError.mapToUnknownError);
|
|
36
|
+
if (resolution._tag === 'unknown') {
|
|
37
|
+
// Old snapshots can contain newer events. Skip until the runtime has
|
|
38
|
+
// been updated; the event stays in the log for future replays.
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const { eventDef } = resolution;
|
|
42
|
+
if (hashEventDef(eventDef) !== row.schemaHash) {
|
|
43
|
+
yield* Effect.logWarning(`Schema hash mismatch for event definition ${row.name}. Trying to materialize event anyway.`);
|
|
44
|
+
}
|
|
45
|
+
// Checking whether the schema has changed in an incompatible way
|
|
46
|
+
yield* Schema.decodeUnknown(eventDef.schema)(args).pipe(Effect.mapError((cause) => UnknownError.make({
|
|
47
|
+
cause,
|
|
48
|
+
note: `\
|
|
49
|
+
There was an error during rematerializing from the eventlog while decoding
|
|
50
|
+
the persisted event args for event definition "${row.name}".
|
|
51
|
+
This likely means the schema has changed in an incompatible way.
|
|
52
|
+
`,
|
|
53
|
+
})));
|
|
43
54
|
yield* materializeEvent(eventEncoded, { skipEventlog: true });
|
|
44
|
-
})
|
|
55
|
+
});
|
|
45
56
|
const CHUNK_SIZE = 100;
|
|
46
57
|
const stmt = dbEventlog.prepare(sql `\
|
|
47
58
|
SELECT * FROM ${SystemTables.EVENTLOG_META_TABLE}
|
|
@@ -52,21 +63,21 @@ LIMIT ${CHUNK_SIZE}
|
|
|
52
63
|
let processedEvents = 0;
|
|
53
64
|
yield* Stream.unfoldChunk({ _tag: 'Initial' }, (item) => {
|
|
54
65
|
// End stream if no more rows
|
|
55
|
-
if (Chunk.isChunk(item) && item.length === 0)
|
|
66
|
+
if (Chunk.isChunk(item) === true && item.length === 0)
|
|
56
67
|
return Option.none();
|
|
57
|
-
const lastId = Chunk.isChunk(item)
|
|
58
|
-
? Chunk.last(item).pipe(Option.map((_) => ({ global: _.seqNumGlobal, client: _.seqNumClient })), Option.getOrElse(() => EventSequenceNumber.ROOT))
|
|
59
|
-
: EventSequenceNumber.ROOT;
|
|
68
|
+
const lastId = Chunk.isChunk(item) === true
|
|
69
|
+
? Chunk.last(item).pipe(Option.map((_) => ({ global: _.seqNumGlobal, client: _.seqNumClient })), Option.getOrElse(() => EventSequenceNumber.Client.ROOT))
|
|
70
|
+
: EventSequenceNumber.Client.ROOT;
|
|
60
71
|
const nextItem = Chunk.fromIterable(stmt.select({
|
|
61
72
|
$seqNumGlobal: lastId?.global,
|
|
62
73
|
$seqNumClient: lastId?.client,
|
|
63
74
|
}));
|
|
64
|
-
const prevItem = Chunk.isChunk(item) ? item : Chunk.empty();
|
|
75
|
+
const prevItem = Chunk.isChunk(item) === true ? item : Chunk.empty();
|
|
65
76
|
return Option.some([prevItem, nextItem]);
|
|
66
77
|
}).pipe(Stream.bufferChunks({ capacity: 2 }), Stream.tap((row) => Effect.gen(function* () {
|
|
67
78
|
yield* processEvent(row);
|
|
68
79
|
processedEvents++;
|
|
69
80
|
yield* onProgress({ done: processedEvents, total: eventsCount });
|
|
70
81
|
})), Stream.runDrain);
|
|
71
|
-
}
|
|
82
|
+
}, Effect.withPerformanceMeasure('@livestore/common:rematerializeFromEventlog'));
|
|
72
83
|
//# sourceMappingURL=rematerialize-from-eventlog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE/E,OAAO,EAAiB,
|
|
1
|
+
{"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Definition Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions for creating event definitions in LiveStore.
|
|
5
|
+
* Events are the core unit of state change - all mutations to the database
|
|
6
|
+
* happen through events that are committed to the eventlog.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { Events } from '@livestore/livestore'
|
|
11
|
+
* import { Schema } from 'effect'
|
|
12
|
+
*
|
|
13
|
+
* // Define events for your application
|
|
14
|
+
* export const events = {
|
|
15
|
+
* // Synced events are sent to the sync backend
|
|
16
|
+
* todoCreated: Events.synced({
|
|
17
|
+
* name: 'v1.TodoCreated',
|
|
18
|
+
* schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
19
|
+
* }),
|
|
20
|
+
*
|
|
21
|
+
* // Client-only events stay local (useful for UI state)
|
|
22
|
+
* uiStateSet: Events.clientOnly({
|
|
23
|
+
* name: 'UiStateSet',
|
|
24
|
+
* schema: Schema.Struct({ selectedId: Schema.NullOr(Schema.String) }),
|
|
25
|
+
* }),
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
* @module
|
|
29
|
+
*/
|
|
30
|
+
import { Schema } from '@livestore/utils/effect';
|
|
31
|
+
import type { EventDef } from './event-def.ts';
|
|
32
|
+
import type { EventDefFactInput, EventDefFacts } from './facts.ts';
|
|
33
|
+
/** Options for defining an event. */
|
|
34
|
+
export type DefineEventOptions<TTo, TDerived extends boolean = false> = {
|
|
35
|
+
/**
|
|
36
|
+
* Callback defining fact constraints for this event.
|
|
37
|
+
* @experimental This feature is not fully implemented yet.
|
|
38
|
+
*/
|
|
39
|
+
facts?: (args: TTo, currentFacts: EventDefFacts) => {
|
|
40
|
+
modify?: {
|
|
41
|
+
/** Facts to set (create or update). */
|
|
42
|
+
set?: Iterable<EventDefFactInput>;
|
|
43
|
+
/** Facts to unset (remove). */
|
|
44
|
+
unset?: Iterable<EventDefFactInput>;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Facts that must exist for this event to be valid.
|
|
48
|
+
* Used for history constraints and compaction rules.
|
|
49
|
+
*/
|
|
50
|
+
require?: Iterable<EventDefFactInput>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* When true, the event is only synced within the same client's sessions
|
|
54
|
+
* but never sent to the sync backend. Useful for UI state.
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
clientOnly?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* When true, marks this as a derived event that cannot have materializers.
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
62
|
+
derived?: TDerived;
|
|
63
|
+
/**
|
|
64
|
+
* Marks the entire event as deprecated with a reason message.
|
|
65
|
+
* When this event is committed, a warning will be logged.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* Events.synced({
|
|
70
|
+
* name: 'v1.TodoRenamed',
|
|
71
|
+
* schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
|
|
72
|
+
* deprecated: "Use 'v1.TodoUpdated' instead",
|
|
73
|
+
* })
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
deprecated?: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Creates an event definition with full control over all options.
|
|
80
|
+
*
|
|
81
|
+
* This is the low-level function for creating events. For most cases,
|
|
82
|
+
* prefer using `synced()` or `clientOnly()` which provide simpler APIs.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const customEvent = defineEvent({
|
|
87
|
+
* name: 'v1.CustomEvent',
|
|
88
|
+
* schema: Schema.Struct({ data: Schema.String }),
|
|
89
|
+
* clientOnly: false,
|
|
90
|
+
* derived: false,
|
|
91
|
+
* })
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare const defineEvent: <TName extends string, TType, TEncoded = TType, TDerived extends boolean = false>(args: {
|
|
95
|
+
name: TName;
|
|
96
|
+
schema: Schema.Schema<TType, TEncoded>;
|
|
97
|
+
} & DefineEventOptions<TType, TDerived>) => EventDef<TName, TType, TEncoded, TDerived>;
|
|
98
|
+
/**
|
|
99
|
+
* Creates a synced event definition.
|
|
100
|
+
*
|
|
101
|
+
* Synced events are sent to the sync backend and distributed to all connected
|
|
102
|
+
* clients. Use this for collaborative data that should be shared across users
|
|
103
|
+
* and devices.
|
|
104
|
+
*
|
|
105
|
+
* Event names should be versioned (e.g., `v1.TodoCreated`) to support
|
|
106
|
+
* schema evolution over time.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* import { Events } from '@livestore/livestore'
|
|
111
|
+
* import { Schema } from 'effect'
|
|
112
|
+
*
|
|
113
|
+
* const todoCreated = Events.synced({
|
|
114
|
+
* name: 'v1.TodoCreated',
|
|
115
|
+
* schema: Schema.Struct({
|
|
116
|
+
* id: Schema.String,
|
|
117
|
+
* text: Schema.String,
|
|
118
|
+
* completed: Schema.Boolean,
|
|
119
|
+
* }),
|
|
120
|
+
* })
|
|
121
|
+
*
|
|
122
|
+
* // Commit the event
|
|
123
|
+
* store.commit(todoCreated({ id: 'abc', text: 'Buy milk', completed: false }))
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export declare const synced: <TName extends string, TType, TEncoded = TType>(args: {
|
|
127
|
+
name: TName;
|
|
128
|
+
schema: Schema.Schema<TType, TEncoded>;
|
|
129
|
+
} & Omit<DefineEventOptions<TType>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
|
|
130
|
+
/**
|
|
131
|
+
* Creates a client-only event definition.
|
|
132
|
+
*
|
|
133
|
+
* Client-only events are synced within the same client's sessions (e.g., across
|
|
134
|
+
* browser tabs) but are never sent to the sync backend. Use this for local UI
|
|
135
|
+
* state like selected items, filter settings, or draft content.
|
|
136
|
+
*
|
|
137
|
+
* Note: Client-only events still require materializers and are stored in the
|
|
138
|
+
* local eventlog, they just don't participate in server-side sync.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* import { Events } from '@livestore/livestore'
|
|
143
|
+
* import { Schema } from 'effect'
|
|
144
|
+
*
|
|
145
|
+
* const uiStateSet = Events.clientOnly({
|
|
146
|
+
* name: 'UiStateSet',
|
|
147
|
+
* schema: Schema.Struct({
|
|
148
|
+
* selectedTodoId: Schema.NullOr(Schema.String),
|
|
149
|
+
* filterMode: Schema.Literal('all', 'active', 'completed'),
|
|
150
|
+
* }),
|
|
151
|
+
* })
|
|
152
|
+
*
|
|
153
|
+
* // Update local UI state
|
|
154
|
+
* store.commit(uiStateSet({ selectedTodoId: 'abc', filterMode: 'active' }))
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export declare const clientOnly: <TName extends string, TType, TEncoded = TType>(args: {
|
|
158
|
+
name: TName;
|
|
159
|
+
schema: Schema.Schema<TType, TEncoded>;
|
|
160
|
+
} & Omit<DefineEventOptions<TType>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
|
|
161
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAElE,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IACtE;;;OAGG;IACH,KAAK,CAAC,EAAE,CACN,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,aAAa,KACxB;QACH,MAAM,CAAC,EAAE;YACP,uCAAuC;YACvC,GAAG,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YACjC,+BAA+B;YAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;SACpC,CAAA;QACD;;;WAGG;QACH,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;KACtC,CAAA;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAA;IAElB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,EACzG,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,KACtC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAsC3C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAClE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KAC5D,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAgD,CAAA;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EACtE,MAAM;IACJ,IAAI,EAAE,KAAK,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;CACvC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,KAC5D,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAA+C,CAAA"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Definition Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions for creating event definitions in LiveStore.
|
|
5
|
+
* Events are the core unit of state change - all mutations to the database
|
|
6
|
+
* happen through events that are committed to the eventlog.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { Events } from '@livestore/livestore'
|
|
11
|
+
* import { Schema } from 'effect'
|
|
12
|
+
*
|
|
13
|
+
* // Define events for your application
|
|
14
|
+
* export const events = {
|
|
15
|
+
* // Synced events are sent to the sync backend
|
|
16
|
+
* todoCreated: Events.synced({
|
|
17
|
+
* name: 'v1.TodoCreated',
|
|
18
|
+
* schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
19
|
+
* }),
|
|
20
|
+
*
|
|
21
|
+
* // Client-only events stay local (useful for UI state)
|
|
22
|
+
* uiStateSet: Events.clientOnly({
|
|
23
|
+
* name: 'UiStateSet',
|
|
24
|
+
* schema: Schema.Struct({ selectedId: Schema.NullOr(Schema.String) }),
|
|
25
|
+
* }),
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
* @module
|
|
29
|
+
*/
|
|
30
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
|
31
|
+
import { Schema } from '@livestore/utils/effect';
|
|
32
|
+
/**
|
|
33
|
+
* Creates an event definition with full control over all options.
|
|
34
|
+
*
|
|
35
|
+
* This is the low-level function for creating events. For most cases,
|
|
36
|
+
* prefer using `synced()` or `clientOnly()` which provide simpler APIs.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const customEvent = defineEvent({
|
|
41
|
+
* name: 'v1.CustomEvent',
|
|
42
|
+
* schema: Schema.Struct({ data: Schema.String }),
|
|
43
|
+
* clientOnly: false,
|
|
44
|
+
* derived: false,
|
|
45
|
+
* })
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export const defineEvent = (args) => {
|
|
49
|
+
const { name, schema, ...options } = args;
|
|
50
|
+
const makePartialEvent = (args) => {
|
|
51
|
+
const res = Schema.validateEither(schema)(args);
|
|
52
|
+
if (res._tag === 'Left') {
|
|
53
|
+
shouldNeverHappen(`Invalid event args for event '${name}':`, res.left.message, '\n');
|
|
54
|
+
}
|
|
55
|
+
return { name: name, args };
|
|
56
|
+
};
|
|
57
|
+
Object.defineProperty(makePartialEvent, 'name', { value: name });
|
|
58
|
+
Object.defineProperty(makePartialEvent, 'schema', { value: schema });
|
|
59
|
+
Object.defineProperty(makePartialEvent, 'encoded', {
|
|
60
|
+
value: (args) => ({ name: name, args }),
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(makePartialEvent, 'options', {
|
|
63
|
+
value: {
|
|
64
|
+
clientOnly: options?.clientOnly ?? false,
|
|
65
|
+
facts: options?.facts !== undefined
|
|
66
|
+
? (args, currentFacts) => {
|
|
67
|
+
const res = options.facts(args, currentFacts);
|
|
68
|
+
return {
|
|
69
|
+
modify: {
|
|
70
|
+
set: res.modify?.set !== undefined ? new Set(res.modify.set) : new Set(),
|
|
71
|
+
unset: res.modify?.unset !== undefined ? new Set(res.modify.unset) : new Set(),
|
|
72
|
+
},
|
|
73
|
+
require: res.require !== undefined ? new Set(res.require) : new Set(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
: undefined,
|
|
77
|
+
derived: options?.derived ?? false,
|
|
78
|
+
deprecated: options?.deprecated,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return makePartialEvent;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Creates a synced event definition.
|
|
85
|
+
*
|
|
86
|
+
* Synced events are sent to the sync backend and distributed to all connected
|
|
87
|
+
* clients. Use this for collaborative data that should be shared across users
|
|
88
|
+
* and devices.
|
|
89
|
+
*
|
|
90
|
+
* Event names should be versioned (e.g., `v1.TodoCreated`) to support
|
|
91
|
+
* schema evolution over time.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* import { Events } from '@livestore/livestore'
|
|
96
|
+
* import { Schema } from 'effect'
|
|
97
|
+
*
|
|
98
|
+
* const todoCreated = Events.synced({
|
|
99
|
+
* name: 'v1.TodoCreated',
|
|
100
|
+
* schema: Schema.Struct({
|
|
101
|
+
* id: Schema.String,
|
|
102
|
+
* text: Schema.String,
|
|
103
|
+
* completed: Schema.Boolean,
|
|
104
|
+
* }),
|
|
105
|
+
* })
|
|
106
|
+
*
|
|
107
|
+
* // Commit the event
|
|
108
|
+
* store.commit(todoCreated({ id: 'abc', text: 'Buy milk', completed: false }))
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export const synced = (args) => defineEvent({ ...args, clientOnly: false });
|
|
112
|
+
/**
|
|
113
|
+
* Creates a client-only event definition.
|
|
114
|
+
*
|
|
115
|
+
* Client-only events are synced within the same client's sessions (e.g., across
|
|
116
|
+
* browser tabs) but are never sent to the sync backend. Use this for local UI
|
|
117
|
+
* state like selected items, filter settings, or draft content.
|
|
118
|
+
*
|
|
119
|
+
* Note: Client-only events still require materializers and are stored in the
|
|
120
|
+
* local eventlog, they just don't participate in server-side sync.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* import { Events } from '@livestore/livestore'
|
|
125
|
+
* import { Schema } from 'effect'
|
|
126
|
+
*
|
|
127
|
+
* const uiStateSet = Events.clientOnly({
|
|
128
|
+
* name: 'UiStateSet',
|
|
129
|
+
* schema: Schema.Struct({
|
|
130
|
+
* selectedTodoId: Schema.NullOr(Schema.String),
|
|
131
|
+
* filterMode: Schema.Literal('all', 'active', 'completed'),
|
|
132
|
+
* }),
|
|
133
|
+
* })
|
|
134
|
+
*
|
|
135
|
+
* // Update local UI state
|
|
136
|
+
* store.commit(uiStateSet({ selectedTodoId: 'abc', filterMode: 'active' }))
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export const clientOnly = (args) => defineEvent({ ...args, clientOnly: true });
|
|
140
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation Annotations for Events
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for marking event fields and entire events as deprecated.
|
|
5
|
+
* When a deprecated field is used or a deprecated event is committed, a warning is logged.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Events } from '@livestore/livestore'
|
|
10
|
+
* import { Schema } from 'effect'
|
|
11
|
+
* import { deprecated } from '@livestore/common/schema'
|
|
12
|
+
*
|
|
13
|
+
* // Field-level deprecation
|
|
14
|
+
* const todoUpdated = Events.synced({
|
|
15
|
+
* name: 'v1.TodoUpdated',
|
|
16
|
+
* schema: Schema.Struct({
|
|
17
|
+
* id: Schema.String,
|
|
18
|
+
* title: Schema.optional(Schema.String).pipe(deprecated("Use 'text' instead")),
|
|
19
|
+
* text: Schema.optional(Schema.String),
|
|
20
|
+
* }),
|
|
21
|
+
* })
|
|
22
|
+
*
|
|
23
|
+
* // Event-level deprecation
|
|
24
|
+
* const todoRenamed = Events.synced({
|
|
25
|
+
* name: 'v1.TodoRenamed',
|
|
26
|
+
* schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
|
|
27
|
+
* deprecated: "Use 'v1.TodoUpdated' instead",
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
* @module
|
|
31
|
+
*/
|
|
32
|
+
import type { Schema } from '@livestore/utils/effect';
|
|
33
|
+
import { Effect, Option } from '@livestore/utils/effect';
|
|
34
|
+
import type { EventDef } from './event-def.ts';
|
|
35
|
+
/** Symbol used to mark schemas as deprecated. */
|
|
36
|
+
export declare const DeprecatedId: unique symbol;
|
|
37
|
+
/**
|
|
38
|
+
* Marks a schema field as deprecated with a reason message.
|
|
39
|
+
* When an event is committed with a deprecated field that has a value,
|
|
40
|
+
* a warning will be logged.
|
|
41
|
+
*
|
|
42
|
+
* Works with both Schema types and PropertySignatures (from Schema.optional).
|
|
43
|
+
*
|
|
44
|
+
* @param reason - Explanation of why this field is deprecated and what to use instead
|
|
45
|
+
* @returns A function that adds the deprecation annotation to the schema
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const schema = Schema.Struct({
|
|
50
|
+
* oldField: Schema.optional(Schema.String).pipe(deprecated("Use 'newField' instead")),
|
|
51
|
+
* newField: Schema.optional(Schema.String),
|
|
52
|
+
* })
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare const deprecated: (reason: string) => <T extends {
|
|
56
|
+
annotations: (annotations: {
|
|
57
|
+
readonly [DeprecatedId]?: string;
|
|
58
|
+
}) => T;
|
|
59
|
+
}>(schema: T) => T;
|
|
60
|
+
/**
|
|
61
|
+
* Checks if a schema has a deprecation annotation.
|
|
62
|
+
*
|
|
63
|
+
* @param schema - The schema to check
|
|
64
|
+
* @returns The deprecation reason if deprecated, None otherwise
|
|
65
|
+
*/
|
|
66
|
+
export declare const getDeprecatedReason: <A, I, R>(schema: Schema.Schema<A, I, R>) => Option.Option<string>;
|
|
67
|
+
/**
|
|
68
|
+
* Checks if a schema is deprecated.
|
|
69
|
+
*
|
|
70
|
+
* @param schema - The schema to check
|
|
71
|
+
* @returns true if the schema is deprecated
|
|
72
|
+
*/
|
|
73
|
+
export declare const isDeprecated: <A, I, R>(schema: Schema.Schema<A, I, R>) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Finds deprecated fields with values in the given event arguments.
|
|
76
|
+
* This walks through a Struct schema and checks each property for deprecation.
|
|
77
|
+
*
|
|
78
|
+
* @param schema - The event schema (expected to be a Struct)
|
|
79
|
+
* @param args - The event arguments
|
|
80
|
+
* @returns Array of objects containing field name and deprecation reason
|
|
81
|
+
*/
|
|
82
|
+
export declare const findDeprecatedFieldsWithValues: (schema: Schema.Schema.All, args: Record<string, unknown>) => Array<{
|
|
83
|
+
field: string;
|
|
84
|
+
reason: string;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Logs deprecation warnings for an event using Effect.logWarning.
|
|
88
|
+
* Checks both event-level and field-level deprecation, with deduplication.
|
|
89
|
+
*
|
|
90
|
+
* @param eventDef - The event definition to check
|
|
91
|
+
* @param args - The event arguments
|
|
92
|
+
* @returns An Effect that logs warnings for any deprecations found
|
|
93
|
+
*/
|
|
94
|
+
export declare const logDeprecationWarnings: (eventDef: EventDef.AnyWithoutFn, args: Record<string, unknown>) => Effect.Effect<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Resets the deprecation warning state. Useful for testing.
|
|
97
|
+
*/
|
|
98
|
+
export declare const resetDeprecationWarnings: () => void;
|
|
99
|
+
//# sourceMappingURL=deprecated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAa,MAAM,yBAAyB,CAAA;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,iDAAiD;AACjD,eAAO,MAAM,YAAY,eAAwD,CAAA;AAEjF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACpB,QAAQ,MAAM,MACd,CAAC,SAAS;IAAE,WAAW,EAAE,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,CAAA;CAAE,EAAE,QAAQ,CAAC,KAAG,CAClD,CAAA;AAElD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACvC,CAAA;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,OAC3B,CAAA;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,EACzB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA4BzC,CAAA;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,CAAC,YAAY,EAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CA2BjB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAO,IAG3C,CAAA"}
|