@livestore/common 0.3.0-dev.37 → 0.3.0-dev.38

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.
Files changed (203) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +3 -2
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js.map +1 -1
  5. package/dist/devtools/devtools-messages-client-session.d.ts +29 -29
  6. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  7. package/dist/devtools/devtools-messages-leader.d.ts +24 -24
  8. package/dist/devtools/devtools-sessioninfo.d.ts +2 -0
  9. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  10. package/dist/devtools/devtools-sessioninfo.js +1 -0
  11. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  12. package/dist/devtools/mod.d.ts +48 -32
  13. package/dist/devtools/mod.d.ts.map +1 -1
  14. package/dist/devtools/mod.js +27 -21
  15. package/dist/devtools/mod.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  21. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  22. package/dist/leader-thread/leader-worker-devtools.js +21 -13
  23. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  24. package/dist/leader-thread/types.d.ts +6 -4
  25. package/dist/leader-thread/types.d.ts.map +1 -1
  26. package/dist/leader-thread/types.js.map +1 -1
  27. package/dist/make-client-session.d.ts +21 -0
  28. package/dist/make-client-session.d.ts.map +1 -0
  29. package/dist/make-client-session.js +51 -0
  30. package/dist/make-client-session.js.map +1 -0
  31. package/dist/materializer-helper.d.ts.map +1 -1
  32. package/dist/materializer-helper.js +1 -1
  33. package/dist/materializer-helper.js.map +1 -1
  34. package/dist/schema/EventDef.d.ts +2 -2
  35. package/dist/schema/LiveStoreEvent.d.ts +6 -6
  36. package/dist/schema/state/sqlite/system-tables.d.ts +2 -2
  37. package/dist/sync/next/test/event-fixtures.d.ts +7 -7
  38. package/dist/sync/syncstate.d.ts +2 -2
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. package/package.json +4 -3
  42. package/src/adapter-types.ts +4 -2
  43. package/src/devtools/devtools-sessioninfo.ts +1 -0
  44. package/src/devtools/mod.ts +44 -21
  45. package/src/index.ts +1 -0
  46. package/src/leader-thread/leader-worker-devtools.ts +40 -22
  47. package/src/leader-thread/types.ts +5 -4
  48. package/src/make-client-session.ts +119 -0
  49. package/src/materializer-helper.ts +2 -1
  50. package/src/version.ts +1 -1
  51. package/dist/derived-mutations.d.ts +0 -77
  52. package/dist/derived-mutations.d.ts.map +0 -1
  53. package/dist/derived-mutations.js +0 -54
  54. package/dist/derived-mutations.js.map +0 -1
  55. package/dist/derived-mutations.test.d.ts +0 -2
  56. package/dist/derived-mutations.test.d.ts.map +0 -1
  57. package/dist/derived-mutations.test.js +0 -93
  58. package/dist/derived-mutations.test.js.map +0 -1
  59. package/dist/devtools/devtools-bridge.d.ts +0 -12
  60. package/dist/devtools/devtools-bridge.d.ts.map +0 -1
  61. package/dist/devtools/devtools-bridge.js +0 -2
  62. package/dist/devtools/devtools-bridge.js.map +0 -1
  63. package/dist/devtools/devtools-window-message.d.ts +0 -29
  64. package/dist/devtools/devtools-window-message.d.ts.map +0 -1
  65. package/dist/devtools/devtools-window-message.js +0 -33
  66. package/dist/devtools/devtools-window-message.js.map +0 -1
  67. package/dist/devtools/index.d.ts +0 -42
  68. package/dist/devtools/index.d.ts.map +0 -1
  69. package/dist/devtools/index.js +0 -49
  70. package/dist/devtools/index.js.map +0 -1
  71. package/dist/init-singleton-tables.d.ts +0 -4
  72. package/dist/init-singleton-tables.d.ts.map +0 -1
  73. package/dist/init-singleton-tables.js +0 -16
  74. package/dist/init-singleton-tables.js.map +0 -1
  75. package/dist/leader-thread/apply-event.d.ts +0 -16
  76. package/dist/leader-thread/apply-event.d.ts.map +0 -1
  77. package/dist/leader-thread/apply-event.js +0 -103
  78. package/dist/leader-thread/apply-event.js.map +0 -1
  79. package/dist/mutation.d.ts +0 -14
  80. package/dist/mutation.d.ts.map +0 -1
  81. package/dist/mutation.js +0 -71
  82. package/dist/mutation.js.map +0 -1
  83. package/dist/query-builder/api.d.ts +0 -293
  84. package/dist/query-builder/api.d.ts.map +0 -1
  85. package/dist/query-builder/api.js +0 -6
  86. package/dist/query-builder/api.js.map +0 -1
  87. package/dist/query-builder/astToSql.d.ts +0 -7
  88. package/dist/query-builder/astToSql.d.ts.map +0 -1
  89. package/dist/query-builder/astToSql.js +0 -190
  90. package/dist/query-builder/astToSql.js.map +0 -1
  91. package/dist/query-builder/impl.d.ts +0 -7
  92. package/dist/query-builder/impl.d.ts.map +0 -1
  93. package/dist/query-builder/impl.js +0 -286
  94. package/dist/query-builder/impl.js.map +0 -1
  95. package/dist/query-builder/impl.test.d.ts +0 -87
  96. package/dist/query-builder/impl.test.d.ts.map +0 -1
  97. package/dist/query-builder/impl.test.js +0 -554
  98. package/dist/query-builder/impl.test.js.map +0 -1
  99. package/dist/query-builder/mod.d.ts +0 -17
  100. package/dist/query-builder/mod.d.ts.map +0 -1
  101. package/dist/query-builder/mod.js +0 -17
  102. package/dist/query-builder/mod.js.map +0 -1
  103. package/dist/query-info.d.ts +0 -38
  104. package/dist/query-info.d.ts.map +0 -1
  105. package/dist/query-info.js +0 -7
  106. package/dist/query-info.js.map +0 -1
  107. package/dist/rehydrate-from-eventlog.d.ts +0 -14
  108. package/dist/rehydrate-from-eventlog.d.ts.map +0 -1
  109. package/dist/rehydrate-from-eventlog.js +0 -64
  110. package/dist/rehydrate-from-eventlog.js.map +0 -1
  111. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  112. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  113. package/dist/rehydrate-from-mutationlog.js +0 -72
  114. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  115. package/dist/schema/client-document-def.d.ts +0 -223
  116. package/dist/schema/client-document-def.d.ts.map +0 -1
  117. package/dist/schema/client-document-def.js +0 -170
  118. package/dist/schema/client-document-def.js.map +0 -1
  119. package/dist/schema/client-document-def.test.d.ts +0 -2
  120. package/dist/schema/client-document-def.test.d.ts.map +0 -1
  121. package/dist/schema/client-document-def.test.js +0 -201
  122. package/dist/schema/client-document-def.test.js.map +0 -1
  123. package/dist/schema/db-schema/ast/sqlite.d.ts +0 -69
  124. package/dist/schema/db-schema/ast/sqlite.d.ts.map +0 -1
  125. package/dist/schema/db-schema/ast/sqlite.js +0 -71
  126. package/dist/schema/db-schema/ast/sqlite.js.map +0 -1
  127. package/dist/schema/db-schema/ast/validate.d.ts +0 -3
  128. package/dist/schema/db-schema/ast/validate.d.ts.map +0 -1
  129. package/dist/schema/db-schema/ast/validate.js +0 -12
  130. package/dist/schema/db-schema/ast/validate.js.map +0 -1
  131. package/dist/schema/db-schema/dsl/field-defs.d.ts +0 -90
  132. package/dist/schema/db-schema/dsl/field-defs.d.ts.map +0 -1
  133. package/dist/schema/db-schema/dsl/field-defs.js +0 -87
  134. package/dist/schema/db-schema/dsl/field-defs.js.map +0 -1
  135. package/dist/schema/db-schema/dsl/field-defs.test.d.ts +0 -2
  136. package/dist/schema/db-schema/dsl/field-defs.test.d.ts.map +0 -1
  137. package/dist/schema/db-schema/dsl/field-defs.test.js +0 -29
  138. package/dist/schema/db-schema/dsl/field-defs.test.js.map +0 -1
  139. package/dist/schema/db-schema/dsl/mod.d.ts +0 -90
  140. package/dist/schema/db-schema/dsl/mod.d.ts.map +0 -1
  141. package/dist/schema/db-schema/dsl/mod.js +0 -41
  142. package/dist/schema/db-schema/dsl/mod.js.map +0 -1
  143. package/dist/schema/db-schema/hash.d.ts +0 -2
  144. package/dist/schema/db-schema/hash.d.ts.map +0 -1
  145. package/dist/schema/db-schema/hash.js +0 -14
  146. package/dist/schema/db-schema/hash.js.map +0 -1
  147. package/dist/schema/db-schema/mod.d.ts +0 -3
  148. package/dist/schema/db-schema/mod.d.ts.map +0 -1
  149. package/dist/schema/db-schema/mod.js +0 -3
  150. package/dist/schema/db-schema/mod.js.map +0 -1
  151. package/dist/schema/index.d.ts +0 -62
  152. package/dist/schema/index.d.ts.map +0 -1
  153. package/dist/schema/index.js +0 -67
  154. package/dist/schema/index.js.map +0 -1
  155. package/dist/schema/mutations.d.ts +0 -227
  156. package/dist/schema/mutations.d.ts.map +0 -1
  157. package/dist/schema/mutations.js +0 -68
  158. package/dist/schema/mutations.js.map +0 -1
  159. package/dist/schema/schema-helpers.d.ts +0 -4
  160. package/dist/schema/schema-helpers.d.ts.map +0 -1
  161. package/dist/schema/schema-helpers.js +0 -30
  162. package/dist/schema/schema-helpers.js.map +0 -1
  163. package/dist/schema/sqlite-state.d.ts +0 -12
  164. package/dist/schema/sqlite-state.d.ts.map +0 -1
  165. package/dist/schema/sqlite-state.js +0 -36
  166. package/dist/schema/sqlite-state.js.map +0 -1
  167. package/dist/schema/state/sqlite/sqlite-state.d.ts +0 -12
  168. package/dist/schema/state/sqlite/sqlite-state.d.ts.map +0 -1
  169. package/dist/schema/state/sqlite/sqlite-state.js +0 -36
  170. package/dist/schema/state/sqlite/sqlite-state.js.map +0 -1
  171. package/dist/schema/state/state.d.ts +0 -3
  172. package/dist/schema/state/state.d.ts.map +0 -1
  173. package/dist/schema/state/state.js +0 -3
  174. package/dist/schema/state/state.js.map +0 -1
  175. package/dist/schema/state.d.ts +0 -3
  176. package/dist/schema/state.d.ts.map +0 -1
  177. package/dist/schema/state.js +0 -3
  178. package/dist/schema/state.js.map +0 -1
  179. package/dist/schema/system-tables.d.ts +0 -27
  180. package/dist/schema/system-tables.d.ts.map +0 -1
  181. package/dist/schema/system-tables.js +0 -86
  182. package/dist/schema/system-tables.js.map +0 -1
  183. package/dist/schema/table-def.d.ts +0 -84
  184. package/dist/schema/table-def.d.ts.map +0 -1
  185. package/dist/schema/table-def.js +0 -36
  186. package/dist/schema/table-def.js.map +0 -1
  187. package/dist/schema/view.d.ts +0 -3
  188. package/dist/schema/view.d.ts.map +0 -1
  189. package/dist/schema/view.js +0 -3
  190. package/dist/schema/view.js.map +0 -1
  191. package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
  192. package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
  193. package/dist/schema-management/validate-mutation-defs.js +0 -39
  194. package/dist/schema-management/validate-mutation-defs.js.map +0 -1
  195. package/dist/sync/next/test/mutation-fixtures.d.ts +0 -73
  196. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  197. package/dist/sync/next/test/mutation-fixtures.js +0 -161
  198. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  199. package/dist/sync/next-mutation-event-id-pair.d.ts +0 -14
  200. package/dist/sync/next-mutation-event-id-pair.d.ts.map +0 -1
  201. package/dist/sync/next-mutation-event-id-pair.js +0 -13
  202. package/dist/sync/next-mutation-event-id-pair.js.map +0 -1
  203. package/src/devtools/devtools-window-message.ts +0 -27
@@ -1,554 +0,0 @@
1
- import { Schema } from '@livestore/utils/effect';
2
- import { describe, expect, it } from 'vitest';
3
- import { State } from '../schema/mod.js';
4
- import { getResultSchema } from './impl.js';
5
- const todos = State.SQLite.table({
6
- name: 'todos',
7
- columns: {
8
- id: State.SQLite.text({ primaryKey: true }),
9
- text: State.SQLite.text({ default: '', nullable: false }),
10
- completed: State.SQLite.boolean({ default: false, nullable: false }),
11
- status: State.SQLite.text({ schema: Schema.Literal('active', 'completed') }),
12
- deletedAt: State.SQLite.datetime({ nullable: true }),
13
- // TODO consider leaning more into Effect schema
14
- // other: Schema.Number.pipe(State.SQLite.asInteger),
15
- },
16
- });
17
- const todosWithIntId = State.SQLite.table({
18
- name: 'todos_with_int_id',
19
- columns: {
20
- id: State.SQLite.integer({ primaryKey: true }),
21
- text: State.SQLite.text({ default: '', nullable: false }),
22
- status: State.SQLite.text({ schema: Schema.Literal('active', 'completed') }),
23
- },
24
- });
25
- const comments = State.SQLite.table({
26
- name: 'comments',
27
- columns: {
28
- id: State.SQLite.text({ primaryKey: true }),
29
- text: State.SQLite.text({ default: '', nullable: false }),
30
- todoId: State.SQLite.text({}),
31
- },
32
- });
33
- const UiState = State.SQLite.clientDocument({
34
- name: 'UiState',
35
- schema: Schema.Struct({
36
- filter: Schema.Literal('all', 'active', 'completed'),
37
- }),
38
- default: { value: { filter: 'all' } },
39
- });
40
- const UiStateWithDefaultId = State.SQLite.clientDocument({
41
- name: 'UiState',
42
- schema: Schema.Struct({
43
- filter: Schema.Literal('all', 'active', 'completed'),
44
- }),
45
- default: {
46
- id: 'static',
47
- value: { filter: 'all' },
48
- },
49
- });
50
- export const issue = State.SQLite.table({
51
- name: 'issue',
52
- columns: {
53
- id: State.SQLite.integer({ primaryKey: true }),
54
- title: State.SQLite.text({ default: '' }),
55
- creator: State.SQLite.text({ default: '' }),
56
- priority: State.SQLite.integer({ schema: Schema.Literal(0, 1, 2, 3, 4), default: 0 }),
57
- created: State.SQLite.integer({ schema: Schema.DateFromNumber }),
58
- deleted: State.SQLite.integer({ nullable: true, schema: Schema.DateFromNumber }),
59
- modified: State.SQLite.integer({ schema: Schema.DateFromNumber }),
60
- kanbanorder: State.SQLite.text({ nullable: false, default: '' }),
61
- },
62
- indexes: [
63
- { name: 'issue_kanbanorder', columns: ['kanbanorder'] },
64
- { name: 'issue_created', columns: ['created'] },
65
- ],
66
- });
67
- const db = { todos, todosWithIntId, comments, issue, UiState, UiStateWithDefaultId };
68
- const dump = (qb) => ({
69
- bindValues: qb.asSql().bindValues,
70
- query: qb.asSql().query,
71
- schema: getResultSchema(qb).toString(),
72
- });
73
- describe('query builder', () => {
74
- describe('basic queries', () => {
75
- it('should handle simple SELECT queries', () => {
76
- expect(dump(db.todos)).toMatchInlineSnapshot(`
77
- {
78
- "bindValues": [],
79
- "query": "SELECT * FROM 'todos'",
80
- "schema": "ReadonlyArray<todos>",
81
- }
82
- `);
83
- expect(dump(db.todos.select('id'))).toMatchInlineSnapshot(`
84
- {
85
- "bindValues": [],
86
- "query": "SELECT id FROM 'todos'",
87
- "schema": "ReadonlyArray<({ readonly id: string } <-> string)>",
88
- }
89
- `);
90
- expect(dump(db.todos.select('id', 'text'))).toMatchInlineSnapshot(`
91
- {
92
- "bindValues": [],
93
- "query": "SELECT id, text FROM 'todos'",
94
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
95
- }
96
- `);
97
- });
98
- it('should handle .first()', () => {
99
- expect(dump(db.todos.select('id', 'text').first())).toMatchInlineSnapshot(`
100
- {
101
- "bindValues": [
102
- 1,
103
- ],
104
- "query": "SELECT id, text FROM 'todos' LIMIT ?",
105
- "schema": "(ReadonlyArray<{ readonly id: string; readonly text: string }> <-> { readonly id: string; readonly text: string })",
106
- }
107
- `);
108
- expect(dump(db.todos.select('id', 'text').first({ fallback: () => undefined }))).toMatchInlineSnapshot(`
109
- {
110
- "bindValues": [
111
- 1,
112
- ],
113
- "query": "SELECT id, text FROM 'todos' LIMIT ?",
114
- "schema": "(ReadonlyArray<{ readonly id: string; readonly text: string }> | readonly [undefined] <-> { readonly id: string; readonly text: string } | undefined)",
115
- }
116
- `);
117
- });
118
- it('should handle WHERE clauses', () => {
119
- expect(dump(db.todos.select('id', 'text').where('completed', true))).toMatchInlineSnapshot(`
120
- {
121
- "bindValues": [
122
- 1,
123
- ],
124
- "query": "SELECT id, text FROM 'todos' WHERE completed = ?",
125
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
126
- }
127
- `);
128
- expect(dump(db.todos.select('id', 'text').where('completed', '!=', true))).toMatchInlineSnapshot(`
129
- {
130
- "bindValues": [
131
- 1,
132
- ],
133
- "query": "SELECT id, text FROM 'todos' WHERE completed != ?",
134
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
135
- }
136
- `);
137
- expect(dump(db.todos.select('id', 'text').where({ completed: true }))).toMatchInlineSnapshot(`
138
- {
139
- "bindValues": [
140
- 1,
141
- ],
142
- "query": "SELECT id, text FROM 'todos' WHERE completed = ?",
143
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
144
- }
145
- `);
146
- expect(dump(db.todos.select('id', 'text').where({ completed: undefined }))).toMatchInlineSnapshot(`
147
- {
148
- "bindValues": [],
149
- "query": "SELECT id, text FROM 'todos'",
150
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
151
- }
152
- `);
153
- expect(dump(db.todos.select('id', 'text').where({ deletedAt: { op: '<=', value: new Date('2024-01-01') } })))
154
- .toMatchInlineSnapshot(`
155
- {
156
- "bindValues": [
157
- "2024-01-01T00:00:00.000Z",
158
- ],
159
- "query": "SELECT id, text FROM 'todos' WHERE deletedAt <= ?",
160
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
161
- }
162
- `);
163
- expect(dump(db.todos.select('id', 'text').where({ status: { op: 'IN', value: ['active'] } })))
164
- .toMatchInlineSnapshot(`
165
- {
166
- "bindValues": [
167
- "active",
168
- ],
169
- "query": "SELECT id, text FROM 'todos' WHERE status IN (?)",
170
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
171
- }
172
- `);
173
- expect(dump(db.todos.select('id', 'text').where({ status: { op: 'NOT IN', value: ['active', 'completed'] } })))
174
- .toMatchInlineSnapshot(`
175
- {
176
- "bindValues": [
177
- "active",
178
- "completed",
179
- ],
180
- "query": "SELECT id, text FROM 'todos' WHERE status NOT IN (?, ?)",
181
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
182
- }
183
- `);
184
- });
185
- it('should handle OFFSET and LIMIT clauses', () => {
186
- expect(dump(db.todos.select('id', 'text').where('completed', true).offset(10).limit(10))).toMatchInlineSnapshot(`
187
- {
188
- "bindValues": [
189
- 1,
190
- 10,
191
- 10,
192
- ],
193
- "query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ? LIMIT ?",
194
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
195
- }
196
- `);
197
- });
198
- it('should handle OFFSET and LIMIT clauses correctly', () => {
199
- // Test with both offset and limit
200
- expect(dump(db.todos.select('id', 'text').where('completed', true).offset(5).limit(10))).toMatchInlineSnapshot(`
201
- {
202
- "bindValues": [
203
- 1,
204
- 5,
205
- 10,
206
- ],
207
- "query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ? LIMIT ?",
208
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
209
- }
210
- `);
211
- // Test with only offset
212
- expect(dump(db.todos.select('id', 'text').where('completed', true).offset(5))).toMatchInlineSnapshot(`
213
- {
214
- "bindValues": [
215
- 1,
216
- 5,
217
- ],
218
- "query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ?",
219
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
220
- }
221
- `);
222
- // Test with only limit
223
- expect(dump(db.todos.select('id', 'text').where('completed', true).limit(10))).toMatchInlineSnapshot(`
224
- {
225
- "bindValues": [
226
- 1,
227
- 10,
228
- ],
229
- "query": "SELECT id, text FROM 'todos' WHERE completed = ? LIMIT ?",
230
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
231
- }
232
- `);
233
- });
234
- it('should handle COUNT queries', () => {
235
- expect(dump(db.todos.count())).toMatchInlineSnapshot(`
236
- {
237
- "bindValues": [],
238
- "query": "SELECT COUNT(*) as count FROM 'todos'",
239
- "schema": "(ReadonlyArray<({ readonly count: number } <-> number)> <-> number)",
240
- }
241
- `);
242
- expect(dump(db.todos.count().where('completed', true))).toMatchInlineSnapshot(`
243
- {
244
- "bindValues": [
245
- 1,
246
- ],
247
- "query": "SELECT COUNT(*) as count FROM 'todos' WHERE completed = ?",
248
- "schema": "(ReadonlyArray<({ readonly count: number } <-> number)> <-> number)",
249
- }
250
- `);
251
- });
252
- it('should handle NULL comparisons', () => {
253
- expect(dump(db.todos.select('id', 'text').where('deletedAt', '=', null))).toMatchInlineSnapshot(`
254
- {
255
- "bindValues": [],
256
- "query": "SELECT id, text FROM 'todos' WHERE deletedAt IS NULL",
257
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
258
- }
259
- `);
260
- expect(dump(db.todos.select('id', 'text').where('deletedAt', '!=', null))).toMatchInlineSnapshot(`
261
- {
262
- "bindValues": [],
263
- "query": "SELECT id, text FROM 'todos' WHERE deletedAt IS NOT NULL",
264
- "schema": "ReadonlyArray<{ readonly id: string; readonly text: string }>",
265
- }
266
- `);
267
- });
268
- it('should handle orderBy', () => {
269
- expect(dump(db.todos.orderBy('completed', 'desc'))).toMatchInlineSnapshot(`
270
- {
271
- "bindValues": [],
272
- "query": "SELECT * FROM 'todos' ORDER BY completed desc",
273
- "schema": "ReadonlyArray<todos>",
274
- }
275
- `);
276
- expect(dump(db.todos.orderBy([{ col: 'completed', direction: 'desc' }]))).toMatchInlineSnapshot(`
277
- {
278
- "bindValues": [],
279
- "query": "SELECT * FROM 'todos' ORDER BY completed desc",
280
- "schema": "ReadonlyArray<todos>",
281
- }
282
- `);
283
- expect(dump(db.todos.orderBy([]))).toMatchInlineSnapshot(`
284
- {
285
- "bindValues": [],
286
- "query": "SELECT * FROM 'todos'",
287
- "schema": "ReadonlyArray<todos>",
288
- }
289
- `);
290
- });
291
- });
292
- // describe('getOrCreate queries', () => {
293
- // it('should handle getOrCreate queries', () => {
294
- // expect(dump(db.UiState.getOrCreate('sessionid-1'))).toMatchInlineSnapshot(`
295
- // {
296
- // "bindValues": [
297
- // "sessionid-1",
298
- // ],
299
- // "query": "SELECT * FROM 'UiState' WHERE id = ?",
300
- // "schema": "...", // TODO determine schema
301
- // }
302
- // `)
303
- // })
304
- // it('should handle getOrCreate queries with default id', () => {
305
- // expect(dump(db.UiStateWithDefaultId.getOrCreate())).toMatchInlineSnapshot(`
306
- // {
307
- // "bindValues": [],
308
- // "query": "SELECT * FROM 'UiState' WHERE id = ?",
309
- // "schema": "...", // TODO determine schema
310
- // }
311
- // `)
312
- // })
313
- // // it('should handle row queries with numbers', () => {
314
- // // expect(dump(db.todosWithIntId.getOrCreate(123, { insertValues: { status: 'active' } }))).toMatchInlineSnapshot(`
315
- // // {
316
- // // "bindValues": [
317
- // // 123,
318
- // // ],
319
- // // "query": "SELECT * FROM 'todos_with_int_id' WHERE id = ?",
320
- // // "schema": "...", // TODO determine schema
321
- // // }
322
- // // `)
323
- // // })
324
- // })
325
- describe('write operations', () => {
326
- it('should handle INSERT queries', () => {
327
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }))).toMatchInlineSnapshot(`
328
- {
329
- "bindValues": [
330
- "123",
331
- "Buy milk",
332
- "active",
333
- ],
334
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
335
- "schema": "number",
336
- }
337
- `);
338
- });
339
- it('should handle INSERT queries with undefined values', () => {
340
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active', completed: undefined })))
341
- .toMatchInlineSnapshot(`
342
- {
343
- "bindValues": [
344
- "123",
345
- "Buy milk",
346
- "active",
347
- ],
348
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
349
- "schema": "number",
350
- }
351
- `);
352
- });
353
- // Test helped to catch a bindValues ordering bug
354
- it('should handle INSERT queries (issue)', () => {
355
- expect(dump(db.issue.insert({
356
- id: 1,
357
- title: 'Revert the user profile page',
358
- priority: 2,
359
- created: new Date('2024-08-01T17:15:20.507Z'),
360
- modified: new Date('2024-12-29T17:15:20.507Z'),
361
- kanbanorder: 'a2',
362
- creator: 'John Doe',
363
- }))).toMatchInlineSnapshot(`
364
- {
365
- "bindValues": [
366
- 1,
367
- "Revert the user profile page",
368
- 2,
369
- 1722532520507,
370
- 1735492520507,
371
- "a2",
372
- "John Doe",
373
- ],
374
- "query": "INSERT INTO 'issue' (id, title, priority, created, modified, kanbanorder, creator) VALUES (?, ?, ?, ?, ?, ?, ?)",
375
- "schema": "number",
376
- }
377
- `);
378
- });
379
- it('should handle UPDATE queries', () => {
380
- expect(dump(db.todos.update({ status: 'completed' }).where({ id: '123' }))).toMatchInlineSnapshot(`
381
- {
382
- "bindValues": [
383
- "completed",
384
- "123",
385
- ],
386
- "query": "UPDATE 'todos' SET status = ? WHERE id = ?",
387
- "schema": "number",
388
- }
389
- `);
390
- // empty update set
391
- expect(dump(db.todos.update({}).where({ id: '123' }))).toMatchInlineSnapshot(`
392
- {
393
- "bindValues": [],
394
- "query": "SELECT 1",
395
- "schema": "number",
396
- }
397
- `);
398
- });
399
- it('should handle UPDATE queries with undefined values', () => {
400
- expect(dump(db.todos.update({ status: undefined, text: 'some text' }).where({ id: '123' })))
401
- .toMatchInlineSnapshot(`
402
- {
403
- "bindValues": [
404
- "some text",
405
- "123",
406
- ],
407
- "query": "UPDATE 'todos' SET text = ? WHERE id = ?",
408
- "schema": "number",
409
- }
410
- `);
411
- });
412
- it('should handle UPDATE queries with undefined values (issue)', () => {
413
- expect(dump(db.issue.update({ priority: 2, creator: 'John Doe' }).where({ id: 1 }))).toMatchInlineSnapshot(`
414
- {
415
- "bindValues": [
416
- 2,
417
- "John Doe",
418
- 1,
419
- ],
420
- "query": "UPDATE 'issue' SET priority = ?, creator = ? WHERE id = ?",
421
- "schema": "number",
422
- }
423
- `);
424
- });
425
- it('should handle DELETE queries', () => {
426
- expect(dump(db.todos.delete().where({ status: 'completed' }))).toMatchInlineSnapshot(`
427
- {
428
- "bindValues": [
429
- "completed",
430
- ],
431
- "query": "DELETE FROM 'todos' WHERE status = ?",
432
- "schema": "number",
433
- }
434
- `);
435
- });
436
- it('should handle INSERT with ON CONFLICT', () => {
437
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')))
438
- .toMatchInlineSnapshot(`
439
- {
440
- "bindValues": [
441
- "123",
442
- "Buy milk",
443
- "active",
444
- ],
445
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO NOTHING",
446
- "schema": "number",
447
- }
448
- `);
449
- expect(dump(db.todos
450
- .insert({ id: '123', text: 'Buy milk', status: 'active' })
451
- .onConflict('id', 'update', { text: 'Buy soy milk', status: 'active' }))).toMatchInlineSnapshot(`
452
- {
453
- "bindValues": [
454
- "123",
455
- "Buy milk",
456
- "active",
457
- "Buy soy milk",
458
- "active",
459
- ],
460
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET text = ?, status = ?",
461
- "schema": "number",
462
- }
463
- `);
464
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')))
465
- .toMatchInlineSnapshot(`
466
- {
467
- "bindValues": [
468
- "123",
469
- "Buy milk",
470
- "active",
471
- ],
472
- "query": "INSERT OR REPLACE INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
473
- "schema": "number",
474
- }
475
- `);
476
- });
477
- it('should handle ON CONFLICT with multiple columns', () => {
478
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict(['id', 'status'], 'ignore'))).toMatchInlineSnapshot(`
479
- {
480
- "bindValues": [
481
- "123",
482
- "Buy milk",
483
- "active",
484
- ],
485
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id, status) DO NOTHING",
486
- "schema": "number",
487
- }
488
- `);
489
- });
490
- it('should handle RETURNING clause', () => {
491
- expect(dump(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')))
492
- .toMatchInlineSnapshot(`
493
- {
494
- "bindValues": [
495
- "123",
496
- "Buy milk",
497
- "active",
498
- ],
499
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) RETURNING id",
500
- "schema": "ReadonlyArray<{ readonly id: string }>",
501
- }
502
- `);
503
- expect(dump(db.todos.update({ status: 'completed' }).where({ id: '123' }).returning('id')))
504
- .toMatchInlineSnapshot(`
505
- {
506
- "bindValues": [
507
- "completed",
508
- "123",
509
- ],
510
- "query": "UPDATE 'todos' SET status = ? WHERE id = ? RETURNING id",
511
- "schema": "ReadonlyArray<{ readonly id: string }>",
512
- }
513
- `);
514
- expect(dump(db.todos.delete().where({ status: 'completed' }).returning('id'))).toMatchInlineSnapshot(`
515
- {
516
- "bindValues": [
517
- "completed",
518
- ],
519
- "query": "DELETE FROM 'todos' WHERE status = ? RETURNING id",
520
- "schema": "ReadonlyArray<{ readonly id: string }>",
521
- }
522
- `);
523
- });
524
- });
525
- });
526
- // TODO nested queries
527
- // const rawSql = <A, I>(sql: string, params: { [key: string]: any }, schema: Schema.Schema<A, I>) =>
528
- // ({
529
- // sql,
530
- // params,
531
- // schema,
532
- // }) as any as QueryBuilder<A, any>
533
- // Translates to
534
- // SELECT todos.*, (SELECT COUNT(*) FROM comments WHERE comments.todoId = todos.id) AS commentsCount
535
- // FROM todos WHERE todos.completed = true
536
- // const q4CommentsCountSchema = Schema.Struct({ count: Schema.Number }).pipe(
537
- // Schema.pluck('count'),
538
- // Schema.Array,
539
- // Schema.headOrElse(),
540
- // )
541
- // const _q4$ = db.todos
542
- // .select({
543
- // commentsCount: (ref) =>
544
- // rawSql(
545
- // sql`SELECT COUNT(*) as count FROM comments WHERE comments.todoId = $todoId`,
546
- // { todoId: ref },
547
- // q4CommentsCountSchema,
548
- // ),
549
- // })
550
- // .where({ completed: true })
551
- // const _q5$ = db.todos
552
- // .select({ commentsCount: (todoId: TODO) => comments.query.where({ todoId }).count() })
553
- // .where({ completed: true })
554
- //# sourceMappingURL=impl.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl.test.js","sourceRoot":"","sources":["../../src/query-builder/impl.test.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- export * from './api.ts';
2
- export * from './impl.ts';
3
- /**
4
- * Design decisions:
5
- *
6
- * - Close abstraction to SQLite to provide a simple & convenient API with predictable behaviour
7
- * - Use table schema definitions to parse, map & validate query results
8
- * - Implementation detail: Separate type-level & AST-based runtime implementation
9
- *
10
- * Currently not supported (not exhaustive list):
11
- * - Assumes a `id` column as primary key
12
- * - Composite primary keys
13
- *
14
- * Other known limitations
15
- * - Doesn't exclude all invalid query patterns on type level `e.g. `db.todos.returning('id')`
16
- */
17
- //# sourceMappingURL=mod.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/query-builder/mod.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAEzB;;;;;;;;;;;;;GAaG"}
@@ -1,17 +0,0 @@
1
- export * from './api.js';
2
- export * from './impl.js';
3
- /**
4
- * Design decisions:
5
- *
6
- * - Close abstraction to SQLite to provide a simple & convenient API with predictable behaviour
7
- * - Use table schema definitions to parse, map & validate query results
8
- * - Implementation detail: Separate type-level & AST-based runtime implementation
9
- *
10
- * Currently not supported (not exhaustive list):
11
- * - Assumes a `id` column as primary key
12
- * - Composite primary keys
13
- *
14
- * Other known limitations
15
- * - Doesn't exclude all invalid query patterns on type level `e.g. `db.todos.returning('id')`
16
- */
17
- //# sourceMappingURL=mod.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/query-builder/mod.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAEzB;;;;;;;;;;;;;GAaG"}
@@ -1,38 +0,0 @@
1
- import type { SessionIdSymbol } from './adapter-types.js';
2
- import type { DbSchema } from './schema/index.js';
3
- /**
4
- * Semantic information about a query with supported cases being:
5
- * - a whole row
6
- * - a single column value
7
- * - a sub value in a JSON column
8
- *
9
- * This information is currently only used for derived mutations.
10
- */
11
- export type QueryInfo = QueryInfo.None | QueryInfo.Row | QueryInfo.Col | QueryInfo.ColJsonValue;
12
- export declare namespace QueryInfo {
13
- type None = {
14
- _tag: 'None';
15
- };
16
- type Row = {
17
- _tag: 'Row';
18
- table: DbSchema.TableDefBase;
19
- id: string | SessionIdSymbol;
20
- };
21
- type Col = {
22
- _tag: 'Col';
23
- table: DbSchema.TableDefBase;
24
- id: string | SessionIdSymbol;
25
- column: string;
26
- };
27
- type ColJsonValue = {
28
- _tag: 'ColJsonValue';
29
- table: DbSchema.TableDefBase;
30
- id: string | SessionIdSymbol;
31
- column: string;
32
- /**
33
- * example: `$.tabs[3].items[2]` (`$` referring to the column value)
34
- */
35
- jsonPath: string;
36
- };
37
- }
38
- //# sourceMappingURL=query-info.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-info.d.ts","sourceRoot":"","sources":["../src/query-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,YAAY,CAAA;AAO/F,yBAAiB,SAAS,CAAC;IACzB,KAAY,IAAI,GAAG;QACjB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IAED,KAAY,GAAG,GAAG;QAChB,IAAI,EAAE,KAAK,CAAA;QACX,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAA;QAC5B,EAAE,EAAE,MAAM,GAAG,eAAe,CAAA;KAC7B,CAAA;IAED,KAAY,GAAG,GAAG;QAChB,IAAI,EAAE,KAAK,CAAA;QACX,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAA;QAC5B,EAAE,EAAE,MAAM,GAAG,eAAe,CAAA;QAC5B,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IAED,KAAY,YAAY,GAAG;QACzB,IAAI,EAAE,cAAc,CAAA;QACpB,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAA;QAC5B,EAAE,EAAE,MAAM,GAAG,eAAe,CAAA;QAC5B,MAAM,EAAE,MAAM,CAAA;QACd;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CA0BF"}
@@ -1,7 +0,0 @@
1
- export {};
2
- // type GetJsonColumn<TTableDef extends DbSchema.TableDefBase> = keyof {
3
- // [ColName in keyof TTableDef['sqliteDef']['columns'] as TTableDef['sqliteDef']['columns'][ColName]['columnType'] extends 'text'
4
- // ? ColName
5
- // : never]: {}
6
- // }
7
- //# sourceMappingURL=query-info.js.map