@livestore/common 0.3.0-dev.3 → 0.3.0-dev.31
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 +128 -68
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +36 -7
- 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 +389 -0
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-client-session.js +96 -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 -592
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -171
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +28 -0
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
- package/dist/devtools/devtools-sessioninfo.js +34 -0
- package/dist/devtools/devtools-sessioninfo.js.map +1 -0
- package/dist/devtools/mod.d.ts +39 -0
- package/dist/devtools/mod.d.ts.map +1 -0
- package/dist/devtools/mod.js +27 -0
- package/dist/devtools/mod.js.map +1 -0
- package/dist/index.d.ts +4 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -7
- 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 +589 -0
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
- package/dist/leader-thread/apply-event.d.ts +16 -0
- package/dist/leader-thread/apply-event.d.ts.map +1 -0
- package/dist/leader-thread/apply-event.js +103 -0
- package/dist/leader-thread/apply-event.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 +123 -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 +154 -132
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +26 -12
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +82 -47
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- 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 +35 -25
- 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 +86 -39
- 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/materializer-helper.d.ts +23 -0
- package/dist/materializer-helper.d.ts.map +1 -0
- package/dist/materializer-helper.js +70 -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/query-builder/api.d.ts +158 -55
- package/dist/query-builder/api.d.ts.map +1 -1
- package/dist/query-builder/api.js +3 -5
- package/dist/query-builder/api.js.map +1 -1
- package/dist/query-builder/astToSql.d.ts +7 -0
- package/dist/query-builder/astToSql.d.ts.map +1 -0
- package/dist/query-builder/astToSql.js +190 -0
- package/dist/query-builder/astToSql.js.map +1 -0
- package/dist/query-builder/impl.d.ts +3 -8
- package/dist/query-builder/impl.d.ts.map +1 -1
- package/dist/query-builder/impl.js +166 -124
- package/dist/query-builder/impl.js.map +1 -1
- package/dist/query-builder/impl.test.d.ts +86 -1
- package/dist/query-builder/impl.test.d.ts.map +1 -1
- package/dist/query-builder/impl.test.js +411 -69
- package/dist/query-builder/impl.test.js.map +1 -1
- package/dist/query-builder/mod.d.ts +7 -0
- package/dist/query-builder/mod.d.ts.map +1 -1
- package/dist/query-builder/mod.js +7 -0
- package/dist/query-builder/mod.js.map +1 -1
- package/dist/rehydrate-from-eventlog.d.ts +14 -0
- package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
- package/dist/rehydrate-from-eventlog.js +65 -0
- package/dist/rehydrate-from-eventlog.js.map +1 -0
- package/dist/schema/EventDef.d.ts +136 -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 +35 -15
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +57 -11
- 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/LiveStoreEvent.d.ts +255 -0
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent.js +118 -0
- package/dist/schema/LiveStoreEvent.js.map +1 -0
- package/dist/schema/client-document-def.d.ts +223 -0
- package/dist/schema/client-document-def.d.ts.map +1 -0
- package/dist/schema/client-document-def.js +170 -0
- package/dist/schema/client-document-def.js.map +1 -0
- package/dist/schema/client-document-def.test.d.ts +2 -0
- package/dist/schema/client-document-def.test.d.ts.map +1 -0
- package/dist/schema/client-document-def.test.js +201 -0
- package/dist/schema/client-document-def.test.js.map +1 -0
- package/dist/schema/db-schema/ast/sqlite.d.ts +69 -0
- package/dist/schema/db-schema/ast/sqlite.d.ts.map +1 -0
- package/dist/schema/db-schema/ast/sqlite.js +71 -0
- package/dist/schema/db-schema/ast/sqlite.js.map +1 -0
- package/dist/schema/db-schema/ast/validate.d.ts +3 -0
- package/dist/schema/db-schema/ast/validate.d.ts.map +1 -0
- package/dist/schema/db-schema/ast/validate.js +12 -0
- package/dist/schema/db-schema/ast/validate.js.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.d.ts +90 -0
- package/dist/schema/db-schema/dsl/field-defs.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.js +87 -0
- package/dist/schema/db-schema/dsl/field-defs.js.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts +2 -0
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.test.js +29 -0
- package/dist/schema/db-schema/dsl/field-defs.test.js.map +1 -0
- package/dist/schema/db-schema/dsl/mod.d.ts +90 -0
- package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/mod.js +41 -0
- package/dist/schema/db-schema/dsl/mod.js.map +1 -0
- package/dist/schema/db-schema/hash.d.ts +2 -0
- package/dist/schema/db-schema/hash.d.ts.map +1 -0
- package/dist/schema/db-schema/hash.js +14 -0
- package/dist/schema/db-schema/hash.js.map +1 -0
- package/dist/schema/db-schema/mod.d.ts +3 -0
- package/dist/schema/db-schema/mod.d.ts.map +1 -0
- package/dist/schema/db-schema/mod.js +3 -0
- package/dist/schema/db-schema/mod.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 +5 -3
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +5 -3
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema-helpers.d.ts.map +1 -1
- package/dist/schema/schema-helpers.js +1 -1
- package/dist/schema/schema-helpers.js.map +1 -1
- package/dist/schema/schema.d.ts +30 -23
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +48 -35
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/sqlite-state.d.ts +12 -0
- package/dist/schema/sqlite-state.d.ts.map +1 -0
- package/dist/schema/sqlite-state.js +36 -0
- package/dist/schema/sqlite-state.js.map +1 -0
- package/dist/schema/system-tables.d.ts +179 -125
- package/dist/schema/system-tables.d.ts.map +1 -1
- package/dist/schema/system-tables.js +76 -41
- package/dist/schema/system-tables.js.map +1 -1
- package/dist/schema/table-def.d.ts +37 -109
- package/dist/schema/table-def.d.ts.map +1 -1
- package/dist/schema/table-def.js +23 -66
- package/dist/schema/table-def.js.map +1 -1
- package/dist/schema/view.d.ts +3 -0
- package/dist/schema/view.d.ts.map +1 -0
- package/dist/schema/view.js +3 -0
- package/dist/schema/view.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 +19 -14
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
- package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
- package/dist/schema-management/validate-mutation-defs.js +17 -17
- package/dist/schema-management/validate-mutation-defs.js.map +1 -1
- 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/facts.d.ts +19 -19
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +3 -3
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +6 -7
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +4 -2
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +2 -2
- 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 +11 -8
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +76 -76
- 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} +29 -29
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
- package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +67 -36
- 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 +55 -20
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +7 -3
- 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 +319 -120
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +295 -275
- 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 +2 -2
- 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 +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/fixture.ts +36 -15
- package/src/adapter-types.ts +111 -74
- package/src/debug-info.ts +1 -0
- package/src/devtools/devtools-messages-client-session.ts +141 -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 -243
- package/src/devtools/devtools-sessioninfo.ts +99 -0
- package/src/devtools/mod.ts +36 -0
- package/src/index.ts +4 -13
- package/src/leader-thread/LeaderSyncProcessor.ts +935 -0
- package/src/leader-thread/apply-event.ts +173 -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 +212 -189
- package/src/leader-thread/make-leader-thread-layer.ts +143 -77
- package/src/leader-thread/mod.ts +1 -1
- package/src/leader-thread/recreate-db.ts +41 -30
- package/src/leader-thread/shutdown-channel.ts +2 -4
- package/src/leader-thread/types.ts +95 -51
- package/src/materializer-helper.ts +110 -0
- package/src/otel.ts +8 -0
- package/src/query-builder/api.ts +236 -85
- package/src/query-builder/astToSql.ts +232 -0
- package/src/query-builder/impl.test.ts +447 -78
- package/src/query-builder/impl.ts +209 -144
- package/src/query-builder/mod.ts +7 -0
- package/src/rehydrate-from-eventlog.ts +114 -0
- package/src/schema/EventDef.ts +216 -0
- package/src/schema/EventId.test.ts +12 -0
- package/src/schema/EventId.ts +75 -15
- package/src/schema/LiveStoreEvent.ts +239 -0
- package/src/schema/client-document-def.test.ts +239 -0
- package/src/schema/client-document-def.ts +444 -0
- package/src/schema/db-schema/ast/sqlite.ts +142 -0
- package/src/schema/db-schema/ast/validate.ts +13 -0
- package/src/schema/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
- package/src/schema/db-schema/dsl/field-defs.test.ts +35 -0
- package/src/schema/db-schema/dsl/field-defs.ts +242 -0
- package/src/schema/db-schema/dsl/mod.ts +222 -0
- package/src/schema/db-schema/hash.ts +14 -0
- package/src/schema/db-schema/mod.ts +2 -0
- package/src/schema/events.ts +1 -0
- package/src/schema/mod.ts +5 -3
- package/src/schema/schema-helpers.ts +1 -1
- package/src/schema/schema.ts +84 -62
- package/src/schema/sqlite-state.ts +62 -0
- package/src/schema/system-tables.ts +68 -50
- package/src/schema/table-def.ts +68 -214
- package/src/schema/view.ts +2 -0
- package/src/schema-management/common.ts +7 -7
- package/src/schema-management/migrations.ts +27 -24
- package/src/schema-management/validate-mutation-defs.ts +22 -24
- 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/facts.ts +32 -33
- package/src/sync/next/history-dag-common.ts +9 -5
- package/src/sync/next/history-dag.ts +2 -2
- package/src/sync/next/rebase-events.ts +22 -16
- package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
- package/src/sync/next/test/compact-events.test.ts +78 -78
- package/src/sync/next/test/event-fixtures.ts +219 -0
- package/src/sync/next/test/mod.ts +1 -1
- package/src/sync/sync.ts +51 -19
- package/src/sync/syncstate.test.ts +335 -308
- package/src/sync/syncstate.ts +394 -212
- package/src/sync/validate-push-payload.ts +7 -4
- package/src/version.ts +1 -1
- package/tmp/pack.tgz +0 -0
- package/tsconfig.json +2 -1
- 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 -12
- 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/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 -422
- package/dist/leader-thread/leader-sync-processor.js.map +0 -1
- package/dist/leader-thread/mutationlog.d.ts +0 -23
- package/dist/leader-thread/mutationlog.d.ts.map +0 -1
- package/dist/leader-thread/mutationlog.js +0 -27
- 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-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 -191
- package/dist/schema/MutationEvent.d.ts.map +0 -1
- package/dist/schema/MutationEvent.js +0 -56
- 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/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 -13
- 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 -666
- package/src/leader-thread/mutationlog.ts +0 -42
- package/src/leader-thread/pull-queue-set.ts +0 -58
- package/src/mutation.ts +0 -81
- package/src/query-info.ts +0 -78
- package/src/rehydrate-from-mutationlog.ts +0 -127
- package/src/schema/MutationEvent.ts +0 -161
- package/src/schema/mutations.ts +0 -192
- package/src/sync/client-session-sync-processor.ts +0 -207
- package/src/sync/next/test/mutation-fixtures.ts +0 -231
@@ -1,42 +0,0 @@
|
|
1
|
-
import { Effect, Schema } from '@livestore/utils/effect'
|
2
|
-
|
3
|
-
import type { SynchronousDatabase } from '../adapter-types.js'
|
4
|
-
import * as EventId from '../schema/EventId.js'
|
5
|
-
import { MUTATION_LOG_META_TABLE, mutationLogMetaTable, SYNC_STATUS_TABLE } from '../schema/system-tables.js'
|
6
|
-
import { prepareBindValues, sql } from '../util.js'
|
7
|
-
import { LeaderThreadCtx } from './types.js'
|
8
|
-
|
9
|
-
export const getMutationEventsSince = (since: EventId.EventId) =>
|
10
|
-
Effect.gen(function* () {
|
11
|
-
const { dbLog } = yield* LeaderThreadCtx
|
12
|
-
|
13
|
-
const query = mutationLogMetaTable.query.where('idGlobal', '>=', since.global).asSql()
|
14
|
-
const pendingMutationEventsRaw = dbLog.select(query.query, prepareBindValues(query.bindValues, query.query))
|
15
|
-
const pendingMutationEvents = Schema.decodeUnknownSync(mutationLogMetaTable.schema.pipe(Schema.Array))(
|
16
|
-
pendingMutationEventsRaw,
|
17
|
-
)
|
18
|
-
|
19
|
-
return pendingMutationEvents
|
20
|
-
.map((_) => ({
|
21
|
-
mutation: _.mutation,
|
22
|
-
args: _.argsJson,
|
23
|
-
id: { global: _.idGlobal, local: _.idLocal },
|
24
|
-
parentId: { global: _.parentIdGlobal, local: _.parentIdLocal },
|
25
|
-
}))
|
26
|
-
.filter((_) => EventId.compare(_.id, since) > 0)
|
27
|
-
})
|
28
|
-
|
29
|
-
export const getLocalHeadFromDb = (dbLog: SynchronousDatabase) => {
|
30
|
-
const res = dbLog.select<{ idGlobal: number; idLocal: number }>(
|
31
|
-
sql`select idGlobal, idLocal from ${MUTATION_LOG_META_TABLE} order by idGlobal DESC, idLocal DESC limit 1`,
|
32
|
-
)[0]
|
33
|
-
|
34
|
-
return res ? { global: res.idGlobal, local: res.idLocal } : EventId.ROOT
|
35
|
-
}
|
36
|
-
|
37
|
-
export const getBackendHeadFromDb = (dbLog: SynchronousDatabase) =>
|
38
|
-
dbLog.select<{ head: number }>(sql`select head from ${SYNC_STATUS_TABLE}`)[0]?.head ?? EventId.ROOT.global
|
39
|
-
|
40
|
-
// TODO use prepared statements
|
41
|
-
export const updateBackendHead = (dbLog: SynchronousDatabase, head: EventId.EventId) =>
|
42
|
-
dbLog.execute(sql`UPDATE ${SYNC_STATUS_TABLE} SET head = ${head.global}`)
|
@@ -1,58 +0,0 @@
|
|
1
|
-
import { Effect, Queue } from '@livestore/utils/effect'
|
2
|
-
|
3
|
-
import * as MutationEvent from '../schema/MutationEvent.js'
|
4
|
-
import { getMutationEventsSince } from './mutationlog.js'
|
5
|
-
import { type PullQueueItem, type PullQueueSet } from './types.js'
|
6
|
-
|
7
|
-
export const makePullQueueSet = Effect.gen(function* () {
|
8
|
-
const set = new Set<Queue.Queue<PullQueueItem>>()
|
9
|
-
|
10
|
-
yield* Effect.addFinalizer(() =>
|
11
|
-
Effect.gen(function* () {
|
12
|
-
for (const queue of set) {
|
13
|
-
yield* Queue.shutdown(queue)
|
14
|
-
}
|
15
|
-
|
16
|
-
set.clear()
|
17
|
-
}),
|
18
|
-
)
|
19
|
-
|
20
|
-
const makeQueue: PullQueueSet['makeQueue'] = (since) =>
|
21
|
-
Effect.gen(function* () {
|
22
|
-
const queue = yield* Queue.unbounded<PullQueueItem>().pipe(Effect.acquireRelease(Queue.shutdown))
|
23
|
-
|
24
|
-
yield* Effect.addFinalizer(() => Effect.sync(() => set.delete(queue)))
|
25
|
-
|
26
|
-
const mutationEvents = yield* getMutationEventsSince(since)
|
27
|
-
|
28
|
-
if (mutationEvents.length > 0) {
|
29
|
-
const newEvents = mutationEvents.map((mutationEvent) => new MutationEvent.EncodedWithMeta(mutationEvent))
|
30
|
-
yield* queue.offer({ payload: { _tag: 'upstream-advance', newEvents }, remaining: 0 })
|
31
|
-
}
|
32
|
-
|
33
|
-
set.add(queue)
|
34
|
-
|
35
|
-
return queue
|
36
|
-
})
|
37
|
-
|
38
|
-
const offer: PullQueueSet['offer'] = (item) =>
|
39
|
-
Effect.gen(function* () {
|
40
|
-
// Short-circuit if the payload is an empty upstream advance
|
41
|
-
if (
|
42
|
-
item.payload._tag === 'upstream-advance' &&
|
43
|
-
item.payload.newEvents.length === 0 &&
|
44
|
-
item.payload.trimRollbackUntil === undefined
|
45
|
-
) {
|
46
|
-
return
|
47
|
-
}
|
48
|
-
|
49
|
-
for (const queue of set) {
|
50
|
-
yield* Queue.offer(queue, item)
|
51
|
-
}
|
52
|
-
})
|
53
|
-
|
54
|
-
return {
|
55
|
-
makeQueue,
|
56
|
-
offer,
|
57
|
-
}
|
58
|
-
})
|
package/src/mutation.ts
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
import { Schema } from '@livestore/utils/effect'
|
2
|
-
|
3
|
-
import { SessionIdSymbol } from './adapter-types.js'
|
4
|
-
import type * as MutationEvent from './schema/MutationEvent.js'
|
5
|
-
import type { MutationDef } from './schema/mutations.js'
|
6
|
-
import type { PreparedBindValues } from './util.js'
|
7
|
-
import { prepareBindValues } from './util.js'
|
8
|
-
|
9
|
-
export const getExecArgsFromMutation = ({
|
10
|
-
mutationDef,
|
11
|
-
mutationEventDecoded,
|
12
|
-
}: {
|
13
|
-
mutationDef: MutationDef.Any
|
14
|
-
mutationEventDecoded: MutationEvent.Any | MutationEvent.PartialAny
|
15
|
-
}): ReadonlyArray<{
|
16
|
-
statementSql: string
|
17
|
-
bindValues: PreparedBindValues
|
18
|
-
writeTables: ReadonlySet<string> | undefined
|
19
|
-
}> => {
|
20
|
-
let statementRes: ReadonlyArray<
|
21
|
-
string | { sql: string; bindValues: Record<string, unknown>; writeTables?: ReadonlySet<string> }
|
22
|
-
>
|
23
|
-
|
24
|
-
switch (typeof mutationDef.sql) {
|
25
|
-
case 'function': {
|
26
|
-
const res = mutationDef.sql(mutationEventDecoded.args)
|
27
|
-
statementRes = Array.isArray(res) ? res : [res]
|
28
|
-
break
|
29
|
-
}
|
30
|
-
case 'string': {
|
31
|
-
statementRes = [mutationDef.sql]
|
32
|
-
break
|
33
|
-
}
|
34
|
-
default: {
|
35
|
-
statementRes = mutationDef.sql
|
36
|
-
break
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
return statementRes.map((statementRes) => {
|
41
|
-
const statementSql = typeof statementRes === 'string' ? statementRes : statementRes.sql
|
42
|
-
|
43
|
-
const bindValues =
|
44
|
-
typeof statementRes === 'string'
|
45
|
-
? Schema.encodeUnknownSync(mutationDef.schema)(mutationEventDecoded.args)
|
46
|
-
: statementRes.bindValues
|
47
|
-
|
48
|
-
const writeTables = typeof statementRes === 'string' ? undefined : statementRes.writeTables
|
49
|
-
|
50
|
-
return { statementSql, bindValues: prepareBindValues(bindValues ?? {}, statementSql), writeTables }
|
51
|
-
})
|
52
|
-
}
|
53
|
-
|
54
|
-
// NOTE we should explore whether there is a more elegant solution
|
55
|
-
// e.g. by leveraging the schema to replace the sessionIdSymbol
|
56
|
-
export const replaceSessionIdSymbol = (
|
57
|
-
bindValues: Record<string, unknown> | ReadonlyArray<unknown>,
|
58
|
-
sessionId: string,
|
59
|
-
) => {
|
60
|
-
deepReplaceValue(bindValues, SessionIdSymbol, sessionId)
|
61
|
-
}
|
62
|
-
|
63
|
-
const deepReplaceValue = <S, R>(input: any, searchValue: S, replaceValue: R): void => {
|
64
|
-
if (Array.isArray(input)) {
|
65
|
-
for (const i in input) {
|
66
|
-
if (input[i] === searchValue) {
|
67
|
-
input[i] = replaceValue
|
68
|
-
} else {
|
69
|
-
deepReplaceValue(input[i], searchValue, replaceValue)
|
70
|
-
}
|
71
|
-
}
|
72
|
-
} else if (typeof input === 'object' && input !== null) {
|
73
|
-
for (const key in input) {
|
74
|
-
if (input[key] === searchValue) {
|
75
|
-
input[key] = replaceValue
|
76
|
-
} else {
|
77
|
-
deepReplaceValue(input[key], searchValue, replaceValue)
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
package/src/query-info.ts
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
import type { SessionIdSymbol } from './adapter-types.js'
|
2
|
-
import type { DbSchema } from './schema/mod.js'
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Semantic information about a query with supported cases being:
|
6
|
-
* - a whole row
|
7
|
-
* - a single column value
|
8
|
-
* - a sub value in a JSON column
|
9
|
-
*
|
10
|
-
* This information is currently only used for derived mutations.
|
11
|
-
*/
|
12
|
-
export type QueryInfo = QueryInfo.None | QueryInfo.Row | QueryInfo.Col | QueryInfo.ColJsonValue
|
13
|
-
// export type QueryInfo<TTableDef extends DbSchema.TableDefBase = DbSchema.TableDefBase> =
|
14
|
-
// | QueryInfo.None
|
15
|
-
// | QueryInfo.Row<TTableDef>
|
16
|
-
// | QueryInfo.ColJsonValue<TTableDef, GetJsonColumn<TTableDef>>
|
17
|
-
// | QueryInfo.Col<TTableDef, keyof TTableDef['sqliteDef']['columns']>
|
18
|
-
|
19
|
-
export namespace QueryInfo {
|
20
|
-
export type None = {
|
21
|
-
_tag: 'None'
|
22
|
-
}
|
23
|
-
|
24
|
-
export type Row = {
|
25
|
-
_tag: 'Row'
|
26
|
-
table: DbSchema.TableDefBase
|
27
|
-
id: string | SessionIdSymbol
|
28
|
-
}
|
29
|
-
|
30
|
-
export type Col = {
|
31
|
-
_tag: 'Col'
|
32
|
-
table: DbSchema.TableDefBase
|
33
|
-
id: string | SessionIdSymbol
|
34
|
-
column: string
|
35
|
-
}
|
36
|
-
|
37
|
-
export type ColJsonValue = {
|
38
|
-
_tag: 'ColJsonValue'
|
39
|
-
table: DbSchema.TableDefBase
|
40
|
-
id: string | SessionIdSymbol
|
41
|
-
column: string
|
42
|
-
/**
|
43
|
-
* example: `$.tabs[3].items[2]` (`$` referring to the column value)
|
44
|
-
*/
|
45
|
-
jsonPath: string
|
46
|
-
}
|
47
|
-
|
48
|
-
// NOTE maybe we want to bring back type-params back like below
|
49
|
-
// export type Row<TTableDef extends DbSchema.TableDefBase> = {
|
50
|
-
// _tag: 'Row'
|
51
|
-
// table: TTableDef
|
52
|
-
// id: string | SessionIdSymbol
|
53
|
-
// }
|
54
|
-
|
55
|
-
// export type Col<TTableDef extends DbSchema.TableDefBase, TColName extends keyof TTableDef['sqliteDef']['columns']> = {
|
56
|
-
// _tag: 'Col'
|
57
|
-
// table: TTableDef
|
58
|
-
// id: string | SessionIdSymbol
|
59
|
-
// column: TColName
|
60
|
-
// }
|
61
|
-
|
62
|
-
// export type ColJsonValue<TTableDef extends DbSchema.TableDefBase, TColName extends GetJsonColumn<TTableDef>> = {
|
63
|
-
// _tag: 'ColJsonValue'
|
64
|
-
// table: TTableDef
|
65
|
-
// id: string | SessionIdSymbol
|
66
|
-
// column: TColName
|
67
|
-
// /**
|
68
|
-
// * example: `$.tabs[3].items[2]` (`$` referring to the column value)
|
69
|
-
// */
|
70
|
-
// jsonPath: string
|
71
|
-
// }
|
72
|
-
}
|
73
|
-
|
74
|
-
// type GetJsonColumn<TTableDef extends DbSchema.TableDefBase> = keyof {
|
75
|
-
// [ColName in keyof TTableDef['sqliteDef']['columns'] as TTableDef['sqliteDef']['columns'][ColName]['columnType'] extends 'text'
|
76
|
-
// ? ColName
|
77
|
-
// : never]: {}
|
78
|
-
// }
|
@@ -1,127 +0,0 @@
|
|
1
|
-
import { isDevEnv, memoizeByRef, shouldNeverHappen } from '@livestore/utils'
|
2
|
-
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect'
|
3
|
-
|
4
|
-
import { type MigrationOptionsFromMutationLog, type SynchronousDatabase, UnexpectedError } from './adapter-types.js'
|
5
|
-
import { getExecArgsFromMutation } from './mutation.js'
|
6
|
-
import type { LiveStoreSchema, MutationDef, MutationEvent, MutationLogMetaRow } from './schema/mod.js'
|
7
|
-
import { EventId, MUTATION_LOG_META_TABLE } from './schema/mod.js'
|
8
|
-
import type { PreparedBindValues } from './util.js'
|
9
|
-
import { sql } from './util.js'
|
10
|
-
|
11
|
-
export const rehydrateFromMutationLog = ({
|
12
|
-
logDb,
|
13
|
-
db,
|
14
|
-
schema,
|
15
|
-
migrationOptions,
|
16
|
-
onProgress,
|
17
|
-
}: {
|
18
|
-
logDb: SynchronousDatabase
|
19
|
-
db: SynchronousDatabase
|
20
|
-
schema: LiveStoreSchema
|
21
|
-
migrationOptions: MigrationOptionsFromMutationLog
|
22
|
-
onProgress: (_: { done: number; total: number }) => Effect.Effect<void>
|
23
|
-
}) =>
|
24
|
-
Effect.gen(function* () {
|
25
|
-
const mutationsCount = logDb.select<{ count: number }>(
|
26
|
-
`SELECT COUNT(*) AS count FROM ${MUTATION_LOG_META_TABLE}`,
|
27
|
-
)[0]!.count
|
28
|
-
|
29
|
-
const hashMutation = memoizeByRef((mutation: MutationDef.Any) => Schema.hash(mutation.schema))
|
30
|
-
|
31
|
-
const processMutation = (row: MutationLogMetaRow) =>
|
32
|
-
Effect.gen(function* () {
|
33
|
-
const mutationDef = schema.mutations.get(row.mutation) ?? shouldNeverHappen(`Unknown mutation ${row.mutation}`)
|
34
|
-
|
35
|
-
if (migrationOptions.excludeMutations?.has(row.mutation) === true) return
|
36
|
-
|
37
|
-
if (hashMutation(mutationDef) !== row.schemaHash) {
|
38
|
-
yield* Effect.logWarning(
|
39
|
-
`Schema hash mismatch for mutation ${row.mutation}. Trying to apply mutation anyway.`,
|
40
|
-
)
|
41
|
-
}
|
42
|
-
|
43
|
-
const argsDecoded = yield* Schema.decodeUnknown(Schema.parseJson(mutationDef.schema))(row.argsJson).pipe(
|
44
|
-
Effect.mapError((cause) =>
|
45
|
-
UnexpectedError.make({
|
46
|
-
cause,
|
47
|
-
note: `\
|
48
|
-
There was an error during rehydrating from the mutation log while decoding
|
49
|
-
the persisted mutation event args for mutation "${row.mutation}".
|
50
|
-
This likely means the schema has changed in an incompatible way.
|
51
|
-
`,
|
52
|
-
}),
|
53
|
-
),
|
54
|
-
)
|
55
|
-
|
56
|
-
const mutationEventDecoded = {
|
57
|
-
id: { global: row.idGlobal, local: row.idLocal },
|
58
|
-
parentId: { global: row.parentIdGlobal, local: row.parentIdLocal },
|
59
|
-
mutation: row.mutation,
|
60
|
-
args: argsDecoded,
|
61
|
-
} satisfies MutationEvent.Any
|
62
|
-
|
63
|
-
const execArgsArr = getExecArgsFromMutation({ mutationDef, mutationEventDecoded })
|
64
|
-
|
65
|
-
const makeExecuteOptions = (statementSql: string, bindValues: any) => ({
|
66
|
-
onRowsChanged: (rowsChanged: number) => {
|
67
|
-
if (rowsChanged === 0 && migrationOptions.logging?.excludeAffectedRows?.(statementSql) !== true) {
|
68
|
-
console.warn(`Mutation "${mutationDef.name}" did not affect any rows:`, statementSql, bindValues)
|
69
|
-
}
|
70
|
-
},
|
71
|
-
})
|
72
|
-
|
73
|
-
for (const { statementSql, bindValues } of execArgsArr) {
|
74
|
-
// TODO cache prepared statements for mutations
|
75
|
-
db.execute(statementSql, bindValues, isDevEnv() ? makeExecuteOptions(statementSql, bindValues) : undefined)
|
76
|
-
// console.log(`Re-executed mutation ${mutationSql}`, bindValues)
|
77
|
-
}
|
78
|
-
}).pipe(Effect.withSpan(`@livestore/common:rehydrateFromMutationLog:processMutation`))
|
79
|
-
|
80
|
-
const CHUNK_SIZE = 100
|
81
|
-
|
82
|
-
const stmt = logDb.prepare(sql`\
|
83
|
-
SELECT * FROM ${MUTATION_LOG_META_TABLE}
|
84
|
-
WHERE idGlobal > $idGlobal OR (idGlobal = $idGlobal AND idLocal > $idLocal)
|
85
|
-
ORDER BY idGlobal ASC, idLocal ASC
|
86
|
-
LIMIT ${CHUNK_SIZE}
|
87
|
-
`)
|
88
|
-
|
89
|
-
let processedMutations = 0
|
90
|
-
|
91
|
-
yield* Stream.unfoldChunk<Chunk.Chunk<MutationLogMetaRow> | { _tag: 'Initial ' }, MutationLogMetaRow>(
|
92
|
-
{ _tag: 'Initial ' },
|
93
|
-
(item) => {
|
94
|
-
// End stream if no more rows
|
95
|
-
if (Chunk.isChunk(item) && item.length === 0) return Option.none()
|
96
|
-
|
97
|
-
const lastId = Chunk.isChunk(item)
|
98
|
-
? Chunk.last(item).pipe(
|
99
|
-
Option.map((_) => ({ global: _.idGlobal, local: _.idLocal })),
|
100
|
-
Option.getOrElse(() => EventId.ROOT),
|
101
|
-
)
|
102
|
-
: EventId.ROOT
|
103
|
-
const nextItem = Chunk.fromIterable(
|
104
|
-
stmt.select<MutationLogMetaRow>({
|
105
|
-
$idGlobal: lastId?.global,
|
106
|
-
$idLocal: lastId?.local,
|
107
|
-
} as any as PreparedBindValues),
|
108
|
-
)
|
109
|
-
const prevItem = Chunk.isChunk(item) ? item : Chunk.empty()
|
110
|
-
return Option.some([prevItem, nextItem])
|
111
|
-
},
|
112
|
-
).pipe(
|
113
|
-
Stream.bufferChunks({ capacity: 2 }),
|
114
|
-
Stream.tap((row) =>
|
115
|
-
Effect.gen(function* () {
|
116
|
-
yield* processMutation(row)
|
117
|
-
|
118
|
-
processedMutations++
|
119
|
-
yield* onProgress({ done: processedMutations, total: mutationsCount })
|
120
|
-
}),
|
121
|
-
),
|
122
|
-
Stream.runDrain,
|
123
|
-
)
|
124
|
-
}).pipe(
|
125
|
-
Effect.withPerformanceMeasure('@livestore/common:rehydrateFromMutationLog'),
|
126
|
-
Effect.withSpan('@livestore/common:rehydrateFromMutationLog'),
|
127
|
-
)
|
@@ -1,161 +0,0 @@
|
|
1
|
-
import { memoizeByRef } from '@livestore/utils'
|
2
|
-
import type { Deferred } from '@livestore/utils/effect'
|
3
|
-
import { Schema } from '@livestore/utils/effect'
|
4
|
-
|
5
|
-
import * as EventId from './EventId.js'
|
6
|
-
import type { MutationDef, MutationDefRecord } from './mutations.js'
|
7
|
-
import type { LiveStoreSchema } from './schema.js'
|
8
|
-
|
9
|
-
export type MutationEventPartial<TMutationsDef extends MutationDef.Any> = {
|
10
|
-
mutation: TMutationsDef['name']
|
11
|
-
args: Schema.Schema.Type<TMutationsDef['schema']>
|
12
|
-
}
|
13
|
-
|
14
|
-
export type MutationEventPartialEncoded<TMutationsDef extends MutationDef.Any> = {
|
15
|
-
mutation: TMutationsDef['name']
|
16
|
-
args: Schema.Schema.Encoded<TMutationsDef['schema']>
|
17
|
-
}
|
18
|
-
|
19
|
-
export type MutationEvent<TMutationsDef extends MutationDef.Any> = {
|
20
|
-
mutation: TMutationsDef['name']
|
21
|
-
args: Schema.Schema.Type<TMutationsDef['schema']>
|
22
|
-
id: EventId.EventId
|
23
|
-
parentId: EventId.EventId
|
24
|
-
}
|
25
|
-
|
26
|
-
export type MutationEventEncoded<TMutationsDef extends MutationDef.Any> = {
|
27
|
-
mutation: TMutationsDef['name']
|
28
|
-
args: Schema.Schema.Encoded<TMutationsDef['schema']>
|
29
|
-
id: EventId.EventId
|
30
|
-
parentId: EventId.EventId
|
31
|
-
}
|
32
|
-
|
33
|
-
export type Any = MutationEvent<MutationDef.Any>
|
34
|
-
export type AnyEncoded = MutationEventEncoded<MutationDef.Any>
|
35
|
-
|
36
|
-
export type PartialAny = MutationEventPartial<MutationDef.Any>
|
37
|
-
export type PartialAnyEncoded = MutationEventPartialEncoded<MutationDef.Any>
|
38
|
-
|
39
|
-
export type PartialForSchema<TSchema extends LiveStoreSchema> = {
|
40
|
-
[K in keyof TSchema['_MutationDefMapType']]: MutationEventPartial<TSchema['_MutationDefMapType'][K]>
|
41
|
-
}[keyof TSchema['_MutationDefMapType']]
|
42
|
-
|
43
|
-
export type ForSchema<TSchema extends LiveStoreSchema> = {
|
44
|
-
[K in keyof TSchema['_MutationDefMapType']]: MutationEvent<TSchema['_MutationDefMapType'][K]>
|
45
|
-
}[keyof TSchema['_MutationDefMapType']]
|
46
|
-
|
47
|
-
export const isPartialMutationEvent = (mutationEvent: Any | PartialAny): mutationEvent is PartialAny =>
|
48
|
-
'id' in mutationEvent === false && 'parentId' in mutationEvent === false
|
49
|
-
|
50
|
-
export type ForMutationDefRecord<TMutationsDefRecord extends MutationDefRecord> = Schema.Schema<
|
51
|
-
{
|
52
|
-
[K in keyof TMutationsDefRecord]: {
|
53
|
-
mutation: K
|
54
|
-
args: Schema.Schema.Type<TMutationsDefRecord[K]['schema']>
|
55
|
-
id: EventId.EventId
|
56
|
-
parentId: EventId.EventId
|
57
|
-
}
|
58
|
-
}[keyof TMutationsDefRecord],
|
59
|
-
{
|
60
|
-
[K in keyof TMutationsDefRecord]: {
|
61
|
-
mutation: K
|
62
|
-
args: Schema.Schema.Encoded<TMutationsDefRecord[K]['schema']>
|
63
|
-
id: EventId.EventId
|
64
|
-
parentId: EventId.EventId
|
65
|
-
}
|
66
|
-
}[keyof TMutationsDefRecord]
|
67
|
-
>
|
68
|
-
|
69
|
-
export type MutationEventPartialSchema<TMutationsDefRecord extends MutationDefRecord> = Schema.Schema<
|
70
|
-
{
|
71
|
-
[K in keyof TMutationsDefRecord]: {
|
72
|
-
mutation: K
|
73
|
-
args: Schema.Schema.Type<TMutationsDefRecord[K]['schema']>
|
74
|
-
}
|
75
|
-
}[keyof TMutationsDefRecord],
|
76
|
-
{
|
77
|
-
[K in keyof TMutationsDefRecord]: {
|
78
|
-
mutation: K
|
79
|
-
args: Schema.Schema.Encoded<TMutationsDefRecord[K]['schema']>
|
80
|
-
}
|
81
|
-
}[keyof TMutationsDefRecord]
|
82
|
-
>
|
83
|
-
|
84
|
-
export const makeMutationEventSchema = <TSchema extends LiveStoreSchema>(
|
85
|
-
schema: TSchema,
|
86
|
-
): ForMutationDefRecord<TSchema['_MutationDefMapType']> =>
|
87
|
-
Schema.Union(
|
88
|
-
...[...schema.mutations.values()].map((def) =>
|
89
|
-
Schema.Struct({
|
90
|
-
mutation: Schema.Literal(def.name),
|
91
|
-
args: def.schema,
|
92
|
-
id: EventId.EventId,
|
93
|
-
parentId: EventId.EventId,
|
94
|
-
}),
|
95
|
-
),
|
96
|
-
).annotations({ title: 'MutationEvent' }) as any
|
97
|
-
|
98
|
-
export const makeMutationEventPartialSchema = <TSchema extends LiveStoreSchema>(
|
99
|
-
schema: TSchema,
|
100
|
-
): MutationEventPartialSchema<TSchema['_MutationDefMapType']> =>
|
101
|
-
Schema.Union(
|
102
|
-
...[...schema.mutations.values()].map((def) =>
|
103
|
-
Schema.Struct({
|
104
|
-
mutation: Schema.Literal(def.name),
|
105
|
-
args: def.schema,
|
106
|
-
}),
|
107
|
-
),
|
108
|
-
).annotations({ title: 'MutationEventSchemaPartial' }) as any
|
109
|
-
|
110
|
-
export const makeMutationEventSchemaMemo = memoizeByRef(makeMutationEventSchema)
|
111
|
-
|
112
|
-
export const Any = Schema.Struct({
|
113
|
-
mutation: Schema.String,
|
114
|
-
args: Schema.Any,
|
115
|
-
id: EventId.EventId,
|
116
|
-
parentId: EventId.EventId,
|
117
|
-
}).annotations({ title: 'MutationEvent.Any' })
|
118
|
-
|
119
|
-
export const DecodedAny = Schema.typeSchema(Any).annotations({
|
120
|
-
title: 'MutationEvent.DecodedAny',
|
121
|
-
})
|
122
|
-
|
123
|
-
export const EncodedAny = Schema.encodedSchema(Any).annotations({
|
124
|
-
title: 'MutationEvent.EncodedAny',
|
125
|
-
})
|
126
|
-
|
127
|
-
/** Equivalent to EncodedAny but with a meta field and some convenience methods */
|
128
|
-
export class EncodedWithMeta extends Schema.Class<EncodedWithMeta>('MutationEvent.EncodedWithMeta')({
|
129
|
-
mutation: Schema.String,
|
130
|
-
args: Schema.Any,
|
131
|
-
id: EventId.EventId,
|
132
|
-
parentId: EventId.EventId,
|
133
|
-
meta: Schema.optionalWith(
|
134
|
-
Schema.Any as Schema.Schema<{ deferred?: Deferred.Deferred<void>; sessionChangeset?: Uint8Array }>,
|
135
|
-
{ default: () => ({}) },
|
136
|
-
),
|
137
|
-
}) {
|
138
|
-
toJSON = (): any => {
|
139
|
-
// Only used for logging/debugging
|
140
|
-
// - More readable way to print the id + parentId
|
141
|
-
// - not including `meta`
|
142
|
-
return {
|
143
|
-
id: `(${this.id.global},${this.id.local}) → (${this.parentId.global},${this.parentId.local})`,
|
144
|
-
mutation: this.mutation,
|
145
|
-
args: this.args,
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
|
-
rebase = (parentId: EventId.EventId, isLocal: boolean) =>
|
150
|
-
new EncodedWithMeta({
|
151
|
-
...this,
|
152
|
-
...EventId.nextPair(this.id, isLocal),
|
153
|
-
})
|
154
|
-
}
|
155
|
-
|
156
|
-
export const isEqualEncoded = (a: AnyEncoded, b: AnyEncoded) =>
|
157
|
-
a.id.global === b.id.global &&
|
158
|
-
a.id.local === b.id.local &&
|
159
|
-
a.mutation === b.mutation &&
|
160
|
-
// TODO use schema equality here
|
161
|
-
JSON.stringify(a.args) === JSON.stringify(b.args)
|