@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,40 +1,38 @@
|
|
1
|
-
import { type SqliteAst as __SqliteAst, SqliteDsl } from '@livestore/db-schema'
|
2
1
|
import { Schema } from '@livestore/utils/effect'
|
3
2
|
|
4
|
-
import
|
3
|
+
import { SqliteDsl } from './db-schema/mod.js'
|
4
|
+
import * as EventId from './EventId.js'
|
5
5
|
import { table } from './table-def.js'
|
6
6
|
|
7
|
-
///
|
7
|
+
/// Read model DB
|
8
8
|
|
9
9
|
export const SCHEMA_META_TABLE = '__livestore_schema'
|
10
10
|
|
11
|
-
export const schemaMetaTable = table(
|
12
|
-
SCHEMA_META_TABLE,
|
13
|
-
{
|
11
|
+
export const schemaMetaTable = table({
|
12
|
+
name: SCHEMA_META_TABLE,
|
13
|
+
columns: {
|
14
14
|
tableName: SqliteDsl.text({ primaryKey: true }),
|
15
15
|
schemaHash: SqliteDsl.integer({ nullable: false }),
|
16
16
|
/** ISO date format */
|
17
17
|
updatedAt: SqliteDsl.text({ nullable: false }),
|
18
18
|
},
|
19
|
-
|
20
|
-
)
|
19
|
+
})
|
21
20
|
|
22
|
-
export type SchemaMetaRow =
|
21
|
+
export type SchemaMetaRow = typeof schemaMetaTable.Type
|
23
22
|
|
24
|
-
export const
|
23
|
+
export const SCHEMA_EVENT_DEFS_META_TABLE = '__livestore_schema_event_defs'
|
25
24
|
|
26
|
-
export const
|
27
|
-
|
28
|
-
{
|
29
|
-
|
25
|
+
export const schemaEventDefsMetaTable = table({
|
26
|
+
name: SCHEMA_EVENT_DEFS_META_TABLE,
|
27
|
+
columns: {
|
28
|
+
eventName: SqliteDsl.text({ primaryKey: true }),
|
30
29
|
schemaHash: SqliteDsl.integer({ nullable: false }),
|
31
30
|
/** ISO date format */
|
32
31
|
updatedAt: SqliteDsl.text({ nullable: false }),
|
33
32
|
},
|
34
|
-
|
35
|
-
)
|
33
|
+
})
|
36
34
|
|
37
|
-
export type
|
35
|
+
export type SchemaEventDefsMetaRow = typeof schemaEventDefsMetaTable.Type
|
38
36
|
|
39
37
|
/**
|
40
38
|
* Table which stores SQLite changeset blobs which is used for rolling back
|
@@ -42,56 +40,76 @@ export type SchemaMutationsMetaRow = FromTable.RowDecoded<typeof schemaMutations
|
|
42
40
|
*/
|
43
41
|
export const SESSION_CHANGESET_META_TABLE = '__livestore_session_changeset'
|
44
42
|
|
45
|
-
export const sessionChangesetMetaTable = table(
|
46
|
-
SESSION_CHANGESET_META_TABLE,
|
47
|
-
{
|
43
|
+
export const sessionChangesetMetaTable = table({
|
44
|
+
name: SESSION_CHANGESET_META_TABLE,
|
45
|
+
columns: {
|
48
46
|
// TODO bring back primary key
|
49
|
-
idGlobal: SqliteDsl.integer({}),
|
50
|
-
|
51
|
-
|
52
|
-
// idLocal: SqliteDsl.integer({ primaryKey: true }),
|
53
|
-
changeset: SqliteDsl.blob({}),
|
47
|
+
idGlobal: SqliteDsl.integer({ schema: EventId.GlobalEventId }),
|
48
|
+
idClient: SqliteDsl.integer({ schema: EventId.ClientEventId }),
|
49
|
+
changeset: SqliteDsl.blob({ nullable: true }),
|
54
50
|
debug: SqliteDsl.json({ nullable: true }),
|
55
51
|
},
|
56
|
-
{
|
57
|
-
)
|
52
|
+
indexes: [{ columns: ['idGlobal', 'idClient'], name: 'idx_session_changeset_id' }],
|
53
|
+
})
|
58
54
|
|
59
|
-
export type SessionChangesetMetaRow =
|
55
|
+
export type SessionChangesetMetaRow = typeof sessionChangesetMetaTable.Type
|
60
56
|
|
61
|
-
export const
|
57
|
+
export const LEADER_MERGE_COUNTER_TABLE = '__livestore_leader_merge_counter'
|
62
58
|
|
63
|
-
|
59
|
+
export const leaderMergeCounterTable = table({
|
60
|
+
name: LEADER_MERGE_COUNTER_TABLE,
|
61
|
+
columns: {
|
62
|
+
id: SqliteDsl.integer({ primaryKey: true, schema: Schema.Literal(0) }),
|
63
|
+
mergeCounter: SqliteDsl.integer({ primaryKey: true }),
|
64
|
+
},
|
65
|
+
})
|
64
66
|
|
65
|
-
export
|
66
|
-
|
67
|
+
export type LeaderMergeCounterRow = typeof leaderMergeCounterTable.Type
|
68
|
+
|
69
|
+
export const systemTables = [
|
70
|
+
schemaMetaTable,
|
71
|
+
schemaEventDefsMetaTable,
|
72
|
+
sessionChangesetMetaTable,
|
73
|
+
leaderMergeCounterTable,
|
74
|
+
]
|
67
75
|
|
68
|
-
|
76
|
+
/// Eventlog DB
|
77
|
+
|
78
|
+
export const SyncStatus = Schema.Literal('synced', 'pending', 'error', 'clientOnly')
|
79
|
+
export type SyncStatus = typeof SyncStatus.Type
|
69
80
|
|
70
|
-
export const
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
81
|
+
export const EVENTLOG_META_TABLE = 'eventlog'
|
82
|
+
|
83
|
+
export const eventlogMetaTable = table({
|
84
|
+
name: EVENTLOG_META_TABLE,
|
85
|
+
columns: {
|
86
|
+
// TODO Adjust modeling so a global event never needs a client id component
|
87
|
+
idGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventId.GlobalEventId }),
|
88
|
+
idClient: SqliteDsl.integer({ primaryKey: true, schema: EventId.ClientEventId }),
|
89
|
+
parentIdGlobal: SqliteDsl.integer({ schema: EventId.GlobalEventId }),
|
90
|
+
parentIdClient: SqliteDsl.integer({ schema: EventId.ClientEventId }),
|
91
|
+
name: SqliteDsl.text({}),
|
78
92
|
argsJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Any) }),
|
93
|
+
clientId: SqliteDsl.text({}),
|
94
|
+
sessionId: SqliteDsl.text({}),
|
79
95
|
schemaHash: SqliteDsl.integer({}),
|
80
96
|
syncMetadataJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Option(Schema.JsonValue)) }),
|
81
97
|
},
|
82
|
-
|
83
|
-
|
98
|
+
indexes: [
|
99
|
+
{ columns: ['idGlobal'], name: 'idx_eventlog_idGlobal' },
|
100
|
+
{ columns: ['idGlobal', 'idClient'], name: 'idx_eventlog_id' },
|
101
|
+
],
|
102
|
+
})
|
84
103
|
|
85
|
-
export type
|
104
|
+
export type EventlogMetaRow = typeof eventlogMetaTable.Type
|
86
105
|
|
87
106
|
export const SYNC_STATUS_TABLE = '__livestore_sync_status'
|
88
107
|
|
89
|
-
export const syncStatusTable = table(
|
90
|
-
SYNC_STATUS_TABLE,
|
91
|
-
{
|
108
|
+
export const syncStatusTable = table({
|
109
|
+
name: SYNC_STATUS_TABLE,
|
110
|
+
columns: {
|
92
111
|
head: SqliteDsl.integer({ primaryKey: true }),
|
93
112
|
},
|
94
|
-
|
95
|
-
)
|
113
|
+
})
|
96
114
|
|
97
|
-
export type SyncStatusRow =
|
115
|
+
export type SyncStatusRow = typeof syncStatusTable.Type
|
package/src/schema/table-def.ts
CHANGED
@@ -1,31 +1,30 @@
|
|
1
|
-
import type
|
2
|
-
import {
|
3
|
-
import { shouldNeverHappen } from '@livestore/utils'
|
4
|
-
import { ReadonlyRecord, Schema } from '@livestore/utils/effect'
|
1
|
+
import { type Nullable } from '@livestore/utils'
|
2
|
+
import type { Schema, Types } from '@livestore/utils/effect'
|
5
3
|
|
6
|
-
import type { DerivedMutationHelperFns } from '../derived-mutations.js'
|
7
|
-
import { makeDerivedMutationDefsForTable } from '../derived-mutations.js'
|
8
4
|
import type { QueryBuilder } from '../query-builder/mod.js'
|
9
|
-
import { makeQueryBuilder } from '../query-builder/mod.js'
|
5
|
+
import { makeQueryBuilder, QueryBuilderAstSymbol, QueryBuilderTypeId } from '../query-builder/mod.js'
|
6
|
+
import { SqliteDsl } from './db-schema/mod.js'
|
10
7
|
|
11
8
|
export const { blob, boolean, column, datetime, integer, isColumnDefinition, json, real, text } = SqliteDsl
|
12
9
|
|
13
|
-
export { SqliteDsl } from '@livestore/db-schema'
|
14
|
-
|
15
10
|
export type StateType = 'singleton' | 'dynamic'
|
16
11
|
|
17
12
|
export type DefaultSqliteTableDef = SqliteDsl.TableDefinition<string, SqliteDsl.Columns>
|
18
13
|
export type DefaultSqliteTableDefConstrained = SqliteDsl.TableDefinition<string, SqliteDsl.ConstraintColumns>
|
19
14
|
|
15
|
+
// TODO use to hide table def internals
|
16
|
+
export const TableDefInternalsSymbol = Symbol('TableDefInternals')
|
17
|
+
export type TableDefInternalsSymbol = typeof TableDefInternalsSymbol
|
18
|
+
|
20
19
|
export type TableDefBase<
|
21
20
|
TSqliteDef extends DefaultSqliteTableDef = DefaultSqliteTableDefConstrained,
|
22
21
|
TOptions extends TableOptions = TableOptions,
|
23
|
-
TSchema = SqliteDsl.StructSchemaForColumns<TSqliteDef['columns']>,
|
24
22
|
> = {
|
25
23
|
sqliteDef: TSqliteDef
|
26
24
|
options: TOptions
|
27
25
|
// Derived from `sqliteDef`, so only exposed for convenience
|
28
|
-
|
26
|
+
rowSchema: SqliteDsl.StructSchemaForColumns<TSqliteDef['columns']>
|
27
|
+
insertSchema: SqliteDsl.InsertStructSchemaForColumns<TSqliteDef['columns']>
|
29
28
|
}
|
30
29
|
|
31
30
|
export type TableDef<
|
@@ -47,243 +46,79 @@ export type TableDef<
|
|
47
46
|
sqliteDef: TSqliteDef
|
48
47
|
options: TOptions
|
49
48
|
// Derived from `sqliteDef`, so only exposed for convenience
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
:
|
49
|
+
rowSchema: TSchema
|
50
|
+
insertSchema: SqliteDsl.InsertStructSchemaForColumns<TSqliteDef['columns']>
|
51
|
+
// query: QueryBuilder<ReadonlyArray<Schema.Schema.Type<TSchema>>, TableDefBase<TSqliteDef & {}, TOptions>>
|
52
|
+
readonly Type: Schema.Schema.Type<TSchema>
|
53
|
+
readonly Encoded: Schema.Schema.Encoded<TSchema>
|
54
|
+
} & QueryBuilder<ReadonlyArray<Schema.Schema.Type<TSchema>>, TableDefBase<TSqliteDef & {}, TOptions>>
|
55
55
|
|
56
56
|
export type TableOptionsInput = Partial<{
|
57
57
|
indexes: SqliteDsl.Index[]
|
58
|
-
disableAutomaticIdColumn: boolean
|
59
|
-
isSingleton: boolean
|
60
|
-
deriveMutations:
|
61
|
-
| boolean
|
62
|
-
| {
|
63
|
-
enabled: true
|
64
|
-
localOnly?: boolean
|
65
|
-
}
|
66
58
|
}>
|
67
59
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
: TColumns extends SqliteDsl.ColumnDefinition<any, any>
|
72
|
-
? { value: TColumns }
|
73
|
-
: never
|
74
|
-
|
75
|
-
type ValidateTableOptionsInput<
|
76
|
-
TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>,
|
77
|
-
TOptionsInput extends TableOptionsInput,
|
78
|
-
TPassthroughIfValid,
|
79
|
-
> =
|
80
|
-
SqliteDsl.FromColumns.RequiresInsertValues<ToColumns<TColumns>> extends true
|
81
|
-
? TOptionsInput['isSingleton'] extends true
|
82
|
-
? 'Error: To use `isSingleton: true` with this table, each column must have a default value or be nullable'
|
83
|
-
: TPassthroughIfValid
|
84
|
-
: TPassthroughIfValid
|
60
|
+
export namespace TableDef {
|
61
|
+
export type Any = TableDef<any, any>
|
62
|
+
}
|
85
63
|
|
86
64
|
export type TableOptions = {
|
87
|
-
/**
|
88
|
-
* Setting this to true will have the following consequences:
|
89
|
-
* - An `id` column will be added with `primaryKey: true` and `"singleton"` as default value and only allowed value
|
90
|
-
* - LiveStore will automatically create the singleton row when booting up
|
91
|
-
* - LiveStore will fail if there is already a column defined with `primaryKey: true`
|
92
|
-
*
|
93
|
-
* @default false
|
94
|
-
*/
|
95
|
-
readonly isSingleton: boolean
|
96
|
-
|
97
|
-
readonly disableAutomaticIdColumn: boolean
|
98
|
-
|
99
|
-
/**
|
100
|
-
* Setting this to true will automatically derive insert, update and delete mutations for this table. Example:
|
101
|
-
*
|
102
|
-
* ```ts
|
103
|
-
* const todos = table('todos', { ... }, { deriveMutations: true })
|
104
|
-
* todos.insert({ id: '1', text: 'Hello' })
|
105
|
-
* ```
|
106
|
-
*
|
107
|
-
* This is also a prerequisite for using the `useRow`, `useAtom` and `rowQuery` APIs.
|
108
|
-
*
|
109
|
-
* Important: When using this option, make sure you're following the "Rules of mutations" for the table schema.
|
110
|
-
*/
|
111
|
-
readonly deriveMutations:
|
112
|
-
| { enabled: false }
|
113
|
-
| {
|
114
|
-
enabled: true
|
115
|
-
/**
|
116
|
-
* When set to true, the mutations won't be synced over the network
|
117
|
-
*/
|
118
|
-
localOnly: boolean
|
119
|
-
}
|
120
|
-
|
121
65
|
/** Derived based on whether the table definition has one or more columns (besides the `id` column) */
|
122
|
-
readonly
|
123
|
-
|
124
|
-
/**
|
125
|
-
* Derived based on whether the table definition has one or more columns (besides the `id` column) that require
|
126
|
-
* insert values (i.e. are not nullable and don't have a default value)
|
127
|
-
*
|
128
|
-
* `isSingleton` tables always imply `requiresInsertValues: false`
|
129
|
-
*/
|
130
|
-
readonly requiredInsertColumnNames: string
|
66
|
+
readonly isClientDocumentTable: boolean
|
131
67
|
}
|
132
68
|
|
133
69
|
export const table = <
|
134
70
|
TName extends string,
|
135
71
|
TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>,
|
136
|
-
TOptionsInput extends TableOptionsInput = TableOptionsInput,
|
72
|
+
const TOptionsInput extends TableOptionsInput = TableOptionsInput,
|
137
73
|
>(
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
TableDef<
|
145
|
-
SqliteTableDefForInput<TName, TColumns, WithDefaults<TOptionsInput, TColumns>>,
|
146
|
-
WithDefaults<TOptionsInput, TColumns>
|
147
|
-
>
|
148
|
-
> => {
|
74
|
+
args: {
|
75
|
+
name: TName
|
76
|
+
columns: TColumns
|
77
|
+
} & Partial<TOptionsInput>,
|
78
|
+
): TableDef<SqliteTableDefForInput<TName, TColumns>, WithDefaults<TColumns>> => {
|
79
|
+
const { name, columns: columnOrColumns, ...options } = args
|
149
80
|
const tablePath = name
|
150
81
|
|
151
82
|
const options_: TableOptions = {
|
152
|
-
|
153
|
-
disableAutomaticIdColumn: options?.disableAutomaticIdColumn ?? false,
|
154
|
-
deriveMutations:
|
155
|
-
options?.deriveMutations === true
|
156
|
-
? { enabled: true as const, localOnly: false }
|
157
|
-
: options?.deriveMutations === false
|
158
|
-
? { enabled: false as const }
|
159
|
-
: options?.deriveMutations === undefined
|
160
|
-
? { enabled: false as const }
|
161
|
-
: { enabled: true as const, localOnly: options.deriveMutations.localOnly ?? false },
|
162
|
-
isSingleColumn: SqliteDsl.isColumnDefinition(columnOrColumns) === true,
|
163
|
-
requiredInsertColumnNames: 'type-level-only',
|
83
|
+
isClientDocumentTable: false,
|
164
84
|
}
|
165
85
|
|
166
86
|
const columns = (
|
167
87
|
SqliteDsl.isColumnDefinition(columnOrColumns) ? { value: columnOrColumns } : columnOrColumns
|
168
88
|
) as SqliteDsl.Columns
|
169
89
|
|
170
|
-
if (options_.disableAutomaticIdColumn === true) {
|
171
|
-
if (columns.id === undefined && options_.isSingleton === true) {
|
172
|
-
shouldNeverHappen(
|
173
|
-
`Cannot create table ${name} with "isSingleton: true" because there is no column with name "id" and "disableAutomaticIdColumn: true" is set`,
|
174
|
-
)
|
175
|
-
}
|
176
|
-
} else if (columns.id === undefined && ReadonlyRecord.some(columns, (_) => _.primaryKey === true) === false) {
|
177
|
-
if (options_.isSingleton) {
|
178
|
-
columns.id = SqliteDsl.text({ schema: Schema.Literal('singleton'), primaryKey: true, default: 'singleton' })
|
179
|
-
} else {
|
180
|
-
columns.id = SqliteDsl.text({ primaryKey: true })
|
181
|
-
}
|
182
|
-
}
|
183
|
-
|
184
90
|
const sqliteDef = SqliteDsl.table(tablePath, columns, options?.indexes ?? [])
|
185
91
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
}
|
195
|
-
}
|
196
|
-
|
197
|
-
const isSingleColumn = SqliteDsl.isColumnDefinition(columnOrColumns) === true
|
92
|
+
const rowSchema = SqliteDsl.structSchemaForTable(sqliteDef)
|
93
|
+
const insertSchema = SqliteDsl.insertStructSchemaForTable(sqliteDef)
|
94
|
+
const tableDef = {
|
95
|
+
sqliteDef,
|
96
|
+
options: options_,
|
97
|
+
rowSchema,
|
98
|
+
insertSchema,
|
99
|
+
} satisfies TableDefBase
|
198
100
|
|
199
|
-
const schema = SqliteDsl.structSchemaForTable(sqliteDef)
|
200
|
-
const tableDef = { sqliteDef, options: options_, schema } satisfies TableDefBase
|
201
101
|
const query = makeQueryBuilder(tableDef)
|
202
|
-
//
|
102
|
+
// tableDef.query = query
|
203
103
|
|
204
104
|
// NOTE we're currently patching the existing tableDef object
|
205
105
|
// as it's being used as part of the query builder API
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
if (tableHasDerivedMutations(tableDef)) {
|
210
|
-
const derivedMutationDefs = makeDerivedMutationDefsForTable(tableDef)
|
211
|
-
|
212
|
-
tableDef.insert = (valuesOrValue: any) => {
|
213
|
-
if (isSingleColumn && options_.isSingleton) {
|
214
|
-
return derivedMutationDefs.insert({ id: 'singleton', value: { value: valuesOrValue } })
|
215
|
-
} else {
|
216
|
-
return derivedMutationDefs.insert(valuesOrValue as any)
|
217
|
-
}
|
218
|
-
}
|
219
|
-
|
220
|
-
tableDef.update = (argsOrValues: any) => {
|
221
|
-
if (isSingleColumn && options_.isSingleton) {
|
222
|
-
return derivedMutationDefs.update({ where: { id: 'singleton' }, values: { value: argsOrValues } as any })
|
223
|
-
} else {
|
224
|
-
return derivedMutationDefs.update(argsOrValues as any)
|
225
|
-
}
|
226
|
-
}
|
227
|
-
|
228
|
-
tableDef.delete = (args: any) => derivedMutationDefs.delete(args)
|
106
|
+
for (const key of Object.keys(query)) {
|
107
|
+
// @ts-expect-error TODO properly implement this
|
108
|
+
tableDef[key] = query[key]
|
229
109
|
}
|
230
110
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
tableDef: TTableDef,
|
236
|
-
): tableDef is TTableDef & {
|
237
|
-
options: { deriveMutations: { enabled: true; localOnly: boolean } }
|
238
|
-
} & DerivedMutationHelperFns<TTableDef['sqliteDef']['columns'], TTableDef['options']> =>
|
239
|
-
tableDef.options.deriveMutations.enabled === true
|
111
|
+
// @ts-expect-error TODO properly type this
|
112
|
+
tableDef[QueryBuilderAstSymbol] = query[QueryBuilderAstSymbol]
|
113
|
+
// @ts-expect-error TODO properly type this
|
114
|
+
tableDef[QueryBuilderTypeId] = query[QueryBuilderTypeId]
|
240
115
|
|
241
|
-
|
242
|
-
tableDef: TTableDef,
|
243
|
-
): tableDef is TTableDef & { options: { isSingleton: true } } => tableDef.options.isSingleton === true
|
244
|
-
|
245
|
-
type SqliteTableDefForInput<
|
246
|
-
TName extends string,
|
247
|
-
TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>,
|
248
|
-
TOptions extends TableOptions,
|
249
|
-
> = SqliteDsl.TableDefinition<TName, PrettifyFlat<WithId<ToColumns<TColumns>, TOptions>>>
|
250
|
-
|
251
|
-
type WithId<TColumns extends SqliteDsl.Columns, TOptions extends TableOptions> = TColumns &
|
252
|
-
('id' extends keyof TColumns
|
253
|
-
? {}
|
254
|
-
: TOptions['disableAutomaticIdColumn'] extends true
|
255
|
-
? {}
|
256
|
-
: TOptions['isSingleton'] extends true
|
257
|
-
? {
|
258
|
-
id: SqliteDsl.ColumnDefinition<'singleton', 'singleton'>
|
259
|
-
}
|
260
|
-
: {
|
261
|
-
id: SqliteDsl.ColumnDefinition<string, string>
|
262
|
-
})
|
263
|
-
|
264
|
-
type WithDefaults<
|
265
|
-
TOptionsInput extends TableOptionsInput,
|
266
|
-
TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>,
|
267
|
-
> = {
|
268
|
-
isSingleton: TOptionsInput['isSingleton'] extends true ? true : false
|
269
|
-
disableAutomaticIdColumn: TOptionsInput['disableAutomaticIdColumn'] extends true ? true : false
|
270
|
-
deriveMutations: TOptionsInput['deriveMutations'] extends true
|
271
|
-
? { enabled: true; localOnly: boolean }
|
272
|
-
: TOptionsInput['deriveMutations'] extends false
|
273
|
-
? { enabled: false }
|
274
|
-
: TOptionsInput['deriveMutations'] extends { enabled: true; localOnly?: boolean }
|
275
|
-
? {
|
276
|
-
enabled: true
|
277
|
-
localOnly: TOptionsInput['deriveMutations']['localOnly'] extends true ? true : false
|
278
|
-
}
|
279
|
-
: never
|
280
|
-
isSingleColumn: SqliteDsl.IsSingleColumn<TColumns>
|
281
|
-
requiredInsertColumnNames: SqliteDsl.FromColumns.RequiredInsertColumnNames<ToColumns<TColumns>>
|
116
|
+
return tableDef as any
|
282
117
|
}
|
283
118
|
|
284
119
|
export namespace FromTable {
|
285
120
|
// TODO this sometimes doesn't preserve the order of columns
|
286
|
-
export type RowDecoded<TTableDef extends TableDefBase> =
|
121
|
+
export type RowDecoded<TTableDef extends TableDefBase> = Types.Simplify<
|
287
122
|
Nullable<Pick<RowDecodedAll<TTableDef>, NullableColumnNames<TTableDef>>> &
|
288
123
|
Omit<RowDecodedAll<TTableDef>, NullableColumnNames<TTableDef>>
|
289
124
|
>
|
@@ -302,7 +137,7 @@ export namespace FromTable {
|
|
302
137
|
>
|
303
138
|
}
|
304
139
|
|
305
|
-
export type RowEncoded<TTableDef extends TableDefBase> =
|
140
|
+
export type RowEncoded<TTableDef extends TableDefBase> = Types.Simplify<
|
306
141
|
Nullable<Pick<RowEncodeNonNullable<TTableDef>, NullableColumnNames<TTableDef>>> &
|
307
142
|
Omit<RowEncodeNonNullable<TTableDef>, NullableColumnNames<TTableDef>>
|
308
143
|
>
|
@@ -314,7 +149,7 @@ export namespace FromTable {
|
|
314
149
|
|
315
150
|
export namespace FromColumns {
|
316
151
|
// TODO this sometimes doesn't preserve the order of columns
|
317
|
-
export type RowDecoded<TColumns extends SqliteDsl.Columns> =
|
152
|
+
export type RowDecoded<TColumns extends SqliteDsl.Columns> = Types.Simplify<
|
318
153
|
Nullable<Pick<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>> &
|
319
154
|
Omit<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>
|
320
155
|
>
|
@@ -323,7 +158,7 @@ export namespace FromColumns {
|
|
323
158
|
[K in keyof TColumns]: Schema.Schema.Type<TColumns[K]['schema']>
|
324
159
|
}
|
325
160
|
|
326
|
-
export type RowEncoded<TColumns extends SqliteDsl.Columns> =
|
161
|
+
export type RowEncoded<TColumns extends SqliteDsl.Columns> = Types.Simplify<
|
327
162
|
Nullable<Pick<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>> &
|
328
163
|
Omit<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>
|
329
164
|
>
|
@@ -341,3 +176,22 @@ export namespace FromColumns {
|
|
341
176
|
|
342
177
|
export type InsertRowDecoded<TColumns extends SqliteDsl.Columns> = SqliteDsl.FromColumns.InsertRowDecoded<TColumns>
|
343
178
|
}
|
179
|
+
|
180
|
+
type SqliteTableDefForInput<
|
181
|
+
TName extends string,
|
182
|
+
TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>,
|
183
|
+
> = SqliteDsl.TableDefinition<TName, PrettifyFlat<ToColumns<TColumns>>>
|
184
|
+
|
185
|
+
type WithDefaults<TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>> = {
|
186
|
+
isClientDocumentTable: false
|
187
|
+
requiredInsertColumnNames: SqliteDsl.FromColumns.RequiredInsertColumnNames<ToColumns<TColumns>>
|
188
|
+
}
|
189
|
+
|
190
|
+
export type PrettifyFlat<T> = T extends infer U ? { [K in keyof U]: U[K] } : never
|
191
|
+
|
192
|
+
type ToColumns<TColumns extends SqliteDsl.Columns | SqliteDsl.ColumnDefinition<any, any>> =
|
193
|
+
TColumns extends SqliteDsl.Columns
|
194
|
+
? TColumns
|
195
|
+
: TColumns extends SqliteDsl.ColumnDefinition<any, any>
|
196
|
+
? { value: TColumns }
|
197
|
+
: never
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type {
|
1
|
+
import type { SqliteDb } from '../adapter-types.js'
|
2
2
|
import type { ParamsObject } from '../util.js'
|
3
3
|
import { prepareBindValues } from '../util.js'
|
4
4
|
|
@@ -6,7 +6,7 @@ import { prepareBindValues } from '../util.js'
|
|
6
6
|
// will require proper scope-aware cleanup etc (for testing and apps with multiple LiveStore instances)
|
7
7
|
// const cachedStmts = new Map<string, PreparedStatement>()
|
8
8
|
|
9
|
-
export const dbExecute = (db:
|
9
|
+
export const dbExecute = (db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => {
|
10
10
|
// let stmt = cachedStmts.get(queryStr)
|
11
11
|
// if (!stmt) {
|
12
12
|
const stmt = db.prepare(queryStr)
|
@@ -20,7 +20,7 @@ export const dbExecute = (db: SynchronousDatabase, queryStr: string, bindValues?
|
|
20
20
|
stmt.finalize()
|
21
21
|
}
|
22
22
|
|
23
|
-
export const dbSelect = <T>(db:
|
23
|
+
export const dbSelect = <T>(db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => {
|
24
24
|
// let stmt = cachedStmts.get(queryStr)
|
25
25
|
// if (!stmt) {
|
26
26
|
const stmt = db.prepare(queryStr)
|
@@ -33,12 +33,12 @@ export const dbSelect = <T>(db: SynchronousDatabase, queryStr: string, bindValue
|
|
33
33
|
}
|
34
34
|
|
35
35
|
export interface SchemaManager {
|
36
|
-
|
36
|
+
getEventDefInfos: () => ReadonlyArray<EventDefInfo>
|
37
37
|
|
38
|
-
|
38
|
+
setEventDefInfo: (eventDefInfo: EventDefInfo) => void
|
39
39
|
}
|
40
40
|
|
41
|
-
export type
|
42
|
-
|
41
|
+
export type EventDefInfo = {
|
42
|
+
eventName: string
|
43
43
|
schemaHash: number
|
44
44
|
}
|