@livestore/common 0.4.0-dev.9 → 0.4.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/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/adapter-types.d.ts +37 -7
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +27 -1
- 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.map +1 -1
- package/dist/debug-info.js +33 -6
- package/dist/debug-info.js.map +1 -1
- 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 +15 -0
- package/dist/devtools/devtools-compatibility.test.js.map +1 -0
- package/dist/devtools/devtools-messages-client-session.d.ts +55 -24
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +22 -5
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +11 -14
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +7 -9
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +65 -30
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +29 -11
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
- package/dist/devtools/devtools-sessioninfo.js +7 -4
- package/dist/devtools/devtools-sessioninfo.js.map +1 -1
- package/dist/devtools/mod.d.ts +13 -2
- package/dist/devtools/mod.d.ts.map +1 -1
- package/dist/devtools/mod.js +10 -3
- package/dist/devtools/mod.js.map +1 -1
- package/dist/errors.d.ts +48 -18
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -12
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +53 -6
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +325 -257
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/RejectedPushError.d.ts +107 -0
- package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
- package/dist/leader-thread/RejectedPushError.js +78 -0
- package/dist/leader-thread/RejectedPushError.js.map +1 -0
- package/dist/leader-thread/connection.js +1 -1
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +19 -14
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +78 -18
- 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 +90 -58
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +15 -7
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +49 -17
- 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 +1 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +28 -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 +6 -6
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/stream-events.d.ts +56 -0
- package/dist/leader-thread/stream-events.d.ts.map +1 -0
- package/dist/leader-thread/stream-events.js +167 -0
- package/dist/leader-thread/stream-events.js.map +1 -0
- package/dist/leader-thread/types.d.ts +95 -17
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +13 -0
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/logging.d.ts +40 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +33 -0
- package/dist/logging.js.map +1 -0
- package/dist/make-client-session.d.ts +5 -3
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +7 -4
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +6 -6
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +18 -8
- package/dist/materializer-helper.js.map +1 -1
- package/dist/otel.d.ts +2 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +7 -2
- 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 +40 -29
- 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/deprecated.d.ts +99 -0
- package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
- package/dist/schema/EventDef/deprecated.js +144 -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 +193 -0
- package/dist/schema/EventSequenceNumber/client.js.map +1 -0
- package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/global.js +14 -0
- package/dist/schema/EventSequenceNumber/global.js.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.js +37 -0
- package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +44 -44
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +102 -111
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/client.js +176 -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 +111 -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 +6 -4
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +5 -4
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +16 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +32 -4
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +2 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +36 -15
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +121 -2
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +1 -1
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.test.js +2 -2
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +96 -47
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +51 -12
- 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 +24 -15
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +2 -2
- 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 +16 -10
- 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 +15 -4
- 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 +1 -1
- 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 +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +5 -7
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +51 -22
- 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 +99 -22
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +28 -15
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +231 -93
- 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.d.ts → system-tables/eventlog-tables.d.ts} +21 -450
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
- package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +5 -3
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +1 -1
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +92 -3
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +47 -0
- package/dist/schema/unknown-events.d.ts.map +1 -0
- package/dist/schema/unknown-events.js +69 -0
- package/dist/schema/unknown-events.js.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
- package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
- package/dist/schema-management/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/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +18 -6
- 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/sqlite-db-helper.js +3 -3
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +5 -5
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sqlite-types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +12 -12
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +99 -114
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +0 -33
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +5 -22
- 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 +10 -8
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +71 -69
- package/dist/sync/mock-sync-backend.js.map +1 -1
- 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 +54 -15
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +198 -9
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +11 -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 +2 -2
- 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 +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +11 -11
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- 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 +3 -3
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +33 -13
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/sync-backend.js +38 -1
- 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 +55 -55
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +80 -98
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +221 -132
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +36 -0
- package/dist/sync/transport-chunking.d.ts.map +1 -0
- package/dist/sync/transport-chunking.js +56 -0
- package/dist/sync/transport-chunking.js.map +1 -0
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +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.js +2 -2
- 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 +67 -15
- package/src/ClientSessionLeaderThreadProxy.ts +27 -12
- package/src/WorkerTransportError.ts +12 -0
- package/src/adapter-types.ts +50 -7
- package/src/bounded-collections.ts +6 -5
- package/src/debug-info.ts +37 -6
- package/src/devtools/devtools-compatibility.test.ts +18 -0
- package/src/devtools/devtools-messages-client-session.ts +22 -4
- package/src/devtools/devtools-messages-common.ts +7 -12
- package/src/devtools/devtools-messages-leader.ts +29 -10
- package/src/devtools/devtools-sessioninfo.ts +8 -5
- package/src/devtools/mod.ts +11 -2
- package/src/errors.ts +32 -24
- package/src/index.ts +4 -1
- package/src/leader-thread/LeaderSyncProcessor.ts +523 -373
- package/src/leader-thread/RejectedPushError.ts +106 -0
- package/src/leader-thread/connection.ts +1 -1
- package/src/leader-thread/eventlog.ts +112 -39
- package/src/leader-thread/leader-worker-devtools.ts +201 -120
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +125 -40
- package/src/leader-thread/materialize-event.ts +40 -10
- package/src/leader-thread/mod.ts +1 -0
- package/src/leader-thread/recreate-db.ts +7 -7
- package/src/leader-thread/shutdown-channel.ts +4 -8
- package/src/leader-thread/stream-events.ts +206 -0
- package/src/leader-thread/types.ts +68 -18
- package/src/logging.ts +62 -0
- package/src/make-client-session.ts +11 -5
- package/src/materializer-helper.ts +27 -16
- package/src/otel.ts +13 -2
- package/src/rematerialize-from-eventlog.ts +61 -51
- package/src/schema/EventDef/define.ts +217 -0
- package/src/schema/EventDef/deprecated.test.ts +129 -0
- package/src/schema/EventDef/deprecated.ts +175 -0
- package/src/schema/EventDef/event-def.ts +125 -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 +257 -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 +129 -0
- package/src/schema/LiveStoreEvent/client.ts +235 -0
- package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
- package/src/schema/LiveStoreEvent/global.ts +45 -0
- package/src/schema/LiveStoreEvent/input.ts +63 -0
- package/src/schema/LiveStoreEvent/mod.ts +4 -0
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +6 -4
- package/src/schema/schema.ts +46 -5
- package/src/schema/state/sqlite/client-document-def.test.ts +144 -5
- package/src/schema/state/sqlite/client-document-def.ts +47 -34
- package/src/schema/state/sqlite/column-annotations.test.ts +3 -2
- package/src/schema/state/sqlite/column-annotations.ts +2 -1
- package/src/schema/state/sqlite/column-def.test.ts +66 -12
- package/src/schema/state/sqlite/column-def.ts +119 -47
- package/src/schema/state/sqlite/column-spec.test.ts +32 -17
- package/src/schema/state/sqlite/column-spec.ts +37 -11
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -2
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +2 -1
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +41 -15
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +13 -19
- package/src/schema/state/sqlite/mod.ts +7 -8
- package/src/schema/state/sqlite/query-builder/api.ts +55 -17
- package/src/schema/state/sqlite/query-builder/astToSql.ts +110 -21
- package/src/schema/state/sqlite/query-builder/impl.test.ts +267 -93
- package/src/schema/state/sqlite/query-builder/impl.ts +26 -13
- 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 +69 -0
- package/src/schema/state/sqlite/table-def.test.ts +114 -3
- package/src/schema/state/sqlite/table-def.ts +16 -22
- package/src/schema/unknown-events.ts +131 -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/sql-queries/sql-queries.ts +18 -6
- package/src/sql-queries/sql-query-builder.ts +1 -0
- package/src/sqlite-db-helper.ts +3 -3
- package/src/sqlite-types.ts +6 -5
- package/src/sync/ClientSessionSyncProcessor.ts +152 -142
- package/src/sync/errors.ts +12 -24
- package/src/sync/index.ts +2 -0
- package/src/sync/mock-sync-backend.ts +146 -104
- 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 +280 -26
- package/src/sync/next/history-dag.ts +17 -13
- package/src/sync/next/rebase-events.ts +12 -12
- package/src/sync/next/test/compact-events.calculator.test.ts +3 -2
- package/src/sync/next/test/compact-events.test.ts +4 -3
- package/src/sync/next/test/event-fixtures.ts +13 -13
- package/src/sync/sync-backend-kv.ts +4 -3
- package/src/sync/sync-backend.ts +66 -17
- package/src/sync/sync.ts +24 -2
- package/src/sync/syncstate.test.ts +583 -419
- package/src/sync/syncstate.ts +127 -122
- package/src/sync/transport-chunking.ts +90 -0
- package/src/sync/validate-push-payload.ts +6 -8
- package/src/testing/event-factory.ts +10 -12
- package/src/util.ts +2 -2
- package/src/version.ts +33 -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.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.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/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/sync/next/ambient.d.ts +0 -3
- package/src/sync/next/graphology.ts +0 -41
- package/src/sync/next/graphology_.ts +0 -2
|
@@ -1,48 +1,51 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
2
|
+
import { Cause, Effect, Exit, Schema } from '@livestore/utils/effect';
|
|
3
|
+
import { assert, expect } from 'vitest';
|
|
4
|
+
import * as EventSequenceNumber from "../schema/EventSequenceNumber/mod.js";
|
|
5
|
+
import * as LiveStoreEvent from "../schema/LiveStoreEvent/mod.js";
|
|
4
6
|
import * as SyncState from "./syncstate.js";
|
|
5
|
-
class TestEvent extends LiveStoreEvent.EncodedWithMeta {
|
|
6
|
-
payload;
|
|
7
|
-
isClient;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
seqNum: EventSequenceNumber.make(seqNum),
|
|
11
|
-
parentSeqNum: EventSequenceNumber.make(parentSeqNum),
|
|
7
|
+
class TestEvent extends LiveStoreEvent.Client.EncodedWithMeta {
|
|
8
|
+
payload = 'uninitialized';
|
|
9
|
+
isClient = false;
|
|
10
|
+
static new = (seqNum, parentSeqNum, payload, isClient) => {
|
|
11
|
+
const event = new TestEvent({
|
|
12
|
+
seqNum: EventSequenceNumber.Client.Composite.make(seqNum),
|
|
13
|
+
parentSeqNum: EventSequenceNumber.Client.Composite.make(parentSeqNum),
|
|
12
14
|
name: 'a',
|
|
13
15
|
args: payload,
|
|
14
16
|
clientId: 'static-local-id',
|
|
15
17
|
sessionId: 'static-session-id',
|
|
16
18
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
event.payload = payload;
|
|
20
|
+
event.isClient = isClient;
|
|
21
|
+
return event;
|
|
22
|
+
};
|
|
20
23
|
rebase_ = (parentSeqNum, rebaseGeneration) => {
|
|
21
24
|
return this.rebase({ parentSeqNum, isClient: this.isClient, rebaseGeneration });
|
|
22
25
|
};
|
|
23
26
|
}
|
|
24
|
-
const e0_1 = new
|
|
25
|
-
const e1_0 = new
|
|
26
|
-
const e1_1 = new
|
|
27
|
-
const e1_2 = new
|
|
28
|
-
const e1_3 = new
|
|
29
|
-
const e2_0 = new
|
|
30
|
-
const e2_1 = new
|
|
31
|
-
const isEqualEvent = LiveStoreEvent.isEqualEncoded;
|
|
27
|
+
const e0_1 = TestEvent.new({ global: 0, client: 1 }, EventSequenceNumber.Client.ROOT, 'a', true);
|
|
28
|
+
const e1_0 = TestEvent.new({ global: 1, client: 0 }, EventSequenceNumber.Client.ROOT, 'a', false);
|
|
29
|
+
const e1_1 = TestEvent.new({ global: 1, client: 1 }, e1_0.seqNum, 'a', true);
|
|
30
|
+
const e1_2 = TestEvent.new({ global: 1, client: 2 }, e1_1.seqNum, 'a', true);
|
|
31
|
+
const e1_3 = TestEvent.new({ global: 1, client: 3 }, e1_2.seqNum, 'a', true);
|
|
32
|
+
const e2_0 = TestEvent.new({ global: 2, client: 0 }, e1_0.seqNum, 'a', false);
|
|
33
|
+
const e2_1 = TestEvent.new({ global: 2, client: 1 }, e2_0.seqNum, 'a', true);
|
|
34
|
+
const isEqualEvent = LiveStoreEvent.Client.isEqualEncoded;
|
|
32
35
|
const isClientEvent = (event) => event.isClient;
|
|
33
|
-
describe('syncstate', () => {
|
|
34
|
-
describe('merge', () => {
|
|
36
|
+
Vitest.describe('syncstate', () => {
|
|
37
|
+
Vitest.describe('merge', () => {
|
|
35
38
|
const merge = ({ syncState, payload, ignoreClientEvents = false, }) => SyncState.merge({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents });
|
|
36
|
-
describe('upstream-rebase', () => {
|
|
37
|
-
it('should rollback until start', () => {
|
|
39
|
+
Vitest.describe('upstream-rebase', () => {
|
|
40
|
+
Vitest.it.effect('should rollback until start', () => Effect.gen(function* () {
|
|
38
41
|
const syncState = new SyncState.SyncState({
|
|
39
42
|
pending: [e2_0],
|
|
40
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
43
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
41
44
|
localHead: e2_0.seqNum,
|
|
42
45
|
});
|
|
43
46
|
const e1_0_e2_0 = e1_0.rebase_(e2_0.seqNum, 0);
|
|
44
47
|
const e1_1_e2_1 = e1_1.rebase_(e1_0_e2_0.seqNum, 0);
|
|
45
|
-
const result = merge({
|
|
48
|
+
const result = yield* merge({
|
|
46
49
|
syncState,
|
|
47
50
|
payload: SyncState.PayloadUpstreamRebase.make({
|
|
48
51
|
rollbackEvents: [e1_0, e1_1],
|
|
@@ -56,15 +59,15 @@ describe('syncstate', () => {
|
|
|
56
59
|
expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum);
|
|
57
60
|
expectEventArraysEqual(result.newEvents, [e1_0_e2_0, e1_1_e2_1, e2_0_e3_0]);
|
|
58
61
|
expectEventArraysEqual(result.rollbackEvents, [e1_0, e1_1, e2_0]);
|
|
59
|
-
});
|
|
60
|
-
it('should rollback only to specified point', () => {
|
|
62
|
+
}));
|
|
63
|
+
Vitest.it.effect('should rollback only to specified point', () => Effect.gen(function* () {
|
|
61
64
|
const syncState = new SyncState.SyncState({
|
|
62
65
|
pending: [e2_0],
|
|
63
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
66
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
64
67
|
localHead: e2_0.seqNum,
|
|
65
68
|
});
|
|
66
69
|
const e1_1_e2_0 = e1_1.rebase_(e1_0.seqNum, 0);
|
|
67
|
-
const result = merge({
|
|
70
|
+
const result = yield* merge({
|
|
68
71
|
syncState,
|
|
69
72
|
payload: SyncState.PayloadUpstreamRebase.make({
|
|
70
73
|
newEvents: [e1_1_e2_0],
|
|
@@ -78,14 +81,14 @@ describe('syncstate', () => {
|
|
|
78
81
|
expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum);
|
|
79
82
|
expectEventArraysEqual(result.newEvents, [e1_1_e2_0, e2_0_e3_0]);
|
|
80
83
|
expectEventArraysEqual(result.rollbackEvents, [e1_1, e2_0]);
|
|
81
|
-
});
|
|
82
|
-
it('should work for empty pending', () => {
|
|
84
|
+
}));
|
|
85
|
+
Vitest.it.effect('should work for empty pending', () => Effect.gen(function* () {
|
|
83
86
|
const syncState = new SyncState.SyncState({
|
|
84
87
|
pending: [],
|
|
85
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
88
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
86
89
|
localHead: e1_0.seqNum,
|
|
87
90
|
});
|
|
88
|
-
const result = merge({
|
|
91
|
+
const result = yield* merge({
|
|
89
92
|
syncState,
|
|
90
93
|
payload: SyncState.PayloadUpstreamRebase.make({ rollbackEvents: [e1_0], newEvents: [e2_0] }),
|
|
91
94
|
});
|
|
@@ -94,94 +97,101 @@ describe('syncstate', () => {
|
|
|
94
97
|
expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum);
|
|
95
98
|
expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum);
|
|
96
99
|
expect(result.newEvents).toStrictEqual([e2_0]);
|
|
97
|
-
});
|
|
100
|
+
}));
|
|
98
101
|
});
|
|
99
|
-
describe('upstream-advance: advance', () => {
|
|
100
|
-
it('should
|
|
102
|
+
Vitest.describe('upstream-advance: advance', () => {
|
|
103
|
+
Vitest.it.effect('should die if newEvents are not sorted in ascending order by event number (client)', () => Effect.gen(function* () {
|
|
101
104
|
const syncState = new SyncState.SyncState({
|
|
102
105
|
pending: [e1_0],
|
|
103
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
106
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
104
107
|
localHead: e1_0.seqNum,
|
|
105
108
|
});
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
const exit = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_1, e1_0] } }).pipe(Effect.exit);
|
|
110
|
+
assert(Exit.isFailure(exit));
|
|
111
|
+
expect(Cause.isDie(exit.cause)).toBe(true);
|
|
112
|
+
}));
|
|
113
|
+
Vitest.it.effect('should die if newEvents are not sorted in ascending order by event number (global)', () => Effect.gen(function* () {
|
|
110
114
|
const syncState = new SyncState.SyncState({
|
|
111
115
|
pending: [e1_0],
|
|
112
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
116
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
113
117
|
localHead: e1_0.seqNum,
|
|
114
118
|
});
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
+
const exit = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0, e1_0] } }).pipe(Effect.exit);
|
|
120
|
+
assert(Exit.isFailure(exit));
|
|
121
|
+
expect(Cause.isDie(exit.cause)).toBe(true);
|
|
122
|
+
}));
|
|
123
|
+
Vitest.it.effect('should die if incoming event is < expected upstream head', () => Effect.gen(function* () {
|
|
119
124
|
const syncState = new SyncState.SyncState({
|
|
120
125
|
pending: [],
|
|
121
126
|
upstreamHead: e2_0.seqNum,
|
|
122
127
|
localHead: e2_0.seqNum,
|
|
123
128
|
});
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
const exit = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } }).pipe(Effect.exit);
|
|
130
|
+
assert(Exit.isFailure(exit));
|
|
131
|
+
expect(Cause.isDie(exit.cause)).toBe(true);
|
|
132
|
+
}));
|
|
133
|
+
Vitest.it.effect('should die if incoming event is = expected upstream head', () => Effect.gen(function* () {
|
|
128
134
|
const syncState = new SyncState.SyncState({
|
|
129
135
|
pending: [],
|
|
130
136
|
upstreamHead: e2_0.seqNum,
|
|
131
137
|
localHead: e2_0.seqNum,
|
|
132
138
|
});
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
const exit = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e2_0] } }).pipe(Effect.exit);
|
|
140
|
+
assert(Exit.isFailure(exit));
|
|
141
|
+
expect(Cause.isDie(exit.cause)).toBe(true);
|
|
142
|
+
}));
|
|
143
|
+
Vitest.it.effect('should confirm pending event when receiving matching event', () => Effect.gen(function* () {
|
|
137
144
|
const syncState = new SyncState.SyncState({
|
|
138
145
|
pending: [e1_0],
|
|
139
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
146
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
140
147
|
localHead: e1_0.seqNum,
|
|
141
148
|
});
|
|
142
|
-
const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } });
|
|
149
|
+
const result = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } });
|
|
143
150
|
expectAdvance(result);
|
|
144
151
|
expectEventArraysEqual(result.newSyncState.pending, []);
|
|
145
152
|
expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum);
|
|
146
153
|
expect(result.newSyncState.localHead).toMatchObject(e1_0.seqNum);
|
|
147
154
|
expectEventArraysEqual(result.newEvents, []);
|
|
148
155
|
expectEventArraysEqual(result.confirmedEvents, [e1_0]);
|
|
149
|
-
});
|
|
150
|
-
it('should confirm partial pending event when receiving matching event', () => {
|
|
156
|
+
}));
|
|
157
|
+
Vitest.it.effect('should confirm partial pending event when receiving matching event', () => Effect.gen(function* () {
|
|
151
158
|
const syncState = new SyncState.SyncState({
|
|
152
159
|
pending: [e1_0, e2_0],
|
|
153
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
160
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
154
161
|
localHead: e2_0.seqNum,
|
|
155
162
|
});
|
|
156
|
-
const result = merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } });
|
|
163
|
+
const result = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } });
|
|
157
164
|
expectAdvance(result);
|
|
158
165
|
expectEventArraysEqual(result.newSyncState.pending, [e2_0]);
|
|
159
166
|
expect(result.newSyncState.upstreamHead).toMatchObject(e1_0.seqNum);
|
|
160
167
|
expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum);
|
|
161
168
|
expectEventArraysEqual(result.newEvents, []);
|
|
162
169
|
expectEventArraysEqual(result.confirmedEvents, [e1_0]);
|
|
163
|
-
});
|
|
164
|
-
it('should confirm pending event and add new event', () => {
|
|
170
|
+
}));
|
|
171
|
+
Vitest.it.effect('should confirm pending event and add new event', () => Effect.gen(function* () {
|
|
165
172
|
const syncState = new SyncState.SyncState({
|
|
166
173
|
pending: [e1_0],
|
|
167
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
174
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
168
175
|
localHead: e1_0.seqNum,
|
|
169
176
|
});
|
|
170
|
-
const result = merge({
|
|
177
|
+
const result = yield* merge({
|
|
178
|
+
syncState,
|
|
179
|
+
payload: { _tag: 'upstream-advance', newEvents: [e1_0, e1_1] },
|
|
180
|
+
});
|
|
171
181
|
expectAdvance(result);
|
|
172
182
|
expectEventArraysEqual(result.newSyncState.pending, []);
|
|
173
183
|
expect(result.newSyncState.upstreamHead).toMatchObject(e1_1.seqNum);
|
|
174
184
|
expect(result.newSyncState.localHead).toMatchObject(e1_1.seqNum);
|
|
175
185
|
expect(result.newEvents).toStrictEqual([e1_1]);
|
|
176
186
|
expectEventArraysEqual(result.confirmedEvents, [e1_0]);
|
|
177
|
-
});
|
|
178
|
-
it('should confirm pending event and add multiple new events', () => {
|
|
187
|
+
}));
|
|
188
|
+
Vitest.it.effect('should confirm pending event and add multiple new events', () => Effect.gen(function* () {
|
|
179
189
|
const syncState = new SyncState.SyncState({
|
|
180
190
|
pending: [e1_1],
|
|
181
191
|
upstreamHead: e1_0.seqNum,
|
|
182
192
|
localHead: e1_1.seqNum,
|
|
183
193
|
});
|
|
184
|
-
const result = merge({
|
|
194
|
+
const result = yield* merge({
|
|
185
195
|
syncState,
|
|
186
196
|
payload: { _tag: 'upstream-advance', newEvents: [e1_1, e1_2, e1_3, e2_0, e2_1] },
|
|
187
197
|
});
|
|
@@ -191,14 +201,14 @@ describe('syncstate', () => {
|
|
|
191
201
|
expect(result.newSyncState.localHead).toMatchObject(e2_1.seqNum);
|
|
192
202
|
expect(result.newEvents).toStrictEqual([e1_2, e1_3, e2_0, e2_1]);
|
|
193
203
|
expectEventArraysEqual(result.confirmedEvents, [e1_1]);
|
|
194
|
-
});
|
|
195
|
-
it('should confirm pending global event while keep pending client events', () => {
|
|
204
|
+
}));
|
|
205
|
+
Vitest.it.effect('should confirm pending global event while keep pending client events', () => Effect.gen(function* () {
|
|
196
206
|
const syncState = new SyncState.SyncState({
|
|
197
207
|
pending: [e1_0, e1_1],
|
|
198
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
208
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
199
209
|
localHead: e1_1.seqNum,
|
|
200
210
|
});
|
|
201
|
-
const result = merge({
|
|
211
|
+
const result = yield* merge({
|
|
202
212
|
syncState,
|
|
203
213
|
payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
|
|
204
214
|
});
|
|
@@ -208,14 +218,14 @@ describe('syncstate', () => {
|
|
|
208
218
|
expect(result.newSyncState.localHead).toMatchObject(e1_1.seqNum);
|
|
209
219
|
expectEventArraysEqual(result.newEvents, []);
|
|
210
220
|
expectEventArraysEqual(result.confirmedEvents, [e1_0]);
|
|
211
|
-
});
|
|
212
|
-
it('should ignore client events (incoming is subset of pending)', () => {
|
|
221
|
+
}));
|
|
222
|
+
Vitest.it.effect('should ignore client events (incoming is subset of pending)', () => Effect.gen(function* () {
|
|
213
223
|
const syncState = new SyncState.SyncState({
|
|
214
224
|
pending: [e0_1, e1_0],
|
|
215
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
225
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
216
226
|
localHead: e1_0.seqNum,
|
|
217
227
|
});
|
|
218
|
-
const result = merge({
|
|
228
|
+
const result = yield* merge({
|
|
219
229
|
syncState,
|
|
220
230
|
payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
|
|
221
231
|
ignoreClientEvents: true,
|
|
@@ -226,14 +236,14 @@ describe('syncstate', () => {
|
|
|
226
236
|
expect(result.newSyncState.localHead).toMatchObject(e1_0.seqNum);
|
|
227
237
|
expectEventArraysEqual(result.newEvents, []);
|
|
228
238
|
expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0]);
|
|
229
|
-
});
|
|
230
|
-
it('should ignore client events (incoming is subset of pending case 2)', () => {
|
|
239
|
+
}));
|
|
240
|
+
Vitest.it.effect('should ignore client events (incoming is subset of pending case 2)', () => Effect.gen(function* () {
|
|
231
241
|
const syncState = new SyncState.SyncState({
|
|
232
242
|
pending: [e0_1, e1_0, e2_0],
|
|
233
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
243
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
234
244
|
localHead: e1_0.seqNum,
|
|
235
245
|
});
|
|
236
|
-
const result = merge({
|
|
246
|
+
const result = yield* merge({
|
|
237
247
|
syncState,
|
|
238
248
|
payload: { _tag: 'upstream-advance', newEvents: [e1_0] },
|
|
239
249
|
ignoreClientEvents: true,
|
|
@@ -244,14 +254,14 @@ describe('syncstate', () => {
|
|
|
244
254
|
expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum);
|
|
245
255
|
expectEventArraysEqual(result.newEvents, []);
|
|
246
256
|
expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0]);
|
|
247
|
-
});
|
|
248
|
-
it('should ignore client events (incoming goes beyond pending)', () => {
|
|
257
|
+
}));
|
|
258
|
+
Vitest.it.effect('should ignore client events (incoming goes beyond pending)', () => Effect.gen(function* () {
|
|
249
259
|
const syncState = new SyncState.SyncState({
|
|
250
260
|
pending: [e0_1, e1_0, e1_1],
|
|
251
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
261
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
252
262
|
localHead: e1_1.seqNum,
|
|
253
263
|
});
|
|
254
|
-
const result = merge({
|
|
264
|
+
const result = yield* merge({
|
|
255
265
|
syncState,
|
|
256
266
|
payload: { _tag: 'upstream-advance', newEvents: [e1_0, e2_0] },
|
|
257
267
|
ignoreClientEvents: true,
|
|
@@ -262,25 +272,65 @@ describe('syncstate', () => {
|
|
|
262
272
|
expect(result.newSyncState.localHead).toMatchObject(e2_0.seqNum);
|
|
263
273
|
expect(result.newEvents).toStrictEqual([e2_0]);
|
|
264
274
|
expectEventArraysEqual(result.confirmedEvents, [e0_1, e1_0, e1_1]);
|
|
265
|
-
});
|
|
266
|
-
it('should
|
|
275
|
+
}));
|
|
276
|
+
Vitest.it.effect('should die if incoming event is ≤ local head', () => Effect.gen(function* () {
|
|
267
277
|
const syncState = new SyncState.SyncState({
|
|
268
278
|
pending: [],
|
|
269
279
|
upstreamHead: e2_0.seqNum,
|
|
270
280
|
localHead: e2_0.seqNum,
|
|
271
281
|
});
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
282
|
+
const exit = yield* merge({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e1_0] } }).pipe(Effect.exit);
|
|
283
|
+
assert(Exit.isFailure(exit));
|
|
284
|
+
expect(Cause.isDie(exit.cause)).toBe(true);
|
|
285
|
+
}));
|
|
286
|
+
Vitest.it.effect('should advance (not rebase) when pending event has undefined-valued key dropped by JSON wire round-trip', () => Effect.gen(function* () {
|
|
287
|
+
const argsSchema = Schema.Struct({
|
|
288
|
+
id: Schema.String,
|
|
289
|
+
flag: Schema.UndefinedOr(Schema.Boolean),
|
|
290
|
+
});
|
|
291
|
+
const localArgs = Schema.encodeUnknownSync(argsSchema)({ id: 'abc' });
|
|
292
|
+
const wireArgs = JSON.parse(JSON.stringify(localArgs));
|
|
293
|
+
const localPending = new TestEvent({
|
|
294
|
+
seqNum: e1_0.seqNum,
|
|
295
|
+
parentSeqNum: e1_0.parentSeqNum,
|
|
296
|
+
name: e1_0.name,
|
|
297
|
+
args: localArgs,
|
|
298
|
+
clientId: e1_0.clientId,
|
|
299
|
+
sessionId: e1_0.sessionId,
|
|
300
|
+
});
|
|
301
|
+
const fromUpstream = new TestEvent({
|
|
302
|
+
seqNum: e1_0.seqNum,
|
|
303
|
+
parentSeqNum: e1_0.parentSeqNum,
|
|
304
|
+
name: e1_0.name,
|
|
305
|
+
args: wireArgs,
|
|
306
|
+
clientId: e1_0.clientId,
|
|
307
|
+
sessionId: e1_0.sessionId,
|
|
308
|
+
});
|
|
309
|
+
const syncState = new SyncState.SyncState({
|
|
310
|
+
pending: [localPending],
|
|
311
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
312
|
+
localHead: localPending.seqNum,
|
|
313
|
+
});
|
|
314
|
+
const result = yield* merge({
|
|
315
|
+
syncState,
|
|
316
|
+
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [fromUpstream] }),
|
|
317
|
+
});
|
|
318
|
+
expectAdvance(result);
|
|
319
|
+
expect(result.confirmedEvents).toHaveLength(1);
|
|
320
|
+
expect(result.newSyncState.pending).toHaveLength(0);
|
|
321
|
+
}));
|
|
275
322
|
});
|
|
276
|
-
describe('upstream-advance: rebase', () => {
|
|
277
|
-
it('should rebase single client event to end', () => {
|
|
323
|
+
Vitest.describe('upstream-advance: rebase', () => {
|
|
324
|
+
Vitest.it.effect('should rebase single client event to end', () => Effect.gen(function* () {
|
|
278
325
|
const syncState = new SyncState.SyncState({
|
|
279
326
|
pending: [e1_0],
|
|
280
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
327
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
281
328
|
localHead: e1_0.seqNum,
|
|
282
329
|
});
|
|
283
|
-
const result = merge({
|
|
330
|
+
const result = yield* merge({
|
|
331
|
+
syncState,
|
|
332
|
+
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1] }),
|
|
333
|
+
});
|
|
284
334
|
const e1_0_e1_2 = e1_0.rebase_(e1_1.seqNum, 1);
|
|
285
335
|
expectRebase(result);
|
|
286
336
|
expectEventArraysEqual(result.newSyncState.pending, [e1_0_e1_2]);
|
|
@@ -288,15 +338,18 @@ describe('syncstate', () => {
|
|
|
288
338
|
expect(result.newSyncState.localHead).toMatchObject(e1_0_e1_2.seqNum);
|
|
289
339
|
expectEventArraysEqual(result.rollbackEvents, [e1_0]);
|
|
290
340
|
expectEventArraysEqual(result.newEvents, [e1_1, e1_0_e1_2]);
|
|
291
|
-
});
|
|
292
|
-
it('should rebase different event with same id', () => {
|
|
293
|
-
const e2_0_b = new
|
|
341
|
+
}));
|
|
342
|
+
Vitest.it.effect('should rebase different event with same id', () => Effect.gen(function* () {
|
|
343
|
+
const e2_0_b = TestEvent.new({ global: 1, client: 0 }, e1_0.seqNum, '1_0_b', false);
|
|
294
344
|
const syncState = new SyncState.SyncState({
|
|
295
345
|
pending: [e2_0_b],
|
|
296
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
346
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
297
347
|
localHead: e2_0_b.seqNum,
|
|
298
348
|
});
|
|
299
|
-
const result = merge({
|
|
349
|
+
const result = yield* merge({
|
|
350
|
+
syncState,
|
|
351
|
+
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e2_0] }),
|
|
352
|
+
});
|
|
300
353
|
const e2_0_e3_0 = e2_0_b.rebase_(e2_0.seqNum, 1);
|
|
301
354
|
expectRebase(result);
|
|
302
355
|
expectEventArraysEqual(result.newSyncState.pending, [e2_0_e3_0]);
|
|
@@ -304,14 +357,14 @@ describe('syncstate', () => {
|
|
|
304
357
|
expectEventArraysEqual(result.rollbackEvents, [e2_0_b]);
|
|
305
358
|
expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum);
|
|
306
359
|
expect(result.newSyncState.localHead).toMatchObject(e2_0_e3_0.seqNum);
|
|
307
|
-
});
|
|
308
|
-
it('should rebase single client event to end (more incoming events)', () => {
|
|
360
|
+
}));
|
|
361
|
+
Vitest.it.effect('should rebase single client event to end (more incoming events)', () => Effect.gen(function* () {
|
|
309
362
|
const syncState = new SyncState.SyncState({
|
|
310
363
|
pending: [e1_0],
|
|
311
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
364
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
312
365
|
localHead: e1_0.seqNum,
|
|
313
366
|
});
|
|
314
|
-
const result = merge({
|
|
367
|
+
const result = yield* merge({
|
|
315
368
|
syncState,
|
|
316
369
|
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
|
|
317
370
|
});
|
|
@@ -320,14 +373,14 @@ describe('syncstate', () => {
|
|
|
320
373
|
expectEventArraysEqual(result.newSyncState.pending, [e1_0_e3_0]);
|
|
321
374
|
expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum);
|
|
322
375
|
expect(result.newSyncState.localHead).toMatchObject(e1_0_e3_0.seqNum);
|
|
323
|
-
});
|
|
324
|
-
it('should only rebase divergent events when first event matches', () => {
|
|
376
|
+
}));
|
|
377
|
+
Vitest.it.effect('should only rebase divergent events when first event matches', () => Effect.gen(function* () {
|
|
325
378
|
const syncState = new SyncState.SyncState({
|
|
326
379
|
pending: [e1_0, e1_1],
|
|
327
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
380
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
328
381
|
localHead: e1_0.seqNum,
|
|
329
382
|
});
|
|
330
|
-
const result = merge({
|
|
383
|
+
const result = yield* merge({
|
|
331
384
|
syncState,
|
|
332
385
|
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_0, e1_2, e1_3, e2_0] }),
|
|
333
386
|
});
|
|
@@ -338,14 +391,14 @@ describe('syncstate', () => {
|
|
|
338
391
|
expectEventArraysEqual(result.newEvents, [e1_2, e1_3, e2_0, e1_1_e2_1]);
|
|
339
392
|
expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum);
|
|
340
393
|
expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_1.seqNum);
|
|
341
|
-
});
|
|
342
|
-
it('should rebase all client events when incoming chain starts differently', () => {
|
|
394
|
+
}));
|
|
395
|
+
Vitest.it.effect('should rebase all client events when incoming chain starts differently', () => Effect.gen(function* () {
|
|
343
396
|
const syncState = new SyncState.SyncState({
|
|
344
397
|
pending: [e1_0, e1_1],
|
|
345
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
398
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
346
399
|
localHead: e1_1.seqNum,
|
|
347
400
|
});
|
|
348
|
-
const result = merge({
|
|
401
|
+
const result = yield* merge({
|
|
349
402
|
syncState,
|
|
350
403
|
payload: SyncState.PayloadUpstreamAdvance.make({ newEvents: [e1_1, e1_2, e1_3, e2_0] }),
|
|
351
404
|
});
|
|
@@ -357,41 +410,77 @@ describe('syncstate', () => {
|
|
|
357
410
|
expectEventArraysEqual(result.rollbackEvents, [e1_0, e1_1]);
|
|
358
411
|
expect(result.newSyncState.upstreamHead).toMatchObject(e2_0.seqNum);
|
|
359
412
|
expect(result.newSyncState.localHead).toMatchObject(e1_1_e2_2.seqNum);
|
|
360
|
-
});
|
|
361
|
-
describe('local-push', () => {
|
|
362
|
-
describe('advance', () => {
|
|
363
|
-
it('should advance with new events', () => {
|
|
413
|
+
}));
|
|
414
|
+
Vitest.describe('local-push', () => {
|
|
415
|
+
Vitest.describe('advance', () => {
|
|
416
|
+
Vitest.it.effect('should advance with new events', () => Effect.gen(function* () {
|
|
364
417
|
const syncState = new SyncState.SyncState({
|
|
365
418
|
pending: [e1_0],
|
|
366
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
419
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
367
420
|
localHead: e1_0.seqNum,
|
|
368
421
|
});
|
|
369
|
-
const result = merge({
|
|
422
|
+
const result = yield* merge({
|
|
370
423
|
syncState,
|
|
371
424
|
payload: SyncState.PayloadLocalPush.make({ newEvents: [e1_1, e1_2, e1_3] }),
|
|
372
425
|
});
|
|
373
426
|
expectAdvance(result);
|
|
374
427
|
expectEventArraysEqual(result.newSyncState.pending, [e1_0, e1_1, e1_2, e1_3]);
|
|
375
|
-
expect(result.newSyncState.upstreamHead).toMatchObject(EventSequenceNumber.ROOT);
|
|
428
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(EventSequenceNumber.Client.ROOT);
|
|
376
429
|
expect(result.newSyncState.localHead).toMatchObject(e1_3.seqNum);
|
|
377
430
|
expectEventArraysEqual(result.newEvents, [e1_1, e1_2, e1_3]);
|
|
378
431
|
expectEventArraysEqual(result.confirmedEvents, []);
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
it('
|
|
432
|
+
}));
|
|
433
|
+
// Leaders can choose to ignore client-only events while still returning them for broadcast.
|
|
434
|
+
// Ensure pending/local head only reflects events that must be pushed upstream.
|
|
435
|
+
Vitest.it.effect('keeps pending empty when pushing only client-only events that are being ignored', () => Effect.gen(function* () {
|
|
436
|
+
const syncState = new SyncState.SyncState({
|
|
437
|
+
pending: [],
|
|
438
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
439
|
+
localHead: EventSequenceNumber.Client.ROOT,
|
|
440
|
+
});
|
|
441
|
+
const result = yield* merge({
|
|
442
|
+
syncState,
|
|
443
|
+
payload: SyncState.PayloadLocalPush.make({ newEvents: [e0_1] }),
|
|
444
|
+
ignoreClientEvents: true,
|
|
445
|
+
});
|
|
446
|
+
expectAdvance(result);
|
|
447
|
+
expectEventArraysEqual(result.newSyncState.pending, []);
|
|
448
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(EventSequenceNumber.Client.ROOT);
|
|
449
|
+
expect(result.newSyncState.localHead).toMatchObject(EventSequenceNumber.Client.ROOT);
|
|
450
|
+
expectEventArraysEqual(result.newEvents, [e0_1]);
|
|
451
|
+
}));
|
|
452
|
+
Vitest.it.effect('appends only upstream-bound events to pending when ignoring client-only pushes', () => Effect.gen(function* () {
|
|
453
|
+
const syncState = new SyncState.SyncState({
|
|
454
|
+
pending: [],
|
|
455
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
456
|
+
localHead: EventSequenceNumber.Client.ROOT,
|
|
457
|
+
});
|
|
458
|
+
const result = yield* merge({
|
|
459
|
+
syncState,
|
|
460
|
+
payload: SyncState.PayloadLocalPush.make({ newEvents: [e0_1, e1_0] }),
|
|
461
|
+
ignoreClientEvents: true,
|
|
462
|
+
});
|
|
463
|
+
expectAdvance(result);
|
|
464
|
+
expectEventArraysEqual(result.newSyncState.pending, [e1_0]);
|
|
465
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(EventSequenceNumber.Client.ROOT);
|
|
466
|
+
expect(result.newSyncState.localHead).toMatchObject(e1_0.seqNum);
|
|
467
|
+
expectEventArraysEqual(result.newEvents, [e0_1, e1_0]);
|
|
468
|
+
}));
|
|
469
|
+
});
|
|
470
|
+
Vitest.describe('reject', () => {
|
|
471
|
+
Vitest.it.effect('should reject when new events are greater than pending events', () => Effect.gen(function* () {
|
|
383
472
|
const syncState = new SyncState.SyncState({
|
|
384
473
|
pending: [e1_0, e1_1],
|
|
385
|
-
upstreamHead: EventSequenceNumber.ROOT,
|
|
474
|
+
upstreamHead: EventSequenceNumber.Client.ROOT,
|
|
386
475
|
localHead: e1_1.seqNum,
|
|
387
476
|
});
|
|
388
|
-
const result = merge({
|
|
477
|
+
const result = yield* merge({
|
|
389
478
|
syncState,
|
|
390
479
|
payload: SyncState.PayloadLocalPush.make({ newEvents: [e1_1, e1_2] }),
|
|
391
480
|
});
|
|
392
481
|
expectReject(result);
|
|
393
482
|
expect(result.expectedMinimumId).toMatchObject(e1_2.seqNum);
|
|
394
|
-
});
|
|
483
|
+
}));
|
|
395
484
|
});
|
|
396
485
|
});
|
|
397
486
|
});
|
|
@@ -406,13 +495,13 @@ const expectEventArraysEqual = (actual, expected) => {
|
|
|
406
495
|
expect(event.args).toStrictEqual(expected[i].args);
|
|
407
496
|
});
|
|
408
497
|
};
|
|
409
|
-
|
|
498
|
+
const expectAdvance = (result) => {
|
|
410
499
|
expect(result._tag).toBe('advance');
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
expect(result._tag, `Expected rebase, got ${result}`).toBe('rebase');
|
|
414
|
-
}
|
|
415
|
-
|
|
500
|
+
};
|
|
501
|
+
const expectRebase = (result) => {
|
|
502
|
+
expect(result._tag, `Expected rebase, got ${result._tag}`).toBe('rebase');
|
|
503
|
+
};
|
|
504
|
+
const expectReject = (result) => {
|
|
416
505
|
expect(result._tag).toBe('reject');
|
|
417
|
-
}
|
|
506
|
+
};
|
|
418
507
|
//# sourceMappingURL=syncstate.test.js.map
|