@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,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { describe, expect, it } from 'vitest'
|
|
1
|
+
import { TestSchema } from 'effect/testing'
|
|
2
|
+
import { assert, describe, expect, it } from 'vitest'
|
|
3
|
+
|
|
4
|
+
import { Schema, SchemaAST, Struct } from '@livestore/utils/effect'
|
|
3
5
|
|
|
4
6
|
import * as State from '../mod.ts'
|
|
5
7
|
import { withAutoIncrement, withColumnType, withDefault, withPrimaryKey, withUnique } from './column-annotations.ts'
|
|
@@ -12,7 +14,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
12
14
|
})
|
|
13
15
|
|
|
14
16
|
it('should map Schema.Number to real column', () => {
|
|
15
|
-
const columnDef = State.SQLite.getColumnDefForSchema(Schema.
|
|
17
|
+
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Finite)
|
|
16
18
|
expect(columnDef.columnType).toBe('real')
|
|
17
19
|
})
|
|
18
20
|
|
|
@@ -24,15 +26,25 @@ describe('getColumnDefForSchema', () => {
|
|
|
24
26
|
it('should map Schema.Date to text column', () => {
|
|
25
27
|
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Date)
|
|
26
28
|
expect(columnDef.columnType).toBe('text')
|
|
27
|
-
expect(Schema.
|
|
28
|
-
expect(
|
|
29
|
+
expect(Schema.toEncoded(columnDef.schema).ast._tag).toBe('String')
|
|
30
|
+
expect(
|
|
31
|
+
SchemaAST.resolveAt<{ readonly id: string }>('representation')(Schema.toType(columnDef.schema).ast)?.id,
|
|
32
|
+
).toBe('effect/schema/Date')
|
|
29
33
|
})
|
|
30
34
|
|
|
31
|
-
it('should map Schema.
|
|
32
|
-
const columnDef = State.SQLite.getColumnDefForSchema(Schema.
|
|
35
|
+
it('should map Schema.DateFromMillis to integer column', () => {
|
|
36
|
+
const columnDef = State.SQLite.getColumnDefForSchema(Schema.DateFromMillis)
|
|
33
37
|
expect(columnDef.columnType).toBe('integer')
|
|
34
|
-
expect(Schema.
|
|
35
|
-
expect(
|
|
38
|
+
expect(Schema.toEncoded(columnDef.schema).ast._tag).toBe('Number')
|
|
39
|
+
expect(
|
|
40
|
+
SchemaAST.resolveAt<{ readonly id: string }>('representation')(Schema.toType(columnDef.schema).ast)?.id,
|
|
41
|
+
).toBe('effect/schema/Date')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should preserve the Date representation through checks', () => {
|
|
45
|
+
const schema = Schema.DateFromMillis.check(Schema.isGreaterThanDate(new Date(0)))
|
|
46
|
+
|
|
47
|
+
expect(State.SQLite.getColumnDefForSchema(schema).columnType).toBe('integer')
|
|
36
48
|
})
|
|
37
49
|
|
|
38
50
|
it('should map Schema.BigInt to text column', () => {
|
|
@@ -45,17 +57,20 @@ describe('getColumnDefForSchema', () => {
|
|
|
45
57
|
it('should map Schema.Int to integer column', () => {
|
|
46
58
|
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Int)
|
|
47
59
|
expect(columnDef.columnType).toBe('integer')
|
|
60
|
+
|
|
61
|
+
const positiveInt = State.SQLite.getColumnDefForSchema(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)))
|
|
62
|
+
expect(positiveInt.columnType).toBe('integer')
|
|
48
63
|
})
|
|
49
64
|
|
|
50
65
|
it('should map string refinements to text column', () => {
|
|
51
66
|
const refinements = [
|
|
52
67
|
{ schema: Schema.NonEmptyString, name: 'NonEmptyString' },
|
|
53
68
|
{ schema: Schema.Trim, name: 'Trim' },
|
|
54
|
-
{ schema: Schema.
|
|
55
|
-
{ schema: Schema.
|
|
56
|
-
{ schema: Schema.String.
|
|
69
|
+
{ schema: Schema.String.check(Schema.isUUID()), name: 'UUID' },
|
|
70
|
+
{ schema: Schema.String.check(Schema.isULID()), name: 'ULID' },
|
|
71
|
+
{ schema: Schema.String.check(Schema.isMinLength(5)), name: 'minLength' },
|
|
57
72
|
{
|
|
58
|
-
schema: Schema.String.
|
|
73
|
+
schema: Schema.String.check(Schema.isPattern(/^[A-Z]+$/)),
|
|
59
74
|
name: 'pattern',
|
|
60
75
|
},
|
|
61
76
|
]
|
|
@@ -69,8 +84,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
69
84
|
it('should map number refinements to real column', () => {
|
|
70
85
|
const refinements = [
|
|
71
86
|
{ schema: Schema.Finite, name: 'Finite' },
|
|
72
|
-
{ schema: Schema.
|
|
73
|
-
{ schema: Schema.Number.pipe(Schema.between(0, 100)), name: 'between' },
|
|
87
|
+
{ schema: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 100 })), name: 'between' },
|
|
74
88
|
]
|
|
75
89
|
|
|
76
90
|
for (const { schema, name } of refinements) {
|
|
@@ -99,12 +113,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
99
113
|
|
|
100
114
|
describe('transformations', () => {
|
|
101
115
|
it('should map transformations based on target type', () => {
|
|
102
|
-
const StringToNumber = Schema.
|
|
103
|
-
Schema.transform(Schema.Number, {
|
|
104
|
-
decode: Number.parseFloat,
|
|
105
|
-
encode: String,
|
|
106
|
-
}),
|
|
107
|
-
)
|
|
116
|
+
const StringToNumber = Schema.FiniteFromString
|
|
108
117
|
|
|
109
118
|
const columnDef = State.SQLite.getColumnDefForSchema(StringToNumber)
|
|
110
119
|
expect(columnDef.columnType).toBe('text') // Based on the encoded type (String)
|
|
@@ -120,7 +129,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
120
129
|
it('should map structs to json column', () => {
|
|
121
130
|
const UserSchema = Schema.Struct({
|
|
122
131
|
name: Schema.String,
|
|
123
|
-
age: Schema.
|
|
132
|
+
age: Schema.Finite,
|
|
124
133
|
})
|
|
125
134
|
|
|
126
135
|
const columnDef = State.SQLite.getColumnDefForSchema(UserSchema)
|
|
@@ -133,23 +142,22 @@ describe('getColumnDefForSchema', () => {
|
|
|
133
142
|
})
|
|
134
143
|
|
|
135
144
|
it('should map records to json column', () => {
|
|
136
|
-
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Record(
|
|
145
|
+
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Record(Schema.String, Schema.Finite))
|
|
137
146
|
expect(columnDef.columnType).toBe('text')
|
|
138
147
|
})
|
|
139
148
|
|
|
140
149
|
it('should map tuples to json column', () => {
|
|
141
|
-
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Tuple(Schema.String, Schema.
|
|
150
|
+
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Tuple([Schema.String, Schema.Finite]))
|
|
142
151
|
expect(columnDef.columnType).toBe('text')
|
|
143
152
|
})
|
|
144
153
|
|
|
145
154
|
it('should map tagged unions to json column', () => {
|
|
146
|
-
const ResultSchema = Schema.Union(
|
|
147
|
-
Schema.
|
|
148
|
-
_tag: Schema.Literal('success'),
|
|
155
|
+
const ResultSchema = Schema.Union([
|
|
156
|
+
Schema.TaggedStruct('success', {
|
|
149
157
|
value: Schema.String,
|
|
150
158
|
}),
|
|
151
|
-
Schema.
|
|
152
|
-
)
|
|
159
|
+
Schema.TaggedStruct('error', { error: Schema.String }),
|
|
160
|
+
])
|
|
153
161
|
|
|
154
162
|
const columnDef = State.SQLite.getColumnDefForSchema(ResultSchema)
|
|
155
163
|
expect(columnDef.columnType).toBe('text')
|
|
@@ -172,7 +180,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
172
180
|
|
|
173
181
|
it('should handle optional nested schemas', () => {
|
|
174
182
|
const columnDef = State.SQLite.getColumnDefForSchema(
|
|
175
|
-
Schema.Union(Schema.Struct({ name: Schema.String }), Schema.Undefined),
|
|
183
|
+
Schema.Union([Schema.Struct({ name: Schema.String }), Schema.Undefined]),
|
|
176
184
|
)
|
|
177
185
|
expect(columnDef.columnType).toBe('text')
|
|
178
186
|
})
|
|
@@ -197,7 +205,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
197
205
|
|
|
198
206
|
it('should handle never schema', () => {
|
|
199
207
|
// Create a schema that should never validate
|
|
200
|
-
const neverSchema = Schema.String.
|
|
208
|
+
const neverSchema = Schema.String.check(Schema.makeFilter(() => false, { message: 'Always fails' }))
|
|
201
209
|
|
|
202
210
|
const columnDef = State.SQLite.getColumnDefForSchema(neverSchema)
|
|
203
211
|
expect(columnDef.columnType).toBe('text')
|
|
@@ -233,7 +241,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
233
241
|
email: Schema.String,
|
|
234
242
|
})
|
|
235
243
|
|
|
236
|
-
const PickedSchema = UserSchema.
|
|
244
|
+
const PickedSchema = UserSchema.mapFields(Struct.pick(['id', 'name']))
|
|
237
245
|
|
|
238
246
|
const columnDef = State.SQLite.getColumnDefForSchema(PickedSchema)
|
|
239
247
|
expect(columnDef.columnType).toBe('text')
|
|
@@ -246,7 +254,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
246
254
|
password: Schema.String,
|
|
247
255
|
})
|
|
248
256
|
|
|
249
|
-
const PublicUserSchema = UserSchema.
|
|
257
|
+
const PublicUserSchema = UserSchema.mapFields(Struct.omit(['password']))
|
|
250
258
|
|
|
251
259
|
const columnDef = State.SQLite.getColumnDefForSchema(PublicUserSchema)
|
|
252
260
|
expect(columnDef.columnType).toBe('text')
|
|
@@ -255,10 +263,10 @@ describe('getColumnDefForSchema', () => {
|
|
|
255
263
|
|
|
256
264
|
describe('annotations', () => {
|
|
257
265
|
it('should handle schemas with custom annotations', () => {
|
|
258
|
-
const AnnotatedString = Schema.String.
|
|
266
|
+
const AnnotatedString = Schema.String.annotate({
|
|
259
267
|
description: 'A special string',
|
|
260
268
|
})
|
|
261
|
-
const AnnotatedNumber = Schema.
|
|
269
|
+
const AnnotatedNumber = Schema.Finite.annotate({ min: 0, max: 100 })
|
|
262
270
|
|
|
263
271
|
expect(State.SQLite.getColumnDefForSchema(AnnotatedString).columnType).toBe('text')
|
|
264
272
|
expect(State.SQLite.getColumnDefForSchema(AnnotatedNumber).columnType).toBe('real')
|
|
@@ -267,23 +275,55 @@ describe('getColumnDefForSchema', () => {
|
|
|
267
275
|
|
|
268
276
|
describe('enums and literal unions', () => {
|
|
269
277
|
it('should handle enums and literal unions as text', () => {
|
|
270
|
-
const StatusEnum = Schema.
|
|
278
|
+
const StatusEnum = Schema.Enum({
|
|
271
279
|
PENDING: 'pending',
|
|
272
280
|
ACTIVE: 'active',
|
|
273
281
|
INACTIVE: 'inactive',
|
|
274
282
|
})
|
|
275
283
|
|
|
276
|
-
const StatusUnion = Schema.
|
|
284
|
+
const StatusUnion = Schema.Literals(['pending', 'active', 'inactive'])
|
|
277
285
|
|
|
278
286
|
expect(State.SQLite.getColumnDefForSchema(StatusEnum).columnType).toBe('text')
|
|
279
287
|
expect(State.SQLite.getColumnDefForSchema(StatusUnion).columnType).toBe('text')
|
|
280
288
|
})
|
|
289
|
+
|
|
290
|
+
it('should handle unions of numeric literals as integer column', () => {
|
|
291
|
+
const IntervalSchema = Schema.Literals([1, 5, 15, 30])
|
|
292
|
+
|
|
293
|
+
const columnDef = State.SQLite.getColumnDefForSchema(IntervalSchema)
|
|
294
|
+
|
|
295
|
+
expect(columnDef.columnType).toBe('integer')
|
|
296
|
+
})
|
|
297
|
+
|
|
298
|
+
it('should handle unions of non-integer numeric literals as real column', () => {
|
|
299
|
+
const PercentSchema = Schema.Literals([0.1, 0.2, 0.25])
|
|
300
|
+
|
|
301
|
+
const columnDef = State.SQLite.getColumnDefForSchema(PercentSchema)
|
|
302
|
+
|
|
303
|
+
expect(columnDef.columnType).toBe('real')
|
|
304
|
+
})
|
|
281
305
|
})
|
|
282
306
|
|
|
283
307
|
describe('binary data', () => {
|
|
284
|
-
it('should handle Uint8Array as blob column', () => {
|
|
308
|
+
it('should handle Uint8Array as blob column', async () => {
|
|
285
309
|
const columnDef = State.SQLite.getColumnDefForSchema(Schema.Uint8Array)
|
|
286
|
-
expect(columnDef.columnType).toBe('
|
|
310
|
+
expect(columnDef.columnType).toBe('blob')
|
|
311
|
+
expect(
|
|
312
|
+
SchemaAST.resolveAt<{ readonly id: string }>('representation')(Schema.toType(columnDef.schema).ast)?.id,
|
|
313
|
+
).toBe('effect/schema/Uint8Array')
|
|
314
|
+
|
|
315
|
+
const asserts = new TestSchema.Asserts(columnDef.schema)
|
|
316
|
+
await asserts.decoding().succeed(new Uint8Array([1, 2, 3]))
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
it('should preserve Uint8Array checks on blob columns', () => {
|
|
320
|
+
const schema = Schema.Uint8Array.check(Schema.makeFilter((value) => value.byteLength > 0))
|
|
321
|
+
const columnDef = State.SQLite.getColumnDefForSchema(schema)
|
|
322
|
+
|
|
323
|
+
expect(columnDef.columnType).toBe('blob')
|
|
324
|
+
expect(columnDef.schema).toBe(schema)
|
|
325
|
+
expect(Schema.decodeUnknownSync(columnDef.schema)(new Uint8Array([1]))).toEqual(new Uint8Array([1]))
|
|
326
|
+
expect(() => Schema.decodeUnknownSync(columnDef.schema)(new Uint8Array())).toThrow()
|
|
287
327
|
})
|
|
288
328
|
})
|
|
289
329
|
|
|
@@ -304,12 +344,12 @@ describe('getColumnDefForSchema', () => {
|
|
|
304
344
|
})
|
|
305
345
|
|
|
306
346
|
describe('schema-based table definitions', () => {
|
|
307
|
-
it('should handle optional fields in schema', () => {
|
|
347
|
+
it('should handle optional fields in schema', async () => {
|
|
308
348
|
const UserSchema = Schema.Struct({
|
|
309
349
|
id: Schema.String,
|
|
310
350
|
name: Schema.String,
|
|
311
351
|
email: Schema.optional(Schema.String),
|
|
312
|
-
age: Schema.optional(Schema.
|
|
352
|
+
age: Schema.optional(Schema.Finite),
|
|
313
353
|
})
|
|
314
354
|
|
|
315
355
|
const userTable = State.SQLite.table({
|
|
@@ -325,12 +365,16 @@ describe('getColumnDefForSchema', () => {
|
|
|
325
365
|
expect(userTable.sqliteDef.columns.id.nullable).toBe(false)
|
|
326
366
|
expect(userTable.sqliteDef.columns.name.nullable).toBe(false)
|
|
327
367
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
368
|
+
const asserts = new TestSchema.Asserts(userTable.rowSchema)
|
|
369
|
+
await asserts.decoding().succeed({
|
|
370
|
+
id: 'user-1',
|
|
371
|
+
name: 'Ada',
|
|
372
|
+
email: null,
|
|
373
|
+
age: null,
|
|
374
|
+
})
|
|
331
375
|
})
|
|
332
376
|
|
|
333
|
-
it('should handle optional boolean with proper transformation', () => {
|
|
377
|
+
it('should handle optional boolean with proper transformation', async () => {
|
|
334
378
|
const schema = Schema.Struct({
|
|
335
379
|
id: Schema.String,
|
|
336
380
|
active: Schema.optional(Schema.Boolean),
|
|
@@ -340,11 +384,13 @@ describe('getColumnDefForSchema', () => {
|
|
|
340
384
|
|
|
341
385
|
expect(table.sqliteDef.columns.active.nullable).toBe(true)
|
|
342
386
|
expect(table.sqliteDef.columns.active.columnType).toBe('integer')
|
|
343
|
-
|
|
344
|
-
|
|
387
|
+
const asserts = new TestSchema.Asserts(table.rowSchema)
|
|
388
|
+
await asserts.decoding().succeed({ id: 'row-1', active: 1 }, { id: 'row-1', active: true })
|
|
389
|
+
expect(Schema.encodeSync(table.sqliteDef.columns.active.schema)(false)).toBe(0)
|
|
390
|
+
await asserts.decoding().succeed({ id: 'row-1', active: null })
|
|
345
391
|
})
|
|
346
392
|
|
|
347
|
-
it('should handle optional complex types with JSON encoding', () => {
|
|
393
|
+
it('should handle optional complex types with JSON encoding', async () => {
|
|
348
394
|
const schema = Schema.Struct({
|
|
349
395
|
id: Schema.String,
|
|
350
396
|
metadata: Schema.optional(Schema.Struct({ color: Schema.String })),
|
|
@@ -355,17 +401,27 @@ describe('getColumnDefForSchema', () => {
|
|
|
355
401
|
|
|
356
402
|
expect(table.sqliteDef.columns.metadata.nullable).toBe(true)
|
|
357
403
|
expect(table.sqliteDef.columns.metadata.columnType).toBe('text')
|
|
358
|
-
expect((table.rowSchema as any).fields.metadata.toString()).toBe(
|
|
359
|
-
'(parseJson <-> { readonly color: string }) | null',
|
|
360
|
-
// '(parseJson <-> { readonly color: string } | null)', // not sure yet about which semantics we want here
|
|
361
|
-
)
|
|
362
404
|
|
|
363
405
|
expect(table.sqliteDef.columns.tags.nullable).toBe(true)
|
|
364
406
|
expect(table.sqliteDef.columns.tags.columnType).toBe('text')
|
|
365
|
-
|
|
407
|
+
|
|
408
|
+
const asserts = new TestSchema.Asserts(table.rowSchema)
|
|
409
|
+
await asserts.decoding().succeed(
|
|
410
|
+
{
|
|
411
|
+
id: 'row-1',
|
|
412
|
+
metadata: JSON.stringify({ color: 'red' }),
|
|
413
|
+
tags: JSON.stringify(['urgent', 'local']),
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
id: 'row-1',
|
|
417
|
+
metadata: { color: 'red' },
|
|
418
|
+
tags: ['urgent', 'local'],
|
|
419
|
+
},
|
|
420
|
+
)
|
|
421
|
+
await asserts.decoding().succeed({ id: 'row-1', metadata: null, tags: null })
|
|
366
422
|
})
|
|
367
423
|
|
|
368
|
-
it('should handle Schema.NullOr', () => {
|
|
424
|
+
it('should handle Schema.NullOr', async () => {
|
|
369
425
|
const schema = Schema.Struct({
|
|
370
426
|
id: Schema.String,
|
|
371
427
|
description: Schema.NullOr(Schema.String),
|
|
@@ -377,28 +433,55 @@ describe('getColumnDefForSchema', () => {
|
|
|
377
433
|
expect(table.sqliteDef.columns.description.nullable).toBe(true)
|
|
378
434
|
expect(table.sqliteDef.columns.count.nullable).toBe(true)
|
|
379
435
|
|
|
380
|
-
|
|
381
|
-
|
|
436
|
+
const asserts = new TestSchema.Asserts(table.rowSchema)
|
|
437
|
+
await asserts.decoding().succeed({
|
|
438
|
+
id: 'row-1',
|
|
439
|
+
description: 'ready',
|
|
440
|
+
count: 1,
|
|
441
|
+
})
|
|
442
|
+
await asserts.decoding().succeed({
|
|
443
|
+
id: 'row-1',
|
|
444
|
+
description: null,
|
|
445
|
+
count: null,
|
|
446
|
+
})
|
|
447
|
+
})
|
|
448
|
+
|
|
449
|
+
it('should treat unions of string literals as text columns without JSON parsing', async () => {
|
|
450
|
+
const schema = Schema.Struct({
|
|
451
|
+
id: Schema.String,
|
|
452
|
+
status: Schema.Literals(['idle', 'running', 'stopped']),
|
|
453
|
+
})
|
|
454
|
+
|
|
455
|
+
const table = State.SQLite.table({ name: 'timers', schema })
|
|
456
|
+
|
|
457
|
+
expect(table.sqliteDef.columns.status.columnType).toBe('text')
|
|
458
|
+
expect(Schema.toEncoded(table.sqliteDef.columns.status.schema).ast._tag).toBe('Union')
|
|
459
|
+
|
|
460
|
+
const asserts = new TestSchema.Asserts(table.rowSchema)
|
|
461
|
+
await asserts.decoding().succeed({ id: 'timer-1', status: 'idle' })
|
|
382
462
|
})
|
|
383
463
|
|
|
384
|
-
it('should handle Schema.NullOr with complex types', () => {
|
|
464
|
+
it('should handle Schema.NullOr with complex types', async () => {
|
|
385
465
|
const schema = Schema.Struct({
|
|
386
|
-
data: Schema.NullOr(Schema.Struct({ value: Schema.
|
|
387
|
-
}).
|
|
466
|
+
data: Schema.NullOr(Schema.Struct({ value: Schema.Finite })),
|
|
467
|
+
}).annotate({ title: 'test' })
|
|
388
468
|
|
|
389
469
|
const table = State.SQLite.table({ schema })
|
|
390
470
|
|
|
391
471
|
expect(table.sqliteDef.columns.data.nullable).toBe(true)
|
|
392
472
|
expect(table.sqliteDef.columns.data.columnType).toBe('text')
|
|
393
|
-
|
|
473
|
+
|
|
474
|
+
const asserts = new TestSchema.Asserts(table.rowSchema)
|
|
475
|
+
await asserts.decoding().succeed({ data: JSON.stringify({ value: 42 }) }, { data: { value: 42 } })
|
|
476
|
+
await asserts.decoding().succeed({ data: null })
|
|
394
477
|
})
|
|
395
478
|
|
|
396
|
-
it('should handle mixed nullable and optional fields', () => {
|
|
479
|
+
it('should handle mixed nullable and optional fields', async () => {
|
|
397
480
|
const schema = Schema.Struct({
|
|
398
481
|
nullableText: Schema.NullOr(Schema.String),
|
|
399
482
|
optionalText: Schema.optional(Schema.String),
|
|
400
|
-
optionalJson: Schema.optional(Schema.Struct({ x: Schema.
|
|
401
|
-
}).
|
|
483
|
+
optionalJson: Schema.optional(Schema.Struct({ x: Schema.Finite })),
|
|
484
|
+
}).annotate({ title: 'test' })
|
|
402
485
|
|
|
403
486
|
const table = State.SQLite.table({ schema })
|
|
404
487
|
|
|
@@ -407,12 +490,15 @@ describe('getColumnDefForSchema', () => {
|
|
|
407
490
|
expect(table.sqliteDef.columns.optionalText.nullable).toBe(true)
|
|
408
491
|
expect(table.sqliteDef.columns.optionalJson.nullable).toBe(true)
|
|
409
492
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
)
|
|
493
|
+
const nullableTextAsserts = new TestSchema.Asserts(table.sqliteDef.columns.nullableText.schema)
|
|
494
|
+
const optionalTextAsserts = new TestSchema.Asserts(table.sqliteDef.columns.optionalText.schema)
|
|
495
|
+
const optionalJsonAsserts = new TestSchema.Asserts(table.sqliteDef.columns.optionalJson.schema)
|
|
496
|
+
|
|
497
|
+
await nullableTextAsserts.decoding().succeed('hello')
|
|
498
|
+
await nullableTextAsserts.decoding().succeed(null)
|
|
499
|
+
await optionalTextAsserts.decoding().succeed(null)
|
|
500
|
+
await optionalJsonAsserts.decoding().succeed(JSON.stringify({ x: 1 }), { x: 1 })
|
|
501
|
+
await optionalJsonAsserts.decoding().succeed(null)
|
|
416
502
|
})
|
|
417
503
|
|
|
418
504
|
// TODO bring back some time later
|
|
@@ -421,7 +507,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
421
507
|
// id: Schema.String,
|
|
422
508
|
// lossyText: Schema.optional(Schema.NullOr(Schema.String)),
|
|
423
509
|
// lossyComplex: Schema.optional(Schema.NullOr(Schema.Struct({ value: Schema.Number }))),
|
|
424
|
-
// }).
|
|
510
|
+
// }).annotate({ title: 'lossy_test' })
|
|
425
511
|
|
|
426
512
|
// const table = State.SQLite.table({ schema })
|
|
427
513
|
|
|
@@ -445,7 +531,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
445
531
|
describe('annotations', () => {
|
|
446
532
|
describe('withColumnType', () => {
|
|
447
533
|
it('should respect column type annotation for text', () => {
|
|
448
|
-
const schema = Schema.
|
|
534
|
+
const schema = Schema.Finite.pipe(withColumnType('text'))
|
|
449
535
|
const columnDef = State.SQLite.getColumnDefForSchema(schema)
|
|
450
536
|
expect(columnDef.columnType).toBe('text')
|
|
451
537
|
})
|
|
@@ -470,7 +556,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
470
556
|
|
|
471
557
|
it('should override default type mapping', () => {
|
|
472
558
|
// Number normally maps to real, but we override to text
|
|
473
|
-
const schema = Schema.
|
|
559
|
+
const schema = Schema.Finite.pipe(withColumnType('text'))
|
|
474
560
|
const columnDef = State.SQLite.getColumnDefForSchema(schema)
|
|
475
561
|
expect(columnDef.columnType).toBe('text')
|
|
476
562
|
})
|
|
@@ -509,7 +595,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
509
595
|
it('should throw when primary key is used with optional schema', () => {
|
|
510
596
|
// Note: Schema.optional returns a property signature, not a schema, so we can't pipe it
|
|
511
597
|
// Instead, we use Schema.Union to create an optional schema that can be piped
|
|
512
|
-
const optionalString = Schema.Union(Schema.String, Schema.Undefined)
|
|
598
|
+
const optionalString = Schema.Union([Schema.String, Schema.Undefined])
|
|
513
599
|
const UserSchema = Schema.Struct({
|
|
514
600
|
id: optionalString.pipe(withPrimaryKey),
|
|
515
601
|
name: Schema.String,
|
|
@@ -539,7 +625,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
539
625
|
|
|
540
626
|
it('should work with column type annotation', () => {
|
|
541
627
|
const UserSchema = Schema.Struct({
|
|
542
|
-
id: Schema.
|
|
628
|
+
id: Schema.Finite.pipe(withColumnType('integer'), withPrimaryKey),
|
|
543
629
|
name: Schema.String,
|
|
544
630
|
})
|
|
545
631
|
|
|
@@ -571,7 +657,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
571
657
|
describe('withAutoIncrement', () => {
|
|
572
658
|
it('should add autoIncrement annotation to schema', () => {
|
|
573
659
|
const UserSchema = Schema.Struct({
|
|
574
|
-
id: Schema.Int.pipe(withPrimaryKey
|
|
660
|
+
id: Schema.Int.pipe(withPrimaryKey, withAutoIncrement),
|
|
575
661
|
name: Schema.String,
|
|
576
662
|
})
|
|
577
663
|
const userTable = State.SQLite.table({
|
|
@@ -623,6 +709,29 @@ describe('getColumnDefForSchema', () => {
|
|
|
623
709
|
table2.sqliteDef.columns.count.default._tag === 'Some' && table2.sqliteDef.columns.count.default.value,
|
|
624
710
|
).toBe(0)
|
|
625
711
|
})
|
|
712
|
+
|
|
713
|
+
it('should support thunk defaults without eager evaluation', () => {
|
|
714
|
+
let counter = 0
|
|
715
|
+
const UserSchema = Schema.Struct({
|
|
716
|
+
id: Schema.String.pipe(
|
|
717
|
+
withDefault(() => {
|
|
718
|
+
counter += 1
|
|
719
|
+
return `user-${counter}`
|
|
720
|
+
}),
|
|
721
|
+
),
|
|
722
|
+
})
|
|
723
|
+
|
|
724
|
+
const table = State.SQLite.table({ name: 'users_with_thunk', schema: UserSchema })
|
|
725
|
+
|
|
726
|
+
expect(counter).toBe(0)
|
|
727
|
+
expect(table.sqliteDef.columns.id.default._tag).toBe('Some')
|
|
728
|
+
if (table.sqliteDef.columns.id.default._tag === 'Some') {
|
|
729
|
+
const defaultThunk = table.sqliteDef.columns.id.default.value
|
|
730
|
+
assert(typeof defaultThunk === 'function')
|
|
731
|
+
expect(defaultThunk()).toBe('user-1')
|
|
732
|
+
expect(defaultThunk()).toBe('user-2')
|
|
733
|
+
}
|
|
734
|
+
})
|
|
626
735
|
})
|
|
627
736
|
|
|
628
737
|
describe('withUnique', () => {
|
|
@@ -668,7 +777,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
668
777
|
|
|
669
778
|
describe('combined annotations', () => {
|
|
670
779
|
it('should work with multiple annotations', () => {
|
|
671
|
-
const schema = Schema.Uint8ArrayFromBase64.pipe(withColumnType('blob')
|
|
780
|
+
const schema = Schema.Uint8ArrayFromBase64.pipe(withColumnType('blob'), withPrimaryKey)
|
|
672
781
|
|
|
673
782
|
const UserSchema = Schema.Struct({
|
|
674
783
|
id: schema,
|
|
@@ -686,7 +795,7 @@ describe('getColumnDefForSchema', () => {
|
|
|
686
795
|
|
|
687
796
|
it('should combine all annotations', () => {
|
|
688
797
|
const UserSchema = Schema.Struct({
|
|
689
|
-
id: Schema.Int.pipe(withPrimaryKey
|
|
798
|
+
id: Schema.Int.pipe(withPrimaryKey, withAutoIncrement),
|
|
690
799
|
email: Schema.String.pipe(withUnique),
|
|
691
800
|
status: Schema.String.pipe(withDefault('active')),
|
|
692
801
|
metadata: Schema.Unknown.pipe(withColumnType('text')),
|