@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
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Definition Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions for creating event definitions in LiveStore.
|
|
5
|
+
* Events are the core unit of state change - all mutations to the database
|
|
6
|
+
* happen through events that are committed to the eventlog.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { Events } from '@livestore/livestore'
|
|
11
|
+
* import { Schema } from 'effect'
|
|
12
|
+
*
|
|
13
|
+
* // Define events for your application
|
|
14
|
+
* export const events = {
|
|
15
|
+
* // Synced events are sent to the sync backend
|
|
16
|
+
* todoCreated: Events.synced({
|
|
17
|
+
* name: 'v1.TodoCreated',
|
|
18
|
+
* schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
|
|
19
|
+
* }),
|
|
20
|
+
*
|
|
21
|
+
* // Client-only events stay local (useful for UI state)
|
|
22
|
+
* uiStateSet: Events.clientOnly({
|
|
23
|
+
* name: 'UiStateSet',
|
|
24
|
+
* schema: Schema.Struct({ selectedId: Schema.NullOr(Schema.String) }),
|
|
25
|
+
* }),
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
* @module
|
|
29
|
+
*/
|
|
30
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
|
31
|
+
import { Result, Schema } from '@livestore/utils/effect';
|
|
32
|
+
/**
|
|
33
|
+
* Creates an event definition with full control over all options.
|
|
34
|
+
*
|
|
35
|
+
* This is the low-level function for creating events. For most cases,
|
|
36
|
+
* prefer using `synced()` or `clientOnly()` which provide simpler APIs.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const customEvent = defineEvent({
|
|
41
|
+
* name: 'v1.CustomEvent',
|
|
42
|
+
* schema: Schema.Struct({ data: Schema.String }),
|
|
43
|
+
* clientOnly: false,
|
|
44
|
+
* derived: false,
|
|
45
|
+
* })
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export const defineEvent = (args) => {
|
|
49
|
+
const { name, schema, ...options } = args;
|
|
50
|
+
const makePartialEvent = (args) => {
|
|
51
|
+
const res = Schema.decodeResult(Schema.toType(schema))(args);
|
|
52
|
+
if (Result.isFailure(res) === true) {
|
|
53
|
+
shouldNeverHappen(`Invalid event args for event '${name}':`, res.failure.message, '\n');
|
|
54
|
+
}
|
|
55
|
+
return { name: name, args };
|
|
56
|
+
};
|
|
57
|
+
Object.defineProperty(makePartialEvent, 'name', { value: name });
|
|
58
|
+
Object.defineProperty(makePartialEvent, 'schema', { value: schema });
|
|
59
|
+
Object.defineProperty(makePartialEvent, 'encoded', {
|
|
60
|
+
value: (args) => ({ name: name, args }),
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(makePartialEvent, 'options', {
|
|
63
|
+
value: {
|
|
64
|
+
clientOnly: options?.clientOnly ?? false,
|
|
65
|
+
facts: options?.facts !== undefined
|
|
66
|
+
? (args, currentFacts) => {
|
|
67
|
+
const res = options.facts(args, currentFacts);
|
|
68
|
+
return {
|
|
69
|
+
modify: {
|
|
70
|
+
set: res.modify?.set !== undefined ? new Set(res.modify.set) : new Set(),
|
|
71
|
+
unset: res.modify?.unset !== undefined ? new Set(res.modify.unset) : new Set(),
|
|
72
|
+
},
|
|
73
|
+
require: res.require !== undefined ? new Set(res.require) : new Set(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
: undefined,
|
|
77
|
+
derived: options?.derived ?? false,
|
|
78
|
+
deprecated: options?.deprecated,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return makePartialEvent;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Creates a synced event definition.
|
|
85
|
+
*
|
|
86
|
+
* Synced events are sent to the sync backend and distributed to all connected
|
|
87
|
+
* clients. Use this for collaborative data that should be shared across users
|
|
88
|
+
* and devices.
|
|
89
|
+
*
|
|
90
|
+
* Event names should be versioned (e.g., `v1.TodoCreated`) to support
|
|
91
|
+
* schema evolution over time.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* import { Events } from '@livestore/livestore'
|
|
96
|
+
* import { Schema } from 'effect'
|
|
97
|
+
*
|
|
98
|
+
* const todoCreated = Events.synced({
|
|
99
|
+
* name: 'v1.TodoCreated',
|
|
100
|
+
* schema: Schema.Struct({
|
|
101
|
+
* id: Schema.String,
|
|
102
|
+
* text: Schema.String,
|
|
103
|
+
* completed: Schema.Boolean,
|
|
104
|
+
* }),
|
|
105
|
+
* })
|
|
106
|
+
*
|
|
107
|
+
* // Commit the event
|
|
108
|
+
* store.commit(todoCreated({ id: 'abc', text: 'Buy milk', completed: false }))
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export const synced = (args) => defineEvent({ ...args, clientOnly: false });
|
|
112
|
+
/**
|
|
113
|
+
* Creates a client-only event definition.
|
|
114
|
+
*
|
|
115
|
+
* Client-only events are synced within the same client's sessions (e.g., across
|
|
116
|
+
* browser tabs) but are never sent to the sync backend. Use this for local UI
|
|
117
|
+
* state like selected items, filter settings, or draft content.
|
|
118
|
+
*
|
|
119
|
+
* Note: Client-only events still require materializers and are stored in the
|
|
120
|
+
* local eventlog, they just don't participate in server-side sync.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* import { Events } from '@livestore/livestore'
|
|
125
|
+
* import { Schema } from 'effect'
|
|
126
|
+
*
|
|
127
|
+
* const uiStateSet = Events.clientOnly({
|
|
128
|
+
* name: 'UiStateSet',
|
|
129
|
+
* schema: Schema.Struct({
|
|
130
|
+
* selectedTodoId: Schema.NullOr(Schema.String),
|
|
131
|
+
* filterMode: Schema.Literals(['all', 'active', 'completed']),
|
|
132
|
+
* }),
|
|
133
|
+
* })
|
|
134
|
+
*
|
|
135
|
+
* // Update local UI state
|
|
136
|
+
* store.commit(uiStateSet({ selectedTodoId: 'abc', filterMode: 'active' }))
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export const clientOnly = (args) => defineEvent({ ...args, clientOnly: true });
|
|
140
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../../src/schema/EventDef/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.test.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/define.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { Schema } from '@livestore/utils/effect';
|
|
3
|
+
import { synced } from "./define.js";
|
|
4
|
+
describe('synced event wire schema', () => {
|
|
5
|
+
const occurredAt = new Date('2026-07-17T10:15:30.000Z');
|
|
6
|
+
const event = synced({
|
|
7
|
+
name: 'v1.Occurred',
|
|
8
|
+
schema: Schema.Struct({
|
|
9
|
+
occurredAt: Schema.DateFromString,
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
12
|
+
const jsonSchema = Schema.fromJsonString(event.schema);
|
|
13
|
+
test('roundtrips a valid date through JSON', () => {
|
|
14
|
+
const encoded = Schema.encodeSync(jsonSchema)({ occurredAt });
|
|
15
|
+
expect(encoded).toBe('{"occurredAt":"2026-07-17T10:15:30.000Z"}');
|
|
16
|
+
expect(Schema.decodeSync(jsonSchema)(encoded)).toEqual({ occurredAt });
|
|
17
|
+
});
|
|
18
|
+
test('rejects invalid dates on encode and decode', () => {
|
|
19
|
+
expect(() => Schema.encodeSync(jsonSchema)({ occurredAt: new Date(Number.NaN) })).toThrow();
|
|
20
|
+
expect(() => Schema.decodeSync(jsonSchema)('{"occurredAt":"not-a-date"}')).toThrow();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=define.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.test.js","sourceRoot":"","sources":["../../../src/schema/EventDef/define.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC,cAAc;SAClC,CAAC;KACH,CAAC,CAAA;IACF,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEtD,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACjE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAC3F,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IACtF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation Annotations for Events
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for marking event fields and entire events as deprecated.
|
|
5
|
+
* When a deprecated field is used or a deprecated event is committed, a warning is logged.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Events } from '@livestore/livestore'
|
|
10
|
+
* import { Schema } from 'effect'
|
|
11
|
+
* import { deprecated } from '@livestore/common/schema'
|
|
12
|
+
*
|
|
13
|
+
* // Field-level deprecation
|
|
14
|
+
* const todoUpdated = Events.synced({
|
|
15
|
+
* name: 'v1.TodoUpdated',
|
|
16
|
+
* schema: Schema.Struct({
|
|
17
|
+
* id: Schema.String,
|
|
18
|
+
* title: Schema.optional(Schema.String).pipe(deprecated("Use 'text' instead")),
|
|
19
|
+
* text: Schema.optional(Schema.String),
|
|
20
|
+
* }),
|
|
21
|
+
* })
|
|
22
|
+
*
|
|
23
|
+
* // Event-level deprecation
|
|
24
|
+
* const todoRenamed = Events.synced({
|
|
25
|
+
* name: 'v1.TodoRenamed',
|
|
26
|
+
* schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
|
|
27
|
+
* deprecated: "Use 'v1.TodoUpdated' instead",
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
* @module
|
|
31
|
+
*/
|
|
32
|
+
import { type Schema, Effect, Option } from '@livestore/utils/effect';
|
|
33
|
+
import type { EventDef } from './event-def.ts';
|
|
34
|
+
/** Annotation key used to mark schemas as deprecated. */
|
|
35
|
+
export declare const DeprecatedId = "livestore/schema/annotations/deprecated";
|
|
36
|
+
/**
|
|
37
|
+
* Marks a schema field as deprecated with a reason message.
|
|
38
|
+
* When an event is committed with a deprecated field that has a value,
|
|
39
|
+
* a warning will be logged.
|
|
40
|
+
*
|
|
41
|
+
* Works with Schema fields, including optional fields from Schema.optional.
|
|
42
|
+
*
|
|
43
|
+
* @param reason - Explanation of why this field is deprecated and what to use instead
|
|
44
|
+
* @returns A function that adds the deprecation annotation to the schema
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const schema = Schema.Struct({
|
|
49
|
+
* oldField: Schema.optional(Schema.String).pipe(deprecated("Use 'newField' instead")),
|
|
50
|
+
* newField: Schema.optional(Schema.String),
|
|
51
|
+
* })
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare const deprecated: (reason: string) => <T extends Schema.Top>(schema: T) => T["Rebuild"];
|
|
55
|
+
/**
|
|
56
|
+
* Checks if a schema has a deprecation annotation.
|
|
57
|
+
*
|
|
58
|
+
* @param schema - The schema to check
|
|
59
|
+
* @returns The deprecation reason if deprecated, None otherwise
|
|
60
|
+
*/
|
|
61
|
+
export declare const getDeprecatedReason: (schema: Schema.Top) => Option.Option<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Checks if a schema is deprecated.
|
|
64
|
+
*
|
|
65
|
+
* @param schema - The schema to check
|
|
66
|
+
* @returns true if the schema is deprecated
|
|
67
|
+
*/
|
|
68
|
+
export declare const isDeprecated: (schema: Schema.Top) => boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Finds deprecated fields with values in the given event arguments.
|
|
71
|
+
* This walks through a Struct schema and checks each property for deprecation.
|
|
72
|
+
*
|
|
73
|
+
* @param schema - The event schema (expected to be a Struct)
|
|
74
|
+
* @param args - The event arguments
|
|
75
|
+
* @returns Array of objects containing field name and deprecation reason
|
|
76
|
+
*/
|
|
77
|
+
export declare const findDeprecatedFieldsWithValues: (schema: Schema.Top, args: Record<string, unknown>) => Array<{
|
|
78
|
+
field: string;
|
|
79
|
+
reason: string;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Logs deprecation warnings for an event using Effect.logWarning.
|
|
83
|
+
* Checks both event-level and field-level deprecation, with deduplication.
|
|
84
|
+
*
|
|
85
|
+
* @param eventDef - The event definition to check
|
|
86
|
+
* @param args - The event arguments
|
|
87
|
+
* @returns An Effect that logs warnings for any deprecations found
|
|
88
|
+
*/
|
|
89
|
+
export declare const logDeprecationWarnings: (eventDef: EventDef.AnyWithoutFn, args: Record<string, unknown>) => Effect.Effect<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Resets the deprecation warning state. Useful for testing.
|
|
92
|
+
*/
|
|
93
|
+
export declare const resetDeprecationWarnings: () => void;
|
|
94
|
+
//# sourceMappingURL=deprecated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAa,MAAM,yBAAyB,CAAA;AAEhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,yDAAyD;AACzD,eAAO,MAAM,YAAY,4CAA4C,CAAA;AAErE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACpB,QAAQ,MAAM,MACd,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAG,CAAC,CAAC,SAAS,CACD,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACE,CAAA;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,OAAqD,CAAA;AAEvG;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,CAAC,GAAG,EAClB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA2BzC,CAAA;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,QAAQ,CAAC,YAAY,EAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CA2BjB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAO,IAG3C,CAAA"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation Annotations for Events
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for marking event fields and entire events as deprecated.
|
|
5
|
+
* When a deprecated field is used or a deprecated event is committed, a warning is logged.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Events } from '@livestore/livestore'
|
|
10
|
+
* import { Schema } from 'effect'
|
|
11
|
+
* import { deprecated } from '@livestore/common/schema'
|
|
12
|
+
*
|
|
13
|
+
* // Field-level deprecation
|
|
14
|
+
* const todoUpdated = Events.synced({
|
|
15
|
+
* name: 'v1.TodoUpdated',
|
|
16
|
+
* schema: Schema.Struct({
|
|
17
|
+
* id: Schema.String,
|
|
18
|
+
* title: Schema.optional(Schema.String).pipe(deprecated("Use 'text' instead")),
|
|
19
|
+
* text: Schema.optional(Schema.String),
|
|
20
|
+
* }),
|
|
21
|
+
* })
|
|
22
|
+
*
|
|
23
|
+
* // Event-level deprecation
|
|
24
|
+
* const todoRenamed = Events.synced({
|
|
25
|
+
* name: 'v1.TodoRenamed',
|
|
26
|
+
* schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
|
|
27
|
+
* deprecated: "Use 'v1.TodoUpdated' instead",
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
* @module
|
|
31
|
+
*/
|
|
32
|
+
import { Effect, Option, SchemaAST } from '@livestore/utils/effect';
|
|
33
|
+
/** Annotation key used to mark schemas as deprecated. */
|
|
34
|
+
export const DeprecatedId = 'livestore/schema/annotations/deprecated';
|
|
35
|
+
/**
|
|
36
|
+
* Marks a schema field as deprecated with a reason message.
|
|
37
|
+
* When an event is committed with a deprecated field that has a value,
|
|
38
|
+
* a warning will be logged.
|
|
39
|
+
*
|
|
40
|
+
* Works with Schema fields, including optional fields from Schema.optional.
|
|
41
|
+
*
|
|
42
|
+
* @param reason - Explanation of why this field is deprecated and what to use instead
|
|
43
|
+
* @returns A function that adds the deprecation annotation to the schema
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const schema = Schema.Struct({
|
|
48
|
+
* oldField: Schema.optional(Schema.String).pipe(deprecated("Use 'newField' instead")),
|
|
49
|
+
* newField: Schema.optional(Schema.String),
|
|
50
|
+
* })
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export const deprecated = (reason) => (schema) => schema.annotate({ [DeprecatedId]: reason });
|
|
54
|
+
/**
|
|
55
|
+
* Checks if a schema has a deprecation annotation.
|
|
56
|
+
*
|
|
57
|
+
* @param schema - The schema to check
|
|
58
|
+
* @returns The deprecation reason if deprecated, None otherwise
|
|
59
|
+
*/
|
|
60
|
+
export const getDeprecatedReason = (schema) => Option.fromUndefinedOr(SchemaAST.resolveAt(DeprecatedId)(schema.ast));
|
|
61
|
+
/**
|
|
62
|
+
* Checks if a schema is deprecated.
|
|
63
|
+
*
|
|
64
|
+
* @param schema - The schema to check
|
|
65
|
+
* @returns true if the schema is deprecated
|
|
66
|
+
*/
|
|
67
|
+
export const isDeprecated = (schema) => Option.isSome(getDeprecatedReason(schema));
|
|
68
|
+
/**
|
|
69
|
+
* Finds deprecated fields with values in the given event arguments.
|
|
70
|
+
* This walks through a Struct schema and checks each property for deprecation.
|
|
71
|
+
*
|
|
72
|
+
* @param schema - The event schema (expected to be a Struct)
|
|
73
|
+
* @param args - The event arguments
|
|
74
|
+
* @returns Array of objects containing field name and deprecation reason
|
|
75
|
+
*/
|
|
76
|
+
export const findDeprecatedFieldsWithValues = (schema, args) => {
|
|
77
|
+
const result = [];
|
|
78
|
+
const ast = SchemaAST.toType(schema.ast);
|
|
79
|
+
// Handle Objects (Struct) schemas
|
|
80
|
+
if (SchemaAST.isObjects(ast) === true) {
|
|
81
|
+
for (const prop of ast.propertySignatures) {
|
|
82
|
+
const fieldName = String(prop.name);
|
|
83
|
+
const fieldValue = args[fieldName];
|
|
84
|
+
// Only check fields that have a value (not undefined)
|
|
85
|
+
if (fieldValue !== undefined) {
|
|
86
|
+
// Check deprecation on the property key itself (for Schema.optional(...).pipe(deprecated(...)))
|
|
87
|
+
const deprecationReason = prop.type.context?.annotations?.[DeprecatedId];
|
|
88
|
+
// Also check deprecation on the type (for direct field deprecation)
|
|
89
|
+
const typeDeprecation = SchemaAST.resolveAt(DeprecatedId)(prop.type);
|
|
90
|
+
const reason = deprecationReason ?? typeDeprecation;
|
|
91
|
+
if (reason !== undefined) {
|
|
92
|
+
result.push({ field: fieldName, reason });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
};
|
|
99
|
+
/** Set of event names that have already logged deprecation warnings. */
|
|
100
|
+
const warnedDeprecatedEvents = new Set();
|
|
101
|
+
/** Map of event+field combinations that have already logged deprecation warnings. */
|
|
102
|
+
const warnedDeprecatedFields = new Set();
|
|
103
|
+
/**
|
|
104
|
+
* Logs deprecation warnings for an event using Effect.logWarning.
|
|
105
|
+
* Checks both event-level and field-level deprecation, with deduplication.
|
|
106
|
+
*
|
|
107
|
+
* @param eventDef - The event definition to check
|
|
108
|
+
* @param args - The event arguments
|
|
109
|
+
* @returns An Effect that logs warnings for any deprecations found
|
|
110
|
+
*/
|
|
111
|
+
export const logDeprecationWarnings = (eventDef, args) => Effect.gen(function* () {
|
|
112
|
+
const eventName = eventDef.name;
|
|
113
|
+
// Check for event-level deprecation
|
|
114
|
+
const eventDeprecation = eventDef.options.deprecated;
|
|
115
|
+
if (eventDeprecation !== undefined && warnedDeprecatedEvents.has(eventName) === false) {
|
|
116
|
+
warnedDeprecatedEvents.add(eventName);
|
|
117
|
+
yield* Effect.logWarning('@livestore/schema:deprecated-event', {
|
|
118
|
+
event: eventName,
|
|
119
|
+
reason: eventDeprecation,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Check for deprecated fields with values
|
|
123
|
+
const deprecatedFields = findDeprecatedFieldsWithValues(eventDef.schema, args);
|
|
124
|
+
for (const { field, reason } of deprecatedFields) {
|
|
125
|
+
const key = `${eventName}:${field}`;
|
|
126
|
+
if (warnedDeprecatedFields.has(key) === false) {
|
|
127
|
+
warnedDeprecatedFields.add(key);
|
|
128
|
+
yield* Effect.logWarning('@livestore/schema:deprecated-field', {
|
|
129
|
+
event: eventName,
|
|
130
|
+
field,
|
|
131
|
+
reason,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* Resets the deprecation warning state. Useful for testing.
|
|
138
|
+
*/
|
|
139
|
+
export const resetDeprecationWarnings = () => {
|
|
140
|
+
warnedDeprecatedEvents.clear();
|
|
141
|
+
warnedDeprecatedFields.clear();
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=deprecated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.js","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.test.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
2
|
+
import { Effect, Logger, Schema } from '@livestore/utils/effect';
|
|
3
|
+
import { synced } from "./define.js";
|
|
4
|
+
import { deprecated, findDeprecatedFieldsWithValues, getDeprecatedReason, isDeprecated, logDeprecationWarnings, resetDeprecationWarnings, } from "./deprecated.js";
|
|
5
|
+
describe('deprecated annotations', () => {
|
|
6
|
+
test('adds deprecation annotation to schema', () => {
|
|
7
|
+
const schema = Schema.String.pipe(deprecated('Use newField instead'));
|
|
8
|
+
expect(isDeprecated(schema)).toBe(true);
|
|
9
|
+
expect(getDeprecatedReason(schema)._tag).toBe('Some');
|
|
10
|
+
});
|
|
11
|
+
test('works with optional fields in Struct', () => {
|
|
12
|
+
const struct = Schema.Struct({
|
|
13
|
+
oldField: Schema.optional(Schema.String).pipe(deprecated('Legacy')),
|
|
14
|
+
});
|
|
15
|
+
expect(findDeprecatedFieldsWithValues(struct, { oldField: 'x' })).toEqual([{ field: 'oldField', reason: 'Legacy' }]);
|
|
16
|
+
});
|
|
17
|
+
test('non-deprecated schemas return false', () => {
|
|
18
|
+
expect(isDeprecated(Schema.String)).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
test('ignores deprecated fields without values', () => {
|
|
21
|
+
const schema = Schema.Struct({
|
|
22
|
+
id: Schema.String,
|
|
23
|
+
old: Schema.optional(Schema.String).pipe(deprecated('x')),
|
|
24
|
+
});
|
|
25
|
+
expect(findDeprecatedFieldsWithValues(schema, { id: '1' })).toEqual([]);
|
|
26
|
+
});
|
|
27
|
+
test('finds multiple deprecated fields', () => {
|
|
28
|
+
const schema = Schema.Struct({
|
|
29
|
+
a: Schema.optional(Schema.String).pipe(deprecated('A')),
|
|
30
|
+
b: Schema.optional(Schema.String).pipe(deprecated('B')),
|
|
31
|
+
});
|
|
32
|
+
const result = findDeprecatedFieldsWithValues(schema, { a: '1', b: '2' });
|
|
33
|
+
expect(result).toHaveLength(2);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('logDeprecationWarnings', () => {
|
|
37
|
+
let logs;
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
resetDeprecationWarnings();
|
|
40
|
+
logs = [];
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => resetDeprecationWarnings());
|
|
43
|
+
const run = (effect) => Effect.runSync(effect.pipe(Effect.provide(Logger.layer([Logger.make(({ message }) => logs.push(message))]))));
|
|
44
|
+
test('logs event deprecation warning', () => {
|
|
45
|
+
const event = synced({ name: 'Old', schema: Schema.Struct({ id: Schema.String }), deprecated: 'Use New' });
|
|
46
|
+
run(logDeprecationWarnings(event, { id: '1' }));
|
|
47
|
+
expect(logs).toEqual([['@livestore/schema:deprecated-event', { event: 'Old', reason: 'Use New' }]]);
|
|
48
|
+
});
|
|
49
|
+
test('logs field deprecation warning', () => {
|
|
50
|
+
const event = synced({
|
|
51
|
+
name: 'Ev',
|
|
52
|
+
schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('Use new')) }),
|
|
53
|
+
});
|
|
54
|
+
run(logDeprecationWarnings(event, { old: 'x' }));
|
|
55
|
+
expect(logs).toEqual([['@livestore/schema:deprecated-field', { event: 'Ev', field: 'old', reason: 'Use new' }]]);
|
|
56
|
+
});
|
|
57
|
+
test('deduplicates event warnings', () => {
|
|
58
|
+
const event = synced({ name: 'Dup', schema: Schema.Struct({ id: Schema.String }), deprecated: 'x' });
|
|
59
|
+
run(logDeprecationWarnings(event, { id: '1' }));
|
|
60
|
+
run(logDeprecationWarnings(event, { id: '2' }));
|
|
61
|
+
expect(logs).toHaveLength(1);
|
|
62
|
+
});
|
|
63
|
+
test('deduplicates field warnings', () => {
|
|
64
|
+
const event = synced({
|
|
65
|
+
name: 'DupField',
|
|
66
|
+
schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('x')) }),
|
|
67
|
+
});
|
|
68
|
+
run(logDeprecationWarnings(event, { old: 'a' }));
|
|
69
|
+
run(logDeprecationWarnings(event, { old: 'b' }));
|
|
70
|
+
expect(logs).toHaveLength(1);
|
|
71
|
+
});
|
|
72
|
+
test('no warning for non-deprecated event', () => {
|
|
73
|
+
const event = synced({ name: 'Normal', schema: Schema.Struct({ id: Schema.String }) });
|
|
74
|
+
run(logDeprecationWarnings(event, { id: '1' }));
|
|
75
|
+
expect(logs).toHaveLength(0);
|
|
76
|
+
});
|
|
77
|
+
test('no warning when deprecated field is undefined', () => {
|
|
78
|
+
const event = synced({
|
|
79
|
+
name: 'Unused',
|
|
80
|
+
schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('x')) }),
|
|
81
|
+
});
|
|
82
|
+
run(logDeprecationWarnings(event, {}));
|
|
83
|
+
expect(logs).toHaveLength(0);
|
|
84
|
+
});
|
|
85
|
+
test('logs both event and field warnings', () => {
|
|
86
|
+
const event = synced({
|
|
87
|
+
name: 'Both',
|
|
88
|
+
schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('F')) }),
|
|
89
|
+
deprecated: 'E',
|
|
90
|
+
});
|
|
91
|
+
run(logDeprecationWarnings(event, { old: 'x' }));
|
|
92
|
+
expect(logs).toHaveLength(2);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=deprecated.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.test.js","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EACL,UAAU,EACV,8BAA8B,EAC9B,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAA;AAExB,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SACpE,CAAC,CAAA;QACF,MAAM,CAAC,8BAA8B,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IACtH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,EAAE,EAAE,MAAM,CAAC,MAAM;YACjB,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC1D,CAAC,CAAA;QACF,MAAM,CAAC,8BAA8B,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACxD,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,IAAiB,CAAA;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,wBAAwB,EAAE,CAAA;QAC1B,IAAI,GAAG,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE,CAAC,wBAAwB,EAAE,CAAC,CAAA;IAE3C,MAAM,GAAG,GAAG,CAAC,MAA2B,EAAE,EAAE,CAC1C,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3G,CAAA;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;QAC1G,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IACrG,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC;YACnB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;SAC3F,CAAC,CAAA;QACF,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAClH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;QACpG,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/C,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC;YACnB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC,CAAA;QACF,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAChD,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACtF,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC;YACnB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC,CAAA;QACF,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC;YACnB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpF,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;QACF,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import type { FactsCallback } from './facts.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Core type representing an event definition in LiveStore.
|
|
5
|
+
*
|
|
6
|
+
* An EventDef defines the structure and behavior of an event type, including:
|
|
7
|
+
* - A unique name identifying the event type (conventionally versioned, e.g., `v1.TodoCreated`)
|
|
8
|
+
* - A schema for validating and encoding/decoding event arguments
|
|
9
|
+
* - Options controlling sync behavior and constraints
|
|
10
|
+
*
|
|
11
|
+
* EventDefs are callable - invoking them creates a partial event object suitable for `store.commit()`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { Events } from '@livestore/livestore'
|
|
16
|
+
* import { Schema } from 'effect'
|
|
17
|
+
*
|
|
18
|
+
* const todoCreated = Events.synced({
|
|
19
|
+
* name: 'v1.TodoCreated',
|
|
20
|
+
* schema: Schema.Struct({
|
|
21
|
+
* id: Schema.String,
|
|
22
|
+
* text: Schema.String,
|
|
23
|
+
* }),
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* // Use the EventDef as a constructor
|
|
27
|
+
* store.commit(todoCreated({ id: 'abc', text: 'Buy milk' }))
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export type EventDef<TName extends string, TType, TEncoded = TType, TDerived extends boolean = false> = {
|
|
31
|
+
/** Unique identifier for this event type. Conventionally versioned (e.g., `v1.TodoCreated`). */
|
|
32
|
+
name: TName;
|
|
33
|
+
/** Effect Schema used for validating and encoding/decoding event arguments. */
|
|
34
|
+
schema: Schema.Codec<TType, TEncoded>;
|
|
35
|
+
options: {
|
|
36
|
+
/**
|
|
37
|
+
* When true, the event is only synced within the same client's sessions (e.g., across tabs)
|
|
38
|
+
* but never sent to the sync backend. Useful for UI state like selected items or filters.
|
|
39
|
+
*/
|
|
40
|
+
clientOnly: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Callback defining fact constraints for this event.
|
|
43
|
+
* @experimental This feature is not fully implemented yet.
|
|
44
|
+
*/
|
|
45
|
+
facts: FactsCallback<TType> | undefined;
|
|
46
|
+
/** Whether this is a derived event. Derived events cannot have materializers. */
|
|
47
|
+
derived: TDerived;
|
|
48
|
+
/**
|
|
49
|
+
* Deprecation reason for this event. When set, a warning is logged at commit time.
|
|
50
|
+
*/
|
|
51
|
+
deprecated: string | undefined;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Callable signature - creates a partial event with decoded arguments.
|
|
55
|
+
* The returned object can be passed directly to `store.commit()`.
|
|
56
|
+
*/
|
|
57
|
+
(args: TType): {
|
|
58
|
+
name: TName;
|
|
59
|
+
args: TType;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Creates a partial event with pre-encoded arguments.
|
|
63
|
+
* Useful when working with already-serialized data.
|
|
64
|
+
*/
|
|
65
|
+
encoded: (args: TEncoded) => {
|
|
66
|
+
name: TName;
|
|
67
|
+
args: TEncoded;
|
|
68
|
+
};
|
|
69
|
+
/** Type helper for accessing the event's shape with name and decoded args. */
|
|
70
|
+
readonly Event: {
|
|
71
|
+
name: TName;
|
|
72
|
+
args: TType;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export declare namespace EventDef {
|
|
76
|
+
/**
|
|
77
|
+
* Wildcard type matching any EventDef regardless of type parameters.
|
|
78
|
+
* Used as a type constraint in generic functions and collections.
|
|
79
|
+
*/
|
|
80
|
+
type Any = EventDef<string, any, any, boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* EventDef without the callable function signature.
|
|
83
|
+
* Used in contexts where only the metadata (name, schema, options) is needed,
|
|
84
|
+
* such as materializer definitions.
|
|
85
|
+
*/
|
|
86
|
+
type AnyWithoutFn = Pick<Any, 'name' | 'schema' | 'options'>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Container holding a Map of event definitions keyed by name.
|
|
90
|
+
* Used internally by LiveStoreSchema.
|
|
91
|
+
*/
|
|
92
|
+
export type EventDefMap = {
|
|
93
|
+
map: Map<string, EventDef.Any>;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Plain object record of event definitions keyed by name.
|
|
97
|
+
* This is the typical shape when defining events in user code.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const events = {
|
|
102
|
+
* todoCreated: Events.synced({ name: 'v1.TodoCreated', schema: ... }),
|
|
103
|
+
* todoDeleted: Events.synced({ name: 'v1.TodoDeleted', schema: ... }),
|
|
104
|
+
* } satisfies EventDefRecord
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export type EventDefRecord = {
|
|
108
|
+
[name: string]: EventDef.Any;
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=event-def.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-def.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/event-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IACtG,gGAAgG;IAChG,IAAI,EAAE,KAAK,CAAA;IAEX,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAErC,OAAO,EAAE;QACP;;;WAGG;QACH,UAAU,EAAE,OAAO,CAAA;QAEnB;;;WAGG;QACH,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;QAEvC,iFAAiF;QACjF,OAAO,EAAE,QAAQ,CAAA;QAEjB;;WAEG;QACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;KAC/B,CAAA;IAED;;;OAGG;IACH,CAAC,IAAI,EAAE,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,KAAK,CAAA;KACZ,CAAA;IAED;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK;QAC3B,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,QAAQ,CAAA;KACf,CAAA;IAED,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,KAAK,CAAA;KACZ,CAAA;CACF,CAAA;AAED,yBAAiB,QAAQ,CAAC;IACxB;;;OAGG;IACH,KAAY,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAErD;;;;OAIG;IACH,KAAY,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAA;CACpE;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;CAC/B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAA;CAC7B,CAAA"}
|