bun-query-builder 0.2.25 → 0.2.27

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/browser.d.ts CHANGED
@@ -14,6 +14,14 @@ export declare function getBrowserConfig(): BrowserConfig;
14
14
  * Check if we're in a browser environment
15
15
  */
16
16
  export declare function isBrowser(): boolean;
17
+ /**
18
+ * Get the current auth token
19
+ */
20
+ declare function getAuthToken(): Promise<string | null>;
21
+ /**
22
+ * Build fetch headers with auth
23
+ */
24
+ declare function buildHeaders(): Promise<HeadersInit>;
17
25
  /**
18
26
  * Create a browser query builder for a table
19
27
  */
@@ -53,19 +61,17 @@ export declare function createBrowserDb<Tables extends Record<string, any>>(): {
53
61
  * // type: ('admin' | 'user' | 'moderator')[]
54
62
  * ```
55
63
  */
56
- export declare function createBrowserModel<const TDef extends BrowserModelDefinition>(definition: TDef): void;
64
+ export declare function createBrowserModel<const TDef extends BrowserModelDefinition>(definition: TDef): unknown;
57
65
  /**
58
66
  * Auth helpers for browser
59
67
  * @defaultValue
60
68
  * ```ts
61
69
  * {
62
- * login: (credentials?: { email: string, password: string }): Promise<{ user: Record<string, unknown>, token: string }> {
63
- * const response) => Promise<unknown>,
64
- * register: (data?: { name: string, email: string, password: string }): Promise<{ user: Record<string, unknown>, token: string }> {
65
- * const response) => Promise<unknown>,
66
- * logout: () => unknown,
67
- * user: () => unknown,
68
- * check: () => unknown
70
+ * login: (credentials: { email: string, password: string }) => Promise<{ user: Record<string, unknown>, token: string }>,
71
+ * register: (data: { name: string, email: string, password: string }) => Promise<{ user: Record<string, unknown>, token: string }>,
72
+ * logout: () => Promise<void>,
73
+ * user: () => Promise<Record<string, unknown> | null>,
74
+ * check: () => Promise<boolean>
69
75
  * }
70
76
  * ```
71
77
  */
package/dist/client.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { config } from './config';
2
2
  import { resetConnection } from './db';
3
3
  import type { DatabaseSchema } from './schema';
4
+ import type { DriverConnection } from './db';
5
+ import type { QueryHooks } from './types';
4
6
  import type { SchemaMeta } from './meta';
5
7
  /**
6
8
  * # `raw`
@@ -58,20 +60,24 @@ declare interface RawExpression {
58
60
  raw: string
59
61
  }
60
62
  export declare interface WhereRaw {
61
- raw: any
63
+ raw: SqlFragment
62
64
  }
63
65
  export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable,> {
64
66
  distinct: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
65
67
  distinctOn: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
66
68
  selectRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
67
- where: (expr: WhereExpression<DB[TTable]['columns']> | string, op?: WhereOperator, value?: any) => SelectQueryBuilder<DB, TTable, TSelected>
69
+ where: <K extends keyof DB[TTable]['columns'] & string>(
70
+ expr: WhereExpression<DB[TTable]['columns']> | K,
71
+ op?: WhereOperator,
72
+ value?: WhereValue<DB[TTable]['columns'][K]>,
73
+ ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
68
74
  whereRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
69
75
  whereColumn: (left: string, op: WhereOperator, right: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
70
76
  orWhereColumn: (left: string, op: WhereOperator, right: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
71
- whereIn: (column: keyof DB[TTable]['columns'] & string, values: any[] | { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
72
- orWhereIn: (column: keyof DB[TTable]['columns'] & string, values: any[] | { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
73
- whereNotIn: (column: keyof DB[TTable]['columns'] & string, values: any[] | { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
74
- orWhereNotIn: (column: keyof DB[TTable]['columns'] & string, values: any[] | { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
77
+ whereIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
78
+ orWhereIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
79
+ whereNotIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
80
+ orWhereNotIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
75
81
  whereLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
76
82
  whereILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
77
83
  orWhereLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
@@ -80,18 +86,26 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
80
86
  whereNotILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
81
87
  orWhereNotLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
82
88
  orWhereNotILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
83
- whereAny: (columns: (keyof DB[TTable]['columns'] & string)[], op: WhereOperator, value: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
84
- whereAll: (columns: (keyof DB[TTable]['columns'] & string)[], op: WhereOperator, value: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
85
- whereNone: (columns: (keyof DB[TTable]['columns'] & string)[], op: WhereOperator, value: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
86
- whereNested: (fragment: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
87
- orWhereNested: (fragment: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
89
+ whereAny: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
90
+ whereAll: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
91
+ whereNone: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
92
+ whereNested: (fragment: { toSQL: () => string } | SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
93
+ orWhereNested: (fragment: { toSQL: () => string } | SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
88
94
  whereDate: (column: string, op: WhereOperator, date: string | Date) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
89
- whereBetween: (column: string, start: any, end: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
90
- whereNotBetween: (column: string, start: any, end: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
95
+ whereBetween: <K extends keyof DB[TTable]['columns'] & string>(column: K, start: DB[TTable]['columns'][K], end: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
96
+ whereNotBetween: <K extends keyof DB[TTable]['columns'] & string>(column: K, start: DB[TTable]['columns'][K], end: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
91
97
  whereJsonContains: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
92
98
  whereJsonPath?: (path: string, op: WhereOperator, value: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
93
- andWhere: (expr: WhereExpression<DB[TTable]['columns']> | string, op?: WhereOperator, value?: any) => SelectQueryBuilder<DB, TTable, TSelected>
94
- orWhere: (expr: WhereExpression<DB[TTable]['columns']> | string, op?: WhereOperator, value?: any) => SelectQueryBuilder<DB, TTable, TSelected>
99
+ andWhere: <K extends keyof DB[TTable]['columns'] & string>(
100
+ expr: WhereExpression<DB[TTable]['columns']> | K,
101
+ op?: WhereOperator,
102
+ value?: WhereValue<DB[TTable]['columns'][K]>,
103
+ ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
104
+ orWhere: <K extends keyof DB[TTable]['columns'] & string>(
105
+ expr: WhereExpression<DB[TTable]['columns']> | K,
106
+ op?: WhereOperator,
107
+ value?: WhereValue<DB[TTable]['columns'][K]>,
108
+ ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
95
109
  orderBy: (column: ColumnName<DB, TTable>, direction?: SortDirection) => SelectQueryBuilder<DB, TTable, TSelected>
96
110
  orderByDesc: (column: ColumnName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected>
97
111
  inRandomOrder: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
@@ -101,14 +115,14 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
101
115
  limit: (n: number) => SelectQueryBuilder<DB, TTable, TSelected>
102
116
  offset: (n: number) => SelectQueryBuilder<DB, TTable, TSelected>
103
117
  withTimeout?: (ms: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
104
- abort?: (signal: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
118
+ abort?: (signal: AbortSignal) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
105
119
  join: <T2 extends keyof DB & string>(
106
120
  table: T2,
107
121
  onLeft: JoinColumn<DB, TJoined | T2>,
108
122
  operator: '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like',
109
123
  onRight: JoinColumn<DB, TJoined | T2>,
110
124
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
111
- joinSub: (sub: { toSQL: () => any }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
125
+ joinSub: (sub: { toSQL: () => string }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
112
126
  innerJoin: <T2 extends keyof DB & string>(
113
127
  table: T2,
114
128
  onLeft: JoinColumn<DB, TJoined | T2>,
@@ -121,7 +135,7 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
121
135
  operator: '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like',
122
136
  onRight: JoinColumn<DB, TJoined | T2>,
123
137
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
124
- leftJoinSub: (sub: { toSQL: () => any }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
138
+ leftJoinSub: (sub: { toSQL: () => string }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
125
139
  rightJoin: <T2 extends keyof DB & string>(
126
140
  table: T2,
127
141
  onLeft: JoinColumn<DB, TJoined | T2>,
@@ -129,10 +143,10 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
129
143
  onRight: JoinColumn<DB, TJoined | T2>,
130
144
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
131
145
  crossJoin: <T2 extends keyof DB & string>(table: T2) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
132
- crossJoinSub: (sub: { toSQL: () => any }, alias: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
146
+ crossJoinSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
133
147
  groupBy: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
134
148
  groupByRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
135
- having: (expr: WhereExpression<any>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
149
+ having: (expr: WhereExpression<TSelected>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
136
150
  havingRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
137
151
  addSelect: (...columns: ((keyof DB[TTable]['columns'] & string) | string | SqlFragment)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
138
152
  select?: {
@@ -141,38 +155,38 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
141
155
  }
142
156
  selectAll?: () => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TJoined>
143
157
  orderByRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
144
- union: (other: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
145
- unionAll: (other: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
158
+ union: (other: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
159
+ unionAll: (other: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
146
160
  forPage: (page: number, perPage: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
147
- selectAllRelations?: () => SelectQueryBuilder<DB, TTable, any, TJoined>
161
+ selectAllRelations?: () => SelectQueryBuilder<DB, TTable, TSelected & Record<string, unknown>, TJoined>
148
162
  whereNull?: (column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
149
163
  whereNotNull?: (column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
150
- whereExists?: (subquery: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
164
+ whereExists?: (subquery: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
151
165
  whereJsonDoesntContain?: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
152
166
  whereJsonContainsKey?: (path: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
153
167
  whereJsonDoesntContainKey?: (path: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
154
168
  whereJsonLength?: (path: string, opOrLen: WhereOperator | number, len?: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
155
- with?: (...relations: WithRelationArg<DB, TTable>[]) => SelectQueryBuilder<DB, TTable, TSelected, any>
156
- whereHas?: (relation: TableRelationName<DB, TTable>, callback?: (qb: any) => any) => SelectQueryBuilder<DB, TTable, TSelected, any>
157
- whereDoesntHave?: (relation: TableRelationName<DB, TTable>, callback?: (qb: any) => any) => SelectQueryBuilder<DB, TTable, TSelected, any>
158
- has?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, any>
159
- doesntHave?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, any>
160
- withCount?: (...relations: TableRelationName<DB, TTable>[]) => SelectQueryBuilder<DB, TTable, TSelected, any>
161
- withSum?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
162
- withAvg?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
163
- withMax?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
164
- withMin?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
165
- withPivot?: (relation: TableRelationName<DB, TTable>, ...columns: string[]) => SelectQueryBuilder<DB, TTable, TSelected, any>
166
- wherePivot?: (relation: TableRelationName<DB, TTable>, column: string, opOrValue: any, value?: any) => SelectQueryBuilder<DB, TTable, TSelected, any>
167
- wherePivotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: any[]) => SelectQueryBuilder<DB, TTable, TSelected, any>
168
- wherePivotNotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: any[]) => SelectQueryBuilder<DB, TTable, TSelected, any>
169
- wherePivotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
170
- wherePivotNotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, any>
171
- applyPivotColumns?: () => SelectQueryBuilder<DB, TTable, TSelected, any>
169
+ with?: (...relations: WithRelationArg<DB, TTable>[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
170
+ whereHas?: <R extends TableRelationName<DB, TTable>>(relation: R, callback?: (qb: RelationQueryBuilder<DB, TTable, R>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
171
+ whereDoesntHave?: <R extends TableRelationName<DB, TTable>>(relation: R, callback?: (qb: RelationQueryBuilder<DB, TTable, R>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
172
+ has?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
173
+ doesntHave?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
174
+ withCount?: <R extends TableRelationName<DB, TTable>>(...relations: R[]) => SelectQueryBuilder<DB, TTable, TSelected & { [K in `${R}_count`]: number }, TJoined>
175
+ withSum?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_sum_${K}`]: number }, TJoined>
176
+ withAvg?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_avg_${K}`]: number }, TJoined>
177
+ withMax?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_max_${K}`]: DB[RelatedTableName<DB, TTable, R>]['columns'][K] | null }, TJoined>
178
+ withMin?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_min_${K}`]: DB[RelatedTableName<DB, TTable, R>]['columns'][K] | null }, TJoined>
179
+ withPivot?: (relation: TableRelationName<DB, TTable>, ...columns: string[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
180
+ wherePivot?: (relation: TableRelationName<DB, TTable>, column: string, opOrValue: unknown, value?: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
181
+ wherePivotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: unknown[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
182
+ wherePivotNotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: unknown[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
183
+ wherePivotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
184
+ wherePivotNotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
185
+ applyPivotColumns?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
172
186
  lockForUpdate: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
173
187
  sharedLock: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
174
- withCTE: (name: string, sub: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
175
- withRecursive: (name: string, sub: { toSQL: () => any }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
188
+ withCTE: (name: string, sub: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
189
+ withRecursive: (name: string, sub: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
176
190
  value: <K extends keyof TSelected & string>(column: K) => Promise<SelectedRow<DB, TTable, TSelected>[K]>
177
191
  pluck: {
178
192
  <K extends keyof TSelected & string>(column: K): Promise<SelectedRow<DB, TTable, TSelected>[K][]>
@@ -181,17 +195,17 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
181
195
  exists: () => Promise<boolean>
182
196
  doesntExist: () => Promise<boolean>
183
197
  cursorPaginate: (perPage: number, cursor?: string | number, column?: string, direction?: 'asc' | 'desc') => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, nextCursor: string | number | null } }>
184
- chunk: (size: number, handler: (rows: any[]) => Promise<void> | void) => Promise<void>
185
- chunkById: (size: number, column?: string, handler?: (rows: any[]) => Promise<void> | void) => Promise<void>
186
- eachById: (size: number, column?: string, handler?: (row: any) => Promise<void> | void) => Promise<void>
187
- when: (condition: any, then: (qb: any) => any, otherwise?: (qb: any) => any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
188
- tap: (fn: (qb: any) => any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
198
+ chunk: (size: number, handler: (rows: SelectedRow<DB, TTable, TSelected>[]) => Promise<void> | void) => Promise<void>
199
+ chunkById: (size: number, column?: keyof DB[TTable]['columns'] & string, handler?: (rows: SelectedRow<DB, TTable, TSelected>[]) => Promise<void> | void) => Promise<void>
200
+ eachById: (size: number, column?: keyof DB[TTable]['columns'] & string, handler?: (row: SelectedRow<DB, TTable, TSelected>) => Promise<void> | void) => Promise<void>
201
+ when: (condition: unknown, then: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown, otherwise?: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
202
+ tap: (fn: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
189
203
  dump: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
190
204
  dd: () => never
191
- explain: () => Promise<any[]>
192
- simple: () => any
205
+ explain: () => Promise<Record<string, unknown>[]>
206
+ simple: () => unknown
193
207
  toText?: () => string
194
- paginate: (perPage: number, page?: number, opts?: { tx?: { unsafe: (sql: string, params?: any[]) => any } }) => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, page: number, total: number, lastPage: number } }>
208
+ paginate: (perPage: number, page?: number, opts?: { tx?: { unsafe: (sql: string, params?: unknown[]) => unknown } }) => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, page: number, total: number, lastPage: number } }>
195
209
  simplePaginate: (perPage: number, page?: number) => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, page: number, hasMore: boolean } }>
196
210
  toSQL: () => string
197
211
  execute: () => Promise<SelectedRow<DB, TTable, TSelected>[]>
@@ -200,26 +214,26 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
200
214
  get: () => Promise<SelectedRow<DB, TTable, TSelected>[]>
201
215
  first: () => Promise<SelectedRow<DB, TTable, TSelected> | undefined>
202
216
  firstOrFail: () => Promise<SelectedRow<DB, TTable, TSelected>>
203
- find: (id: any) => Promise<SelectedRow<DB, TTable, TSelected> | undefined>
204
- findOrFail: (id: any) => Promise<SelectedRow<DB, TTable, TSelected>>
205
- findMany: (ids: any[]) => Promise<TSelected[]>
206
- lazy: () => AsyncIterable<TSelected>
207
- lazyById: () => AsyncIterable<TSelected>
217
+ find: (id: PrimaryKeyValue<DB, TTable>) => Promise<SelectedRow<DB, TTable, TSelected> | undefined>
218
+ findOrFail: (id: PrimaryKeyValue<DB, TTable>) => Promise<SelectedRow<DB, TTable, TSelected>>
219
+ findMany: (ids: PrimaryKeyValue<DB, TTable>[]) => Promise<SelectedRow<DB, TTable, TSelected>[]>
220
+ lazy: () => AsyncIterable<SelectedRow<DB, TTable, TSelected>>
221
+ lazyById: () => AsyncIterable<SelectedRow<DB, TTable, TSelected>>
208
222
  pipe: <R>(fn: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => R) => R
209
223
  count: () => Promise<number>
210
- avg: (column: keyof DB[TTable]['columns'] & string) => Promise<number>
211
- sum: (column: keyof DB[TTable]['columns'] & string) => Promise<number>
224
+ avg: (column: NumericColumnName<DB[TTable]['columns']>) => Promise<number>
225
+ sum: (column: NumericColumnName<DB[TTable]['columns']>) => Promise<number>
212
226
  max: <K extends keyof DB[TTable]['columns'] & string>(column: K) => Promise<DB[TTable]['columns'][K] | null>
213
227
  min: <K extends keyof DB[TTable]['columns'] & string>(column: K) => Promise<DB[TTable]['columns'][K] | null>
214
228
  readonly rows: TSelected[]
215
229
  readonly row: TSelected
216
- values: () => Promise<any[][]>
217
- toParams?: () => any[]
218
- raw: () => Promise<any[][]>
230
+ values: () => Promise<unknown[][]>
231
+ toParams?: () => unknown[]
232
+ raw: () => Promise<unknown[][]>
219
233
  cancel: () => void
220
234
  withTrashed?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
221
235
  onlyTrashed?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
222
- scope?: (name: string, value?: any) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
236
+ scope?: (name: string, value?: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
223
237
  clone?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
224
238
  cache?: (ttlMs?: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
225
239
  rowNumber?: (alias?: string, partitionBy?: string | string[], orderBy?: [string, 'asc' | 'desc'][]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
@@ -237,7 +251,11 @@ export declare interface InsertQueryBuilder<DB extends DatabaseSchema<any>, TTab
237
251
  }
238
252
  export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
239
253
  set: (values: Partial<{ [K in keyof DB[TTable]['columns']]: DB[TTable]['columns'][K] | SqlFragment }>) => UpdateQueryBuilder<DB, TTable>
240
- where: (expr: WhereExpression<DB[TTable]['columns']> | string | SqlFragment, op?: WhereOperator, value?: any) => UpdateQueryBuilder<DB, TTable>
254
+ where: <K extends keyof DB[TTable]['columns'] & string>(
255
+ expr: WhereExpression<DB[TTable]['columns']> | K | SqlFragment,
256
+ op?: WhereOperator,
257
+ value?: WhereValue<DB[TTable]['columns'][K]>,
258
+ ) => UpdateQueryBuilder<DB, TTable>
241
259
  whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
242
260
  whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
243
261
  returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
@@ -248,7 +266,11 @@ export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTab
248
266
  executeTakeFirstOrThrow: () => Promise<{ numUpdatedRows: number }>
249
267
  }
250
268
  export declare interface DeleteQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
251
- where: (expr: WhereExpression<DB[TTable]['columns']> | string, op?: WhereOperator, value?: any) => DeleteQueryBuilder<DB, TTable>
269
+ where: <K extends keyof DB[TTable]['columns'] & string>(
270
+ expr: WhereExpression<DB[TTable]['columns']> | K,
271
+ op?: WhereOperator,
272
+ value?: WhereValue<DB[TTable]['columns'][K]>,
273
+ ) => DeleteQueryBuilder<DB, TTable>
252
274
  whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
253
275
  whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
254
276
  returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
@@ -273,26 +295,26 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
273
295
  <TTable extends keyof DB & string>(
274
296
  table: TTable,
275
297
  ...columns: ((keyof DB[TTable]['columns'] & string) | `${string} as ${string}`)[]
276
- ): SelectQueryBuilder<DB, TTable, any>
298
+ ): SelectQueryBuilder<DB, TTable, Record<string, unknown>>
277
299
  }
278
300
  selectFrom: <TTable extends keyof DB & string>(table: TTable) => TypedSelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TTable, `SELECT * FROM ${TTable}`>
279
301
  insertInto: <TTable extends keyof DB & string>(table: TTable) => TypedInsertQueryBuilder<DB, TTable>
280
302
  updateTable: <TTable extends keyof DB & string>(table: TTable) => UpdateQueryBuilder<DB, TTable>
281
303
  deleteFrom: <TTable extends keyof DB & string>(table: TTable) => DeleteQueryBuilder<DB, TTable>
282
304
  table: <TTable extends keyof DB & string>(table: TTable) => TableQueryBuilder<DB, TTable>
283
- selectFromSub: (sub: { toSQL: () => any }, alias: string) => SelectQueryBuilder<DB, keyof DB & string, any>
284
- sql: any
285
- raw: (strings: TemplateStringsArray, ...values: any[]) => any
286
- simple: (strings: TemplateStringsArray, ...values: any[]) => any
287
- unsafe: (query: string, params?: any[]) => Promise<any>
288
- file: (path: string, params?: any[]) => Promise<any>
305
+ selectFromSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, keyof DB & string, Record<string, unknown>>
306
+ sql: DriverConnection
307
+ raw: (strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment
308
+ simple: (strings: TemplateStringsArray, ...values: unknown[]) => unknown
309
+ unsafe: <TRow extends Record<string, unknown> = Record<string, unknown>>(query: string, params?: unknown[]) => Promise<TRow[]>
310
+ file: <TRow extends Record<string, unknown> = Record<string, unknown>>(path: string, params?: unknown[]) => Promise<TRow[]>
289
311
  reserve: () => Promise<(QueryBuilder<DB> & { release: () => void })>
290
312
  close: (opts?: { timeout?: number }) => Promise<void>
291
- listen: (channel: string, handler?: (payload: any) => void) => Promise<void>
313
+ listen: (channel: string, handler?: (payload: unknown) => void) => Promise<void>
292
314
  unlisten: (channel?: string) => Promise<void>
293
- notify: (channel: string, payload?: any) => Promise<void>
294
- copyTo: (queryOrTable: string, options?: Record<string, any>) => Promise<any>
295
- copyFrom: (queryOrTable: string, source: AsyncIterable<any> | Iterable<any>, options?: Record<string, any>) => Promise<any>
315
+ notify: (channel: string, payload?: unknown) => Promise<void>
316
+ copyTo: (queryOrTable: string, options?: Record<string, unknown>) => Promise<unknown>
317
+ copyFrom: (queryOrTable: string, source: AsyncIterable<unknown> | Iterable<unknown>, options?: Record<string, unknown>) => Promise<unknown>
296
318
  ping: () => Promise<boolean>
297
319
  waitForReady: (opts?: { attempts?: number, delayMs?: number }) => Promise<void>
298
320
  transaction: <T>(fn: (tx: QueryBuilder<DB>) => Promise<T> | T, options?: TransactionOptions) => Promise<T>
@@ -302,16 +324,16 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
302
324
  rollbackDistributed: (name: string) => Promise<void>
303
325
  configure: (opts: Partial<typeof config>) => QueryBuilder<DB>
304
326
  setTransactionDefaults: (defaults: TransactionOptions) => void
305
- transactional: <TArgs extends any[], R>(fn: (tx: QueryBuilder<DB>, ...args: TArgs) => Promise<R> | R, options?: TransactionOptions) => (...args: TArgs) => Promise<R>
327
+ transactional: <TArgs extends unknown[], R>(fn: (tx: QueryBuilder<DB>, ...args: TArgs) => Promise<R> | R, options?: TransactionOptions) => (...args: TArgs) => Promise<R>
306
328
  count: <TTable extends keyof DB & string>(table: TTable, column?: keyof DB[TTable]['columns'] & string) => Promise<number>
307
329
  sum: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<number>
308
330
  avg: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<number>
309
- min: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<any>
310
- max: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<any>
311
- insertOrIgnore: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => Promise<any>
312
- insertGetId: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']>, idColumn?: keyof DB[TTable]['columns'] & string) => Promise<any>
331
+ min: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string>(table: TTable, column: K) => Promise<DB[TTable]['columns'][K] | null>
332
+ max: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string>(table: TTable, column: K) => Promise<DB[TTable]['columns'][K] | null>
333
+ insertOrIgnore: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => Promise<number>
334
+ insertGetId: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string = DB[TTable]['primaryKey'] & keyof DB[TTable]['columns'] & string>(table: TTable, values: Partial<DB[TTable]['columns']>, idColumn?: K) => Promise<DB[TTable]['columns'][K]>
313
335
  updateOrInsert: <TTable extends keyof DB & string>(table: TTable, match: Partial<DB[TTable]['columns']>, values: Partial<DB[TTable]['columns']>) => Promise<boolean>
314
- 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>
336
+ 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<number>
315
337
  create: <TTable extends keyof DB & string>(
316
338
  table: TTable,
317
339
  values: Partial<DB[TTable]['columns']>,
@@ -331,7 +353,7 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
331
353
  ) => Promise<number>
332
354
  deleteMany: <TTable extends keyof DB & string>(
333
355
  table: TTable,
334
- ids: any[],
356
+ ids: PrimaryKeyValue<DB, TTable>[],
335
357
  ) => Promise<number>
336
358
  firstOrCreate: <TTable extends keyof DB & string>(
337
359
  table: TTable,
@@ -349,19 +371,19 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
349
371
  ) => Promise<DB[TTable]['columns']>
350
372
  remove: <TTable extends keyof DB & string>(
351
373
  table: TTable,
352
- id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
353
- ) => Promise<any>
374
+ id: PrimaryKeyValue<DB, TTable>,
375
+ ) => Promise<unknown>
354
376
  find: <TTable extends keyof DB & string>(
355
377
  table: TTable,
356
- id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
378
+ id: PrimaryKeyValue<DB, TTable>,
357
379
  ) => Promise<DB[TTable]['columns'] | undefined>
358
380
  findOrFail: <TTable extends keyof DB & string>(
359
381
  table: TTable,
360
- id: DB[TTable]['columns'][DB[TTable]['primaryKey'] & keyof DB[TTable]['columns']] | any,
382
+ id: PrimaryKeyValue<DB, TTable>,
361
383
  ) => Promise<DB[TTable]['columns']>
362
384
  findMany: <TTable extends keyof DB & string>(
363
385
  table: TTable,
364
- ids: any[],
386
+ ids: PrimaryKeyValue<DB, TTable>[],
365
387
  ) => Promise<DB[TTable]['columns'][]>
366
388
  latest: <TTable extends keyof DB & string>(
367
389
  table: TTable,
@@ -375,12 +397,13 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
375
397
  table: TTable,
376
398
  count: number,
377
399
  ) => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TTable>
378
- rawQuery: (query: string) => Promise<any>
379
- id?: (name: string) => any
380
- ids?: (...names: string[]) => any
400
+ rawQuery: (query: string) => Promise<Record<string, unknown>[]>
401
+ id?: (name: string) => SqlFragment
402
+ ids?: (...names: string[]) => SqlFragment
381
403
  advisoryLock?: (key: number | string) => Promise<void>
382
404
  tryAdvisoryLock?: (key: number | string) => Promise<boolean>
383
- getRelationships?: (table: string) => Record<string, any>
405
+ advisoryUnlock?: (key: number | string) => Promise<boolean>
406
+ getRelationships?: (table: string) => Record<string, unknown>
384
407
  hasRelationship?: (table: string, relationName: string) => boolean
385
408
  getRelationshipType?: (table: string, relationName: string) => string | null
386
409
  getRelationshipTarget?: (table: string, relationName: string) => string | null
@@ -390,6 +413,7 @@ declare interface InternalState {
390
413
  meta?: SchemaMeta
391
414
  schema?: any
392
415
  txDefaults?: TransactionOptions
416
+ hooks?: QueryHooks
393
417
  inTransaction?: boolean
394
418
  }
395
419
  declare interface TxBackoff { baseMs?: number, maxMs?: number, factor?: number, jitter?: boolean }
@@ -432,10 +456,11 @@ export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in'
432
456
  * See stacksjs/stacks#1858 Q-3.
433
457
  */
434
458
  export type SqlFragment = object;
435
- export type WhereExpression<TableColumns> = | Partial<{ [K in keyof TableColumns & string]: ValueOrRef | ValueOrRef[] }>
436
- | [key: keyof TableColumns & string, op: WhereOperator, value: ValueOrRef | ValueOrRef[]]
459
+ declare type WhereValue<T> = T | T[] | SqlFragment;
460
+ export type WhereExpression<TableColumns> = | Partial<{ [K in keyof TableColumns & string]: WhereValue<TableColumns[K]> }>
461
+ | { [K in keyof TableColumns & string]: [key: K, op: WhereOperator, value: WhereValue<TableColumns[K]>] }[keyof TableColumns & string]
437
462
  | WhereRaw;
438
- export type QueryResult = any;
463
+ export type QueryResult = unknown;
439
464
  /**
440
465
  * # `SortDirection`
441
466
  *
@@ -450,6 +475,14 @@ export type SortDirection = 'asc' | 'desc';
450
475
  export type ColumnName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = keyof DB[TTable]['columns'] & string;
451
476
  // Named row alias to improve IDE hover readability
452
477
  export type SelectedRow<DB extends DatabaseSchema<any>, _TTable extends keyof DB & string, TSelected,> = Readonly<TSelected>;
478
+ declare type PrimaryKeyValue<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = DB[TTable]['primaryKey'] extends keyof DB[TTable]['columns']
479
+ ? DB[TTable]['columns'][DB[TTable]['primaryKey']]
480
+ : unknown;
481
+ declare type NumericColumnName<Columns> = {
482
+ [K in keyof Columns & string]: unknown extends Columns[K]
483
+ ? K
484
+ : Exclude<Columns[K], null | undefined> extends number ? K : never
485
+ }[keyof Columns & string];
453
486
  declare type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string> = TTables extends any
454
487
  ? `${TTables}.${keyof DB[TTables]['columns'] & string}`
455
488
  : never;
@@ -466,6 +499,19 @@ declare type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string>
466
499
  export type TableRelationName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = DB[TTable] extends { relations?: infer R }
467
500
  ? unknown extends R ? string : keyof NonNullable<R> & string
468
501
  : string;
502
+ declare type RelatedTableName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TRelation extends TableRelationName<DB, TTable>,> = DB[TTable] extends { relations?: infer Relations }
503
+ ? TRelation extends keyof NonNullable<Relations>
504
+ ? Extract<NonNullable<Relations>[TRelation], keyof DB & string>
505
+ : keyof DB & string
506
+ : keyof DB & string;
507
+ declare type RelationQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TRelation extends TableRelationName<DB, TTable>,> = SelectQueryBuilder<
508
+ DB,
509
+ RelatedTableName<DB, TTable, TRelation>,
510
+ DB[RelatedTableName<DB, TTable, TRelation>]['columns']
511
+ >;
512
+ declare type RelationConstraintRecord<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = {
513
+ [R in TableRelationName<DB, TTable>]: Partial<Record<R, (qb: RelationQueryBuilder<DB, TTable, R>) => unknown>>
514
+ }[TableRelationName<DB, TTable>];
469
515
  /**
470
516
  * # `WithRelationArg<DB, TTable>`
471
517
  *
@@ -480,7 +526,7 @@ export type WithRelationArg<DB extends DatabaseSchema<any>, TTable extends keyof
480
526
  :
481
527
  | TableRelationName<DB, TTable>
482
528
  | `${TableRelationName<DB, TTable>}.${string}`
483
- | Partial<Record<TableRelationName<DB, TTable>, (qb: any) => any>>;
529
+ | RelationConstraintRecord<DB, TTable>;
484
530
  // Convert snake_case to PascalCase at the type level (e.g. created_at -> CreatedAt)
485
531
  declare type SnakeToPascal<S extends string> = S extends `${infer H}_${infer T}`
486
532
  ? `${Capitalize<H>}${SnakeToPascal<T>}`
@@ -515,29 +561,29 @@ export type TypedSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable exten
515
561
  where: (<K extends keyof DB[TTable]['columns'] & string>(
516
562
  expr: Record<K, DB[TTable]['columns'][K]>,
517
563
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
518
- expr: [K, OP, any],
564
+ expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
519
565
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
520
566
  expr: WhereExpression<DB[TTable]['columns']> | string,
521
567
  op?: WhereOperator,
522
- value?: any,
568
+ value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
523
569
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
524
570
  andWhere: (<K extends keyof DB[TTable]['columns'] & string>(
525
571
  expr: Record<K, DB[TTable]['columns'][K]>,
526
572
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
527
- expr: [K, OP, any],
573
+ expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
528
574
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
529
575
  expr: WhereExpression<DB[TTable]['columns']> | string,
530
576
  op?: WhereOperator,
531
- value?: any,
577
+ value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
532
578
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
533
579
  orWhere: (<K extends keyof DB[TTable]['columns'] & string>(
534
580
  expr: Record<K, DB[TTable]['columns'][K]>,
535
581
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
536
- expr: [K, OP, any],
582
+ expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
537
583
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
538
584
  expr: WhereExpression<DB[TTable]['columns']> | string,
539
585
  op?: WhereOperator,
540
- value?: any,
586
+ value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
541
587
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
542
588
  orderBy: <C extends keyof DB[TTable]['columns'] & string, D extends 'asc' | 'desc' = 'asc'>(
543
589
  column: C,