@livestore/common 0.4.0-dev.2 → 0.4.0-dev.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +20 -12
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
- package/dist/adapter-types.d.ts +14 -6
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +33 -6
- package/dist/debug-info.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +28 -23
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +2 -2
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +7 -14
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +1 -6
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +38 -29
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +9 -8
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +7 -4
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +13 -2
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +10 -3
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +52 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +25 -6
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +41 -4
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +158 -75
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +21 -22
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +77 -20
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +2 -2
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +56 -45
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +6 -6
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +79 -27
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
- package/dist/leader-thread/materialize-event.d.ts +3 -3
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +25 -11
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/mod.d.ts +1 -0
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +1 -0
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -3
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +5 -5
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/stream-events.d.ts +56 -0
- package/dist/leader-thread/stream-events.d.ts.map +1 -0
- package/dist/leader-thread/stream-events.js +166 -0
- package/dist/leader-thread/stream-events.js.map +1 -0
- package/dist/leader-thread/types.d.ts +98 -20
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +13 -0
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +40 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +33 -0
- package/dist/logging.js.map +1 -0
- package/dist/make-client-session.d.ts +5 -3
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +5 -2
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +6 -6
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +20 -4
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +2 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +5 -0
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +2 -2
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +29 -20
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +147 -0
- package/dist/schema/EventDef/define.d.ts.map +1 -0
- package/dist/schema/EventDef/define.js +139 -0
- package/dist/schema/EventDef/define.js.map +1 -0
- package/dist/schema/EventDef/event-def.d.ts +106 -0
- package/dist/schema/EventDef/event-def.d.ts.map +1 -0
- package/dist/schema/EventDef/event-def.js +2 -0
- package/dist/schema/EventDef/event-def.js.map +1 -0
- package/dist/schema/EventDef/facts.d.ts +118 -0
- package/dist/schema/EventDef/facts.d.ts.map +1 -0
- package/dist/schema/EventDef/facts.js +53 -0
- package/dist/schema/EventDef/facts.js.map +1 -0
- package/dist/schema/EventDef/materializer.d.ts +155 -0
- package/dist/schema/EventDef/materializer.d.ts.map +1 -0
- package/dist/schema/EventDef/materializer.js +83 -0
- package/dist/schema/EventDef/materializer.js.map +1 -0
- package/dist/schema/EventDef/mod.d.ts +5 -0
- package/dist/schema/EventDef/mod.d.ts.map +1 -0
- package/dist/schema/EventDef/mod.js +5 -0
- package/dist/schema/EventDef/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/client.js +193 -0
- package/dist/schema/EventSequenceNumber/client.js.map +1 -0
- package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/global.js +14 -0
- package/dist/schema/EventSequenceNumber/global.js.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.js +37 -0
- package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +43 -43
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +89 -106
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/{LiveStoreEvent.js → LiveStoreEvent/client.js} +74 -58
- package/dist/schema/LiveStoreEvent/client.js.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
- package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/global.js +31 -0
- package/dist/schema/LiveStoreEvent/global.js.map +1 -0
- package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/input.js +26 -0
- package/dist/schema/LiveStoreEvent/input.js.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.js +5 -0
- package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +6 -4
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +5 -4
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +16 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +27 -2
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +36 -6
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +97 -6
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +16 -0
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +14 -6
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +69 -22
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +48 -10
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-spec.js +30 -12
- package/dist/schema/state/sqlite/column-spec.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.test.js +23 -14
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +23 -6
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +14 -8
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +5 -3
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +2 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +3 -3
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +3 -3
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +19 -11
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.js +22 -15
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +6 -3
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +252 -88
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
- package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +22 -12
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
- package/dist/schema/state/sqlite/{system-tables.d.ts → system-tables/eventlog-tables.d.ts} +63 -456
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +4 -4
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +2 -2
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +80 -0
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +47 -0
- package/dist/schema/unknown-events.d.ts.map +1 -0
- package/dist/schema/unknown-events.js +69 -0
- package/dist/schema/unknown-events.js.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
- package/dist/schema-management/migrations.d.ts +32 -2
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +37 -5
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +3 -3
- package/dist/schema-management/validate-schema.d.ts.map +1 -1
- package/dist/schema-management/validate-schema.js +2 -2
- package/dist/schema-management/validate-schema.js.map +1 -1
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +11 -1
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.js +2 -1
- package/dist/sql-queries/sql-query-builder.js.map +1 -1
- package/dist/sqlite-types.d.ts +3 -3
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +11 -13
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +45 -42
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +66 -0
- package/dist/sync/errors.d.ts.map +1 -0
- package/dist/sync/errors.js +36 -0
- package/dist/sync/errors.js.map +1 -0
- package/dist/sync/index.d.ts +3 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +23 -0
- package/dist/sync/mock-sync-backend.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.js +114 -0
- package/dist/sync/mock-sync-backend.js.map +1 -0
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +6 -7
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +5 -5
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +1 -2
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +54 -15
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +198 -9
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +10 -8
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +5 -5
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +5 -5
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +9 -9
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/sync-backend-kv.d.ts +7 -0
- package/dist/sync/sync-backend-kv.d.ts.map +1 -0
- package/dist/sync/sync-backend-kv.js +18 -0
- package/dist/sync/sync-backend-kv.js.map +1 -0
- package/dist/sync/sync-backend.d.ts +105 -0
- package/dist/sync/sync-backend.d.ts.map +1 -0
- package/dist/sync/sync-backend.js +61 -0
- package/dist/sync/sync-backend.js.map +1 -0
- package/dist/sync/sync.d.ts +9 -86
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +2 -27
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +57 -44
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +50 -45
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +83 -46
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +36 -0
- package/dist/sync/transport-chunking.d.ts.map +1 -0
- package/dist/sync/transport-chunking.js +56 -0
- package/dist/sync/transport-chunking.js.map +1 -0
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +6 -6
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/testing/event-factory.d.ts +68 -0
- package/dist/testing/event-factory.d.ts.map +1 -0
- package/dist/testing/event-factory.js +78 -0
- package/dist/testing/event-factory.js.map +1 -0
- package/dist/testing/mod.d.ts +2 -0
- package/dist/testing/mod.d.ts.map +1 -0
- package/dist/testing/mod.js +2 -0
- package/dist/testing/mod.js.map +1 -0
- package/dist/version.d.ts +16 -6
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +16 -6
- package/dist/version.js.map +1 -1
- package/package.json +7 -8
- package/src/ClientSessionLeaderThreadProxy.ts +20 -12
- package/src/adapter-types.ts +18 -6
- package/src/debug-info.ts +37 -6
- package/src/devtools/devtools-messages-client-session.ts +2 -2
- package/src/devtools/devtools-messages-common.ts +1 -8
- package/src/devtools/devtools-messages-leader.ts +9 -8
- package/src/devtools/devtools-sessioninfo.ts +8 -5
- package/src/devtools/mod.ts +11 -2
- package/src/errors.ts +38 -11
- package/src/index.ts +2 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +277 -105
- package/src/leader-thread/eventlog.ts +113 -38
- package/src/leader-thread/leader-worker-devtools.ts +86 -55
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +156 -37
- package/src/leader-thread/materialize-event.ts +37 -12
- package/src/leader-thread/mod.ts +1 -0
- package/src/leader-thread/recreate-db.ts +15 -7
- package/src/leader-thread/shutdown-channel.ts +16 -2
- package/src/leader-thread/stream-events.ts +201 -0
- package/src/leader-thread/types.ts +70 -20
- package/src/logging.ts +62 -0
- package/src/make-client-session.ts +9 -3
- package/src/materializer-helper.ts +27 -10
- package/src/otel.ts +10 -0
- package/src/rematerialize-from-eventlog.ts +37 -27
- package/src/schema/EventDef/define.ts +201 -0
- package/src/schema/EventDef/event-def.ts +120 -0
- package/src/schema/EventDef/facts.ts +135 -0
- package/src/schema/EventDef/materializer.ts +172 -0
- package/src/schema/EventDef/mod.ts +4 -0
- package/src/schema/EventSequenceNumber/client.ts +257 -0
- package/src/schema/EventSequenceNumber/global.ts +19 -0
- package/src/schema/EventSequenceNumber/mod.ts +37 -0
- package/src/schema/EventSequenceNumber.test.ts +70 -52
- package/src/schema/LiveStoreEvent/client.ts +221 -0
- package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
- package/src/schema/LiveStoreEvent/global.ts +45 -0
- package/src/schema/LiveStoreEvent/input.ts +63 -0
- package/src/schema/LiveStoreEvent/mod.ts +4 -0
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +6 -4
- package/src/schema/schema.ts +39 -3
- package/src/schema/state/sqlite/client-document-def.test.ts +19 -2
- package/src/schema/state/sqlite/client-document-def.ts +127 -25
- package/src/schema/state/sqlite/column-annotations.test.ts +1 -1
- package/src/schema/state/sqlite/column-annotations.ts +16 -6
- package/src/schema/state/sqlite/column-def.test.ts +62 -10
- package/src/schema/state/sqlite/column-def.ts +88 -21
- package/src/schema/state/sqlite/column-spec.test.ts +29 -16
- package/src/schema/state/sqlite/column-spec.ts +36 -11
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +26 -6
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +29 -12
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +12 -17
- package/src/schema/state/sqlite/mod.ts +4 -3
- package/src/schema/state/sqlite/query-builder/api.ts +25 -11
- package/src/schema/state/sqlite/query-builder/astToSql.ts +23 -14
- package/src/schema/state/sqlite/query-builder/impl.test.ts +305 -92
- package/src/schema/state/sqlite/query-builder/impl.ts +8 -3
- package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
- package/src/schema/state/sqlite/schema-helpers.ts +28 -20
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
- package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
- package/src/schema/state/sqlite/system-tables/state-tables.ts +69 -0
- package/src/schema/state/sqlite/table-def.test.ts +101 -0
- package/src/schema/state/sqlite/table-def.ts +8 -6
- package/src/schema/unknown-events.ts +131 -0
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +86 -0
- package/src/schema-management/migrations.ts +41 -8
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/sql-queries/sql-queries.ts +9 -1
- package/src/sql-queries/sql-query-builder.ts +2 -1
- package/src/sqlite-types.ts +3 -3
- package/src/sync/ClientSessionSyncProcessor.ts +69 -62
- package/src/sync/errors.ts +38 -0
- package/src/sync/index.ts +3 -0
- package/src/sync/mock-sync-backend.ts +184 -0
- package/src/sync/next/compact-events.ts +6 -7
- package/src/sync/next/facts.ts +7 -9
- package/src/sync/next/history-dag-common.ts +277 -26
- package/src/sync/next/history-dag.ts +16 -10
- package/src/sync/next/rebase-events.ts +11 -11
- package/src/sync/next/test/event-fixtures.ts +11 -11
- package/src/sync/sync-backend-kv.ts +22 -0
- package/src/sync/sync-backend.ts +185 -0
- package/src/sync/sync.ts +9 -91
- package/src/sync/syncstate.test.ts +96 -52
- package/src/sync/syncstate.ts +69 -58
- package/src/sync/transport-chunking.ts +90 -0
- package/src/sync/validate-push-payload.ts +8 -9
- package/src/testing/event-factory.ts +131 -0
- package/src/testing/mod.ts +1 -0
- package/src/version.ts +16 -6
- package/dist/schema/EventDef.d.ts +0 -123
- package/dist/schema/EventDef.d.ts.map +0 -1
- package/dist/schema/EventDef.js +0 -46
- package/dist/schema/EventDef.js.map +0 -1
- package/dist/schema/EventSequenceNumber.d.ts +0 -80
- package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
- package/dist/schema/EventSequenceNumber.js +0 -139
- package/dist/schema/EventSequenceNumber.js.map +0 -1
- package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
- package/dist/schema/LiveStoreEvent.js.map +0 -1
- package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
- package/dist/schema/state/sqlite/system-tables.js +0 -79
- package/dist/schema/state/sqlite/system-tables.js.map +0 -1
- package/dist/schema-management/migrations.test.d.ts +0 -2
- package/dist/schema-management/migrations.test.d.ts.map +0 -1
- package/dist/schema-management/migrations.test.js +0 -52
- package/dist/schema-management/migrations.test.js.map +0 -1
- package/dist/sync/next/graphology.d.ts +0 -8
- package/dist/sync/next/graphology.d.ts.map +0 -1
- package/dist/sync/next/graphology.js +0 -30
- package/dist/sync/next/graphology.js.map +0 -1
- package/dist/sync/next/graphology_.d.ts +0 -3
- package/dist/sync/next/graphology_.d.ts.map +0 -1
- package/dist/sync/next/graphology_.js +0 -3
- package/dist/sync/next/graphology_.js.map +0 -1
- package/src/schema/EventDef.ts +0 -219
- package/src/schema/EventSequenceNumber.ts +0 -199
- package/src/schema/LiveStoreEvent.ts +0 -287
- package/src/schema/state/sqlite/system-tables.ts +0 -104
- package/src/sync/next/ambient.d.ts +0 -3
- package/src/sync/next/graphology.ts +0 -41
- package/src/sync/next/graphology_.ts +0 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Subscribable } from '@livestore/utils/effect';
|
|
2
|
+
import { Stream } from '@livestore/utils/effect';
|
|
3
|
+
import { type LiveStoreEvent } from '../schema/mod.ts';
|
|
4
|
+
import type * as SyncState from '../sync/syncstate.ts';
|
|
5
|
+
import type { LeaderSqliteDb, StreamEventsOptions } from './types.ts';
|
|
6
|
+
/**
|
|
7
|
+
* Streams events for leader-thread adapters.
|
|
8
|
+
*
|
|
9
|
+
* Provides a continuous stream from the eventlog as the upstream head advances.
|
|
10
|
+
* When an until event is passed in the stream finalizes upon reaching it.
|
|
11
|
+
*
|
|
12
|
+
* The batch size is set to 100 by default as this was meassured to provide the
|
|
13
|
+
* best performance and 1000 as the upper limit.
|
|
14
|
+
*
|
|
15
|
+
* Adapters that call this helper:
|
|
16
|
+
* - `packages/@livestore/adapter-web/src/in-memory/in-memory-adapter.ts`
|
|
17
|
+
* - `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
|
+
* - `packages/@livestore/adapter-cloudflare/src/make-adapter.ts`
|
|
21
|
+
*
|
|
22
|
+
* Each caller resolves dependencies inside the leader scope before invoking this helper,
|
|
23
|
+
* so the stream stays environment-agnostic and does not leak `LeaderThreadCtx` into runtime
|
|
24
|
+
* entry points such as `Store.eventsStream`.
|
|
25
|
+
*
|
|
26
|
+
* Test files:
|
|
27
|
+
* Unit: `tests/package-common/src/leader-thread/stream-events.test.ts`
|
|
28
|
+
* Integration: `packages/@livestore/livestore/src/store/store-eventstream.test.ts`
|
|
29
|
+
* Performance: `tests/perf-eventlog/tests/suites/event-streaming.test.ts`
|
|
30
|
+
*
|
|
31
|
+
* Optimization explorations
|
|
32
|
+
*
|
|
33
|
+
* In order to alleviate the occurence of many small queries when the syncState
|
|
34
|
+
* is sequentially progressing quickly we have explored some time-based batching
|
|
35
|
+
* approaches. It remains to be determined if and when the added complexity of
|
|
36
|
+
* these approaches are worth the benefit. They come with some drawbacks such as
|
|
37
|
+
* degraded time to first event or general performance degredation for larger
|
|
38
|
+
* query steps. These aspects can likely be mitigated with some more work but
|
|
39
|
+
* that is best assessed when we have a final implementation of event streaming
|
|
40
|
+
* with support for session and leader level streams.
|
|
41
|
+
*
|
|
42
|
+
* Fetch plans into a Sink
|
|
43
|
+
* https://gist.github.com/slashv/f1223689f2d1171d2eeb60a2823f4c7c
|
|
44
|
+
*
|
|
45
|
+
* Fetch plans into sink and decompose into windows
|
|
46
|
+
* https://gist.github.com/slashv/a8f55f50121c080937f42e44b4039ac8
|
|
47
|
+
*
|
|
48
|
+
* Mailbox and Latch approach (suggestion by Tim Smart)
|
|
49
|
+
* https://gist.github.com/slashv/d6b12395c85415bf0d3363372a1636c3
|
|
50
|
+
*/
|
|
51
|
+
export declare const streamEventsWithSyncState: ({ dbEventlog, syncState, options, }: {
|
|
52
|
+
dbEventlog: LeaderSqliteDb;
|
|
53
|
+
syncState: Subscribable.Subscribable<SyncState.SyncState>;
|
|
54
|
+
options: StreamEventsOptions;
|
|
55
|
+
}) => Stream.Stream<LiveStoreEvent.Client.Encoded>;
|
|
56
|
+
//# sourceMappingURL=stream-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-events.d.ts","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAgC,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC9E,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;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,CA4I9C,CAAA"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Chunk, Effect, Option, Queue, Stream } from '@livestore/utils/effect';
|
|
2
|
+
import { EventSequenceNumber } from "../schema/mod.js";
|
|
3
|
+
import * as Eventlog from "./eventlog.js";
|
|
4
|
+
/**
|
|
5
|
+
* Streams events for leader-thread adapters.
|
|
6
|
+
*
|
|
7
|
+
* Provides a continuous stream from the eventlog as the upstream head advances.
|
|
8
|
+
* When an until event is passed in the stream finalizes upon reaching it.
|
|
9
|
+
*
|
|
10
|
+
* The batch size is set to 100 by default as this was meassured to provide the
|
|
11
|
+
* best performance and 1000 as the upper limit.
|
|
12
|
+
*
|
|
13
|
+
* Adapters that call this helper:
|
|
14
|
+
* - `packages/@livestore/adapter-web/src/in-memory/in-memory-adapter.ts`
|
|
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
|
+
* - `packages/@livestore/adapter-cloudflare/src/make-adapter.ts`
|
|
19
|
+
*
|
|
20
|
+
* Each caller resolves dependencies inside the leader scope before invoking this helper,
|
|
21
|
+
* so the stream stays environment-agnostic and does not leak `LeaderThreadCtx` into runtime
|
|
22
|
+
* entry points such as `Store.eventsStream`.
|
|
23
|
+
*
|
|
24
|
+
* Test files:
|
|
25
|
+
* Unit: `tests/package-common/src/leader-thread/stream-events.test.ts`
|
|
26
|
+
* Integration: `packages/@livestore/livestore/src/store/store-eventstream.test.ts`
|
|
27
|
+
* Performance: `tests/perf-eventlog/tests/suites/event-streaming.test.ts`
|
|
28
|
+
*
|
|
29
|
+
* Optimization explorations
|
|
30
|
+
*
|
|
31
|
+
* In order to alleviate the occurence of many small queries when the syncState
|
|
32
|
+
* is sequentially progressing quickly we have explored some time-based batching
|
|
33
|
+
* approaches. It remains to be determined if and when the added complexity of
|
|
34
|
+
* these approaches are worth the benefit. They come with some drawbacks such as
|
|
35
|
+
* degraded time to first event or general performance degredation for larger
|
|
36
|
+
* query steps. These aspects can likely be mitigated with some more work but
|
|
37
|
+
* that is best assessed when we have a final implementation of event streaming
|
|
38
|
+
* with support for session and leader level streams.
|
|
39
|
+
*
|
|
40
|
+
* Fetch plans into a Sink
|
|
41
|
+
* https://gist.github.com/slashv/f1223689f2d1171d2eeb60a2823f4c7c
|
|
42
|
+
*
|
|
43
|
+
* Fetch plans into sink and decompose into windows
|
|
44
|
+
* https://gist.github.com/slashv/a8f55f50121c080937f42e44b4039ac8
|
|
45
|
+
*
|
|
46
|
+
* Mailbox and Latch approach (suggestion by Tim Smart)
|
|
47
|
+
* https://gist.github.com/slashv/d6b12395c85415bf0d3363372a1636c3
|
|
48
|
+
*/
|
|
49
|
+
export const streamEventsWithSyncState = ({ dbEventlog, syncState, options, }) => {
|
|
50
|
+
const initialCursor = options.since ?? EventSequenceNumber.Client.ROOT;
|
|
51
|
+
const batchSize = options.batchSize ?? 100;
|
|
52
|
+
return Stream.unwrapScoped(Effect.gen(function* () {
|
|
53
|
+
/**
|
|
54
|
+
* Single-element Queue allows suspending the event stream until head
|
|
55
|
+
* advances because Queue.take is a suspending effect. SubscriptionRef in
|
|
56
|
+
* comparrison lacks a primitive for suspending a stream until a new value
|
|
57
|
+
* is set and would require polling.
|
|
58
|
+
*
|
|
59
|
+
* The use of a sliding Queue here is useful since it ensures only the
|
|
60
|
+
* lastest head from syncState is the one present on the queue without the
|
|
61
|
+
* need for manual substitution.
|
|
62
|
+
*/
|
|
63
|
+
const headQueue = yield* Queue.sliding(1);
|
|
64
|
+
/**
|
|
65
|
+
* We run a separate fiber which listens to changes in syncState and
|
|
66
|
+
* offer the latest head to the headQueue. Keeping track of the previous
|
|
67
|
+
* value is done to prevent syncState changes unrelated to the
|
|
68
|
+
* upstreamHead triggering empty queries.
|
|
69
|
+
*
|
|
70
|
+
* When we implement support for leader and session level streams
|
|
71
|
+
* this will need to be adapted to support the relevant value from
|
|
72
|
+
* syncState that we are interested in tracking.
|
|
73
|
+
*/
|
|
74
|
+
let prevGlobalHead = -1;
|
|
75
|
+
yield* syncState.changes.pipe(Stream.map((state) => state.upstreamHead), Stream.filter((head) => {
|
|
76
|
+
if (head.global > prevGlobalHead) {
|
|
77
|
+
prevGlobalHead = head.global;
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}), Stream.runForEach((head) => Queue.offer(headQueue, head)), Effect.forkScoped);
|
|
82
|
+
return Stream.paginateChunkEffect({ cursor: initialCursor, head: EventSequenceNumber.Client.ROOT }, ({ cursor, head }) => Effect.gen(function* () {
|
|
83
|
+
/**
|
|
84
|
+
* Early check guards agains:
|
|
85
|
+
* since === until : Prevent empty query
|
|
86
|
+
* since > until : Incorrectly inverted interval
|
|
87
|
+
*/
|
|
88
|
+
if (options.until && EventSequenceNumber.Client.isGreaterThanOrEqual(cursor, options.until)) {
|
|
89
|
+
return [Chunk.empty(), Option.none()];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* There are two scenarios where we take the next head from the headQueue:
|
|
93
|
+
*
|
|
94
|
+
* 1. We need to wait for the head to advance
|
|
95
|
+
* The Stream suspends until a new head is available on the headQueue
|
|
96
|
+
*
|
|
97
|
+
* 2. Head has advanced during itteration
|
|
98
|
+
* While itterating towards the lastest head taken from the headQueue
|
|
99
|
+
* in increments of batchSize it's possible the head could have
|
|
100
|
+
* advanced. This leads to a suboptimal amount of queries. Therefor we
|
|
101
|
+
* check if the headQueue is full which tells us that there's a new
|
|
102
|
+
* head available to take. Example:
|
|
103
|
+
*
|
|
104
|
+
* batchSize: 2
|
|
105
|
+
*
|
|
106
|
+
* --> head at: e3
|
|
107
|
+
* First query: e0 -> e2 (two events)
|
|
108
|
+
* --> head advances to: e4
|
|
109
|
+
* Second query: e2 -> e3 (one event but we could have taken 2)
|
|
110
|
+
* --> Take the new head of e4
|
|
111
|
+
* Third query: e3 -> e4 (unnecessary third query)
|
|
112
|
+
*
|
|
113
|
+
*
|
|
114
|
+
* To define the target, which will be used as the temporary until
|
|
115
|
+
* marker for the eventlog query, we select the lowest of three possible values:
|
|
116
|
+
*
|
|
117
|
+
* hardStop: A user supplied until marker
|
|
118
|
+
* current cursor + batchSize: A batchSize step towards the latest head from headQueue
|
|
119
|
+
* nextHead: The latest head from headQueue
|
|
120
|
+
*/
|
|
121
|
+
const waitForHead = EventSequenceNumber.Client.isGreaterThanOrEqual(cursor, head);
|
|
122
|
+
const maybeHead = waitForHead
|
|
123
|
+
? yield* Queue.take(headQueue).pipe(Effect.map(Option.some))
|
|
124
|
+
: yield* Queue.poll(headQueue);
|
|
125
|
+
const nextHead = Option.getOrElse(maybeHead, () => head);
|
|
126
|
+
const hardStop = options.until?.global ?? Number.POSITIVE_INFINITY;
|
|
127
|
+
const target = EventSequenceNumber.Client.Composite.make({
|
|
128
|
+
global: Math.min(hardStop, cursor.global + batchSize, nextHead.global),
|
|
129
|
+
client: EventSequenceNumber.Client.DEFAULT,
|
|
130
|
+
});
|
|
131
|
+
/**
|
|
132
|
+
* Eventlog.getEventsFromEventlog returns a Chunk from each
|
|
133
|
+
* query which is what we emit at each itteration.
|
|
134
|
+
*/
|
|
135
|
+
const chunk = yield* Eventlog.getEventsFromEventlog({
|
|
136
|
+
dbEventlog,
|
|
137
|
+
options: {
|
|
138
|
+
...options,
|
|
139
|
+
since: cursor,
|
|
140
|
+
until: target,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
/**
|
|
144
|
+
* We construct the state for the following itteration of the stream
|
|
145
|
+
* loop by setting the current target as the since cursor and pass
|
|
146
|
+
* along the latest head.
|
|
147
|
+
*
|
|
148
|
+
* If we have the reached the user supplied until marker we signal the
|
|
149
|
+
* finalization of the stream by passing Option.none() instead.
|
|
150
|
+
*/
|
|
151
|
+
const reachedUntil = options.until !== undefined && EventSequenceNumber.Client.isGreaterThanOrEqual(target, options.until);
|
|
152
|
+
const nextState = reachedUntil ? Option.none() : Option.some({ cursor: target, head: nextHead });
|
|
153
|
+
const spanAttributes = {
|
|
154
|
+
'livestore.streamEvents.cursor.global': cursor.global,
|
|
155
|
+
'livestore.streamEvents.target.global': target.global,
|
|
156
|
+
'livestore.streamEvents.batchSize': batchSize,
|
|
157
|
+
'livestore.streamEvents.waitedForHead': waitForHead,
|
|
158
|
+
};
|
|
159
|
+
return yield* Effect.succeed([
|
|
160
|
+
chunk,
|
|
161
|
+
nextState,
|
|
162
|
+
]).pipe(Effect.withSpan('@livestore/common:streamEvents:segment', { attributes: spanAttributes }));
|
|
163
|
+
}));
|
|
164
|
+
}));
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=stream-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-events.js","sourceRoot":"","sources":["../../src/leader-thread/stream-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import type { Deferred, Effect, HttpClient, Option, Queue, Scope, Stream, Subscr
|
|
|
2
2
|
import { Context, Schema } from '@livestore/utils/effect';
|
|
3
3
|
import type { MeshNode } from '@livestore/webmesh';
|
|
4
4
|
import type { MigrationsReport } from '../defs.ts';
|
|
5
|
-
import type {
|
|
6
|
-
import type { BootStatus, Devtools, LeaderAheadError, MakeSqliteDb, PersistenceInfo, SqliteDb, SyncBackend,
|
|
7
|
-
import
|
|
5
|
+
import type { MaterializeError } from '../errors.ts';
|
|
6
|
+
import type { BootStatus, Devtools, LeaderAheadError, MakeSqliteDb, PersistenceInfo, SqliteDb, SyncBackend, UnknownError } from '../index.ts';
|
|
7
|
+
import { EventSequenceNumber, type LiveStoreEvent, type LiveStoreSchema } from '../schema/mod.ts';
|
|
8
8
|
import type * as SyncState from '../sync/syncstate.ts';
|
|
9
9
|
import type { ShutdownChannel } from './shutdown-channel.ts';
|
|
10
10
|
export type ShutdownState = 'running' | 'shutting-down';
|
|
@@ -19,7 +19,7 @@ export declare const InitialSyncOptions: Schema.Union<[Schema.TaggedStruct<"Skip
|
|
|
19
19
|
}>]>;
|
|
20
20
|
export type InitialSyncOptions = typeof InitialSyncOptions.Type;
|
|
21
21
|
export type InitialSyncInfo = Option.Option<{
|
|
22
|
-
|
|
22
|
+
eventSequenceNumber: EventSequenceNumber.Global.Type;
|
|
23
23
|
metadata: Option.Option<Schema.JsonValue>;
|
|
24
24
|
}>;
|
|
25
25
|
export type LeaderSqliteDb = SqliteDb<{
|
|
@@ -38,7 +38,7 @@ export type DevtoolsOptions = {
|
|
|
38
38
|
node: MeshNode;
|
|
39
39
|
persistenceInfo: PersistenceInfoPair;
|
|
40
40
|
mode: 'proxy' | 'direct';
|
|
41
|
-
},
|
|
41
|
+
}, UnknownError, Scope.Scope | HttpClient.HttpClient | LeaderThreadCtx>;
|
|
42
42
|
};
|
|
43
43
|
export type DevtoolsContext = {
|
|
44
44
|
enabled: true;
|
|
@@ -59,13 +59,13 @@ declare const LeaderThreadCtx_base: Context.TagClass<LeaderThreadCtx, "LeaderThr
|
|
|
59
59
|
bootStatusQueue: Queue.Queue<BootStatus>;
|
|
60
60
|
shutdownStateSubRef: SubscriptionRef.SubscriptionRef<ShutdownState>;
|
|
61
61
|
shutdownChannel: ShutdownChannel;
|
|
62
|
-
eventSchema: LiveStoreEvent.
|
|
62
|
+
eventSchema: LiveStoreEvent.ForEventDef.ForRecord<any>;
|
|
63
63
|
devtools: DevtoolsContext;
|
|
64
|
-
syncBackend: SyncBackend | undefined;
|
|
64
|
+
syncBackend: SyncBackend.SyncBackend | undefined;
|
|
65
65
|
syncProcessor: LeaderSyncProcessor;
|
|
66
66
|
materializeEvent: MaterializeEvent;
|
|
67
67
|
initialState: {
|
|
68
|
-
leaderHead: EventSequenceNumber.
|
|
68
|
+
leaderHead: EventSequenceNumber.Client.Composite;
|
|
69
69
|
migrationsReport: MigrationsReport;
|
|
70
70
|
};
|
|
71
71
|
/**
|
|
@@ -74,10 +74,11 @@ declare const LeaderThreadCtx_base: Context.TagClass<LeaderThreadCtx, "LeaderThr
|
|
|
74
74
|
* This is currently separated from `.devtools` as it also needs to work when devtools are disabled
|
|
75
75
|
*/
|
|
76
76
|
extraIncomingMessagesQueue: Queue.Queue<Devtools.Leader.MessageToApp>;
|
|
77
|
+
networkStatus: Subscribable.Subscribable<SyncBackend.NetworkStatus>;
|
|
77
78
|
}>;
|
|
78
79
|
export declare class LeaderThreadCtx extends LeaderThreadCtx_base {
|
|
79
80
|
}
|
|
80
|
-
export type MaterializeEvent = (eventEncoded: LiveStoreEvent.EncodedWithMeta, options?: {
|
|
81
|
+
export type MaterializeEvent = (eventEncoded: LiveStoreEvent.Client.EncodedWithMeta, options?: {
|
|
81
82
|
/** Needed for rematerializeFromEventlog */
|
|
82
83
|
skipEventlog?: boolean;
|
|
83
84
|
}) => Effect.Effect<{
|
|
@@ -89,46 +90,123 @@ export type MaterializeEvent = (eventEncoded: LiveStoreEvent.EncodedWithMeta, op
|
|
|
89
90
|
_tag: 'no-op';
|
|
90
91
|
};
|
|
91
92
|
hash: Option.Option<number>;
|
|
92
|
-
},
|
|
93
|
+
}, MaterializeError>;
|
|
93
94
|
export type InitialBlockingSyncContext = {
|
|
94
95
|
blockingDeferred: Deferred.Deferred<void> | undefined;
|
|
95
96
|
update: (_: {
|
|
96
|
-
|
|
97
|
+
pageInfo: SyncBackend.PullResPageInfo;
|
|
97
98
|
processed: number;
|
|
98
99
|
}) => Effect.Effect<void>;
|
|
99
100
|
};
|
|
101
|
+
export declare const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
|
|
102
|
+
export declare const STREAM_EVENTS_BATCH_SIZE_MAX = 1000;
|
|
103
|
+
export declare const StreamEventsOptionsFields: {
|
|
104
|
+
readonly since: Schema.optional<Schema.Struct<{
|
|
105
|
+
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
106
|
+
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
107
|
+
rebaseGeneration: typeof Schema.Int;
|
|
108
|
+
}> & {
|
|
109
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
110
|
+
}>;
|
|
111
|
+
readonly until: Schema.optional<Schema.Struct<{
|
|
112
|
+
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
113
|
+
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
114
|
+
rebaseGeneration: typeof Schema.Int;
|
|
115
|
+
}> & {
|
|
116
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
117
|
+
}>;
|
|
118
|
+
readonly filter: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
119
|
+
readonly clientIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
120
|
+
readonly sessionIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
121
|
+
readonly batchSize: Schema.optional<Schema.filter<typeof Schema.Int>>;
|
|
122
|
+
readonly includeClientOnly: Schema.optional<typeof Schema.Boolean>;
|
|
123
|
+
};
|
|
124
|
+
export declare const StreamEventsOptionsSchema: Schema.Struct<{
|
|
125
|
+
readonly since: Schema.optional<Schema.Struct<{
|
|
126
|
+
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
127
|
+
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
128
|
+
rebaseGeneration: typeof Schema.Int;
|
|
129
|
+
}> & {
|
|
130
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
131
|
+
}>;
|
|
132
|
+
readonly until: Schema.optional<Schema.Struct<{
|
|
133
|
+
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
134
|
+
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
135
|
+
rebaseGeneration: typeof Schema.Int;
|
|
136
|
+
}> & {
|
|
137
|
+
make: (seqNum: EventSequenceNumber.Client.CompositeInput) => EventSequenceNumber.Client.Composite;
|
|
138
|
+
}>;
|
|
139
|
+
readonly filter: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
140
|
+
readonly clientIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
141
|
+
readonly sessionIds: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
142
|
+
readonly batchSize: Schema.optional<Schema.filter<typeof Schema.Int>>;
|
|
143
|
+
readonly includeClientOnly: Schema.optional<typeof Schema.Boolean>;
|
|
144
|
+
}>;
|
|
145
|
+
export interface StreamEventsOptions {
|
|
146
|
+
/**
|
|
147
|
+
* Only include events after this logical timestamp (exclusive).
|
|
148
|
+
* Defaults to `EventSequenceNumber.Client.ROOT` when omitted.
|
|
149
|
+
*/
|
|
150
|
+
since?: EventSequenceNumber.Client.Composite;
|
|
151
|
+
/**
|
|
152
|
+
* Only include events up to this logical timestamp (inclusive).
|
|
153
|
+
*/
|
|
154
|
+
until?: EventSequenceNumber.Client.Composite;
|
|
155
|
+
/**
|
|
156
|
+
* Only include events of the given names.
|
|
157
|
+
*/
|
|
158
|
+
filter?: ReadonlyArray<string>;
|
|
159
|
+
/**
|
|
160
|
+
* Only include events from specific client identifiers.
|
|
161
|
+
*/
|
|
162
|
+
clientIds?: ReadonlyArray<string>;
|
|
163
|
+
/**
|
|
164
|
+
* Only include events from specific session identifiers.
|
|
165
|
+
*/
|
|
166
|
+
sessionIds?: ReadonlyArray<string>;
|
|
167
|
+
/**
|
|
168
|
+
* Number of events to fetch in each batch when streaming from the eventlog.
|
|
169
|
+
* Defaults to 100.
|
|
170
|
+
*/
|
|
171
|
+
batchSize?: number;
|
|
172
|
+
/**
|
|
173
|
+
* Include client-only events (i.e. events with a positive client sequence number).
|
|
174
|
+
*/
|
|
175
|
+
includeClientOnly?: boolean;
|
|
176
|
+
}
|
|
100
177
|
export interface LeaderSyncProcessor {
|
|
101
178
|
/** Used by client sessions to subscribe to upstream sync state changes */
|
|
102
179
|
pull: (args: {
|
|
103
|
-
cursor: EventSequenceNumber.
|
|
180
|
+
cursor: EventSequenceNumber.Client.Composite;
|
|
104
181
|
}) => Stream.Stream<{
|
|
105
182
|
payload: typeof SyncState.PayloadUpstream.Type;
|
|
106
|
-
},
|
|
183
|
+
}, UnknownError>;
|
|
107
184
|
/** The `pullQueue` API can be used instead of `pull` when more convenient */
|
|
108
185
|
pullQueue: (args: {
|
|
109
|
-
cursor: EventSequenceNumber.
|
|
186
|
+
cursor: EventSequenceNumber.Client.Composite;
|
|
110
187
|
}) => Effect.Effect<Queue.Queue<{
|
|
111
188
|
payload: typeof SyncState.PayloadUpstream.Type;
|
|
112
|
-
}>,
|
|
189
|
+
}>, UnknownError, Scope.Scope>;
|
|
113
190
|
/** Used by client sessions to push events to the leader thread */
|
|
114
191
|
push: (
|
|
115
192
|
/** `batch` needs to follow the same rules as `batch` in `SyncBackend.push` */
|
|
116
|
-
batch: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>, options?: {
|
|
193
|
+
batch: ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta>, options?: {
|
|
117
194
|
/**
|
|
118
195
|
* If true, the effect will only finish when the local push has been processed (i.e. succeeded or was rejected).
|
|
196
|
+
* `true` doesn't mean the events have been pushed to the sync backend.
|
|
119
197
|
* @default false
|
|
120
198
|
*/
|
|
121
199
|
waitForProcessing?: boolean;
|
|
122
200
|
}) => Effect.Effect<void, LeaderAheadError>;
|
|
123
201
|
/** Currently only used by devtools which don't provide their own event numbers */
|
|
124
202
|
pushPartial: (args: {
|
|
125
|
-
event: LiveStoreEvent.
|
|
203
|
+
event: LiveStoreEvent.Input.Encoded;
|
|
126
204
|
clientId: string;
|
|
127
205
|
sessionId: string;
|
|
128
|
-
}) => Effect.Effect<void,
|
|
206
|
+
}) => Effect.Effect<void, UnknownError>;
|
|
129
207
|
boot: Effect.Effect<{
|
|
130
|
-
initialLeaderHead: EventSequenceNumber.
|
|
131
|
-
},
|
|
208
|
+
initialLeaderHead: EventSequenceNumber.Client.Composite;
|
|
209
|
+
}, UnknownError, LeaderThreadCtx | Scope.Scope | HttpClient.HttpClient>;
|
|
132
210
|
syncState: Subscribable.Subscribable<SyncState.SyncState>;
|
|
133
211
|
}
|
|
134
212
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,YAAY,EACZ,eAAe,EAChB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Context, Schema } from '@livestore/utils/effect';
|
|
2
|
+
import { EventSequenceNumber } from "../schema/mod.js";
|
|
2
3
|
export const InitialSyncOptionsSkip = Schema.TaggedStruct('Skip', {});
|
|
3
4
|
export const InitialSyncOptionsBlocking = Schema.TaggedStruct('Blocking', {
|
|
4
5
|
timeout: Schema.Union(Schema.DurationFromMillis, Schema.Number),
|
|
@@ -6,4 +7,16 @@ export const InitialSyncOptionsBlocking = Schema.TaggedStruct('Blocking', {
|
|
|
6
7
|
export const InitialSyncOptions = Schema.Union(InitialSyncOptionsSkip, InitialSyncOptionsBlocking);
|
|
7
8
|
export class LeaderThreadCtx extends Context.Tag('LeaderThreadCtx')() {
|
|
8
9
|
}
|
|
10
|
+
export const STREAM_EVENTS_BATCH_SIZE_DEFAULT = 100;
|
|
11
|
+
export const STREAM_EVENTS_BATCH_SIZE_MAX = 1_000;
|
|
12
|
+
export const StreamEventsOptionsFields = {
|
|
13
|
+
since: Schema.optional(EventSequenceNumber.Client.Composite),
|
|
14
|
+
until: Schema.optional(EventSequenceNumber.Client.Composite),
|
|
15
|
+
filter: Schema.optional(Schema.Array(Schema.String)),
|
|
16
|
+
clientIds: Schema.optional(Schema.Array(Schema.String)),
|
|
17
|
+
sessionIds: Schema.optional(Schema.Array(Schema.String)),
|
|
18
|
+
batchSize: Schema.optional(Schema.Int.pipe(Schema.between(1, STREAM_EVENTS_BATCH_SIZE_MAX))),
|
|
19
|
+
includeClientOnly: Schema.optional(Schema.Boolean),
|
|
20
|
+
};
|
|
21
|
+
export const StreamEventsOptionsSchema = Schema.Struct(StreamEventsOptionsFields);
|
|
9
22
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAezD,OAAO,EAAE,mBAAmB,EAA6C,MAAM,kBAAkB,CAAA;AAMjG,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,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;CAChE,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAA;AA4ClG,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EA8BhE;CAAG;AAqBN,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,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAC5F,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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Effect, type Layer, LogLevel } from '@livestore/utils/effect';
|
|
2
|
+
/**
|
|
3
|
+
* Optional Effect logger configuration that LiveStore entry points accept.
|
|
4
|
+
*
|
|
5
|
+
* When provided, `logger` replaces the default pretty logger for the runtime.
|
|
6
|
+
* Use `logLevel` to control verbosity. Set to `LogLevel.None` to disable logging
|
|
7
|
+
* entirely while keeping the same logger implementation.
|
|
8
|
+
*/
|
|
9
|
+
export type WithLoggerOptions = {
|
|
10
|
+
/** Optional Effect logger layer to control logging output. */
|
|
11
|
+
logger?: Layer.Layer<never> | undefined;
|
|
12
|
+
/** Optional minimum log level for the runtime. */
|
|
13
|
+
logLevel?: LogLevel.LogLevel | undefined;
|
|
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
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAU,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,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;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IACxB,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACnC,iFAAiF;IACjF,aAAa,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;CACnC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,iBAAiB,EAAE,WAAW,cAAc,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAM3G,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,iBAAiB,EAAE,WAAW,cAAc,KAAG,QAAQ,CAAC,QAIhG,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EACjD,SAAS,iBAAiB,EAC1B,WAAW,cAAc,KACxB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAInF,CAAA"}
|
package/dist/logging.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { isDevEnv } from '@livestore/utils';
|
|
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)
|
|
8
|
+
return config.logger;
|
|
9
|
+
if (defaults?.defaultLogger)
|
|
10
|
+
return defaults.defaultLogger;
|
|
11
|
+
const threadName = defaults?.threadName ?? 'livestore';
|
|
12
|
+
const mode = defaults?.mode;
|
|
13
|
+
return Logger.prettyWithThread(threadName, mode ? { 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() ? 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
|
+
};
|
|
33
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAc,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AA8B9E;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA0B,EAAE,QAAyB,EAAsB,EAAE;IAC9G,IAAI,MAAM,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IACxC,IAAI,QAAQ,EAAE,aAAa;QAAE,OAAO,QAAQ,CAAC,aAAa,CAAA;IAC1D,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,WAAW,CAAA;IACtD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAA;IAC3B,OAAO,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAClE,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAA0B,EAAE,QAAyB,EAAqB,EAAE;IAC1G,IAAI,MAAM,EAAE,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAA;IAC1D,IAAI,QAAQ,EAAE,eAAe,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,eAAe,CAAA;IAC5E,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAA;AACpD,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAA0B,EAC1B,QAAyB,EAC2D,EAAE;IACtF,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AAC1F,CAAC,CAAA"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { Scope, SubscriptionRef } from '@livestore/utils/effect';
|
|
2
2
|
import { Effect } from '@livestore/utils/effect';
|
|
3
3
|
import * as Webmesh from '@livestore/webmesh';
|
|
4
|
-
import type { AdapterArgs, ClientSession, ClientSessionLeaderThreadProxy, LockStatus, SqliteDb,
|
|
4
|
+
import type { AdapterArgs, ClientSession, ClientSessionLeaderThreadProxy, LockStatus, SqliteDb, UnknownError } from './adapter-types.ts';
|
|
5
5
|
import * as Devtools from './devtools/mod.ts';
|
|
6
6
|
declare global {
|
|
7
7
|
var __debugWebmeshNode: any;
|
|
8
8
|
}
|
|
9
|
-
export declare const makeClientSession: <R>({ storeId, clientId, sessionId, isLeader, devtoolsEnabled, connectDevtoolsToStore, lockStatus, leaderThread, schema, sqliteDb, shutdown, connectWebmeshNode, webmeshMode, registerBeforeUnload, debugInstanceId, }: AdapterArgs & {
|
|
9
|
+
export declare const makeClientSession: <R>({ storeId, clientId, sessionId, isLeader, devtoolsEnabled, connectDevtoolsToStore, lockStatus, leaderThread, schema, sqliteDb, shutdown, connectWebmeshNode, webmeshMode, registerBeforeUnload, debugInstanceId, origin, }: AdapterArgs & {
|
|
10
10
|
clientId: string;
|
|
11
11
|
sessionId: string;
|
|
12
12
|
isLeader: boolean;
|
|
@@ -16,8 +16,10 @@ export declare const makeClientSession: <R>({ storeId, clientId, sessionId, isLe
|
|
|
16
16
|
connectWebmeshNode: (args: {
|
|
17
17
|
webmeshNode: Webmesh.MeshNode;
|
|
18
18
|
sessionInfo: Devtools.SessionInfo.SessionInfo;
|
|
19
|
-
}) => Effect.Effect<void,
|
|
19
|
+
}) => Effect.Effect<void, UnknownError, Scope.Scope | R>;
|
|
20
20
|
webmeshMode: "direct" | "proxy";
|
|
21
21
|
registerBeforeUnload: (onBeforeUnload: () => void) => () => void;
|
|
22
|
+
/** Browser origin of the client session; used for origin-scoped DevTools mesh channels */
|
|
23
|
+
origin: string | undefined;
|
|
22
24
|
}) => Effect.Effect<ClientSession, never, Scope.Scope | R>;
|
|
23
25
|
//# sourceMappingURL=make-client-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-client-session.d.ts","sourceRoot":"","sources":["../src/make-client-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,8BAA8B,EAC9B,UAAU,EACV,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"make-client-session.d.ts","sourceRoot":"","sources":["../src/make-client-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,8BAA8B,EAC9B,UAAU,EACV,QAAQ,EACR,YAAY,EACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAG7C,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,GAAG,CAAA;CAC5B;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,4NAiBlC,WAAW,GAAG;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IACvD,YAAY,EAAE,8BAA8B,CAAC,8BAA8B,CAAA;IAC3E,QAAQ,EAAE,QAAQ,CAAA;IAClB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QACzB,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAA;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAA;KAC9C,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACxD,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC/B,oBAAoB,EAAE,CAAC,cAAc,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;IAChE,0FAA0F;IAC1F,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAyFY,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { Effect, Stream } from '@livestore/utils/effect';
|
|
|
2
2
|
import * as Webmesh from '@livestore/webmesh';
|
|
3
3
|
import * as Devtools from "./devtools/mod.js";
|
|
4
4
|
import { liveStoreVersion } from "./version.js";
|
|
5
|
-
export const makeClientSession = ({ storeId, clientId, sessionId, isLeader, devtoolsEnabled, connectDevtoolsToStore, lockStatus, leaderThread, schema, sqliteDb, shutdown, connectWebmeshNode, webmeshMode, registerBeforeUnload, debugInstanceId, }) => Effect.gen(function* () {
|
|
5
|
+
export const makeClientSession = ({ storeId, clientId, sessionId, isLeader, devtoolsEnabled, connectDevtoolsToStore, lockStatus, leaderThread, schema, sqliteDb, shutdown, connectWebmeshNode, webmeshMode, registerBeforeUnload, debugInstanceId, origin, }) => Effect.gen(function* () {
|
|
6
6
|
const devtools = devtoolsEnabled
|
|
7
7
|
? { enabled: true, pullLatch: yield* Effect.makeLatch(true), pushLatch: yield* Effect.makeLatch(true) }
|
|
8
8
|
: { enabled: false };
|
|
@@ -17,9 +17,12 @@ export const makeClientSession = ({ storeId, clientId, sessionId, isLeader, devt
|
|
|
17
17
|
sessionId,
|
|
18
18
|
schemaAlias,
|
|
19
19
|
isLeader,
|
|
20
|
+
origin,
|
|
20
21
|
});
|
|
21
22
|
yield* connectWebmeshNode({ webmeshNode, sessionInfo });
|
|
22
|
-
const sessionInfoBroadcastChannel = yield* Devtools.makeSessionInfoBroadcastChannel(webmeshNode
|
|
23
|
+
const sessionInfoBroadcastChannel = yield* Devtools.makeSessionInfoBroadcastChannel(webmeshNode, {
|
|
24
|
+
origin,
|
|
25
|
+
});
|
|
23
26
|
yield* Devtools.SessionInfo.provideSessionInfo({
|
|
24
27
|
webChannel: sessionInfoBroadcastChannel,
|
|
25
28
|
sessionInfo,
|