@livestore/common 0.3.2-dev.9 → 0.4.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +2 -2
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/adapter-types.d.ts +4 -4
  5. package/dist/adapter-types.d.ts.map +1 -1
  6. package/dist/debug-info.d.ts +17 -17
  7. package/dist/devtools/devtools-messages-client-session.d.ts +38 -38
  8. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  9. package/dist/devtools/devtools-messages-leader.d.ts +28 -28
  10. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  11. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  12. package/dist/leader-thread/LeaderSyncProcessor.js +3 -1
  13. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  14. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  15. package/dist/leader-thread/make-leader-thread-layer.js +21 -4
  16. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  17. package/dist/leader-thread/shutdown-channel.d.ts +2 -2
  18. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  19. package/dist/leader-thread/shutdown-channel.js +2 -2
  20. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  21. package/dist/leader-thread/types.d.ts +1 -1
  22. package/dist/leader-thread/types.d.ts.map +1 -1
  23. package/dist/materializer-helper.d.ts +3 -3
  24. package/dist/materializer-helper.d.ts.map +1 -1
  25. package/dist/materializer-helper.js +2 -2
  26. package/dist/materializer-helper.js.map +1 -1
  27. package/dist/rematerialize-from-eventlog.js +1 -1
  28. package/dist/rematerialize-from-eventlog.js.map +1 -1
  29. package/dist/schema/EventDef.d.ts +104 -178
  30. package/dist/schema/EventSequenceNumber.d.ts +5 -0
  31. package/dist/schema/EventSequenceNumber.d.ts.map +1 -1
  32. package/dist/schema/EventSequenceNumber.js +7 -2
  33. package/dist/schema/EventSequenceNumber.js.map +1 -1
  34. package/dist/schema/EventSequenceNumber.test.js +2 -2
  35. package/dist/schema/LiveStoreEvent.d.ts +6 -5
  36. package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
  37. package/dist/schema/LiveStoreEvent.js +5 -0
  38. package/dist/schema/LiveStoreEvent.js.map +1 -1
  39. package/dist/schema/schema.d.ts +3 -0
  40. package/dist/schema/schema.d.ts.map +1 -1
  41. package/dist/schema/schema.js.map +1 -1
  42. package/dist/schema/state/sqlite/client-document-def.d.ts +3 -2
  43. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  44. package/dist/schema/state/sqlite/client-document-def.js +6 -4
  45. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  46. package/dist/schema/state/sqlite/client-document-def.test.js +76 -1
  47. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  48. package/dist/schema/state/sqlite/column-annotations.d.ts +34 -0
  49. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -0
  50. package/dist/schema/state/sqlite/column-annotations.js +50 -0
  51. package/dist/schema/state/sqlite/column-annotations.js.map +1 -0
  52. package/dist/schema/state/sqlite/column-annotations.test.d.ts +2 -0
  53. package/dist/schema/state/sqlite/column-annotations.test.d.ts.map +1 -0
  54. package/dist/schema/state/sqlite/column-annotations.test.js +179 -0
  55. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -0
  56. package/dist/schema/state/sqlite/column-def.d.ts +15 -0
  57. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -0
  58. package/dist/schema/state/sqlite/column-def.js +242 -0
  59. package/dist/schema/state/sqlite/column-def.js.map +1 -0
  60. package/dist/schema/state/sqlite/column-def.test.d.ts +2 -0
  61. package/dist/schema/state/sqlite/column-def.test.d.ts.map +1 -0
  62. package/dist/schema/state/sqlite/column-def.test.js +529 -0
  63. package/dist/schema/state/sqlite/column-def.test.js.map +1 -0
  64. package/dist/schema/state/sqlite/column-spec.d.ts +11 -0
  65. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -0
  66. package/dist/schema/state/sqlite/column-spec.js +39 -0
  67. package/dist/schema/state/sqlite/column-spec.js.map +1 -0
  68. package/dist/schema/state/sqlite/column-spec.test.d.ts +2 -0
  69. package/dist/schema/state/sqlite/column-spec.test.d.ts.map +1 -0
  70. package/dist/schema/state/sqlite/column-spec.test.js +146 -0
  71. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -0
  72. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +1 -0
  73. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  74. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +1 -0
  75. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  76. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +17 -4
  77. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  78. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +2 -0
  79. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  80. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +65 -165
  81. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  82. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -0
  83. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  84. package/dist/schema/state/sqlite/mod.d.ts +2 -0
  85. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  86. package/dist/schema/state/sqlite/mod.js +2 -0
  87. package/dist/schema/state/sqlite/mod.js.map +1 -1
  88. package/dist/schema/state/sqlite/query-builder/api.d.ts +309 -560
  89. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  90. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +1 -0
  91. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  92. package/dist/schema/state/sqlite/query-builder/astToSql.js +8 -6
  93. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  94. package/dist/schema/state/sqlite/system-tables.d.ts +464 -46
  95. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
  96. package/dist/schema/state/sqlite/table-def.d.ts +159 -152
  97. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  98. package/dist/schema/state/sqlite/table-def.js +45 -6
  99. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  100. package/dist/schema/state/sqlite/table-def.test.d.ts +2 -0
  101. package/dist/schema/state/sqlite/table-def.test.d.ts.map +1 -0
  102. package/dist/schema/state/sqlite/table-def.test.js +192 -0
  103. package/dist/schema/state/sqlite/table-def.test.js.map +1 -0
  104. package/dist/schema-management/common.d.ts +1 -1
  105. package/dist/schema-management/common.d.ts.map +1 -1
  106. package/dist/schema-management/common.js +11 -2
  107. package/dist/schema-management/common.js.map +1 -1
  108. package/dist/schema-management/migrations.d.ts +0 -1
  109. package/dist/schema-management/migrations.d.ts.map +1 -1
  110. package/dist/schema-management/migrations.js +4 -30
  111. package/dist/schema-management/migrations.js.map +1 -1
  112. package/dist/schema-management/migrations.test.d.ts +2 -0
  113. package/dist/schema-management/migrations.test.d.ts.map +1 -0
  114. package/dist/schema-management/migrations.test.js +52 -0
  115. package/dist/schema-management/migrations.test.js.map +1 -0
  116. package/dist/sql-queries/types.d.ts +37 -133
  117. package/dist/sqlite-db-helper.d.ts +3 -1
  118. package/dist/sqlite-db-helper.d.ts.map +1 -1
  119. package/dist/sqlite-db-helper.js +16 -0
  120. package/dist/sqlite-db-helper.js.map +1 -1
  121. package/dist/sqlite-types.d.ts +4 -4
  122. package/dist/sqlite-types.d.ts.map +1 -1
  123. package/dist/sync/ClientSessionSyncProcessor.d.ts +2 -2
  124. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  125. package/dist/sync/ClientSessionSyncProcessor.js +8 -7
  126. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  127. package/dist/sync/sync.d.ts.map +1 -1
  128. package/dist/sync/sync.js.map +1 -1
  129. package/dist/util.d.ts +3 -3
  130. package/dist/util.d.ts.map +1 -1
  131. package/dist/util.js.map +1 -1
  132. package/dist/version.d.ts +1 -1
  133. package/dist/version.js +1 -1
  134. package/package.json +4 -4
  135. package/src/ClientSessionLeaderThreadProxy.ts +2 -2
  136. package/src/adapter-types.ts +6 -4
  137. package/src/devtools/devtools-messages-leader.ts +3 -3
  138. package/src/leader-thread/LeaderSyncProcessor.ts +3 -1
  139. package/src/leader-thread/make-leader-thread-layer.ts +26 -7
  140. package/src/leader-thread/shutdown-channel.ts +2 -2
  141. package/src/leader-thread/types.ts +1 -1
  142. package/src/materializer-helper.ts +5 -11
  143. package/src/rematerialize-from-eventlog.ts +2 -2
  144. package/src/schema/EventSequenceNumber.test.ts +2 -2
  145. package/src/schema/EventSequenceNumber.ts +8 -2
  146. package/src/schema/LiveStoreEvent.ts +7 -1
  147. package/src/schema/schema.ts +4 -0
  148. package/src/schema/state/sqlite/client-document-def.test.ts +89 -1
  149. package/src/schema/state/sqlite/client-document-def.ts +7 -4
  150. package/src/schema/state/sqlite/column-annotations.test.ts +212 -0
  151. package/src/schema/state/sqlite/column-annotations.ts +77 -0
  152. package/src/schema/state/sqlite/column-def.test.ts +665 -0
  153. package/src/schema/state/sqlite/column-def.ts +290 -0
  154. package/src/schema/state/sqlite/column-spec.test.ts +223 -0
  155. package/src/schema/state/sqlite/column-spec.ts +42 -0
  156. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -0
  157. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +15 -0
  158. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +20 -2
  159. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +1 -0
  160. package/src/schema/state/sqlite/mod.ts +2 -0
  161. package/src/schema/state/sqlite/query-builder/api.ts +4 -3
  162. package/src/schema/state/sqlite/query-builder/astToSql.ts +9 -7
  163. package/src/schema/state/sqlite/table-def.test.ts +241 -0
  164. package/src/schema/state/sqlite/table-def.ts +222 -16
  165. package/src/schema-management/common.ts +10 -3
  166. package/src/schema-management/migrations.ts +4 -33
  167. package/src/sqlite-db-helper.ts +19 -1
  168. package/src/sqlite-types.ts +4 -4
  169. package/src/sync/ClientSessionSyncProcessor.ts +13 -8
  170. package/src/sync/sync.ts +2 -0
  171. package/src/util.ts +7 -2
  172. package/src/version.ts +1 -1
@@ -1,116 +1,97 @@
1
- import type { Option, Schema } from "@livestore/utils/effect";
2
- import type {
3
- GetValForKey,
4
- SingleOrReadonlyArray,
5
- } from "../../../../../../utils/dist/mod.ts";
6
- import type { SessionIdSymbol } from "../../../../adapter-types.ts";
7
- import type { SqlValue } from "../../../../util.ts";
8
- import type { ClientDocumentTableDef } from "../client-document-def.ts";
9
- import type { SqliteDsl } from "../db-schema/mod.ts";
10
- import type { TableDefBase } from "../table-def.ts";
11
- export type QueryBuilderAst =
12
- | QueryBuilderAst.SelectQuery
13
- | QueryBuilderAst.CountQuery
14
- | QueryBuilderAst.RowQuery
15
- | QueryBuilderAst.InsertQuery
16
- | QueryBuilderAst.UpdateQuery
17
- | QueryBuilderAst.DeleteQuery;
1
+ import type { GetValForKey, SingleOrReadonlyArray } from '@livestore/utils';
2
+ import { type Option, type Schema } from '@livestore/utils/effect';
3
+ import type { SessionIdSymbol } from '../../../../adapter-types.ts';
4
+ import type { SqlValue } from '../../../../util.ts';
5
+ import type { ClientDocumentTableDef } from '../client-document-def.ts';
6
+ import type { SqliteDsl } from '../db-schema/mod.ts';
7
+ import type { TableDefBase } from '../table-def.ts';
8
+ export type QueryBuilderAst = QueryBuilderAst.SelectQuery | QueryBuilderAst.CountQuery | QueryBuilderAst.RowQuery | QueryBuilderAst.InsertQuery | QueryBuilderAst.UpdateQuery | QueryBuilderAst.DeleteQuery;
18
9
  export declare namespace QueryBuilderAst {
19
- interface SelectQuery {
20
- readonly _tag: "SelectQuery";
21
- readonly columns: string[];
22
- readonly pickFirst:
23
- | {
24
- _tag: "disabled";
25
- }
26
- | {
27
- _tag: "enabled";
28
- behaviour: "undefined";
29
- }
30
- | {
31
- _tag: "enabled";
32
- behaviour: "error";
33
- }
34
- | {
35
- _tag: "enabled";
36
- behaviour: "fallback";
37
- fallback: () => any;
38
- };
39
- readonly select: {
40
- columns: ReadonlyArray<string>;
41
- };
42
- readonly orderBy: ReadonlyArray<OrderBy>;
43
- readonly offset: Option.Option<number>;
44
- readonly limit: Option.Option<number>;
45
- readonly tableDef: TableDefBase;
46
- readonly where: ReadonlyArray<QueryBuilderAst.Where>;
47
- readonly resultSchemaSingle: Schema.Schema<any>;
48
- }
49
- interface CountQuery {
50
- readonly _tag: "CountQuery";
51
- readonly tableDef: TableDefBase;
52
- readonly where: ReadonlyArray<QueryBuilderAst.Where>;
53
- readonly resultSchema: Schema.Schema<
54
- number,
55
- ReadonlyArray<{
56
- count: number;
57
- }>
58
- >;
59
- }
60
- interface RowQuery {
61
- readonly _tag: "RowQuery";
62
- readonly tableDef: ClientDocumentTableDef.Any;
63
- readonly id: string | SessionIdSymbol;
64
- readonly explicitDefaultValues: Record<string, unknown>;
65
- }
66
- interface InsertQuery {
67
- readonly _tag: "InsertQuery";
68
- readonly tableDef: TableDefBase;
69
- readonly values: Record<string, unknown>;
70
- readonly onConflict: OnConflict | undefined;
71
- readonly returning: string[] | undefined;
72
- readonly resultSchema: Schema.Schema<any>;
73
- }
74
- interface OnConflict {
75
- /** Conflicting column name */
76
- readonly targets: string[];
77
- readonly action:
78
- | {
79
- readonly _tag: "ignore";
80
- }
81
- | {
82
- readonly _tag: "replace";
83
- }
84
- | {
85
- readonly _tag: "update";
86
- readonly update: Record<string, unknown>;
87
- };
88
- }
89
- interface UpdateQuery {
90
- readonly _tag: "UpdateQuery";
91
- readonly tableDef: TableDefBase;
92
- readonly values: Record<string, unknown>;
93
- readonly where: ReadonlyArray<QueryBuilderAst.Where>;
94
- readonly returning: string[] | undefined;
95
- readonly resultSchema: Schema.Schema<any>;
96
- }
97
- interface DeleteQuery {
98
- readonly _tag: "DeleteQuery";
99
- readonly tableDef: TableDefBase;
100
- readonly where: ReadonlyArray<QueryBuilderAst.Where>;
101
- readonly returning: string[] | undefined;
102
- readonly resultSchema: Schema.Schema<any>;
103
- }
104
- type WriteQuery = InsertQuery | UpdateQuery | DeleteQuery;
105
- interface Where {
106
- readonly col: string;
107
- readonly op: QueryBuilder.WhereOps;
108
- readonly value: unknown;
109
- }
110
- interface OrderBy {
111
- readonly col: string;
112
- readonly direction: "asc" | "desc";
113
- }
10
+ interface SelectQuery {
11
+ readonly _tag: 'SelectQuery';
12
+ readonly columns: string[];
13
+ readonly pickFirst: {
14
+ _tag: 'disabled';
15
+ } | {
16
+ _tag: 'enabled';
17
+ behaviour: 'undefined';
18
+ } | {
19
+ _tag: 'enabled';
20
+ behaviour: 'error';
21
+ } | {
22
+ _tag: 'enabled';
23
+ behaviour: 'fallback';
24
+ fallback: () => any;
25
+ };
26
+ readonly select: {
27
+ columns: ReadonlyArray<string>;
28
+ };
29
+ readonly orderBy: ReadonlyArray<OrderBy>;
30
+ readonly offset: Option.Option<number>;
31
+ readonly limit: Option.Option<number>;
32
+ readonly tableDef: TableDefBase;
33
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
34
+ readonly resultSchemaSingle: Schema.Schema<any>;
35
+ }
36
+ interface CountQuery {
37
+ readonly _tag: 'CountQuery';
38
+ readonly tableDef: TableDefBase;
39
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
40
+ readonly resultSchema: Schema.Schema<number, ReadonlyArray<{
41
+ count: number;
42
+ }>>;
43
+ }
44
+ interface RowQuery {
45
+ readonly _tag: 'RowQuery';
46
+ readonly tableDef: ClientDocumentTableDef.Any;
47
+ readonly id: string | SessionIdSymbol;
48
+ readonly explicitDefaultValues: Record<string, unknown>;
49
+ }
50
+ interface InsertQuery {
51
+ readonly _tag: 'InsertQuery';
52
+ readonly tableDef: TableDefBase;
53
+ readonly values: Record<string, unknown>;
54
+ readonly onConflict: OnConflict | undefined;
55
+ readonly returning: string[] | undefined;
56
+ readonly resultSchema: Schema.Schema<any>;
57
+ }
58
+ interface OnConflict {
59
+ /** Conflicting column name */
60
+ readonly targets: string[];
61
+ readonly action: {
62
+ readonly _tag: 'ignore';
63
+ } | {
64
+ readonly _tag: 'replace';
65
+ } | {
66
+ readonly _tag: 'update';
67
+ readonly update: Record<string, unknown>;
68
+ };
69
+ }
70
+ interface UpdateQuery {
71
+ readonly _tag: 'UpdateQuery';
72
+ readonly tableDef: TableDefBase;
73
+ readonly values: Record<string, unknown>;
74
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
75
+ readonly returning: string[] | undefined;
76
+ readonly resultSchema: Schema.Schema<any>;
77
+ }
78
+ interface DeleteQuery {
79
+ readonly _tag: 'DeleteQuery';
80
+ readonly tableDef: TableDefBase;
81
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
82
+ readonly returning: string[] | undefined;
83
+ readonly resultSchema: Schema.Schema<any>;
84
+ }
85
+ type WriteQuery = InsertQuery | UpdateQuery | DeleteQuery;
86
+ interface Where {
87
+ readonly col: string;
88
+ readonly op: QueryBuilder.WhereOps;
89
+ readonly value: unknown;
90
+ }
91
+ interface OrderBy {
92
+ readonly col: string;
93
+ readonly direction: 'asc' | 'desc';
94
+ }
114
95
  }
115
96
  export declare const QueryBuilderAstSymbol: unique symbol;
116
97
  export type QueryBuilderAstSymbol = typeof QueryBuilderAstSymbol;
@@ -118,457 +99,225 @@ export declare const QueryBuilderResultSymbol: unique symbol;
118
99
  export type QueryBuilderResultSymbol = typeof QueryBuilderResultSymbol;
119
100
  export declare const QueryBuilderTypeId: unique symbol;
120
101
  export type QueryBuilderTypeId = typeof QueryBuilderTypeId;
121
- export declare const isQueryBuilder: (
122
- value: unknown,
123
- ) => value is QueryBuilder<any, any, any>;
124
- export type QueryBuilder<
125
- TResult,
126
- TTableDef extends TableDefBase,
127
- /** Used to gradually remove features from the API based on the query context */
128
- TWithout extends QueryBuilder.ApiFeature = never,
129
- > = {
130
- readonly [QueryBuilderTypeId]: QueryBuilderTypeId;
131
- readonly [QueryBuilderAstSymbol]: QueryBuilderAst;
132
- readonly ResultType: TResult;
133
- readonly asSql: () => {
134
- query: string;
135
- bindValues: SqlValue[];
136
- };
137
- readonly toString: () => string;
102
+ export declare const isQueryBuilder: (value: unknown) => value is QueryBuilder<any, any, any>;
103
+ export type QueryBuilder<TResult, TTableDef extends TableDefBase,
104
+ /** Used to gradually remove features from the API based on the query context */
105
+ TWithout extends QueryBuilder.ApiFeature = never> = {
106
+ readonly [QueryBuilderTypeId]: QueryBuilderTypeId;
107
+ readonly [QueryBuilderAstSymbol]: QueryBuilderAst;
108
+ readonly ResultType: TResult;
109
+ readonly asSql: () => {
110
+ query: string;
111
+ bindValues: SqlValue[];
112
+ usedTables: Set<string>;
113
+ };
114
+ readonly toString: () => string;
138
115
  } & Omit<QueryBuilder.ApiFull<TResult, TTableDef, TWithout>, TWithout>;
139
116
  export declare namespace QueryBuilder {
140
- type Any = QueryBuilder<any, any, any>;
141
- type WhereOps =
142
- | WhereOps.Equality
143
- | WhereOps.Order
144
- | WhereOps.Like
145
- | WhereOps.In;
146
- namespace WhereOps {
147
- type Equality = "=" | "!=";
148
- type Order = "<" | ">" | "<=" | ">=";
149
- type Like = "LIKE" | "NOT LIKE" | "ILIKE" | "NOT ILIKE";
150
- type In = "IN" | "NOT IN";
151
- type SingleValue = Equality | Order | Like;
152
- type MultiValue = In;
153
- }
154
- type ApiFeature =
155
- | "select"
156
- | "where"
157
- | "count"
158
- | "orderBy"
159
- | "offset"
160
- | "limit"
161
- | "first"
162
- | "row"
163
- | "insert"
164
- | "update"
165
- | "delete"
166
- | "returning"
167
- | "onConflict";
168
- type WhereParams<TTableDef extends TableDefBase> = Partial<{
169
- [K in keyof TTableDef["sqliteDef"]["columns"]]:
170
- | TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"]
171
- | {
172
- op: QueryBuilder.WhereOps.SingleValue;
173
- value: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"];
174
- }
175
- | {
176
- op: QueryBuilder.WhereOps.MultiValue;
177
- value: ReadonlyArray<
178
- TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"]
179
- >;
180
- }
181
- | undefined;
182
- }>;
183
- type OrderByParams<TTableDef extends TableDefBase> = ReadonlyArray<{
184
- col: keyof TTableDef["sqliteDef"]["columns"] & string;
185
- direction: "asc" | "desc";
186
- }>;
187
- type FirstQueryBehaviour<TResult, TFallback> =
188
- | {
189
- /** Will error if no matching row was found */
190
- behaviour: "error";
191
- }
192
- | {
193
- /** Will return `undefined` if no matching row was found */
194
- behaviour: "undefined";
195
- }
196
- | {
197
- /** Will return a fallback value if no matching row was found */
198
- behaviour: "fallback";
199
- fallback: () => TResult | TFallback;
200
- };
201
- type ApiFull<
202
- TResult,
203
- TTableDef extends TableDefBase,
204
- TWithout extends ApiFeature,
205
- > = {
206
- /**
207
- * `SELECT *` is the default
208
- *
209
- * Example:
210
- * ```ts
211
- * db.todos.select('id', 'text', 'completed')
212
- * db.todos.select('id')
213
- * ```
214
- */
215
- readonly select: {
216
- /** Selects and plucks a single column */
217
- <TColumn extends keyof TTableDef["sqliteDef"]["columns"] & string>(
218
- pluckColumn: TColumn,
219
- ): QueryBuilder<
220
- ReadonlyArray<
221
- TTableDef["sqliteDef"]["columns"][TColumn]["schema"]["Type"]
222
- >,
223
- TTableDef,
224
- TWithout | "row" | "select" | "returning" | "onConflict"
225
- >;
226
- /** Select multiple columns */
227
- <TColumns extends keyof TTableDef["sqliteDef"]["columns"] & string>(
228
- ...columns: TColumns[]
229
- ): QueryBuilder<
230
- ReadonlyArray<{
231
- readonly [K in TColumns]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"];
232
- }>,
233
- TTableDef,
234
- TWithout | "row" | "select" | "count" | "returning" | "onConflict"
235
- >;
236
- };
237
- /**
238
- * Notes:
239
- * - All where clauses are `AND`ed together by default.
240
- * - `null` values only support `=` and `!=` which is translated to `IS NULL` and `IS NOT NULL`.
241
- *
242
- * Example:
243
- * ```ts
244
- * db.todos.where('completed', true)
245
- * db.todos.where('completed', '!=', true)
246
- * db.todos.where({ completed: true })
247
- * db.todos.where({ completed: { op: '!=', value: true } })
248
- * ```
249
- *
250
- * TODO: Also support `OR`
251
- */
252
- readonly where: {
253
- (
254
- params: QueryBuilder.WhereParams<TTableDef>,
255
- ): QueryBuilder<TResult, TTableDef, TWithout | "row" | "select">;
256
- <TColName extends keyof TTableDef["sqliteDef"]["columns"]>(
257
- col: TColName,
258
- value: TTableDef["sqliteDef"]["columns"][TColName]["schema"]["Type"],
259
- ): QueryBuilder<TResult, TTableDef, TWithout | "row" | "select">;
260
- <TColName extends keyof TTableDef["sqliteDef"]["columns"]>(
261
- col: TColName,
262
- op: QueryBuilder.WhereOps,
263
- value: TTableDef["sqliteDef"]["columns"][TColName]["schema"]["Type"],
264
- ): QueryBuilder<TResult, TTableDef, TWithout | "row" | "select">;
265
- };
266
- /**
267
- * Example:
268
- * ```ts
269
- * db.todos.count()
270
- * db.todos.count().where('completed', true)
271
- * ```
272
- */
273
- readonly count: () => QueryBuilder<
274
- number,
275
- TTableDef,
276
- | TWithout
277
- | "row"
278
- | "count"
279
- | "select"
280
- | "orderBy"
281
- | "first"
282
- | "offset"
283
- | "limit"
284
- | "returning"
285
- | "onConflict"
286
- >;
287
- /**
288
- * Example:
289
- * ```ts
290
- * db.todos.orderBy('createdAt', 'desc')
291
- * ```
292
- */
293
- readonly orderBy: {
294
- <TColName extends keyof TTableDef["sqliteDef"]["columns"] & string>(
295
- col: TColName,
296
- direction: "asc" | "desc",
297
- ): QueryBuilder<
298
- TResult,
299
- TTableDef,
300
- TWithout | "returning" | "onConflict"
301
- >;
302
- <TParams extends QueryBuilder.OrderByParams<TTableDef>>(
303
- params: TParams,
304
- ): QueryBuilder<
305
- TResult,
306
- TTableDef,
307
- TWithout | "returning" | "onConflict"
308
- >;
309
- };
310
- /**
311
- * Example:
312
- * ```ts
313
- * db.todos.offset(10)
314
- * ```
315
- */
316
- readonly offset: (
317
- offset: number,
318
- ) => QueryBuilder<
319
- TResult,
320
- TTableDef,
321
- TWithout | "row" | "offset" | "orderBy" | "returning" | "onConflict"
322
- >;
323
- /**
324
- * Example:
325
- * ```ts
326
- * db.todos.limit(10)
327
- * ```
328
- */
329
- readonly limit: (
330
- limit: number,
331
- ) => QueryBuilder<
332
- TResult,
333
- TTableDef,
334
- | TWithout
335
- | "row"
336
- | "limit"
337
- | "offset"
338
- | "first"
339
- | "orderBy"
340
- | "returning"
341
- | "onConflict"
342
- >;
343
- /**
344
- * Example:
345
- * ```ts
346
- * db.todos.first()
347
- * db.todos.where('id', '123').first() // will return `undefined` if no rows are returned
348
- * db.todos.where('id', '123').first({ behaviour: 'error' }) // will throw if no rows are returned
349
- * db.todos.first({ behaviour: 'fallback', fallback: () => ({ id: '123', text: 'Buy milk', status: 'active' }) })
350
- * ```
351
- *
352
- * Behaviour:
353
- * - `undefined`: Will return `undefined` if no rows are returned (default behaviour)
354
- * - `error`: Will throw if no rows are returned
355
- * - `fallback`: Will return a fallback value if no rows are returned
356
- */
357
- readonly first: <
358
- TBehaviour extends QueryBuilder.FirstQueryBehaviour<
359
- GetSingle<TResult>,
360
- TFallback
361
- >,
362
- TFallback = never,
363
- >(
364
- behaviour?: QueryBuilder.FirstQueryBehaviour<
365
- GetSingle<TResult>,
366
- TFallback
367
- > &
368
- TBehaviour,
369
- ) => QueryBuilder<
370
- TBehaviour extends {
371
- behaviour: "fallback";
372
- }
373
- ? ReturnType<TBehaviour["fallback"]> | GetSingle<TResult>
374
- : TBehaviour extends {
375
- behaviour: "undefined";
376
- }
377
- ? undefined | GetSingle<TResult>
378
- : GetSingle<TResult>,
379
- TTableDef,
380
- | TWithout
381
- | "row"
382
- | "first"
383
- | "orderBy"
384
- | "select"
385
- | "limit"
386
- | "offset"
387
- | "where"
388
- | "returning"
389
- | "onConflict"
390
- >;
391
- /**
392
- * Insert a new row into the table
393
- *
394
- * Example:
395
- * ```ts
396
- * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })
397
- * ```
398
- */
399
- readonly insert: (
400
- values: TTableDef["insertSchema"]["Type"],
401
- ) => QueryBuilder<
402
- TResult,
403
- TTableDef,
404
- | TWithout
405
- | "row"
406
- | "select"
407
- | "count"
408
- | "orderBy"
409
- | "first"
410
- | "offset"
411
- | "limit"
412
- | "where"
413
- >;
414
- /**
415
- * Example: If the row already exists, it will be ignored.
416
- * ```ts
417
- * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')
418
- * ```
419
- *
420
- * Example: If the row already exists, it will be replaced.
421
- * ```ts
422
- * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')
423
- * ```
424
- *
425
- * Example: If the row already exists, it will be updated.
426
- * ```ts
427
- * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })
428
- * ```
429
- *
430
- * NOTE This API doesn't yet support composite primary keys.
431
- */
432
- readonly onConflict: {
433
- <
434
- TTarget extends SingleOrReadonlyArray<
435
- keyof TTableDef["sqliteDef"]["columns"]
436
- >,
437
- >(
438
- target: TTarget,
439
- action: "ignore" | "replace",
440
- ): QueryBuilder<
441
- TResult,
442
- TTableDef,
443
- | TWithout
444
- | "row"
445
- | "select"
446
- | "count"
447
- | "orderBy"
448
- | "first"
449
- | "offset"
450
- | "limit"
451
- | "where"
452
- >;
453
- <
454
- TTarget extends SingleOrReadonlyArray<
455
- keyof TTableDef["sqliteDef"]["columns"]
456
- >,
457
- >(
458
- target: TTarget,
459
- action: "update",
460
- updateValues: Partial<TTableDef["rowSchema"]["Type"]>,
461
- ): QueryBuilder<
462
- TResult,
463
- TTableDef,
464
- | TWithout
465
- | "row"
466
- | "select"
467
- | "count"
468
- | "orderBy"
469
- | "first"
470
- | "offset"
471
- | "limit"
472
- | "where"
473
- >;
474
- };
475
- /**
476
- * Similar to the `.select` API but for write queries (insert, update, delete).
477
- *
478
- * Example:
479
- * ```ts
480
- * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')
481
- * ```
482
- */
483
- readonly returning: <
484
- TColumns extends keyof TTableDef["sqliteDef"]["columns"] & string,
485
- >(
486
- ...columns: TColumns[]
487
- ) => QueryBuilder<
488
- ReadonlyArray<{
489
- readonly [K in TColumns]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"];
490
- }>,
491
- TTableDef
492
- >;
493
- /**
494
- * Update rows in the table that match the where clause
495
- *
496
- * Example:
497
- * ```ts
498
- * db.todos.update({ status: 'completed' }).where({ id: '123' })
499
- * ```
500
- */
501
- readonly update: (
502
- values: Partial<TTableDef["rowSchema"]["Type"]>,
503
- ) => QueryBuilder<
504
- TResult,
505
- TTableDef,
506
- | TWithout
507
- | "row"
508
- | "select"
509
- | "count"
510
- | "orderBy"
511
- | "first"
512
- | "offset"
513
- | "limit"
514
- | "onConflict"
515
- >;
516
- /**
517
- * Delete rows from the table that match the where clause
518
- *
519
- * Example:
520
- * ```ts
521
- * db.todos.delete().where({ status: 'completed' })
522
- * ```
523
- *
524
- * Note that it's generally recommended to do soft-deletes for synced apps.
525
- */
526
- readonly delete: () => QueryBuilder<
527
- TResult,
528
- TTableDef,
529
- | TWithout
530
- | "row"
531
- | "select"
532
- | "count"
533
- | "orderBy"
534
- | "first"
535
- | "offset"
536
- | "limit"
537
- | "onConflict"
538
- >;
539
- };
117
+ type Any = QueryBuilder<any, any, any>;
118
+ type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In;
119
+ namespace WhereOps {
120
+ type Equality = '=' | '!=';
121
+ type Order = '<' | '>' | '<=' | '>=';
122
+ type Like = 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE';
123
+ type In = 'IN' | 'NOT IN';
124
+ type SingleValue = Equality | Order | Like;
125
+ type MultiValue = In;
126
+ }
127
+ type ApiFeature = 'select' | 'where' | 'count' | 'orderBy' | 'offset' | 'limit' | 'first' | 'row' | 'insert' | 'update' | 'delete' | 'returning' | 'onConflict';
128
+ type WhereParams<TTableDef extends TableDefBase> = Partial<{
129
+ [K in keyof TTableDef['sqliteDef']['columns']]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'] | {
130
+ op: QueryBuilder.WhereOps.SingleValue;
131
+ value: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
132
+ } | {
133
+ op: QueryBuilder.WhereOps.MultiValue;
134
+ value: ReadonlyArray<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>;
135
+ } | undefined;
136
+ }>;
137
+ type OrderByParams<TTableDef extends TableDefBase> = ReadonlyArray<{
138
+ col: keyof TTableDef['sqliteDef']['columns'] & string;
139
+ direction: 'asc' | 'desc';
140
+ }>;
141
+ type FirstQueryBehaviour<TResult, TFallback> = {
142
+ /** Will error if no matching row was found */
143
+ behaviour: 'error';
144
+ } | {
145
+ /** Will return `undefined` if no matching row was found */
146
+ behaviour: 'undefined';
147
+ } | {
148
+ /** Will return a fallback value if no matching row was found */
149
+ behaviour: 'fallback';
150
+ fallback: () => TResult | TFallback;
151
+ };
152
+ type ApiFull<TResult, TTableDef extends TableDefBase, TWithout extends ApiFeature> = {
153
+ /**
154
+ * `SELECT *` is the default
155
+ *
156
+ * Example:
157
+ * ```ts
158
+ * db.todos.select('id', 'text', 'completed')
159
+ * db.todos.select('id')
160
+ * ```
161
+ */
162
+ readonly select: {
163
+ /** Selects and plucks a single column */
164
+ <TColumn extends keyof TTableDef['sqliteDef']['columns'] & string>(pluckColumn: TColumn): QueryBuilder<ReadonlyArray<TTableDef['sqliteDef']['columns'][TColumn]['schema']['Type']>, TTableDef, TWithout | 'row' | 'select' | 'returning' | 'onConflict'>;
165
+ /** Select multiple columns */
166
+ <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(...columns: TColumns[]): QueryBuilder<ReadonlyArray<{
167
+ readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
168
+ }>, TTableDef, TWithout | 'row' | 'select' | 'count' | 'returning' | 'onConflict'>;
169
+ };
170
+ /**
171
+ * Notes:
172
+ * - All where clauses are `AND`ed together by default.
173
+ * - `null` values only support `=` and `!=` which is translated to `IS NULL` and `IS NOT NULL`.
174
+ *
175
+ * Example:
176
+ * ```ts
177
+ * db.todos.where('completed', true)
178
+ * db.todos.where('completed', '!=', true)
179
+ * db.todos.where({ completed: true })
180
+ * db.todos.where({ completed: { op: '!=', value: true } })
181
+ * ```
182
+ *
183
+ * TODO: Also support `OR`
184
+ */
185
+ readonly where: {
186
+ (params: QueryBuilder.WhereParams<TTableDef>): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
187
+ <TColName extends keyof TTableDef['sqliteDef']['columns']>(col: TColName, value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
188
+ <TColName extends keyof TTableDef['sqliteDef']['columns']>(col: TColName, op: QueryBuilder.WhereOps, value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
189
+ };
190
+ /**
191
+ * Example:
192
+ * ```ts
193
+ * db.todos.count()
194
+ * db.todos.count().where('completed', true)
195
+ * ```
196
+ */
197
+ readonly count: () => QueryBuilder<number, TTableDef, TWithout | 'row' | 'count' | 'select' | 'orderBy' | 'first' | 'offset' | 'limit' | 'returning' | 'onConflict'>;
198
+ /**
199
+ * Example:
200
+ * ```ts
201
+ * db.todos.orderBy('createdAt', 'desc')
202
+ * db.todos.orderBy([{ col: 'createdAt', direction: 'desc' }])
203
+ * ```
204
+ */
205
+ readonly orderBy: {
206
+ <const TColName extends keyof TTableDef['sqliteDef']['columns'] & string>(col: TColName, direction: 'asc' | 'desc'): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>;
207
+ <const TParams extends QueryBuilder.OrderByParams<TTableDef>>(params: TParams): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>;
208
+ };
209
+ /**
210
+ * Example:
211
+ * ```ts
212
+ * db.todos.offset(10)
213
+ * ```
214
+ */
215
+ readonly offset: (offset: number) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'offset' | 'orderBy' | 'returning' | 'onConflict'>;
216
+ /**
217
+ * Example:
218
+ * ```ts
219
+ * db.todos.limit(10)
220
+ * ```
221
+ */
222
+ readonly limit: (limit: number) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'limit' | 'offset' | 'first' | 'orderBy' | 'returning' | 'onConflict'>;
223
+ /**
224
+ * Example:
225
+ * ```ts
226
+ * db.todos.first()
227
+ * db.todos.where('id', '123').first() // will return `undefined` if no rows are returned
228
+ * db.todos.where('id', '123').first({ behaviour: 'error' }) // will throw if no rows are returned
229
+ * db.todos.first({ behaviour: 'fallback', fallback: () => ({ id: '123', text: 'Buy milk', status: 'active' }) })
230
+ * ```
231
+ *
232
+ * Behaviour:
233
+ * - `undefined`: Will return `undefined` if no rows are returned (default behaviour)
234
+ * - `error`: Will throw if no rows are returned
235
+ * - `fallback`: Will return a fallback value if no rows are returned
236
+ */
237
+ readonly first: <TBehaviour extends QueryBuilder.FirstQueryBehaviour<GetSingle<TResult>, TFallback>, TFallback = never>(behaviour?: QueryBuilder.FirstQueryBehaviour<GetSingle<TResult>, TFallback> & TBehaviour) => QueryBuilder<TBehaviour extends {
238
+ behaviour: 'fallback';
239
+ } ? ReturnType<TBehaviour['fallback']> | GetSingle<TResult> : TBehaviour extends {
240
+ behaviour: 'undefined';
241
+ } ? undefined | GetSingle<TResult> : GetSingle<TResult>, TTableDef, TWithout | 'row' | 'first' | 'orderBy' | 'select' | 'limit' | 'offset' | 'where' | 'returning' | 'onConflict'>;
242
+ /**
243
+ * Insert a new row into the table
244
+ *
245
+ * Example:
246
+ * ```ts
247
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })
248
+ * ```
249
+ */
250
+ readonly insert: (values: TTableDef['insertSchema']['Type']) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
251
+ /**
252
+ * Example: If the row already exists, it will be ignored.
253
+ * ```ts
254
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')
255
+ * ```
256
+ *
257
+ * Example: If the row already exists, it will be replaced.
258
+ * ```ts
259
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')
260
+ * ```
261
+ *
262
+ * Example: If the row already exists, it will be updated.
263
+ * ```ts
264
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })
265
+ * ```
266
+ *
267
+ * NOTE This API doesn't yet support composite primary keys.
268
+ */
269
+ readonly onConflict: {
270
+ <TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(target: TTarget, action: 'ignore' | 'replace'): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
271
+ <TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(target: TTarget, action: 'update', updateValues: Partial<TTableDef['rowSchema']['Type']>): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
272
+ };
273
+ /**
274
+ * Similar to the `.select` API but for write queries (insert, update, delete).
275
+ *
276
+ * Example:
277
+ * ```ts
278
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')
279
+ * ```
280
+ */
281
+ readonly returning: <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(...columns: TColumns[]) => QueryBuilder<ReadonlyArray<{
282
+ readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
283
+ }>, TTableDef>;
284
+ /**
285
+ * Update rows in the table that match the where clause
286
+ *
287
+ * Example:
288
+ * ```ts
289
+ * db.todos.update({ status: 'completed' }).where({ id: '123' })
290
+ * ```
291
+ */
292
+ readonly update: (values: Partial<TTableDef['rowSchema']['Type']>) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'onConflict'>;
293
+ /**
294
+ * Delete rows from the table that match the where clause
295
+ *
296
+ * Example:
297
+ * ```ts
298
+ * db.todos.delete().where({ status: 'completed' })
299
+ * ```
300
+ *
301
+ * Note that it's generally recommended to do soft-deletes for synced apps.
302
+ */
303
+ readonly delete: () => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'onConflict'>;
304
+ };
540
305
  }
541
306
  export declare namespace RowQuery {
542
- type GetOrCreateOptions<TTableDef extends ClientDocumentTableDef.TraitAny> = {
543
- default: Partial<TTableDef["Value"]>;
544
- };
545
- type RequiredColumnsOptions<TTableDef extends TableDefBase> = {
546
- /**
547
- * Values to be inserted into the row if it doesn't exist yet
548
- */
549
- explicitDefaultValues: Pick<
550
- SqliteDsl.FromColumns.RowDecodedAll<TTableDef["sqliteDef"]["columns"]>,
551
- SqliteDsl.FromColumns.RequiredInsertColumnNames<
552
- Omit<TTableDef["sqliteDef"]["columns"], "id">
553
- >
554
- >;
555
- };
556
- type Result<TTableDef extends TableDefBase> =
557
- SqliteDsl.FromColumns.RowDecoded<TTableDef["sqliteDef"]["columns"]>;
558
- type DocumentResult<TTableDef extends ClientDocumentTableDef.Any> =
559
- GetValForKey<
560
- SqliteDsl.FromColumns.RowDecoded<TTableDef["sqliteDef"]["columns"]>,
561
- "value"
562
- >;
563
- type ResultEncoded<TTableDef extends TableDefBase> =
564
- TTableDef["options"]["isClientDocumentTable"] extends true
565
- ? GetValForKey<
566
- SqliteDsl.FromColumns.RowEncoded<TTableDef["sqliteDef"]["columns"]>,
567
- "value"
568
- >
569
- : SqliteDsl.FromColumns.RowEncoded<TTableDef["sqliteDef"]["columns"]>;
570
- type GetIdColumnType<TTableDef extends TableDefBase> =
571
- TTableDef["sqliteDef"]["columns"]["id"]["schema"]["Type"];
307
+ type GetOrCreateOptions<TTableDef extends ClientDocumentTableDef.TraitAny> = {
308
+ default: Partial<TTableDef['Value']>;
309
+ };
310
+ type RequiredColumnsOptions<TTableDef extends TableDefBase> = {
311
+ /**
312
+ * Values to be inserted into the row if it doesn't exist yet
313
+ */
314
+ explicitDefaultValues: Pick<SqliteDsl.FromColumns.RowDecodedAll<TTableDef['sqliteDef']['columns']>, SqliteDsl.FromColumns.RequiredInsertColumnNames<Omit<TTableDef['sqliteDef']['columns'], 'id'>>>;
315
+ };
316
+ type Result<TTableDef extends TableDefBase> = SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>;
317
+ type DocumentResult<TTableDef extends ClientDocumentTableDef.Any> = GetValForKey<SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>, 'value'>;
318
+ type ResultEncoded<TTableDef extends TableDefBase> = TTableDef['options']['isClientDocumentTable'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>, 'value'> : SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>;
319
+ type GetIdColumnType<TTableDef extends TableDefBase> = TTableDef['sqliteDef']['columns']['id']['schema']['Type'];
572
320
  }
573
321
  type GetSingle<T> = T extends ReadonlyArray<infer U> ? U : never;
574
- //# sourceMappingURL=api.d.ts.map
322
+ export {};
323
+ //# sourceMappingURL=api.d.ts.map