@livestore/common 0.4.0-dev.9 → 0.5.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +27 -12
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
- package/dist/MaterializationJournal.d.ts +44 -0
- package/dist/MaterializationJournal.d.ts.map +1 -0
- package/dist/MaterializationJournal.js +112 -0
- package/dist/MaterializationJournal.js.map +1 -0
- package/dist/StateHead.d.ts +26 -0
- package/dist/StateHead.d.ts.map +1 -0
- package/dist/StateHead.js +50 -0
- package/dist/StateHead.js.map +1 -0
- package/dist/WorkerTransportError.d.ts +11 -0
- package/dist/WorkerTransportError.d.ts.map +1 -0
- package/dist/WorkerTransportError.js +11 -0
- package/dist/WorkerTransportError.js.map +1 -0
- package/dist/__tests__/fixture.d.ts +1 -1
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +3 -3
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/adapter-types.d.ts +59 -57
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +31 -22
- package/dist/adapter-types.js.map +1 -1
- package/dist/bounded-collections.d.ts.map +1 -1
- package/dist/bounded-collections.js +6 -4
- package/dist/bounded-collections.js.map +1 -1
- package/dist/debug-info.d.ts +56 -56
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +46 -32
- package/dist/debug-info.js.map +1 -1
- package/dist/defs.d.ts +9 -9
- package/dist/defs.js +2 -2
- package/dist/devtools/devtools-compatibility.test.d.ts +2 -0
- package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
- package/dist/devtools/devtools-compatibility.test.js +16 -0
- package/dist/devtools/devtools-compatibility.test.js.map +1 -0
- package/dist/devtools/devtools-messages-client-session.d.ts +531 -312
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +86 -67
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +32 -35
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +12 -14
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +417 -320
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +117 -87
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +28 -17
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +12 -6
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +17 -7
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +19 -8
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +52 -46
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +31 -21
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +116 -21
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +596 -470
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/RejectedPushError.d.ts +138 -0
- package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
- package/dist/leader-thread/RejectedPushError.js +97 -0
- package/dist/leader-thread/RejectedPushError.js.map +1 -0
- package/dist/leader-thread/connection.d.ts +1 -0
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +10 -9
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +20 -15
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +80 -20
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +110 -62
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +19 -7
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +67 -45
- 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 -2
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +32 -9
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/mod.d.ts +1 -0
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +1 -0
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +19 -40
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +3 -7
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -3
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/stream-events.d.ts +53 -0
- package/dist/leader-thread/stream-events.d.ts.map +1 -0
- package/dist/leader-thread/stream-events.js +164 -0
- package/dist/leader-thread/stream-events.js.map +1 -0
- package/dist/leader-thread/types.d.ts +92 -51
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +17 -4
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +15 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +2 -0
- package/dist/logging.js.map +1 -0
- package/dist/make-client-session.d.ts +6 -5
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +10 -7
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +6 -7
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +22 -40
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +4 -4
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +8 -8
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +3 -3
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +52 -39
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +161 -0
- package/dist/schema/EventDef/define.d.ts.map +1 -0
- package/dist/schema/EventDef/define.js +140 -0
- package/dist/schema/EventDef/define.js.map +1 -0
- package/dist/schema/EventDef/define.test.d.ts +2 -0
- package/dist/schema/EventDef/define.test.d.ts.map +1 -0
- package/dist/schema/EventDef/define.test.js +23 -0
- package/dist/schema/EventDef/define.test.js.map +1 -0
- package/dist/schema/EventDef/deprecated.d.ts +94 -0
- package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
- package/dist/schema/EventDef/deprecated.js +143 -0
- package/dist/schema/EventDef/deprecated.js.map +1 -0
- package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
- package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
- package/dist/schema/EventDef/deprecated.test.js +95 -0
- package/dist/schema/EventDef/deprecated.test.js.map +1 -0
- package/dist/schema/EventDef/event-def.d.ts +110 -0
- package/dist/schema/EventDef/event-def.d.ts.map +1 -0
- package/dist/schema/EventDef/event-def.js +2 -0
- package/dist/schema/EventDef/event-def.js.map +1 -0
- package/dist/schema/EventDef/facts.d.ts +118 -0
- package/dist/schema/EventDef/facts.d.ts.map +1 -0
- package/dist/schema/EventDef/facts.js +53 -0
- package/dist/schema/EventDef/facts.js.map +1 -0
- package/dist/schema/EventDef/materializer.d.ts +155 -0
- package/dist/schema/EventDef/materializer.d.ts.map +1 -0
- package/dist/schema/EventDef/materializer.js +83 -0
- package/dist/schema/EventDef/materializer.js.map +1 -0
- package/dist/schema/EventDef/mod.d.ts +6 -0
- package/dist/schema/EventDef/mod.d.ts.map +1 -0
- package/dist/schema/EventDef/mod.js +6 -0
- package/dist/schema/EventDef/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/client.js +192 -0
- package/dist/schema/EventSequenceNumber/client.js.map +1 -0
- package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/global.js +14 -0
- package/dist/schema/EventSequenceNumber/global.js.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.js +37 -0
- package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +44 -44
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent/client.d.ts +168 -0
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/client.js +179 -0
- package/dist/schema/LiveStoreEvent/client.js.map +1 -0
- package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
- package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/client.test.js +120 -0
- package/dist/schema/LiveStoreEvent/client.test.js.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
- package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/global.js +31 -0
- package/dist/schema/LiveStoreEvent/global.js.map +1 -0
- package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/input.js +26 -0
- package/dist/schema/LiveStoreEvent/input.js.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.js +5 -0
- package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +7 -4
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +6 -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 +34 -5
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +14 -18
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +54 -30
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +146 -6
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +13 -15
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +132 -57
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +155 -70
- 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 +26 -17
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -2
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +15 -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 +25 -19
- 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 +22 -16
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +28 -17
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +14 -12
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +6 -4
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +3 -5
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +6 -8
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/persistence.d.ts +11 -0
- package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
- package/dist/schema/state/sqlite/persistence.js +10 -0
- package/dist/schema/state/sqlite/persistence.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts +58 -29
- 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 +105 -24
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +4 -2
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +42 -27
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +402 -498
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
- package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +24 -14
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
- package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
- package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +515 -0
- 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 +678 -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 +87 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +19 -20
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +54 -4
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +226 -20
- 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 +70 -0
- package/dist/schema/unknown-events.js.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
- package/dist/schema-management/common.js +2 -2
- package/dist/schema-management/common.js.map +1 -1
- package/dist/schema-management/migrations.d.ts +32 -2
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +38 -6
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +3 -3
- package/dist/schema-management/validate-schema.d.ts.map +1 -1
- package/dist/schema-management/validate-schema.js +2 -2
- package/dist/schema-management/validate-schema.js.map +1 -1
- package/dist/session-id-symbol.d.ts +29 -0
- package/dist/session-id-symbol.d.ts.map +1 -0
- package/dist/session-id-symbol.js +44 -0
- package/dist/session-id-symbol.js.map +1 -0
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +26 -16
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.js.map +1 -1
- package/dist/sql-queries/types.d.ts +6 -7
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sql-queries/types.js.map +1 -1
- package/dist/sqlite-db-helper.d.ts +21 -1
- package/dist/sqlite-db-helper.d.ts.map +1 -1
- package/dist/sqlite-db-helper.js +40 -5
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +8 -11
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sqlite-types.js +3 -3
- package/dist/sqlite-types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +47 -25
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +269 -154
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +12 -51
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +7 -24
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +11 -10
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +97 -74
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/mock-sync-backend.test.d.ts +2 -0
- package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.test.js +49 -0
- package/dist/sync/mock-sync-backend.test.js.map +1 -0
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +11 -12
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +5 -5
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +7 -8
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +58 -15
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +219 -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 +12 -11
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +5 -5
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +6 -6
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +4 -4
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +2 -2
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +9 -9
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +12 -12
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
- package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
- package/dist/sync/next/test/history-dag-common.test.js +73 -0
- package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
- package/dist/sync/sync-backend-kv.d.ts +3 -3
- package/dist/sync/sync-backend-kv.d.ts.map +1 -1
- package/dist/sync/sync-backend-kv.js +6 -4
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +41 -21
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/sync-backend.js +45 -4
- package/dist/sync/sync-backend.js.map +1 -1
- package/dist/sync/sync.d.ts +23 -2
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +115 -191
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +108 -129
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +289 -161
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +35 -0
- package/dist/sync/transport-chunking.d.ts.map +1 -0
- package/dist/sync/transport-chunking.js +47 -0
- package/dist/sync/transport-chunking.js.map +1 -0
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +4 -6
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/testing/event-factory.d.ts +3 -3
- package/dist/testing/event-factory.d.ts.map +1 -1
- package/dist/testing/event-factory.js +5 -7
- package/dist/testing/event-factory.js.map +1 -1
- package/dist/util.d.ts +11 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +21 -4
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +24 -5
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +25 -8
- package/dist/version.js.map +1 -1
- package/package.json +50 -16
- package/src/ClientSessionLeaderThreadProxy.ts +27 -12
- package/src/MaterializationJournal.ts +184 -0
- package/src/StateHead.ts +80 -0
- package/src/WorkerTransportError.ts +12 -0
- package/src/__tests__/fixture.ts +3 -3
- package/src/adapter-types.ts +62 -56
- package/src/bounded-collections.ts +6 -5
- package/src/debug-info.ts +54 -43
- package/src/defs.ts +2 -2
- package/src/devtools/devtools-compatibility.test.ts +19 -0
- package/src/devtools/devtools-messages-client-session.ts +72 -63
- package/src/devtools/devtools-messages-common.ts +18 -22
- package/src/devtools/devtools-messages-leader.ts +89 -68
- package/src/devtools/devtools-sessioninfo.ts +17 -12
- package/src/devtools/mod.ts +15 -7
- package/src/errors.ts +58 -38
- package/src/index.ts +11 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +927 -674
- package/src/leader-thread/RejectedPushError.ts +119 -0
- package/src/leader-thread/connection.ts +13 -9
- package/src/leader-thread/eventlog.ts +114 -41
- package/src/leader-thread/leader-worker-devtools.ts +223 -124
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +170 -82
- package/src/leader-thread/materialize-event.ts +51 -16
- package/src/leader-thread/mod.ts +1 -0
- package/src/leader-thread/recreate-db.ts +26 -61
- package/src/leader-thread/shutdown-channel.ts +3 -18
- package/src/leader-thread/stream-events.ts +209 -0
- package/src/leader-thread/types.ts +77 -65
- package/src/logging.ts +15 -0
- package/src/make-client-session.ts +16 -10
- package/src/materializer-helper.ts +31 -49
- package/src/otel.ts +15 -13
- package/src/rematerialize-from-eventlog.ts +106 -93
- package/src/schema/EventDef/define.test.ts +28 -0
- package/src/schema/EventDef/define.ts +218 -0
- package/src/schema/EventDef/deprecated.test.ts +122 -0
- package/src/schema/EventDef/deprecated.ts +172 -0
- package/src/schema/EventDef/event-def.ts +123 -0
- package/src/schema/EventDef/facts.ts +135 -0
- package/src/schema/EventDef/materializer.ts +172 -0
- package/src/schema/EventDef/mod.ts +5 -0
- package/src/schema/EventSequenceNumber/client.ts +256 -0
- package/src/schema/EventSequenceNumber/global.ts +19 -0
- package/src/schema/EventSequenceNumber/mod.ts +37 -0
- package/src/schema/EventSequenceNumber.test.ts +72 -53
- package/src/schema/LiveStoreEvent/client.test.ts +142 -0
- package/src/schema/LiveStoreEvent/client.ts +236 -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 +7 -4
- package/src/schema/schema.ts +48 -6
- package/src/schema/state/sqlite/client-document-def.test.ts +172 -14
- package/src/schema/state/sqlite/client-document-def.ts +126 -98
- package/src/schema/state/sqlite/column-annotations.test.ts +27 -45
- package/src/schema/state/sqlite/column-annotations.ts +27 -30
- package/src/schema/state/sqlite/column-def.test.ts +186 -77
- package/src/schema/state/sqlite/column-def.ts +169 -62
- package/src/schema/state/sqlite/column-spec.test.ts +34 -19
- package/src/schema/state/sqlite/column-spec.ts +38 -11
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +17 -7
- package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +37 -17
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +65 -45
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +48 -40
- package/src/schema/state/sqlite/mod.ts +9 -12
- package/src/schema/state/sqlite/persistence.ts +11 -0
- package/src/schema/state/sqlite/query-builder/api.ts +61 -23
- package/src/schema/state/sqlite/query-builder/astToSql.ts +117 -23
- package/src/schema/state/sqlite/query-builder/impl.test.ts +489 -551
- package/src/schema/state/sqlite/query-builder/impl.ts +43 -26
- package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
- package/src/schema/state/sqlite/schema-helpers.ts +30 -22
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
- package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
- package/src/schema/state/sqlite/system-tables/state-tables.ts +109 -0
- package/src/schema/state/sqlite/table-def.test.ts +295 -46
- package/src/schema/state/sqlite/table-def.ts +109 -64
- package/src/schema/unknown-events.ts +132 -0
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
- package/src/schema-management/common.ts +2 -2
- package/src/schema-management/migrations.ts +42 -9
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/session-id-symbol.ts +59 -0
- package/src/sql-queries/sql-queries.ts +26 -18
- package/src/sql-queries/sql-query-builder.ts +1 -0
- package/src/sql-queries/types.ts +6 -7
- package/src/sqlite-db-helper.ts +67 -5
- package/src/sqlite-types.ts +9 -11
- package/src/sync/ClientSessionSyncProcessor.ts +388 -194
- package/src/sync/errors.ts +18 -28
- package/src/sync/index.ts +2 -0
- package/src/sync/mock-sync-backend.test.ts +78 -0
- package/src/sync/mock-sync-backend.ts +196 -108
- package/src/sync/next/compact-events.ts +10 -11
- package/src/sync/next/facts.ts +13 -14
- package/src/sync/next/history-dag-common.ts +306 -26
- package/src/sync/next/history-dag.ts +20 -13
- package/src/sync/next/rebase-events.ts +12 -12
- package/src/sync/next/test/compact-events.calculator.test.ts +5 -4
- package/src/sync/next/test/compact-events.test.ts +4 -3
- package/src/sync/next/test/event-fixtures.ts +14 -14
- package/src/sync/next/test/history-dag-common.test.ts +87 -0
- package/src/sync/sync-backend-kv.ts +7 -4
- package/src/sync/sync-backend.ts +75 -26
- package/src/sync/sync.ts +24 -2
- package/src/sync/syncstate.test.ts +657 -442
- package/src/sync/syncstate.ts +175 -160
- package/src/sync/transport-chunking.ts +85 -0
- package/src/sync/validate-push-payload.ts +6 -8
- package/src/testing/event-factory.ts +10 -12
- package/src/util.ts +20 -11
- package/src/version.ts +32 -8
- package/dist/schema/EventDef.d.ts +0 -126
- package/dist/schema/EventDef.d.ts.map +0 -1
- package/dist/schema/EventDef.js +0 -46
- package/dist/schema/EventDef.js.map +0 -1
- package/dist/schema/EventSequenceNumber.d.ts +0 -80
- package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
- package/dist/schema/EventSequenceNumber.js +0 -139
- package/dist/schema/EventSequenceNumber.js.map +0 -1
- package/dist/schema/LiveStoreEvent.d.ts +0 -306
- package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
- package/dist/schema/LiveStoreEvent.js +0 -147
- package/dist/schema/LiveStoreEvent.js.map +0 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +0 -976
- package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
- package/dist/schema/state/sqlite/system-tables.js +0 -81
- package/dist/schema/state/sqlite/system-tables.js.map +0 -1
- package/dist/sql-queries/misc.d.ts +0 -2
- package/dist/sql-queries/misc.d.ts.map +0 -1
- package/dist/sql-queries/misc.js +0 -2
- package/dist/sql-queries/misc.js.map +0 -1
- package/dist/sync/next/graphology.d.ts +0 -8
- package/dist/sync/next/graphology.d.ts.map +0 -1
- package/dist/sync/next/graphology.js +0 -30
- package/dist/sync/next/graphology.js.map +0 -1
- package/dist/sync/next/graphology_.d.ts +0 -3
- package/dist/sync/next/graphology_.d.ts.map +0 -1
- package/dist/sync/next/graphology_.js +0 -3
- package/dist/sync/next/graphology_.js.map +0 -1
- package/src/schema/EventDef.ts +0 -222
- package/src/schema/EventSequenceNumber.ts +0 -199
- package/src/schema/LiveStoreEvent.ts +0 -286
- package/src/schema/state/sqlite/system-tables.ts +0 -106
- package/src/sql-queries/misc.ts +0 -2
- 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,7 +1,6 @@
|
|
|
1
1
|
import type { Nullable } from '@livestore/utils'
|
|
2
2
|
import { omitUndefineds } from '@livestore/utils'
|
|
3
|
-
import type
|
|
4
|
-
import { Schema } from '@livestore/utils/effect'
|
|
3
|
+
import { type Option, Schema, Struct, type Types } from '@livestore/utils/effect'
|
|
5
4
|
|
|
6
5
|
import type * as SqliteAst from '../ast/sqlite.ts'
|
|
7
6
|
import type { ColumnDefinition } from './field-defs.ts'
|
|
@@ -20,19 +19,18 @@ export type DbSchemaInput = Record<string, TableDefinition<any, any>> | Readonly
|
|
|
20
19
|
* - array: we use the table name of each array item (= table definition) as the object key
|
|
21
20
|
* - object: we discard the keys of the input object and use the table name of each object value (= table definition) as the new object key
|
|
22
21
|
*/
|
|
23
|
-
export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> =
|
|
24
|
-
TableDefinition<any, any
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
: never
|
|
22
|
+
export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> =
|
|
23
|
+
TSchemaInput extends ReadonlyArray<TableDefinition<any, any>>
|
|
24
|
+
? { [K in TSchemaInput[number] as K['name']]: K }
|
|
25
|
+
: TSchemaInput extends Record<string, TableDefinition<any, any>>
|
|
26
|
+
? { [K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K] }
|
|
27
|
+
: never
|
|
30
28
|
|
|
31
29
|
// TODO ensure via runtime check (possibly even via type-level check) that all index names are unique
|
|
32
30
|
export const makeDbSchema = <TDbSchemaInput extends DbSchemaInput>(
|
|
33
31
|
schema: TDbSchemaInput,
|
|
34
32
|
): DbSchemaFromInputSchema<TDbSchemaInput> => {
|
|
35
|
-
return Array.isArray(schema) ? Object.fromEntries(schema.map((_) => [_.name, _])) : (schema as any)
|
|
33
|
+
return Array.isArray(schema) === true ? Object.fromEntries(schema.map((_) => [_.name, _])) : (schema as any)
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
export const table = <TTableName extends string, TColumns extends Columns, TIndexes extends Index[]>(
|
|
@@ -53,34 +51,50 @@ export const table = <TTableName extends string, TColumns extends Columns, TInde
|
|
|
53
51
|
export type AnyIfConstained<In, Out> = '__constrained' extends keyof In ? any : Out
|
|
54
52
|
export type EmptyObjIfConstained<In> = '__constrained' extends keyof In ? {} : In
|
|
55
53
|
|
|
56
|
-
export type
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
export type StructFieldsForColumns<TCols extends ConstraintColumns> = '__constrained' extends keyof TCols
|
|
55
|
+
? Record<string, Schema.Codec<any, any>>
|
|
56
|
+
: { readonly [K in keyof TCols]: TCols[K]['schema'] }
|
|
57
|
+
|
|
58
|
+
export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Struct<StructFieldsForColumns<TCols>>
|
|
60
59
|
|
|
61
|
-
export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.
|
|
60
|
+
export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Codec<
|
|
62
61
|
AnyIfConstained<TCols, FromColumns.InsertRowDecoded<TCols>>,
|
|
63
62
|
AnyIfConstained<TCols, FromColumns.InsertRowEncoded<TCols>>
|
|
64
63
|
>
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
interface GetColumnSchema extends Struct.Lambda {
|
|
66
|
+
<TEncoded, TDecoded, TNullable extends boolean>(
|
|
67
|
+
column: ColumnDefinition<TEncoded, TDecoded, TNullable>,
|
|
68
|
+
): ColumnDefinition<TEncoded, TDecoded, TNullable>['schema']
|
|
69
|
+
readonly '~lambda.out': this['~lambda.in'] extends ColumnDefinition<any, any, any>
|
|
70
|
+
? this['~lambda.in']['schema']
|
|
71
|
+
: never
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const getColumnSchema = Struct.lambda<GetColumnSchema>((column) => column.schema)
|
|
75
|
+
|
|
76
|
+
const structFieldsForColumns = <TCols extends ConstraintColumns>(columns: TCols): StructFieldsForColumns<TCols> =>
|
|
77
|
+
Struct.map(columns, getColumnSchema)
|
|
78
|
+
|
|
79
|
+
export const structSchemaForTable = <TTableName extends string, TColumns extends ConstraintColumns>(
|
|
80
|
+
tableDef: TableDefinition<TTableName, TColumns>,
|
|
81
|
+
): StructSchemaForColumns<TColumns> =>
|
|
82
|
+
Schema.Struct(structFieldsForColumns(tableDef.columns)).annotate({
|
|
70
83
|
title: tableDef.name,
|
|
71
|
-
})
|
|
84
|
+
})
|
|
72
85
|
|
|
73
|
-
export const insertStructSchemaForTable = <
|
|
74
|
-
tableDef:
|
|
75
|
-
): InsertStructSchemaForColumns<
|
|
86
|
+
export const insertStructSchemaForTable = <TTableName extends string, TColumns extends ConstraintColumns>(
|
|
87
|
+
tableDef: TableDefinition<TTableName, TColumns>,
|
|
88
|
+
): InsertStructSchemaForColumns<TColumns> =>
|
|
76
89
|
Schema.Struct(
|
|
77
90
|
Object.fromEntries(
|
|
78
91
|
tableDef.ast.columns.map((column) => [
|
|
79
92
|
column.name,
|
|
93
|
+
|
|
80
94
|
column.nullable === true || column.default._tag === 'Some' ? Schema.optional(column.schema) : column.schema,
|
|
81
95
|
]),
|
|
82
96
|
),
|
|
83
|
-
).
|
|
97
|
+
).annotate({
|
|
84
98
|
title: tableDef.name,
|
|
85
99
|
}) as any
|
|
86
100
|
|
|
@@ -116,12 +130,8 @@ export type TableDefinition<TName extends string, TColumns extends Columns> = {
|
|
|
116
130
|
|
|
117
131
|
export type Columns = Record<string, ColumnDefinition<any, any>>
|
|
118
132
|
|
|
119
|
-
export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> =
|
|
120
|
-
any,
|
|
121
|
-
any
|
|
122
|
-
>
|
|
123
|
-
? true
|
|
124
|
-
: false
|
|
133
|
+
export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> =
|
|
134
|
+
TColumns extends ColumnDefinition<any, any> ? true : false
|
|
125
135
|
|
|
126
136
|
/**
|
|
127
137
|
* NOTE this is only needed to avoid a TS limitation where `StructSchemaForColumns` in the default case
|
|
@@ -154,7 +164,7 @@ export namespace FromTable {
|
|
|
154
164
|
}
|
|
155
165
|
|
|
156
166
|
export type RowEncodeNonNullable<TTableDefinition extends TableDefinition<any, any>> = {
|
|
157
|
-
[K in keyof TTableDefinition['columns']]:
|
|
167
|
+
[K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Encoded']
|
|
158
168
|
}
|
|
159
169
|
|
|
160
170
|
export type RowEncoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<
|
|
@@ -171,7 +181,7 @@ export namespace FromTable {
|
|
|
171
181
|
// >
|
|
172
182
|
|
|
173
183
|
export type RowDecodedAll<TTableDefinition extends TableDefinition<any, any>> = {
|
|
174
|
-
[K in keyof TTableDefinition['columns']]:
|
|
184
|
+
[K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Type']
|
|
175
185
|
}
|
|
176
186
|
}
|
|
177
187
|
|
|
@@ -183,11 +193,11 @@ export namespace FromColumns {
|
|
|
183
193
|
>
|
|
184
194
|
|
|
185
195
|
export type RowDecodedAll<TColumns extends Columns> = {
|
|
186
|
-
readonly [K in keyof TColumns]:
|
|
196
|
+
readonly [K in keyof TColumns]: TColumns[K]['schema']['Type']
|
|
187
197
|
}
|
|
188
198
|
|
|
189
199
|
export type RowEncodedAll<TColumns extends Columns> = {
|
|
190
|
-
readonly [K in keyof TColumns]:
|
|
200
|
+
readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
|
|
191
201
|
}
|
|
192
202
|
|
|
193
203
|
export type RowEncoded<TColumns extends Columns> = Types.Simplify<
|
|
@@ -196,12 +206,11 @@ export namespace FromColumns {
|
|
|
196
206
|
>
|
|
197
207
|
|
|
198
208
|
export type RowEncodeNonNullable<TColumns extends Columns> = {
|
|
199
|
-
readonly [K in keyof TColumns]:
|
|
209
|
+
readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
|
|
200
210
|
}
|
|
201
211
|
|
|
202
212
|
export type NullableColumnNames<TColumns extends Columns> = keyof {
|
|
203
|
-
|
|
204
|
-
[K in keyof TColumns as TColumns[K] extends ColumnDefinition<any, true> ? K : never]: {}
|
|
213
|
+
[K in keyof TColumns as TColumns[K]['nullable'] extends true ? K : never]: {}
|
|
205
214
|
}
|
|
206
215
|
|
|
207
216
|
export type RequiredInsertColumns<TColumns extends Columns> = {
|
|
@@ -214,9 +223,8 @@ export namespace FromColumns {
|
|
|
214
223
|
|
|
215
224
|
export type RequiredInsertColumnNames<TColumns extends Columns> = keyof RequiredInsertColumns<TColumns>
|
|
216
225
|
|
|
217
|
-
export type RequiresInsertValues<TColumns extends Columns> =
|
|
218
|
-
? false
|
|
219
|
-
: true
|
|
226
|
+
export type RequiresInsertValues<TColumns extends Columns> =
|
|
227
|
+
RequiredInsertColumnNames<TColumns> extends never ? false : true
|
|
220
228
|
|
|
221
229
|
export type InsertRowDecoded<TColumns extends Columns> = Types.Simplify<
|
|
222
230
|
Pick<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> &
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
|
2
2
|
|
|
3
3
|
import type { MigrationOptions } from '../../../adapter-types.ts'
|
|
4
|
-
import type { Materializer } from '../../EventDef.ts'
|
|
4
|
+
import type { Materializer } from '../../EventDef/mod.ts'
|
|
5
5
|
import type { InternalState } from '../../schema.ts'
|
|
6
6
|
import { ClientDocumentTableDefSymbol, tableIsClientDocumentTable } from './client-document-def.ts'
|
|
7
7
|
import { SqliteAst } from './db-schema/mod.ts'
|
|
8
|
-
import { stateSystemTables } from './system-tables.ts'
|
|
8
|
+
import { stateSystemTables } from './system-tables/state-tables.ts'
|
|
9
9
|
import type { TableDef, TableDefBase } from './table-def.ts'
|
|
10
10
|
|
|
11
|
-
export * from '../../EventDef.ts'
|
|
11
|
+
export * from '../../EventDef/mod.ts'
|
|
12
12
|
export {
|
|
13
13
|
type ClientDocumentTableDef,
|
|
14
14
|
ClientDocumentTableDefSymbol,
|
|
@@ -22,16 +22,15 @@ export * from './column-spec.ts'
|
|
|
22
22
|
export * from './table-def.ts'
|
|
23
23
|
|
|
24
24
|
export const makeState = <TStateInput extends InputState>(inputSchema: TStateInput): InternalState => {
|
|
25
|
-
const inputTables: ReadonlyArray<TableDef> =
|
|
26
|
-
? inputSchema.tables
|
|
27
|
-
: Object.values(inputSchema.tables)
|
|
25
|
+
const inputTables: ReadonlyArray<TableDef> =
|
|
26
|
+
Array.isArray(inputSchema.tables) === true ? inputSchema.tables : Object.values(inputSchema.tables)
|
|
28
27
|
|
|
29
28
|
const tables = new Map<string, TableDef.Any>()
|
|
30
29
|
|
|
31
30
|
for (const tableDef of inputTables) {
|
|
32
31
|
const sqliteDef = tableDef.sqliteDef
|
|
33
32
|
// TODO validate tables (e.g. index names are unique)
|
|
34
|
-
if (tables.has(sqliteDef.ast.name)) {
|
|
33
|
+
if (tables.has(sqliteDef.ast.name) === true) {
|
|
35
34
|
shouldNeverHappen(`Duplicate table name: ${sqliteDef.ast.name}. Please use unique names for tables.`)
|
|
36
35
|
}
|
|
37
36
|
tables.set(sqliteDef.ast.name, tableDef)
|
|
@@ -48,7 +47,7 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
|
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
for (const tableDef of inputTables) {
|
|
51
|
-
if (tableIsClientDocumentTable(tableDef)) {
|
|
50
|
+
if (tableIsClientDocumentTable(tableDef) === true) {
|
|
52
51
|
materializers.set(
|
|
53
52
|
tableDef[ClientDocumentTableDefSymbol].derived.setEventDef.name,
|
|
54
53
|
tableDef[ClientDocumentTableDefSymbol].derived.setMaterializer,
|
|
@@ -61,14 +60,12 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
|
|
|
61
60
|
tables: [...tables.values()].map((_) => _.sqliteDef.ast),
|
|
62
61
|
})
|
|
63
62
|
|
|
64
|
-
return { sqlite: { tables, migrations: inputSchema.migrations ?? {
|
|
63
|
+
return { sqlite: { tables, migrations: inputSchema.migrations ?? {}, hash }, materializers }
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
export type InputState = {
|
|
68
67
|
readonly tables: Record<string, TableDefBase> | ReadonlyArray<TableDefBase>
|
|
69
68
|
readonly materializers: Record<string, Materializer<any>>
|
|
70
|
-
/**
|
|
71
|
-
* @default { strategy: 'auto' }
|
|
72
|
-
*/
|
|
69
|
+
/** Configures hooks and logging for automatic state migration. */
|
|
73
70
|
readonly migrations?: MigrationOptions
|
|
74
71
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LiveStoreSchema } from '../../schema.ts'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the schema-keyed base name shared by persisted state databases.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
*
|
|
8
|
+
* Adapters append backend-specific storage-format namespaces and file
|
|
9
|
+
* extensions.
|
|
10
|
+
*/
|
|
11
|
+
export const getStateDbBaseName = (schema: LiveStoreSchema): string => `state${schema.state.sqlite.hash}`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { GetValForKey, SingleOrReadonlyArray } from '@livestore/utils'
|
|
2
2
|
import { type Option, Predicate, type Schema } from '@livestore/utils/effect'
|
|
3
3
|
|
|
4
|
-
import type { SessionIdSymbol } from '../../../../
|
|
4
|
+
import type { SessionIdSymbol } from '../../../../session-id-symbol.ts'
|
|
5
5
|
import type { SqlValue } from '../../../../util.ts'
|
|
6
6
|
import type { ClientDocumentTableDef, ClientDocumentTableDefSymbol } from '../client-document-def.ts'
|
|
7
7
|
import type { SqliteDsl } from '../db-schema/mod.ts'
|
|
@@ -32,14 +32,14 @@ export namespace QueryBuilderAst {
|
|
|
32
32
|
readonly limit: Option.Option<number>
|
|
33
33
|
readonly tableDef: TableDefBase
|
|
34
34
|
readonly where: ReadonlyArray<QueryBuilderAst.Where>
|
|
35
|
-
readonly resultSchemaSingle: Schema.
|
|
35
|
+
readonly resultSchemaSingle: Schema.Codec<any, any>
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export interface CountQuery {
|
|
39
39
|
readonly _tag: 'CountQuery'
|
|
40
40
|
readonly tableDef: TableDefBase
|
|
41
41
|
readonly where: ReadonlyArray<QueryBuilderAst.Where>
|
|
42
|
-
readonly resultSchema: Schema.
|
|
42
|
+
readonly resultSchema: Schema.Codec<number, ReadonlyArray<{ count: number }>>
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export interface RowQuery {
|
|
@@ -55,7 +55,7 @@ export namespace QueryBuilderAst {
|
|
|
55
55
|
readonly values: Record<string, unknown>
|
|
56
56
|
readonly onConflict: OnConflict | undefined
|
|
57
57
|
readonly returning: string[] | undefined
|
|
58
|
-
readonly resultSchema: Schema.
|
|
58
|
+
readonly resultSchema: Schema.Codec<any, any>
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export interface OnConflict {
|
|
@@ -76,7 +76,7 @@ export namespace QueryBuilderAst {
|
|
|
76
76
|
readonly values: Record<string, unknown>
|
|
77
77
|
readonly where: ReadonlyArray<QueryBuilderAst.Where>
|
|
78
78
|
readonly returning: string[] | undefined
|
|
79
|
-
readonly resultSchema: Schema.
|
|
79
|
+
readonly resultSchema: Schema.Codec<any, any>
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
export interface DeleteQuery {
|
|
@@ -84,7 +84,7 @@ export namespace QueryBuilderAst {
|
|
|
84
84
|
readonly tableDef: TableDefBase
|
|
85
85
|
readonly where: ReadonlyArray<QueryBuilderAst.Where>
|
|
86
86
|
readonly returning: string[] | undefined
|
|
87
|
-
readonly resultSchema: Schema.
|
|
87
|
+
readonly resultSchema: Schema.Codec<any, any>
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
export type WriteQuery = InsertQuery | UpdateQuery | DeleteQuery
|
|
@@ -115,7 +115,7 @@ export const isQueryBuilder = (value: unknown): value is QueryBuilder<any, any,
|
|
|
115
115
|
|
|
116
116
|
export type QueryBuilder<
|
|
117
117
|
TResult,
|
|
118
|
-
TTableDef extends TableDefBase,
|
|
118
|
+
TTableDef extends TableDefBase<any, any>,
|
|
119
119
|
/** Used to gradually remove features from the API based on the query context */
|
|
120
120
|
TWithout extends QueryBuilder.ApiFeature = never,
|
|
121
121
|
> = {
|
|
@@ -128,15 +128,25 @@ export type QueryBuilder<
|
|
|
128
128
|
|
|
129
129
|
export namespace QueryBuilder {
|
|
130
130
|
export type Any = QueryBuilder<any, any, any>
|
|
131
|
-
export type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In
|
|
131
|
+
export type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In | WhereOps.JsonArray
|
|
132
132
|
|
|
133
133
|
export namespace WhereOps {
|
|
134
134
|
export type Equality = '=' | '!='
|
|
135
135
|
export type Order = '<' | '>' | '<=' | '>='
|
|
136
136
|
export type Like = 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE'
|
|
137
137
|
export type In = 'IN' | 'NOT IN'
|
|
138
|
+
/**
|
|
139
|
+
* Operators for checking if a JSON array column contains a value.
|
|
140
|
+
*
|
|
141
|
+
* ⚠️ **Performance note**: These operators use SQLite's `json_each()` table-valued function
|
|
142
|
+
* which **cannot be indexed** and requires a full table scan. For large tables with frequent
|
|
143
|
+
* lookups, consider denormalizing the data into a separate indexed table.
|
|
144
|
+
*
|
|
145
|
+
* @see https://sqlite.org/json1.html#jeach
|
|
146
|
+
*/
|
|
147
|
+
export type JsonArray = 'JSON_CONTAINS' | 'JSON_NOT_CONTAINS'
|
|
138
148
|
|
|
139
|
-
export type SingleValue = Equality | Order | Like
|
|
149
|
+
export type SingleValue = Equality | Order | Like | JsonArray
|
|
140
150
|
export type MultiValue = In
|
|
141
151
|
}
|
|
142
152
|
|
|
@@ -155,14 +165,26 @@ export namespace QueryBuilder {
|
|
|
155
165
|
| 'returning'
|
|
156
166
|
| 'onConflict'
|
|
157
167
|
|
|
168
|
+
/** Extracts the element type from an array type, or returns never if not an array */
|
|
169
|
+
type ArrayElement<T> = T extends ReadonlyArray<infer E> ? E : never
|
|
170
|
+
|
|
158
171
|
export type WhereParams<TTableDef extends TableDefBase> = Partial<{
|
|
159
172
|
[K in keyof TTableDef['sqliteDef']['columns']]:
|
|
160
173
|
| TTableDef['sqliteDef']['columns'][K]['schema']['Type']
|
|
161
|
-
| {
|
|
174
|
+
| {
|
|
175
|
+
op: Exclude<QueryBuilder.WhereOps.SingleValue, QueryBuilder.WhereOps.JsonArray>
|
|
176
|
+
value: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
|
|
177
|
+
}
|
|
162
178
|
| {
|
|
163
179
|
op: QueryBuilder.WhereOps.MultiValue
|
|
164
180
|
value: ReadonlyArray<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>
|
|
165
181
|
}
|
|
182
|
+
| (ArrayElement<TTableDef['sqliteDef']['columns'][K]['schema']['Type']> extends never
|
|
183
|
+
? never
|
|
184
|
+
: {
|
|
185
|
+
op: QueryBuilder.WhereOps.JsonArray
|
|
186
|
+
value: ArrayElement<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>
|
|
187
|
+
})
|
|
166
188
|
| undefined
|
|
167
189
|
}>
|
|
168
190
|
|
|
@@ -208,9 +230,8 @@ export namespace QueryBuilder {
|
|
|
208
230
|
/** Select multiple columns */
|
|
209
231
|
<TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(
|
|
210
232
|
...columns: TColumns[]
|
|
211
|
-
// TODO also support arbitrary SQL selects
|
|
212
|
-
// params: QueryBuilderSelectParams,
|
|
213
233
|
): QueryBuilder<
|
|
234
|
+
// params: QueryBuilderSelectParams, // TODO also support arbitrary SQL selects
|
|
214
235
|
ReadonlyArray<{
|
|
215
236
|
readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
|
|
216
237
|
}>,
|
|
@@ -242,7 +263,12 @@ export namespace QueryBuilder {
|
|
|
242
263
|
): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
|
|
243
264
|
<TColName extends keyof TTableDef['sqliteDef']['columns']>(
|
|
244
265
|
col: TColName,
|
|
245
|
-
op: QueryBuilder.WhereOps,
|
|
266
|
+
op: QueryBuilder.WhereOps.MultiValue,
|
|
267
|
+
value: ReadonlyArray<TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']>,
|
|
268
|
+
): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
|
|
269
|
+
<TColName extends keyof TTableDef['sqliteDef']['columns']>(
|
|
270
|
+
col: TColName,
|
|
271
|
+
op: QueryBuilder.WhereOps.SingleValue,
|
|
246
272
|
value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type'],
|
|
247
273
|
): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
|
|
248
274
|
}
|
|
@@ -331,12 +357,20 @@ export namespace QueryBuilder {
|
|
|
331
357
|
>
|
|
332
358
|
|
|
333
359
|
/**
|
|
334
|
-
* Insert a new row into the table
|
|
360
|
+
* Insert a new row into the table.
|
|
361
|
+
*
|
|
362
|
+
* @remarks
|
|
363
|
+
*
|
|
364
|
+
* Follows SQL semantics: nullable columns and columns with defaults are omittable.
|
|
365
|
+
* `NullOr(S)` and `optional(NullOr(S))` both produce nullable columns, so both are omittable.
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
335
368
|
*
|
|
336
|
-
* Example:
|
|
337
369
|
* ```ts
|
|
338
370
|
* db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })
|
|
339
371
|
* ```
|
|
372
|
+
*
|
|
373
|
+
* @param values - The row values to insert.
|
|
340
374
|
*/
|
|
341
375
|
readonly insert: (
|
|
342
376
|
values: TTableDef['insertSchema']['Type'],
|
|
@@ -347,22 +381,26 @@ export namespace QueryBuilder {
|
|
|
347
381
|
>
|
|
348
382
|
|
|
349
383
|
/**
|
|
350
|
-
*
|
|
384
|
+
* Upsert: insert a row, or handle conflicts on existing rows.
|
|
385
|
+
* Equivalent to SQLite's `INSERT ... ON CONFLICT` clause.
|
|
386
|
+
*
|
|
387
|
+
* Actions:
|
|
388
|
+
* - `'ignore'`: Skip the insert if a row with the same key exists
|
|
389
|
+
* - `'replace'`: Delete the existing row and insert the new one
|
|
390
|
+
* - `'update'`: Update specific columns on the existing row
|
|
391
|
+
*
|
|
351
392
|
* ```ts
|
|
393
|
+
* // Ignore: skip if row exists
|
|
352
394
|
* db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')
|
|
353
|
-
* ```
|
|
354
395
|
*
|
|
355
|
-
*
|
|
356
|
-
* ```ts
|
|
396
|
+
* // Replace: delete existing row and insert new one
|
|
357
397
|
* db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')
|
|
358
|
-
* ```
|
|
359
398
|
*
|
|
360
|
-
*
|
|
361
|
-
* ```ts
|
|
399
|
+
* // Update: merge specific columns into existing row
|
|
362
400
|
* db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })
|
|
363
401
|
* ```
|
|
364
402
|
*
|
|
365
|
-
* NOTE
|
|
403
|
+
* NOTE: Composite primary keys are not yet supported.
|
|
366
404
|
*/
|
|
367
405
|
readonly onConflict: {
|
|
368
406
|
<TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(
|