@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-push-payload.js","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"validate-push-payload.js","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE9D,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAmD,EACnD,0BAA2D,EAC3D,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,IAAI,gBAAgB,CAAC;gBAC1B,kBAAkB,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;gBACnF,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;aAC/D,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for synthesizing LiveStore events in tests while keeping track of
|
|
3
|
+
* sequence numbers, parent pointers, and authoring client identity. Inspired
|
|
4
|
+
* by the effect-based schema utilities, the factory exposes a namespaced API
|
|
5
|
+
* where each event definition maps to a helper with `next`, `advanceTo`, and
|
|
6
|
+
* `setParent` functions that share a single sequence stream.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { EventFactory } from '@livestore/common/testing'
|
|
11
|
+
* import { events } from './schema'
|
|
12
|
+
*
|
|
13
|
+
* const eventFactory = EventFactory.makeFactory(events)({
|
|
14
|
+
* client: EventFactory.clientIdentity('test-client'),
|
|
15
|
+
* startSeq: 1,
|
|
16
|
+
* initialParent: 'root',
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* const bootstrap = eventFactory.todoCreated.next({
|
|
20
|
+
* id: 'todo-1',
|
|
21
|
+
* text: 'write tests',
|
|
22
|
+
* completed: false,
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* eventFactory.todoCreated.advanceTo(42)
|
|
26
|
+
* const branched = eventFactory.todoUpdated.next({
|
|
27
|
+
* id: 'todo-1',
|
|
28
|
+
* text: 'ship feature',
|
|
29
|
+
* completed: true,
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
import type { EventDef } from '../schema/EventDef/mod.ts';
|
|
34
|
+
import * as LiveStoreEvent from '../schema/LiveStoreEvent/mod.ts';
|
|
35
|
+
export interface ClientIdentity {
|
|
36
|
+
clientId: string;
|
|
37
|
+
sessionId: string;
|
|
38
|
+
}
|
|
39
|
+
export declare const clientIdentity: (label: string, session?: string) => ClientIdentity;
|
|
40
|
+
export type SequenceValue = 'root' | number;
|
|
41
|
+
type EventFactoriesArgs<TDefs extends Record<string, EventDef.Any>> = {
|
|
42
|
+
[K in keyof TDefs]: Parameters<TDefs[K]>[0];
|
|
43
|
+
};
|
|
44
|
+
type EventFactories<TDefs extends Record<string, EventDef.Any>, TResult> = {
|
|
45
|
+
[K in keyof TDefs]: {
|
|
46
|
+
next: (args: EventFactoriesArgs<TDefs>[K]) => TResult;
|
|
47
|
+
advanceTo: (seq: number, parent?: SequenceValue) => void;
|
|
48
|
+
setParent: (parent: SequenceValue) => void;
|
|
49
|
+
current: () => {
|
|
50
|
+
seq: number;
|
|
51
|
+
parent: SequenceValue;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export interface EventFactoriesConfig {
|
|
56
|
+
client: ClientIdentity;
|
|
57
|
+
/**
|
|
58
|
+
* @default 1
|
|
59
|
+
*/
|
|
60
|
+
startSeq?: number;
|
|
61
|
+
/**
|
|
62
|
+
* @default 0 (root)
|
|
63
|
+
*/
|
|
64
|
+
initialParent?: SequenceValue;
|
|
65
|
+
}
|
|
66
|
+
export declare const makeFactory: <TDefs extends Record<string, EventDef.Any>>(eventDefs: TDefs) => ({ client, startSeq, initialParent, }: EventFactoriesConfig) => EventFactories<TDefs, LiveStoreEvent.Global.Encoded>;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=event-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-factory.d.ts","sourceRoot":"","sources":["../../src/testing/event-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,KAAK,cAAc,MAAM,iCAAiC,CAAA;AAEjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,gBAA4B,KAAG,cAG3E,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3C,KAAK,kBAAkB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI;KACnE,CAAC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAA;AAED,KAAK,cAAc,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;KACxE,CAAC,IAAI,MAAM,KAAK,GAAG;QAClB,IAAI,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;QACrD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;QACxD,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;QAC1C,OAAO,EAAE,MAAM;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,aAAa,CAAA;SAAE,CAAA;KACtD;CACF,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,eAAO,MAAM,WAAW,GACrB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,MAC5D,sCAIE,oBAAoB,KAAG,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAgD5E,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for synthesizing LiveStore events in tests while keeping track of
|
|
3
|
+
* sequence numbers, parent pointers, and authoring client identity. Inspired
|
|
4
|
+
* by the effect-based schema utilities, the factory exposes a namespaced API
|
|
5
|
+
* where each event definition maps to a helper with `next`, `advanceTo`, and
|
|
6
|
+
* `setParent` functions that share a single sequence stream.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { EventFactory } from '@livestore/common/testing'
|
|
11
|
+
* import { events } from './schema'
|
|
12
|
+
*
|
|
13
|
+
* const eventFactory = EventFactory.makeFactory(events)({
|
|
14
|
+
* client: EventFactory.clientIdentity('test-client'),
|
|
15
|
+
* startSeq: 1,
|
|
16
|
+
* initialParent: 'root',
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* const bootstrap = eventFactory.todoCreated.next({
|
|
20
|
+
* id: 'todo-1',
|
|
21
|
+
* text: 'write tests',
|
|
22
|
+
* completed: false,
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* eventFactory.todoCreated.advanceTo(42)
|
|
26
|
+
* const branched = eventFactory.todoUpdated.next({
|
|
27
|
+
* id: 'todo-1',
|
|
28
|
+
* text: 'ship feature',
|
|
29
|
+
* completed: true,
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
import { Schema } from '@livestore/utils/effect';
|
|
34
|
+
import * as EventSequenceNumber from "../schema/EventSequenceNumber/mod.js";
|
|
35
|
+
import * as LiveStoreEvent from "../schema/LiveStoreEvent/mod.js";
|
|
36
|
+
export const clientIdentity = (label, session = `${label}-session`) => ({
|
|
37
|
+
clientId: label,
|
|
38
|
+
sessionId: session,
|
|
39
|
+
});
|
|
40
|
+
export const makeFactory = (eventDefs) => ({ client, startSeq = 1, initialParent = 'root', }) => {
|
|
41
|
+
let nextSeq = startSeq;
|
|
42
|
+
let parentRef = initialParent;
|
|
43
|
+
const advanceTo = (seq, parent = 'root') => {
|
|
44
|
+
nextSeq = seq;
|
|
45
|
+
parentRef = parent;
|
|
46
|
+
};
|
|
47
|
+
const setParent = (parent) => {
|
|
48
|
+
parentRef = parent;
|
|
49
|
+
};
|
|
50
|
+
const current = () => ({ seq: nextSeq, parent: parentRef });
|
|
51
|
+
const factories = {};
|
|
52
|
+
for (const [name, eventDef] of Object.entries(eventDefs)) {
|
|
53
|
+
const next = (args) => {
|
|
54
|
+
const decoded = eventDef(args);
|
|
55
|
+
const encodedArgs = Schema.encodeSync(eventDef.schema)(decoded.args);
|
|
56
|
+
const encoded = eventDef.encoded(encodedArgs);
|
|
57
|
+
const event = LiveStoreEvent.Global.Encoded.make({
|
|
58
|
+
name: encoded.name,
|
|
59
|
+
args: encoded.args,
|
|
60
|
+
seqNum: EventSequenceNumber.Global.make(nextSeq),
|
|
61
|
+
parentSeqNum: parentRef === 'root' ? EventSequenceNumber.Client.ROOT.global : EventSequenceNumber.Global.make(parentRef),
|
|
62
|
+
clientId: client.clientId,
|
|
63
|
+
sessionId: client.sessionId,
|
|
64
|
+
});
|
|
65
|
+
parentRef = nextSeq;
|
|
66
|
+
nextSeq = nextSeq + 1;
|
|
67
|
+
return event;
|
|
68
|
+
};
|
|
69
|
+
factories[name] = {
|
|
70
|
+
next,
|
|
71
|
+
advanceTo,
|
|
72
|
+
setParent,
|
|
73
|
+
current,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return factories;
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=event-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-factory.js","sourceRoot":"","sources":["../../src/testing/event-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,KAAK,mBAAmB,MAAM,sCAAsC,CAAA;AAC3E,OAAO,KAAK,cAAc,MAAM,iCAAiC,CAAA;AAOjE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,OAAO,GAAG,GAAG,KAAK,UAAU,EAAkB,EAAE,CAAC,CAAC;IAC9F,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,OAAO;CACnB,CAAC,CAAA;AA6BF,MAAM,CAAC,MAAM,WAAW,GACtB,CAA6C,SAAgB,EAAE,EAAE,CACjE,CAAC,EACC,MAAM,EACN,QAAQ,GAAG,CAAC,EACZ,aAAa,GAAG,MAAM,GACD,EAAwD,EAAE;IAC/E,IAAI,OAAO,GAAG,QAAQ,CAAA;IACtB,IAAI,SAAS,GAAkB,aAAa,CAAA;IAE5C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,SAAwB,MAAM,EAAE,EAAE;QAChE,OAAO,GAAG,GAAG,CAAA;QACb,SAAS,GAAG,MAAM,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,MAAqB,EAAE,EAAE;QAC1C,SAAS,GAAG,MAAM,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;IAE3D,MAAM,SAAS,GAAkE,EAAE,CAAA;IAEnF,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAwC,EAAE,CAAC;QAChG,MAAM,IAAI,GAAG,CAAC,IAA4C,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAE7C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChD,YAAY,EACV,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC5G,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAA;YAEF,SAAS,GAAG,OAAO,CAAA;YACnB,OAAO,GAAG,OAAO,GAAG,CAAC,CAAA;YAErB,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,SAAS,CAAC,IAAI,CAAC,GAAG;YAChB,IAAI;YACJ,SAAS;YACT,SAAS;YACT,OAAO;SAC6D,CAAA;IACxE,CAAC;IAED,OAAO,SAAiE,CAAA;AAC1E,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/testing/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/testing/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
export declare const liveStoreVersion: "0.4.0-dev.
|
|
1
|
+
export declare const liveStoreVersion: "0.4.0-dev.21";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
|
|
3
|
+
* CRITICAL: Increment this version whenever you modify client-side EVENTLOG table schemas.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Used to generate database file names (e.g., `eventlog@6.db`, `state@6.db`) across all client adapters.
|
|
6
|
+
*
|
|
7
|
+
* Bump required when:
|
|
8
|
+
* - Modifying eventlog system tables (eventlogMetaTable, syncStatusTable) in schema/state/sqlite/system-tables/eventlog-tables.ts
|
|
9
|
+
* - Changing columns, types, constraints, or indexes in eventlog tables
|
|
10
|
+
*
|
|
11
|
+
* Bump NOT required when:
|
|
12
|
+
* - Modifying STATE table schemas (auto-migrated via hash-based detection and rebuilt from eventlog)
|
|
13
|
+
* - Changing query patterns or client-side implementation details
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ CRITICAL: Eventlog changes without bumping this version cause permanent data loss!
|
|
16
|
+
*
|
|
17
|
+
* Impact: Version changes trigger a "soft reset" - old data becomes inaccessible but remains on disk.
|
|
8
18
|
*/
|
|
9
|
-
export declare const liveStoreStorageFormatVersion =
|
|
19
|
+
export declare const liveStoreStorageFormatVersion = 6;
|
|
10
20
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAG,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAG,cAAuB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAA"}
|
package/dist/version.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
// TODO bring back when Expo and Playwright supports `with` imports
|
|
2
2
|
// import packageJson from '../package.json' with { type: 'json' }
|
|
3
3
|
// export const liveStoreVersion = packageJson.version
|
|
4
|
-
export const liveStoreVersion = '0.4.0-dev.
|
|
4
|
+
export const liveStoreVersion = '0.4.0-dev.21';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
|
|
6
|
+
* CRITICAL: Increment this version whenever you modify client-side EVENTLOG table schemas.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Used to generate database file names (e.g., `eventlog@6.db`, `state@6.db`) across all client adapters.
|
|
9
|
+
*
|
|
10
|
+
* Bump required when:
|
|
11
|
+
* - Modifying eventlog system tables (eventlogMetaTable, syncStatusTable) in schema/state/sqlite/system-tables/eventlog-tables.ts
|
|
12
|
+
* - Changing columns, types, constraints, or indexes in eventlog tables
|
|
13
|
+
*
|
|
14
|
+
* Bump NOT required when:
|
|
15
|
+
* - Modifying STATE table schemas (auto-migrated via hash-based detection and rebuilt from eventlog)
|
|
16
|
+
* - Changing query patterns or client-side implementation details
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ CRITICAL: Eventlog changes without bumping this version cause permanent data loss!
|
|
19
|
+
*
|
|
20
|
+
* Impact: Version changes trigger a "soft reset" - old data becomes inaccessible but remains on disk.
|
|
11
21
|
*/
|
|
12
|
-
export const liveStoreStorageFormatVersion =
|
|
22
|
+
export const liveStoreStorageFormatVersion = 6;
|
|
13
23
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAuB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/common",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.21",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -8,20 +8,19 @@
|
|
|
8
8
|
"./sql-queries": "./dist/sql-queries/index.js",
|
|
9
9
|
"./leader-thread": "./dist/leader-thread/mod.js",
|
|
10
10
|
"./schema": "./dist/schema/mod.js",
|
|
11
|
+
"./sync": "./dist/sync/index.js",
|
|
11
12
|
"./sync/next": "./dist/sync/next/mod.js",
|
|
12
|
-
"./sync/next/test": "./dist/sync/next/test/mod.js"
|
|
13
|
+
"./sync/next/test": "./dist/sync/next/test/mod.js",
|
|
14
|
+
"./testing": "./dist/testing/mod.js"
|
|
13
15
|
},
|
|
14
16
|
"dependencies": {
|
|
15
17
|
"@opentelemetry/api": "1.9.0",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"graphology-types": "0.24.8",
|
|
19
|
-
"@livestore/utils": "0.4.0-dev.2",
|
|
20
|
-
"@livestore/webmesh": "0.4.0-dev.2"
|
|
18
|
+
"@livestore/utils": "0.4.0-dev.21",
|
|
19
|
+
"@livestore/webmesh": "0.4.0-dev.21"
|
|
21
20
|
},
|
|
22
21
|
"devDependencies": {
|
|
23
22
|
"vitest": "3.2.4",
|
|
24
|
-
"@livestore/utils-dev": "0.4.0-dev.
|
|
23
|
+
"@livestore/utils-dev": "0.4.0-dev.21"
|
|
25
24
|
},
|
|
26
25
|
"files": [
|
|
27
26
|
"package.json",
|
|
@@ -1,33 +1,41 @@
|
|
|
1
|
-
import type { Effect, Stream } from '@livestore/utils/effect'
|
|
1
|
+
import type { Effect, Stream, Subscribable } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
3
|
import type { MigrationsReport } from './defs.ts'
|
|
4
4
|
import type * as Devtools from './devtools/mod.ts'
|
|
5
|
-
import type {
|
|
6
|
-
import type
|
|
5
|
+
import type { UnknownError } from './errors.ts'
|
|
6
|
+
import type { StreamEventsOptions } from './leader-thread/types.ts'
|
|
7
|
+
import type * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts'
|
|
7
8
|
import type { LiveStoreEvent } from './schema/mod.ts'
|
|
8
|
-
import type { LeaderAheadError } from './sync/sync.ts'
|
|
9
|
+
import type { LeaderAheadError, SyncBackend } from './sync/sync.ts'
|
|
9
10
|
import type { PayloadUpstream, SyncState } from './sync/syncstate.ts'
|
|
10
11
|
|
|
11
12
|
export interface ClientSessionLeaderThreadProxy {
|
|
12
13
|
events: {
|
|
13
14
|
pull: (args: {
|
|
14
|
-
cursor: EventSequenceNumber.
|
|
15
|
-
}) => Stream.Stream<{ payload: typeof PayloadUpstream.Type },
|
|
15
|
+
cursor: EventSequenceNumber.Client.Composite
|
|
16
|
+
}) => Stream.Stream<{ payload: typeof PayloadUpstream.Type }, UnknownError>
|
|
16
17
|
/** It's important that a client session doesn't call `push` concurrently. */
|
|
17
|
-
push(batch: ReadonlyArray<LiveStoreEvent.
|
|
18
|
+
push(batch: ReadonlyArray<LiveStoreEvent.Client.Encoded>): Effect.Effect<void, UnknownError | LeaderAheadError>
|
|
19
|
+
/** Stream events with filtering */
|
|
20
|
+
stream(options: StreamEventsOptions): Stream.Stream<LiveStoreEvent.Client.Encoded, UnknownError>
|
|
18
21
|
}
|
|
19
22
|
/** The initial state after the leader thread has booted */
|
|
20
23
|
readonly initialState: {
|
|
21
24
|
/** The latest event sequence number during boot. Used for the client session to resume syncing. */
|
|
22
|
-
readonly leaderHead: EventSequenceNumber.
|
|
25
|
+
readonly leaderHead: EventSequenceNumber.Client.Composite
|
|
23
26
|
/** The migrations report from the leader thread */
|
|
24
27
|
readonly migrationsReport: MigrationsReport
|
|
25
28
|
}
|
|
26
|
-
export: Effect.Effect<Uint8Array<ArrayBuffer>,
|
|
27
|
-
getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>,
|
|
28
|
-
|
|
29
|
+
export: Effect.Effect<Uint8Array<ArrayBuffer>, UnknownError>
|
|
30
|
+
getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>, UnknownError>
|
|
31
|
+
syncState: Subscribable.Subscribable<SyncState, UnknownError>
|
|
29
32
|
/** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
|
|
30
|
-
sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void,
|
|
33
|
+
sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnknownError>
|
|
34
|
+
/**
|
|
35
|
+
* Reactive stream describing the connectivity between the leader and its upstream sync backend.
|
|
36
|
+
* Includes raw connection state, last transition timestamp, and devtools overrides (latch state).
|
|
37
|
+
*/
|
|
38
|
+
networkStatus: Subscribable.Subscribable<SyncBackend.NetworkStatus>
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
export const of = (
|
package/src/adapter-types.ts
CHANGED
|
@@ -10,15 +10,21 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import type { ClientSessionLeaderThreadProxy } from './ClientSessionLeaderThreadProxy.ts'
|
|
12
12
|
import type * as Devtools from './devtools/mod.ts'
|
|
13
|
-
import type { IntentionalShutdownCause,
|
|
13
|
+
import type { IntentionalShutdownCause, MaterializeError, UnknownError } from './errors.ts'
|
|
14
14
|
import type { LiveStoreSchema } from './schema/mod.ts'
|
|
15
15
|
import type { SqliteDb } from './sqlite-types.ts'
|
|
16
|
+
import type { IsOfflineError, SyncError } from './sync/index.ts'
|
|
16
17
|
|
|
17
18
|
export * as ClientSessionLeaderThreadProxy from './ClientSessionLeaderThreadProxy.ts'
|
|
18
19
|
export * from './defs.ts'
|
|
19
20
|
export * from './errors.ts'
|
|
20
21
|
export * from './sqlite-types.ts'
|
|
21
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Runtime handle to an active LiveStore client session within the current process.
|
|
25
|
+
* Provides direct access to the embedded SQLite database, leader thread bridge,
|
|
26
|
+
* and lifecycle controls useful for application-level coordination.
|
|
27
|
+
*/
|
|
22
28
|
export interface ClientSession {
|
|
23
29
|
/** SQLite database with synchronous API running in the same thread (usually in-memory) */
|
|
24
30
|
sqliteDb: SqliteDb
|
|
@@ -27,7 +33,9 @@ export interface ClientSession {
|
|
|
27
33
|
sessionId: string
|
|
28
34
|
/** Status info whether current session is leader or not */
|
|
29
35
|
lockStatus: SubscriptionRef.SubscriptionRef<LockStatus>
|
|
30
|
-
shutdown: (
|
|
36
|
+
shutdown: (
|
|
37
|
+
cause: Exit.Exit<IntentionalShutdownCause, UnknownError | SyncError | MaterializeError>,
|
|
38
|
+
) => Effect.Effect<void>
|
|
31
39
|
/** A proxy API to communicate with the leader thread */
|
|
32
40
|
leaderThread: ClientSessionLeaderThreadProxy
|
|
33
41
|
/** A unique identifier for the current instance of the client session. Used for debugging purposes. */
|
|
@@ -111,9 +119,9 @@ export interface ClientSessionDevtoolsChannel
|
|
|
111
119
|
|
|
112
120
|
export type ConnectDevtoolsToStore = (
|
|
113
121
|
storeDevtoolsChannel: ClientSessionDevtoolsChannel,
|
|
114
|
-
) => Effect.Effect<void,
|
|
122
|
+
) => Effect.Effect<void, UnknownError, Scope.Scope>
|
|
115
123
|
|
|
116
|
-
export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession,
|
|
124
|
+
export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnknownError, Scope.Scope>
|
|
117
125
|
|
|
118
126
|
export interface AdapterArgs {
|
|
119
127
|
schema: LiveStoreSchema
|
|
@@ -121,12 +129,16 @@ export interface AdapterArgs {
|
|
|
121
129
|
devtoolsEnabled: boolean
|
|
122
130
|
debugInstanceId: string
|
|
123
131
|
bootStatusQueue: Queue.Queue<BootStatus>
|
|
124
|
-
shutdown: (
|
|
132
|
+
shutdown: (
|
|
133
|
+
exit: Exit.Exit<IntentionalShutdownCause, UnknownError | SyncError | MaterializeError | IsOfflineError>,
|
|
134
|
+
) => Effect.Effect<void>
|
|
125
135
|
connectDevtoolsToStore: ConnectDevtoolsToStore
|
|
126
136
|
/**
|
|
127
137
|
* Payload that will be passed to the sync backend when connecting
|
|
128
138
|
*
|
|
129
139
|
* @default undefined
|
|
130
140
|
*/
|
|
131
|
-
|
|
141
|
+
syncPayloadSchema: Schema.Schema<any> | undefined
|
|
142
|
+
/** Encoded representation of the sync payload matching `syncPayloadSchema`. */
|
|
143
|
+
syncPayloadEncoded: Schema.JsonValue | undefined
|
|
132
144
|
}
|
package/src/debug-info.ts
CHANGED
|
@@ -22,6 +22,15 @@ export const SlowQueryInfo = Schema.Struct({
|
|
|
22
22
|
startTimePerfNow: Schema.Number,
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
+
const getSizeLimit = (value: unknown): number =>
|
|
26
|
+
typeof (value as { sizeLimit?: number }).sizeLimit === 'number'
|
|
27
|
+
? (value as { sizeLimit: number }).sizeLimit
|
|
28
|
+
: Number.POSITIVE_INFINITY
|
|
29
|
+
|
|
30
|
+
const isBoundArrayLike = (value: unknown): value is BoundArray<unknown> =>
|
|
31
|
+
value instanceof BoundArray ||
|
|
32
|
+
(value !== null && typeof value === 'object' && typeof (value as { sizeLimit?: number }).sizeLimit === 'number')
|
|
33
|
+
|
|
25
34
|
const BoundArraySchemaFromSelf = <A, I, R>(
|
|
26
35
|
item: Schema.Schema<A, I, R>,
|
|
27
36
|
): Schema.Schema<BoundArray<A>, BoundArray<I>, R> =>
|
|
@@ -29,16 +38,17 @@ const BoundArraySchemaFromSelf = <A, I, R>(
|
|
|
29
38
|
[item],
|
|
30
39
|
{
|
|
31
40
|
decode: (item) => (input, parseOptions, ast) => {
|
|
32
|
-
if (input
|
|
41
|
+
if (isBoundArrayLike(input)) {
|
|
33
42
|
const elements = ParseResult.decodeUnknown(Schema.Array(item))([...input], parseOptions)
|
|
34
|
-
return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(input
|
|
43
|
+
return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(getSizeLimit(input), as))
|
|
35
44
|
}
|
|
36
45
|
return ParseResult.fail(new ParseResult.Type(ast, input))
|
|
37
46
|
},
|
|
38
47
|
encode: (item) => (input, parseOptions, ast) => {
|
|
39
|
-
if (input
|
|
40
|
-
const
|
|
41
|
-
|
|
48
|
+
if (isBoundArrayLike(input)) {
|
|
49
|
+
const items = [...input]
|
|
50
|
+
const elements = ParseResult.encodeUnknown(Schema.Array(item))(items, parseOptions)
|
|
51
|
+
return ParseResult.map(elements, (is): BoundArray<I> => BoundArray.make(getSizeLimit(input), is))
|
|
42
52
|
}
|
|
43
53
|
return ParseResult.fail(new ParseResult.Type(ast, input))
|
|
44
54
|
},
|
|
@@ -47,7 +57,28 @@ const BoundArraySchemaFromSelf = <A, I, R>(
|
|
|
47
57
|
description: `BoundArray<${Schema.format(item)}>`,
|
|
48
58
|
pretty: () => (_) => `BoundArray(${_.length})`,
|
|
49
59
|
arbitrary: () => (fc) => fc.anything() as any,
|
|
50
|
-
equivalence: () =>
|
|
60
|
+
equivalence: () => {
|
|
61
|
+
const elementEquivalence = Schema.equivalence(item)
|
|
62
|
+
return (a: unknown, b: unknown) => {
|
|
63
|
+
if (a === b) {
|
|
64
|
+
return true
|
|
65
|
+
}
|
|
66
|
+
if (!isBoundArrayLike(a) || !isBoundArrayLike(b)) {
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
if (getSizeLimit(a) !== getSizeLimit(b) || a.length !== b.length) {
|
|
70
|
+
return false
|
|
71
|
+
}
|
|
72
|
+
const itemsA = [...a]
|
|
73
|
+
const itemsB = [...b]
|
|
74
|
+
for (let i = 0; i < itemsA.length; i++) {
|
|
75
|
+
if (!elementEquivalence(itemsA[i] as any, itemsB[i] as any)) {
|
|
76
|
+
return false
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return true
|
|
80
|
+
}
|
|
81
|
+
},
|
|
51
82
|
},
|
|
52
83
|
)
|
|
53
84
|
|
|
@@ -52,8 +52,8 @@ export class SyncHeadUnsubscribe extends LSDClientSessionReqResMessage('LSD.Clie
|
|
|
52
52
|
subscriptionId: Schema.String,
|
|
53
53
|
}) {}
|
|
54
54
|
export class SyncHeadRes extends LSDClientSessionReqResMessage('LSD.ClientSession.SyncHeadRes', {
|
|
55
|
-
local: EventSequenceNumber.
|
|
56
|
-
upstream: EventSequenceNumber.
|
|
55
|
+
local: EventSequenceNumber.Client.Composite,
|
|
56
|
+
upstream: EventSequenceNumber.Client.Composite,
|
|
57
57
|
subscriptionId: Schema.String,
|
|
58
58
|
}) {}
|
|
59
59
|
|
|
@@ -2,14 +2,7 @@ import { Schema } from '@livestore/utils/effect'
|
|
|
2
2
|
|
|
3
3
|
import { liveStoreVersion as pkgVersion } from '../version.ts'
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
isConnected: Schema.Boolean,
|
|
7
|
-
timestampMs: Schema.Number,
|
|
8
|
-
/** Whether the network status devtools latch is closed. Used to simulate network disconnection. */
|
|
9
|
-
latchClosed: Schema.Boolean,
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
export type NetworkStatus = typeof NetworkStatus.Type
|
|
5
|
+
export { NetworkStatus } from '../sync/sync-backend.ts'
|
|
13
6
|
|
|
14
7
|
export const requestId = Schema.String
|
|
15
8
|
export const clientId = Schema.String
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema, Transferable } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
-
import * as LiveStoreEvent from '../schema/LiveStoreEvent.ts'
|
|
3
|
+
import * as LiveStoreEvent from '../schema/LiveStoreEvent/mod.ts'
|
|
4
4
|
import { EventSequenceNumber } from '../schema/mod.ts'
|
|
5
5
|
import * as SyncState from '../sync/syncstate.ts'
|
|
6
6
|
import { LeaderReqResMessage, LSDMessage, LSDReqResMessage, NetworkStatus } from './devtools-messages-common.ts'
|
|
@@ -51,7 +51,7 @@ export class SyncHistoryUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHis
|
|
|
51
51
|
subscriptionId: Schema.String,
|
|
52
52
|
}) {}
|
|
53
53
|
export class SyncHistoryRes extends LSDReqResMessage('LSD.Leader.SyncHistoryRes', {
|
|
54
|
-
eventEncoded: LiveStoreEvent.
|
|
54
|
+
eventEncoded: LiveStoreEvent.Global.Encoded,
|
|
55
55
|
metadata: Schema.Option(Schema.JsonValue),
|
|
56
56
|
subscriptionId: Schema.String,
|
|
57
57
|
}) {}
|
|
@@ -63,8 +63,8 @@ export class SyncHeadUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHeadUn
|
|
|
63
63
|
subscriptionId: Schema.String,
|
|
64
64
|
}) {}
|
|
65
65
|
export class SyncHeadRes extends LSDReqResMessage('LSD.Leader.SyncHeadRes', {
|
|
66
|
-
local: EventSequenceNumber.
|
|
67
|
-
upstream: EventSequenceNumber.
|
|
66
|
+
local: EventSequenceNumber.Client.Composite,
|
|
67
|
+
upstream: EventSequenceNumber.Client.Composite,
|
|
68
68
|
subscriptionId: Schema.String,
|
|
69
69
|
}) {}
|
|
70
70
|
|
|
@@ -77,13 +77,14 @@ export class SnapshotRes extends LSDReqResMessage('LSD.Leader.SnapshotRes', {
|
|
|
77
77
|
export const LoadDatabaseFile = LeaderReqResMessage('LSD.Leader.LoadDatabaseFile', {
|
|
78
78
|
payload: {
|
|
79
79
|
data: Transferable.Uint8Array as Schema.Schema<Uint8Array<ArrayBuffer>>,
|
|
80
|
+
batchId: Schema.optional(Schema.String),
|
|
80
81
|
},
|
|
81
82
|
success: {},
|
|
82
83
|
error: {
|
|
83
84
|
cause: Schema.Union(
|
|
84
85
|
Schema.TaggedStruct('unsupported-file', {}),
|
|
85
86
|
Schema.TaggedStruct('unsupported-database', {}),
|
|
86
|
-
Schema.TaggedStruct('
|
|
87
|
+
Schema.TaggedStruct('unknown-error', { cause: Schema.Defect }),
|
|
87
88
|
),
|
|
88
89
|
},
|
|
89
90
|
})
|
|
@@ -95,7 +96,7 @@ export class SyncPull extends LSDMessage('LSD.Leader.SyncPull', {
|
|
|
95
96
|
|
|
96
97
|
// TODO refactor this to use push/pull semantics
|
|
97
98
|
export class CommitEventReq extends LSDReqResMessage('LSD.Leader.CommitEventReq', {
|
|
98
|
-
eventEncoded: LiveStoreEvent.
|
|
99
|
+
eventEncoded: LiveStoreEvent.Input.Encoded,
|
|
99
100
|
}) {}
|
|
100
101
|
|
|
101
102
|
export class CommitEventRes extends LSDReqResMessage('LSD.Leader.CommitEventRes', {}) {}
|
|
@@ -133,7 +134,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
|
|
|
133
134
|
// liveStoreVersion,
|
|
134
135
|
// },
|
|
135
136
|
// success: DatabaseFileInfo,
|
|
136
|
-
// failure:
|
|
137
|
+
// failure: UnknownError,
|
|
137
138
|
// }) {}
|
|
138
139
|
|
|
139
140
|
// export class NetworkStatus_ extends Schema.TaggedRequest<NetworkStatus_>()('LSD.Leader.NetworkStatus', {
|
|
@@ -142,7 +143,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
|
|
|
142
143
|
// liveStoreVersion,
|
|
143
144
|
// },
|
|
144
145
|
// success: NetworkStatus,
|
|
145
|
-
// failure:
|
|
146
|
+
// failure: UnknownError,
|
|
146
147
|
// }) {}
|
|
147
148
|
|
|
148
149
|
// export const MessageToApp_ = Schema.Union(DatabaseFileInfo_, NetworkStatus_)
|
|
@@ -21,6 +21,12 @@ export const SessionInfo = Schema.TaggedStruct('SessionInfo', {
|
|
|
21
21
|
sessionId: Schema.String,
|
|
22
22
|
schemaAlias: Schema.String,
|
|
23
23
|
isLeader: Schema.Boolean,
|
|
24
|
+
/**
|
|
25
|
+
* Browser origin that produced this SessionInfo (for example, 'http://localhost:5173').
|
|
26
|
+
* Set by browser-based publishers so DevTools can defensively filter by origin.
|
|
27
|
+
* Currently only needed by the browser extension; non‑browser publishers typically set `undefined`.
|
|
28
|
+
*/
|
|
29
|
+
origin: Schema.UndefinedOr(Schema.String),
|
|
24
30
|
})
|
|
25
31
|
export type SessionInfo = typeof SessionInfo.Type
|
|
26
32
|
|
|
@@ -55,7 +61,7 @@ export const requestSessionInfoSubscription = ({
|
|
|
55
61
|
webChannel: WebChannel.WebChannel<Message, Message>
|
|
56
62
|
pollInterval?: Duration.DurationInput
|
|
57
63
|
staleTimeout?: Duration.DurationInput
|
|
58
|
-
}): Effect.Effect<Subscribable.Subscribable<
|
|
64
|
+
}): Effect.Effect<Subscribable.Subscribable<HashSet.HashSet<SessionInfo>>, ParseResult.ParseError, Scope.Scope> =>
|
|
59
65
|
Effect.gen(function* () {
|
|
60
66
|
yield* webChannel
|
|
61
67
|
.send(RequestSessions.make({}))
|
|
@@ -94,8 +100,5 @@ export const requestSessionInfoSubscription = ({
|
|
|
94
100
|
Effect.forkScoped,
|
|
95
101
|
)
|
|
96
102
|
|
|
97
|
-
return Subscribable.make({
|
|
98
|
-
get: sessionInfoSubRef.get.pipe(Effect.map((sessionInfos) => new Set(sessionInfos))),
|
|
99
|
-
changes: sessionInfoSubRef.changes.pipe(Stream.map((sessionInfos) => new Set(sessionInfos))),
|
|
100
|
-
})
|
|
103
|
+
return Subscribable.make({ get: sessionInfoSubRef.get, changes: sessionInfoSubRef.changes })
|
|
101
104
|
})
|
package/src/devtools/mod.ts
CHANGED
|
@@ -34,7 +34,15 @@ export const makeNodeName = {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export const makeChannelName = {
|
|
37
|
-
|
|
37
|
+
/**
|
|
38
|
+
* SessionInfo channel for DevTools discovery.
|
|
39
|
+
* When an `origin` is provided, it is incorporated into the channel name to scope
|
|
40
|
+
* broadcasts per origin (e.g. `session-info::http%3A%2F%2Flocalhost%3A5173`).
|
|
41
|
+
* The `origin` is currently required only for the browser extension path; non‑browser
|
|
42
|
+
* publishers can pass `undefined` to use the legacy global channel name.
|
|
43
|
+
*/
|
|
44
|
+
sessionInfo: ({ origin }: { origin: string | undefined }) =>
|
|
45
|
+
origin ? `session-info::${encodeURIComponent(origin)}` : `session-info`,
|
|
38
46
|
devtoolsClientSession: ({ storeId, clientId, sessionId }: { storeId: string; clientId: string; sessionId: string }) =>
|
|
39
47
|
`devtools-channel(client-session-${storeId}-${clientId}-${sessionId})`,
|
|
40
48
|
devtoolsClientLeader: ({ storeId, clientId, sessionId }: { storeId: string; clientId: string; sessionId: string }) =>
|
|
@@ -52,8 +60,9 @@ export const isChannelName = {
|
|
|
52
60
|
|
|
53
61
|
export const makeSessionInfoBroadcastChannel = (
|
|
54
62
|
webmeshNode: MeshNode,
|
|
63
|
+
options: { origin: string | undefined },
|
|
55
64
|
): Effect.Effect<WebChannel.WebChannel<SessionInfo.Message, SessionInfo.Message>, never, Scope.Scope> =>
|
|
56
65
|
webmeshNode.makeBroadcastChannel({
|
|
57
|
-
channelName: makeChannelName.sessionInfo(),
|
|
66
|
+
channelName: makeChannelName.sessionInfo({ origin: options?.origin }),
|
|
58
67
|
schema: SessionInfo.Message,
|
|
59
68
|
})
|