@livestore/common 0.3.1 → 0.3.2-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +35 -0
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -0
- package/dist/ClientSessionLeaderThreadProxy.js +6 -0
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -0
- package/dist/__tests__/fixture.d.ts +4 -4
- package/dist/__tests__/fixture.js +2 -2
- package/dist/adapter-types.d.ts +11 -162
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +5 -49
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts +2 -2
- package/dist/debug-info.js +2 -2
- package/dist/defs.d.ts +20 -0
- package/dist/defs.d.ts.map +1 -0
- package/dist/defs.js +12 -0
- package/dist/defs.js.map +1 -0
- package/dist/devtools/devtools-messages-client-session.d.ts +29 -27
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +4 -4
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +37 -35
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +4 -4
- package/dist/devtools/devtools-messages.d.ts +3 -3
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -3
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/devtools/mod.d.ts +3 -3
- package/dist/devtools/mod.js +3 -3
- package/dist/errors.d.ts +50 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +36 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +10 -11
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +122 -132
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +4 -4
- package/dist/leader-thread/connection.js +2 -2
- package/dist/leader-thread/eventlog.d.ts +21 -10
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +39 -24
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +3 -3
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +4 -5
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +7 -7
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +44 -14
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +4 -4
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +14 -8
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/mod.d.ts +8 -7
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +8 -7
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +14 -7
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +3 -5
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +1 -1
- package/dist/leader-thread/shutdown-channel.js +1 -1
- package/dist/leader-thread/types.d.ts +8 -10
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/make-client-session.d.ts +3 -3
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +3 -3
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +5 -5
- package/dist/materializer-helper.js +5 -5
- package/dist/rematerialize-from-eventlog.d.ts +4 -4
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +13 -5
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef.d.ts +5 -5
- package/dist/schema/EventDef.d.ts.map +1 -1
- package/dist/schema/EventDef.js +2 -2
- package/dist/schema/EventDef.js.map +1 -1
- package/dist/schema/EventSequenceNumber.d.ts +20 -2
- package/dist/schema/EventSequenceNumber.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber.js +71 -19
- package/dist/schema/EventSequenceNumber.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +89 -4
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/LiveStoreEvent.d.ts +26 -12
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent.js +13 -5
- package/dist/schema/LiveStoreEvent.js.map +1 -1
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +9 -9
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +9 -9
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +4 -4
- package/dist/schema/schema.js +3 -3
- package/dist/schema/state/mod.d.ts +2 -2
- package/dist/schema/state/mod.js +2 -2
- package/dist/schema/state/sqlite/client-document-def.d.ts +5 -5
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +6 -6
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +4 -6
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +2 -2
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +3 -3
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/hash.js +3 -2
- package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/mod.js +2 -2
- package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +7 -7
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +7 -7
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +40 -13
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/astToSql.js +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +20 -25
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +1 -81
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +36 -22
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/mod.js +2 -2
- package/dist/schema/state/sqlite/schema-helpers.d.ts +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +1 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +72 -67
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables.js +11 -20
- package/dist/schema/state/sqlite/system-tables.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.d.ts +3 -3
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +2 -2
- package/dist/schema-management/common.d.ts +2 -2
- package/dist/schema-management/common.js +1 -1
- package/dist/schema-management/migrations.d.ts +6 -4
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +5 -5
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +4 -4
- package/dist/schema-management/validate-schema.js +1 -1
- package/dist/sql-queries/index.d.ts +3 -3
- package/dist/sql-queries/index.js +3 -3
- package/dist/sql-queries/sql-queries.d.ts +2 -2
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js +5 -3
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts +3 -3
- package/dist/sql-queries/sql-query-builder.js +1 -1
- package/dist/sql-queries/types.d.ts +1 -1
- package/dist/sqlite-db-helper.d.ts +2 -2
- package/dist/sqlite-db-helper.js +1 -1
- package/dist/sqlite-types.d.ts +72 -0
- package/dist/sqlite-types.d.ts.map +1 -0
- package/dist/sqlite-types.js +5 -0
- package/dist/sqlite-types.js.map +1 -0
- package/dist/sync/ClientSessionSyncProcessor.d.ts +22 -7
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +43 -21
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/index.d.ts +3 -3
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -3
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/next/compact-events.d.ts +1 -1
- package/dist/sync/next/compact-events.js +4 -4
- package/dist/sync/next/facts.d.ts +3 -3
- package/dist/sync/next/facts.js +2 -2
- package/dist/sync/next/graphology.d.ts.map +1 -1
- package/dist/sync/next/graphology.js +0 -6
- package/dist/sync/next/graphology.js.map +1 -1
- package/dist/sync/next/graphology_.d.ts +1 -1
- package/dist/sync/next/graphology_.d.ts.map +1 -1
- package/dist/sync/next/graphology_.js +1 -1
- package/dist/sync/next/graphology_.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +3 -3
- package/dist/sync/next/history-dag-common.js +2 -2
- package/dist/sync/next/history-dag.d.ts +2 -2
- package/dist/sync/next/history-dag.js +3 -3
- package/dist/sync/next/mod.d.ts +5 -5
- package/dist/sync/next/mod.d.ts.map +1 -1
- package/dist/sync/next/mod.js +5 -5
- package/dist/sync/next/mod.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +4 -4
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +3 -2
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +4 -4
- package/dist/sync/next/test/compact-events.test.js +5 -5
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +3 -3
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +17 -8
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/next/test/mod.d.ts +1 -1
- package/dist/sync/next/test/mod.js +1 -1
- package/dist/sync/sync.d.ts +6 -4
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +4 -1
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +14 -5
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +25 -12
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +20 -21
- 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.js +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +0 -1
- package/dist/util.js.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 -5
- package/src/ClientSessionLeaderThreadProxy.ts +40 -0
- package/src/__tests__/fixture.ts +2 -2
- package/src/adapter-types.ts +21 -167
- package/src/debug-info.ts +2 -2
- package/src/defs.ts +17 -0
- package/src/devtools/devtools-messages-client-session.ts +4 -4
- package/src/devtools/devtools-messages-common.ts +1 -1
- package/src/devtools/devtools-messages-leader.ts +4 -4
- package/src/devtools/devtools-messages.ts +3 -3
- package/src/devtools/mod.ts +3 -3
- package/src/errors.ts +49 -0
- package/src/index.ts +16 -16
- package/src/leader-thread/LeaderSyncProcessor.ts +154 -193
- package/src/leader-thread/connection.ts +5 -5
- package/src/leader-thread/eventlog.ts +89 -67
- package/src/leader-thread/leader-worker-devtools.ts +5 -6
- package/src/leader-thread/make-leader-thread-layer.ts +64 -20
- package/src/leader-thread/materialize-event.ts +17 -10
- package/src/leader-thread/mod.ts +8 -7
- package/src/leader-thread/recreate-db.ts +101 -93
- package/src/leader-thread/shutdown-channel.ts +1 -1
- package/src/leader-thread/types.ts +10 -15
- package/src/make-client-session.ts +5 -6
- package/src/materializer-helper.ts +11 -11
- package/src/rematerialize-from-eventlog.ts +16 -8
- package/src/schema/EventDef.ts +8 -6
- package/src/schema/EventSequenceNumber.test.ts +121 -4
- package/src/schema/EventSequenceNumber.ts +95 -23
- package/src/schema/LiveStoreEvent.ts +23 -7
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +9 -9
- package/src/schema/schema.ts +7 -7
- package/src/schema/state/mod.ts +2 -2
- package/src/schema/state/sqlite/client-document-def.test.ts +9 -7
- package/src/schema/state/sqlite/client-document-def.ts +45 -33
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +1 -1
- package/src/schema/state/sqlite/db-schema/ast/validate.ts +1 -1
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +1 -1
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +2 -2
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +19 -13
- package/src/schema/state/sqlite/db-schema/hash.ts +3 -4
- package/src/schema/state/sqlite/db-schema/mod.ts +2 -2
- package/src/schema/state/sqlite/mod.ts +13 -13
- package/src/schema/state/sqlite/query-builder/api.ts +43 -13
- package/src/schema/state/sqlite/query-builder/astToSql.ts +4 -4
- package/src/schema/state/sqlite/query-builder/impl.test.ts +63 -23
- package/src/schema/state/sqlite/query-builder/impl.ts +23 -28
- package/src/schema/state/sqlite/query-builder/mod.ts +2 -2
- package/src/schema/state/sqlite/schema-helpers.ts +2 -2
- package/src/schema/state/sqlite/system-tables.ts +12 -25
- package/src/schema/state/sqlite/table-def.ts +4 -4
- package/src/schema-management/common.ts +3 -3
- package/src/schema-management/migrations.ts +11 -9
- package/src/schema-management/validate-schema.ts +4 -4
- package/src/sql-queries/index.ts +3 -3
- package/src/sql-queries/sql-queries.ts +6 -4
- package/src/sql-queries/sql-query-builder.ts +4 -4
- package/src/sql-queries/types.ts +1 -1
- package/src/sqlite-db-helper.ts +3 -3
- package/src/sqlite-types.ts +76 -0
- package/src/sync/ClientSessionSyncProcessor.ts +65 -30
- package/src/sync/index.ts +3 -3
- package/src/sync/next/compact-events.ts +5 -5
- package/src/sync/next/facts.ts +4 -4
- package/src/sync/next/graphology.ts +3 -11
- package/src/sync/next/graphology_.ts +1 -1
- package/src/sync/next/history-dag-common.ts +3 -3
- package/src/sync/next/history-dag.ts +3 -3
- package/src/sync/next/mod.ts +5 -5
- package/src/sync/next/rebase-events.ts +7 -6
- package/src/sync/next/test/compact-events.calculator.test.ts +4 -4
- package/src/sync/next/test/compact-events.test.ts +6 -6
- package/src/sync/next/test/event-fixtures.ts +19 -10
- package/src/sync/next/test/mod.ts +1 -1
- package/src/sync/sync.ts +7 -4
- package/src/sync/syncstate.test.ts +25 -22
- package/src/sync/syncstate.ts +33 -12
- package/src/sync/validate-push-payload.ts +2 -2
- package/src/util.ts +0 -1
- package/src/version.ts +1 -1
@@ -1,20 +1,19 @@
|
|
1
|
+
/** biome-ignore-all lint/complexity/noArguments: using arguments is fine here */
|
1
2
|
import { casesHandled, shouldNeverHappen } from '@livestore/utils'
|
2
3
|
import { Match, Option, Predicate, Schema } from '@livestore/utils/effect'
|
3
4
|
|
4
|
-
import type { TableDefBase } from '../table-def.
|
5
|
-
import type { QueryBuilder, QueryBuilderAst } from './api.
|
6
|
-
import { QueryBuilderAstSymbol, QueryBuilderTypeId } from './api.
|
7
|
-
import { astToSql } from './astToSql.
|
5
|
+
import type { TableDefBase } from '../table-def.ts'
|
6
|
+
import type { QueryBuilder, QueryBuilderAst } from './api.ts'
|
7
|
+
import { QueryBuilderAstSymbol, QueryBuilderTypeId } from './api.ts'
|
8
|
+
import { astToSql } from './astToSql.ts'
|
8
9
|
export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
9
10
|
tableDef: TTableDef,
|
10
11
|
ast: QueryBuilderAst = emptyAst(tableDef),
|
11
12
|
): QueryBuilder<TResult, TTableDef, never> => {
|
12
13
|
const api = {
|
13
|
-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
14
14
|
select() {
|
15
15
|
assertSelectQueryBuilderAst(ast)
|
16
16
|
|
17
|
-
// eslint-disable-next-line prefer-rest-params
|
18
17
|
const params = [...arguments]
|
19
18
|
|
20
19
|
// Pluck if there's only one column selected
|
@@ -36,13 +35,12 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
36
35
|
select: { columns },
|
37
36
|
}) as any
|
38
37
|
},
|
39
|
-
//
|
38
|
+
// biome-ignore lint/complexity/useArrowFunction: prefer function over arrow function for this case
|
40
39
|
where: function () {
|
41
40
|
if (ast._tag === 'InsertQuery') return invalidQueryBuilder('Cannot use where with insert')
|
42
41
|
if (ast._tag === 'RowQuery') return invalidQueryBuilder('Cannot use where with row')
|
43
42
|
|
44
43
|
if (arguments.length === 1) {
|
45
|
-
// eslint-disable-next-line prefer-rest-params
|
46
44
|
const params = arguments[0]
|
47
45
|
const newOps = Object.entries(params)
|
48
46
|
.filter(([, value]) => value !== undefined)
|
@@ -68,7 +66,6 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
68
66
|
}
|
69
67
|
}
|
70
68
|
|
71
|
-
// eslint-disable-next-line prefer-rest-params
|
72
69
|
const [col, opOrValue, valueOrUndefined] = arguments
|
73
70
|
const op = valueOrUndefined === undefined ? '=' : opOrValue
|
74
71
|
const value = valueOrUndefined === undefined ? opOrValue : valueOrUndefined
|
@@ -88,14 +85,13 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
88
85
|
}
|
89
86
|
}
|
90
87
|
},
|
91
|
-
|
88
|
+
|
92
89
|
orderBy() {
|
93
90
|
assertSelectQueryBuilderAst(ast)
|
94
91
|
|
95
92
|
if (arguments.length === 0 || arguments.length > 2) return invalidQueryBuilder()
|
96
93
|
|
97
94
|
if (arguments.length === 1) {
|
98
|
-
// eslint-disable-next-line prefer-rest-params
|
99
95
|
const params = arguments[0] as QueryBuilder.OrderByParams<TTableDef>
|
100
96
|
return makeQueryBuilder(tableDef, {
|
101
97
|
...ast,
|
@@ -103,7 +99,6 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
103
99
|
})
|
104
100
|
}
|
105
101
|
|
106
|
-
// eslint-disable-next-line prefer-rest-params
|
107
102
|
const [col, direction] = arguments as any as [keyof TTableDef['sqliteDef']['columns'] & string, 'asc' | 'desc']
|
108
103
|
|
109
104
|
return makeQueryBuilder(tableDef, {
|
@@ -136,7 +131,7 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
136
131
|
),
|
137
132
|
})
|
138
133
|
},
|
139
|
-
first: (
|
134
|
+
first: (behaviour) => {
|
140
135
|
assertSelectQueryBuilderAst(ast)
|
141
136
|
|
142
137
|
if (ast.limit._tag === 'Some') return invalidQueryBuilder(`.first() can't be called after .limit()`)
|
@@ -144,17 +139,16 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
144
139
|
return makeQueryBuilder(tableDef, {
|
145
140
|
...ast,
|
146
141
|
limit: Option.some(1),
|
147
|
-
pickFirst:
|
148
|
-
options?.fallback !== undefined && options.fallback !== 'throws' ? { fallback: options.fallback } : 'throws',
|
142
|
+
pickFirst: { _tag: 'enabled', ...(behaviour ?? { behaviour: 'undefined' }) },
|
149
143
|
})
|
150
144
|
},
|
151
|
-
//
|
145
|
+
//
|
152
146
|
// getOrCreate() {
|
153
147
|
// if (tableDef.options.isClientDocumentTable === false) {
|
154
148
|
// return invalidQueryBuilder(`getOrCreate() is not allowed when table is not a client document table`)
|
155
149
|
// }
|
156
150
|
|
157
|
-
//
|
151
|
+
//
|
158
152
|
// const params = [...arguments]
|
159
153
|
|
160
154
|
// let id: string | number
|
@@ -249,7 +243,7 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
249
243
|
return {
|
250
244
|
[QueryBuilderTypeId]: QueryBuilderTypeId,
|
251
245
|
[QueryBuilderAstSymbol]: ast,
|
252
|
-
|
246
|
+
ResultType: 'only-for-type-inference' as TResult,
|
253
247
|
asSql: () => astToSql(ast),
|
254
248
|
toString: () => {
|
255
249
|
try {
|
@@ -266,7 +260,7 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
266
260
|
const emptyAst = (tableDef: TableDefBase): QueryBuilderAst.SelectQuery => ({
|
267
261
|
_tag: 'SelectQuery',
|
268
262
|
columns: [],
|
269
|
-
pickFirst:
|
263
|
+
pickFirst: { _tag: 'disabled' },
|
270
264
|
select: { columns: [] },
|
271
265
|
orderBy: [],
|
272
266
|
offset: Option.none(),
|
@@ -277,31 +271,29 @@ const emptyAst = (tableDef: TableDefBase): QueryBuilderAst.SelectQuery => ({
|
|
277
271
|
})
|
278
272
|
|
279
273
|
// Helper functions
|
280
|
-
|
274
|
+
|
281
275
|
function assertSelectQueryBuilderAst(ast: QueryBuilderAst): asserts ast is QueryBuilderAst.SelectQuery {
|
282
276
|
if (ast._tag !== 'SelectQuery') {
|
283
|
-
return shouldNeverHappen(
|
277
|
+
return shouldNeverHappen(`Expected SelectQuery but got ${ast._tag}`)
|
284
278
|
}
|
285
279
|
}
|
286
280
|
|
287
|
-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
288
281
|
function assertInsertQueryBuilderAst(ast: QueryBuilderAst): asserts ast is QueryBuilderAst.InsertQuery {
|
289
282
|
if (ast._tag !== 'InsertQuery') {
|
290
|
-
return shouldNeverHappen(
|
283
|
+
return shouldNeverHappen(`Expected InsertQuery but got ${ast._tag}`)
|
291
284
|
}
|
292
285
|
}
|
293
286
|
|
294
|
-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
295
287
|
function assertWriteQueryBuilderAst(ast: QueryBuilderAst): asserts ast is QueryBuilderAst.WriteQuery {
|
296
288
|
if (ast._tag !== 'InsertQuery' && ast._tag !== 'UpdateQuery' && ast._tag !== 'DeleteQuery') {
|
297
|
-
return shouldNeverHappen(
|
289
|
+
return shouldNeverHappen(`Expected WriteQuery but got ${ast._tag}`)
|
298
290
|
}
|
299
291
|
}
|
300
292
|
|
301
293
|
const isRowQuery = (ast: QueryBuilderAst): ast is QueryBuilderAst.RowQuery => ast._tag === 'RowQuery'
|
302
294
|
|
303
295
|
export const invalidQueryBuilder = (msg?: string) => {
|
304
|
-
return shouldNeverHappen(
|
296
|
+
return shouldNeverHappen(`Invalid query builder${msg ? `: ${msg}` : ''}`)
|
305
297
|
}
|
306
298
|
|
307
299
|
export const getResultSchema = (qb: QueryBuilder<any, any, any>): Schema.Schema<any> => {
|
@@ -309,9 +301,12 @@ export const getResultSchema = (qb: QueryBuilder<any, any, any>): Schema.Schema<
|
|
309
301
|
switch (queryAst._tag) {
|
310
302
|
case 'SelectQuery': {
|
311
303
|
const arraySchema = Schema.Array(queryAst.resultSchemaSingle)
|
312
|
-
if (queryAst.pickFirst ===
|
304
|
+
if (queryAst.pickFirst._tag === 'disabled') {
|
313
305
|
return arraySchema
|
314
|
-
} else if (queryAst.pickFirst === '
|
306
|
+
} else if (queryAst.pickFirst.behaviour === 'undefined') {
|
307
|
+
const arraySchema = Schema.Array(Schema.UndefinedOr(queryAst.resultSchemaSingle))
|
308
|
+
return arraySchema.pipe(Schema.headOrElse(() => undefined))
|
309
|
+
} else if (queryAst.pickFirst.behaviour === 'error') {
|
315
310
|
// Will throw if the array is empty
|
316
311
|
return arraySchema.pipe(Schema.headOrElse())
|
317
312
|
} else {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
2
2
|
import { pipe, ReadonlyRecord, Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import { SqliteDsl } from './db-schema/mod.
|
5
|
-
import type { TableDef, TableDefBase } from './table-def.
|
4
|
+
import { SqliteDsl } from './db-schema/mod.ts'
|
5
|
+
import type { TableDef, TableDefBase } from './table-def.ts'
|
6
6
|
|
7
7
|
export const getDefaultValuesEncoded = <TTableDef extends TableDef>(
|
8
8
|
tableDef: TTableDef,
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
2
2
|
|
3
|
-
import * as EventSequenceNumber from '../../EventSequenceNumber.
|
4
|
-
import { SqliteDsl } from './db-schema/mod.
|
5
|
-
import { table } from './table-def.
|
3
|
+
import * as EventSequenceNumber from '../../EventSequenceNumber.ts'
|
4
|
+
import { SqliteDsl } from './db-schema/mod.ts'
|
5
|
+
import { table } from './table-def.ts'
|
6
6
|
|
7
|
-
///
|
7
|
+
/// State DB
|
8
8
|
|
9
9
|
export const SCHEMA_META_TABLE = '__livestore_schema'
|
10
10
|
|
@@ -46,6 +46,7 @@ export const sessionChangesetMetaTable = table({
|
|
46
46
|
// TODO bring back primary key
|
47
47
|
seqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
48
48
|
seqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
49
|
+
seqNumRebaseGeneration: SqliteDsl.integer({}),
|
49
50
|
changeset: SqliteDsl.blob({ nullable: true }),
|
50
51
|
debug: SqliteDsl.json({ nullable: true }),
|
51
52
|
},
|
@@ -54,25 +55,7 @@ export const sessionChangesetMetaTable = table({
|
|
54
55
|
|
55
56
|
export type SessionChangesetMetaRow = typeof sessionChangesetMetaTable.Type
|
56
57
|
|
57
|
-
export const
|
58
|
-
|
59
|
-
// TODO get rid of this table in favour of client-only merge generation
|
60
|
-
export const leaderMergeCounterTable = table({
|
61
|
-
name: LEADER_MERGE_COUNTER_TABLE,
|
62
|
-
columns: {
|
63
|
-
id: SqliteDsl.integer({ primaryKey: true, schema: Schema.Literal(0) }),
|
64
|
-
mergeCounter: SqliteDsl.integer({ primaryKey: true }),
|
65
|
-
},
|
66
|
-
})
|
67
|
-
|
68
|
-
export type LeaderMergeCounterRow = typeof leaderMergeCounterTable.Type
|
69
|
-
|
70
|
-
export const stateSystemTables = [
|
71
|
-
schemaMetaTable,
|
72
|
-
schemaEventDefsMetaTable,
|
73
|
-
sessionChangesetMetaTable,
|
74
|
-
leaderMergeCounterTable,
|
75
|
-
]
|
58
|
+
export const stateSystemTables = [schemaMetaTable, schemaEventDefsMetaTable, sessionChangesetMetaTable] as const
|
76
59
|
|
77
60
|
export const isStateSystemTable = (tableName: string) => stateSystemTables.some((_) => _.sqliteDef.name === tableName)
|
78
61
|
|
@@ -86,8 +69,11 @@ export const eventlogMetaTable = table({
|
|
86
69
|
// TODO Adjust modeling so a global event never needs a client id component
|
87
70
|
seqNumGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
88
71
|
seqNumClient: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
72
|
+
seqNumRebaseGeneration: SqliteDsl.integer({ primaryKey: true }),
|
89
73
|
parentSeqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
|
90
74
|
parentSeqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
|
75
|
+
parentSeqNumRebaseGeneration: SqliteDsl.integer({}),
|
76
|
+
/** Event definition name */
|
91
77
|
name: SqliteDsl.text({}),
|
92
78
|
argsJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Any) }),
|
93
79
|
clientId: SqliteDsl.text({}),
|
@@ -97,7 +83,7 @@ export const eventlogMetaTable = table({
|
|
97
83
|
},
|
98
84
|
indexes: [
|
99
85
|
{ columns: ['seqNumGlobal'], name: 'idx_eventlog_seqNumGlobal' },
|
100
|
-
{ columns: ['seqNumGlobal', 'seqNumClient'], name: 'idx_eventlog_seqNum' },
|
86
|
+
{ columns: ['seqNumGlobal', 'seqNumClient', 'seqNumRebaseGeneration'], name: 'idx_eventlog_seqNum' },
|
101
87
|
],
|
102
88
|
})
|
103
89
|
|
@@ -105,6 +91,7 @@ export type EventlogMetaRow = typeof eventlogMetaTable.Type
|
|
105
91
|
|
106
92
|
export const SYNC_STATUS_TABLE = '__livestore_sync_status'
|
107
93
|
|
94
|
+
// TODO support sync backend identity (to detect if sync backend changes)
|
108
95
|
export const syncStatusTable = table({
|
109
96
|
name: SYNC_STATUS_TABLE,
|
110
97
|
columns: {
|
@@ -114,4 +101,4 @@ export const syncStatusTable = table({
|
|
114
101
|
|
115
102
|
export type SyncStatusRow = typeof syncStatusTable.Type
|
116
103
|
|
117
|
-
export const eventlogSystemTables = [eventlogMetaTable, syncStatusTable]
|
104
|
+
export const eventlogSystemTables = [eventlogMetaTable, syncStatusTable] as const
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import {
|
1
|
+
import type { Nullable } from '@livestore/utils'
|
2
2
|
import type { Schema, Types } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import { SqliteDsl } from './db-schema/mod.
|
5
|
-
import type { QueryBuilder } from './query-builder/mod.
|
6
|
-
import { makeQueryBuilder, QueryBuilderAstSymbol, QueryBuilderTypeId } from './query-builder/mod.
|
4
|
+
import { SqliteDsl } from './db-schema/mod.ts'
|
5
|
+
import type { QueryBuilder } from './query-builder/mod.ts'
|
6
|
+
import { makeQueryBuilder, QueryBuilderAstSymbol, QueryBuilderTypeId } from './query-builder/mod.ts'
|
7
7
|
|
8
8
|
export const { blob, boolean, column, datetime, integer, isColumnDefinition, json, real, text } = SqliteDsl
|
9
9
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import type { SqliteDb } from '../adapter-types.
|
2
|
-
import type { ParamsObject } from '../util.
|
3
|
-
import { prepareBindValues } from '../util.
|
1
|
+
import type { SqliteDb } from '../adapter-types.ts'
|
2
|
+
import type { ParamsObject } from '../util.ts'
|
3
|
+
import { prepareBindValues } from '../util.ts'
|
4
4
|
|
5
5
|
// TODO bring back statement caching
|
6
6
|
// will require proper scope-aware cleanup etc (for testing and apps with multiple LiveStore instances)
|
@@ -1,21 +1,23 @@
|
|
1
1
|
import { memoizeByStringifyArgs } from '@livestore/utils'
|
2
2
|
import { Effect, Schema as EffectSchema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type {
|
5
|
-
import type {
|
6
|
-
import {
|
7
|
-
import type {
|
4
|
+
import type { SqliteDb } from '../adapter-types.ts'
|
5
|
+
import type { MigrationsReport, MigrationsReportEntry } from '../defs.ts'
|
6
|
+
import type { UnexpectedError } from '../errors.ts'
|
7
|
+
import type { LiveStoreSchema } from '../schema/mod.ts'
|
8
|
+
import { SqliteAst, SqliteDsl } from '../schema/state/sqlite/db-schema/mod.ts'
|
9
|
+
import type { SchemaEventDefsMetaRow, SchemaMetaRow } from '../schema/state/sqlite/system-tables.ts'
|
8
10
|
import {
|
9
11
|
isStateSystemTable,
|
10
12
|
SCHEMA_EVENT_DEFS_META_TABLE,
|
11
13
|
SCHEMA_META_TABLE,
|
12
14
|
schemaEventDefsMetaTable,
|
13
15
|
stateSystemTables,
|
14
|
-
} from '../schema/state/sqlite/system-tables.
|
15
|
-
import { sql } from '../util.
|
16
|
-
import type { SchemaManager } from './common.
|
17
|
-
import { dbExecute, dbSelect } from './common.
|
18
|
-
import { validateSchema } from './validate-schema.
|
16
|
+
} from '../schema/state/sqlite/system-tables.ts'
|
17
|
+
import { sql } from '../util.ts'
|
18
|
+
import type { SchemaManager } from './common.ts'
|
19
|
+
import { dbExecute, dbSelect } from './common.ts'
|
20
|
+
import { validateSchema } from './validate-schema.ts'
|
19
21
|
|
20
22
|
const getMemoizedTimestamp = memoizeByStringifyArgs(() => new Date().toISOString())
|
21
23
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { Effect, Schema } from '@livestore/utils/effect'
|
2
2
|
|
3
|
-
import { UnexpectedError } from '../adapter-types.
|
4
|
-
import type { EventDef } from '../schema/EventDef.
|
5
|
-
import type { LiveStoreSchema } from '../schema/mod.
|
6
|
-
import type { EventDefInfo, SchemaManager } from './common.
|
3
|
+
import { UnexpectedError } from '../adapter-types.ts'
|
4
|
+
import type { EventDef } from '../schema/EventDef.ts'
|
5
|
+
import type { LiveStoreSchema } from '../schema/mod.ts'
|
6
|
+
import type { EventDefInfo, SchemaManager } from './common.ts'
|
7
7
|
|
8
8
|
export const validateSchema = (schema: LiveStoreSchema, schemaManager: SchemaManager) =>
|
9
9
|
Effect.gen(function* () {
|
package/src/sql-queries/index.ts
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
export * from './sql-queries.
|
2
|
-
export * from './sql-query-builder.
|
3
|
-
export * from './types.
|
1
|
+
export * from './sql-queries.ts'
|
2
|
+
export * from './sql-query-builder.ts'
|
3
|
+
export * from './types.ts'
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
2
2
|
import { pipe, ReadonlyArray, Schema, TreeFormatter } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.
|
5
|
-
import { sql } from '../util.
|
6
|
-
import { objectEntries } from './misc.
|
7
|
-
import * as ClientTypes from './types.
|
4
|
+
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.ts'
|
5
|
+
import { sql } from '../util.ts'
|
6
|
+
import { objectEntries } from './misc.ts'
|
7
|
+
import * as ClientTypes from './types.ts'
|
8
8
|
|
9
9
|
export type BindValues = {
|
10
10
|
readonly [columnName: string]: any
|
@@ -106,6 +106,7 @@ export const insertRows = <TColumns extends SqliteDsl.Columns>({
|
|
106
106
|
|
107
107
|
const bindValues = valuesArray.reduce(
|
108
108
|
(acc, values, itemIndex) => ({
|
109
|
+
// biome-ignore lint/performance/noAccumulatingSpread: TODO improve this some day
|
109
110
|
...acc,
|
110
111
|
...makeBindValues({ columns, values, variablePrefix: `item_${itemIndex}_` }),
|
111
112
|
}),
|
@@ -292,6 +293,7 @@ Error: ${parseErrorStr}
|
|
292
293
|
Value:`,
|
293
294
|
value,
|
294
295
|
)
|
296
|
+
// biome-ignore lint/suspicious/noDebugger: debug
|
295
297
|
debugger
|
296
298
|
throw res.left
|
297
299
|
} else {
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.
|
2
|
-
import type { BindValues } from './sql-queries.
|
3
|
-
import * as SqlQueries from './sql-queries.
|
4
|
-
import type * as ClientTypes from './types.
|
1
|
+
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.ts'
|
2
|
+
import type { BindValues } from './sql-queries.ts'
|
3
|
+
import * as SqlQueries from './sql-queries.ts'
|
4
|
+
import type * as ClientTypes from './types.ts'
|
5
5
|
|
6
6
|
export type SqlQuery = [stmt: string, bindValues: BindValues, tableName: string]
|
7
7
|
|
package/src/sql-queries/types.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { Prettify } from '@livestore/utils'
|
2
2
|
import type { Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.
|
4
|
+
import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.ts'
|
5
5
|
|
6
6
|
export type DecodedValuesForTableAll<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = {
|
7
7
|
[K in keyof GetColumns<TSchema, TTableName>]: Schema.Schema.Type<GetColumn<TSchema, TTableName, K>['schema']>
|
package/src/sqlite-db-helper.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
2
2
|
|
3
|
-
import type { SqliteDb } from './adapter-types.
|
4
|
-
import { getResultSchema, isQueryBuilder } from './schema/state/sqlite/query-builder/mod.
|
5
|
-
import type { PreparedBindValues } from './util.
|
3
|
+
import type { SqliteDb } from './adapter-types.ts'
|
4
|
+
import { getResultSchema, isQueryBuilder } from './schema/state/sqlite/query-builder/mod.ts'
|
5
|
+
import type { PreparedBindValues } from './util.ts'
|
6
6
|
|
7
7
|
export const makeExecute = (
|
8
8
|
execute: (
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import { type Effect, Schema } from '@livestore/utils/effect'
|
2
|
+
import type { SqliteError, UnexpectedError } from './errors.ts'
|
3
|
+
import type { EventSequenceNumber } from './schema/mod.ts'
|
4
|
+
import type { QueryBuilder } from './schema/state/sqlite/query-builder/api.ts'
|
5
|
+
import type { PreparedBindValues } from './util.ts'
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Common interface for SQLite databases used by LiveStore to facilitate a consistent API across different platforms.
|
9
|
+
* Always assumes a synchronous SQLite build with the `bytecode` and `session` extensions enabled.
|
10
|
+
* Can be either in-memory or persisted to disk.
|
11
|
+
*/
|
12
|
+
export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
|
13
|
+
_tag: 'SqliteDb'
|
14
|
+
metadata: TMetadata
|
15
|
+
/** Debug information (currently not persisted and only available at runtime) */
|
16
|
+
debug: SqliteDebugInfo
|
17
|
+
prepare(queryStr: string): PreparedStatement
|
18
|
+
execute(
|
19
|
+
queryStr: string,
|
20
|
+
bindValues?: PreparedBindValues | undefined,
|
21
|
+
options?: { onRowsChanged?: (rowsChanged: number) => void },
|
22
|
+
): void
|
23
|
+
execute(queryBuilder: QueryBuilder.Any, options?: { onRowsChanged?: (rowsChanged: number) => void }): void
|
24
|
+
|
25
|
+
select<T>(queryStr: string, bindValues?: PreparedBindValues | undefined): ReadonlyArray<T>
|
26
|
+
select<T>(queryBuilder: QueryBuilder<T, any, any>): T
|
27
|
+
|
28
|
+
export(): Uint8Array
|
29
|
+
import: (data: Uint8Array | SqliteDb<TReq>) => void
|
30
|
+
close(): void
|
31
|
+
destroy(): void
|
32
|
+
session(): SqliteDbSession
|
33
|
+
makeChangeset: (data: Uint8Array) => SqliteDbChangeset
|
34
|
+
}
|
35
|
+
|
36
|
+
export type SqliteDebugInfo = { head: EventSequenceNumber.EventSequenceNumber }
|
37
|
+
|
38
|
+
// TODO refactor this helper type. It's quite cumbersome to use and should be revisited.
|
39
|
+
export type MakeSqliteDb<
|
40
|
+
TReq = { dbPointer: number; persistenceInfo: PersistenceInfo },
|
41
|
+
TInput_ extends { _tag: string } = { _tag: string },
|
42
|
+
TMetadata_ extends TReq = TReq,
|
43
|
+
R = never,
|
44
|
+
> = <
|
45
|
+
TInput extends TInput_,
|
46
|
+
TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
|
47
|
+
>(
|
48
|
+
input: TInput,
|
49
|
+
) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnexpectedError, R>
|
50
|
+
|
51
|
+
export interface PreparedStatement {
|
52
|
+
execute(bindValues: PreparedBindValues | undefined, options?: { onRowsChanged?: (rowsChanged: number) => void }): void
|
53
|
+
select<T>(bindValues: PreparedBindValues | undefined): ReadonlyArray<T>
|
54
|
+
finalize(): void
|
55
|
+
sql: string
|
56
|
+
}
|
57
|
+
|
58
|
+
export type SqliteDbSession = {
|
59
|
+
changeset: () => Uint8Array | undefined
|
60
|
+
finish: () => void
|
61
|
+
}
|
62
|
+
|
63
|
+
export type SqliteDbChangeset = {
|
64
|
+
// TODO combining changesets (requires changes in the SQLite WASM binding)
|
65
|
+
invert: () => SqliteDbChangeset
|
66
|
+
apply: () => void
|
67
|
+
}
|
68
|
+
|
69
|
+
export const PersistenceInfo = Schema.Struct(
|
70
|
+
{
|
71
|
+
fileName: Schema.String,
|
72
|
+
},
|
73
|
+
{ key: Schema.String, value: Schema.Any },
|
74
|
+
).annotations({ title: 'LiveStore.PersistenceInfo' })
|
75
|
+
|
76
|
+
export type PersistenceInfo<With extends {} = {}> = typeof PersistenceInfo.Type & With
|