@livestore/common 0.4.0-dev.17 → 0.4.0-dev.19
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 +10 -10
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/adapter-types.d.ts +5 -5
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +28 -23
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +2 -2
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +33 -28
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +8 -8
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/errors.d.ts +6 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -7
- package/dist/errors.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +2 -2
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +28 -28
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +13 -13
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +12 -11
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +2 -2
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +3 -3
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +2 -2
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +10 -8
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +1 -1
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +2 -2
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +5 -5
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +15 -15
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/make-client-session.d.ts +2 -2
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/materializer-helper.d.ts +5 -5
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +2 -2
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +6 -6
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef/define.d.ts +147 -0
- package/dist/schema/EventDef/define.d.ts.map +1 -0
- package/dist/schema/EventDef/define.js +139 -0
- package/dist/schema/EventDef/define.js.map +1 -0
- package/dist/schema/EventDef/event-def.d.ts +106 -0
- package/dist/schema/EventDef/event-def.d.ts.map +1 -0
- package/dist/schema/EventDef/event-def.js +2 -0
- package/dist/schema/EventDef/event-def.js.map +1 -0
- package/dist/schema/EventDef/facts.d.ts +118 -0
- package/dist/schema/EventDef/facts.d.ts.map +1 -0
- package/dist/schema/EventDef/facts.js +53 -0
- package/dist/schema/EventDef/facts.js.map +1 -0
- package/dist/schema/EventDef/materializer.d.ts +155 -0
- package/dist/schema/EventDef/materializer.d.ts.map +1 -0
- package/dist/schema/EventDef/materializer.js +83 -0
- package/dist/schema/EventDef/materializer.js.map +1 -0
- package/dist/schema/EventDef/mod.d.ts +5 -0
- package/dist/schema/EventDef/mod.d.ts.map +1 -0
- package/dist/schema/EventDef/mod.js +5 -0
- package/dist/schema/EventDef/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
- package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
- package/dist/schema/{EventSequenceNumber.js → EventSequenceNumber/client.js} +86 -39
- package/dist/schema/EventSequenceNumber/client.js.map +1 -0
- package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
- package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/global.js +14 -0
- package/dist/schema/EventSequenceNumber/global.js.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
- package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
- package/dist/schema/EventSequenceNumber/mod.js +37 -0
- package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
- package/dist/schema/EventSequenceNumber.test.js +41 -41
- package/dist/schema/EventSequenceNumber.test.js.map +1 -1
- package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +84 -101
- package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
- package/dist/schema/{LiveStoreEvent.js → LiveStoreEvent/client.js} +69 -52
- package/dist/schema/LiveStoreEvent/client.js.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
- package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
- package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
- package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
- package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/global.js +31 -0
- package/dist/schema/LiveStoreEvent/global.js.map +1 -0
- package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
- package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/input.js +26 -0
- package/dist/schema/LiveStoreEvent/input.js.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
- package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
- package/dist/schema/LiveStoreEvent/mod.js +5 -0
- package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +3 -3
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +3 -3
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +1 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +2 -2
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +60 -28
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +12 -1
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +1 -1
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +12 -8
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.js +18 -11
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +0 -1
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +119 -90
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +5 -5
- package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables/state-tables.js +3 -3
- package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +3 -3
- package/dist/schema/unknown-events.d.ts.map +1 -1
- package/dist/schema-management/migrations.d.ts +2 -2
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +3 -3
- package/dist/schema-management/validate-schema.d.ts.map +1 -1
- package/dist/schema-management/validate-schema.js +2 -2
- package/dist/schema-management/validate-schema.js.map +1 -1
- package/dist/sqlite-types.d.ts +3 -3
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +5 -5
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +12 -12
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +9 -4
- package/dist/sync/errors.d.ts.map +1 -1
- package/dist/sync/errors.js +6 -6
- package/dist/sync/errors.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +6 -6
- package/dist/sync/mock-sync-backend.d.ts.map +1 -1
- package/dist/sync/mock-sync-backend.js +4 -4
- package/dist/sync/mock-sync-backend.js.map +1 -1
- package/dist/sync/next/compact-events.js +2 -2
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts +5 -5
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +5 -5
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +5 -5
- 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 +8 -8
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +5 -5
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +5 -5
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/event-fixtures.d.ts +2 -2
- package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/event-fixtures.js +9 -9
- package/dist/sync/next/test/event-fixtures.js.map +1 -1
- package/dist/sync/sync-backend-kv.d.ts +3 -3
- package/dist/sync/sync-backend-kv.d.ts.map +1 -1
- package/dist/sync/sync-backend-kv.js +3 -3
- package/dist/sync/sync-backend-kv.js.map +1 -1
- package/dist/sync/sync-backend.d.ts +9 -9
- package/dist/sync/sync-backend.d.ts.map +1 -1
- package/dist/sync/syncstate.d.ts +55 -42
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +42 -42
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +40 -40
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +1 -1
- 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/testing/event-factory.d.ts +3 -3
- package/dist/testing/event-factory.d.ts.map +1 -1
- package/dist/testing/event-factory.js +5 -7
- package/dist/testing/event-factory.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/ClientSessionLeaderThreadProxy.ts +10 -10
- package/src/adapter-types.ts +5 -5
- package/src/devtools/devtools-messages-client-session.ts +2 -2
- package/src/devtools/devtools-messages-leader.ts +8 -8
- package/src/errors.ts +11 -13
- package/src/leader-thread/LeaderSyncProcessor.ts +54 -56
- package/src/leader-thread/eventlog.ts +21 -26
- package/src/leader-thread/leader-worker-devtools.ts +3 -3
- package/src/leader-thread/make-leader-thread-layer.ts +12 -10
- package/src/leader-thread/materialize-event.ts +3 -3
- package/src/leader-thread/recreate-db.ts +6 -6
- package/src/leader-thread/shutdown-channel.ts +2 -2
- package/src/leader-thread/types.ts +15 -15
- package/src/make-client-session.ts +2 -2
- package/src/materializer-helper.ts +5 -5
- package/src/rematerialize-from-eventlog.ts +6 -6
- package/src/schema/EventDef/define.ts +201 -0
- package/src/schema/EventDef/event-def.ts +120 -0
- package/src/schema/EventDef/facts.ts +135 -0
- package/src/schema/EventDef/materializer.ts +172 -0
- package/src/schema/EventDef/mod.ts +4 -0
- package/src/schema/EventSequenceNumber/client.ts +257 -0
- package/src/schema/EventSequenceNumber/global.ts +19 -0
- package/src/schema/EventSequenceNumber/mod.ts +37 -0
- package/src/schema/EventSequenceNumber.test.ts +68 -50
- package/src/schema/LiveStoreEvent/client.ts +221 -0
- package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
- package/src/schema/LiveStoreEvent/global.ts +45 -0
- package/src/schema/LiveStoreEvent/input.ts +63 -0
- package/src/schema/LiveStoreEvent/mod.ts +4 -0
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +3 -3
- package/src/schema/schema.ts +1 -1
- package/src/schema/state/sqlite/client-document-def.test.ts +2 -2
- package/src/schema/state/sqlite/client-document-def.ts +3 -3
- package/src/schema/state/sqlite/column-def.test.ts +18 -1
- package/src/schema/state/sqlite/column-def.ts +73 -30
- package/src/schema/state/sqlite/mod.ts +2 -2
- package/src/schema/state/sqlite/query-builder/api.ts +12 -8
- package/src/schema/state/sqlite/query-builder/astToSql.ts +20 -11
- package/src/schema/state/sqlite/query-builder/impl.test.ts +122 -90
- package/src/schema/state/sqlite/query-builder/impl.ts +0 -1
- package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +5 -5
- package/src/schema/state/sqlite/system-tables/state-tables.ts +3 -3
- package/src/schema/unknown-events.ts +3 -3
- package/src/schema-management/migrations.ts +2 -2
- package/src/schema-management/validate-schema.ts +3 -3
- package/src/sqlite-types.ts +3 -3
- package/src/sync/ClientSessionSyncProcessor.ts +17 -17
- package/src/sync/errors.ts +6 -6
- package/src/sync/mock-sync-backend.ts +16 -16
- package/src/sync/next/compact-events.ts +2 -2
- package/src/sync/next/facts.ts +6 -6
- package/src/sync/next/history-dag-common.ts +8 -8
- package/src/sync/next/history-dag.ts +14 -10
- package/src/sync/next/rebase-events.ts +11 -11
- package/src/sync/next/test/event-fixtures.ts +11 -11
- package/src/sync/sync-backend-kv.ts +3 -3
- package/src/sync/sync-backend.ts +9 -9
- package/src/sync/syncstate.test.ts +46 -46
- package/src/sync/syncstate.ts +59 -55
- package/src/sync/validate-push-payload.ts +4 -4
- package/src/testing/event-factory.ts +10 -12
- package/src/version.ts +1 -1
- package/dist/schema/EventDef.d.ts +0 -126
- package/dist/schema/EventDef.d.ts.map +0 -1
- package/dist/schema/EventDef.js +0 -46
- package/dist/schema/EventDef.js.map +0 -1
- package/dist/schema/EventSequenceNumber.d.ts +0 -89
- package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
- package/dist/schema/EventSequenceNumber.js.map +0 -1
- package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
- package/dist/schema/LiveStoreEvent.js.map +0 -1
- package/src/schema/EventDef.ts +0 -222
- package/src/schema/EventSequenceNumber.ts +0 -208
- package/src/schema/LiveStoreEvent.ts +0 -286
|
@@ -73,7 +73,15 @@ const issue = State.SQLite.table({
|
|
|
73
73
|
],
|
|
74
74
|
})
|
|
75
75
|
|
|
76
|
-
const
|
|
76
|
+
const selections = State.SQLite.table({
|
|
77
|
+
name: 'selections',
|
|
78
|
+
columns: {
|
|
79
|
+
id: State.SQLite.integer({ primaryKey: true }),
|
|
80
|
+
group: State.SQLite.text({}),
|
|
81
|
+
},
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
const db = { todos, todosWithIntId, comments, issue, selections, UiState, UiStateWithDefaultId }
|
|
77
85
|
|
|
78
86
|
const dump = (qb: QueryBuilder<any, any, any>) => ({
|
|
79
87
|
bindValues: qb.asSql().bindValues,
|
|
@@ -95,7 +103,7 @@ describe('query builder', () => {
|
|
|
95
103
|
expect(dump(db.todos.select('id'))).toMatchInlineSnapshot(`
|
|
96
104
|
{
|
|
97
105
|
"bindValues": [],
|
|
98
|
-
"query": "SELECT id FROM 'todos'",
|
|
106
|
+
"query": "SELECT "id" FROM 'todos'",
|
|
99
107
|
"schema": "ReadonlyArray<({ readonly id: string } <-> string)>",
|
|
100
108
|
}
|
|
101
109
|
`)
|
|
@@ -103,7 +111,7 @@ describe('query builder', () => {
|
|
|
103
111
|
expect(dump(db.todos.select('id', 'text'))).toMatchInlineSnapshot(`
|
|
104
112
|
{
|
|
105
113
|
"bindValues": [],
|
|
106
|
-
"query": "SELECT id, text FROM 'todos'",
|
|
114
|
+
"query": "SELECT "id", "text" FROM 'todos'",
|
|
107
115
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
108
116
|
}
|
|
109
117
|
`)
|
|
@@ -115,7 +123,7 @@ describe('query builder', () => {
|
|
|
115
123
|
"bindValues": [
|
|
116
124
|
1,
|
|
117
125
|
],
|
|
118
|
-
"query": "SELECT id, text FROM 'todos' LIMIT ?",
|
|
126
|
+
"query": "SELECT "id", "text" FROM 'todos' LIMIT ?",
|
|
119
127
|
"schema": "(ReadonlyArray<{ readonly id: string; readonly text: string } | undefined> <-> { readonly id: string; readonly text: string } | undefined)",
|
|
120
128
|
}
|
|
121
129
|
`)
|
|
@@ -125,7 +133,7 @@ describe('query builder', () => {
|
|
|
125
133
|
"bindValues": [
|
|
126
134
|
1,
|
|
127
135
|
],
|
|
128
|
-
"query": "SELECT id, text FROM 'todos' LIMIT ?",
|
|
136
|
+
"query": "SELECT "id", "text" FROM 'todos' LIMIT ?",
|
|
129
137
|
"schema": "(ReadonlyArray<{ readonly id: string; readonly text: string }> <-> { readonly id: string; readonly text: string })",
|
|
130
138
|
}
|
|
131
139
|
`)
|
|
@@ -137,7 +145,7 @@ describe('query builder', () => {
|
|
|
137
145
|
"bindValues": [
|
|
138
146
|
1,
|
|
139
147
|
],
|
|
140
|
-
"query": "SELECT id, text FROM 'todos' LIMIT ?",
|
|
148
|
+
"query": "SELECT "id", "text" FROM 'todos' LIMIT ?",
|
|
141
149
|
"schema": "(ReadonlyArray<{ readonly id: string; readonly text: string }> | readonly [undefined] <-> { readonly id: string; readonly text: string } | undefined)",
|
|
142
150
|
}
|
|
143
151
|
`)
|
|
@@ -149,7 +157,7 @@ describe('query builder', () => {
|
|
|
149
157
|
"bindValues": [
|
|
150
158
|
1,
|
|
151
159
|
],
|
|
152
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ?",
|
|
160
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ?",
|
|
153
161
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
154
162
|
}
|
|
155
163
|
`)
|
|
@@ -158,7 +166,7 @@ describe('query builder', () => {
|
|
|
158
166
|
"bindValues": [
|
|
159
167
|
1,
|
|
160
168
|
],
|
|
161
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed != ?",
|
|
169
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" != ?",
|
|
162
170
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
163
171
|
}
|
|
164
172
|
`)
|
|
@@ -167,51 +175,51 @@ describe('query builder', () => {
|
|
|
167
175
|
"bindValues": [
|
|
168
176
|
1,
|
|
169
177
|
],
|
|
170
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ?",
|
|
178
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ?",
|
|
171
179
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
172
180
|
}
|
|
173
181
|
`)
|
|
174
182
|
expect(dump(db.todos.select('id', 'text').where({ completed: undefined }))).toMatchInlineSnapshot(`
|
|
175
183
|
{
|
|
176
184
|
"bindValues": [],
|
|
177
|
-
"query": "SELECT id, text FROM 'todos'",
|
|
185
|
+
"query": "SELECT "id", "text" FROM 'todos'",
|
|
178
186
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
179
187
|
}
|
|
180
188
|
`)
|
|
181
189
|
expect(
|
|
182
190
|
dump(db.todos.select('id', 'text').where({ deletedAt: { op: '<=', value: new Date('2024-01-01') } })),
|
|
183
191
|
).toMatchInlineSnapshot(`
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
{
|
|
193
|
+
"bindValues": [
|
|
194
|
+
"2024-01-01T00:00:00.000Z",
|
|
195
|
+
],
|
|
196
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "deletedAt" <= ?",
|
|
197
|
+
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
198
|
+
}
|
|
199
|
+
`)
|
|
192
200
|
expect(
|
|
193
201
|
dump(db.todos.select('id', 'text').where({ status: { op: 'IN', value: ['active'] } })),
|
|
194
202
|
).toMatchInlineSnapshot(`
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
+
{
|
|
204
|
+
"bindValues": [
|
|
205
|
+
"active",
|
|
206
|
+
],
|
|
207
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "status" IN (?)",
|
|
208
|
+
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
209
|
+
}
|
|
210
|
+
`)
|
|
203
211
|
expect(
|
|
204
212
|
dump(db.todos.select('id', 'text').where({ status: { op: 'NOT IN', value: ['active', 'completed'] } })),
|
|
205
213
|
).toMatchInlineSnapshot(`
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
{
|
|
215
|
+
"bindValues": [
|
|
216
|
+
"active",
|
|
217
|
+
"completed",
|
|
218
|
+
],
|
|
219
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "status" NOT IN (?, ?)",
|
|
220
|
+
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
221
|
+
}
|
|
222
|
+
`)
|
|
215
223
|
|
|
216
224
|
expect(
|
|
217
225
|
dump(
|
|
@@ -222,15 +230,15 @@ describe('query builder', () => {
|
|
|
222
230
|
.where({ deletedAt: undefined }),
|
|
223
231
|
),
|
|
224
232
|
).toMatchInlineSnapshot(`
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
233
|
+
{
|
|
234
|
+
"bindValues": [
|
|
235
|
+
0,
|
|
236
|
+
"active",
|
|
237
|
+
],
|
|
238
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ? AND "status" IN (?)",
|
|
239
|
+
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
240
|
+
}
|
|
241
|
+
`)
|
|
234
242
|
})
|
|
235
243
|
|
|
236
244
|
it('should handle OFFSET and LIMIT clauses', () => {
|
|
@@ -241,7 +249,7 @@ describe('query builder', () => {
|
|
|
241
249
|
10,
|
|
242
250
|
10,
|
|
243
251
|
],
|
|
244
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ? LIMIT ?",
|
|
252
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ? OFFSET ? LIMIT ?",
|
|
245
253
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
246
254
|
}
|
|
247
255
|
`)
|
|
@@ -256,7 +264,7 @@ describe('query builder', () => {
|
|
|
256
264
|
5,
|
|
257
265
|
10,
|
|
258
266
|
],
|
|
259
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ? LIMIT ?",
|
|
267
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ? OFFSET ? LIMIT ?",
|
|
260
268
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
261
269
|
}
|
|
262
270
|
`)
|
|
@@ -268,7 +276,7 @@ describe('query builder', () => {
|
|
|
268
276
|
1,
|
|
269
277
|
5,
|
|
270
278
|
],
|
|
271
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ?",
|
|
279
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ? OFFSET ?",
|
|
272
280
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
273
281
|
}
|
|
274
282
|
`)
|
|
@@ -280,7 +288,7 @@ describe('query builder', () => {
|
|
|
280
288
|
1,
|
|
281
289
|
10,
|
|
282
290
|
],
|
|
283
|
-
"query": "SELECT id, text FROM 'todos' WHERE completed = ? LIMIT ?",
|
|
291
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "completed" = ? LIMIT ?",
|
|
284
292
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
285
293
|
}
|
|
286
294
|
`)
|
|
@@ -299,7 +307,7 @@ describe('query builder', () => {
|
|
|
299
307
|
"bindValues": [
|
|
300
308
|
1,
|
|
301
309
|
],
|
|
302
|
-
"query": "SELECT COUNT(*) as count FROM 'todos' WHERE completed = ?",
|
|
310
|
+
"query": "SELECT COUNT(*) as count FROM 'todos' WHERE "completed" = ?",
|
|
303
311
|
"schema": "(ReadonlyArray<({ readonly count: number } <-> number)> <-> number)",
|
|
304
312
|
}
|
|
305
313
|
`)
|
|
@@ -308,7 +316,7 @@ describe('query builder', () => {
|
|
|
308
316
|
"bindValues": [
|
|
309
317
|
1,
|
|
310
318
|
],
|
|
311
|
-
"query": "SELECT COUNT(*) as count FROM 'todos' WHERE completed = ?",
|
|
319
|
+
"query": "SELECT COUNT(*) as count FROM 'todos' WHERE "completed" = ?",
|
|
312
320
|
"schema": "(ReadonlyArray<({ readonly count: number } <-> number)> <-> number)",
|
|
313
321
|
}
|
|
314
322
|
`)
|
|
@@ -318,14 +326,14 @@ describe('query builder', () => {
|
|
|
318
326
|
expect(dump(db.todos.select('id', 'text').where('deletedAt', '=', null))).toMatchInlineSnapshot(`
|
|
319
327
|
{
|
|
320
328
|
"bindValues": [],
|
|
321
|
-
"query": "SELECT id, text FROM 'todos' WHERE deletedAt IS NULL",
|
|
329
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "deletedAt" IS NULL",
|
|
322
330
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
323
331
|
}
|
|
324
332
|
`)
|
|
325
333
|
expect(dump(db.todos.select('id', 'text').where('deletedAt', '!=', null))).toMatchInlineSnapshot(`
|
|
326
334
|
{
|
|
327
335
|
"bindValues": [],
|
|
328
|
-
"query": "SELECT id, text FROM 'todos' WHERE deletedAt IS NOT NULL",
|
|
336
|
+
"query": "SELECT "id", "text" FROM 'todos' WHERE "deletedAt" IS NOT NULL",
|
|
329
337
|
"schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
|
|
330
338
|
}
|
|
331
339
|
`)
|
|
@@ -335,7 +343,7 @@ describe('query builder', () => {
|
|
|
335
343
|
expect(dump(db.todos.orderBy('completed', 'desc'))).toMatchInlineSnapshot(`
|
|
336
344
|
{
|
|
337
345
|
"bindValues": [],
|
|
338
|
-
"query": "SELECT * FROM 'todos' ORDER BY completed desc",
|
|
346
|
+
"query": "SELECT * FROM 'todos' ORDER BY "completed" desc",
|
|
339
347
|
"schema": "ReadonlyArray<todos>",
|
|
340
348
|
}
|
|
341
349
|
`)
|
|
@@ -343,7 +351,7 @@ describe('query builder', () => {
|
|
|
343
351
|
expect(dump(db.todos.orderBy([{ col: 'completed', direction: 'desc' }]))).toMatchInlineSnapshot(`
|
|
344
352
|
{
|
|
345
353
|
"bindValues": [],
|
|
346
|
-
"query": "SELECT * FROM 'todos' ORDER BY completed desc",
|
|
354
|
+
"query": "SELECT * FROM 'todos' ORDER BY "completed" desc",
|
|
347
355
|
"schema": "ReadonlyArray<todos>",
|
|
348
356
|
}
|
|
349
357
|
`)
|
|
@@ -402,7 +410,7 @@ describe('query builder', () => {
|
|
|
402
410
|
"Buy milk",
|
|
403
411
|
"active",
|
|
404
412
|
],
|
|
405
|
-
"query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
|
|
413
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?)",
|
|
406
414
|
"schema": "number",
|
|
407
415
|
}
|
|
408
416
|
`)
|
|
@@ -416,7 +424,7 @@ describe('query builder', () => {
|
|
|
416
424
|
"Buy milk",
|
|
417
425
|
"active",
|
|
418
426
|
],
|
|
419
|
-
"query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
|
|
427
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?)",
|
|
420
428
|
"schema": "number",
|
|
421
429
|
}
|
|
422
430
|
`)
|
|
@@ -447,7 +455,7 @@ describe('query builder', () => {
|
|
|
447
455
|
"a2",
|
|
448
456
|
"John Doe",
|
|
449
457
|
],
|
|
450
|
-
"query": "INSERT INTO 'issue' (id, title, priority, created, modified, kanbanorder, creator) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
458
|
+
"query": "INSERT INTO 'issue' ("id", "title", "priority", "created", "modified", "kanbanorder", "creator") VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
451
459
|
"schema": "number",
|
|
452
460
|
}
|
|
453
461
|
`)
|
|
@@ -460,7 +468,7 @@ describe('query builder', () => {
|
|
|
460
468
|
"completed",
|
|
461
469
|
"123",
|
|
462
470
|
],
|
|
463
|
-
"query": "UPDATE 'todos' SET status = ? WHERE id = ?",
|
|
471
|
+
"query": "UPDATE 'todos' SET "status" = ? WHERE "id" = ?",
|
|
464
472
|
"schema": "number",
|
|
465
473
|
}
|
|
466
474
|
`)
|
|
@@ -482,7 +490,7 @@ describe('query builder', () => {
|
|
|
482
490
|
"some text",
|
|
483
491
|
"123",
|
|
484
492
|
],
|
|
485
|
-
"query": "UPDATE 'todos' SET text = ? WHERE id = ?",
|
|
493
|
+
"query": "UPDATE 'todos' SET "text" = ? WHERE "id" = ?",
|
|
486
494
|
"schema": "number",
|
|
487
495
|
}
|
|
488
496
|
`)
|
|
@@ -496,7 +504,7 @@ describe('query builder', () => {
|
|
|
496
504
|
"John Doe",
|
|
497
505
|
1,
|
|
498
506
|
],
|
|
499
|
-
"query": "UPDATE 'issue' SET priority = ?, creator = ? WHERE id = ?",
|
|
507
|
+
"query": "UPDATE 'issue' SET "priority" = ?, "creator" = ? WHERE "id" = ?",
|
|
500
508
|
"schema": "number",
|
|
501
509
|
}
|
|
502
510
|
`)
|
|
@@ -508,7 +516,7 @@ describe('query builder', () => {
|
|
|
508
516
|
"bindValues": [
|
|
509
517
|
"completed",
|
|
510
518
|
],
|
|
511
|
-
"query": "DELETE FROM 'todos' WHERE status = ?",
|
|
519
|
+
"query": "DELETE FROM 'todos' WHERE "status" = ?",
|
|
512
520
|
"schema": "number",
|
|
513
521
|
}
|
|
514
522
|
`)
|
|
@@ -524,7 +532,7 @@ describe('query builder', () => {
|
|
|
524
532
|
"Buy milk",
|
|
525
533
|
"active",
|
|
526
534
|
],
|
|
527
|
-
"query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO NOTHING",
|
|
535
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?) ON CONFLICT ("id") DO NOTHING",
|
|
528
536
|
"schema": "number",
|
|
529
537
|
}
|
|
530
538
|
`)
|
|
@@ -544,7 +552,7 @@ describe('query builder', () => {
|
|
|
544
552
|
"Buy soy milk",
|
|
545
553
|
"active",
|
|
546
554
|
],
|
|
547
|
-
"query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET text = ?, status = ?",
|
|
555
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?) ON CONFLICT ("id") DO UPDATE SET "text" = ?, "status" = ?",
|
|
548
556
|
"schema": "number",
|
|
549
557
|
}
|
|
550
558
|
`)
|
|
@@ -558,7 +566,31 @@ describe('query builder', () => {
|
|
|
558
566
|
"Buy milk",
|
|
559
567
|
"active",
|
|
560
568
|
],
|
|
561
|
-
"query": "INSERT OR REPLACE INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
|
|
569
|
+
"query": "INSERT OR REPLACE INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?)",
|
|
570
|
+
"schema": "number",
|
|
571
|
+
}
|
|
572
|
+
`)
|
|
573
|
+
})
|
|
574
|
+
|
|
575
|
+
it('should quote reserved column names', () => {
|
|
576
|
+
expect(dump(db.selections.insert({ id: 1, group: 'alpha' }).onConflict('id', 'ignore'))).toMatchInlineSnapshot(`
|
|
577
|
+
{
|
|
578
|
+
"bindValues": [
|
|
579
|
+
1,
|
|
580
|
+
"alpha",
|
|
581
|
+
],
|
|
582
|
+
"query": "INSERT INTO 'selections' ("id", "group") VALUES (?, ?) ON CONFLICT ("id") DO NOTHING",
|
|
583
|
+
"schema": "number",
|
|
584
|
+
}
|
|
585
|
+
`)
|
|
586
|
+
|
|
587
|
+
expect(dump(db.selections.update({ group: 'beta' }).where({ id: 1 }))).toMatchInlineSnapshot(`
|
|
588
|
+
{
|
|
589
|
+
"bindValues": [
|
|
590
|
+
"beta",
|
|
591
|
+
1,
|
|
592
|
+
],
|
|
593
|
+
"query": "UPDATE 'selections' SET "group" = ? WHERE "id" = ?",
|
|
562
594
|
"schema": "number",
|
|
563
595
|
}
|
|
564
596
|
`)
|
|
@@ -574,7 +606,7 @@ describe('query builder', () => {
|
|
|
574
606
|
"Buy milk",
|
|
575
607
|
"active",
|
|
576
608
|
],
|
|
577
|
-
"query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id, status) DO NOTHING",
|
|
609
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?) ON CONFLICT ("id", "status") DO NOTHING",
|
|
578
610
|
"schema": "number",
|
|
579
611
|
}
|
|
580
612
|
`)
|
|
@@ -584,36 +616,36 @@ describe('query builder', () => {
|
|
|
584
616
|
expect(
|
|
585
617
|
dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')),
|
|
586
618
|
).toMatchInlineSnapshot(`
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
619
|
+
{
|
|
620
|
+
"bindValues": [
|
|
621
|
+
"123",
|
|
622
|
+
"Buy milk",
|
|
623
|
+
"active",
|
|
624
|
+
],
|
|
625
|
+
"query": "INSERT INTO 'todos' ("id", "text", "status") VALUES (?, ?, ?) RETURNING "id"",
|
|
626
|
+
"schema": "ReadonlyArray<{ readonly id: string }>",
|
|
627
|
+
}
|
|
628
|
+
`)
|
|
597
629
|
|
|
598
630
|
expect(
|
|
599
631
|
dump(db.todos.update({ status: 'completed' }).where({ id: '123' }).returning('id')),
|
|
600
632
|
).toMatchInlineSnapshot(`
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
633
|
+
{
|
|
634
|
+
"bindValues": [
|
|
635
|
+
"completed",
|
|
636
|
+
"123",
|
|
637
|
+
],
|
|
638
|
+
"query": "UPDATE 'todos' SET "status" = ? WHERE "id" = ? RETURNING "id"",
|
|
639
|
+
"schema": "ReadonlyArray<{ readonly id: string }>",
|
|
640
|
+
}
|
|
641
|
+
`)
|
|
610
642
|
|
|
611
643
|
expect(dump(db.todos.delete().where({ status: 'completed' }).returning('id'))).toMatchInlineSnapshot(`
|
|
612
644
|
{
|
|
613
645
|
"bindValues": [
|
|
614
646
|
"completed",
|
|
615
647
|
],
|
|
616
|
-
"query": "DELETE FROM 'todos' WHERE status = ? RETURNING id",
|
|
648
|
+
"query": "DELETE FROM 'todos' WHERE "status" = ? RETURNING "id"",
|
|
617
649
|
"schema": "ReadonlyArray<{ readonly id: string }>",
|
|
618
650
|
}
|
|
619
651
|
`)
|
|
@@ -625,7 +657,7 @@ describe('query builder', () => {
|
|
|
625
657
|
"bindValues": [
|
|
626
658
|
"completed",
|
|
627
659
|
],
|
|
628
|
-
"query": "DELETE FROM 'todos' WHERE status = ?",
|
|
660
|
+
"query": "DELETE FROM 'todos' WHERE "status" = ?",
|
|
629
661
|
"schema": "number",
|
|
630
662
|
}
|
|
631
663
|
`)
|
|
@@ -636,7 +668,7 @@ describe('query builder', () => {
|
|
|
636
668
|
"bindValues": [
|
|
637
669
|
"completed",
|
|
638
670
|
],
|
|
639
|
-
"query": "DELETE FROM 'todos' WHERE status = ? AND deletedAt IS NULL",
|
|
671
|
+
"query": "DELETE FROM 'todos' WHERE "status" = ? AND "deletedAt" IS NULL",
|
|
640
672
|
"schema": "number",
|
|
641
673
|
}
|
|
642
674
|
`)
|
|
@@ -649,7 +681,7 @@ describe('query builder', () => {
|
|
|
649
681
|
"completed",
|
|
650
682
|
"123",
|
|
651
683
|
],
|
|
652
|
-
"query": "UPDATE 'todos' SET status = ? WHERE id = ?",
|
|
684
|
+
"query": "UPDATE 'todos' SET "status" = ? WHERE "id" = ?",
|
|
653
685
|
"schema": "number",
|
|
654
686
|
}
|
|
655
687
|
`)
|
|
@@ -663,7 +695,7 @@ describe('query builder', () => {
|
|
|
663
695
|
"completed",
|
|
664
696
|
"123",
|
|
665
697
|
],
|
|
666
|
-
"query": "UPDATE 'todos' SET status = ? WHERE id = ? AND deletedAt IS NULL",
|
|
698
|
+
"query": "UPDATE 'todos' SET "status" = ? WHERE "id" = ? AND "deletedAt" IS NULL",
|
|
667
699
|
"schema": "number",
|
|
668
700
|
}
|
|
669
701
|
`)
|
|
@@ -776,7 +808,7 @@ describe('query builder', () => {
|
|
|
776
808
|
"Lovelace",
|
|
777
809
|
"ada@example.com",
|
|
778
810
|
],
|
|
779
|
-
"query": "INSERT INTO 'contacts' (id, contactFirstName, contactLastName, contactEmail) VALUES (?, ?, ?, ?)",
|
|
811
|
+
"query": "INSERT INTO 'contacts' ("id", "contactFirstName", "contactLastName", "contactEmail") VALUES (?, ?, ?, ?)",
|
|
780
812
|
"usedTables": Set {
|
|
781
813
|
"contacts",
|
|
782
814
|
},
|
|
@@ -35,7 +35,6 @@ export const makeQueryBuilder = <TResult, TTableDef extends TableDefBase>(
|
|
|
35
35
|
select: { columns },
|
|
36
36
|
}) as any
|
|
37
37
|
},
|
|
38
|
-
// biome-ignore lint/complexity/useArrowFunction: prefer function over arrow function for this case
|
|
39
38
|
where: function () {
|
|
40
39
|
if (ast._tag === 'InsertQuery') return invalidQueryBuilder('Cannot use where with insert')
|
|
41
40
|
if (ast._tag === 'RowQuery') return invalidQueryBuilder('Cannot use where with row')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
-
import * as EventSequenceNumber from '../../../EventSequenceNumber.ts'
|
|
3
|
+
import * as EventSequenceNumber from '../../../EventSequenceNumber/mod.ts'
|
|
4
4
|
import { SqliteDsl } from '../db-schema/mod.ts'
|
|
5
5
|
import { table } from '../table-def.ts'
|
|
6
6
|
|
|
@@ -22,11 +22,11 @@ export const eventlogMetaTable = table({
|
|
|
22
22
|
name: EVENTLOG_META_TABLE,
|
|
23
23
|
columns: {
|
|
24
24
|
// TODO Adjust modeling so a global event never needs a client id component
|
|
25
|
-
seqNumGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.
|
|
26
|
-
seqNumClient: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.
|
|
25
|
+
seqNumGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.Global.Schema }),
|
|
26
|
+
seqNumClient: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.Client.Schema }),
|
|
27
27
|
seqNumRebaseGeneration: SqliteDsl.integer({ primaryKey: true }),
|
|
28
|
-
parentSeqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.
|
|
29
|
-
parentSeqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.
|
|
28
|
+
parentSeqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.Global.Schema }),
|
|
29
|
+
parentSeqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.Client.Schema }),
|
|
30
30
|
parentSeqNumRebaseGeneration: SqliteDsl.integer({}),
|
|
31
31
|
/** Event definition name */
|
|
32
32
|
name: SqliteDsl.text({}),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as EventSequenceNumber from '../../../EventSequenceNumber.ts'
|
|
1
|
+
import * as EventSequenceNumber from '../../../EventSequenceNumber/mod.ts'
|
|
2
2
|
import { SqliteDsl } from '../db-schema/mod.ts'
|
|
3
3
|
import { table } from '../table-def.ts'
|
|
4
4
|
|
|
@@ -53,8 +53,8 @@ export const sessionChangesetMetaTable = table({
|
|
|
53
53
|
name: SESSION_CHANGESET_META_TABLE,
|
|
54
54
|
columns: {
|
|
55
55
|
// TODO bring back primary key
|
|
56
|
-
seqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.
|
|
57
|
-
seqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.
|
|
56
|
+
seqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.Global.Schema }),
|
|
57
|
+
seqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.Client.Schema }),
|
|
58
58
|
seqNumRebaseGeneration: SqliteDsl.integer({}),
|
|
59
59
|
changeset: SqliteDsl.blob({ nullable: true }),
|
|
60
60
|
debug: SqliteDsl.json({ nullable: true }),
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Effect } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
3
|
import { UnknownEventError } from '../errors.ts'
|
|
4
|
-
import type { EventDef, Materializer } from './EventDef.ts'
|
|
5
|
-
import type * as LiveStoreEvent from './LiveStoreEvent.ts'
|
|
4
|
+
import type { EventDef, Materializer } from './EventDef/mod.ts'
|
|
5
|
+
import type * as LiveStoreEvent from './LiveStoreEvent/mod.ts'
|
|
6
6
|
import type { LiveStoreSchema } from './schema.ts'
|
|
7
7
|
|
|
8
8
|
export type UnknownEventContext = {
|
|
9
|
-
readonly event: Pick<LiveStoreEvent.
|
|
9
|
+
readonly event: Pick<LiveStoreEvent.Client.Encoded, 'name' | 'args' | 'seqNum' | 'clientId' | 'sessionId'>
|
|
10
10
|
readonly reason: 'event-definition-missing' | 'materializer-missing'
|
|
11
11
|
readonly operation: string
|
|
12
12
|
}
|
|
@@ -34,7 +34,7 @@ import { Effect } from '@livestore/utils/effect'
|
|
|
34
34
|
|
|
35
35
|
import type { SqliteDb } from '../adapter-types.ts'
|
|
36
36
|
import type { MigrationsReport, MigrationsReportEntry } from '../defs.ts'
|
|
37
|
-
import type {
|
|
37
|
+
import type { UnknownError } from '../errors.ts'
|
|
38
38
|
import type { LiveStoreSchema } from '../schema/mod.ts'
|
|
39
39
|
import { makeColumnSpec } from '../schema/state/sqlite/column-spec.ts'
|
|
40
40
|
import { SqliteAst } from '../schema/state/sqlite/db-schema/mod.ts'
|
|
@@ -87,7 +87,7 @@ export const migrateDb = ({
|
|
|
87
87
|
db: SqliteDb
|
|
88
88
|
schema: LiveStoreSchema
|
|
89
89
|
onProgress?: (opts: { done: number; total: number }) => Effect.Effect<void>
|
|
90
|
-
}): Effect.Effect<MigrationsReport,
|
|
90
|
+
}): Effect.Effect<MigrationsReport, UnknownError> =>
|
|
91
91
|
Effect.gen(function* () {
|
|
92
92
|
for (const tableDef of stateSystemTables) {
|
|
93
93
|
yield* migrateTable({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Schema } from '@livestore/utils/effect'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import type { EventDef } from '../schema/EventDef.ts'
|
|
3
|
+
import { UnknownError } from '../adapter-types.ts'
|
|
4
|
+
import type { EventDef } from '../schema/EventDef/mod.ts'
|
|
5
5
|
import type { LiveStoreSchema } from '../schema/mod.ts'
|
|
6
6
|
import type { EventDefInfo, SchemaManager } from './common.ts'
|
|
7
7
|
|
|
@@ -15,7 +15,7 @@ export const validateSchema = (schema: LiveStoreSchema, schemaManager: SchemaMan
|
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
if (missingEventDefs.length > 0) {
|
|
18
|
-
return yield* new
|
|
18
|
+
return yield* new UnknownError({
|
|
19
19
|
cause: `Missing mutation definitions: ${missingEventDefs.map((info) => info.eventName).join(', ')}`,
|
|
20
20
|
})
|
|
21
21
|
}
|
package/src/sqlite-types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Effect, Schema } from '@livestore/utils/effect'
|
|
2
|
-
import type { SqliteError,
|
|
2
|
+
import type { SqliteError, UnknownError } from './errors.ts'
|
|
3
3
|
import type { EventSequenceNumber } from './schema/mod.ts'
|
|
4
4
|
import type { QueryBuilder } from './schema/state/sqlite/query-builder/api.ts'
|
|
5
5
|
import type { PreparedBindValues } from './util.ts'
|
|
@@ -33,7 +33,7 @@ export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
|
|
|
33
33
|
makeChangeset: (data: Uint8Array<ArrayBuffer>) => SqliteDbChangeset
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export type SqliteDebugInfo = { head: EventSequenceNumber.
|
|
36
|
+
export type SqliteDebugInfo = { head: EventSequenceNumber.Client.Composite }
|
|
37
37
|
|
|
38
38
|
// TODO refactor this helper type. It's quite cumbersome to use and should be revisited.
|
|
39
39
|
export type MakeSqliteDb<
|
|
@@ -46,7 +46,7 @@ export type MakeSqliteDb<
|
|
|
46
46
|
TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
|
|
47
47
|
>(
|
|
48
48
|
input: TInput,
|
|
49
|
-
) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError |
|
|
49
|
+
) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnknownError, R>
|
|
50
50
|
|
|
51
51
|
export interface PreparedStatement {
|
|
52
52
|
execute(bindValues: PreparedBindValues | undefined, options?: { onRowsChanged?: (rowsChanged: number) => void }): void
|