@livestore/common 0.4.0 → 0.5.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/MaterializationJournal.d.ts +44 -0
- package/dist/MaterializationJournal.d.ts.map +1 -0
- package/dist/MaterializationJournal.js +112 -0
- package/dist/MaterializationJournal.js.map +1 -0
- package/dist/StateHead.d.ts +26 -0
- package/dist/StateHead.d.ts.map +1 -0
- package/dist/StateHead.js +50 -0
- package/dist/StateHead.js.map +1 -0
- package/dist/WorkerTransportError.d.ts +3 -3
- package/dist/WorkerTransportError.d.ts.map +1 -1
- package/dist/WorkerTransportError.js +3 -3
- package/dist/WorkerTransportError.js.map +1 -1
- package/dist/__tests__/fixture.d.ts +1 -1
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +3 -3
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/adapter-types.d.ts +29 -57
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +20 -37
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts +56 -56
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +28 -41
- package/dist/debug-info.js.map +1 -1
- package/dist/defs.d.ts +9 -9
- package/dist/defs.js +2 -2
- package/dist/devtools/devtools-compatibility.test.js +1 -0
- package/dist/devtools/devtools-compatibility.test.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +520 -332
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +76 -74
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +27 -27
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +5 -5
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +405 -343
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +101 -89
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +18 -19
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +8 -5
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +4 -5
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +9 -5
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +45 -69
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -16
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +66 -18
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +519 -461
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/RejectedPushError.d.ts +67 -36
- package/dist/leader-thread/RejectedPushError.d.ts.map +1 -1
- package/dist/leader-thread/RejectedPushError.js +24 -5
- package/dist/leader-thread/RejectedPushError.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +1 -0
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +9 -8
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +4 -4
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +6 -6
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +33 -17
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +9 -5
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +25 -35
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.test.js +7 -7
- package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +2 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +4 -0
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +18 -39
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -6
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -3
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/stream-events.d.ts +4 -7
- package/dist/leader-thread/stream-events.d.ts.map +1 -1
- package/dist/leader-thread/stream-events.js +13 -16
- package/dist/leader-thread/stream-events.js.map +1 -1
- package/dist/leader-thread/types.d.ts +32 -69
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +5 -5
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +5 -30
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +1 -32
- package/dist/logging.js.map +1 -1
- package/dist/make-client-session.d.ts +1 -2
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +3 -3
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +0 -1
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +7 -35
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +2 -3
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +2 -7
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +28 -26
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +4 -4
- package/dist/schema/EventDef/define.d.ts.map +1 -1
- package/dist/schema/EventDef/define.js +5 -5
- package/dist/schema/EventDef/define.js.map +1 -1
- package/dist/schema/EventDef/define.test.d.ts +2 -0
- package/dist/schema/EventDef/define.test.d.ts.map +1 -0
- package/dist/schema/EventDef/define.test.js +23 -0
- package/dist/schema/EventDef/define.test.js.map +1 -0
- package/dist/schema/EventDef/deprecated.d.ts +8 -13
- package/dist/schema/EventDef/deprecated.d.ts.map +1 -1
- package/dist/schema/EventDef/deprecated.js +12 -13
- package/dist/schema/EventDef/deprecated.js.map +1 -1
- package/dist/schema/EventDef/deprecated.test.js +1 -1
- package/dist/schema/EventDef/deprecated.test.js.map +1 -1
- package/dist/schema/EventDef/event-def.d.ts +1 -1
- package/dist/schema/EventDef/event-def.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/client.d.ts +12 -12
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/client.js +8 -9
- package/dist/schema/EventSequenceNumber/client.js.map +1 -1
- package/dist/schema/EventSequenceNumber/global.d.ts +2 -2
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber/global.js +1 -1
- package/dist/schema/EventSequenceNumber/global.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +5 -5
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent/client.d.ts +50 -179
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/client.js +32 -29
- package/dist/schema/LiveStoreEvent/client.js.map +1 -1
- package/dist/schema/LiveStoreEvent/client.test.js +11 -2
- package/dist/schema/LiveStoreEvent/client.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +7 -7
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/global.d.ts +6 -6
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/global.js +1 -1
- package/dist/schema/LiveStoreEvent/global.js.map +1 -1
- package/dist/schema/LiveStoreEvent/input.d.ts +5 -5
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent/input.js +3 -3
- package/dist/schema/LiveStoreEvent/input.js.map +1 -1
- package/dist/schema/mod.d.ts +1 -0
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +1 -0
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +3 -2
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +12 -17
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +23 -20
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +29 -8
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +13 -15
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +57 -31
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +118 -72
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.js.map +1 -1
- package/dist/schema/state/sqlite/column-spec.test.js +2 -2
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -2
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +13 -4
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +9 -9
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +8 -13
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +27 -16
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +13 -11
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +5 -3
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +1 -3
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +1 -1
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/persistence.d.ts +11 -0
- package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
- package/dist/schema/state/sqlite/persistence.js +10 -0
- package/dist/schema/state/sqlite/persistence.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts +7 -7
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.js +27 -23
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +3 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +16 -14
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +362 -596
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +102 -134
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +2 -2
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +328 -106
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js +33 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.d.ts +16 -19
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +53 -3
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +153 -36
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts.map +1 -1
- package/dist/schema/unknown-events.js +2 -1
- package/dist/schema/unknown-events.js.map +1 -1
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +2 -2
- package/dist/session-id-symbol.d.ts +29 -0
- package/dist/session-id-symbol.d.ts.map +1 -0
- package/dist/session-id-symbol.js +44 -0
- package/dist/session-id-symbol.js.map +1 -0
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +8 -10
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/types.d.ts +6 -7
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sql-queries/types.js.map +1 -1
- package/dist/sqlite-db-helper.d.ts +21 -1
- package/dist/sqlite-db-helper.d.ts.map +1 -1
- package/dist/sqlite-db-helper.js +37 -2
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +3 -6
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sqlite-types.js +3 -3
- package/dist/sqlite-types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +38 -16
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +196 -66
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +12 -18
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +2 -2
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +2 -3
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +54 -33
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/mock-sync-backend.test.d.ts +2 -0
- package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.test.js +49 -0
- package/dist/sync/mock-sync-backend.test.js.map +1 -0
- package/dist/sync/next/history-dag-common.d.ts +4 -0
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +52 -31
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +2 -1
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts +7 -7
- package/dist/sync/next/test/event-fixtures.js +1 -1
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
- package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
- package/dist/sync/next/test/history-dag-common.test.js +73 -0
- package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
- package/dist/sync/sync-backend-kv.d.ts.map +1 -1
- package/dist/sync/sync-backend-kv.js +4 -2
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +15 -15
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/sync-backend.js +9 -5
- package/dist/sync/sync-backend.js.map +1 -1
- package/dist/sync/sync.d.ts +1 -1
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +97 -173
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +34 -37
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +100 -61
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +15 -16
- package/dist/sync/transport-chunking.d.ts.map +1 -1
- package/dist/sync/transport-chunking.js +23 -32
- package/dist/sync/transport-chunking.js.map +1 -1
- package/dist/util.d.ts +11 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +19 -2
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +19 -37
- package/src/ClientSessionLeaderThreadProxy.ts +1 -1
- package/src/MaterializationJournal.ts +184 -0
- package/src/StateHead.ts +80 -0
- package/src/WorkerTransportError.ts +4 -4
- package/src/__tests__/fixture.ts +3 -3
- package/src/adapter-types.ts +24 -61
- package/src/debug-info.ts +50 -70
- package/src/defs.ts +2 -2
- package/src/devtools/devtools-compatibility.test.ts +1 -0
- package/src/devtools/devtools-messages-client-session.ts +56 -65
- package/src/devtools/devtools-messages-common.ts +12 -11
- package/src/devtools/devtools-messages-leader.ts +71 -69
- package/src/devtools/devtools-sessioninfo.ts +13 -11
- package/src/devtools/mod.ts +4 -5
- package/src/errors.ts +46 -34
- package/src/index.ts +8 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +794 -691
- package/src/leader-thread/RejectedPushError.ts +40 -27
- package/src/leader-thread/connection.ts +12 -8
- package/src/leader-thread/eventlog.ts +7 -7
- package/src/leader-thread/leader-worker-devtools.ts +37 -19
- package/src/leader-thread/make-leader-thread-layer.test.ts +7 -7
- package/src/leader-thread/make-leader-thread-layer.ts +56 -53
- package/src/leader-thread/materialize-event.ts +13 -8
- package/src/leader-thread/recreate-db.ts +24 -59
- package/src/leader-thread/shutdown-channel.ts +3 -14
- package/src/leader-thread/stream-events.ts +104 -101
- package/src/leader-thread/types.ts +24 -62
- package/src/logging.ts +5 -52
- package/src/make-client-session.ts +6 -6
- package/src/materializer-helper.ts +8 -37
- package/src/otel.ts +5 -14
- package/src/rematerialize-from-eventlog.ts +97 -94
- package/src/schema/EventDef/define.test.ts +28 -0
- package/src/schema/EventDef/define.ts +20 -19
- package/src/schema/EventDef/deprecated.test.ts +1 -8
- package/src/schema/EventDef/deprecated.ts +17 -20
- package/src/schema/EventDef/event-def.ts +2 -4
- package/src/schema/EventSequenceNumber/client.ts +8 -9
- package/src/schema/EventSequenceNumber/global.ts +1 -1
- package/src/schema/EventSequenceNumber.test.ts +5 -5
- package/src/schema/LiveStoreEvent/client.test.ts +17 -4
- package/src/schema/LiveStoreEvent/client.ts +36 -35
- package/src/schema/LiveStoreEvent/for-event-def.ts +7 -7
- package/src/schema/LiveStoreEvent/global.ts +1 -1
- package/src/schema/LiveStoreEvent/input.ts +6 -6
- package/src/schema/mod.ts +1 -0
- package/src/schema/schema.ts +3 -2
- package/src/schema/state/sqlite/client-document-def.test.ts +32 -13
- package/src/schema/state/sqlite/client-document-def.ts +95 -80
- package/src/schema/state/sqlite/column-annotations.test.ts +26 -45
- package/src/schema/state/sqlite/column-annotations.ts +26 -30
- package/src/schema/state/sqlite/column-def.test.ts +132 -77
- package/src/schema/state/sqlite/column-def.ts +72 -37
- package/src/schema/state/sqlite/column-spec.test.ts +2 -2
- package/src/schema/state/sqlite/column-spec.ts +3 -2
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +15 -5
- package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -16
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +25 -31
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +35 -21
- package/src/schema/state/sqlite/mod.ts +2 -4
- package/src/schema/state/sqlite/persistence.ts +11 -0
- package/src/schema/state/sqlite/query-builder/api.ts +9 -9
- package/src/schema/state/sqlite/query-builder/astToSql.ts +31 -26
- package/src/schema/state/sqlite/query-builder/impl.test.ts +433 -669
- package/src/schema/state/sqlite/query-builder/impl.ts +19 -15
- package/src/schema/state/sqlite/schema-helpers.ts +1 -1
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +2 -2
- package/src/schema/state/sqlite/system-tables/state-tables.ts +41 -1
- package/src/schema/state/sqlite/table-def.test.ts +204 -66
- package/src/schema/state/sqlite/table-def.ts +96 -45
- package/src/schema/unknown-events.ts +3 -2
- package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +2 -2
- package/src/session-id-symbol.ts +59 -0
- package/src/sql-queries/sql-queries.ts +8 -12
- package/src/sql-queries/types.ts +6 -7
- package/src/sqlite-db-helper.ts +64 -2
- package/src/sqlite-types.ts +5 -8
- package/src/sync/ClientSessionSyncProcessor.ts +303 -119
- package/src/sync/errors.ts +14 -12
- package/src/sync/mock-sync-backend.test.ts +78 -0
- package/src/sync/mock-sync-backend.ts +93 -47
- package/src/sync/next/history-dag-common.ts +60 -34
- package/src/sync/next/history-dag.ts +4 -1
- package/src/sync/next/test/compact-events.calculator.test.ts +2 -2
- package/src/sync/next/test/event-fixtures.ts +1 -1
- package/src/sync/next/test/history-dag-common.test.ts +87 -0
- package/src/sync/sync-backend-kv.ts +4 -2
- package/src/sync/sync-backend.ts +15 -15
- package/src/sync/sync.ts +1 -1
- package/src/sync/syncstate.test.ts +191 -140
- package/src/sync/syncstate.ts +63 -53
- package/src/sync/transport-chunking.ts +34 -39
- package/src/util.ts +18 -9
- package/src/version.ts +1 -2
- package/dist/sql-queries/misc.d.ts +0 -2
- package/dist/sql-queries/misc.d.ts.map +0 -1
- package/dist/sql-queries/misc.js +0 -2
- package/dist/sql-queries/misc.js.map +0 -1
- package/src/sql-queries/misc.ts +0 -2
package/src/sync/syncstate.ts
CHANGED
|
@@ -58,24 +58,24 @@ export class SyncState extends Schema.Class<SyncState>('SyncState')({
|
|
|
58
58
|
/**
|
|
59
59
|
* This payload propagates a rebase from the upstream node
|
|
60
60
|
*/
|
|
61
|
-
export
|
|
61
|
+
export const PayloadUpstreamRebase = Schema.TaggedStruct('upstream-rebase', {
|
|
62
62
|
/** Events which need to be rolled back */
|
|
63
63
|
rollbackEvents: Schema.Array(LiveStoreEvent.Client.EncodedWithMeta),
|
|
64
64
|
/** Events which need to be applied after the rollback (already rebased by the upstream node) */
|
|
65
65
|
newEvents: Schema.Array(LiveStoreEvent.Client.EncodedWithMeta),
|
|
66
|
-
})
|
|
66
|
+
})
|
|
67
67
|
|
|
68
|
-
export
|
|
68
|
+
export const PayloadUpstreamAdvance = Schema.TaggedStruct('upstream-advance', {
|
|
69
69
|
newEvents: Schema.Array(LiveStoreEvent.Client.EncodedWithMeta),
|
|
70
|
-
})
|
|
70
|
+
})
|
|
71
71
|
|
|
72
|
-
export
|
|
72
|
+
export const PayloadLocalPush = Schema.TaggedStruct('local-push', {
|
|
73
73
|
newEvents: Schema.Array(LiveStoreEvent.Client.EncodedWithMeta),
|
|
74
|
-
})
|
|
74
|
+
})
|
|
75
75
|
|
|
76
|
-
export
|
|
76
|
+
export const Payload = Schema.Union([PayloadUpstreamRebase, PayloadUpstreamAdvance, PayloadLocalPush])
|
|
77
77
|
|
|
78
|
-
export
|
|
78
|
+
export const PayloadUpstream = Schema.Union([PayloadUpstreamRebase, PayloadUpstreamAdvance])
|
|
79
79
|
|
|
80
80
|
/** Only used for debugging purposes */
|
|
81
81
|
export class MergeContext extends Schema.Class<MergeContext>('MergeContext')({
|
|
@@ -159,14 +159,10 @@ export class MergeResultReject extends Schema.Class<MergeResultReject>('MergeRes
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
export
|
|
163
|
-
MergeResultAdvance,
|
|
164
|
-
MergeResultRebase,
|
|
165
|
-
MergeResultReject,
|
|
166
|
-
) {}
|
|
162
|
+
export const MergeResult = Schema.Union([MergeResultAdvance, MergeResultRebase, MergeResultReject])
|
|
167
163
|
|
|
168
164
|
export const payloadFromMergeResult = (
|
|
169
|
-
mergeResult:
|
|
165
|
+
mergeResult: MergeResultAdvance | MergeResultRebase,
|
|
170
166
|
): typeof PayloadUpstream.Type =>
|
|
171
167
|
Match.value(mergeResult).pipe(
|
|
172
168
|
Match.tag('advance', (result) => ({
|
|
@@ -191,16 +187,31 @@ TODO: possibly even keep the client events in a separate table in the client lea
|
|
|
191
187
|
export const merge = Effect.fnUntraced(function* ({
|
|
192
188
|
syncState,
|
|
193
189
|
payload,
|
|
194
|
-
|
|
190
|
+
isClientOnlyEvent,
|
|
195
191
|
isEqualEvent,
|
|
196
|
-
|
|
192
|
+
ignoreClientOnlyEvents = false,
|
|
197
193
|
}: {
|
|
198
194
|
syncState: SyncState
|
|
199
195
|
payload: typeof Payload.Type
|
|
200
|
-
|
|
196
|
+
/**
|
|
197
|
+
* `LiveStoreEvent.Client.EncodedWithMeta` does not carry the event definition's
|
|
198
|
+
* `clientOnly` flag. The caller supplies this schema-aware predicate so `merge`
|
|
199
|
+
* can preserve the correct sequence-number shape when rebasing: client-only
|
|
200
|
+
* events advance the client component, synced events advance the global component.
|
|
201
|
+
*/
|
|
202
|
+
isClientOnlyEvent: (event: LiveStoreEvent.Client.EncodedWithMeta) => boolean
|
|
203
|
+
/**
|
|
204
|
+
* Pending events are confirmed by comparing their logical encoded identity with
|
|
205
|
+
* upstream events. This is caller-supplied because comparing encoded args may
|
|
206
|
+
* require event-schema knowledge that the generic merge algorithm does not own.
|
|
207
|
+
* Implementations should ignore transport/runtime metadata.
|
|
208
|
+
*/
|
|
201
209
|
isEqualEvent: (a: LiveStoreEvent.Client.EncodedWithMeta, b: LiveStoreEvent.Client.EncodedWithMeta) => boolean
|
|
202
|
-
/**
|
|
203
|
-
|
|
210
|
+
/**
|
|
211
|
+
* This is used in the leader which should ignore client events when
|
|
212
|
+
* receiving an upstream-advance payload
|
|
213
|
+
*/
|
|
214
|
+
ignoreClientOnlyEvents?: boolean
|
|
204
215
|
}) {
|
|
205
216
|
yield* validateSyncState(syncState)
|
|
206
217
|
yield* validatePayload(payload)
|
|
@@ -218,7 +229,7 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
218
229
|
const rebasedPending = rebaseEvents({
|
|
219
230
|
events: syncState.pending,
|
|
220
231
|
baseEventSequenceNumber: newUpstreamHead,
|
|
221
|
-
|
|
232
|
+
isClientOnlyEvent,
|
|
222
233
|
})
|
|
223
234
|
|
|
224
235
|
return yield* validateMergeResult(
|
|
@@ -282,8 +293,8 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
282
293
|
existingEvents: syncState.pending,
|
|
283
294
|
incomingEvents: payload.newEvents,
|
|
284
295
|
isEqualEvent,
|
|
285
|
-
|
|
286
|
-
|
|
296
|
+
isClientOnlyEvent,
|
|
297
|
+
ignoreClientOnlyEvents,
|
|
287
298
|
})
|
|
288
299
|
|
|
289
300
|
// No divergent pending events, thus we can just advance (some of) the pending events
|
|
@@ -304,7 +315,7 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
304
315
|
const [pendingMatching, pendingRemaining] = ReadonlyArray.splitWhere(
|
|
305
316
|
syncState.pending,
|
|
306
317
|
(pendingEvent, index) => {
|
|
307
|
-
if (
|
|
318
|
+
if (ignoreClientOnlyEvents === true && isClientOnlyEvent(pendingEvent) === true) {
|
|
308
319
|
clientIndexOffset++
|
|
309
320
|
return false
|
|
310
321
|
}
|
|
@@ -336,15 +347,15 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
336
347
|
const rebasedPending = rebaseEvents({
|
|
337
348
|
events: divergentPending,
|
|
338
349
|
baseEventSequenceNumber: newUpstreamHead,
|
|
339
|
-
|
|
350
|
+
isClientOnlyEvent: isClientOnlyEvent,
|
|
340
351
|
})
|
|
341
352
|
|
|
342
353
|
const divergentNewEventsIndex = findDivergencePoint({
|
|
343
354
|
existingEvents: payload.newEvents,
|
|
344
355
|
incomingEvents: syncState.pending,
|
|
345
356
|
isEqualEvent,
|
|
346
|
-
|
|
347
|
-
|
|
357
|
+
isClientOnlyEvent: isClientOnlyEvent,
|
|
358
|
+
ignoreClientOnlyEvents: ignoreClientOnlyEvents,
|
|
348
359
|
})
|
|
349
360
|
|
|
350
361
|
return yield* validateMergeResult(
|
|
@@ -387,7 +398,7 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
387
398
|
if (invalidEventSequenceNumber === true) {
|
|
388
399
|
const expectedMinimumId = EventSequenceNumber.Client.nextPair({
|
|
389
400
|
seqNum: syncState.localHead,
|
|
390
|
-
|
|
401
|
+
isClientOnly: true,
|
|
391
402
|
}).seqNum
|
|
392
403
|
return yield* validateMergeResult(
|
|
393
404
|
MergeResultReject.make({
|
|
@@ -397,9 +408,11 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
397
408
|
}),
|
|
398
409
|
)
|
|
399
410
|
} else {
|
|
400
|
-
const
|
|
401
|
-
|
|
402
|
-
|
|
411
|
+
const nonClientOnlyEvents =
|
|
412
|
+
ignoreClientOnlyEvents === true
|
|
413
|
+
? payload.newEvents.filter((event) => !isClientOnlyEvent(event))
|
|
414
|
+
: payload.newEvents
|
|
415
|
+
const newPending = [...syncState.pending, ...nonClientOnlyEvents]
|
|
403
416
|
const newLocalHead =
|
|
404
417
|
newPending.at(-1)?.seqNum ?? EventSequenceNumber.Client.max(syncState.localHead, syncState.upstreamHead)
|
|
405
418
|
|
|
@@ -422,7 +435,7 @@ export const merge = Effect.fnUntraced(function* ({
|
|
|
422
435
|
default:
|
|
423
436
|
return casesHandled(payload)
|
|
424
437
|
}
|
|
425
|
-
|
|
438
|
+
})
|
|
426
439
|
|
|
427
440
|
/**
|
|
428
441
|
* Gets the index relative to `existingEvents` where the divergence point is
|
|
@@ -432,28 +445,28 @@ export const findDivergencePoint = ({
|
|
|
432
445
|
existingEvents,
|
|
433
446
|
incomingEvents,
|
|
434
447
|
isEqualEvent,
|
|
435
|
-
|
|
436
|
-
|
|
448
|
+
isClientOnlyEvent,
|
|
449
|
+
ignoreClientOnlyEvents,
|
|
437
450
|
}: {
|
|
438
451
|
existingEvents: ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta>
|
|
439
452
|
incomingEvents: ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta>
|
|
440
453
|
isEqualEvent: (a: LiveStoreEvent.Client.EncodedWithMeta, b: LiveStoreEvent.Client.EncodedWithMeta) => boolean
|
|
441
|
-
|
|
442
|
-
|
|
454
|
+
isClientOnlyEvent: (event: LiveStoreEvent.Client.EncodedWithMeta) => boolean
|
|
455
|
+
ignoreClientOnlyEvents: boolean
|
|
443
456
|
}): number => {
|
|
444
|
-
if (
|
|
445
|
-
const filteredExistingEvents = existingEvents.filter((event) => !
|
|
446
|
-
const
|
|
457
|
+
if (ignoreClientOnlyEvents === true) {
|
|
458
|
+
const filteredExistingEvents = existingEvents.filter((event) => !isClientOnlyEvent(event))
|
|
459
|
+
const divergencePointWithoutClientOnlyEvents = findDivergencePoint({
|
|
447
460
|
existingEvents: filteredExistingEvents,
|
|
448
461
|
incomingEvents,
|
|
449
462
|
isEqualEvent,
|
|
450
|
-
|
|
451
|
-
|
|
463
|
+
isClientOnlyEvent,
|
|
464
|
+
ignoreClientOnlyEvents: false,
|
|
452
465
|
})
|
|
453
466
|
|
|
454
|
-
if (
|
|
467
|
+
if (divergencePointWithoutClientOnlyEvents === -1) return -1
|
|
455
468
|
|
|
456
|
-
const divergencePointEventSequenceNumber = existingEvents[
|
|
469
|
+
const divergencePointEventSequenceNumber = existingEvents[divergencePointWithoutClientOnlyEvents]!.seqNum
|
|
457
470
|
// Now find the divergence point in the original array
|
|
458
471
|
return existingEvents.findIndex((event) =>
|
|
459
472
|
EventSequenceNumber.Client.isEqual(event.seqNum, divergencePointEventSequenceNumber),
|
|
@@ -470,19 +483,20 @@ export const findDivergencePoint = ({
|
|
|
470
483
|
const rebaseEvents = ({
|
|
471
484
|
events,
|
|
472
485
|
baseEventSequenceNumber,
|
|
473
|
-
|
|
486
|
+
isClientOnlyEvent,
|
|
474
487
|
}: {
|
|
475
488
|
events: ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta>
|
|
476
489
|
baseEventSequenceNumber: EventSequenceNumber.Client.Composite
|
|
477
|
-
|
|
490
|
+
isClientOnlyEvent: (event: LiveStoreEvent.Client.EncodedWithMeta) => boolean
|
|
478
491
|
}): ReadonlyArray<LiveStoreEvent.Client.EncodedWithMeta> => {
|
|
479
492
|
let prevEventSequenceNumber = baseEventSequenceNumber
|
|
480
493
|
const rebaseGeneration = baseEventSequenceNumber.rebaseGeneration + 1
|
|
481
494
|
return events.map((event) => {
|
|
482
|
-
|
|
495
|
+
// Rebasing must preserve whether an event is client-only: client-only
|
|
496
|
+
// events become eN.1/eN.2, while synced events become eN+1.
|
|
483
497
|
const newEvent = event.rebase({
|
|
484
498
|
parentSeqNum: prevEventSequenceNumber,
|
|
485
|
-
|
|
499
|
+
isClientOnly: isClientOnlyEvent(event),
|
|
486
500
|
rebaseGeneration,
|
|
487
501
|
})
|
|
488
502
|
prevEventSequenceNumber = newEvent.seqNum
|
|
@@ -497,7 +511,7 @@ const rebaseEvents = ({
|
|
|
497
511
|
* it could make sense to "flatten" update results into a single update result which the client session
|
|
498
512
|
* can process more efficiently which avoids push-threshing
|
|
499
513
|
*/
|
|
500
|
-
const _flattenMergeResults = (_updateResults: ReadonlyArray<MergeResult>) => {}
|
|
514
|
+
const _flattenMergeResults = (_updateResults: ReadonlyArray<typeof MergeResult>) => {}
|
|
501
515
|
|
|
502
516
|
const validatePayload = (payload: typeof Payload.Type) =>
|
|
503
517
|
Effect.gen(function* () {
|
|
@@ -515,9 +529,7 @@ const validatePayload = (payload: typeof Payload.Type) =>
|
|
|
515
529
|
}
|
|
516
530
|
})
|
|
517
531
|
|
|
518
|
-
const validateSyncState = Effect.fnUntraced(function* (
|
|
519
|
-
syncState: SyncState,
|
|
520
|
-
) {
|
|
532
|
+
const validateSyncState = Effect.fnUntraced(function* (syncState: SyncState) {
|
|
521
533
|
for (let i = 0; i < syncState.pending.length; i++) {
|
|
522
534
|
const event = syncState.pending[i]!
|
|
523
535
|
const nextEvent = syncState.pending[i + 1]
|
|
@@ -553,9 +565,7 @@ const validateSyncState = Effect.fnUntraced(function* (
|
|
|
553
565
|
}
|
|
554
566
|
})
|
|
555
567
|
|
|
556
|
-
const validateMergeResult = Effect.fnUntraced(function* (
|
|
557
|
-
mergeResult: typeof MergeResult.Type,
|
|
558
|
-
) {
|
|
568
|
+
const validateMergeResult = Effect.fnUntraced(function* (mergeResult: typeof MergeResult.Type) {
|
|
559
569
|
if (mergeResult._tag === 'reject') return mergeResult
|
|
560
570
|
|
|
561
571
|
yield* validateSyncState(mergeResult.newSyncState)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ReadonlyArray as EffectArray } from '@livestore/utils/effect'
|
|
2
|
+
import { Effect, Schema } from '@livestore/utils/effect'
|
|
2
3
|
|
|
3
4
|
const textEncoder = new TextEncoder()
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
|
-
* Configuration describing how to break
|
|
7
|
+
* Configuration describing how to break an array batch into smaller payload-safe batches.
|
|
7
8
|
*/
|
|
8
9
|
export interface ChunkingOptions<A> {
|
|
9
|
-
/** Maximum number of items that may appear in any emitted
|
|
10
|
+
/** Maximum number of items that may appear in any emitted batch. */
|
|
10
11
|
readonly maxItems: number
|
|
11
|
-
/** Maximum encoded byte size allowed for any emitted
|
|
12
|
+
/** Maximum encoded byte size allowed for any emitted batch. */
|
|
12
13
|
readonly maxBytes: number
|
|
13
14
|
/**
|
|
14
15
|
* Callback that produces a JSON-serialisable structure whose byte size should
|
|
@@ -22,19 +23,23 @@ export interface ChunkingOptions<A> {
|
|
|
22
23
|
readonly measure?: (items: ReadonlyArray<A>) => number
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export class OversizeChunkItemError extends Schema.TaggedError<OversizeChunkItemError>('~@livestore/common/OversizeChunkItemError')('OversizeChunkItemError', {
|
|
31
|
-
size: Schema.Number,
|
|
32
|
-
maxBytes: Schema.Number,
|
|
26
|
+
export class OversizeChunkItemError extends Schema.TaggedError<OversizeChunkItemError>(
|
|
27
|
+
'~@livestore/common/OversizeChunkItemError',
|
|
28
|
+
)('OversizeChunkItemError', {
|
|
29
|
+
size: Schema.Finite,
|
|
30
|
+
maxBytes: Schema.Finite,
|
|
33
31
|
}) {}
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Derives a function that splits an input array into sub-arrays confined by
|
|
35
|
+
* both item count and encoded byte size limits. Designed for stream boundaries
|
|
36
|
+
* and transports with strict frame caps (e.g. Cloudflare hibernated WebSockets).
|
|
37
|
+
*/
|
|
38
|
+
export const splitArrayBySize =
|
|
36
39
|
<A>(options: ChunkingOptions<A>) =>
|
|
37
|
-
(
|
|
40
|
+
(
|
|
41
|
+
items: EffectArray.NonEmptyReadonlyArray<A>,
|
|
42
|
+
): Effect.Effect<EffectArray.NonEmptyArray<ReadonlyArray<A>>, OversizeChunkItemError> =>
|
|
38
43
|
Effect.gen(function* () {
|
|
39
44
|
const maxItems = Math.max(1, options.maxItems)
|
|
40
45
|
const maxBytes = Math.max(1, options.maxBytes)
|
|
@@ -50,41 +55,31 @@ export const splitChunkBySize =
|
|
|
50
55
|
return textEncoder.encode(JSON.stringify(encoded)).byteLength
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
58
|
+
const [first, ...rest] = items
|
|
59
|
+
let current: EffectArray.NonEmptyArray<A> = [first]
|
|
60
|
+
const result: EffectArray.NonEmptyArray<ReadonlyArray<A>> = [current]
|
|
57
61
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const flushCurrent = () => {
|
|
62
|
-
if (current.length > 0) {
|
|
63
|
-
result.push(Chunk.fromIterable(current))
|
|
64
|
-
current = []
|
|
65
|
-
}
|
|
62
|
+
if (computeSize(current) > maxBytes) {
|
|
63
|
+
return yield* new OversizeChunkItemError({ size: computeSize(current), maxBytes })
|
|
66
64
|
}
|
|
67
65
|
|
|
68
|
-
for (const item of
|
|
66
|
+
for (const item of rest) {
|
|
69
67
|
current.push(item)
|
|
70
68
|
const exceedsLimit = current.length > maxItems || computeSize(current) > maxBytes
|
|
71
69
|
|
|
72
70
|
if (exceedsLimit === true) {
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
// Remove the item we just added; the previous batch was already recorded in `result`.
|
|
72
|
+
current.splice(current.length - 1, 1)
|
|
73
|
+
current = [item]
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (singleItemTooLarge === true || current.length > maxItems) {
|
|
81
|
-
return yield* new OversizeChunkItemError({ size: computeSize([last]), maxBytes })
|
|
82
|
-
}
|
|
75
|
+
const singleItemTooLarge = computeSize(current) > maxBytes
|
|
76
|
+
if (singleItemTooLarge === true || current.length > maxItems) {
|
|
77
|
+
return yield* new OversizeChunkItemError({ size: computeSize(current), maxBytes })
|
|
83
78
|
}
|
|
79
|
+
|
|
80
|
+
result.push(current)
|
|
84
81
|
}
|
|
85
82
|
}
|
|
86
83
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return Chunk.fromIterable(result)
|
|
84
|
+
return result
|
|
90
85
|
})
|
package/src/util.ts
CHANGED
|
@@ -1,24 +1,33 @@
|
|
|
1
1
|
/// <reference lib="es2022" />
|
|
2
2
|
|
|
3
|
-
import type
|
|
4
|
-
import { Schema } from '@livestore/utils/effect'
|
|
3
|
+
import { type Brand, Schema } from '@livestore/utils/effect'
|
|
5
4
|
|
|
6
5
|
export type ParamsObject = Record<string, SqlValue>
|
|
7
6
|
export type SqlValue = string | number | Uint8Array<ArrayBuffer> | null
|
|
8
7
|
|
|
9
8
|
export type Bindable = ReadonlyArray<SqlValue> | ParamsObject
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Numeric schema for the SQLite `REAL` domain. Unlike `Schema.Finite` it accepts
|
|
12
|
+
* `Infinity`/`NaN`, because SQLite `REAL` columns can legitimately store them and
|
|
13
|
+
* bind values / DEFAULT codecs must round-trip those through the devtools/debug
|
|
14
|
+
* protocol. This is the single carve-out for the SQLite REAL numeric domain — use it
|
|
15
|
+
* instead of a bare `Schema.Number` so the `schemaNumber` exception lives in one place.
|
|
16
|
+
*/
|
|
17
|
+
// @effect-diagnostics-next-line schemaNumber:off -- see SqliteReal docstring: SQLite REAL permits Infinity/NaN, so Schema.Finite would wrongly reject valid values
|
|
18
|
+
export const SqliteReal = Schema.Number
|
|
19
|
+
|
|
20
|
+
export const SqlValueSchema = Schema.Union([
|
|
12
21
|
Schema.String,
|
|
13
|
-
|
|
14
|
-
Schema.Uint8Array as any as Schema.
|
|
22
|
+
SqliteReal,
|
|
23
|
+
Schema.Uint8Array as any as Schema.Codec<Uint8Array<ArrayBuffer>>,
|
|
15
24
|
Schema.Null,
|
|
16
|
-
)
|
|
25
|
+
])
|
|
17
26
|
|
|
18
|
-
export const PreparedBindValues = Schema.Union(
|
|
27
|
+
export const PreparedBindValues = Schema.Union([
|
|
19
28
|
Schema.Array(SqlValueSchema),
|
|
20
|
-
Schema.Record(
|
|
21
|
-
).pipe(Schema.brand('PreparedBindValues'))
|
|
29
|
+
Schema.Record(Schema.String, SqlValueSchema),
|
|
30
|
+
]).pipe(Schema.brand('PreparedBindValues'))
|
|
22
31
|
|
|
23
32
|
export type PreparedBindValues = Brand.Branded<Bindable, 'PreparedBindValues'>
|
|
24
33
|
|
package/src/version.ts
CHANGED
|
@@ -7,8 +7,7 @@ import pkg from '../package.json' with { type: 'json' }
|
|
|
7
7
|
*/
|
|
8
8
|
export const liveStoreVersion: string = (globalThis as any).__LIVESTORE_VERSION_OVERRIDE__ ?? pkg.version
|
|
9
9
|
|
|
10
|
-
export const devtoolsProtocolVersion: number =
|
|
11
|
-
(globalThis as any).__LIVESTORE_DEVTOOLS_PROTOCOL_VERSION_OVERRIDE__ ?? 1
|
|
10
|
+
export const devtoolsProtocolVersion: number = (globalThis as any).__LIVESTORE_DEVTOOLS_PROTOCOL_VERSION_OVERRIDE__ ?? 1
|
|
12
11
|
|
|
13
12
|
export const supportedDevtoolsProtocolVersions: ReadonlyArray<number> = [devtoolsProtocolVersion]
|
|
14
13
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3C,CAAA"}
|
package/dist/sql-queries/misc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAgC,GAAM,EAAoC,EAAE,CACvG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAqC,CAAA"}
|
package/src/sql-queries/misc.ts
DELETED