@type32/tauri-sqlite-orm 0.1.17 → 0.1.18-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,455 +1,155 @@
1
1
  import Database from '@tauri-apps/plugin-sql';
2
2
 
3
- type UpdateDeleteAction = "cascade" | "restrict" | "no action" | "set null" | "set default";
4
- interface SQLExpression {
5
- raw: string;
6
- }
7
- declare function sql(strings: TemplateStringsArray, ...values: any[]): SQLExpression;
8
- interface Column<T = any> {
9
- name: string;
10
- type: "TEXT" | "INTEGER" | "REAL" | "BLOB" | "NUMERIC";
11
- isPrimaryKey?: boolean;
12
- autoIncrement?: boolean;
13
- isNotNull?: boolean;
14
- defaultValue?: T | SQLExpression;
15
- defaultFn?: () => any;
16
- onUpdateFn?: () => any;
3
+ type ColumnDataType = "TEXT" | "INTEGER" | "REAL" | "BLOB" | "BOOLEAN";
4
+ type Mode = "default" | "timestamp" | "timestamp_ms" | "json";
5
+ type ColumnValueTypes<TType extends ColumnDataType, TMode extends Mode> = TType extends "TEXT" ? string : TType extends "INTEGER" ? TMode extends "timestamp" | "timestamp_ms" ? Date : number : TType extends "REAL" ? number : TType extends "BOOLEAN" ? boolean : TType extends "BLOB" ? Uint8Array : never;
6
+ interface ColumnOptions<TData> {
7
+ notNull?: boolean;
8
+ default?: TData;
9
+ $defaultFn?: () => TData;
10
+ primaryKey?: boolean;
11
+ autoincrement?: boolean;
12
+ unique?: boolean;
17
13
  references?: {
18
- table: string;
19
- column: string;
20
- onDelete?: UpdateDeleteAction;
21
- onUpdate?: UpdateDeleteAction;
14
+ table: AnyTable;
15
+ column: AnySQLiteColumn;
22
16
  };
23
- enumValues?: readonly string[];
24
- mode?: string;
25
- _dataType: T;
26
- /**
27
- * Populated by defineTable so we can reason about relations and aliasing.
28
- */
29
- tableName?: string;
17
+ mode?: Mode;
18
+ $onUpdateFn?: () => TData;
30
19
  }
31
- type ColumnBuilder<T> = Column<T> & {
32
- primaryKey: (opts?: {
33
- autoIncrement?: boolean;
34
- }) => ColumnBuilder<T>;
35
- notNull: () => ColumnBuilder<T>;
36
- default: (value: T | SQLExpression) => ColumnBuilder<T>;
37
- $type: <U>() => ColumnBuilder<U>;
38
- $defaultFn: (fn: () => any) => ColumnBuilder<T>;
39
- $default: (fn: () => any) => ColumnBuilder<T>;
40
- $onUpdate: (fn: () => any) => ColumnBuilder<T>;
41
- $onUpdateFn: (fn: () => any) => ColumnBuilder<T>;
42
- references: (target: () => Column<any>, actions?: {
43
- onDelete?: UpdateDeleteAction;
44
- onUpdate?: UpdateDeleteAction;
45
- }) => ColumnBuilder<T>;
46
- };
47
- type TextConfig<TEnum extends string> = {
48
- enum?: readonly TEnum[];
49
- mode?: "json";
50
- };
51
- declare function text<TEnum extends string>(name: string, config?: TextConfig<TEnum>): ColumnBuilder<TEnum extends string ? TEnum : string>;
52
- declare function text<TEnum extends string>(config?: TextConfig<TEnum>): ColumnBuilder<TEnum extends string ? TEnum : string>;
53
- type IntegerMode = "number" | "boolean" | "timestamp" | "timestamp_ms";
54
- declare function integer(name: string, config?: {
55
- mode?: IntegerMode;
56
- }): ColumnBuilder<number | boolean | Date>;
57
- declare function integer(config?: {
58
- mode?: IntegerMode;
59
- }): ColumnBuilder<number | boolean | Date>;
60
- declare function real(name: string): ColumnBuilder<number>;
61
- declare function real(): ColumnBuilder<number>;
62
- type BlobMode = "json" | "bigint" | "buffer";
63
- declare function blob(name: string, config?: {
64
- mode?: BlobMode;
65
- }): ColumnBuilder<unknown | bigint | Uint8Array>;
66
- declare function blob(config?: {
67
- mode?: BlobMode;
68
- }): ColumnBuilder<unknown | bigint | Uint8Array>;
69
- type NumericMode = "string" | "number" | "bigint";
70
- declare function numeric(name: string, config?: {
71
- mode?: NumericMode;
72
- }): ColumnBuilder<string | number | bigint>;
73
- declare function numeric(config?: {
74
- mode?: NumericMode;
75
- }): ColumnBuilder<string | number | bigint>;
76
- declare function boolean(name: string): ColumnBuilder<boolean>;
77
- declare function boolean(): ColumnBuilder<boolean>;
78
- declare function timestamp(name: string): ColumnBuilder<Date>;
79
- declare function timestamp(): ColumnBuilder<Date>;
80
- declare function increments(name: string): ColumnBuilder<number>;
81
- declare function increments(): ColumnBuilder<number>;
82
- type UniqueSpec = {
83
- name?: string;
84
- columns: string[];
85
- };
86
- type PrimaryKeySpec = {
87
- name?: string;
88
- columns: string[];
89
- };
90
- type CheckSpec = {
91
- name: string;
92
- expr: SQLExpression | {
93
- raw: string;
94
- };
95
- };
96
- type ForeignKeySpec = {
97
- name?: string;
98
- columns: string[];
99
- foreignTable: string;
100
- foreignColumns: string[];
101
- onDelete?: UpdateDeleteAction;
102
- onUpdate?: UpdateDeleteAction;
103
- };
104
- type IndexSpec = {
105
- name: string;
106
- columns: string[];
107
- unique?: boolean;
108
- where?: SQLExpression;
109
- };
110
- declare function unique(name?: string): {
111
- on: (...cols: Column<any>[]) => UniqueSpec;
112
- };
113
- declare function primaryKey(opts: {
114
- name?: string;
115
- columns: Column<any>[];
116
- }): PrimaryKeySpec;
117
- declare function check(name: string, expr: SQLExpression): CheckSpec;
118
- declare function foreignKey(opts: {
119
- name?: string;
120
- columns: Column<any>[];
121
- foreignColumns: Column<any>[];
122
- onDelete?: UpdateDeleteAction;
123
- onUpdate?: UpdateDeleteAction;
124
- }): ForeignKeySpec;
125
- declare function index(name: string): {
126
- on: (...cols: Column<any>[]) => IndexSpec;
127
- where: (expr: SQLExpression) => IndexSpec;
128
- };
129
- declare function uniqueIndex(name: string): {
130
- on: (...cols: Column<any>[]) => IndexSpec;
131
- where: (expr: SQLExpression) => IndexSpec;
132
- };
133
- type SchemaDefinition = Record<string, Column<any>>;
134
- type InferModel<T extends SchemaDefinition> = {
135
- [K in keyof T]: T[K]["_dataType"];
136
- };
137
- declare function defineTable<T extends SchemaDefinition>(tableName: string, schema: T, extras?: (t: any) => Array<UniqueSpec | PrimaryKeySpec | CheckSpec | ForeignKeySpec | IndexSpec>): any & InferModel<T>;
138
- type Table<T extends SchemaDefinition> = ReturnType<typeof defineTable<T>>;
139
-
140
- interface SQL {
141
- toSQL: () => {
142
- clause: string;
143
- bindings: any[];
20
+ type ExtractColumnType<T extends AnySQLiteColumn> = T extends SQLiteColumn<infer _, infer TType, infer TMode, infer TNotNull, infer THasDefault> ? THasDefault extends true ? TNotNull extends true ? ColumnValueTypes<TType, TMode> : ColumnValueTypes<TType, TMode> | null | undefined : TNotNull extends true ? ColumnValueTypes<TType, TMode> : ColumnValueTypes<TType, TMode> | null | undefined : never;
21
+ declare class SQLiteColumn<TName extends string = string, TType extends ColumnDataType = ColumnDataType, TMode extends Mode = "default", TNotNull extends boolean = false, THasDefault extends boolean = false, TAutoincrement extends boolean = false> {
22
+ type: TType;
23
+ options: ColumnOptions<ColumnValueTypes<TType, TMode>>;
24
+ _: {
25
+ name: TName;
26
+ dataType: TType;
27
+ mode: TMode;
28
+ notNull: TNotNull;
29
+ hasDefault: THasDefault;
30
+ autoincrement: TAutoincrement;
144
31
  };
32
+ constructor(name: TName, type: TType, options?: ColumnOptions<ColumnValueTypes<TType, TMode>>, mode?: TMode);
33
+ notNull(): SQLiteColumn<TName, TType, TMode, true, THasDefault, TAutoincrement>;
34
+ default(value: ColumnValueTypes<TType, TMode>): SQLiteColumn<TName, TType, TMode, TNotNull, true, TAutoincrement>;
35
+ $defaultFn(fn: () => ColumnValueTypes<TType, TMode>): SQLiteColumn<TName, TType, TMode, TNotNull, true, TAutoincrement>;
36
+ primaryKey(): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
37
+ autoincrement(): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, true>;
38
+ unique(): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
39
+ references<T extends AnyTable, K extends keyof T["_"]["columns"] & string>(ref: T, column: K): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
40
+ $onUpdateFn(fn: () => ColumnValueTypes<TType, TMode>): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
145
41
  }
146
- declare function raw(strings: TemplateStringsArray, ...values: any[]): SQL;
147
- declare function getQualifiedName(column: Column): string;
148
- declare const and: (...conditions: SQL[]) => SQL;
149
- declare const or: (...conditions: SQL[]) => SQL;
150
- declare const not: (condition: SQL) => SQL;
151
- declare const eq: (column: Column, value: any) => SQL;
152
- declare const ne: (column: Column, value: any) => SQL;
153
- declare const gt: (column: Column, value: number | Date) => SQL;
154
- declare const gte: (column: Column, value: number | Date) => SQL;
155
- declare const lt: (column: Column, value: number | Date) => SQL;
156
- declare const lte: (column: Column, value: number | Date) => SQL;
157
- declare const like: (column: Column<string>, value: string) => SQL;
158
- declare const ilike: (column: Column<string>, value: string | Column) => SQL;
159
- declare const notIlike: (column: Column<string>, value: string | Column) => SQL;
160
- declare const isNull: (column: Column) => SQL;
161
- declare const isNotNull: (column: Column) => SQL;
162
- declare const between: (column: Column, from: number | string | Date | Column, to: number | string | Date | Column) => SQL;
163
- declare const notBetween: (column: Column, from: number | string | Date | Column, to: number | string | Date | Column) => SQL;
164
- declare const inArray: (column: Column, valuesOrQuery: any[] | SQL | {
165
- toSQL: () => {
166
- clause: string;
167
- bindings: any[];
168
- };
169
- }) => SQL;
170
- declare const notInArray: (column: Column, valuesOrQuery: any[] | SQL | {
171
- toSQL: () => {
172
- clause: string;
173
- bindings: any[];
174
- };
175
- }) => SQL;
176
- declare const exists: (subquery: SQL | {
177
- toSQL: () => {
178
- clause: string;
179
- bindings: any[];
42
+ declare const text: <TName extends string>(name: TName) => SQLiteColumn<TName, "TEXT", "default", false, false, false>;
43
+ declare const integer: <TName extends string, TMode extends Mode = "default">(name: TName, config?: {
44
+ mode?: TMode;
45
+ }) => SQLiteColumn<TName, "INTEGER", "default" | TMode, false, false, false>;
46
+ declare const real: <TName extends string>(name: TName) => SQLiteColumn<TName, "REAL", "default", false, false, false>;
47
+ declare const blob: <TName extends string>(name: TName) => SQLiteColumn<TName, "BLOB", "default", false, false, false>;
48
+ declare const boolean: <TName extends string>(name: TName) => SQLiteColumn<TName, "BOOLEAN", "default", false, false, false>;
49
+ type AnySQLiteColumn = SQLiteColumn<any, any, any, any, any, any>;
50
+ type AnyTable = Table<Record<string, AnySQLiteColumn>, string>;
51
+ type InferSelectModel<T extends AnyTable> = {
52
+ [K in keyof T["_"]["columns"]]: ExtractColumnType<T["_"]["columns"][K]>;
53
+ };
54
+ type RequiredColumns<TColumns extends Record<string, AnySQLiteColumn>> = {
55
+ [K in keyof TColumns]: TColumns[K]["_"]["notNull"] extends true ? TColumns[K]["_"]["hasDefault"] extends true ? never : K : never;
56
+ }[keyof TColumns];
57
+ type OptionalColumns<TColumns extends Record<string, AnySQLiteColumn>> = {
58
+ [K in keyof TColumns]: TColumns[K]["_"]["notNull"] extends true ? TColumns[K]["_"]["hasDefault"] extends true ? K : never : K;
59
+ }[keyof TColumns];
60
+ type InferInsertModel<T extends AnyTable> = {
61
+ [K in RequiredColumns<T["_"]["columns"]>]: ExtractColumnType<T["_"]["columns"][K]>;
62
+ } & {
63
+ [K in OptionalColumns<T["_"]["columns"]>]?: ExtractColumnType<T["_"]["columns"][K]>;
64
+ };
65
+ declare class Table<TColumns extends Record<string, AnySQLiteColumn>, TTableName extends string> {
66
+ _: {
67
+ name: TTableName;
68
+ columns: TColumns;
180
69
  };
181
- }) => SQL;
182
- declare const notExists: (subquery: SQL | {
183
- toSQL: () => {
184
- clause: string;
185
- bindings: any[];
70
+ constructor(name: TTableName, columns: TColumns);
71
+ }
72
+ declare const sqliteTable: <TTableName extends string, TColumns extends Record<string, AnySQLiteColumn>>(tableName: TTableName, columns: TColumns) => Table<TColumns, TTableName>;
73
+ type SQLCondition = {
74
+ sql: string;
75
+ params: any[];
76
+ };
77
+ declare const eq: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
78
+ declare const and: (...conditions: SQLCondition[]) => SQLCondition;
79
+ declare const or: (...conditions: SQLCondition[]) => SQLCondition;
80
+ declare const gt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
81
+ declare const gte: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
82
+ declare const lt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
83
+ declare const lte: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
84
+ declare const like: (column: AnySQLiteColumn, pattern: string) => SQLCondition;
85
+ declare const isNull: (column: AnySQLiteColumn) => SQLCondition;
86
+ declare const isNotNull: (column: AnySQLiteColumn) => SQLCondition;
87
+ declare const inArray: <T>(column: AnySQLiteColumn, values: T[]) => SQLCondition;
88
+ declare class BaseQueryBuilder {
89
+ protected db: Database;
90
+ protected query: string;
91
+ protected params: any[];
92
+ constructor(db: Database);
93
+ where(condition: SQLCondition): this;
94
+ orderBy(column: AnySQLiteColumn, direction?: "ASC" | "DESC"): this;
95
+ limit(count: number): this;
96
+ offset(count: number): this;
97
+ build(): {
98
+ sql: string;
99
+ params: any[];
186
100
  };
187
- }) => SQL;
188
- declare const asc: (column: Column) => string;
189
- declare const desc: (column: Column) => string;
190
-
191
- type InferInsert<T> = T extends {
192
- $inferInsert: infer I;
193
- } ? I : never;
194
- type InferSelect<T> = T extends {
195
- $inferSelect: infer S;
196
- } ? S : never;
197
- type WithSpec = Record<string, boolean | {
198
- with?: WithSpec;
199
- columns?: string[];
200
- }>;
201
- type FindManyOptions<TTable extends Table<any>> = {
202
- with?: WithSpec;
203
- join?: boolean;
204
- columns?: (keyof InferSelect<TTable>)[] | Record<keyof InferSelect<TTable>, boolean>;
205
- where?: SQL | Partial<InferSelect<TTable>> | ((table: TTable, ops: {
206
- eq: typeof eq;
207
- ne: typeof ne;
208
- gt: typeof gt;
209
- gte: typeof gte;
210
- lt: typeof lt;
211
- lte: typeof lte;
212
- like: typeof like;
213
- }) => SQL);
214
- orderBy?: (keyof InferSelect<TTable>)[] | ((table: TTable, ops: {
215
- asc: typeof asc;
216
- desc: typeof desc;
217
- }) => (string | SQL)[]);
218
- limit?: number;
219
- offset?: number;
220
- };
221
- type FindFirstOptions<TTable extends Table<any>> = Omit<FindManyOptions<TTable>, "limit" | "offset">;
222
- declare class SelectQueryBuilder<T> {
223
- private _table;
224
- private _selectedColumns;
225
- private _joins;
226
- private _where;
227
- private _orderBy;
228
- private _limit;
229
- private _offset;
230
- private _groupBy;
231
- private _having;
232
- private _distinct;
233
- private _dbProvider;
234
- constructor(dbProvider: () => Promise<Database>, fields?: Record<string, Column<any>>);
235
- distinct(): this;
236
- select(fields: Record<string, Column<any> | SQL>): this;
237
- from(table: Table<any>): this;
238
- where(...conditions: (SQL | undefined)[]): this;
239
- leftJoin(otherTable: Table<any>, on: SQL): this;
240
- groupBy(...exprs: (Column | string)[]): this;
241
- having(...conditions: SQL[]): this;
242
- orderBy(...clauses: (string | Column<any> | SQL)[]): this;
243
- limit(value: number): this;
244
- offset(value: number): this;
245
- execute(): Promise<T[]>;
246
- iterator(): Promise<AsyncIterableIterator<T>>;
101
+ }
102
+ declare class SelectQueryBuilder<TTable extends AnyTable, TSelectedColumns extends (keyof TTable["_"]["columns"])[] | undefined = undefined> extends BaseQueryBuilder {
103
+ private table;
104
+ private columns?;
105
+ constructor(db: Database, table: TTable, columns?: TSelectedColumns | undefined);
106
+ execute(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]>[] : InferSelectModel<TTable>[]>;
107
+ }
108
+ declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
109
+ private table;
110
+ private dataSets;
111
+ constructor(db: Database, table: T);
112
+ values(data: Partial<InferInsertModel<T>> | Partial<InferInsertModel<T>>[]): this;
113
+ execute(): Promise<number>;
114
+ }
115
+ declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
116
+ private table;
117
+ private updateData;
118
+ constructor(db: Database, table: T);
119
+ set(data: Partial<InferInsertModel<T>>): this;
120
+ execute(): Promise<number>;
121
+ }
122
+ declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
123
+ private table;
124
+ constructor(db: Database, table: T);
125
+ execute(): Promise<number>;
247
126
  }
248
127
  declare class TauriORM {
249
- query: Record<string, any>;
250
- private _tables;
251
- private _relations;
252
- private _dbPromise;
253
- constructor(dbUri: string);
254
- private getDb;
255
- configureQuery(tables: Record<string, Table<any>>, relations: Record<string, Record<string, RelationConfig>>): void;
256
- select<TFields extends Record<string, Column<any>>>(fields: TFields): SelectQueryBuilder<{
257
- [K in keyof TFields]: TFields[K]["_dataType"];
258
- }>;
259
- select<T = any>(fields?: undefined): SelectQueryBuilder<T>;
260
- selectDistinct<TFields extends Record<string, Column<any>>>(fields: TFields): SelectQueryBuilder<{
261
- [K in keyof TFields]: TFields[K]["_dataType"];
262
- }>;
263
- selectDistinct<T = any>(fields?: undefined): SelectQueryBuilder<T>;
264
- insert<TTable extends Table<any>>(table: TTable): {
265
- _table: TTable;
266
- _rows: Array<InferInsert<TTable>>;
267
- _selectSql: {
268
- clause: string;
269
- bindings: any[];
270
- } | null;
271
- _conflict: null | {
272
- kind: "doNothing";
273
- target?: string | string[];
274
- where?: SQL;
275
- } | {
276
- kind: "doUpdate";
277
- target: string | string[];
278
- targetWhere?: SQL;
279
- set: Record<string, any>;
280
- setWhere?: SQL;
281
- };
282
- _returning: null | "__RETURNING_ID__" | Record<string, Column<any>>;
283
- values(rowOrRows: InferInsert<TTable> | Array<InferInsert<TTable>>): /*elided*/ any;
284
- select(qb: {
285
- toSQL?: () => {
286
- clause: string;
287
- bindings: any[];
288
- };
289
- } | SQL): /*elided*/ any;
290
- returning(fields?: Record<string, Column<any>>): any;
291
- $returningId(): any;
292
- onConflictDoNothing(opts?: {
293
- target?: Column<any> | Column<any>[];
294
- where?: SQL;
295
- }): /*elided*/ any;
296
- onConflictDoUpdate(opts: {
297
- target: Column<any> | Column<any>[];
298
- targetWhere?: SQL;
299
- set: Record<string, any>;
300
- setWhere?: SQL;
301
- }): /*elided*/ any;
302
- execute(): Promise<any>;
303
- _buildConflictClause(): string;
304
- _executeWithReturning(db: any, query: string, bindings: any[]): Promise<any>;
305
- };
306
- update<TTable extends Table<any>>(table: TTable): {
307
- _table: TTable;
308
- _data: Partial<InferInsert<TTable>> | null;
309
- _where: Record<string, any> | SQL | null;
310
- _orderBy: Array<string | SQL>;
311
- _limit: number | null;
312
- _from: Table<any> | null;
313
- _returning: null | Record<string, Column<any>>;
314
- set(data: Partial<InferInsert<TTable>>): /*elided*/ any;
315
- where(cond: Record<string, any> | SQL): /*elided*/ any;
316
- orderBy(...clauses: (string | Column<any> | SQL)[]): /*elided*/ any;
317
- limit(n: number): /*elided*/ any;
318
- from(tbl: Table<any>): /*elided*/ any;
319
- returning(fields?: Record<string, Column<any>>): any;
320
- execute(): Promise<unknown>;
321
- };
322
- delete<TTable extends Table<any>>(table: TTable): {
323
- _table: TTable;
324
- _where: Partial<InferInsert<TTable>> | SQL | null;
325
- _orderBy: Array<string | SQL>;
326
- _limit: number | null;
327
- _returning: null | Record<string, Column<any>>;
328
- where(cond: Partial<InferInsert<TTable>> | SQL): /*elided*/ any;
329
- orderBy(...clauses: (string | Column<any> | SQL)[]): /*elided*/ any;
330
- limit(n: number): /*elided*/ any;
331
- returning(fields?: Record<string, Column<any>>): any;
332
- execute(): Promise<unknown>;
333
- };
334
- run(query: string, bindings?: any[]): Promise<void>;
335
- private formatDefaultValue;
336
- private generateCreateTableSql;
337
- createTableIfNotExists(table: Table<any>): Promise<void>;
338
- createTablesIfNotExist(tables: Table<any>[]): Promise<void>;
339
- private generateCreateIndexSqls;
340
- private createIndexesForTable;
341
- private ensureMigrationsTable;
342
- private hasMigration;
343
- private recordMigration;
344
- migrate(tables: Table<any>[], options?: {
345
- name?: string;
346
- track?: boolean;
347
- }): Promise<void>;
348
- configure<TTables extends Record<string, Table<any>>, TRelDefs extends Record<string, Record<string, RelationConfig>> = Record<string, Record<string, RelationConfig>>>(tables: TTables, relDefs?: TRelDefs): this & {
349
- query: {
350
- [K in keyof TTables]: {
351
- findMany: (opts?: FindManyOptions<TTables[K]>) => Promise<Array<InferSelect<TTables[K]>>>;
352
- findFirst: (opts?: FindFirstOptions<TTables[K]>) => Promise<InferSelect<TTables[K]> | null>;
353
- };
354
- };
355
- };
356
- migrateConfigured(options?: {
357
- name?: string;
358
- track?: boolean;
359
- }): Promise<void>;
360
- diffSchema(): Promise<{
361
- extraTables: string[];
362
- missingTables: string[];
363
- tables: Record<string, {
364
- missingColumns: string[];
365
- extraColumns: string[];
366
- changedColumns: Array<{
367
- name: string;
368
- diffs: {
369
- type?: boolean;
370
- pk?: boolean;
371
- notNull?: boolean;
372
- default?: boolean;
373
- };
374
- }>;
375
- }>;
376
- }>;
377
- generate(): Promise<{
378
- statements: string[];
379
- }>;
380
- migrateCli(opts?: {
381
- name?: string;
382
- track?: boolean;
383
- }): Promise<void>;
384
- push(opts?: {
385
- dropExtraColumns?: boolean;
386
- preserveData?: boolean;
387
- }): Promise<void>;
388
- pull(): Promise<Record<string, any>>;
389
- studio(): Promise<{
390
- driver: string;
391
- path: any;
392
- }>;
128
+ private db;
129
+ private tables;
130
+ constructor(db: Database, schema?: Record<string, AnyTable> | undefined);
131
+ migrate(): Promise<void>;
132
+ select<T extends AnyTable, C extends (keyof T["_"]["columns"])[] | undefined = undefined>(table: T, columns?: C): SelectQueryBuilder<T, C>;
133
+ insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
134
+ update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
135
+ delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
136
+ transaction<T>(callback: (tx: TauriORM) => Promise<T>): Promise<T>;
393
137
  private ensureSchemaMeta;
394
138
  private getSchemaMeta;
395
139
  private setSchemaMeta;
396
140
  private normalizeColumn;
397
141
  private computeModelSignature;
398
142
  getSchemaSignature(): string;
399
- printSchemaDiff(): Promise<void>;
400
143
  isSchemaDirty(): Promise<{
401
144
  dirty: boolean;
402
145
  current: string;
403
146
  stored: string | null;
404
147
  }>;
405
- migrateIfDirty(options?: {
406
- name?: string;
407
- track?: boolean;
408
- }): Promise<boolean>;
409
- pullSchema(): Promise<Record<string, any>>;
410
- private buildCreateTableSQL;
411
- private tableExists;
412
- forcePush(options?: {
413
- dropExtraColumns?: boolean;
414
- preserveData?: boolean;
415
- }): Promise<void>;
416
- private forcePushForTables;
148
+ migrateIfDirty(): Promise<boolean>;
417
149
  }
418
- type OneConfig = {
419
- fields?: Column[];
420
- references?: Column[];
421
- relationName?: string;
422
- };
423
- type ManyConfig = {
424
- relationName?: string;
425
- };
426
- type RelationBuilderCtx = {
427
- one: (table: Table<any>, cfg?: OneConfig) => OneRelation;
428
- many: (table: Table<any>, cfg?: ManyConfig) => ManyRelation;
429
- };
430
- type OneRelation = {
431
- kind: "one";
432
- table: Table<any>;
433
- cfg?: OneConfig;
434
- };
435
- type ManyRelation = {
436
- kind: "many";
437
- table: Table<any>;
438
- cfg?: ManyConfig;
439
- };
440
- declare function relations(baseTable: Table<any>, builder: (ctx: RelationBuilderCtx) => Record<string, OneRelation | ManyRelation>): Record<string, OneRelation | ManyRelation>;
441
- type RelationConfig = OneRelation | ManyRelation;
442
- declare function makeQueryAPI(tables: Record<string, Table<any>>, relDefs: Record<string, Record<string, RelationConfig>>, dbProvider: () => Promise<Database>): { [K in keyof typeof tables]: {
443
- findMany: (opts?: {
444
- with?: WithSpec;
445
- join?: boolean;
446
- columns?: string[];
447
- }) => Promise<any[]>;
448
- findFirst: (opts?: {
449
- with?: WithSpec;
450
- join?: boolean;
451
- columns?: string[];
452
- }) => Promise<any | null>;
453
- }; };
150
+ declare const relations: <T extends AnyTable, R extends Record<string, any>>(table: T, relationsCallback: (helpers: {
151
+ one: any;
152
+ many: any;
153
+ }) => R) => R;
454
154
 
455
- export { type BlobMode, type CheckSpec, type Column, type ColumnBuilder, type ForeignKeySpec, type IndexSpec, type IntegerMode, type ManyRelation, type NumericMode, type OneRelation, type PrimaryKeySpec, type SQL, type SQLExpression, type Table, TauriORM, type UniqueSpec, type UpdateDeleteAction, and, asc, between, blob, boolean, check, defineTable, desc, eq, exists, foreignKey, getQualifiedName, gt, gte, ilike, inArray, increments, index, integer, isNotNull, isNull, like, lt, lte, makeQueryAPI, ne, not, notBetween, notExists, notIlike, notInArray, numeric, or, primaryKey, raw, real, relations, sql, text, timestamp, unique, uniqueIndex };
155
+ export { type AnySQLiteColumn, type AnyTable, type ColumnDataType, type ColumnOptions, DeleteQueryBuilder, type InferInsertModel, type InferSelectModel, InsertQueryBuilder, type Mode, type SQLCondition, SQLiteColumn, SelectQueryBuilder, Table, TauriORM, UpdateQueryBuilder, and, blob, boolean, eq, gt, gte, inArray, integer, isNotNull, isNull, like, lt, lte, or, real, relations, sqliteTable, text };