bun-query-builder 0.1.8 → 0.1.10
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/actions/benchmark.d.ts +5 -9
- package/dist/actions/cache.d.ts +14 -2
- package/dist/actions/console.d.ts +6 -0
- package/dist/actions/data.d.ts +13 -3
- package/dist/actions/db-info.d.ts +9 -4
- package/dist/actions/db-optimize.d.ts +5 -4
- package/dist/actions/db-wipe.d.ts +5 -4
- package/dist/actions/file.d.ts +1 -2
- package/dist/actions/index.d.ts +25 -25
- package/dist/actions/inspect.d.ts +9 -3
- package/dist/actions/introspect.d.ts +1 -2
- package/dist/actions/make-model.d.ts +5 -3
- package/dist/actions/migrate-generate.d.ts +5 -4
- package/dist/actions/migrate-rollback.d.ts +11 -4
- package/dist/actions/migrate-status.d.ts +9 -5
- package/dist/actions/migrate.d.ts +20 -12
- package/dist/actions/model-show.d.ts +5 -3
- package/dist/actions/query-explain-all.d.ts +5 -3
- package/dist/actions/relation-diagram.d.ts +5 -5
- package/dist/actions/seed.d.ts +17 -7
- package/dist/actions/sql.d.ts +1 -2
- package/dist/actions/unsafe.d.ts +1 -2
- package/dist/actions/validate.d.ts +9 -4
- package/dist/actions/wait-ready.d.ts +1 -2
- package/dist/client.d.ts +189 -199
- package/dist/config.d.ts +1 -1
- package/dist/db.d.ts +9 -8
- package/dist/drivers/index.d.ts +6 -8
- package/dist/drivers/mysql.d.ts +19 -169
- package/dist/drivers/postgres.d.ts +19 -155
- package/dist/drivers/sqlite.d.ts +19 -157
- package/dist/factory.d.ts +6 -3
- package/dist/index.d.ts +11 -11
- package/dist/index.js +1 -1
- package/dist/loader.d.ts +2 -3
- package/dist/meta.d.ts +2 -3
- package/dist/migrations.d.ts +47 -42
- package/dist/schema.d.ts +177 -30
- package/dist/seeder.d.ts +17 -12
- package/dist/types.d.ts +143 -42
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,141 +1,33 @@
|
|
|
1
|
+
import { config } from './config';
|
|
1
2
|
import type { DatabaseSchema } from './schema';
|
|
2
3
|
import type { SchemaMeta } from './meta';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export
|
|
4
|
+
export declare function createQueryBuilder<DB extends DatabaseSchema<any>>(state?: Partial<InternalState>): QueryBuilder<DB>;
|
|
5
|
+
/**
|
|
6
|
+
* # `clearQueryCache()`
|
|
7
|
+
*
|
|
8
|
+
* Clears all cached query results.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* clearQueryCache()
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearQueryCache(): void;
|
|
16
|
+
/**
|
|
17
|
+
* # `setQueryCacheMaxSize(size)`
|
|
18
|
+
*
|
|
19
|
+
* Sets the maximum number of cached queries (default 100).
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* setQueryCacheMaxSize(500)
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function setQueryCacheMaxSize(size: number): void;
|
|
27
|
+
export declare interface WhereRaw {
|
|
26
28
|
raw: any
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
export type WhereExpression<TableColumns> =
|
|
30
|
-
| Partial<{ [K in keyof TableColumns & string]: ValueOrRef | ValueOrRef[] }>
|
|
31
|
-
| [key: keyof TableColumns & string, op: WhereOperator, value: ValueOrRef | ValueOrRef[]]
|
|
32
|
-
| WhereRaw
|
|
33
|
-
|
|
34
|
-
export type QueryResult = any
|
|
35
|
-
|
|
36
|
-
export type SortDirection = 'asc' | 'desc'
|
|
37
|
-
|
|
38
|
-
export type ColumnName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = keyof DB[TTable]['columns'] & string
|
|
39
|
-
export type SelectedRow<
|
|
40
|
-
DB extends DatabaseSchema<any>,
|
|
41
|
-
_TTable extends keyof DB & string,
|
|
42
|
-
TSelected,
|
|
43
|
-
> = Readonly<TSelected>
|
|
44
|
-
|
|
45
|
-
type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string> = TTables extends any
|
|
46
|
-
? `${TTables}.${keyof DB[TTables]['columns'] & string}`
|
|
47
|
-
: never
|
|
48
|
-
|
|
49
|
-
type SnakeToPascal<S extends string> = S extends `${infer H}_${infer T}`
|
|
50
|
-
? `${Capitalize<H>}${SnakeToPascal<T>}`
|
|
51
|
-
: Capitalize<S>
|
|
52
|
-
|
|
53
|
-
type _TypedDynamicWhereMethods<
|
|
54
|
-
DB extends DatabaseSchema<any>,
|
|
55
|
-
TTable extends keyof DB & string,
|
|
56
|
-
TSelected,
|
|
57
|
-
TJoined extends string,
|
|
58
|
-
TSql extends string,
|
|
59
|
-
> = {
|
|
60
|
-
[K in keyof DB[TTable]['columns'] & string as `where${SnakeToPascal<K>}`]: (
|
|
61
|
-
value: DB[TTable]['columns'][K],
|
|
62
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>
|
|
63
|
-
} & {
|
|
64
|
-
[K in keyof DB[TTable]['columns'] & string as `orWhere${SnakeToPascal<K>}`]: (
|
|
65
|
-
value: DB[TTable]['columns'][K],
|
|
66
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>
|
|
67
|
-
} & {
|
|
68
|
-
[K in keyof DB[TTable]['columns'] & string as `andWhere${SnakeToPascal<K>}`]: (
|
|
69
|
-
value: DB[TTable]['columns'][K],
|
|
70
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export type TypedSelectQueryBuilder<
|
|
74
|
-
DB extends DatabaseSchema<any>,
|
|
75
|
-
TTable extends keyof DB & string,
|
|
76
|
-
TSelected,
|
|
77
|
-
TJoined extends string = TTable,
|
|
78
|
-
TSql extends string = `SELECT * FROM ${TTable}`,
|
|
79
|
-
> = Omit<
|
|
80
|
-
BaseSelectQueryBuilder<DB, TTable, TSelected, TJoined>,
|
|
81
|
-
'toSQL' | 'where' | 'andWhere' | 'orWhere' | 'orderBy' | 'limit'
|
|
82
|
-
> & DynamicWhereMethods<DB, TTable, TSelected, TJoined>
|
|
83
|
-
& _TypedDynamicWhereMethods<DB, TTable, TSelected, TJoined, TSql>
|
|
84
|
-
& {
|
|
85
|
-
toSQL: () => TSql
|
|
86
|
-
where: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
87
|
-
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
88
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
89
|
-
expr: [K, OP, any],
|
|
90
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
91
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
92
|
-
op?: WhereOperator,
|
|
93
|
-
value?: any,
|
|
94
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
|
|
95
|
-
andWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
96
|
-
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
97
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
98
|
-
expr: [K, OP, any],
|
|
99
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
100
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
101
|
-
op?: WhereOperator,
|
|
102
|
-
value?: any,
|
|
103
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
|
|
104
|
-
orWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
105
|
-
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
106
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
107
|
-
expr: [K, OP, any],
|
|
108
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
109
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
110
|
-
op?: WhereOperator,
|
|
111
|
-
value?: any,
|
|
112
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
|
|
113
|
-
orderBy: <C extends keyof DB[TTable]['columns'] & string, D extends 'asc' | 'desc' = 'asc'>(
|
|
114
|
-
column: C,
|
|
115
|
-
direction?: D,
|
|
116
|
-
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} ORDER BY ${C} ${D}`>
|
|
117
|
-
limit: <N extends number>(n: N) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} LIMIT ${N}`>
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
type DynamicWhereMethods<
|
|
121
|
-
DB extends DatabaseSchema<any>,
|
|
122
|
-
TTable extends keyof DB & string,
|
|
123
|
-
TSelected,
|
|
124
|
-
TJoined extends string = TTable,
|
|
125
|
-
> = {
|
|
126
|
-
[K in keyof DB[TTable]['columns'] & string as `where${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
127
|
-
} & {
|
|
128
|
-
[K in keyof DB[TTable]['columns'] & string as `orWhere${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
129
|
-
} & {
|
|
130
|
-
[K in keyof DB[TTable]['columns'] & string as `andWhere${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export interface BaseSelectQueryBuilder<
|
|
134
|
-
DB extends DatabaseSchema<any>,
|
|
135
|
-
TTable extends keyof DB & string,
|
|
136
|
-
TSelected,
|
|
137
|
-
TJoined extends string = TTable,
|
|
138
|
-
> {
|
|
30
|
+
export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable> {
|
|
139
31
|
distinct: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
140
32
|
distinctOn: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
141
33
|
selectRaw: (fragment: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -233,7 +125,29 @@ export interface BaseSelectQueryBuilder<
|
|
|
233
125
|
withRecursive: (name: string, sub: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
234
126
|
value: <K extends keyof TSelected & string>(column: K) => Promise<SelectedRow<DB, TTable, TSelected>[K]>
|
|
235
127
|
pluck: {
|
|
128
|
+
/**
|
|
129
|
+
* # `pluck(column)`
|
|
130
|
+
*
|
|
131
|
+
* Returns an array of values for a single column.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* const names = await db.selectFrom('users').pluck('name')
|
|
136
|
+
* const ids = await db.selectFrom('users').orderBy('id').pluck('id')
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
236
139
|
<K extends keyof TSelected & string>(column: K): Promise<SelectedRow<DB, TTable, TSelected>[K][]>
|
|
140
|
+
/**
|
|
141
|
+
* # `pluck(column, key)`
|
|
142
|
+
*
|
|
143
|
+
* Returns an object keyed by the given key column.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* const byId = await db.selectFrom('users').pluck('email', 'id')
|
|
148
|
+
* const map = await db.selectFrom('users').pluck('name', 'email')
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
237
151
|
<K extends keyof TSelected & string, K2 extends keyof TSelected & string>(column: K, key: K2): Promise<Record<string, SelectedRow<DB, TTable, TSelected>[K]>>
|
|
238
152
|
}
|
|
239
153
|
exists: () => Promise<boolean>
|
|
@@ -268,8 +182,8 @@ export interface BaseSelectQueryBuilder<
|
|
|
268
182
|
sum: (column: keyof DB[TTable]['columns'] & string) => Promise<number>
|
|
269
183
|
max: (column: keyof DB[TTable]['columns'] & string) => Promise<any>
|
|
270
184
|
min: (column: keyof DB[TTable]['columns'] & string) => Promise<any>
|
|
271
|
-
|
|
272
|
-
|
|
185
|
+
rows: TSelected[]
|
|
186
|
+
row: TSelected
|
|
273
187
|
values: () => Promise<any[][]>
|
|
274
188
|
toParams?: () => any[]
|
|
275
189
|
raw: () => Promise<any[][]>
|
|
@@ -283,22 +197,13 @@ export interface BaseSelectQueryBuilder<
|
|
|
283
197
|
denseRank?: (alias?: string, partitionBy?: string | string[], orderBy?: [string, 'asc' | 'desc'][]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
284
198
|
rank?: (alias?: string, partitionBy?: string | string[], orderBy?: [string, 'asc' | 'desc'][]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
285
199
|
}
|
|
286
|
-
|
|
287
|
-
export type SelectQueryBuilder<
|
|
288
|
-
DB extends DatabaseSchema<any>,
|
|
289
|
-
TTable extends keyof DB & string,
|
|
290
|
-
TSelected,
|
|
291
|
-
TJoined extends string = TTable,
|
|
292
|
-
> = BaseSelectQueryBuilder<DB, TTable, TSelected, TJoined> & DynamicWhereMethods<DB, TTable, TSelected, TJoined>
|
|
293
|
-
|
|
294
|
-
export interface InsertQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
200
|
+
export declare interface InsertQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
295
201
|
values: (data: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => InsertQueryBuilder<DB, TTable>
|
|
296
202
|
returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
|
|
297
203
|
toSQL: () => string
|
|
298
204
|
execute: () => Promise<number | DB[TTable]['columns'] | DB[TTable]['columns'][]>
|
|
299
205
|
}
|
|
300
|
-
|
|
301
|
-
export interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
206
|
+
export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
302
207
|
set: (values: Partial<DB[TTable]['columns']>) => UpdateQueryBuilder<DB, TTable>
|
|
303
208
|
where: (expr: WhereExpression<DB[TTable]['columns']>) => UpdateQueryBuilder<DB, TTable>
|
|
304
209
|
returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
|
|
@@ -306,23 +211,20 @@ export interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable exten
|
|
|
306
211
|
execute: () => Promise<number>
|
|
307
212
|
executeTakeFirst?: () => Promise<{ numUpdatedRows?: number }>
|
|
308
213
|
}
|
|
309
|
-
|
|
310
|
-
export interface DeleteQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
214
|
+
export declare interface DeleteQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
311
215
|
where: (expr: WhereExpression<DB[TTable]['columns']>) => DeleteQueryBuilder<DB, TTable>
|
|
312
216
|
returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
|
|
313
217
|
toSQL: () => string
|
|
314
218
|
execute: () => Promise<number>
|
|
315
219
|
executeTakeFirst?: () => Promise<{ numDeletedRows?: number }>
|
|
316
220
|
}
|
|
317
|
-
|
|
318
|
-
export interface TableQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
221
|
+
export declare interface TableQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
319
222
|
insert: (data: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => InsertQueryBuilder<DB, TTable>
|
|
320
223
|
update: (values: Partial<DB[TTable]['columns']>) => UpdateQueryBuilder<DB, TTable>
|
|
321
224
|
delete: () => DeleteQueryBuilder<DB, TTable>
|
|
322
225
|
select: (...columns: (keyof DB[TTable]['columns'] & string)[]) => SelectQueryBuilder<DB, TTable, any>
|
|
323
226
|
}
|
|
324
|
-
|
|
325
|
-
export interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
227
|
+
export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
326
228
|
select: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string>(
|
|
327
229
|
table: TTable,
|
|
328
230
|
...columns: (K | `${string} as ${string}`)[]
|
|
@@ -364,85 +266,69 @@ export interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
364
266
|
insertGetId: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']>, idColumn?: keyof DB[TTable]['columns'] & string) => Promise<any>
|
|
365
267
|
updateOrInsert: <TTable extends keyof DB & string>(table: TTable, match: Partial<DB[TTable]['columns']>, values: Partial<DB[TTable]['columns']>) => Promise<boolean>
|
|
366
268
|
upsert: <TTable extends keyof DB & string>(table: TTable, rows: Partial<DB[TTable]['columns']>[], conflictColumns: (keyof DB[TTable]['columns'] & string)[], mergeColumns?: (keyof DB[TTable]['columns'] & string)[]) => Promise<any>
|
|
367
|
-
|
|
368
269
|
create: <TTable extends keyof DB & string>(
|
|
369
270
|
table: TTable,
|
|
370
271
|
values: Partial<DB[TTable]['columns']>,
|
|
371
272
|
) => Promise<DB[TTable]['columns']>
|
|
372
|
-
|
|
373
273
|
createMany: <TTable extends keyof DB & string>(
|
|
374
274
|
table: TTable,
|
|
375
275
|
rows: Partial<DB[TTable]['columns']>[],
|
|
376
276
|
) => Promise<void>
|
|
377
|
-
|
|
378
277
|
insertMany: <TTable extends keyof DB & string>(
|
|
379
278
|
table: TTable,
|
|
380
279
|
rows: Partial<DB[TTable]['columns']>[],
|
|
381
280
|
) => Promise<void>
|
|
382
|
-
|
|
383
281
|
updateMany: <TTable extends keyof DB & string>(
|
|
384
282
|
table: TTable,
|
|
385
283
|
conditions: WhereExpression<DB[TTable]['columns']>,
|
|
386
284
|
data: Partial<DB[TTable]['columns']>,
|
|
387
285
|
) => Promise<number>
|
|
388
|
-
|
|
389
286
|
deleteMany: <TTable extends keyof DB & string>(
|
|
390
287
|
table: TTable,
|
|
391
288
|
ids: any[],
|
|
392
289
|
) => Promise<number>
|
|
393
|
-
|
|
394
290
|
firstOrCreate: <TTable extends keyof DB & string>(
|
|
395
291
|
table: TTable,
|
|
396
292
|
match: Partial<DB[TTable]['columns']>,
|
|
397
293
|
defaults?: Partial<DB[TTable]['columns']>,
|
|
398
294
|
) => Promise<DB[TTable]['columns']>
|
|
399
|
-
|
|
400
295
|
updateOrCreate: <TTable extends keyof DB & string>(
|
|
401
296
|
table: TTable,
|
|
402
297
|
match: Partial<DB[TTable]['columns']>,
|
|
403
298
|
values: Partial<DB[TTable]['columns']>,
|
|
404
299
|
) => Promise<DB[TTable]['columns']>
|
|
405
|
-
|
|
406
300
|
save: <TTable extends keyof DB & string>(
|
|
407
301
|
table: TTable,
|
|
408
302
|
values: Partial<DB[TTable]['columns']>,
|
|
409
303
|
) => Promise<DB[TTable]['columns']>
|
|
410
|
-
|
|
411
304
|
remove: <TTable extends keyof DB & string>(
|
|
412
305
|
table: TTable,
|
|
413
306
|
id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
|
|
414
307
|
) => Promise<any>
|
|
415
|
-
|
|
416
308
|
find: <TTable extends keyof DB & string>(
|
|
417
309
|
table: TTable,
|
|
418
310
|
id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
|
|
419
311
|
) => Promise<DB[TTable]['columns'] | undefined>
|
|
420
|
-
|
|
421
312
|
findOrFail: <TTable extends keyof DB & string>(
|
|
422
313
|
table: TTable,
|
|
423
314
|
id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
|
|
424
315
|
) => Promise<DB[TTable]['columns']>
|
|
425
|
-
|
|
426
316
|
findMany: <TTable extends keyof DB & string>(
|
|
427
317
|
table: TTable,
|
|
428
318
|
ids: any[],
|
|
429
319
|
) => Promise<DB[TTable]['columns'][]>
|
|
430
|
-
|
|
431
320
|
latest: <TTable extends keyof DB & string>(
|
|
432
321
|
table: TTable,
|
|
433
322
|
column?: keyof DB[TTable]['columns'] & string,
|
|
434
323
|
) => Promise<DB[TTable]['columns'] | undefined>
|
|
435
|
-
|
|
436
324
|
oldest: <TTable extends keyof DB & string>(
|
|
437
325
|
table: TTable,
|
|
438
326
|
column?: keyof DB[TTable]['columns'] & string,
|
|
439
327
|
) => Promise<DB[TTable]['columns'] | undefined>
|
|
440
|
-
|
|
441
328
|
skip: <TTable extends keyof DB & string>(
|
|
442
329
|
table: TTable,
|
|
443
330
|
count: number,
|
|
444
331
|
) => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TTable>
|
|
445
|
-
|
|
446
332
|
rawQuery: (query: string) => Promise<any>
|
|
447
333
|
id?: (name: string) => any
|
|
448
334
|
ids?: (...names: string[]) => any
|
|
@@ -453,12 +339,131 @@ export interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
453
339
|
getRelationshipType?: (table: string, relationName: string) => string | null
|
|
454
340
|
getRelationshipTarget?: (table: string, relationName: string) => string | null
|
|
455
341
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
342
|
+
declare interface InternalState {
|
|
343
|
+
sql: any
|
|
344
|
+
meta?: SchemaMeta
|
|
345
|
+
schema?: any
|
|
346
|
+
txDefaults?: TransactionOptions
|
|
347
|
+
}
|
|
348
|
+
export declare interface TransactionOptions {
|
|
349
|
+
retries?: number
|
|
350
|
+
isolation?: TransactionIsolation
|
|
351
|
+
onRetry?: (attempt: number, error: any) => void
|
|
352
|
+
afterCommit?: () => void
|
|
353
|
+
sqlStates?: string[]
|
|
354
|
+
backoff?: TxBackoff
|
|
355
|
+
logger?: (event: TxLoggerEvent) => void
|
|
356
|
+
readOnly?: boolean
|
|
357
|
+
onRollback?: (error: any) => void
|
|
358
|
+
afterRollback?: () => void
|
|
359
|
+
}
|
|
360
|
+
declare interface TxBackoff {
|
|
361
|
+
baseMs?: number
|
|
362
|
+
maxMs?: number
|
|
363
|
+
factor?: number
|
|
364
|
+
jitter?: boolean
|
|
365
|
+
}
|
|
366
|
+
declare interface TxLoggerEvent {
|
|
367
|
+
type: 'start' | 'retry' | 'commit' | 'rollback' | 'error'
|
|
368
|
+
attempt: number
|
|
369
|
+
error?: any
|
|
370
|
+
durationMs?: number
|
|
371
|
+
}
|
|
372
|
+
// Where condition helpers
|
|
373
|
+
declare type Primitive = string | number | boolean | bigint | Date | null | undefined
|
|
374
|
+
declare type ValueOrRef = Primitive
|
|
375
|
+
export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in' | 'is' | 'is not'
|
|
376
|
+
export type WhereExpression<TableColumns> = | Partial<{ [K in keyof TableColumns & string]: ValueOrRef | ValueOrRef[] }>
|
|
377
|
+
| [key: keyof TableColumns & string, op: WhereOperator, value: ValueOrRef | ValueOrRef[]]
|
|
378
|
+
| WhereRaw
|
|
379
|
+
export type QueryResult = any
|
|
380
|
+
/**
|
|
381
|
+
* # `SortDirection`
|
|
382
|
+
*
|
|
383
|
+
* The direction used when ordering query results.
|
|
384
|
+
*/
|
|
385
|
+
export type SortDirection = 'asc' | 'desc'
|
|
386
|
+
/**
|
|
387
|
+
* # `ColumnName<DB, TTable>`
|
|
388
|
+
*
|
|
389
|
+
* Helper type extracting a string union of column names for a given table.
|
|
390
|
+
*/
|
|
391
|
+
export type ColumnName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = keyof DB[TTable]['columns'] & string
|
|
392
|
+
// Named row alias to improve IDE hover readability
|
|
393
|
+
export type SelectedRow<DB extends DatabaseSchema<any>, _TTable extends keyof DB & string, TSelected> = Readonly<TSelected>
|
|
394
|
+
declare type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string> = TTables extends any
|
|
395
|
+
? `${TTables}.${keyof DB[TTables]['columns'] & string}`
|
|
396
|
+
: never
|
|
397
|
+
// Convert snake_case to PascalCase at the type level (e.g. created_at -> CreatedAt)
|
|
398
|
+
declare type SnakeToPascal<S extends string> = S extends `${infer H}_${infer T}`
|
|
399
|
+
? `${Capitalize<H>}${SnakeToPascal<T>}`
|
|
400
|
+
: Capitalize<S>
|
|
401
|
+
// Typed SQL builder (type-level only). We piggy-back on the runtime builder but
|
|
402
|
+
// thread a phantom TSql string through method signatures so hovers can show the
|
|
403
|
+
// composed SQL at compile-time for common operations.
|
|
404
|
+
declare type _TypedDynamicWhereMethods<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string, TSql extends string> = {
|
|
405
|
+
[K in keyof DB[TTable]['columns'] & string as `where${SnakeToPascal<K>}`]: (
|
|
406
|
+
value: DB[TTable]['columns'][K],
|
|
407
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>
|
|
408
|
+
} & {
|
|
409
|
+
[K in keyof DB[TTable]['columns'] & string as `orWhere${SnakeToPascal<K>}`]: (
|
|
410
|
+
value: DB[TTable]['columns'][K],
|
|
411
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>
|
|
412
|
+
} & {
|
|
413
|
+
[K in keyof DB[TTable]['columns'] & string as `andWhere${SnakeToPascal<K>}`]: (
|
|
414
|
+
value: DB[TTable]['columns'][K],
|
|
415
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>
|
|
416
|
+
}
|
|
417
|
+
export type TypedSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable, TSql extends string = `SELECT * FROM ${TTable}`> = Omit<
|
|
418
|
+
BaseSelectQueryBuilder<DB, TTable, TSelected, TJoined>,
|
|
419
|
+
'toSQL' | 'where' | 'andWhere' | 'orWhere' | 'orderBy' | 'limit'
|
|
420
|
+
> & DynamicWhereMethods<DB, TTable, TSelected, TJoined>
|
|
421
|
+
& _TypedDynamicWhereMethods<DB, TTable, TSelected, TJoined, TSql>
|
|
422
|
+
& {
|
|
423
|
+
toSQL: () => TSql
|
|
424
|
+
where: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
425
|
+
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
426
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
427
|
+
expr: [K, OP, any],
|
|
428
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
429
|
+
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
430
|
+
op?: WhereOperator,
|
|
431
|
+
value?: any,
|
|
432
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
|
|
433
|
+
andWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
434
|
+
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
435
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
436
|
+
expr: [K, OP, any],
|
|
437
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
438
|
+
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
439
|
+
op?: WhereOperator,
|
|
440
|
+
value?: any,
|
|
441
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
|
|
442
|
+
orWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
443
|
+
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
444
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
445
|
+
expr: [K, OP, any],
|
|
446
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
447
|
+
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
448
|
+
op?: WhereOperator,
|
|
449
|
+
value?: any,
|
|
450
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
|
|
451
|
+
orderBy: <C extends keyof DB[TTable]['columns'] & string, D extends 'asc' | 'desc' = 'asc'>(
|
|
452
|
+
column: C,
|
|
453
|
+
direction?: D,
|
|
454
|
+
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} ORDER BY ${C} ${D}`>
|
|
455
|
+
limit: <N extends number>(n: N) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} LIMIT ${N}`>
|
|
456
|
+
}
|
|
457
|
+
declare type DynamicWhereMethods<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable> = {
|
|
458
|
+
[K in keyof DB[TTable]['columns'] & string as `where${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
459
|
+
} & {
|
|
460
|
+
[K in keyof DB[TTable]['columns'] & string as `orWhere${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
461
|
+
} & {
|
|
462
|
+
[K in keyof DB[TTable]['columns'] & string as `andWhere${SnakeToPascal<K>}`]: (value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
463
|
+
}
|
|
464
|
+
export type SelectQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable> = BaseSelectQueryBuilder<DB, TTable, TSelected, TJoined> & DynamicWhereMethods<DB, TTable, TSelected, TJoined>
|
|
465
|
+
// Typed INSERT builder to expose a structured SQL literal in hovers
|
|
466
|
+
export type TypedInsertQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSql extends string = `INSERT INTO ${TTable}`> = Omit<InsertQueryBuilder<DB, TTable>, 'toSQL' | 'values' | 'returning'> & {
|
|
462
467
|
toSQL: () => TSql
|
|
463
468
|
values: (
|
|
464
469
|
data: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[],
|
|
@@ -473,27 +478,12 @@ export type TypedInsertQueryBuilder<
|
|
|
473
478
|
`${TSql} RETURNING ${string}`
|
|
474
479
|
>
|
|
475
480
|
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
declare function sleep(ms: number): Promise<void>;
|
|
486
|
-
declare function computeBackoffMs(attempt: number, cfg?: TxBackoff): number;
|
|
487
|
-
export declare function createQueryBuilder<DB extends DatabaseSchema<any>>(state?: Partial<InternalState>): QueryBuilder<DB>;
|
|
488
|
-
declare function applyCondition(expr: WhereExpression<any>): any;
|
|
489
|
-
declare function applyWhere(columns: Record<string, unknown>, q: any, expr?: WhereExpression<any>): void;
|
|
490
|
-
declare function computeSqlText(q: any): string;
|
|
491
|
-
declare function runWithHooks<T = any>(q: any, kind: 'select' | 'insert' | 'update' | 'delete' | 'raw', opts?: { signal?: AbortSignal, timeoutMs?: number }): Promise<T>;
|
|
492
|
-
declare function makeExecutableQuery(q: any, text?: string): void;
|
|
493
|
-
declare function makeSelect<TTable extends keyof DB & string>(table: TTable): TypedSelectQueryBuilder<DB, TTable, any, TTable, `SELECT * FROM $;
|
|
494
|
-
declare function makeSelect<TTable extends keyof DB & string>(table: TTable, columns: string[]): TypedSelectQueryBuilder<DB, TTable, any, TTable, `SELECT $;
|
|
495
|
-
declare function makeSelect<TTable extends keyof DB & string>(table: TTable, columns?: string[]): any;
|
|
496
|
-
declare function createSubQueryBuilder(newQ: any): void;
|
|
497
|
-
declare function applyWhereCondition(query: any, expr: any, op?: WhereOperator, value?: any, prefix?: 'WHERE' | 'AND' | 'OR'): void;
|
|
498
|
-
export declare function clearQueryCache(): void;
|
|
499
|
-
export declare function setQueryCacheMaxSize(size: number): void;
|
|
481
|
+
declare type TransactionIsolation = 'read committed' | 'repeatable read' | 'serializable'
|
|
482
|
+
declare class QueryCache {
|
|
483
|
+
private cache: any;
|
|
484
|
+
private maxSize: any;
|
|
485
|
+
get(key: string): any | null;
|
|
486
|
+
set(key: string, data: any, ttlMs: number): void;
|
|
487
|
+
clear(): void;
|
|
488
|
+
setMaxSize(size: number): void;
|
|
489
|
+
}
|
package/dist/config.d.ts
CHANGED
package/dist/db.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { DatabaseConfig, SupportedDialect } from './types';
|
|
2
1
|
import { SQL } from 'bun';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Returns a Bun SQL instance configured for the current dialect and database settings.
|
|
4
|
+
* Handles connection errors gracefully by falling back to in-memory SQLite.
|
|
5
|
+
*/
|
|
5
6
|
export declare function getBunSql(): SQL;
|
|
6
|
-
export declare function getOrCreateBunSql(forceNew?:
|
|
7
|
-
|
|
8
|
-
export declare
|
|
9
|
-
|
|
10
|
-
export { SQL } from 'bun'
|
|
7
|
+
export declare function getOrCreateBunSql(forceNew?: any): SQL;
|
|
8
|
+
// Wrapper that catches "Connection closed" errors and retries with a fresh connection
|
|
9
|
+
export declare function withFreshConnection<T>(fn: (sql: SQL) => Promise<T>): Promise<T>;
|
|
10
|
+
export declare const bunSql: unknown;
|
|
11
|
+
export { SQL } from 'bun';
|
package/dist/drivers/index.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import type { DialectDriver } from './postgres';
|
|
2
|
-
import type { SupportedDialect } from '../types';
|
|
3
1
|
import { MySQLDriver } from './mysql';
|
|
4
2
|
import { PostgresDriver } from './postgres';
|
|
5
3
|
import { SQLiteDriver } from './sqlite';
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import type { DialectDriver } from './postgres';
|
|
5
|
+
import type { SupportedDialect } from '../types';
|
|
6
|
+
export type { DialectDriver } from './postgres';
|
|
8
7
|
export declare function getDialectDriver(dialect: SupportedDialect): DialectDriver;
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export { SQLiteDriver } from './sqlite'
|
|
8
|
+
export { MySQLDriver } from './mysql';
|
|
9
|
+
export { PostgresDriver } from './postgres';
|
|
10
|
+
export { SQLiteDriver } from './sqlite';
|