@livestore/common 0.4.0 → 0.5.0-dev.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 +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/MaterializationJournal.d.ts +44 -0
- package/dist/MaterializationJournal.d.ts.map +1 -0
- package/dist/MaterializationJournal.js +112 -0
- package/dist/MaterializationJournal.js.map +1 -0
- package/dist/StateHead.d.ts +26 -0
- package/dist/StateHead.d.ts.map +1 -0
- package/dist/StateHead.js +50 -0
- package/dist/StateHead.js.map +1 -0
- package/dist/WorkerTransportError.d.ts +3 -3
- package/dist/WorkerTransportError.d.ts.map +1 -1
- package/dist/WorkerTransportError.js +3 -3
- package/dist/WorkerTransportError.js.map +1 -1
- package/dist/__tests__/fixture.d.ts +1 -1
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +3 -3
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/adapter-types.d.ts +29 -57
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +20 -37
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts +56 -56
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +28 -41
- package/dist/debug-info.js.map +1 -1
- package/dist/defs.d.ts +9 -9
- package/dist/defs.js +2 -2
- package/dist/devtools/devtools-compatibility.test.js +1 -0
- package/dist/devtools/devtools-compatibility.test.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +520 -332
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +76 -74
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +27 -27
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +5 -5
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +405 -343
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +101 -89
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +18 -19
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +8 -5
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +4 -5
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +9 -5
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +45 -69
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -16
- 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 +66 -18
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +519 -461
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/RejectedPushError.d.ts +67 -36
- package/dist/leader-thread/RejectedPushError.d.ts.map +1 -1
- package/dist/leader-thread/RejectedPushError.js +24 -5
- package/dist/leader-thread/RejectedPushError.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +1 -0
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +9 -8
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +4 -4
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +6 -6
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +33 -17
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +9 -5
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +25 -35
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.test.js +7 -7
- package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +2 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +4 -0
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +18 -39
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -6
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -3
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/stream-events.d.ts +4 -7
- package/dist/leader-thread/stream-events.d.ts.map +1 -1
- package/dist/leader-thread/stream-events.js +13 -16
- package/dist/leader-thread/stream-events.js.map +1 -1
- package/dist/leader-thread/types.d.ts +32 -69
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +5 -5
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +5 -30
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +1 -32
- package/dist/logging.js.map +1 -1
- package/dist/make-client-session.d.ts +1 -2
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +3 -3
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +0 -1
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +7 -35
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +2 -3
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +2 -7
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +28 -26
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +4 -4
- package/dist/schema/EventDef/define.d.ts.map +1 -1
- package/dist/schema/EventDef/define.js +5 -5
- package/dist/schema/EventDef/define.js.map +1 -1
- package/dist/schema/EventDef/define.test.d.ts +2 -0
- package/dist/schema/EventDef/define.test.d.ts.map +1 -0
- package/dist/schema/EventDef/define.test.js +23 -0
- package/dist/schema/EventDef/define.test.js.map +1 -0
- package/dist/schema/EventDef/deprecated.d.ts +8 -13
- package/dist/schema/EventDef/deprecated.d.ts.map +1 -1
- package/dist/schema/EventDef/deprecated.js +12 -13
- package/dist/schema/EventDef/deprecated.js.map +1 -1
- package/dist/schema/EventDef/deprecated.test.js +1 -1
- package/dist/schema/EventDef/deprecated.test.js.map +1 -1
- package/dist/schema/EventDef/event-def.d.ts +1 -1
- package/dist/schema/EventDef/event-def.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/client.d.ts +12 -12
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/client.js +8 -9
- package/dist/schema/EventSequenceNumber/client.js.map +1 -1
- package/dist/schema/EventSequenceNumber/global.d.ts +2 -2
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/global.js +1 -1
- package/dist/schema/EventSequenceNumber/global.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +5 -5
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent/client.d.ts +50 -179
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/client.js +32 -29
- package/dist/schema/LiveStoreEvent/client.js.map +1 -1
- package/dist/schema/LiveStoreEvent/client.test.js +11 -2
- package/dist/schema/LiveStoreEvent/client.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +7 -7
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/global.d.ts +6 -6
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/global.js +1 -1
- package/dist/schema/LiveStoreEvent/global.js.map +1 -1
- package/dist/schema/LiveStoreEvent/input.d.ts +5 -5
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/input.js +3 -3
- package/dist/schema/LiveStoreEvent/input.js.map +1 -1
- package/dist/schema/mod.d.ts +1 -0
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +1 -0
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +3 -2
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +12 -17
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +23 -20
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +29 -8
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +13 -15
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +57 -31
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +118 -72
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.test.js +2 -2
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -2
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +13 -4
- 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 +9 -9
- 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 +8 -13
- 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 +27 -16
- 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 +13 -11
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +5 -3
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +1 -3
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +1 -1
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/persistence.d.ts +11 -0
- package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
- package/dist/schema/state/sqlite/persistence.js +10 -0
- package/dist/schema/state/sqlite/persistence.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts +7 -7
- 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 +27 -23
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +3 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +16 -14
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +362 -596
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +102 -134
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +2 -2
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +328 -106
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js +33 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.d.ts +16 -19
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +53 -3
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +153 -36
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts.map +1 -1
- package/dist/schema/unknown-events.js +2 -1
- package/dist/schema/unknown-events.js.map +1 -1
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +2 -2
- package/dist/session-id-symbol.d.ts +29 -0
- package/dist/session-id-symbol.d.ts.map +1 -0
- package/dist/session-id-symbol.js +44 -0
- package/dist/session-id-symbol.js.map +1 -0
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +8 -10
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/types.d.ts +6 -7
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sql-queries/types.js.map +1 -1
- package/dist/sqlite-db-helper.d.ts +21 -1
- package/dist/sqlite-db-helper.d.ts.map +1 -1
- package/dist/sqlite-db-helper.js +37 -2
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +3 -6
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sqlite-types.js +3 -3
- package/dist/sqlite-types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +38 -16
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +196 -66
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +12 -18
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +2 -2
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +2 -3
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +54 -33
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/mock-sync-backend.test.d.ts +2 -0
- package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.test.js +49 -0
- package/dist/sync/mock-sync-backend.test.js.map +1 -0
- package/dist/sync/next/history-dag-common.d.ts +4 -0
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +52 -31
- 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 +2 -1
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts +7 -7
- package/dist/sync/next/test/event-fixtures.js +1 -1
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
- package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
- package/dist/sync/next/test/history-dag-common.test.js +73 -0
- package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
- package/dist/sync/sync-backend-kv.d.ts.map +1 -1
- package/dist/sync/sync-backend-kv.js +4 -2
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +15 -15
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/sync-backend.js +9 -5
- package/dist/sync/sync-backend.js.map +1 -1
- package/dist/sync/sync.d.ts +1 -1
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +97 -173
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +34 -37
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +100 -61
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +15 -16
- package/dist/sync/transport-chunking.d.ts.map +1 -1
- package/dist/sync/transport-chunking.js +23 -32
- package/dist/sync/transport-chunking.js.map +1 -1
- package/dist/util.d.ts +11 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +19 -2
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +19 -37
- package/src/ClientSessionLeaderThreadProxy.ts +1 -1
- package/src/MaterializationJournal.ts +184 -0
- package/src/StateHead.ts +80 -0
- package/src/WorkerTransportError.ts +4 -4
- package/src/__tests__/fixture.ts +3 -3
- package/src/adapter-types.ts +24 -61
- package/src/debug-info.ts +50 -70
- package/src/defs.ts +2 -2
- package/src/devtools/devtools-compatibility.test.ts +1 -0
- package/src/devtools/devtools-messages-client-session.ts +56 -65
- package/src/devtools/devtools-messages-common.ts +12 -11
- package/src/devtools/devtools-messages-leader.ts +71 -69
- package/src/devtools/devtools-sessioninfo.ts +13 -11
- package/src/devtools/mod.ts +4 -5
- package/src/errors.ts +46 -34
- package/src/index.ts +8 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +794 -691
- package/src/leader-thread/RejectedPushError.ts +40 -27
- package/src/leader-thread/connection.ts +12 -8
- package/src/leader-thread/eventlog.ts +7 -7
- package/src/leader-thread/leader-worker-devtools.ts +37 -19
- package/src/leader-thread/make-leader-thread-layer.test.ts +7 -7
- package/src/leader-thread/make-leader-thread-layer.ts +56 -53
- package/src/leader-thread/materialize-event.ts +13 -8
- package/src/leader-thread/recreate-db.ts +24 -59
- package/src/leader-thread/shutdown-channel.ts +3 -14
- package/src/leader-thread/stream-events.ts +104 -101
- package/src/leader-thread/types.ts +24 -62
- package/src/logging.ts +5 -52
- package/src/make-client-session.ts +6 -6
- package/src/materializer-helper.ts +8 -37
- package/src/otel.ts +5 -14
- package/src/rematerialize-from-eventlog.ts +97 -94
- package/src/schema/EventDef/define.test.ts +28 -0
- package/src/schema/EventDef/define.ts +20 -19
- package/src/schema/EventDef/deprecated.test.ts +1 -8
- package/src/schema/EventDef/deprecated.ts +17 -20
- package/src/schema/EventDef/event-def.ts +2 -4
- package/src/schema/EventSequenceNumber/client.ts +8 -9
- package/src/schema/EventSequenceNumber/global.ts +1 -1
- package/src/schema/EventSequenceNumber.test.ts +5 -5
- package/src/schema/LiveStoreEvent/client.test.ts +17 -4
- package/src/schema/LiveStoreEvent/client.ts +36 -35
- package/src/schema/LiveStoreEvent/for-event-def.ts +7 -7
- package/src/schema/LiveStoreEvent/global.ts +1 -1
- package/src/schema/LiveStoreEvent/input.ts +6 -6
- package/src/schema/mod.ts +1 -0
- package/src/schema/schema.ts +3 -2
- package/src/schema/state/sqlite/client-document-def.test.ts +32 -13
- package/src/schema/state/sqlite/client-document-def.ts +95 -80
- package/src/schema/state/sqlite/column-annotations.test.ts +26 -45
- package/src/schema/state/sqlite/column-annotations.ts +26 -30
- package/src/schema/state/sqlite/column-def.test.ts +132 -77
- package/src/schema/state/sqlite/column-def.ts +72 -37
- package/src/schema/state/sqlite/column-spec.test.ts +2 -2
- package/src/schema/state/sqlite/column-spec.ts +3 -2
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +15 -5
- package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -16
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +25 -31
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +35 -21
- package/src/schema/state/sqlite/mod.ts +2 -4
- package/src/schema/state/sqlite/persistence.ts +11 -0
- package/src/schema/state/sqlite/query-builder/api.ts +9 -9
- package/src/schema/state/sqlite/query-builder/astToSql.ts +31 -26
- package/src/schema/state/sqlite/query-builder/impl.test.ts +433 -669
- package/src/schema/state/sqlite/query-builder/impl.ts +19 -15
- package/src/schema/state/sqlite/schema-helpers.ts +1 -1
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +2 -2
- package/src/schema/state/sqlite/system-tables/state-tables.ts +41 -1
- package/src/schema/state/sqlite/table-def.test.ts +204 -66
- package/src/schema/state/sqlite/table-def.ts +96 -45
- package/src/schema/unknown-events.ts +3 -2
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +2 -2
- package/src/session-id-symbol.ts +59 -0
- package/src/sql-queries/sql-queries.ts +8 -12
- package/src/sql-queries/types.ts +6 -7
- package/src/sqlite-db-helper.ts +64 -2
- package/src/sqlite-types.ts +5 -8
- package/src/sync/ClientSessionSyncProcessor.ts +303 -119
- package/src/sync/errors.ts +14 -12
- package/src/sync/mock-sync-backend.test.ts +78 -0
- package/src/sync/mock-sync-backend.ts +93 -47
- package/src/sync/next/history-dag-common.ts +60 -34
- package/src/sync/next/history-dag.ts +4 -1
- package/src/sync/next/test/compact-events.calculator.test.ts +2 -2
- package/src/sync/next/test/event-fixtures.ts +1 -1
- package/src/sync/next/test/history-dag-common.test.ts +87 -0
- package/src/sync/sync-backend-kv.ts +4 -2
- package/src/sync/sync-backend.ts +15 -15
- package/src/sync/sync.ts +1 -1
- package/src/sync/syncstate.test.ts +191 -140
- package/src/sync/syncstate.ts +63 -53
- package/src/sync/transport-chunking.ts +34 -39
- package/src/util.ts +18 -9
- package/src/version.ts +1 -2
- package/dist/sql-queries/misc.d.ts +0 -2
- package/dist/sql-queries/misc.d.ts.map +0 -1
- package/dist/sql-queries/misc.js +0 -2
- package/dist/sql-queries/misc.js.map +0 -1
- package/src/sql-queries/misc.ts +0 -2
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { casesHandled } from '@livestore/utils';
|
|
2
1
|
import { Effect, Queue } from '@livestore/utils/effect';
|
|
3
2
|
import { migrateDb, rematerializeFromEventlog, UnknownError, } from "../index.js";
|
|
4
3
|
import { configureConnection } from "./connection.js";
|
|
5
4
|
export const recreateDb = ({ dbState, dbEventlog, schema, bootStatusQueue, materializeEvent, }) => Effect.gen(function* () {
|
|
6
|
-
const
|
|
7
|
-
let migrationsReport = { migrations: [] };
|
|
5
|
+
const hooks = schema.state.sqlite.migrations.hooks;
|
|
8
6
|
yield* Effect.addFinalizer(Effect.fn('recreateDb:finalizer')(function* (ex) {
|
|
9
7
|
if (ex._tag === 'Failure')
|
|
10
8
|
dbState.destroy();
|
|
@@ -15,43 +13,24 @@ export const recreateDb = ({ dbState, dbEventlog, schema, bootStatusQueue, mater
|
|
|
15
13
|
// const tmpDb = yield* makeSqliteDb({ _tag: 'in-memory' })
|
|
16
14
|
const tmpDb = dbState;
|
|
17
15
|
yield* configureConnection(tmpDb, { foreignKeys: true });
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
yield* Effect.tryAll(() => hooks?.pre?.(tmpDb)).pipe(UnknownError.mapToUnknownError);
|
|
26
|
-
return { migrationsReport, tmpDb };
|
|
16
|
+
// @effect-diagnostics-next-line anyUnknownInErrorContext:off -- user hook errors are immediately normalized to LiveStore UnknownError
|
|
17
|
+
yield* Effect.trySyncOrPromiseOrEffect(() => hooks?.init?.(tmpDb)).pipe(UnknownError.mapToUnknownError);
|
|
18
|
+
const migrationsReport = yield* migrateDb({
|
|
19
|
+
db: tmpDb,
|
|
20
|
+
schema,
|
|
21
|
+
onProgress: ({ done, total }) => Queue.offer(bootStatusQueue, { stage: 'migrating', progress: { done, total } }),
|
|
27
22
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
40
|
-
yield* Effect.tryAll(() => hooks?.post?.(initResult.tmpDb)).pipe(UnknownError.mapToUnknownError);
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
case 'manual': {
|
|
44
|
-
const oldDbData = dbState.export();
|
|
45
|
-
migrationsReport = { migrations: [] };
|
|
46
|
-
const newDbData = yield* Effect.tryAll(() => migrationOptions.migrate(oldDbData)).pipe(UnknownError.mapToUnknownError);
|
|
47
|
-
tmpDb.import(newDbData);
|
|
48
|
-
// TODO validate schema
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
default: {
|
|
52
|
-
casesHandled(migrationOptions);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
23
|
+
// @effect-diagnostics-next-line anyUnknownInErrorContext:off -- user hook errors are immediately normalized to LiveStore UnknownError
|
|
24
|
+
yield* Effect.trySyncOrPromiseOrEffect(() => hooks?.pre?.(tmpDb)).pipe(UnknownError.mapToUnknownError);
|
|
25
|
+
yield* rematerializeFromEventlog({
|
|
26
|
+
// db: tmpDb,
|
|
27
|
+
dbEventlog,
|
|
28
|
+
schema,
|
|
29
|
+
materializeEvent,
|
|
30
|
+
onProgress: ({ done, total }) => Queue.offer(bootStatusQueue, { stage: 'rehydrating', progress: { done, total } }),
|
|
31
|
+
});
|
|
32
|
+
// @effect-diagnostics-next-line anyUnknownInErrorContext:off -- user hook errors are immediately normalized to LiveStore UnknownError
|
|
33
|
+
yield* Effect.trySyncOrPromiseOrEffect(() => hooks?.post?.(tmpDb)).pipe(UnknownError.mapToUnknownError);
|
|
55
34
|
// TODO bring back
|
|
56
35
|
// Import the temporary in-memory database into the persistent database
|
|
57
36
|
// yield* Effect.sync(() => db.import(tmpDb)).pipe(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recreate-db.js","sourceRoot":"","sources":["../../src/leader-thread/recreate-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"recreate-db.js","sourceRoot":"","sources":["../../src/leader-thread/recreate-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Schema } from '@livestore/utils/effect';
|
|
1
|
+
import { type WebChannel, Schema } from '@livestore/utils/effect';
|
|
3
2
|
import { BackendIdMismatchError, IntentionalShutdownCause, MaterializeError, UnknownError } from '../index.ts';
|
|
4
|
-
declare const
|
|
5
|
-
export declare class All extends All_base {
|
|
6
|
-
}
|
|
3
|
+
export declare const All: Schema.Union<readonly [typeof IntentionalShutdownCause, typeof UnknownError, typeof BackendIdMismatchError, typeof MaterializeError]>;
|
|
7
4
|
/**
|
|
8
5
|
* Used internally by an adapter to shutdown gracefully.
|
|
9
6
|
*/
|
|
10
7
|
export type ShutdownChannel = WebChannel.WebChannel<typeof All.Type, typeof All.Type>;
|
|
11
|
-
export {};
|
|
12
8
|
//# sourceMappingURL=shutdown-channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-channel.d.ts","sourceRoot":"","sources":["../../src/leader-thread/shutdown-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shutdown-channel.d.ts","sourceRoot":"","sources":["../../src/leader-thread/shutdown-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9G,eAAO,MAAM,GAAG,uIAAmG,CAAA;AAEnH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Schema } from '@livestore/utils/effect';
|
|
2
|
-
import { BackendIdMismatchError, IntentionalShutdownCause, MaterializeError, UnknownError
|
|
3
|
-
export
|
|
4
|
-
}
|
|
2
|
+
import { BackendIdMismatchError, IntentionalShutdownCause, MaterializeError, UnknownError } from "../index.js";
|
|
3
|
+
export const All = Schema.Union([IntentionalShutdownCause, UnknownError, BackendIdMismatchError, MaterializeError]);
|
|
5
4
|
//# sourceMappingURL=shutdown-channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-channel.js","sourceRoot":"","sources":["../../src/leader-thread/shutdown-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shutdown-channel.js","sourceRoot":"","sources":["../../src/leader-thread/shutdown-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9G,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,wBAAwB,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Stream } from '@livestore/utils/effect';
|
|
1
|
+
import { type Subscribable, Stream } from '@livestore/utils/effect';
|
|
3
2
|
import { type LiveStoreEvent } from '../schema/mod.ts';
|
|
4
3
|
import type * as SyncState from '../sync/syncstate.ts';
|
|
5
4
|
import type { LeaderSqliteDb, StreamEventsOptions } from './types.ts';
|
|
@@ -12,19 +11,17 @@ import type { LeaderSqliteDb, StreamEventsOptions } from './types.ts';
|
|
|
12
11
|
* The batch size is set to 100 by default as this was meassured to provide the
|
|
13
12
|
* best performance and 1000 as the upper limit.
|
|
14
13
|
*
|
|
15
|
-
* Adapters that call this helper:
|
|
14
|
+
* Adapters that call this helper include:
|
|
16
15
|
* - `packages/@livestore/adapter-web/src/in-memory/in-memory-adapter.ts`
|
|
17
16
|
* - `packages/@livestore/adapter-web/src/web-worker/leader-worker/make-leader-worker.ts`
|
|
18
|
-
* - `packages/@livestore/adapter-node/src/client-session/adapter.ts`
|
|
19
|
-
* - `packages/@livestore/adapter-node/src/make-leader-worker.ts`
|
|
20
17
|
* - `packages/@livestore/adapter-cloudflare/src/make-adapter.ts`
|
|
18
|
+
* - external leader-thread adapters
|
|
21
19
|
*
|
|
22
20
|
* Each caller resolves dependencies inside the leader scope before invoking this helper,
|
|
23
21
|
* so the stream stays environment-agnostic and does not leak `LeaderThreadCtx` into runtime
|
|
24
22
|
* entry points such as `Store.eventsStream`.
|
|
25
23
|
*
|
|
26
24
|
* Test files:
|
|
27
|
-
* Unit: `tests/package-common/src/leader-thread/stream-events.test.ts`
|
|
28
25
|
* Integration: `packages/@livestore/livestore/src/store/store-eventstream.test.ts`
|
|
29
26
|
* Performance: `tests/perf-eventlog/tests/suites/event-streaming.test.ts`
|
|
30
27
|
*
|
|
@@ -45,7 +42,7 @@ import type { LeaderSqliteDb, StreamEventsOptions } from './types.ts';
|
|
|
45
42
|
* Fetch plans into sink and decompose into windows
|
|
46
43
|
* https://gist.github.com/slashv/a8f55f50121c080937f42e44b4039ac8
|
|
47
44
|
*
|
|
48
|
-
*
|
|
45
|
+
* Queue and Latch approach (suggestion by Tim Smart)
|
|
49
46
|
* https://gist.github.com/slashv/d6b12395c85415bf0d3363372a1636c3
|
|
50
47
|
*/
|
|
51
48
|
export declare const streamEventsWithSyncState: ({ dbEventlog, syncState, options, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-events.d.ts","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stream-events.d.ts","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE1F,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,yBAAyB,GAAI,qCAIvC;IACD,UAAU,EAAE,cAAc,CAAA;IAC1B,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACzD,OAAO,EAAE,mBAAmB,CAAA;CAC7B,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAsJ9C,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Effect, Option, Queue, Stream } from '@livestore/utils/effect';
|
|
2
2
|
import { EventSequenceNumber } from "../schema/mod.js";
|
|
3
3
|
import * as Eventlog from "./eventlog.js";
|
|
4
4
|
/**
|
|
@@ -10,19 +10,17 @@ import * as Eventlog from "./eventlog.js";
|
|
|
10
10
|
* The batch size is set to 100 by default as this was meassured to provide the
|
|
11
11
|
* best performance and 1000 as the upper limit.
|
|
12
12
|
*
|
|
13
|
-
* Adapters that call this helper:
|
|
13
|
+
* Adapters that call this helper include:
|
|
14
14
|
* - `packages/@livestore/adapter-web/src/in-memory/in-memory-adapter.ts`
|
|
15
15
|
* - `packages/@livestore/adapter-web/src/web-worker/leader-worker/make-leader-worker.ts`
|
|
16
|
-
* - `packages/@livestore/adapter-node/src/client-session/adapter.ts`
|
|
17
|
-
* - `packages/@livestore/adapter-node/src/make-leader-worker.ts`
|
|
18
16
|
* - `packages/@livestore/adapter-cloudflare/src/make-adapter.ts`
|
|
17
|
+
* - external leader-thread adapters
|
|
19
18
|
*
|
|
20
19
|
* Each caller resolves dependencies inside the leader scope before invoking this helper,
|
|
21
20
|
* so the stream stays environment-agnostic and does not leak `LeaderThreadCtx` into runtime
|
|
22
21
|
* entry points such as `Store.eventsStream`.
|
|
23
22
|
*
|
|
24
23
|
* Test files:
|
|
25
|
-
* Unit: `tests/package-common/src/leader-thread/stream-events.test.ts`
|
|
26
24
|
* Integration: `packages/@livestore/livestore/src/store/store-eventstream.test.ts`
|
|
27
25
|
* Performance: `tests/perf-eventlog/tests/suites/event-streaming.test.ts`
|
|
28
26
|
*
|
|
@@ -43,13 +41,13 @@ import * as Eventlog from "./eventlog.js";
|
|
|
43
41
|
* Fetch plans into sink and decompose into windows
|
|
44
42
|
* https://gist.github.com/slashv/a8f55f50121c080937f42e44b4039ac8
|
|
45
43
|
*
|
|
46
|
-
*
|
|
44
|
+
* Queue and Latch approach (suggestion by Tim Smart)
|
|
47
45
|
* https://gist.github.com/slashv/d6b12395c85415bf0d3363372a1636c3
|
|
48
46
|
*/
|
|
49
47
|
export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) => {
|
|
50
48
|
const initialCursor = options.since ?? EventSequenceNumber.Client.ROOT;
|
|
51
49
|
const batchSize = options.batchSize ?? 100;
|
|
52
|
-
return Stream.
|
|
50
|
+
return Stream.unwrap(Effect.gen(function* () {
|
|
53
51
|
/**
|
|
54
52
|
* Single-element Queue allows suspending the event stream until head
|
|
55
53
|
* advances because Queue.take is a suspending effect. SubscriptionRef in
|
|
@@ -79,7 +77,7 @@ export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) =
|
|
|
79
77
|
}
|
|
80
78
|
return false;
|
|
81
79
|
}), Stream.runForEach((head) => Queue.offer(headQueue, head)), Effect.forkScoped);
|
|
82
|
-
return Stream.
|
|
80
|
+
return Stream.paginate({ cursor: initialCursor, head: EventSequenceNumber.Client.ROOT }, ({ cursor, head }) => Effect.gen(function* () {
|
|
83
81
|
/**
|
|
84
82
|
* Early check guards agains:
|
|
85
83
|
* since === until : Prevent empty query
|
|
@@ -87,7 +85,8 @@ export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) =
|
|
|
87
85
|
*/
|
|
88
86
|
if (options.until !== undefined &&
|
|
89
87
|
EventSequenceNumber.Client.isGreaterThanOrEqual(cursor, options.until) === true) {
|
|
90
|
-
|
|
88
|
+
const done = [[], Option.none()];
|
|
89
|
+
return done;
|
|
91
90
|
}
|
|
92
91
|
/**
|
|
93
92
|
* There are two scenarios where we take the next head from the headQueue:
|
|
@@ -130,10 +129,10 @@ export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) =
|
|
|
130
129
|
client: EventSequenceNumber.Client.DEFAULT,
|
|
131
130
|
});
|
|
132
131
|
/**
|
|
133
|
-
* Eventlog.getEventsFromEventlog returns a
|
|
134
|
-
*
|
|
132
|
+
* Eventlog.getEventsFromEventlog returns a batch from each query
|
|
133
|
+
* which is what we emit at each itteration.
|
|
135
134
|
*/
|
|
136
|
-
const
|
|
135
|
+
const events = yield* Eventlog.getEventsFromEventlog({
|
|
137
136
|
dbEventlog,
|
|
138
137
|
options: {
|
|
139
138
|
...options,
|
|
@@ -157,10 +156,8 @@ export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) =
|
|
|
157
156
|
'livestore.streamEvents.batchSize': batchSize,
|
|
158
157
|
'livestore.streamEvents.waitedForHead': waitForHead,
|
|
159
158
|
};
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
nextState,
|
|
163
|
-
]).pipe(Effect.withSpan('@livestore/common:streamEvents:segment', { attributes: spanAttributes }));
|
|
159
|
+
const result = [events, nextState];
|
|
160
|
+
return yield* Effect.succeed(result).pipe(Effect.withSpan('@livestore/common:streamEvents:segment', { attributes: spanAttributes }));
|
|
164
161
|
}));
|
|
165
162
|
}));
|
|
166
163
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-events.js","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream-events.js","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Context, Schema } from '@livestore/utils/effect';
|
|
1
|
+
import { type Deferred, type Effect, type HttpClient, type Latch, type Option, type Queue, type Scope, type Subscribable, type SubscriptionRef, Context, Schema } from '@livestore/utils/effect';
|
|
3
2
|
import type { MeshNode } from '@livestore/webmesh';
|
|
4
3
|
import type { MigrationsReport } from '../defs.ts';
|
|
5
4
|
import type { MaterializeError } from '../errors.ts';
|
|
6
|
-
import type { BootStatus, Devtools, MakeSqliteDb, PersistenceInfo, SqliteDb, SyncBackend, UnknownError
|
|
7
|
-
import type { RejectedPushError } from './RejectedPushError.ts';
|
|
5
|
+
import type { BootStatus, Devtools, MakeSqliteDb, PersistenceInfo, SqliteDb, SyncBackend, UnknownError } from '../index.ts';
|
|
8
6
|
import { EventSequenceNumber, type LiveStoreEvent, type LiveStoreSchema } from '../schema/mod.ts';
|
|
9
|
-
import type * as
|
|
7
|
+
import type * as LeaderSyncProcessor from './LeaderSyncProcessor.ts';
|
|
10
8
|
import type { ShutdownChannel } from './shutdown-channel.ts';
|
|
11
9
|
export type ShutdownState = 'running' | 'shutting-down';
|
|
12
10
|
export declare const InitialSyncOptionsSkip: Schema.TaggedStruct<"Skip", {}>;
|
|
13
11
|
export type InitialSyncOptionsSkip = typeof InitialSyncOptionsSkip.Type;
|
|
14
12
|
export declare const InitialSyncOptionsBlocking: Schema.TaggedStruct<"Blocking", {
|
|
15
|
-
timeout: Schema.Union<[
|
|
13
|
+
readonly timeout: Schema.Union<readonly [Schema.DurationFromMillis, Schema.Finite]>;
|
|
16
14
|
}>;
|
|
17
15
|
export type InitialSyncOptionsBlocking = typeof InitialSyncOptionsBlocking.Type;
|
|
18
|
-
export declare const InitialSyncOptions: Schema.Union<[Schema.TaggedStruct<"Skip", {}>, Schema.TaggedStruct<"Blocking", {
|
|
19
|
-
timeout: Schema.Union<[
|
|
16
|
+
export declare const InitialSyncOptions: Schema.Union<readonly [Schema.TaggedStruct<"Skip", {}>, Schema.TaggedStruct<"Blocking", {
|
|
17
|
+
readonly timeout: Schema.Union<readonly [Schema.DurationFromMillis, Schema.Finite]>;
|
|
20
18
|
}>]>;
|
|
21
19
|
export type InitialSyncOptions = typeof InitialSyncOptions.Type;
|
|
22
20
|
export type InitialSyncInfo = Option.Option<{
|
|
23
21
|
eventSequenceNumber: EventSequenceNumber.Global.Type;
|
|
24
|
-
metadata: Option.Option<Schema.
|
|
22
|
+
metadata: Option.Option<Schema.Json>;
|
|
25
23
|
}>;
|
|
26
24
|
export type LeaderSqliteDb = SqliteDb<{
|
|
27
25
|
dbPointer: number;
|
|
@@ -43,14 +41,14 @@ export type DevtoolsOptions = {
|
|
|
43
41
|
};
|
|
44
42
|
export type DevtoolsContext = {
|
|
45
43
|
enabled: true;
|
|
46
|
-
syncBackendLatch:
|
|
44
|
+
syncBackendLatch: Latch.Latch;
|
|
47
45
|
syncBackendLatchState: SubscriptionRef.SubscriptionRef<{
|
|
48
46
|
latchClosed: boolean;
|
|
49
47
|
}>;
|
|
50
48
|
} | {
|
|
51
49
|
enabled: false;
|
|
52
50
|
};
|
|
53
|
-
declare const LeaderThreadCtx_base: Context.
|
|
51
|
+
declare const LeaderThreadCtx_base: Context.ServiceClass<LeaderThreadCtx, "LeaderThreadCtx", {
|
|
54
52
|
schema: LiveStoreSchema;
|
|
55
53
|
storeId: string;
|
|
56
54
|
clientId: string;
|
|
@@ -63,7 +61,7 @@ declare const LeaderThreadCtx_base: Context.TagClass<LeaderThreadCtx, "LeaderThr
|
|
|
63
61
|
eventSchema: LiveStoreEvent.ForEventDef.ForRecord<any>;
|
|
64
62
|
devtools: DevtoolsContext;
|
|
65
63
|
syncBackend: SyncBackend.SyncBackend | undefined;
|
|
66
|
-
syncProcessor: LeaderSyncProcessor;
|
|
64
|
+
syncProcessor: LeaderSyncProcessor.Service;
|
|
67
65
|
materializeEvent: MaterializeEvent;
|
|
68
66
|
initialState: {
|
|
69
67
|
leaderHead: EventSequenceNumber.Client.Composite;
|
|
@@ -103,45 +101,45 @@ export declare const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
|
|
|
103
101
|
export declare const STREAM_EVENTS_BATCH_SIZE_MAX = 1000;
|
|
104
102
|
export declare const StreamEventsOptionsFields: {
|
|
105
103
|
readonly since: Schema.optional<Schema.Struct<{
|
|
106
|
-
global: Schema.
|
|
107
|
-
client: Schema.
|
|
108
|
-
rebaseGeneration:
|
|
104
|
+
readonly global: Schema.brand<Schema.Int, "GlobalEventSequenceNumber">;
|
|
105
|
+
readonly client: Schema.brand<Schema.Int, "ClientEventSequenceNumber">;
|
|
106
|
+
readonly rebaseGeneration: Schema.Int;
|
|
109
107
|
}> & {
|
|
110
108
|
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
111
109
|
}>;
|
|
112
110
|
readonly until: Schema.optional<Schema.Struct<{
|
|
113
|
-
global: Schema.
|
|
114
|
-
client: Schema.
|
|
115
|
-
rebaseGeneration:
|
|
111
|
+
readonly global: Schema.brand<Schema.Int, "GlobalEventSequenceNumber">;
|
|
112
|
+
readonly client: Schema.brand<Schema.Int, "ClientEventSequenceNumber">;
|
|
113
|
+
readonly rebaseGeneration: Schema.Int;
|
|
116
114
|
}> & {
|
|
117
115
|
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
118
116
|
}>;
|
|
119
|
-
readonly filter: Schema.optional<Schema
|
|
120
|
-
readonly clientIds: Schema.optional<Schema
|
|
121
|
-
readonly sessionIds: Schema.optional<Schema
|
|
122
|
-
readonly batchSize: Schema.optional<Schema.
|
|
123
|
-
readonly includeClientOnly: Schema.optional<
|
|
117
|
+
readonly filter: Schema.optional<Schema.$Array<Schema.String>>;
|
|
118
|
+
readonly clientIds: Schema.optional<Schema.$Array<Schema.String>>;
|
|
119
|
+
readonly sessionIds: Schema.optional<Schema.$Array<Schema.String>>;
|
|
120
|
+
readonly batchSize: Schema.optional<Schema.Int>;
|
|
121
|
+
readonly includeClientOnly: Schema.optional<Schema.Boolean>;
|
|
124
122
|
};
|
|
125
123
|
export declare const StreamEventsOptionsSchema: Schema.Struct<{
|
|
126
124
|
readonly since: Schema.optional<Schema.Struct<{
|
|
127
|
-
global: Schema.
|
|
128
|
-
client: Schema.
|
|
129
|
-
rebaseGeneration:
|
|
125
|
+
readonly global: Schema.brand<Schema.Int, "GlobalEventSequenceNumber">;
|
|
126
|
+
readonly client: Schema.brand<Schema.Int, "ClientEventSequenceNumber">;
|
|
127
|
+
readonly rebaseGeneration: Schema.Int;
|
|
130
128
|
}> & {
|
|
131
129
|
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
132
130
|
}>;
|
|
133
131
|
readonly until: Schema.optional<Schema.Struct<{
|
|
134
|
-
global: Schema.
|
|
135
|
-
client: Schema.
|
|
136
|
-
rebaseGeneration:
|
|
132
|
+
readonly global: Schema.brand<Schema.Int, "GlobalEventSequenceNumber">;
|
|
133
|
+
readonly client: Schema.brand<Schema.Int, "ClientEventSequenceNumber">;
|
|
134
|
+
readonly rebaseGeneration: Schema.Int;
|
|
137
135
|
}> & {
|
|
138
136
|
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
139
137
|
}>;
|
|
140
|
-
readonly filter: Schema.optional<Schema
|
|
141
|
-
readonly clientIds: Schema.optional<Schema
|
|
142
|
-
readonly sessionIds: Schema.optional<Schema
|
|
143
|
-
readonly batchSize: Schema.optional<Schema.
|
|
144
|
-
readonly includeClientOnly: Schema.optional<
|
|
138
|
+
readonly filter: Schema.optional<Schema.$Array<Schema.String>>;
|
|
139
|
+
readonly clientIds: Schema.optional<Schema.$Array<Schema.String>>;
|
|
140
|
+
readonly sessionIds: Schema.optional<Schema.$Array<Schema.String>>;
|
|
141
|
+
readonly batchSize: Schema.optional<Schema.Int>;
|
|
142
|
+
readonly includeClientOnly: Schema.optional<Schema.Boolean>;
|
|
145
143
|
}>;
|
|
146
144
|
export interface StreamEventsOptions {
|
|
147
145
|
/**
|
|
@@ -175,40 +173,5 @@ export interface StreamEventsOptions {
|
|
|
175
173
|
*/
|
|
176
174
|
includeClientOnly?: boolean;
|
|
177
175
|
}
|
|
178
|
-
export interface LeaderSyncProcessor {
|
|
179
|
-
/** Used by client sessions to subscribe to upstream sync state changes */
|
|
180
|
-
pull: (args: {
|
|
181
|
-
cursor: EventSequenceNumber.Client.Composite;
|
|
182
|
-
}) => Stream.Stream<{
|
|
183
|
-
payload: typeof SyncState.PayloadUpstream.Type;
|
|
184
|
-
}>;
|
|
185
|
-
/** The `pullQueue` API can be used instead of `pull` when more convenient */
|
|
186
|
-
pullQueue: (args: {
|
|
187
|
-
cursor: EventSequenceNumber.Client.Composite;
|
|
188
|
-
}) => Effect.Effect<Queue.Queue<{
|
|
189
|
-
payload: typeof SyncState.PayloadUpstream.Type;
|
|
190
|
-
}>, never, Scope.Scope>;
|
|
191
|
-
/** Used by client sessions to push events to the leader thread */
|
|
192
|
-
push: (
|
|
193
|
-
/** `batch` needs to follow the same rules as `batch` in `SyncBackend.push` */
|
|
194
|
-
batch: ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta>, options?: {
|
|
195
|
-
/**
|
|
196
|
-
* If true, the effect will only finish when the local push has been processed (i.e. succeeded or was rejected).
|
|
197
|
-
* `true` doesn't mean the events have been pushed to the sync backend.
|
|
198
|
-
* @default false
|
|
199
|
-
*/
|
|
200
|
-
waitForProcessing?: boolean;
|
|
201
|
-
}) => Effect.Effect<void, RejectedPushError>;
|
|
202
|
-
/** Currently only used by devtools which don't provide their own event numbers */
|
|
203
|
-
pushPartial: (args: {
|
|
204
|
-
event: LiveStoreEvent.Input.Encoded;
|
|
205
|
-
clientId: string;
|
|
206
|
-
sessionId: string;
|
|
207
|
-
}) => Effect.Effect<void, UnknownEventError>;
|
|
208
|
-
boot: Effect.Effect<{
|
|
209
|
-
initialLeaderHead: EventSequenceNumber.Client.Composite;
|
|
210
|
-
}, never, LeaderThreadCtx | Scope.Scope | HttpClient.HttpClient>;
|
|
211
|
-
syncState: Subscribable.Subscribable<SyncState.SyncState>;
|
|
212
|
-
}
|
|
213
176
|
export {};
|
|
214
177
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Context, Schema } from '@livestore/utils/effect';
|
|
1
|
+
import { Context, Schema, } from '@livestore/utils/effect';
|
|
2
2
|
import { EventSequenceNumber } from "../schema/mod.js";
|
|
3
3
|
export const InitialSyncOptionsSkip = Schema.TaggedStruct('Skip', {});
|
|
4
4
|
export const InitialSyncOptionsBlocking = Schema.TaggedStruct('Blocking', {
|
|
5
|
-
timeout: Schema.Union(Schema.DurationFromMillis, Schema.
|
|
5
|
+
timeout: Schema.Union([Schema.DurationFromMillis, Schema.Finite]),
|
|
6
6
|
});
|
|
7
|
-
export const InitialSyncOptions = Schema.Union(InitialSyncOptionsSkip, InitialSyncOptionsBlocking);
|
|
8
|
-
export class LeaderThreadCtx extends Context.
|
|
7
|
+
export const InitialSyncOptions = Schema.Union([InitialSyncOptionsSkip, InitialSyncOptionsBlocking]);
|
|
8
|
+
export class LeaderThreadCtx extends Context.Service()('LeaderThreadCtx') {
|
|
9
9
|
}
|
|
10
10
|
export const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
|
|
11
11
|
export const STREAM_EVENTS_BATCH_SIZE_MAX = 1_000;
|
|
@@ -15,7 +15,7 @@ export const StreamEventsOptionsFields = {
|
|
|
15
15
|
filter: Schema.optional(Schema.Array(Schema.String)),
|
|
16
16
|
clientIds: Schema.optional(Schema.Array(Schema.String)),
|
|
17
17
|
sessionIds: Schema.optional(Schema.Array(Schema.String)),
|
|
18
|
-
batchSize: Schema.optional(Schema.Int.
|
|
18
|
+
batchSize: Schema.optional(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: STREAM_EVENTS_BATCH_SIZE_MAX }))),
|
|
19
19
|
includeClientOnly: Schema.optional(Schema.Boolean),
|
|
20
20
|
};
|
|
21
21
|
export const StreamEventsOptionsSchema = Schema.Struct(StreamEventsOptionsFields);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,OAAO,EACP,MAAM,GACP,MAAM,yBAAyB,CAAA;AAchC,OAAO,EAAE,mBAAmB,EAA6C,MAAM,kBAAkB,CAAA;AAOjG,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE;IACxE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAClE,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAC,CAAA;AA4CpG,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,OAAO,EA8BjD,CAAC,iBAAiB,CAAC;CAAG;AAqBzB,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAA;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAA;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5D,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5D,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC;IACrH,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;CAC1C,CAAA;AAEV,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA"}
|
package/dist/logging.d.ts
CHANGED
|
@@ -1,40 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Layer, LogLevel } from '@livestore/utils/effect';
|
|
2
2
|
/**
|
|
3
|
-
* Optional Effect logger configuration
|
|
3
|
+
* Optional Effect logger configuration accepted by LiveStore entry points.
|
|
4
4
|
*
|
|
5
|
-
* When provided, `logger` replaces the default
|
|
6
|
-
* Use `logLevel` to control verbosity. Set to `
|
|
5
|
+
* When provided, `logger` replaces the default logger for the runtime.
|
|
6
|
+
* Use `logLevel` to control verbosity. Set to `"None"` to disable logging
|
|
7
7
|
* entirely while keeping the same logger implementation.
|
|
8
8
|
*/
|
|
9
|
-
export type
|
|
9
|
+
export type LoggerOptions = {
|
|
10
10
|
/** Optional Effect logger layer to control logging output. */
|
|
11
11
|
logger?: Layer.Layer<never> | undefined;
|
|
12
12
|
/** Optional minimum log level for the runtime. */
|
|
13
13
|
logLevel?: LogLevel.LogLevel | undefined;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
16
|
-
* Common defaults for resolving a logger configuration.
|
|
17
|
-
* - `threadName` is used by the default pretty logger when `logger` is not provided.
|
|
18
|
-
* - `mode` selects pretty logger mode (e.g. 'browser' for web workers).
|
|
19
|
-
* - `defaultLogLevel` is used when `logLevel` is not provided.
|
|
20
|
-
*/
|
|
21
|
-
export type LoggerDefaults = {
|
|
22
|
-
threadName?: string;
|
|
23
|
-
mode?: 'tty' | 'browser';
|
|
24
|
-
defaultLogLevel?: LogLevel.LogLevel;
|
|
25
|
-
/** Optional default logger layer to use when `config.logger` is not provided. */
|
|
26
|
-
defaultLogger?: Layer.Layer<never>;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Resolve the logger layer to provide to the Effect runtime.
|
|
30
|
-
*/
|
|
31
|
-
export declare const resolveLoggerLayer: (config?: WithLoggerOptions, defaults?: LoggerDefaults) => Layer.Layer<never>;
|
|
32
|
-
/**
|
|
33
|
-
* Resolve the minimum log level, falling back to `defaults.defaultLogLevel` then `LogLevel.Debug`.
|
|
34
|
-
*/
|
|
35
|
-
export declare const resolveLogLevel: (config?: WithLoggerOptions, defaults?: LoggerDefaults) => LogLevel.LogLevel;
|
|
36
|
-
/**
|
|
37
|
-
* Wrap an effect by applying the resolved minimum log level and providing the resolved logger layer.
|
|
38
|
-
*/
|
|
39
|
-
export declare const withLoggerConfig: <TEnv, TError, TOut>(config?: WithLoggerOptions, defaults?: LoggerDefaults) => ((effect: Effect.Effect<TOut, TError, TEnv>) => Effect.Effect<TOut, TError, TEnv>);
|
|
40
15
|
//# sourceMappingURL=logging.d.ts.map
|
package/dist/logging.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE9D;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;IACvC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;CACzC,CAAA"}
|
package/dist/logging.js
CHANGED
|
@@ -1,33 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { Effect, Logger, LogLevel } from '@livestore/utils/effect';
|
|
3
|
-
/**
|
|
4
|
-
* Resolve the logger layer to provide to the Effect runtime.
|
|
5
|
-
*/
|
|
6
|
-
export const resolveLoggerLayer = (config, defaults) => {
|
|
7
|
-
if (config?.logger !== undefined)
|
|
8
|
-
return config.logger;
|
|
9
|
-
if (defaults?.defaultLogger !== undefined)
|
|
10
|
-
return defaults.defaultLogger;
|
|
11
|
-
const threadName = defaults?.threadName ?? 'livestore';
|
|
12
|
-
const mode = defaults?.mode;
|
|
13
|
-
return Logger.prettyWithThread(threadName, mode !== undefined ? { mode } : {});
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Resolve the minimum log level, falling back to `defaults.defaultLogLevel` then `LogLevel.Debug`.
|
|
17
|
-
*/
|
|
18
|
-
export const resolveLogLevel = (config, defaults) => {
|
|
19
|
-
if (config?.logLevel !== undefined)
|
|
20
|
-
return config.logLevel;
|
|
21
|
-
if (defaults?.defaultLogLevel !== undefined)
|
|
22
|
-
return defaults.defaultLogLevel;
|
|
23
|
-
return isDevEnv() === true ? LogLevel.Debug : LogLevel.Info;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Wrap an effect by applying the resolved minimum log level and providing the resolved logger layer.
|
|
27
|
-
*/
|
|
28
|
-
export const withLoggerConfig = (config, defaults) => {
|
|
29
|
-
const level = resolveLogLevel(config, defaults);
|
|
30
|
-
const layer = resolveLoggerLayer(config, defaults);
|
|
31
|
-
return (effect) => effect.pipe(Logger.withMinimumLogLevel(level), Effect.provide(layer));
|
|
32
|
-
};
|
|
1
|
+
export {};
|
|
33
2
|
//# sourceMappingURL=logging.js.map
|
package/dist/logging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Effect } from '@livestore/utils/effect';
|
|
1
|
+
import { type Scope, type SubscriptionRef, Effect } from '@livestore/utils/effect';
|
|
3
2
|
import * as Webmesh from '@livestore/webmesh';
|
|
4
3
|
import type { AdapterArgs, ClientSession, ClientSessionLeaderThreadProxy, LockStatus, SqliteDb, UnknownError } from './adapter-types.ts';
|
|
5
4
|
import * as Devtools from './devtools/mod.ts';
|