@livestore/common 0.0.0-snapshot-2ef046b02334f52613d31dbe06af53487685edc0 → 0.0.0-snapshot-8115ad48d5a57244358c943ecc92bb0a30274b87

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 (272) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +34 -13
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +20 -2
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts +1 -1
  11. package/dist/bounded-collections.d.ts.map +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  16. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  17. package/dist/devtools/devtools-messages-leader.d.ts +45 -45
  18. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  19. package/dist/devtools/devtools-messages-leader.js +11 -11
  20. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  21. package/dist/index.d.ts +2 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -5
  24. package/dist/index.js.map +1 -1
  25. package/dist/leader-thread/LeaderSyncProcessor.d.ts +25 -12
  26. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  27. package/dist/leader-thread/LeaderSyncProcessor.js +146 -98
  28. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  29. package/dist/leader-thread/{apply-mutation.d.ts → apply-event.d.ts} +7 -7
  30. package/dist/leader-thread/apply-event.d.ts.map +1 -0
  31. package/dist/leader-thread/{apply-mutation.js → apply-event.js} +45 -45
  32. package/dist/leader-thread/apply-event.js.map +1 -0
  33. package/dist/leader-thread/eventlog.d.ts +27 -0
  34. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  35. package/dist/leader-thread/eventlog.js +123 -0
  36. package/dist/leader-thread/eventlog.js.map +1 -0
  37. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  38. package/dist/leader-thread/leader-worker-devtools.js +21 -19
  39. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  40. package/dist/leader-thread/make-leader-thread-layer.d.ts +16 -4
  41. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  42. package/dist/leader-thread/make-leader-thread-layer.js +23 -16
  43. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  44. package/dist/leader-thread/mod.d.ts +1 -1
  45. package/dist/leader-thread/mod.d.ts.map +1 -1
  46. package/dist/leader-thread/mod.js +1 -1
  47. package/dist/leader-thread/mod.js.map +1 -1
  48. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  49. package/dist/leader-thread/recreate-db.js +6 -7
  50. package/dist/leader-thread/recreate-db.js.map +1 -1
  51. package/dist/leader-thread/types.d.ts +14 -15
  52. package/dist/leader-thread/types.d.ts.map +1 -1
  53. package/dist/materializer-helper.d.ts +23 -0
  54. package/dist/materializer-helper.d.ts.map +1 -0
  55. package/dist/materializer-helper.js +70 -0
  56. package/dist/materializer-helper.js.map +1 -0
  57. package/dist/query-builder/api.d.ts +56 -51
  58. package/dist/query-builder/api.d.ts.map +1 -1
  59. package/dist/query-builder/api.js +3 -5
  60. package/dist/query-builder/api.js.map +1 -1
  61. package/dist/query-builder/astToSql.d.ts.map +1 -1
  62. package/dist/query-builder/astToSql.js +59 -37
  63. package/dist/query-builder/astToSql.js.map +1 -1
  64. package/dist/query-builder/impl.d.ts +2 -3
  65. package/dist/query-builder/impl.d.ts.map +1 -1
  66. package/dist/query-builder/impl.js +48 -46
  67. package/dist/query-builder/impl.js.map +1 -1
  68. package/dist/query-builder/impl.test.d.ts +86 -1
  69. package/dist/query-builder/impl.test.d.ts.map +1 -1
  70. package/dist/query-builder/impl.test.js +223 -36
  71. package/dist/query-builder/impl.test.js.map +1 -1
  72. package/dist/rehydrate-from-eventlog.d.ts +15 -0
  73. package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
  74. package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +26 -25
  75. package/dist/rehydrate-from-eventlog.js.map +1 -0
  76. package/dist/schema/EventDef.d.ts +136 -0
  77. package/dist/schema/EventDef.d.ts.map +1 -0
  78. package/dist/schema/EventDef.js +58 -0
  79. package/dist/schema/EventDef.js.map +1 -0
  80. package/dist/schema/EventId.d.ts +7 -2
  81. package/dist/schema/EventId.d.ts.map +1 -1
  82. package/dist/schema/EventId.js +18 -3
  83. package/dist/schema/EventId.js.map +1 -1
  84. package/dist/schema/{MutationEvent.d.ts → LiveStoreEvent.d.ts} +56 -56
  85. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  86. package/dist/schema/{MutationEvent.js → LiveStoreEvent.js} +25 -25
  87. package/dist/schema/LiveStoreEvent.js.map +1 -0
  88. package/dist/schema/client-document-def.d.ts +223 -0
  89. package/dist/schema/client-document-def.d.ts.map +1 -0
  90. package/dist/schema/client-document-def.js +170 -0
  91. package/dist/schema/client-document-def.js.map +1 -0
  92. package/dist/schema/client-document-def.test.d.ts +2 -0
  93. package/dist/schema/client-document-def.test.d.ts.map +1 -0
  94. package/dist/schema/client-document-def.test.js +201 -0
  95. package/dist/schema/client-document-def.test.js.map +1 -0
  96. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
  97. package/dist/schema/events.d.ts +2 -0
  98. package/dist/schema/events.d.ts.map +1 -0
  99. package/dist/schema/events.js +2 -0
  100. package/dist/schema/events.js.map +1 -0
  101. package/dist/schema/mod.d.ts +4 -3
  102. package/dist/schema/mod.d.ts.map +1 -1
  103. package/dist/schema/mod.js +4 -3
  104. package/dist/schema/mod.js.map +1 -1
  105. package/dist/schema/schema.d.ts +26 -22
  106. package/dist/schema/schema.d.ts.map +1 -1
  107. package/dist/schema/schema.js +45 -43
  108. package/dist/schema/schema.js.map +1 -1
  109. package/dist/schema/sqlite-state.d.ts +12 -0
  110. package/dist/schema/sqlite-state.d.ts.map +1 -0
  111. package/dist/schema/sqlite-state.js +36 -0
  112. package/dist/schema/sqlite-state.js.map +1 -0
  113. package/dist/schema/system-tables.d.ts +67 -98
  114. package/dist/schema/system-tables.d.ts.map +1 -1
  115. package/dist/schema/system-tables.js +62 -48
  116. package/dist/schema/system-tables.js.map +1 -1
  117. package/dist/schema/table-def.d.ts +26 -96
  118. package/dist/schema/table-def.d.ts.map +1 -1
  119. package/dist/schema/table-def.js +14 -64
  120. package/dist/schema/table-def.js.map +1 -1
  121. package/dist/schema/view.d.ts +3 -0
  122. package/dist/schema/view.d.ts.map +1 -0
  123. package/dist/schema/view.js +3 -0
  124. package/dist/schema/view.js.map +1 -0
  125. package/dist/schema-management/common.d.ts +4 -4
  126. package/dist/schema-management/common.d.ts.map +1 -1
  127. package/dist/schema-management/migrations.d.ts.map +1 -1
  128. package/dist/schema-management/migrations.js +6 -6
  129. package/dist/schema-management/migrations.js.map +1 -1
  130. package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
  131. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  132. package/dist/schema-management/validate-mutation-defs.js +17 -17
  133. package/dist/schema-management/validate-mutation-defs.js.map +1 -1
  134. package/dist/sync/ClientSessionSyncProcessor.d.ts +7 -7
  135. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  136. package/dist/sync/ClientSessionSyncProcessor.js +33 -30
  137. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  138. package/dist/sync/next/facts.d.ts +19 -19
  139. package/dist/sync/next/facts.d.ts.map +1 -1
  140. package/dist/sync/next/facts.js +2 -2
  141. package/dist/sync/next/facts.js.map +1 -1
  142. package/dist/sync/next/history-dag-common.d.ts +3 -3
  143. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  144. package/dist/sync/next/history-dag-common.js +1 -1
  145. package/dist/sync/next/history-dag-common.js.map +1 -1
  146. package/dist/sync/next/history-dag.js +1 -1
  147. package/dist/sync/next/history-dag.js.map +1 -1
  148. package/dist/sync/next/rebase-events.d.ts +7 -7
  149. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  150. package/dist/sync/next/rebase-events.js +5 -5
  151. package/dist/sync/next/rebase-events.js.map +1 -1
  152. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  153. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  154. package/dist/sync/next/test/compact-events.test.js +71 -71
  155. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  156. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +25 -25
  157. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  158. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +60 -25
  159. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  160. package/dist/sync/next/test/mod.d.ts +1 -1
  161. package/dist/sync/next/test/mod.d.ts.map +1 -1
  162. package/dist/sync/next/test/mod.js +1 -1
  163. package/dist/sync/next/test/mod.js.map +1 -1
  164. package/dist/sync/sync.d.ts +3 -3
  165. package/dist/sync/sync.d.ts.map +1 -1
  166. package/dist/sync/syncstate.d.ts +30 -30
  167. package/dist/sync/syncstate.d.ts.map +1 -1
  168. package/dist/sync/syncstate.js +73 -40
  169. package/dist/sync/syncstate.js.map +1 -1
  170. package/dist/sync/syncstate.test.js +175 -184
  171. package/dist/sync/syncstate.test.js.map +1 -1
  172. package/dist/sync/validate-push-payload.d.ts +2 -2
  173. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  174. package/dist/sync/validate-push-payload.js.map +1 -1
  175. package/dist/version.d.ts +1 -1
  176. package/dist/version.js +1 -1
  177. package/package.json +3 -3
  178. package/src/__tests__/fixture.ts +36 -15
  179. package/src/adapter-types.ts +33 -13
  180. package/src/debug-info.ts +1 -0
  181. package/src/devtools/devtools-messages-leader.ts +13 -13
  182. package/src/index.ts +2 -5
  183. package/src/leader-thread/LeaderSyncProcessor.ts +210 -138
  184. package/src/leader-thread/{apply-mutation.ts → apply-event.ts} +61 -61
  185. package/src/leader-thread/eventlog.ts +199 -0
  186. package/src/leader-thread/leader-worker-devtools.ts +22 -19
  187. package/src/leader-thread/make-leader-thread-layer.ts +51 -29
  188. package/src/leader-thread/mod.ts +1 -1
  189. package/src/leader-thread/recreate-db.ts +6 -8
  190. package/src/leader-thread/types.ts +15 -16
  191. package/src/materializer-helper.ts +110 -0
  192. package/src/query-builder/api.ts +77 -103
  193. package/src/query-builder/astToSql.ts +68 -39
  194. package/src/query-builder/impl.test.ts +239 -42
  195. package/src/query-builder/impl.ts +72 -56
  196. package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +35 -38
  197. package/src/schema/EventDef.ts +216 -0
  198. package/src/schema/EventId.ts +23 -4
  199. package/src/schema/{MutationEvent.ts → LiveStoreEvent.ts} +68 -69
  200. package/src/schema/client-document-def.test.ts +239 -0
  201. package/src/schema/client-document-def.ts +444 -0
  202. package/src/schema/db-schema/dsl/mod.ts +0 -1
  203. package/src/schema/events.ts +1 -0
  204. package/src/schema/mod.ts +4 -3
  205. package/src/schema/schema.ts +78 -68
  206. package/src/schema/sqlite-state.ts +62 -0
  207. package/src/schema/system-tables.ts +42 -53
  208. package/src/schema/table-def.ts +51 -209
  209. package/src/schema/view.ts +2 -0
  210. package/src/schema-management/common.ts +4 -4
  211. package/src/schema-management/migrations.ts +8 -9
  212. package/src/schema-management/validate-mutation-defs.ts +22 -24
  213. package/src/sync/ClientSessionSyncProcessor.ts +41 -36
  214. package/src/sync/next/facts.ts +31 -32
  215. package/src/sync/next/history-dag-common.ts +4 -4
  216. package/src/sync/next/history-dag.ts +1 -1
  217. package/src/sync/next/rebase-events.ts +13 -13
  218. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  219. package/src/sync/next/test/compact-events.test.ts +73 -73
  220. package/src/sync/next/test/event-fixtures.ts +219 -0
  221. package/src/sync/next/test/mod.ts +1 -1
  222. package/src/sync/sync.ts +3 -3
  223. package/src/sync/syncstate.test.ts +180 -189
  224. package/src/sync/syncstate.ts +162 -100
  225. package/src/sync/validate-push-payload.ts +2 -2
  226. package/src/version.ts +1 -1
  227. package/tsconfig.json +1 -0
  228. package/dist/derived-mutations.d.ts +0 -109
  229. package/dist/derived-mutations.d.ts.map +0 -1
  230. package/dist/derived-mutations.js +0 -54
  231. package/dist/derived-mutations.js.map +0 -1
  232. package/dist/derived-mutations.test.d.ts +0 -2
  233. package/dist/derived-mutations.test.d.ts.map +0 -1
  234. package/dist/derived-mutations.test.js +0 -93
  235. package/dist/derived-mutations.test.js.map +0 -1
  236. package/dist/init-singleton-tables.d.ts +0 -4
  237. package/dist/init-singleton-tables.d.ts.map +0 -1
  238. package/dist/init-singleton-tables.js +0 -16
  239. package/dist/init-singleton-tables.js.map +0 -1
  240. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  241. package/dist/leader-thread/apply-mutation.js.map +0 -1
  242. package/dist/leader-thread/mutationlog.d.ts +0 -27
  243. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  244. package/dist/leader-thread/mutationlog.js +0 -124
  245. package/dist/leader-thread/mutationlog.js.map +0 -1
  246. package/dist/mutation.d.ts +0 -20
  247. package/dist/mutation.d.ts.map +0 -1
  248. package/dist/mutation.js +0 -68
  249. package/dist/mutation.js.map +0 -1
  250. package/dist/query-info.d.ts +0 -41
  251. package/dist/query-info.d.ts.map +0 -1
  252. package/dist/query-info.js +0 -7
  253. package/dist/query-info.js.map +0 -1
  254. package/dist/rehydrate-from-mutationlog.d.ts +0 -15
  255. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  256. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  257. package/dist/schema/MutationEvent.d.ts.map +0 -1
  258. package/dist/schema/MutationEvent.js.map +0 -1
  259. package/dist/schema/mutations.d.ts +0 -115
  260. package/dist/schema/mutations.d.ts.map +0 -1
  261. package/dist/schema/mutations.js +0 -42
  262. package/dist/schema/mutations.js.map +0 -1
  263. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  264. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  265. package/src/derived-mutations.test.ts +0 -101
  266. package/src/derived-mutations.ts +0 -170
  267. package/src/init-singleton-tables.ts +0 -24
  268. package/src/leader-thread/mutationlog.ts +0 -202
  269. package/src/mutation.ts +0 -108
  270. package/src/query-info.ts +0 -83
  271. package/src/schema/mutations.ts +0 -193
  272. package/src/sync/next/test/mutation-fixtures.ts +0 -228
@@ -1,6 +1,6 @@
1
- import { casesHandled } from '@livestore/utils';
1
+ import { casesHandled, shouldNeverHappen } from '@livestore/utils';
2
2
  import { Match, Option, Predicate, Schema } from '@livestore/utils/effect';
3
- import { QueryBuilderAstSymbol, TypeId } from './api.js';
3
+ import { QueryBuilderAstSymbol, QueryBuilderTypeId } from './api.js';
4
4
  import { astToSql } from './astToSql.js';
5
5
  export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
6
6
  const api = {
@@ -9,11 +9,12 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
9
9
  assertSelectQueryBuilderAst(ast);
10
10
  // eslint-disable-next-line prefer-rest-params
11
11
  const params = [...arguments];
12
- if (params.length === 2 && typeof params[0] === 'string' && typeof params[1] === 'object') {
13
- const [col, options] = params;
12
+ // Pluck if there's only one column selected
13
+ if (params.length === 1) {
14
+ const [col] = params;
14
15
  return makeQueryBuilder(tableDef, {
15
16
  ...ast,
16
- resultSchemaSingle: options.pluck ? ast.resultSchemaSingle.pipe(Schema.pluck(col)) : ast.resultSchemaSingle,
17
+ resultSchemaSingle: ast.resultSchemaSingle.pipe(Schema.pluck(col)),
17
18
  select: { columns: [col] },
18
19
  });
19
20
  }
@@ -121,42 +122,43 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
121
122
  pickFirst: options?.fallback ? { fallback: options.fallback } : { fallback: () => undefined },
122
123
  });
123
124
  },
124
- // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
125
- row() {
126
- // eslint-disable-next-line prefer-rest-params
127
- const params = [...arguments];
128
- let id;
129
- if (tableDef.options.isSingleton) {
130
- id = tableDef.sqliteDef.columns.id.default.pipe(Option.getOrThrow);
131
- }
132
- else {
133
- id = params[0];
134
- if (id === undefined) {
135
- invalidQueryBuilder(`Id missing for row query on non-singleton table ${tableDef.sqliteDef.name}`);
136
- }
137
- }
138
- // TODO validate all required columns are present and values are matching the schema
139
- const insertValues = params[1]?.insertValues ?? {};
140
- return makeQueryBuilder(tableDef, {
141
- _tag: 'RowQuery',
142
- id,
143
- tableDef,
144
- insertValues,
145
- });
146
- },
125
+ // // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
126
+ // getOrCreate() {
127
+ // if (tableDef.options.isClientDocumentTable === false) {
128
+ // return invalidQueryBuilder(`getOrCreate() is not allowed when table is not a client document table`)
129
+ // }
130
+ // // eslint-disable-next-line prefer-rest-params
131
+ // const params = [...arguments]
132
+ // let id: string | number
133
+ // // TODO refactor to handle default id
134
+ // id = params[0] as string | number
135
+ // if (id === undefined) {
136
+ // invalidQueryBuilder(`Id missing for row query on non-singleton table ${tableDef.sqliteDef.name}`)
137
+ // }
138
+ // // TODO validate all required columns are present and values are matching the schema
139
+ // const insertValues: Record<string, unknown> = params[1]?.insertValues ?? {}
140
+ // return makeQueryBuilder(tableDef, {
141
+ // _tag: 'RowQuery',
142
+ // id,
143
+ // tableDef,
144
+ // insertValues,
145
+ // }) as any
146
+ // },
147
147
  insert: (values) => {
148
+ const filteredValues = Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));
148
149
  return makeQueryBuilder(tableDef, {
149
150
  _tag: 'InsertQuery',
150
151
  tableDef,
151
- values: values,
152
+ values: filteredValues,
152
153
  onConflict: undefined,
153
154
  returning: undefined,
154
155
  resultSchema: Schema.Void,
155
156
  });
156
157
  },
157
- onConflict: (target, action, updateValues) => {
158
+ onConflict: (targetOrTargets, action, updateValues) => {
159
+ const targets = Array.isArray(targetOrTargets) ? targetOrTargets : [targetOrTargets];
158
160
  assertInsertQueryBuilderAst(ast);
159
- const onConflict = Match.value(action).pipe(Match.when('ignore', () => ({ target, action: { _tag: 'ignore' } })), Match.when('replace', () => ({ target, action: { _tag: 'replace' } })), Match.when('update', () => ({ target, action: { _tag: 'update', update: updateValues } })), Match.exhaustive);
161
+ const onConflict = Match.value(action).pipe(Match.when('ignore', () => ({ targets, action: { _tag: 'ignore' } })), Match.when('replace', () => ({ targets, action: { _tag: 'replace' } })), Match.when('update', () => ({ targets, action: { _tag: 'update', update: updateValues } })), Match.exhaustive);
160
162
  return makeQueryBuilder(tableDef, {
161
163
  ...ast,
162
164
  onConflict,
@@ -167,14 +169,15 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
167
169
  return makeQueryBuilder(tableDef, {
168
170
  ...ast,
169
171
  returning: columns,
170
- resultSchema: tableDef.schema.pipe(Schema.pick(...columns), Schema.Array),
172
+ resultSchema: tableDef.rowSchema.pipe(Schema.pick(...columns), Schema.Array),
171
173
  });
172
174
  },
173
175
  update: (values) => {
176
+ const filteredValues = Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));
174
177
  return makeQueryBuilder(tableDef, {
175
178
  _tag: 'UpdateQuery',
176
179
  tableDef,
177
- values: values,
180
+ values: filteredValues,
178
181
  where: [],
179
182
  returning: undefined,
180
183
  resultSchema: Schema.Void,
@@ -191,8 +194,9 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
191
194
  },
192
195
  };
193
196
  return {
194
- [TypeId]: TypeId,
197
+ [QueryBuilderTypeId]: QueryBuilderTypeId,
195
198
  [QueryBuilderAstSymbol]: ast,
199
+ ['ResultType']: 'only-for-type-inference',
196
200
  asSql: () => astToSql(ast),
197
201
  toString: () => {
198
202
  try {
@@ -216,30 +220,30 @@ const emptyAst = (tableDef) => ({
216
220
  limit: Option.none(),
217
221
  tableDef,
218
222
  where: [],
219
- resultSchemaSingle: tableDef.schema,
223
+ resultSchemaSingle: tableDef.rowSchema,
220
224
  });
221
225
  // Helper functions
222
226
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
223
227
  function assertSelectQueryBuilderAst(ast) {
224
228
  if (ast._tag !== 'SelectQuery') {
225
- throw new Error('Expected SelectQuery but got ' + ast._tag);
229
+ return shouldNeverHappen('Expected SelectQuery but got ' + ast._tag);
226
230
  }
227
231
  }
228
232
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
229
233
  function assertInsertQueryBuilderAst(ast) {
230
234
  if (ast._tag !== 'InsertQuery') {
231
- throw new Error('Expected InsertQuery but got ' + ast._tag);
235
+ return shouldNeverHappen('Expected InsertQuery but got ' + ast._tag);
232
236
  }
233
237
  }
234
238
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
235
239
  function assertWriteQueryBuilderAst(ast) {
236
240
  if (ast._tag !== 'InsertQuery' && ast._tag !== 'UpdateQuery' && ast._tag !== 'DeleteQuery') {
237
- throw new Error('Expected WriteQuery but got ' + ast._tag);
241
+ return shouldNeverHappen('Expected WriteQuery but got ' + ast._tag);
238
242
  }
239
243
  }
240
244
  const isRowQuery = (ast) => ast._tag === 'RowQuery';
241
245
  export const invalidQueryBuilder = (msg) => {
242
- throw new Error('Invalid query builder' + (msg ? `: ${msg}` : ''));
246
+ return shouldNeverHappen('Invalid query builder' + (msg ? `: ${msg}` : ''));
243
247
  };
244
248
  export const getResultSchema = (qb) => {
245
249
  const queryAst = qb[QueryBuilderAstSymbol];
@@ -260,18 +264,16 @@ export const getResultSchema = (qb) => {
260
264
  // For write operations with RETURNING clause, we need to return the appropriate schema
261
265
  if (queryAst.returning && queryAst.returning.length > 0) {
262
266
  // Create a schema for the returned columns
263
- return queryAst.tableDef.schema.pipe(Schema.pick(...queryAst.returning), Schema.Array);
267
+ return queryAst.tableDef.rowSchema.pipe(Schema.pick(...queryAst.returning), Schema.Array);
264
268
  }
265
269
  // For write operations without RETURNING, the result is the number of affected rows
266
270
  return Schema.Number;
267
271
  }
272
+ case 'RowQuery': {
273
+ return queryAst.tableDef.rowSchema.pipe(Schema.pluck('value'), Schema.annotations({ title: `${queryAst.tableDef.sqliteDef.name}.value` }), Schema.Array, Schema.headOrElse());
274
+ }
268
275
  default: {
269
- if (queryAst.tableDef.options.isSingleColumn) {
270
- return queryAst.tableDef.schema.pipe(Schema.pluck('value'), Schema.Array, Schema.headOrElse());
271
- }
272
- else {
273
- return queryAst.tableDef.schema.pipe(Schema.Array, Schema.headOrElse());
274
- }
276
+ casesHandled(queryAst);
275
277
  }
276
278
  }
277
279
  };
@@ -1 +1 @@
1
- {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,87 @@
1
- export {};
1
+ import { Schema } from '@livestore/utils/effect';
2
+ import { State } from '../schema/mod.js';
3
+ export declare const issue: State.SQLite.TableDef<{
4
+ name: "issue";
5
+ columns: {
6
+ readonly id: {
7
+ columnType: "integer";
8
+ schema: Schema.Schema<number, number, never>;
9
+ default: import("effect/Option").None<never>;
10
+ nullable: false;
11
+ primaryKey: true;
12
+ };
13
+ readonly title: {
14
+ columnType: "text";
15
+ schema: Schema.Schema<string, string, never>;
16
+ default: import("effect/Option").Some<"">;
17
+ nullable: false;
18
+ primaryKey: false;
19
+ };
20
+ readonly creator: {
21
+ columnType: "text";
22
+ schema: Schema.Schema<string, string, never>;
23
+ default: import("effect/Option").Some<"">;
24
+ nullable: false;
25
+ primaryKey: false;
26
+ };
27
+ readonly priority: {
28
+ columnType: "integer";
29
+ schema: Schema.Schema<0 | 2 | 1 | 3 | 4, 0 | 2 | 1 | 3 | 4, never>;
30
+ default: import("effect/Option").Some<0>;
31
+ nullable: false;
32
+ primaryKey: false;
33
+ };
34
+ readonly created: {
35
+ columnType: "integer";
36
+ schema: Schema.Schema<Date, number, never>;
37
+ default: import("effect/Option").None<never>;
38
+ nullable: false;
39
+ primaryKey: false;
40
+ };
41
+ readonly deleted: {
42
+ columnType: "integer";
43
+ schema: Schema.Schema<Date | null, number | null, never>;
44
+ default: import("effect/Option").None<never>;
45
+ nullable: true;
46
+ primaryKey: false;
47
+ };
48
+ readonly modified: {
49
+ columnType: "integer";
50
+ schema: Schema.Schema<Date, number, never>;
51
+ default: import("effect/Option").None<never>;
52
+ nullable: false;
53
+ primaryKey: false;
54
+ };
55
+ readonly kanbanorder: {
56
+ columnType: "text";
57
+ schema: Schema.Schema<string, string, never>;
58
+ default: import("effect/Option").Some<"">;
59
+ nullable: false;
60
+ primaryKey: false;
61
+ };
62
+ };
63
+ indexes?: ReadonlyArray<import("../schema/db-schema/dsl/mod.js").Index>;
64
+ ast: import("../schema/db-schema/ast/sqlite.js").Table;
65
+ }, {
66
+ isClientDocumentTable: false;
67
+ requiredInsertColumnNames: "id" | "created" | "modified";
68
+ }, Schema.Schema<{
69
+ readonly id: number;
70
+ readonly title: string;
71
+ readonly creator: string;
72
+ readonly priority: 0 | 2 | 1 | 3 | 4;
73
+ readonly created: Date;
74
+ readonly deleted: Date | null;
75
+ readonly modified: Date;
76
+ readonly kanbanorder: string;
77
+ }, {
78
+ readonly id: number;
79
+ readonly title: string;
80
+ readonly creator: string;
81
+ readonly priority: 0 | 2 | 1 | 3 | 4;
82
+ readonly created: number;
83
+ readonly deleted: number | null;
84
+ readonly modified: number;
85
+ readonly kanbanorder: string;
86
+ }, never>>;
2
87
  //# sourceMappingURL=impl.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"impl.test.d.ts","sourceRoot":"","sources":["../../src/query-builder/impl.test.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"impl.test.d.ts","sourceRoot":"","sources":["../../src/query-builder/impl.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAqDxC,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgBhB,CAAA"}
@@ -1,27 +1,70 @@
1
1
  import { Schema } from '@livestore/utils/effect';
2
2
  import { describe, expect, it } from 'vitest';
3
- import { DbSchema } from '../schema/mod.js';
3
+ import { State } from '../schema/mod.js';
4
4
  import { getResultSchema } from './impl.js';
5
- const todos = DbSchema.table('todos', {
6
- id: DbSchema.text({ primaryKey: true }),
7
- text: DbSchema.text({ default: '', nullable: false }),
8
- completed: DbSchema.boolean({ default: false, nullable: false }),
9
- status: DbSchema.text({ schema: Schema.Literal('active', 'completed') }),
10
- deletedAt: DbSchema.datetime({ nullable: true }),
11
- // TODO consider leaning more into Effect schema
12
- // other: Schema.Number.pipe(DbSchema.asInteger),
13
- }, { deriveMutations: true });
14
- const todosWithIntId = DbSchema.table('todos_with_int_id', {
15
- id: DbSchema.integer({ primaryKey: true }),
16
- text: DbSchema.text({ default: '', nullable: false }),
17
- status: DbSchema.text({ schema: Schema.Literal('active', 'completed') }),
18
- }, { deriveMutations: true });
19
- const comments = DbSchema.table('comments', {
20
- id: DbSchema.text({ primaryKey: true }),
21
- text: DbSchema.text({ default: '', nullable: false }),
22
- todoId: DbSchema.text({}),
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
+ },
23
16
  });
24
- const db = { todos: todos.query, todosWithIntId: todosWithIntId.query, comments: comments.query };
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 };
25
68
  describe('query builder', () => {
26
69
  describe('result schema', () => {
27
70
  it('should print the schema', () => {
@@ -35,6 +78,12 @@ describe('query builder', () => {
35
78
  "bindValues": [],
36
79
  "query": "SELECT * FROM 'todos'",
37
80
  }
81
+ `);
82
+ expect(db.todos.select('id').asSql()).toMatchInlineSnapshot(`
83
+ {
84
+ "bindValues": [],
85
+ "query": "SELECT id FROM 'todos'",
86
+ }
38
87
  `);
39
88
  expect(db.todos.select('id', 'text').asSql()).toMatchInlineSnapshot(`
40
89
  {
@@ -122,6 +171,39 @@ describe('query builder', () => {
122
171
  }
123
172
  `);
124
173
  });
174
+ it('should handle OFFSET and LIMIT clauses correctly', () => {
175
+ // Test with both offset and limit
176
+ expect(db.todos.select('id', 'text').where('completed', true).offset(5).limit(10).asSql()).toMatchInlineSnapshot(`
177
+ {
178
+ "bindValues": [
179
+ 1,
180
+ 5,
181
+ 10,
182
+ ],
183
+ "query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ? LIMIT ?",
184
+ }
185
+ `);
186
+ // Test with only offset
187
+ expect(db.todos.select('id', 'text').where('completed', true).offset(5).asSql()).toMatchInlineSnapshot(`
188
+ {
189
+ "bindValues": [
190
+ 1,
191
+ 5,
192
+ ],
193
+ "query": "SELECT id, text FROM 'todos' WHERE completed = ? OFFSET ?",
194
+ }
195
+ `);
196
+ // Test with only limit
197
+ expect(db.todos.select('id', 'text').where('completed', true).limit(10).asSql()).toMatchInlineSnapshot(`
198
+ {
199
+ "bindValues": [
200
+ 1,
201
+ 10,
202
+ ],
203
+ "query": "SELECT id, text FROM 'todos' WHERE completed = ? LIMIT ?",
204
+ }
205
+ `);
206
+ });
125
207
  it('should handle COUNT queries', () => {
126
208
  expect(db.todos.count().asSql()).toMatchInlineSnapshot(`
127
209
  {
@@ -173,38 +255,86 @@ describe('query builder', () => {
173
255
  `);
174
256
  });
175
257
  });
176
- describe('row queries', () => {
177
- it('should handle row queries', () => {
178
- expect(db.todos.row('123', { insertValues: { status: 'completed' } }).asSql()).toMatchInlineSnapshot(`
258
+ // describe('getOrCreate queries', () => {
259
+ // it('should handle getOrCreate queries', () => {
260
+ // expect(db.UiState.getOrCreate('sessionid-1').asSql()).toMatchInlineSnapshot(`
261
+ // {
262
+ // "bindValues": [
263
+ // "sessionid-1",
264
+ // ],
265
+ // "query": "SELECT * FROM 'UiState' WHERE id = ?",
266
+ // }
267
+ // `)
268
+ // })
269
+ // it('should handle getOrCreate queries with default id', () => {
270
+ // expect(db.UiStateWithDefaultId.getOrCreate().asSql()).toMatchInlineSnapshot(`
271
+ // {
272
+ // "bindValues": [],
273
+ // "query": "SELECT * FROM 'UiState' WHERE id = ?",
274
+ // }
275
+ // `)
276
+ // })
277
+ // // it('should handle row queries with numbers', () => {
278
+ // // expect(db.todosWithIntId.getOrCreate(123, { insertValues: { status: 'active' } }).asSql()).toMatchInlineSnapshot(`
279
+ // // {
280
+ // // "bindValues": [
281
+ // // 123,
282
+ // // ],
283
+ // // "query": "SELECT * FROM 'todos_with_int_id' WHERE id = ?",
284
+ // // }
285
+ // // `)
286
+ // // })
287
+ // })
288
+ describe('write operations', () => {
289
+ it('should handle INSERT queries', () => {
290
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).asSql()).toMatchInlineSnapshot(`
179
291
  {
180
292
  "bindValues": [
181
293
  "123",
294
+ "Buy milk",
295
+ "active",
182
296
  ],
183
- "query": "SELECT * FROM 'todos' WHERE id = ?",
297
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
184
298
  }
185
299
  `);
186
300
  });
187
- it('should handle row queries with numbers', () => {
188
- expect(db.todosWithIntId.row(123, { insertValues: { status: 'active' } }).asSql()).toMatchInlineSnapshot(`
301
+ it('should handle INSERT queries with undefined values', () => {
302
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active', completed: undefined }).asSql())
303
+ .toMatchInlineSnapshot(`
189
304
  {
190
305
  "bindValues": [
191
- 123,
306
+ "123",
307
+ "Buy milk",
308
+ "active",
192
309
  ],
193
- "query": "SELECT * FROM 'todos_with_int_id' WHERE id = ?",
310
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
194
311
  }
195
312
  `);
196
313
  });
197
- });
198
- describe('write operations', () => {
199
- it('should handle INSERT queries', () => {
200
- expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).asSql()).toMatchInlineSnapshot(`
314
+ // Test helped to catch a bindValues ordering bug
315
+ it('should handle INSERT queries (issue)', () => {
316
+ expect(db.issue
317
+ .insert({
318
+ id: 1,
319
+ title: 'Revert the user profile page',
320
+ priority: 2,
321
+ created: new Date('2024-08-01T17:15:20.507Z'),
322
+ modified: new Date('2024-12-29T17:15:20.507Z'),
323
+ kanbanorder: 'a2',
324
+ creator: 'John Doe',
325
+ })
326
+ .asSql()).toMatchInlineSnapshot(`
201
327
  {
202
328
  "bindValues": [
203
- "123",
204
- "Buy milk",
205
- "active",
329
+ 1,
330
+ "Revert the user profile page",
331
+ 2,
332
+ 1722532520507,
333
+ 1735492520507,
334
+ "a2",
335
+ "John Doe",
206
336
  ],
207
- "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
337
+ "query": "INSERT INTO 'issue' (id, title, priority, created, modified, kanbanorder, creator) VALUES (?, ?, ?, ?, ?, ?, ?)",
208
338
  }
209
339
  `);
210
340
  });
@@ -217,6 +347,37 @@ describe('query builder', () => {
217
347
  ],
218
348
  "query": "UPDATE 'todos' SET status = ? WHERE id = ?",
219
349
  }
350
+ `);
351
+ // empty update set
352
+ expect(db.todos.update({}).where({ id: '123' }).asSql()).toMatchInlineSnapshot(`
353
+ {
354
+ "bindValues": [],
355
+ "query": "SELECT 1",
356
+ }
357
+ `);
358
+ });
359
+ it('should handle UPDATE queries with undefined values', () => {
360
+ expect(db.todos.update({ status: undefined, text: 'some text' }).where({ id: '123' }).asSql())
361
+ .toMatchInlineSnapshot(`
362
+ {
363
+ "bindValues": [
364
+ "some text",
365
+ "123",
366
+ ],
367
+ "query": "UPDATE 'todos' SET text = ? WHERE id = ?",
368
+ }
369
+ `);
370
+ });
371
+ it('should handle UPDATE queries with undefined values (issue)', () => {
372
+ expect(db.issue.update({ priority: 2, creator: 'John Doe' }).where({ id: 1 }).asSql()).toMatchInlineSnapshot(`
373
+ {
374
+ "bindValues": [
375
+ 2,
376
+ "John Doe",
377
+ 1,
378
+ ],
379
+ "query": "UPDATE 'issue' SET priority = ?, creator = ? WHERE id = ?",
380
+ }
220
381
  `);
221
382
  });
222
383
  it('should handle DELETE queries', () => {
@@ -255,6 +416,32 @@ describe('query builder', () => {
255
416
  ],
256
417
  "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET text = ?, status = ?",
257
418
  }
419
+ `);
420
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace').asSql())
421
+ .toMatchInlineSnapshot(`
422
+ {
423
+ "bindValues": [
424
+ "123",
425
+ "Buy milk",
426
+ "active",
427
+ ],
428
+ "query": "INSERT OR REPLACE INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
429
+ }
430
+ `);
431
+ });
432
+ it('should handle ON CONFLICT with multiple columns', () => {
433
+ expect(db.todos
434
+ .insert({ id: '123', text: 'Buy milk', status: 'active' })
435
+ .onConflict(['id', 'status'], 'ignore')
436
+ .asSql()).toMatchInlineSnapshot(`
437
+ {
438
+ "bindValues": [
439
+ "123",
440
+ "Buy milk",
441
+ "active",
442
+ ],
443
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id, status) DO NOTHING",
444
+ }
258
445
  `);
259
446
  });
260
447
  it('should handle RETURNING clause', () => {