@livestore/common 0.3.0-dev.5 → 0.3.0-dev.50
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/__tests__/fixture.d.ts +83 -221
- package/dist/__tests__/fixture.d.ts.map +1 -1
- package/dist/__tests__/fixture.js +33 -11
- package/dist/__tests__/fixture.js.map +1 -1
- package/dist/adapter-types.d.ts +120 -64
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +39 -8
- package/dist/adapter-types.js.map +1 -1
- package/dist/bounded-collections.d.ts.map +1 -1
- package/dist/debug-info.d.ts +1 -1
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/debug-info.js +1 -0
- package/dist/debug-info.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +390 -0
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-client-session.js +97 -0
- package/dist/devtools/devtools-messages-client-session.js.map +1 -0
- package/dist/devtools/devtools-messages-common.d.ts +68 -0
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-common.js +60 -0
- package/dist/devtools/devtools-messages-common.js.map +1 -0
- package/dist/devtools/devtools-messages-leader.d.ts +394 -0
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-leader.js +147 -0
- package/dist/devtools/devtools-messages-leader.js.map +1 -0
- package/dist/devtools/devtools-messages.d.ts +3 -580
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -174
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +32 -0
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
- package/dist/devtools/devtools-sessioninfo.js +36 -0
- package/dist/devtools/devtools-sessioninfo.js.map +1 -0
- package/dist/devtools/mod.d.ts +55 -0
- package/dist/devtools/mod.d.ts.map +1 -0
- package/dist/devtools/mod.js +33 -0
- package/dist/devtools/mod.js.map +1 -0
- package/dist/index.d.ts +7 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +62 -0
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
- package/dist/leader-thread/LeaderSyncProcessor.js +595 -0
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
- package/dist/leader-thread/connection.d.ts +34 -6
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +22 -7
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +27 -0
- package/dist/leader-thread/eventlog.d.ts.map +1 -0
- package/dist/leader-thread/eventlog.js +119 -0
- package/dist/leader-thread/eventlog.js.map +1 -0
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +155 -80
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +23 -11
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +72 -47
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +16 -0
- package/dist/leader-thread/materialize-event.d.ts.map +1 -0
- package/dist/leader-thread/materialize-event.js +109 -0
- package/dist/leader-thread/materialize-event.js.map +1 -0
- package/dist/leader-thread/mod.d.ts +1 -1
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +1 -1
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +4 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +33 -31
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -5
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -4
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +87 -40
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +1 -3
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/make-client-session.d.ts +23 -0
- package/dist/make-client-session.d.ts.map +1 -0
- package/dist/make-client-session.js +57 -0
- package/dist/make-client-session.js.map +1 -0
- package/dist/materializer-helper.d.ts +23 -0
- package/dist/materializer-helper.d.ts.map +1 -0
- package/dist/materializer-helper.js +86 -0
- package/dist/materializer-helper.js.map +1 -0
- package/dist/otel.d.ts +2 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +5 -0
- package/dist/otel.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +14 -0
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -0
- package/dist/rematerialize-from-eventlog.js +64 -0
- package/dist/rematerialize-from-eventlog.js.map +1 -0
- package/dist/schema/EventDef.d.ts +146 -0
- package/dist/schema/EventDef.d.ts.map +1 -0
- package/dist/schema/EventDef.js +58 -0
- package/dist/schema/EventDef.js.map +1 -0
- package/dist/schema/EventId.d.ts +43 -25
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +56 -18
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/EventId.test.d.ts +2 -0
- package/dist/schema/EventId.test.d.ts.map +1 -0
- package/dist/schema/EventId.test.js +11 -0
- package/dist/schema/EventId.test.js.map +1 -0
- package/dist/schema/EventNumber.d.ts +57 -0
- package/dist/schema/EventNumber.d.ts.map +1 -0
- package/dist/schema/EventNumber.js +82 -0
- package/dist/schema/EventNumber.js.map +1 -0
- package/dist/schema/EventNumber.test.d.ts +2 -0
- package/dist/schema/EventNumber.test.d.ts.map +1 -0
- package/dist/schema/EventNumber.test.js +11 -0
- package/dist/schema/EventNumber.test.js.map +1 -0
- package/dist/schema/EventSequenceNumber.d.ts +57 -0
- package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber.js +82 -0
- package/dist/schema/EventSequenceNumber.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
- package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +11 -0
- package/dist/schema/EventSequenceNumber.test.js.map +1 -0
- package/dist/schema/LiveStoreEvent.d.ts +257 -0
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent.js +117 -0
- package/dist/schema/LiveStoreEvent.js.map +1 -0
- package/dist/schema/events.d.ts +2 -0
- package/dist/schema/events.d.ts.map +1 -0
- package/dist/schema/events.js +2 -0
- package/dist/schema/events.js.map +1 -0
- package/dist/schema/mod.d.ts +8 -6
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +8 -6
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +50 -32
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +36 -43
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/mod.d.ts +3 -0
- package/dist/schema/state/mod.d.ts.map +1 -0
- package/dist/schema/state/mod.js +3 -0
- package/dist/schema/state/mod.js.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.d.ts +223 -0
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.js +170 -0
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.test.d.ts +2 -0
- package/dist/schema/state/sqlite/client-document-def.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.test.js +201 -0
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +69 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +71 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +3 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.js +12 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +90 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +87 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts +2 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +29 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +90 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +41 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/hash.d.ts +2 -0
- package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/hash.js +14 -0
- package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/mod.d.ts +3 -0
- package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/mod.js +3 -0
- package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -0
- package/dist/schema/state/sqlite/mod.d.ts +17 -0
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/mod.js +41 -0
- package/dist/schema/state/sqlite/mod.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts +294 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.js +6 -0
- package/dist/schema/state/sqlite/query-builder/api.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +7 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.js +190 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +7 -0
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.js +286 -0
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +87 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.js +563 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -0
- package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.d.ts +7 -0
- package/dist/schema/state/sqlite/query-builder/mod.d.ts.map +1 -0
- package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.js +7 -0
- package/dist/schema/state/sqlite/query-builder/mod.js.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -0
- package/dist/schema/{schema-helpers.js → state/sqlite/schema-helpers.js} +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables.d.ts +574 -0
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables.js +88 -0
- package/dist/schema/state/sqlite/system-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +84 -0
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -0
- package/dist/schema/state/sqlite/table-def.js +36 -0
- package/dist/schema/state/sqlite/table-def.js.map +1 -0
- package/dist/schema-management/common.d.ts +7 -7
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/common.js.map +1 -1
- package/dist/schema-management/migrations.d.ts +6 -6
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +27 -18
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +8 -0
- package/dist/schema-management/validate-schema.d.ts.map +1 -0
- package/dist/schema-management/validate-schema.js +39 -0
- package/dist/schema-management/validate-schema.js.map +1 -0
- package/dist/sql-queries/misc.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.d.ts +1 -1
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts +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 +2 -1
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sql-queries/types.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +66 -0
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
- package/dist/sync/ClientSessionSyncProcessor.js +209 -0
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +38 -35
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +21 -21
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +11 -11
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +9 -7
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +10 -5
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts +0 -2
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +16 -14
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +10 -8
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +18 -10
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +39 -34
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +77 -77
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +38 -28
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
- package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +81 -38
- package/dist/sync/next/test/event-fixtures.js.map +1 -0
- package/dist/sync/next/test/mod.d.ts +1 -1
- package/dist/sync/next/test/mod.d.ts.map +1 -1
- package/dist/sync/next/test/mod.js +1 -1
- package/dist/sync/next/test/mod.js.map +1 -1
- package/dist/sync/sync.d.ts +60 -25
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +10 -6
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +213 -82
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +337 -139
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +310 -286
- package/dist/sync/syncstate.test.js.map +1 -1
- 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 -4
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +13 -6
- package/src/__tests__/fixture.ts +36 -15
- package/src/adapter-types.ts +107 -68
- package/src/debug-info.ts +1 -0
- package/src/devtools/devtools-messages-client-session.ts +142 -0
- package/src/devtools/devtools-messages-common.ts +115 -0
- package/src/devtools/devtools-messages-leader.ts +191 -0
- package/src/devtools/devtools-messages.ts +3 -246
- package/src/devtools/devtools-sessioninfo.ts +101 -0
- package/src/devtools/mod.ts +59 -0
- package/src/index.ts +7 -15
- package/src/leader-thread/LeaderSyncProcessor.ts +940 -0
- package/src/leader-thread/connection.ts +54 -9
- package/src/leader-thread/eventlog.ts +199 -0
- package/src/leader-thread/leader-worker-devtools.ts +227 -104
- package/src/leader-thread/make-leader-thread-layer.ts +128 -78
- package/src/leader-thread/materialize-event.ts +173 -0
- package/src/leader-thread/mod.ts +1 -1
- package/src/leader-thread/recreate-db.ts +38 -39
- package/src/leader-thread/shutdown-channel.ts +2 -4
- package/src/leader-thread/types.ts +96 -50
- package/src/make-client-session.ts +136 -0
- package/src/materializer-helper.ts +138 -0
- package/src/otel.ts +8 -0
- package/src/rematerialize-from-eventlog.ts +117 -0
- package/src/schema/EventDef.ts +227 -0
- package/src/schema/EventSequenceNumber.test.ts +12 -0
- package/src/schema/EventSequenceNumber.ts +121 -0
- package/src/schema/LiveStoreEvent.ts +240 -0
- package/src/schema/events.ts +1 -0
- package/src/schema/mod.ts +8 -6
- package/src/schema/schema.ts +88 -84
- package/src/schema/state/mod.ts +2 -0
- package/src/schema/state/sqlite/client-document-def.test.ts +238 -0
- package/src/schema/state/sqlite/client-document-def.ts +444 -0
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +142 -0
- package/src/schema/state/sqlite/db-schema/ast/validate.ts +13 -0
- package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -0
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +242 -0
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +222 -0
- package/src/schema/state/sqlite/db-schema/hash.ts +14 -0
- package/src/schema/state/sqlite/db-schema/mod.ts +2 -0
- package/src/schema/state/sqlite/mod.ts +73 -0
- package/src/schema/state/sqlite/query-builder/api.ts +440 -0
- package/src/schema/state/sqlite/query-builder/astToSql.ts +232 -0
- package/src/schema/state/sqlite/query-builder/impl.test.ts +617 -0
- package/src/schema/state/sqlite/query-builder/impl.ts +351 -0
- package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +7 -0
- package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
- package/src/schema/state/sqlite/system-tables.ts +117 -0
- package/src/schema/state/sqlite/table-def.ts +197 -0
- package/src/schema-management/common.ts +7 -7
- package/src/schema-management/migrations.ts +37 -31
- package/src/schema-management/validate-schema.ts +61 -0
- package/src/sql-queries/sql-queries.ts +1 -1
- package/src/sql-queries/sql-query-builder.ts +1 -2
- package/src/sql-queries/types.ts +3 -1
- package/src/sync/ClientSessionSyncProcessor.ts +332 -0
- package/src/sync/index.ts +1 -1
- package/src/sync/next/compact-events.ts +38 -35
- package/src/sync/next/facts.ts +43 -41
- package/src/sync/next/history-dag-common.ts +17 -10
- package/src/sync/next/history-dag.ts +16 -17
- package/src/sync/next/rebase-events.ts +29 -17
- package/src/sync/next/test/compact-events.calculator.test.ts +46 -46
- package/src/sync/next/test/compact-events.test.ts +79 -79
- package/src/sync/next/test/event-fixtures.ts +226 -0
- package/src/sync/next/test/mod.ts +1 -1
- package/src/sync/sync.ts +60 -24
- package/src/sync/syncstate.test.ts +347 -320
- package/src/sync/syncstate.ts +422 -230
- package/src/sync/validate-push-payload.ts +6 -6
- package/src/version.ts +2 -2
- package/dist/derived-mutations.d.ts +0 -109
- package/dist/derived-mutations.d.ts.map +0 -1
- package/dist/derived-mutations.js +0 -54
- package/dist/derived-mutations.js.map +0 -1
- package/dist/derived-mutations.test.d.ts +0 -2
- package/dist/derived-mutations.test.d.ts.map +0 -1
- package/dist/derived-mutations.test.js +0 -93
- package/dist/derived-mutations.test.js.map +0 -1
- package/dist/devtools/devtools-bridge.d.ts +0 -13
- package/dist/devtools/devtools-bridge.d.ts.map +0 -1
- package/dist/devtools/devtools-bridge.js +0 -2
- package/dist/devtools/devtools-bridge.js.map +0 -1
- package/dist/devtools/devtools-window-message.d.ts +0 -29
- package/dist/devtools/devtools-window-message.d.ts.map +0 -1
- package/dist/devtools/devtools-window-message.js +0 -33
- package/dist/devtools/devtools-window-message.js.map +0 -1
- package/dist/devtools/index.d.ts +0 -42
- package/dist/devtools/index.d.ts.map +0 -1
- package/dist/devtools/index.js +0 -48
- package/dist/devtools/index.js.map +0 -1
- package/dist/init-singleton-tables.d.ts +0 -4
- package/dist/init-singleton-tables.d.ts.map +0 -1
- package/dist/init-singleton-tables.js +0 -16
- package/dist/init-singleton-tables.js.map +0 -1
- package/dist/leader-thread/apply-mutation.d.ts +0 -8
- package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
- package/dist/leader-thread/apply-mutation.js +0 -95
- package/dist/leader-thread/apply-mutation.js.map +0 -1
- package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
- package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
- package/dist/leader-thread/leader-sync-processor.js +0 -425
- package/dist/leader-thread/leader-sync-processor.js.map +0 -1
- package/dist/leader-thread/mutationlog.d.ts +0 -10
- package/dist/leader-thread/mutationlog.d.ts.map +0 -1
- package/dist/leader-thread/mutationlog.js +0 -28
- package/dist/leader-thread/mutationlog.js.map +0 -1
- package/dist/leader-thread/pull-queue-set.d.ts +0 -7
- package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
- package/dist/leader-thread/pull-queue-set.js +0 -39
- package/dist/leader-thread/pull-queue-set.js.map +0 -1
- package/dist/mutation.d.ts +0 -13
- package/dist/mutation.d.ts.map +0 -1
- package/dist/mutation.js +0 -57
- package/dist/mutation.js.map +0 -1
- package/dist/query-builder/api.d.ts +0 -190
- package/dist/query-builder/api.d.ts.map +0 -1
- package/dist/query-builder/api.js +0 -8
- package/dist/query-builder/api.js.map +0 -1
- package/dist/query-builder/impl.d.ts +0 -12
- package/dist/query-builder/impl.d.ts.map +0 -1
- package/dist/query-builder/impl.js +0 -244
- package/dist/query-builder/impl.js.map +0 -1
- package/dist/query-builder/impl.test.d.ts +0 -2
- package/dist/query-builder/impl.test.d.ts.map +0 -1
- package/dist/query-builder/impl.test.js +0 -212
- package/dist/query-builder/impl.test.js.map +0 -1
- package/dist/query-builder/mod.d.ts.map +0 -1
- package/dist/query-builder/mod.js.map +0 -1
- package/dist/query-info.d.ts +0 -38
- package/dist/query-info.d.ts.map +0 -1
- package/dist/query-info.js +0 -7
- package/dist/query-info.js.map +0 -1
- package/dist/rehydrate-from-mutationlog.d.ts +0 -14
- package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
- package/dist/rehydrate-from-mutationlog.js +0 -72
- package/dist/rehydrate-from-mutationlog.js.map +0 -1
- package/dist/schema/MutationEvent.d.ts +0 -166
- package/dist/schema/MutationEvent.d.ts.map +0 -1
- package/dist/schema/MutationEvent.js +0 -72
- package/dist/schema/MutationEvent.js.map +0 -1
- package/dist/schema/mutations.d.ts +0 -107
- package/dist/schema/mutations.d.ts.map +0 -1
- package/dist/schema/mutations.js +0 -42
- package/dist/schema/mutations.js.map +0 -1
- package/dist/schema/schema-helpers.d.ts.map +0 -1
- package/dist/schema/schema-helpers.js.map +0 -1
- package/dist/schema/system-tables.d.ts +0 -399
- package/dist/schema/system-tables.d.ts.map +0 -1
- package/dist/schema/system-tables.js +0 -58
- package/dist/schema/system-tables.js.map +0 -1
- package/dist/schema/table-def.d.ts +0 -156
- package/dist/schema/table-def.d.ts.map +0 -1
- package/dist/schema/table-def.js +0 -79
- package/dist/schema/table-def.js.map +0 -1
- package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
- package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
- package/dist/schema-management/validate-mutation-defs.js +0 -39
- package/dist/schema-management/validate-mutation-defs.js.map +0 -1
- package/dist/sync/client-session-sync-processor.d.ts +0 -45
- package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
- package/dist/sync/client-session-sync-processor.js +0 -131
- package/dist/sync/client-session-sync-processor.js.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
- package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
- package/src/derived-mutations.test.ts +0 -101
- package/src/derived-mutations.ts +0 -166
- package/src/devtools/devtools-bridge.ts +0 -14
- package/src/devtools/devtools-window-message.ts +0 -27
- package/src/devtools/index.ts +0 -48
- package/src/init-singleton-tables.ts +0 -24
- package/src/leader-thread/apply-mutation.ts +0 -143
- package/src/leader-thread/leader-sync-processor.ts +0 -670
- package/src/leader-thread/mutationlog.ts +0 -46
- package/src/leader-thread/pull-queue-set.ts +0 -58
- package/src/mutation.ts +0 -81
- package/src/query-builder/api.ts +0 -289
- package/src/query-builder/impl.test.ts +0 -239
- package/src/query-builder/impl.ts +0 -285
- package/src/query-info.ts +0 -78
- package/src/rehydrate-from-mutationlog.ts +0 -127
- package/src/schema/EventId.ts +0 -60
- package/src/schema/MutationEvent.ts +0 -180
- package/src/schema/mutations.ts +0 -192
- package/src/schema/system-tables.ts +0 -104
- package/src/schema/table-def.ts +0 -343
- package/src/schema-management/validate-mutation-defs.ts +0 -63
- package/src/sync/client-session-sync-processor.ts +0 -207
- package/src/sync/next/test/mutation-fixtures.ts +0 -224
- package/tsconfig.json +0 -11
- /package/dist/schema/{schema-helpers.d.ts → state/sqlite/schema-helpers.d.ts} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,146 @@
|
|
1
|
+
import type { SingleOrReadonlyArray } from '@livestore/utils';
|
2
|
+
import { Schema } from '@livestore/utils/effect';
|
3
|
+
import type { BindValues } from '../sql-queries/sql-queries.js';
|
4
|
+
import type { ParamsObject } from '../util.js';
|
5
|
+
import type { QueryBuilder } from './state/sqlite/query-builder/mod.js';
|
6
|
+
export type EventDefMap = {
|
7
|
+
map: Map<string | 'livestore.RawSql', EventDef.Any>;
|
8
|
+
};
|
9
|
+
export type EventDefRecord = {
|
10
|
+
'livestore.RawSql': RawSqlEvent;
|
11
|
+
[name: string]: EventDef.Any;
|
12
|
+
};
|
13
|
+
export type EventDef<TName extends string, TType, TEncoded = TType, TDerived extends boolean = false> = {
|
14
|
+
name: TName;
|
15
|
+
schema: Schema.Schema<TType, TEncoded>;
|
16
|
+
options: {
|
17
|
+
/**
|
18
|
+
* When set to true, the mutation won't be synced across clients but
|
19
|
+
*/
|
20
|
+
clientOnly: boolean;
|
21
|
+
/** Warning: This feature is not fully implemented yet */
|
22
|
+
facts: FactsCallback<TType> | undefined;
|
23
|
+
derived: TDerived;
|
24
|
+
};
|
25
|
+
/** Helper function to construct a partial mutation event */
|
26
|
+
(args: TType): {
|
27
|
+
name: TName;
|
28
|
+
args: TType;
|
29
|
+
};
|
30
|
+
readonly Event: {
|
31
|
+
name: TName;
|
32
|
+
args: TType;
|
33
|
+
};
|
34
|
+
};
|
35
|
+
export type FactsCallback<TTo> = (args: TTo, currentFacts: EventDefFacts) => {
|
36
|
+
modify: {
|
37
|
+
set: Iterable<EventDefFactInput>;
|
38
|
+
unset: Iterable<EventDefFactInput>;
|
39
|
+
};
|
40
|
+
require: Iterable<EventDefFactInput>;
|
41
|
+
};
|
42
|
+
export declare namespace EventDef {
|
43
|
+
type Any = EventDef<string, any, any, boolean>;
|
44
|
+
type AnyWithoutFn = Pick<Any, 'name' | 'schema' | 'options'>;
|
45
|
+
}
|
46
|
+
export type EventDefKey = string;
|
47
|
+
export type EventDefFact = string;
|
48
|
+
export type EventDefFacts = ReadonlyMap<string, any>;
|
49
|
+
export type EventDefFactsGroup = {
|
50
|
+
modifySet: EventDefFacts;
|
51
|
+
modifyUnset: EventDefFacts;
|
52
|
+
/**
|
53
|
+
* Events on independent "dependency" branches are commutative which can facilitate more prioritized syncing
|
54
|
+
*/
|
55
|
+
depRequire: EventDefFacts;
|
56
|
+
depRead: EventDefFacts;
|
57
|
+
};
|
58
|
+
export type EventDefFactsSnapshot = Map<string, any>;
|
59
|
+
export type EventDefFactInput = string | readonly [string, any];
|
60
|
+
export declare const defineFacts: <TRecord extends Record<string, EventDefFactInput | ((...args: any[]) => EventDefFactInput)>>(record: TRecord) => TRecord;
|
61
|
+
export type DefineEventOptions<TTo, TDerived extends boolean = false> = {
|
62
|
+
/** Warning: This feature is not fully implemented yet */
|
63
|
+
facts?: (args: TTo, currentFacts: EventDefFacts) => {
|
64
|
+
modify?: {
|
65
|
+
set?: Iterable<EventDefFactInput>;
|
66
|
+
unset?: Iterable<EventDefFactInput>;
|
67
|
+
};
|
68
|
+
/**
|
69
|
+
* Two purposes: constrain history and constrain compaction
|
70
|
+
*/
|
71
|
+
require?: Iterable<EventDefFactInput>;
|
72
|
+
};
|
73
|
+
/**
|
74
|
+
* When set to true, the event won't be synced over the network
|
75
|
+
*/
|
76
|
+
clientOnly?: boolean;
|
77
|
+
derived?: TDerived;
|
78
|
+
};
|
79
|
+
export declare const defineEvent: <TName extends string, TType, TEncoded = TType, TDerived extends boolean = false>(args: {
|
80
|
+
name: TName;
|
81
|
+
schema: Schema.Schema<TType, TEncoded>;
|
82
|
+
} & DefineEventOptions<TType, TDerived>) => EventDef<TName, TType, TEncoded, TDerived>;
|
83
|
+
export declare const synced: <TName extends string, TType, TEncoded = TType>(args: {
|
84
|
+
name: TName;
|
85
|
+
schema: Schema.Schema<TType, TEncoded>;
|
86
|
+
} & Omit<DefineEventOptions<TType, false>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
|
87
|
+
export declare const clientOnly: <TName extends string, TType, TEncoded = TType>(args: {
|
88
|
+
name: TName;
|
89
|
+
schema: Schema.Schema<TType, TEncoded>;
|
90
|
+
} & Omit<DefineEventOptions<TType, false>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
|
91
|
+
export type MaterializerResult = {
|
92
|
+
sql: string;
|
93
|
+
bindValues: BindValues;
|
94
|
+
writeTables?: ReadonlySet<string>;
|
95
|
+
} | QueryBuilder.Any | string;
|
96
|
+
export type MaterializerContextQuery = {
|
97
|
+
(args: {
|
98
|
+
query: string;
|
99
|
+
bindValues: ParamsObject;
|
100
|
+
}): ReadonlyArray<unknown>;
|
101
|
+
<TResult>(qb: QueryBuilder<TResult, any, any>): TResult;
|
102
|
+
};
|
103
|
+
export type Materializer<TEventDef extends EventDef.AnyWithoutFn = EventDef.AnyWithoutFn> = (event: TEventDef['schema']['Type'], context: {
|
104
|
+
currentFacts: EventDefFacts;
|
105
|
+
eventDef: TEventDef;
|
106
|
+
/** Can be used to query the current state */
|
107
|
+
query: MaterializerContextQuery;
|
108
|
+
}) => SingleOrReadonlyArray<MaterializerResult>;
|
109
|
+
export declare const defineMaterializer: <TEventDef extends EventDef.AnyWithoutFn>(eventDef: TEventDef, materializer: Materializer<TEventDef>) => Materializer<TEventDef>;
|
110
|
+
export declare const materializers: <TInputRecord extends Record<string, EventDef.AnyWithoutFn>>(eventDefRecord: TInputRecord, handlers: { [TEventName in TInputRecord[keyof TInputRecord]["name"] as Extract<TInputRecord[keyof TInputRecord], {
|
111
|
+
name: TEventName;
|
112
|
+
}>["options"]["derived"] extends true ? never : TEventName]: Materializer<Extract<TInputRecord[keyof TInputRecord], {
|
113
|
+
name: TEventName;
|
114
|
+
}>>; }) => { [TEventName in TInputRecord[keyof TInputRecord]["name"] as Extract<TInputRecord[keyof TInputRecord], {
|
115
|
+
name: TEventName;
|
116
|
+
}>["options"]["derived"] extends true ? never : TEventName]: Materializer<Extract<TInputRecord[keyof TInputRecord], {
|
117
|
+
name: TEventName;
|
118
|
+
}>>; };
|
119
|
+
export declare const rawSqlEvent: EventDef<"livestore.RawSql", {
|
120
|
+
readonly bindValues?: {
|
121
|
+
readonly [x: string]: any;
|
122
|
+
} | undefined;
|
123
|
+
readonly sql: string;
|
124
|
+
readonly writeTables?: ReadonlySet<string> | undefined;
|
125
|
+
}, {
|
126
|
+
readonly sql: string;
|
127
|
+
readonly bindValues?: {
|
128
|
+
readonly [x: string]: any;
|
129
|
+
} | undefined;
|
130
|
+
readonly writeTables?: readonly string[] | undefined;
|
131
|
+
}, true>;
|
132
|
+
export declare const rawSqlMaterializer: Materializer<EventDef<"livestore.RawSql", {
|
133
|
+
readonly bindValues?: {
|
134
|
+
readonly [x: string]: any;
|
135
|
+
} | undefined;
|
136
|
+
readonly sql: string;
|
137
|
+
readonly writeTables?: ReadonlySet<string> | undefined;
|
138
|
+
}, {
|
139
|
+
readonly sql: string;
|
140
|
+
readonly bindValues?: {
|
141
|
+
readonly [x: string]: any;
|
142
|
+
} | undefined;
|
143
|
+
readonly writeTables?: readonly string[] | undefined;
|
144
|
+
}, true>>;
|
145
|
+
export type RawSqlEvent = typeof rawSqlEvent;
|
146
|
+
//# sourceMappingURL=EventDef.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventDef.d.ts","sourceRoot":"","sources":["../../src/schema/EventDef.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
2
|
+
import { Schema } from '@livestore/utils/effect';
|
3
|
+
export const defineFacts = (record) => record;
|
4
|
+
export const defineEvent = (args) => {
|
5
|
+
const { name, schema, ...options } = args;
|
6
|
+
const makePartialEvent = (args) => {
|
7
|
+
const res = Schema.validateEither(schema)(args);
|
8
|
+
if (res._tag === 'Left') {
|
9
|
+
shouldNeverHappen(`Invalid event args for event '${name}':`, res.left.message, '\n');
|
10
|
+
}
|
11
|
+
return { name: name, args };
|
12
|
+
};
|
13
|
+
Object.defineProperty(makePartialEvent, 'name', { value: name });
|
14
|
+
Object.defineProperty(makePartialEvent, 'schema', { value: schema });
|
15
|
+
Object.defineProperty(makePartialEvent, 'options', {
|
16
|
+
value: {
|
17
|
+
clientOnly: options?.clientOnly ?? false,
|
18
|
+
facts: options?.facts
|
19
|
+
? (args, currentFacts) => {
|
20
|
+
const res = options.facts(args, currentFacts);
|
21
|
+
return {
|
22
|
+
modify: {
|
23
|
+
set: res.modify?.set ? new Set(res.modify.set) : new Set(),
|
24
|
+
unset: res.modify?.unset ? new Set(res.modify.unset) : new Set(),
|
25
|
+
},
|
26
|
+
require: res.require ? new Set(res.require) : new Set(),
|
27
|
+
};
|
28
|
+
}
|
29
|
+
: undefined,
|
30
|
+
derived: options?.derived ?? false,
|
31
|
+
},
|
32
|
+
});
|
33
|
+
return makePartialEvent;
|
34
|
+
};
|
35
|
+
export const synced = (args) => defineEvent({ ...args, clientOnly: false });
|
36
|
+
export const clientOnly = (args) => defineEvent({ ...args, clientOnly: true });
|
37
|
+
export const defineMaterializer = (eventDef, materializer) => {
|
38
|
+
return materializer;
|
39
|
+
};
|
40
|
+
export const materializers = (eventDefRecord, handlers) => {
|
41
|
+
return handlers;
|
42
|
+
};
|
43
|
+
export const rawSqlEvent = defineEvent({
|
44
|
+
name: 'livestore.RawSql',
|
45
|
+
schema: Schema.Struct({
|
46
|
+
sql: Schema.String,
|
47
|
+
bindValues: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
|
48
|
+
writeTables: Schema.optional(Schema.ReadonlySet(Schema.String)),
|
49
|
+
}),
|
50
|
+
clientOnly: true,
|
51
|
+
derived: true,
|
52
|
+
});
|
53
|
+
export const rawSqlMaterializer = defineMaterializer(rawSqlEvent, ({ sql, bindValues, writeTables }) => ({
|
54
|
+
sql,
|
55
|
+
bindValues: bindValues ?? {},
|
56
|
+
writeTables,
|
57
|
+
}));
|
58
|
+
//# sourceMappingURL=EventDef.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventDef.js","sourceRoot":"","sources":["../../src/schema/EventDef.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/EventId.d.ts
CHANGED
@@ -1,39 +1,57 @@
|
|
1
1
|
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
-
export type
|
3
|
-
export declare const
|
4
|
-
export declare const
|
5
|
-
export type
|
6
|
-
export declare const
|
7
|
-
export declare const
|
8
|
-
export declare const
|
2
|
+
export type ClientEventNumber = Brand.Branded<number, 'ClientEventNumber'>;
|
3
|
+
export declare const localEventNumber: Brand.Brand.Constructor<ClientEventNumber>;
|
4
|
+
export declare const ClientEventNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
|
5
|
+
export type GlobalEventNumber = Brand.Branded<number, 'GlobalEventNumber'>;
|
6
|
+
export declare const globalEventNumber: Brand.Brand.Constructor<GlobalEventNumber>;
|
7
|
+
export declare const GlobalEventNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
|
8
|
+
export declare const clientDefault: ClientEventNumber;
|
9
9
|
/**
|
10
10
|
* LiveStore event id value consisting of a globally unique event sequence number
|
11
|
-
* and a
|
11
|
+
* and a client sequence number.
|
12
12
|
*
|
13
|
-
* The
|
13
|
+
* The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
|
14
14
|
*/
|
15
|
-
export type
|
16
|
-
global:
|
17
|
-
|
15
|
+
export type EventNumber = {
|
16
|
+
global: GlobalEventNumber;
|
17
|
+
client: ClientEventNumber;
|
18
18
|
};
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
/**
|
20
|
+
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
21
|
+
*/
|
22
|
+
export declare const EventNumber: Schema.Struct<{
|
23
|
+
global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
|
24
|
+
/** Only increments for clientOnly events */
|
25
|
+
client: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
|
22
26
|
}>;
|
23
27
|
/**
|
24
28
|
* Compare two event ids i.e. checks if the first event id is less than the second.
|
25
29
|
*/
|
26
|
-
export declare const compare: (a:
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
export declare const compare: (a: EventNumber, b: EventNumber) => number;
|
31
|
+
/**
|
32
|
+
* Convert an event id to a string representation.
|
33
|
+
*/
|
34
|
+
export declare const toString: (id: EventNumber) => string;
|
35
|
+
/**
|
36
|
+
* Convert a string representation of an event id to an event id.
|
37
|
+
*/
|
38
|
+
export declare const fromString: (str: string) => EventNumber;
|
39
|
+
export declare const isEqual: (a: EventNumber, b: EventNumber) => boolean;
|
40
|
+
export type EventNumberPair = {
|
41
|
+
id: EventNumber;
|
42
|
+
parentId: EventNumber;
|
31
43
|
};
|
32
44
|
export declare const ROOT: {
|
33
|
-
global:
|
34
|
-
|
45
|
+
global: GlobalEventNumber;
|
46
|
+
client: ClientEventNumber;
|
47
|
+
};
|
48
|
+
export declare const isGreaterThan: (a: EventNumber, b: EventNumber) => boolean;
|
49
|
+
export declare const isGreaterThanOrEqual: (a: EventNumber, b: EventNumber) => boolean;
|
50
|
+
export declare const max: (a: EventNumber, b: EventNumber) => EventNumber;
|
51
|
+
export declare const diff: (a: EventNumber, b: EventNumber) => {
|
52
|
+
global: number;
|
53
|
+
client: number;
|
35
54
|
};
|
36
|
-
export declare const
|
37
|
-
export declare const
|
38
|
-
export declare const nextPair: (id: EventId, isLocal: boolean) => EventIdPair;
|
55
|
+
export declare const make: (id: EventNumber | typeof EventNumber.Encoded) => EventNumber;
|
56
|
+
export declare const nextPair: (id: EventNumber, isLocal: boolean) => EventNumberPair;
|
39
57
|
//# sourceMappingURL=EventId.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,
|
1
|
+
{"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,gBAAgB,4CAAqC,CAAA;AAClE,eAAO,MAAM,iBAAiB,8EAAiD,CAAA;AAE/E,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,iBAAiB,4CAAqC,CAAA;AACnE,eAAO,MAAM,iBAAiB,8EAAkD,CAAA;AAEhF,eAAO,MAAM,aAAa,EAAe,iBAAiB,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAOlF;;GAEG;AACH,eAAO,MAAM,WAAW;;IAEtB,4CAA4C;;EAQI,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,WAKrD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,WAAuE,CAAA;AAE/G;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,WAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAAmD,CAAA;AAEzG,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAA;AAExE,eAAO,MAAM,IAAI;YAAyB,iBAAiB;;CAA+C,CAAA;AAE1G,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAE3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAElE,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,gBAEjD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW;;;CAKlD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,WAAW,GAAG,OAAO,WAAW,CAAC,OAAO,KAAG,WAEnE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,EAAE,SAAS,OAAO,KAAG,eAU5D,CAAA"}
|
package/dist/schema/EventId.js
CHANGED
@@ -1,13 +1,25 @@
|
|
1
1
|
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
-
export const
|
3
|
-
export const
|
4
|
-
export const
|
5
|
-
export const
|
6
|
-
export const
|
7
|
-
export const
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
export const localEventNumber = Brand.nominal();
|
3
|
+
export const ClientEventNumber = Schema.fromBrand(localEventNumber)(Schema.Int);
|
4
|
+
export const globalEventNumber = Brand.nominal();
|
5
|
+
export const GlobalEventNumber = Schema.fromBrand(globalEventNumber)(Schema.Int);
|
6
|
+
export const clientDefault = 0;
|
7
|
+
// export const EventSequenceNumber = Schema.Struct({})
|
8
|
+
// export const EventNumber = Schema.Struct({})
|
9
|
+
// export const ClientEventNumber = Schema.Struct({})
|
10
|
+
// export const GlobalEventNumber = Schema.Struct({})
|
11
|
+
/**
|
12
|
+
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
13
|
+
*/
|
14
|
+
export const EventNumber = Schema.Struct({
|
15
|
+
global: GlobalEventNumber,
|
16
|
+
/** Only increments for clientOnly events */
|
17
|
+
client: ClientEventNumber,
|
18
|
+
// TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
|
19
|
+
// TODO: actually add this field
|
20
|
+
// Client only
|
21
|
+
// generation: Schema.Number.pipe(Schema.optional),
|
22
|
+
}).annotations({ title: 'LiveStore.EventNumber' });
|
11
23
|
/**
|
12
24
|
* Compare two event ids i.e. checks if the first event id is less than the second.
|
13
25
|
*/
|
@@ -15,24 +27,50 @@ export const compare = (a, b) => {
|
|
15
27
|
if (a.global !== b.global) {
|
16
28
|
return a.global - b.global;
|
17
29
|
}
|
18
|
-
return a.
|
30
|
+
return a.client - b.client;
|
19
31
|
};
|
20
|
-
|
21
|
-
|
32
|
+
/**
|
33
|
+
* Convert an event id to a string representation.
|
34
|
+
*/
|
35
|
+
export const toString = (id) => (id.client === 0 ? `e${id.global}` : `e${id.global}+${id.client}`);
|
36
|
+
/**
|
37
|
+
* Convert a string representation of an event id to an event id.
|
38
|
+
*/
|
39
|
+
export const fromString = (str) => {
|
40
|
+
const [global, client] = str.slice(1, -1).split(',').map(Number);
|
41
|
+
if (global === undefined || client === undefined) {
|
42
|
+
throw new Error('Invalid event id string');
|
43
|
+
}
|
44
|
+
return { global, client };
|
45
|
+
};
|
46
|
+
export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
|
47
|
+
export const ROOT = { global: 0, client: clientDefault };
|
22
48
|
export const isGreaterThan = (a, b) => {
|
23
|
-
return a.global > b.global || (a.global === b.global && a.
|
49
|
+
return a.global > b.global || (a.global === b.global && a.client > b.client);
|
50
|
+
};
|
51
|
+
export const isGreaterThanOrEqual = (a, b) => {
|
52
|
+
return a.global > b.global || (a.global === b.global && a.client >= b.client);
|
53
|
+
};
|
54
|
+
export const max = (a, b) => {
|
55
|
+
return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
|
56
|
+
};
|
57
|
+
export const diff = (a, b) => {
|
58
|
+
return {
|
59
|
+
global: a.global - b.global,
|
60
|
+
client: a.client - b.client,
|
61
|
+
};
|
24
62
|
};
|
25
63
|
export const make = (id) => {
|
26
|
-
return Schema.is(
|
64
|
+
return Schema.is(EventNumber)(id) ? id : Schema.decodeSync(EventNumber)(id);
|
27
65
|
};
|
28
66
|
export const nextPair = (id, isLocal) => {
|
29
67
|
if (isLocal) {
|
30
|
-
return { id: { global: id.global,
|
68
|
+
return { id: { global: id.global, client: (id.client + 1) }, parentId: id };
|
31
69
|
}
|
32
70
|
return {
|
33
|
-
id: { global: (id.global + 1),
|
34
|
-
// NOTE we always point to `
|
35
|
-
parentId: { global: id.global,
|
71
|
+
id: { global: (id.global + 1), client: clientDefault },
|
72
|
+
// NOTE we always point to `client: 0` for non-clientOnly events
|
73
|
+
parentId: { global: id.global, client: clientDefault },
|
36
74
|
};
|
37
75
|
};
|
38
76
|
//# sourceMappingURL=EventId.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventId.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
2
|
+
import { expect } from 'vitest';
|
3
|
+
import { EventNumber } from './mod.js';
|
4
|
+
Vitest.describe('EventNumber', () => {
|
5
|
+
Vitest.test('nextPair', () => {
|
6
|
+
const e_0_0 = EventNumber.make({ global: 0, client: 0 });
|
7
|
+
expect(EventNumber.nextPair(e_0_0, false).id).toStrictEqual({ global: 1, client: 0 });
|
8
|
+
expect(EventNumber.nextPair(e_0_0, true).id).toStrictEqual({ global: 0, client: 1 });
|
9
|
+
});
|
10
|
+
});
|
11
|
+
//# sourceMappingURL=EventId.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventId.test.js","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAClC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACxD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
+
export type ClientEventSequenceNumber = Brand.Branded<number, 'ClientEventSequenceNumber'>;
|
3
|
+
export declare const localEventSequenceNumber: Brand.Brand.Constructor<ClientEventSequenceNumber>;
|
4
|
+
export declare const ClientEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
|
5
|
+
export type GlobalEventSequenceNumber = Brand.Branded<number, 'GlobalEventSequenceNumber'>;
|
6
|
+
export declare const globalEventSequenceNumber: Brand.Brand.Constructor<GlobalEventSequenceNumber>;
|
7
|
+
export declare const GlobalEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
|
8
|
+
export declare const clientDefault: ClientEventSequenceNumber;
|
9
|
+
/**
|
10
|
+
* LiveStore event id value consisting of a globally unique event sequence number
|
11
|
+
* and a client sequence number.
|
12
|
+
*
|
13
|
+
* The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
|
14
|
+
*/
|
15
|
+
export type EventSequenceNumber = {
|
16
|
+
global: GlobalEventSequenceNumber;
|
17
|
+
client: ClientEventSequenceNumber;
|
18
|
+
};
|
19
|
+
/**
|
20
|
+
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
21
|
+
*/
|
22
|
+
export declare const EventSequenceNumber: Schema.Struct<{
|
23
|
+
global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
|
24
|
+
/** Only increments for clientOnly events */
|
25
|
+
client: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
|
26
|
+
}>;
|
27
|
+
/**
|
28
|
+
* Compare two event ids i.e. checks if the first event id is less than the second.
|
29
|
+
*/
|
30
|
+
export declare const compare: (a: EventSequenceNumber, b: EventSequenceNumber) => number;
|
31
|
+
/**
|
32
|
+
* Convert an event id to a string representation.
|
33
|
+
*/
|
34
|
+
export declare const toString: (seqNum: EventSequenceNumber) => string;
|
35
|
+
/**
|
36
|
+
* Convert a string representation of an event id to an event id.
|
37
|
+
*/
|
38
|
+
export declare const fromString: (str: string) => EventSequenceNumber;
|
39
|
+
export declare const isEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
|
40
|
+
export type EventSequenceNumberPair = {
|
41
|
+
seqNum: EventSequenceNumber;
|
42
|
+
parentSeqNum: EventSequenceNumber;
|
43
|
+
};
|
44
|
+
export declare const ROOT: {
|
45
|
+
global: GlobalEventSequenceNumber;
|
46
|
+
client: ClientEventSequenceNumber;
|
47
|
+
};
|
48
|
+
export declare const isGreaterThan: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
|
49
|
+
export declare const isGreaterThanOrEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
|
50
|
+
export declare const max: (a: EventSequenceNumber, b: EventSequenceNumber) => EventSequenceNumber;
|
51
|
+
export declare const diff: (a: EventSequenceNumber, b: EventSequenceNumber) => {
|
52
|
+
global: number;
|
53
|
+
client: number;
|
54
|
+
};
|
55
|
+
export declare const make: (seqNum: EventSequenceNumber | typeof EventSequenceNumber.Encoded) => EventSequenceNumber;
|
56
|
+
export declare const nextPair: (seqNum: EventSequenceNumber, isLocal: boolean) => EventSequenceNumberPair;
|
57
|
+
//# sourceMappingURL=EventNumber.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventNumber.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,wBAAwB,oDAA6C,CAAA;AAClF,eAAO,MAAM,yBAAyB,sFAAyD,CAAA;AAE/F,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,yBAAyB,oDAA6C,CAAA;AACnF,eAAO,MAAM,yBAAyB,sFAA0D,CAAA;AAEhG,eAAO,MAAM,aAAa,EAAe,yBAAyB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAA;AAO1G;;GAEG;AACH,eAAO,MAAM,mBAAmB;;IAE9B,4CAA4C;;EAQY,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,WAKrE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,WAC8B,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,mBAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YACtB,CAAA;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAExG,eAAO,MAAM,IAAI;YACK,yBAAyB;;CAEhB,CAAA;AAE/B,eAAO,MAAM,aAAa,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAE3E,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAElF,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,wBAEjE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB;;;CAKlE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,OAAO,KAAG,mBAEvF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,EAAE,SAAS,OAAO,KAAG,uBAaxE,CAAA"}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { Brand, Schema } from '@livestore/utils/effect';
|
2
|
+
export const localEventSequenceNumber = Brand.nominal();
|
3
|
+
export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int);
|
4
|
+
export const globalEventSequenceNumber = Brand.nominal();
|
5
|
+
export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int);
|
6
|
+
export const clientDefault = 0;
|
7
|
+
// export const EventSequenceNumber = Schema.Struct({})
|
8
|
+
// export const EventSequenceNumber = Schema.Struct({})
|
9
|
+
// export const ClientEventSequenceNumber = Schema.Struct({})
|
10
|
+
// export const GlobalEventSequenceNumber = Schema.Struct({})
|
11
|
+
/**
|
12
|
+
* NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
|
13
|
+
*/
|
14
|
+
export const EventSequenceNumber = Schema.Struct({
|
15
|
+
global: GlobalEventSequenceNumber,
|
16
|
+
/** Only increments for clientOnly events */
|
17
|
+
client: ClientEventSequenceNumber,
|
18
|
+
// TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
|
19
|
+
// TODO: actually add this field
|
20
|
+
// Client only
|
21
|
+
// generation: Schema.Number.pipe(Schema.optional),
|
22
|
+
}).annotations({ title: 'LiveStore.EventSequenceNumber' });
|
23
|
+
/**
|
24
|
+
* Compare two event ids i.e. checks if the first event id is less than the second.
|
25
|
+
*/
|
26
|
+
export const compare = (a, b) => {
|
27
|
+
if (a.global !== b.global) {
|
28
|
+
return a.global - b.global;
|
29
|
+
}
|
30
|
+
return a.client - b.client;
|
31
|
+
};
|
32
|
+
/**
|
33
|
+
* Convert an event id to a string representation.
|
34
|
+
*/
|
35
|
+
export const toString = (seqNum) => seqNum.client === 0 ? `e${seqNum.global}` : `e${seqNum.global}+${seqNum.client}`;
|
36
|
+
/**
|
37
|
+
* Convert a string representation of an event id to an event id.
|
38
|
+
*/
|
39
|
+
export const fromString = (str) => {
|
40
|
+
const [global, client] = str.slice(1, -1).split(',').map(Number);
|
41
|
+
if (global === undefined || client === undefined) {
|
42
|
+
throw new Error('Invalid event id string');
|
43
|
+
}
|
44
|
+
return { global, client };
|
45
|
+
};
|
46
|
+
export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
|
47
|
+
export const ROOT = {
|
48
|
+
global: 0,
|
49
|
+
client: clientDefault,
|
50
|
+
};
|
51
|
+
export const isGreaterThan = (a, b) => {
|
52
|
+
return a.global > b.global || (a.global === b.global && a.client > b.client);
|
53
|
+
};
|
54
|
+
export const isGreaterThanOrEqual = (a, b) => {
|
55
|
+
return a.global > b.global || (a.global === b.global && a.client >= b.client);
|
56
|
+
};
|
57
|
+
export const max = (a, b) => {
|
58
|
+
return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
|
59
|
+
};
|
60
|
+
export const diff = (a, b) => {
|
61
|
+
return {
|
62
|
+
global: a.global - b.global,
|
63
|
+
client: a.client - b.client,
|
64
|
+
};
|
65
|
+
};
|
66
|
+
export const make = (seqNum) => {
|
67
|
+
return Schema.is(EventSequenceNumber)(seqNum) ? seqNum : Schema.decodeSync(EventSequenceNumber)(seqNum);
|
68
|
+
};
|
69
|
+
export const nextPair = (seqNum, isLocal) => {
|
70
|
+
if (isLocal) {
|
71
|
+
return {
|
72
|
+
seqNum: { global: seqNum.global, client: (seqNum.client + 1) },
|
73
|
+
parentSeqNum: seqNum,
|
74
|
+
};
|
75
|
+
}
|
76
|
+
return {
|
77
|
+
seqNum: { global: (seqNum.global + 1), client: clientDefault },
|
78
|
+
// NOTE we always point to `client: 0` for non-clientOnly events
|
79
|
+
parentSeqNum: { global: seqNum.global, client: clientDefault },
|
80
|
+
};
|
81
|
+
};
|
82
|
+
//# sourceMappingURL=EventNumber.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventNumber.js","sourceRoot":"","sources":["../../src/schema/EventNumber.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventNumber.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.test.ts"],"names":[],"mappings":""}
|