@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
package/package.json
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/common",
|
|
3
|
-
"version": "0.4.0
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/livestorejs/livestore.git"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"package.json",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
4
14
|
"type": "module",
|
|
5
15
|
"sideEffects": false,
|
|
6
16
|
"exports": {
|
|
@@ -8,29 +18,72 @@
|
|
|
8
18
|
"./sql-queries": "./dist/sql-queries/index.js",
|
|
9
19
|
"./leader-thread": "./dist/leader-thread/mod.js",
|
|
10
20
|
"./schema": "./dist/schema/mod.js",
|
|
21
|
+
"./sync": "./dist/sync/index.js",
|
|
11
22
|
"./sync/next": "./dist/sync/next/mod.js",
|
|
12
|
-
"./sync/next/test": "./dist/sync/next/test/mod.js"
|
|
23
|
+
"./sync/next/test": "./dist/sync/next/test/mod.js",
|
|
24
|
+
"./testing": "./dist/testing/mod.js"
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
13
28
|
},
|
|
14
29
|
"dependencies": {
|
|
15
30
|
"@opentelemetry/api": "1.9.0",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"graphology-types": "0.24.8",
|
|
19
|
-
"@livestore/webmesh": "0.4.0-dev.8",
|
|
20
|
-
"@livestore/utils": "0.4.0-dev.8"
|
|
31
|
+
"@livestore/utils": "^0.4.0",
|
|
32
|
+
"@livestore/webmesh": "^0.4.0"
|
|
21
33
|
},
|
|
22
34
|
"devDependencies": {
|
|
35
|
+
"@effect/ai": "0.35.0",
|
|
36
|
+
"@effect/cli": "0.75.1",
|
|
37
|
+
"@effect/cluster": "0.58.2",
|
|
38
|
+
"@effect/experimental": "0.60.0",
|
|
39
|
+
"@effect/opentelemetry": "0.63.0",
|
|
40
|
+
"@effect/platform": "0.96.1",
|
|
41
|
+
"@effect/platform-browser": "0.76.0",
|
|
42
|
+
"@effect/platform-bun": "0.89.0",
|
|
43
|
+
"@effect/platform-node": "0.106.0",
|
|
44
|
+
"@effect/printer": "0.49.0",
|
|
45
|
+
"@effect/printer-ansi": "0.49.0",
|
|
46
|
+
"@effect/rpc": "0.75.1",
|
|
47
|
+
"@effect/sql": "0.51.1",
|
|
48
|
+
"@effect/typeclass": "0.40.0",
|
|
49
|
+
"@effect/vitest": "0.29.0",
|
|
50
|
+
"@opentelemetry/api": "1.9.0",
|
|
51
|
+
"@opentelemetry/resources": "2.2.0",
|
|
52
|
+
"@standard-schema/spec": "1.1.0",
|
|
53
|
+
"effect": "3.21.2",
|
|
23
54
|
"vitest": "3.2.4",
|
|
24
|
-
"@livestore/utils-dev": "0.4.0
|
|
55
|
+
"@livestore/utils-dev": "^0.4.0"
|
|
25
56
|
},
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"@effect/ai": "^0.35.0",
|
|
59
|
+
"@effect/cli": "^0.75.1",
|
|
60
|
+
"@effect/cluster": "^0.58.2",
|
|
61
|
+
"@effect/experimental": "^0.60.0",
|
|
62
|
+
"@effect/opentelemetry": "^0.63.0",
|
|
63
|
+
"@effect/platform": "^0.96.1",
|
|
64
|
+
"@effect/platform-browser": "^0.76.0",
|
|
65
|
+
"@effect/platform-bun": "^0.89.0",
|
|
66
|
+
"@effect/platform-node": "^0.106.0",
|
|
67
|
+
"@effect/printer": "^0.49.0",
|
|
68
|
+
"@effect/printer-ansi": "^0.49.0",
|
|
69
|
+
"@effect/rpc": "^0.75.1",
|
|
70
|
+
"@effect/sql": "^0.51.1",
|
|
71
|
+
"@effect/typeclass": "^0.40.0",
|
|
72
|
+
"@effect/vitest": "^0.29.0",
|
|
73
|
+
"@opentelemetry/api": "^1.9.0",
|
|
74
|
+
"@opentelemetry/resources": "^2.2.0",
|
|
75
|
+
"@standard-schema/spec": "^1.1.0",
|
|
76
|
+
"effect": "^3.21.2"
|
|
77
|
+
},
|
|
78
|
+
"$genie": {
|
|
79
|
+
"source": "package.json.genie.ts",
|
|
80
|
+
"warning": "DO NOT EDIT - changes will be overwritten",
|
|
81
|
+
"workspaceClosureDirs": [
|
|
82
|
+
"packages/@livestore/common",
|
|
83
|
+
"packages/@livestore/utils",
|
|
84
|
+
"packages/@livestore/utils-dev",
|
|
85
|
+
"packages/@livestore/webmesh"
|
|
86
|
+
]
|
|
34
87
|
},
|
|
35
88
|
"scripts": {
|
|
36
89
|
"test": "vitest"
|
|
@@ -1,33 +1,48 @@
|
|
|
1
|
-
import type { Effect, Stream } from '@livestore/utils/effect'
|
|
1
|
+
import type { Effect, Stream, Subscribable } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
+
import type { StorageMode } from './adapter-types.ts'
|
|
3
4
|
import type { MigrationsReport } from './defs.ts'
|
|
4
5
|
import type * as Devtools from './devtools/mod.ts'
|
|
5
|
-
import type {
|
|
6
|
-
import type * as EventSequenceNumber from './schema/EventSequenceNumber.ts'
|
|
6
|
+
import type { StreamEventsOptions } from './leader-thread/types.ts'
|
|
7
|
+
import type * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts'
|
|
7
8
|
import type { LiveStoreEvent } from './schema/mod.ts'
|
|
8
|
-
import type {
|
|
9
|
+
import type { RejectedPushError } from './leader-thread/RejectedPushError.ts'
|
|
10
|
+
import type { SyncBackend } from './sync/sync.ts'
|
|
9
11
|
import type { PayloadUpstream, SyncState } from './sync/syncstate.ts'
|
|
10
12
|
|
|
11
13
|
export interface ClientSessionLeaderThreadProxy {
|
|
12
14
|
events: {
|
|
13
15
|
pull: (args: {
|
|
14
|
-
cursor: EventSequenceNumber.
|
|
15
|
-
}) => Stream.Stream<{ payload: typeof PayloadUpstream.Type }
|
|
16
|
+
cursor: EventSequenceNumber.Client.Composite
|
|
17
|
+
}) => Stream.Stream<{ payload: typeof PayloadUpstream.Type }>
|
|
16
18
|
/** It's important that a client session doesn't call `push` concurrently. */
|
|
17
|
-
push(batch: ReadonlyArray<LiveStoreEvent.
|
|
19
|
+
push(batch: ReadonlyArray<LiveStoreEvent.Client.Encoded>): Effect.Effect<void, RejectedPushError>
|
|
20
|
+
/** Stream events with filtering */
|
|
21
|
+
stream(options: StreamEventsOptions): Stream.Stream<LiveStoreEvent.Client.Encoded>
|
|
18
22
|
}
|
|
19
23
|
/** The initial state after the leader thread has booted */
|
|
20
24
|
readonly initialState: {
|
|
21
25
|
/** The latest event sequence number during boot. Used for the client session to resume syncing. */
|
|
22
|
-
readonly leaderHead: EventSequenceNumber.
|
|
26
|
+
readonly leaderHead: EventSequenceNumber.Client.Composite
|
|
23
27
|
/** The migrations report from the leader thread */
|
|
24
28
|
readonly migrationsReport: MigrationsReport
|
|
29
|
+
/**
|
|
30
|
+
* Indicates how data is being stored.
|
|
31
|
+
* - `persisted`: Data is persisted to disk (e.g., via OPFS)
|
|
32
|
+
* - `in-memory`: Data is only stored in memory and will be lost on page refresh (e.g., private browsing)
|
|
33
|
+
*/
|
|
34
|
+
readonly storageMode: StorageMode
|
|
25
35
|
}
|
|
26
|
-
export: Effect.Effect<Uint8Array<ArrayBuffer
|
|
27
|
-
getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer
|
|
28
|
-
|
|
36
|
+
export: Effect.Effect<Uint8Array<ArrayBuffer>>
|
|
37
|
+
getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>>
|
|
38
|
+
syncState: Subscribable.Subscribable<SyncState>
|
|
29
39
|
/** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
|
|
30
|
-
sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void
|
|
40
|
+
sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void>
|
|
41
|
+
/**
|
|
42
|
+
* Reactive stream describing the connectivity between the leader and its upstream sync backend.
|
|
43
|
+
* Includes raw connection state, last transition timestamp, and devtools overrides (latch state).
|
|
44
|
+
*/
|
|
45
|
+
networkStatus: Subscribable.Subscribable<SyncBackend.NetworkStatus>
|
|
31
46
|
}
|
|
32
47
|
|
|
33
48
|
export const of = (
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ParseResult, WorkerError } from '@livestore/utils/effect'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Type guard that identifies infrastructure errors from the Effect Worker transport layer.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
*
|
|
8
|
+
* These errors ({@link WorkerError.WorkerError}, {@link ParseResult.ParseError}) represent communication failures between
|
|
9
|
+
* threads/processes — not application-level failures.
|
|
10
|
+
*/
|
|
11
|
+
export const isWorkerTransportError = (e: unknown): e is WorkerError.WorkerError | ParseResult.ParseError =>
|
|
12
|
+
ParseResult.isParseError(e) || WorkerError.isWorkerError(e)
|
package/src/adapter-types.ts
CHANGED
|
@@ -10,16 +10,21 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import type { ClientSessionLeaderThreadProxy } from './ClientSessionLeaderThreadProxy.ts'
|
|
12
12
|
import type * as Devtools from './devtools/mod.ts'
|
|
13
|
-
import type { IntentionalShutdownCause, MaterializeError,
|
|
13
|
+
import type { IntentionalShutdownCause, MaterializeError, UnknownError } from './errors.ts'
|
|
14
14
|
import type { LiveStoreSchema } from './schema/mod.ts'
|
|
15
15
|
import type { SqliteDb } from './sqlite-types.ts'
|
|
16
|
-
import type {
|
|
16
|
+
import type { BackendIdMismatchError } from './sync/index.ts'
|
|
17
17
|
|
|
18
18
|
export * as ClientSessionLeaderThreadProxy from './ClientSessionLeaderThreadProxy.ts'
|
|
19
19
|
export * from './defs.ts'
|
|
20
20
|
export * from './errors.ts'
|
|
21
21
|
export * from './sqlite-types.ts'
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Runtime handle to an active LiveStore client session within the current process.
|
|
25
|
+
* Provides direct access to the embedded SQLite database, leader thread bridge,
|
|
26
|
+
* and lifecycle controls useful for application-level coordination.
|
|
27
|
+
*/
|
|
23
28
|
export interface ClientSession {
|
|
24
29
|
/** SQLite database with synchronous API running in the same thread (usually in-memory) */
|
|
25
30
|
sqliteDb: SqliteDb
|
|
@@ -29,7 +34,10 @@ export interface ClientSession {
|
|
|
29
34
|
/** Status info whether current session is leader or not */
|
|
30
35
|
lockStatus: SubscriptionRef.SubscriptionRef<LockStatus>
|
|
31
36
|
shutdown: (
|
|
32
|
-
cause: Exit.Exit<
|
|
37
|
+
cause: Exit.Exit<
|
|
38
|
+
IntentionalShutdownCause,
|
|
39
|
+
UnknownError | MaterializeError | BackendIdMismatchError
|
|
40
|
+
>,
|
|
33
41
|
) => Effect.Effect<void>
|
|
34
42
|
/** A proxy API to communicate with the leader thread */
|
|
35
43
|
leaderThread: ClientSessionLeaderThreadProxy
|
|
@@ -44,12 +52,42 @@ export const BootStateProgress = Schema.Struct({
|
|
|
44
52
|
total: Schema.Number,
|
|
45
53
|
})
|
|
46
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Describes known reasons why LiveStore boot may encounter storage issues.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* - `private-browsing`: OPFS unavailable due to private/incognito browsing mode (Safari, Firefox)
|
|
60
|
+
* - `storage-unavailable`: OPFS access denied for other reasons (permissions, quota)
|
|
61
|
+
* - `unknown`: Unexpected error during storage initialization
|
|
62
|
+
*/
|
|
63
|
+
export const BootWarningReason = Schema.Literal('private-browsing', 'storage-unavailable', 'unknown')
|
|
64
|
+
export type BootWarningReason = typeof BootWarningReason.Type
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Describes the storage mode the store is operating in.
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* - `persisted`: Data is persisted to disk (e.g., via OPFS)
|
|
71
|
+
* - `in-memory`: Data is only stored in memory and will be lost on page refresh
|
|
72
|
+
*/
|
|
73
|
+
export const StorageMode = Schema.Literal('persisted', 'in-memory')
|
|
74
|
+
export type StorageMode = typeof StorageMode.Type
|
|
75
|
+
|
|
47
76
|
export const BootStatus = Schema.Union(
|
|
48
77
|
Schema.Struct({ stage: Schema.Literal('loading') }),
|
|
49
78
|
Schema.Struct({ stage: Schema.Literal('migrating'), progress: BootStateProgress }),
|
|
50
79
|
Schema.Struct({ stage: Schema.Literal('rehydrating'), progress: BootStateProgress }),
|
|
51
80
|
Schema.Struct({ stage: Schema.Literal('syncing'), progress: BootStateProgress }),
|
|
52
81
|
Schema.Struct({ stage: Schema.Literal('done') }),
|
|
82
|
+
/**
|
|
83
|
+
* Indicates a non-fatal issue occurred during boot that may degrade functionality.
|
|
84
|
+
* LiveStore continues running but without full capabilities (e.g., no persistence).
|
|
85
|
+
*/
|
|
86
|
+
Schema.Struct({
|
|
87
|
+
stage: Schema.Literal('warning'),
|
|
88
|
+
reason: BootWarningReason,
|
|
89
|
+
message: Schema.String,
|
|
90
|
+
}),
|
|
53
91
|
).annotations({ title: 'BootStatus' })
|
|
54
92
|
|
|
55
93
|
export type BootStatus = typeof BootStatus.Type
|
|
@@ -114,9 +152,9 @@ export interface ClientSessionDevtoolsChannel
|
|
|
114
152
|
|
|
115
153
|
export type ConnectDevtoolsToStore = (
|
|
116
154
|
storeDevtoolsChannel: ClientSessionDevtoolsChannel,
|
|
117
|
-
) => Effect.Effect<void,
|
|
155
|
+
) => Effect.Effect<void, UnknownError, Scope.Scope>
|
|
118
156
|
|
|
119
|
-
export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession,
|
|
157
|
+
export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnknownError, Scope.Scope>
|
|
120
158
|
|
|
121
159
|
export interface AdapterArgs {
|
|
122
160
|
schema: LiveStoreSchema
|
|
@@ -125,7 +163,10 @@ export interface AdapterArgs {
|
|
|
125
163
|
debugInstanceId: string
|
|
126
164
|
bootStatusQueue: Queue.Queue<BootStatus>
|
|
127
165
|
shutdown: (
|
|
128
|
-
exit: Exit.Exit<
|
|
166
|
+
exit: Exit.Exit<
|
|
167
|
+
IntentionalShutdownCause,
|
|
168
|
+
UnknownError | MaterializeError | BackendIdMismatchError
|
|
169
|
+
>,
|
|
129
170
|
) => Effect.Effect<void>
|
|
130
171
|
connectDevtoolsToStore: ConnectDevtoolsToStore
|
|
131
172
|
/**
|
|
@@ -133,5 +174,7 @@ export interface AdapterArgs {
|
|
|
133
174
|
*
|
|
134
175
|
* @default undefined
|
|
135
176
|
*/
|
|
136
|
-
|
|
177
|
+
syncPayloadSchema: Schema.Schema<any> | undefined
|
|
178
|
+
/** Encoded representation of the sync payload matching `syncPayloadSchema`. */
|
|
179
|
+
syncPayloadEncoded: Schema.JsonValue | undefined
|
|
137
180
|
}
|
|
@@ -16,10 +16,11 @@ export class BoundMap<K, V> {
|
|
|
16
16
|
this.#map.set(key, value)
|
|
17
17
|
// console.log(this.#map.size, this.#sizeLimit);
|
|
18
18
|
if (this.#map.size > this.#sizeLimit) {
|
|
19
|
-
const firstKey = this.#map.keys().next().value
|
|
19
|
+
const firstKey = this.#map.keys().next().value
|
|
20
|
+
if (firstKey === undefined) return
|
|
20
21
|
const deletedValue = this.#map.get(firstKey)!
|
|
21
22
|
this.#map.delete(firstKey)
|
|
22
|
-
if (this.onEvict) {
|
|
23
|
+
if (this.onEvict !== undefined) {
|
|
23
24
|
this.onEvict(firstKey, deletedValue)
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -47,7 +48,7 @@ export class BoundSet<V> {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
#onEvict = (v: V) => {
|
|
50
|
-
if (this.onEvict) {
|
|
51
|
+
if (this.onEvict !== undefined) {
|
|
51
52
|
this.onEvict(v)
|
|
52
53
|
}
|
|
53
54
|
}
|
|
@@ -85,7 +86,7 @@ export class BoundArray<V> {
|
|
|
85
86
|
this.#array.push(v)
|
|
86
87
|
if (this.#array.length > this.sizeLimit) {
|
|
87
88
|
const first = this.#array.shift()
|
|
88
|
-
if (first && this.onEvict) {
|
|
89
|
+
if (first !== undefined && this.onEvict !== undefined) {
|
|
89
90
|
this.onEvict(first)
|
|
90
91
|
}
|
|
91
92
|
}
|
|
@@ -116,6 +117,6 @@ export class BoundArray<V> {
|
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
sort = (fn?: (a: V, b: V) => number) => {
|
|
119
|
-
return this.#array.
|
|
120
|
+
return this.#array.toSorted(fn)
|
|
120
121
|
}
|
|
121
122
|
}
|
package/src/debug-info.ts
CHANGED
|
@@ -22,6 +22,15 @@ export const SlowQueryInfo = Schema.Struct({
|
|
|
22
22
|
startTimePerfNow: Schema.Number,
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
+
const getSizeLimit = (value: unknown): number =>
|
|
26
|
+
typeof (value as { sizeLimit?: number }).sizeLimit === 'number'
|
|
27
|
+
? (value as { sizeLimit: number }).sizeLimit
|
|
28
|
+
: Number.POSITIVE_INFINITY
|
|
29
|
+
|
|
30
|
+
const isBoundArrayLike = (value: unknown): value is BoundArray<unknown> =>
|
|
31
|
+
value instanceof BoundArray ||
|
|
32
|
+
(value !== null && typeof value === 'object' && typeof (value as { sizeLimit?: number }).sizeLimit === 'number')
|
|
33
|
+
|
|
25
34
|
const BoundArraySchemaFromSelf = <A, I, R>(
|
|
26
35
|
item: Schema.Schema<A, I, R>,
|
|
27
36
|
): Schema.Schema<BoundArray<A>, BoundArray<I>, R> =>
|
|
@@ -29,16 +38,17 @@ const BoundArraySchemaFromSelf = <A, I, R>(
|
|
|
29
38
|
[item],
|
|
30
39
|
{
|
|
31
40
|
decode: (item) => (input, parseOptions, ast) => {
|
|
32
|
-
if (input
|
|
41
|
+
if (isBoundArrayLike(input) === true) {
|
|
33
42
|
const elements = ParseResult.decodeUnknown(Schema.Array(item))([...input], parseOptions)
|
|
34
|
-
return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(input
|
|
43
|
+
return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(getSizeLimit(input), as))
|
|
35
44
|
}
|
|
36
45
|
return ParseResult.fail(new ParseResult.Type(ast, input))
|
|
37
46
|
},
|
|
38
47
|
encode: (item) => (input, parseOptions, ast) => {
|
|
39
|
-
if (input
|
|
40
|
-
const
|
|
41
|
-
|
|
48
|
+
if (isBoundArrayLike(input) === true) {
|
|
49
|
+
const items = [...input]
|
|
50
|
+
const elements = ParseResult.encodeUnknown(Schema.Array(item))(items, parseOptions)
|
|
51
|
+
return ParseResult.map(elements, (is): BoundArray<I> => BoundArray.make(getSizeLimit(input), is))
|
|
42
52
|
}
|
|
43
53
|
return ParseResult.fail(new ParseResult.Type(ast, input))
|
|
44
54
|
},
|
|
@@ -47,7 +57,28 @@ const BoundArraySchemaFromSelf = <A, I, R>(
|
|
|
47
57
|
description: `BoundArray<${Schema.format(item)}>`,
|
|
48
58
|
pretty: () => (_) => `BoundArray(${_.length})`,
|
|
49
59
|
arbitrary: () => (fc) => fc.anything() as any,
|
|
50
|
-
equivalence: () =>
|
|
60
|
+
equivalence: () => {
|
|
61
|
+
const elementEquivalence = Schema.equivalence(item)
|
|
62
|
+
return (a: unknown, b: unknown) => {
|
|
63
|
+
if (a === b) {
|
|
64
|
+
return true
|
|
65
|
+
}
|
|
66
|
+
if (isBoundArrayLike(a) === false || isBoundArrayLike(b) === false) {
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
if (getSizeLimit(a) !== getSizeLimit(b) || a.length !== b.length) {
|
|
70
|
+
return false
|
|
71
|
+
}
|
|
72
|
+
const itemsA = [...a]
|
|
73
|
+
const itemsB = [...b]
|
|
74
|
+
for (let i = 0; i < itemsA.length; i++) {
|
|
75
|
+
if (elementEquivalence(itemsA[i] as any, itemsB[i] as any) === false) {
|
|
76
|
+
return false
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return true
|
|
80
|
+
}
|
|
81
|
+
},
|
|
51
82
|
},
|
|
52
83
|
)
|
|
53
84
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { isDevtoolsProtocolVersionSupported, resolveDevtoolsProtocolVersion } from '../version.ts'
|
|
4
|
+
|
|
5
|
+
describe('DevTools protocol compatibility', () => {
|
|
6
|
+
it('treats legacy pings without a protocol version as protocol 1', () => {
|
|
7
|
+
expect(resolveDevtoolsProtocolVersion(undefined)).toBe(1)
|
|
8
|
+
expect(isDevtoolsProtocolVersionSupported(undefined, [1])).toBe(true)
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('accepts supported protocol versions independent of package version', () => {
|
|
12
|
+
expect(isDevtoolsProtocolVersionSupported(1, [1])).toBe(true)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('rejects unsupported protocol versions', () => {
|
|
16
|
+
expect(isDevtoolsProtocolVersionSupported(2, [1])).toBe(false)
|
|
17
|
+
})
|
|
18
|
+
})
|
|
@@ -52,8 +52,8 @@ export class SyncHeadUnsubscribe extends LSDClientSessionReqResMessage('LSD.Clie
|
|
|
52
52
|
subscriptionId: Schema.String,
|
|
53
53
|
}) {}
|
|
54
54
|
export class SyncHeadRes extends LSDClientSessionReqResMessage('LSD.ClientSession.SyncHeadRes', {
|
|
55
|
-
local: EventSequenceNumber.
|
|
56
|
-
upstream: EventSequenceNumber.
|
|
55
|
+
local: EventSequenceNumber.Client.Composite,
|
|
56
|
+
upstream: EventSequenceNumber.Client.Composite,
|
|
57
57
|
subscriptionId: Schema.String,
|
|
58
58
|
}) {}
|
|
59
59
|
|
|
@@ -103,9 +103,26 @@ export class LiveQueriesRes extends LSDClientSessionReqResMessage('LSD.ClientSes
|
|
|
103
103
|
subscriptionId: Schema.String,
|
|
104
104
|
}) {}
|
|
105
105
|
|
|
106
|
-
export class Ping extends LSDClientSessionReqResMessage('LSD.ClientSession.Ping', {
|
|
106
|
+
export class Ping extends LSDClientSessionReqResMessage('LSD.ClientSession.Ping', {
|
|
107
|
+
devtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
108
|
+
}) {}
|
|
109
|
+
|
|
110
|
+
export class Pong extends LSDClientSessionReqResMessage('LSD.ClientSession.Pong', {
|
|
111
|
+
devtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
112
|
+
}) {}
|
|
107
113
|
|
|
108
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Sent by the app when the DevTools protocol isn't compatible.
|
|
116
|
+
* Contains package versions for display and protocol versions for the actual compatibility decision.
|
|
117
|
+
*/
|
|
118
|
+
export class VersionMismatch extends LSDClientSessionReqResMessage('LSD.ClientSession.VersionMismatch', {
|
|
119
|
+
/** The version running in the app */
|
|
120
|
+
appVersion: Schema.String,
|
|
121
|
+
/** The version that was sent by DevTools (that caused the mismatch) */
|
|
122
|
+
receivedVersion: Schema.String,
|
|
123
|
+
appDevtoolsProtocolVersion: Schema.Number,
|
|
124
|
+
receivedDevtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
125
|
+
}) {}
|
|
109
126
|
|
|
110
127
|
export class Disconnect extends LSDClientSessionChannelMessage('LSD.ClientSession.Disconnect', {}) {}
|
|
111
128
|
|
|
@@ -136,6 +153,7 @@ export const MessageFromApp = Schema.Union(
|
|
|
136
153
|
LiveQueriesRes,
|
|
137
154
|
Disconnect,
|
|
138
155
|
Pong,
|
|
156
|
+
VersionMismatch,
|
|
139
157
|
SyncHeadRes,
|
|
140
158
|
).annotations({ identifier: 'LSD.ClientSession.MessageFromApp' })
|
|
141
159
|
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export const NetworkStatus = Schema.Struct({
|
|
6
|
-
isConnected: Schema.Boolean,
|
|
7
|
-
timestampMs: Schema.Number,
|
|
8
|
-
/** Whether the network status devtools latch is closed. Used to simulate network disconnection. */
|
|
9
|
-
latchClosed: Schema.Boolean,
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
export type NetworkStatus = typeof NetworkStatus.Type
|
|
3
|
+
export { NetworkStatus } from '../sync/sync-backend.ts'
|
|
13
4
|
|
|
14
5
|
export const requestId = Schema.String
|
|
15
6
|
export const clientId = Schema.String
|
|
16
7
|
export const sessionId = Schema.String
|
|
17
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Display/package version field for DevTools messages.
|
|
10
|
+
* Compatibility is decided by the optional DevTools protocol version carried by handshake messages.
|
|
11
|
+
*/
|
|
12
|
+
export const liveStoreVersion = Schema.String
|
|
18
13
|
|
|
19
14
|
export const LSDMessage = <Tag extends string, Fields extends Schema.Struct.Fields>(tag: Tag, fields: Fields) =>
|
|
20
15
|
Schema.TaggedStruct(tag, {
|
|
@@ -94,7 +89,7 @@ export const LeaderReqResMessage = <
|
|
|
94
89
|
...fields.success,
|
|
95
90
|
}).annotations({ identifier: `${tag}.Response.Success` })
|
|
96
91
|
|
|
97
|
-
const Error = fields.error
|
|
92
|
+
const Error = fields.error !== undefined
|
|
98
93
|
? Schema.TaggedStruct(`${tag}.Response.Error`, {
|
|
99
94
|
requestId,
|
|
100
95
|
liveStoreVersion,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema, Transferable } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
-
import * as LiveStoreEvent from '../schema/LiveStoreEvent.ts'
|
|
3
|
+
import * as LiveStoreEvent from '../schema/LiveStoreEvent/mod.ts'
|
|
4
4
|
import { EventSequenceNumber } from '../schema/mod.ts'
|
|
5
5
|
import * as SyncState from '../sync/syncstate.ts'
|
|
6
6
|
import { LeaderReqResMessage, LSDMessage, LSDReqResMessage, NetworkStatus } from './devtools-messages-common.ts'
|
|
@@ -51,7 +51,7 @@ export class SyncHistoryUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHis
|
|
|
51
51
|
subscriptionId: Schema.String,
|
|
52
52
|
}) {}
|
|
53
53
|
export class SyncHistoryRes extends LSDReqResMessage('LSD.Leader.SyncHistoryRes', {
|
|
54
|
-
eventEncoded: LiveStoreEvent.
|
|
54
|
+
eventEncoded: LiveStoreEvent.Global.Encoded,
|
|
55
55
|
metadata: Schema.Option(Schema.JsonValue),
|
|
56
56
|
subscriptionId: Schema.String,
|
|
57
57
|
}) {}
|
|
@@ -63,8 +63,8 @@ export class SyncHeadUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHeadUn
|
|
|
63
63
|
subscriptionId: Schema.String,
|
|
64
64
|
}) {}
|
|
65
65
|
export class SyncHeadRes extends LSDReqResMessage('LSD.Leader.SyncHeadRes', {
|
|
66
|
-
local: EventSequenceNumber.
|
|
67
|
-
upstream: EventSequenceNumber.
|
|
66
|
+
local: EventSequenceNumber.Client.Composite,
|
|
67
|
+
upstream: EventSequenceNumber.Client.Composite,
|
|
68
68
|
subscriptionId: Schema.String,
|
|
69
69
|
}) {}
|
|
70
70
|
|
|
@@ -77,13 +77,14 @@ export class SnapshotRes extends LSDReqResMessage('LSD.Leader.SnapshotRes', {
|
|
|
77
77
|
export const LoadDatabaseFile = LeaderReqResMessage('LSD.Leader.LoadDatabaseFile', {
|
|
78
78
|
payload: {
|
|
79
79
|
data: Transferable.Uint8Array as Schema.Schema<Uint8Array<ArrayBuffer>>,
|
|
80
|
+
batchId: Schema.optional(Schema.String),
|
|
80
81
|
},
|
|
81
82
|
success: {},
|
|
82
83
|
error: {
|
|
83
84
|
cause: Schema.Union(
|
|
84
85
|
Schema.TaggedStruct('unsupported-file', {}),
|
|
85
86
|
Schema.TaggedStruct('unsupported-database', {}),
|
|
86
|
-
Schema.TaggedStruct('
|
|
87
|
+
Schema.TaggedStruct('unknown-error', { cause: Schema.Defect }),
|
|
87
88
|
),
|
|
88
89
|
},
|
|
89
90
|
})
|
|
@@ -95,7 +96,7 @@ export class SyncPull extends LSDMessage('LSD.Leader.SyncPull', {
|
|
|
95
96
|
|
|
96
97
|
// TODO refactor this to use push/pull semantics
|
|
97
98
|
export class CommitEventReq extends LSDReqResMessage('LSD.Leader.CommitEventReq', {
|
|
98
|
-
eventEncoded: LiveStoreEvent.
|
|
99
|
+
eventEncoded: LiveStoreEvent.Input.Encoded,
|
|
99
100
|
}) {}
|
|
100
101
|
|
|
101
102
|
export class CommitEventRes extends LSDReqResMessage('LSD.Leader.CommitEventRes', {}) {}
|
|
@@ -106,9 +107,26 @@ export class EventlogRes extends LSDReqResMessage('LSD.Leader.EventlogRes', {
|
|
|
106
107
|
eventlog: Transferable.Uint8Array as Schema.Schema<Uint8Array<ArrayBuffer>>,
|
|
107
108
|
}) {}
|
|
108
109
|
|
|
109
|
-
export class Ping extends LSDReqResMessage('LSD.Leader.Ping', {
|
|
110
|
+
export class Ping extends LSDReqResMessage('LSD.Leader.Ping', {
|
|
111
|
+
devtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
112
|
+
}) {}
|
|
113
|
+
|
|
114
|
+
export class Pong extends LSDReqResMessage('LSD.Leader.Pong', {
|
|
115
|
+
devtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
116
|
+
}) {}
|
|
110
117
|
|
|
111
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Sent by the app when the DevTools protocol isn't compatible.
|
|
120
|
+
* Contains package versions for display and protocol versions for the actual compatibility decision.
|
|
121
|
+
*/
|
|
122
|
+
export class VersionMismatch extends LSDReqResMessage('LSD.Leader.VersionMismatch', {
|
|
123
|
+
/** The version running in the app */
|
|
124
|
+
appVersion: Schema.String,
|
|
125
|
+
/** The version that was sent by DevTools (that caused the mismatch) */
|
|
126
|
+
receivedVersion: Schema.String,
|
|
127
|
+
appDevtoolsProtocolVersion: Schema.Number,
|
|
128
|
+
receivedDevtoolsProtocolVersion: Schema.optional(Schema.Number),
|
|
129
|
+
}) {}
|
|
112
130
|
|
|
113
131
|
export class Disconnect extends LSDReqResMessage('LSD.Leader.Disconnect', {}) {}
|
|
114
132
|
|
|
@@ -133,7 +151,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
|
|
|
133
151
|
// liveStoreVersion,
|
|
134
152
|
// },
|
|
135
153
|
// success: DatabaseFileInfo,
|
|
136
|
-
// failure:
|
|
154
|
+
// failure: UnknownError,
|
|
137
155
|
// }) {}
|
|
138
156
|
|
|
139
157
|
// export class NetworkStatus_ extends Schema.TaggedRequest<NetworkStatus_>()('LSD.Leader.NetworkStatus', {
|
|
@@ -142,7 +160,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
|
|
|
142
160
|
// liveStoreVersion,
|
|
143
161
|
// },
|
|
144
162
|
// success: NetworkStatus,
|
|
145
|
-
// failure:
|
|
163
|
+
// failure: UnknownError,
|
|
146
164
|
// }) {}
|
|
147
165
|
|
|
148
166
|
// export const MessageToApp_ = Schema.Union(DatabaseFileInfo_, NetworkStatus_)
|
|
@@ -180,6 +198,7 @@ export const MessageFromApp = Schema.Union(
|
|
|
180
198
|
NetworkStatusRes,
|
|
181
199
|
CommitEventRes,
|
|
182
200
|
Pong,
|
|
201
|
+
VersionMismatch,
|
|
183
202
|
DatabaseFileInfoRes,
|
|
184
203
|
SyncHistoryRes,
|
|
185
204
|
SyncingInfoRes,
|
|
@@ -21,6 +21,12 @@ export const SessionInfo = Schema.TaggedStruct('SessionInfo', {
|
|
|
21
21
|
sessionId: Schema.String,
|
|
22
22
|
schemaAlias: Schema.String,
|
|
23
23
|
isLeader: Schema.Boolean,
|
|
24
|
+
/**
|
|
25
|
+
* Browser origin that produced this SessionInfo (for example, 'http://localhost:5173').
|
|
26
|
+
* Set by browser-based publishers so DevTools can defensively filter by origin.
|
|
27
|
+
* Currently only needed by the browser extension; non‑browser publishers typically set `undefined`.
|
|
28
|
+
*/
|
|
29
|
+
origin: Schema.UndefinedOr(Schema.String),
|
|
24
30
|
})
|
|
25
31
|
export type SessionInfo = typeof SessionInfo.Type
|
|
26
32
|
|
|
@@ -55,7 +61,7 @@ export const requestSessionInfoSubscription = ({
|
|
|
55
61
|
webChannel: WebChannel.WebChannel<Message, Message>
|
|
56
62
|
pollInterval?: Duration.DurationInput
|
|
57
63
|
staleTimeout?: Duration.DurationInput
|
|
58
|
-
}): Effect.Effect<Subscribable.Subscribable<
|
|
64
|
+
}): Effect.Effect<Subscribable.Subscribable<HashSet.HashSet<SessionInfo>>, ParseResult.ParseError, Scope.Scope> =>
|
|
59
65
|
Effect.gen(function* () {
|
|
60
66
|
yield* webChannel
|
|
61
67
|
.send(RequestSessions.make({}))
|
|
@@ -94,8 +100,5 @@ export const requestSessionInfoSubscription = ({
|
|
|
94
100
|
Effect.forkScoped,
|
|
95
101
|
)
|
|
96
102
|
|
|
97
|
-
return Subscribable.make({
|
|
98
|
-
get: sessionInfoSubRef.get.pipe(Effect.map((sessionInfos) => new Set(sessionInfos))),
|
|
99
|
-
changes: sessionInfoSubRef.changes.pipe(Stream.map((sessionInfos) => new Set(sessionInfos))),
|
|
100
|
-
})
|
|
103
|
+
return Subscribable.make({ get: sessionInfoSubRef.get, changes: sessionInfoSubRef.changes })
|
|
101
104
|
})
|