prisma-ts-select 0.0.34 → 0.1.2
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/LICENSE +21 -0
- package/README.md +1242 -315
- package/assets/groupBy.gif +0 -0
- package/assets/joinUnsafeIgnoreType.gif +0 -0
- package/assets/joinUnsafeTypeEnforced.gif +0 -0
- package/assets/typesafe-join.gif +0 -0
- package/assets/typesafe-join.png +0 -0
- package/assets/whereNotNull.gif +0 -0
- package/assets/whereisNull.gif +0 -0
- package/dist/bin.cjs +1 -1
- package/dist/bin.js +1 -1
- package/dist/chunk-47KZVQLD.js +283 -0
- package/dist/chunk-54D2J5AR.cjs +291 -0
- package/dist/extend/dialects/index.d.ts +13 -0
- package/dist/extend/dialects/index.js +186 -0
- package/dist/extend/dialects/mysql-v6.d.ts +100 -0
- package/dist/extend/dialects/mysql-v6.js +152 -0
- package/dist/extend/dialects/mysql-v7.d.ts +6 -0
- package/dist/extend/dialects/mysql-v7.js +138 -0
- package/dist/extend/dialects/mysql.d.ts +90 -0
- package/dist/extend/dialects/mysql.js +156 -0
- package/dist/extend/dialects/postgresql-v6.d.ts +97 -0
- package/dist/extend/dialects/postgresql-v6.js +136 -0
- package/dist/extend/dialects/postgresql-v7.d.ts +97 -0
- package/dist/extend/dialects/postgresql-v7.js +136 -0
- package/dist/extend/dialects/postgresql.d.ts +89 -0
- package/dist/extend/dialects/postgresql.js +147 -0
- package/dist/extend/dialects/shared.d.ts +6 -0
- package/dist/extend/dialects/shared.js +5 -0
- package/dist/extend/dialects/sqlite.d.ts +63 -0
- package/dist/extend/dialects/sqlite.js +138 -0
- package/dist/extend/dialects/types.d.ts +12 -0
- package/dist/extend/dialects/types.js +4 -0
- package/dist/extend/extend.d.ts +286 -43
- package/dist/extend/extend.js +735 -163
- package/dist/extend/sql-expr-BaKWzJ-r.d.ts +10 -0
- package/dist/extend/types-D84lxYVc.d.ts +5 -0
- package/dist/generator.cjs +1 -1
- package/dist/generator.js +1 -1
- package/package.json +46 -42
- package/built/extend.cjs +0 -680
- package/built/extend.d.cts +0 -520
- package/built/extend.d.ts +0 -520
- package/built/extend.js +0 -678
- package/dist/chunk-TBO3MX7Q.cjs +0 -195
- package/dist/chunk-X3N5N5KQ.js +0 -187
- package/dist/extend/extend.cjs +0 -357
- package/dist/extend/extend.d.cts +0 -264
package/dist/extend/extend.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Decimal } from '@prisma/client/runtime/client';
|
|
2
|
+
import { S as SQLExpr, L as LitToType } from './sql-expr-BaKWzJ-r.js';
|
|
3
|
+
|
|
4
|
+
type PrismaClient = any;
|
|
3
5
|
|
|
4
6
|
declare const DB: DBType;
|
|
5
7
|
type TDB = typeof DB;
|
|
@@ -32,26 +34,34 @@ type DBType = Record<string, {
|
|
|
32
34
|
}>;
|
|
33
35
|
type Filter<a, b> = a extends b ? a : never;
|
|
34
36
|
type IsString<T> = T extends string ? T : never;
|
|
35
|
-
type ValidSelect<Tables extends TArrSources> = "*" | GetOtherColumns<Tables> | GetTableStar<Tables>;
|
|
36
|
-
type GetTableStar<Tables extends TArrSources> = Tables extends [infer T extends TTableSources, ...Array<TTableSources>] ? T extends string ? `${T}.*` | GetTableStarJoined<Tables[number]> : `${T[1]}.*` | GetTableStarJoined<Tables[number]> : never;
|
|
37
|
-
type GetTableStarJoined<T extends TTableSources> = T extends string ? `${T}.*` : `${T[1]}.*`;
|
|
37
|
+
type ValidSelect<Tables extends TArrSources, TFields extends TFieldsType = {}> = "*" | GetOtherColumns<Tables> | GetTableStar<Tables> | GetCTEColumns<Tables, TFields>;
|
|
38
|
+
type GetTableStar<Tables extends TArrSources> = Tables extends [infer T extends TTableSources, ...Array<TTableSources>] ? T extends TVirtualTableSource ? GetTableStarJoined<Tables[number]> : T extends string ? `${T}.*` | GetTableStarJoined<Tables[number]> : `${T[1]}.*` | GetTableStarJoined<Tables[number]> : never;
|
|
39
|
+
type GetTableStarJoined<T extends TTableSources> = T extends TVirtualTableSource ? never : T extends string ? `${T}.*` : `${T[1]}.*`;
|
|
38
40
|
type ExtractColumnType<Column extends string, TSources extends TArrSources, TFields extends TFieldsType> = Column extends `${infer T}.${infer F}` ? T extends keyof TFields ? F extends keyof TFields[T] ? TFields[T][F] : never : never : Column extends keyof TFields[TSources[0] extends string ? TSources[0] : `Come back to 1`] ? TFields[TSources[0] extends string ? TSources[0] : `Come back To 2`][Column] : never;
|
|
39
41
|
type TTables = DATABASE["table"];
|
|
40
|
-
type
|
|
42
|
+
type TVirtualTableSource = readonly ["__cte__", name: string];
|
|
43
|
+
type TTableSources = DATABASE["table"] | [table: DATABASE["table"], alias: string] | TVirtualTableSource;
|
|
41
44
|
type TArrSources = [TTableSources, ...Array<TTableSources>];
|
|
42
45
|
type ClauseType = Array<string | WhereCriteria<TArrSources, Record<string, any>>>;
|
|
46
|
+
type JoinType = "INNER" | "LEFT" | "LEFT OUTER" | "RIGHT" | "RIGHT OUTER" | "FULL" | "FULL OUTER" | "CROSS";
|
|
43
47
|
type Values = {
|
|
44
48
|
selectDistinct?: true;
|
|
45
49
|
selects: Array<string>;
|
|
46
50
|
tables: [{
|
|
47
|
-
table:
|
|
51
|
+
table: string;
|
|
48
52
|
alias?: string;
|
|
49
53
|
}, ...Array<{
|
|
50
|
-
table:
|
|
54
|
+
table: string;
|
|
51
55
|
local: string;
|
|
52
56
|
remote: string;
|
|
53
57
|
alias?: string;
|
|
58
|
+
joinWhere?: ClauseType;
|
|
59
|
+
joinType?: JoinType;
|
|
54
60
|
}>];
|
|
61
|
+
withs?: Array<{
|
|
62
|
+
name: string;
|
|
63
|
+
sql: string;
|
|
64
|
+
}>;
|
|
55
65
|
limit?: number;
|
|
56
66
|
offset?: number;
|
|
57
67
|
where?: ClauseType;
|
|
@@ -63,7 +73,7 @@ declare class _fRun<TSources extends TArrSources, TFields extends TFieldsType, T
|
|
|
63
73
|
protected db: PrismaClient;
|
|
64
74
|
protected values: Values;
|
|
65
75
|
constructor(db: PrismaClient, values: Values);
|
|
66
|
-
run():
|
|
76
|
+
run(): Promise<TSelectRT[]>;
|
|
67
77
|
getTables(): TSources;
|
|
68
78
|
getFields(): TFields;
|
|
69
79
|
getResultType(): Array<TSelectRT>;
|
|
@@ -79,7 +89,9 @@ type OrderBy<Tables extends TArrSources, TSelectRT extends Record<string, any> =
|
|
|
79
89
|
declare class _fOrderBy<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fLimit<TSources, TFields, TSelectRT> {
|
|
80
90
|
orderBy(orderBy: Array<`${OrderBy<TSources, TSelectRT>}${"" | " DESC" | " ASC"}`>): _fLimit<TSources, TFields, TSelectRT>;
|
|
81
91
|
}
|
|
82
|
-
type MergeItems<Field extends string, TSources extends TArrSources, TFields extends TFieldsType, IncTName extends boolean = false, TLTables extends string = TablesArray2Name<TSources>[number]> = Field extends "*" ? Prettify<IterateTables<TSources, TFields, IncTName>> : Field extends `${infer T}.*` ? T extends keyof TFields ? [TSources] extends [[T]] ? TFields[T] : T extends string ? IterateTablesFromFields<T, TFields[T], true> : never : never : Field extends `${infer T extends TLTables}.${infer F extends string}` ? T extends keyof TFields ? F extends keyof TFields[T] ? IsColumnUnique<F, TSources> extends true ? Prettify<Pick<TFields[T], F>> : Prettify<{
|
|
92
|
+
type MergeItems<Field extends string, TSources extends TArrSources, TFields extends TFieldsType, IncTName extends boolean = false, TLTables extends string = TablesArray2Name<TSources>[number]> = Field extends "*" ? Prettify<IterateTables<TSources, TFields, IncTName>> : Field extends `${infer T}.*` ? T extends keyof TFields ? [TSources] extends [[T]] ? TFields[T] : T extends string ? IterateTablesFromFields<T, TFields[T], true> : never : never : Field extends `${infer T extends TLTables}.${infer F extends string}` ? T extends keyof TFields ? F extends keyof TFields[T] ? [IsCTE<T, TSources>] extends [never] ? IsColumnUnique<F, TSources> extends true ? Prettify<Pick<TFields[T], F>> : Prettify<{
|
|
93
|
+
[K in Field]: TFields[T][F];
|
|
94
|
+
}> : Prettify<{
|
|
83
95
|
[K in Field]: TFields[T][F];
|
|
84
96
|
}> : never : never : FindColumnInFields<Field, TFields>;
|
|
85
97
|
type FindColumnInFields<Column extends string, TFields extends TFieldsType, Tables extends keyof TFields = keyof TFields> = Tables extends keyof TFields ? TFields[Tables] extends Record<Column, any> ? Pick<TFields[Tables], Column> : never : never;
|
|
@@ -89,24 +101,33 @@ type IterateTablesFromFields<Table extends TTableSources, TFields extends Record
|
|
|
89
101
|
[f in keyof TFields as GenName<Table extends string ? Table : `Come back to 6`, f, IncTName>]: TFields[f];
|
|
90
102
|
};
|
|
91
103
|
type TablesArray2Name<TSources extends Array<TTableSources>, acc extends Array<string> = []> = TSources extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? TablesArray2Name<Rest, [...acc, GetAliasTableNames<T>]> : acc;
|
|
92
|
-
type GetColumnNamesFromTable<TDBBase extends TTableSources> = keyof GetFieldsFromTable<GetRealTableNames<TDBBase>>;
|
|
104
|
+
type GetColumnNamesFromTable<TDBBase extends TTableSources> = TDBBase extends TVirtualTableSource ? never : keyof GetFieldsFromTable<GetRealTableNames<TDBBase>>;
|
|
93
105
|
type GetColumnsFromTables<Tables extends Array<TTableSources>> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? GetColumnNamesFromTable<T> | GetColumnsFromTables<Rest> : never;
|
|
94
106
|
type GetDuplicateColumnsPairwise<Tables extends TArrSources> = Tables extends [infer T1 extends TTableSources, infer T2 extends TTableSources, ...infer Rest extends Array<TTableSources>] ? (GetColumnNamesFromTable<T1> & GetColumnNamesFromTable<T2>) | GetDuplicateColumnsPairwise<[T1, ...Rest]> | GetDuplicateColumnsPairwise<[T2, ...Rest]> : never;
|
|
95
107
|
type IsColumnUnique<Col extends string, Tables extends TArrSources> = Col extends GetDuplicateColumnsPairwise<Tables> ? false : true;
|
|
96
108
|
type GetOtherColumns<Tables extends TArrSources> = Exclude<GetColumnsFromTables<Tables>, GetDuplicateColumnsPairwise<Tables>> | GetJoinCols<Tables[number]>;
|
|
97
109
|
declare class _fSelect<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fOrderBy<TSources, TFields, TSelectRT> {
|
|
98
|
-
select<
|
|
110
|
+
select<T>(fn: (ctx: SelectFnContext<TSources, TFields>) => SQLExpr<T>): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<string, T>>>;
|
|
111
|
+
select<T, A extends string>(fn: (ctx: SelectFnContext<TSources, TFields>) => SQLExpr<T>, alias: A): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<A, T>>>;
|
|
112
|
+
select<const TSelect extends ValidSelect<TSources, TFields>>(select: TSelect): _fSelect<TSources, TFields, Prettify<TSelectRT & MergeItems<TSelect, TSources, TFields>>>;
|
|
113
|
+
select<const TSelect extends ValidSelect<TSources, TFields>, TAlias extends string>(select: TSelect, alias: TAlias): _fSelect<TSources, TFields, Prettify<TSelectRT & Record<TAlias, ExtractColumnType<TSelect, TSources, TFields>>>>;
|
|
99
114
|
}
|
|
100
115
|
type CountKeys<T extends Array<TTableSources>, acc extends Array<true> = []> = T extends [string, ...infer R extends Array<string>] ? CountKeys<R, [...acc, true]> : acc["length"];
|
|
116
|
+
type StripTablePrefix<S extends string> = S extends `${string}.${infer Col}` ? Col : S;
|
|
101
117
|
declare class _fSelectDistinct<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fSelect<TSources, TFields, TSelectRT> {
|
|
102
118
|
selectDistinct(): _fSelect<TSources, TFields, TSelectRT>;
|
|
103
|
-
selectAll<TableCount = CountKeys<TSources>>(): _fOrderBy<TSources, TFields, IterateTables<TSources, TFields, TableCount extends 1 ? false : true, {}> extends infer T ? { [K in keyof T]:
|
|
119
|
+
selectAll<TableCount = CountKeys<TSources>>(): _fOrderBy<TSources, TFields, IterateTables<TSources, TFields, TableCount extends 1 ? false : true, {}> extends infer T ? { [K in keyof T]: T[K]; } : never>;
|
|
120
|
+
selectAllOmit<const TSelect extends GetOtherColumns<TSources>, TableCount = CountKeys<TSources>>(omit: Array<TSelect>): _fOrderBy<TSources, TFields, Omit<IterateTables<TSources, TFields, TableCount extends 1 ? false : true, {}> extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never, TSelect | StripTablePrefix<TSelect>> extends infer T ? { [K in keyof T]: T[K]; } : never>;
|
|
104
121
|
}
|
|
105
|
-
declare class _fHaving<TSources extends TArrSources, TFields extends TFieldsType> extends
|
|
106
|
-
|
|
122
|
+
declare class _fHaving<TSources extends TArrSources, TFields extends TFieldsType> extends _fSelect<TSources, TFields> {
|
|
123
|
+
selectDistinct(): _fSelect<TSources, TFields, {}>;
|
|
124
|
+
having<const TCriteria extends WhereCriteria<TSources, TFields>>(criteria: TCriteria): _fHaving<TSources, TFields>;
|
|
125
|
+
having(fn: (ctx: SelectFnContext<TSources, TFields>) => Array<ExprCondPair>): _fHaving<TSources, TFields>;
|
|
107
126
|
}
|
|
108
|
-
declare class _fGroupBy<TSources extends TArrSources, TFields extends TFieldsType> extends
|
|
109
|
-
|
|
127
|
+
declare class _fGroupBy<TSources extends TArrSources, TFields extends TFieldsType> extends _fSelectDistinct<TSources, TFields> {
|
|
128
|
+
having<const TCriteria extends WhereCriteria<TSources, TFields>>(criteria: TCriteria): _fSelectDistinct<TSources, TFields>;
|
|
129
|
+
having(fn: (ctx: SelectFnContext<TSources, TFields>) => Array<ExprCondPair>): _fSelectDistinct<TSources, TFields>;
|
|
130
|
+
groupBy<TSelect extends GetOtherColumns<TSources> | GetCTEColumns<TSources, TFields>>(groupBy: Array<TSelect>): _fHaving<TSources, TFields>;
|
|
110
131
|
}
|
|
111
132
|
type OptionalRecord<K extends PropertyKey, V> = {
|
|
112
133
|
[key in K]?: V;
|
|
@@ -114,17 +135,57 @@ type OptionalRecord<K extends PropertyKey, V> = {
|
|
|
114
135
|
type OptionalObject<K extends Record<PropertyKey, unknown>> = {
|
|
115
136
|
[key in keyof K]?: K[key];
|
|
116
137
|
};
|
|
117
|
-
type
|
|
138
|
+
type NonEmptyArray<T> = [T, ...Array<T>];
|
|
139
|
+
type COND_NUMERIC_OP = '>' | '>=' | '<' | '<=' | '!=' | '=';
|
|
140
|
+
type NumericCondValue = number | bigint | {
|
|
141
|
+
op: COND_NUMERIC_OP;
|
|
142
|
+
value: number | bigint;
|
|
143
|
+
} | {
|
|
144
|
+
op: 'IN' | 'NOT IN';
|
|
145
|
+
values: Array<number | bigint>;
|
|
146
|
+
} | {
|
|
147
|
+
op: 'BETWEEN';
|
|
148
|
+
values: [low: number | bigint, high: number | bigint];
|
|
149
|
+
};
|
|
150
|
+
type StringCondValue = string | {
|
|
151
|
+
op: 'LIKE' | 'NOT LIKE';
|
|
152
|
+
value: string;
|
|
153
|
+
} | {
|
|
154
|
+
op: '!=';
|
|
155
|
+
value: string;
|
|
156
|
+
} | {
|
|
157
|
+
op: 'IN' | 'NOT IN';
|
|
158
|
+
values: Array<string>;
|
|
159
|
+
};
|
|
160
|
+
type DateCondValue = Date | {
|
|
161
|
+
op: COND_NUMERIC_OP;
|
|
162
|
+
value: Date;
|
|
163
|
+
} | {
|
|
164
|
+
op: 'BETWEEN';
|
|
165
|
+
values: [Date, Date];
|
|
166
|
+
} | {
|
|
167
|
+
op: 'IN' | 'NOT IN';
|
|
168
|
+
values: Array<Date>;
|
|
169
|
+
};
|
|
170
|
+
type BoolExprCondValue = boolean | {
|
|
171
|
+
op: '!=';
|
|
172
|
+
value: boolean;
|
|
173
|
+
};
|
|
174
|
+
type ExprCondPair = [SQLExpr<number | null>, NumericCondValue] | [SQLExpr<bigint | null>, NumericCondValue] | [SQLExpr<Decimal | null>, NumericCondValue] | [SQLExpr<string | null>, StringCondValue] | [SQLExpr<Date | null>, DateCondValue] | [SQLExpr<boolean | null>, BoolExprCondValue];
|
|
175
|
+
type COND_NUMERIC<key extends PropertyKey, keyType> = OptionalRecord<key, keyType> | OptionalRecord<key, NonEmptyArray<keyType>> | OptionalRecord<key, {
|
|
118
176
|
op: 'IN' | 'NOT IN';
|
|
119
177
|
values: Array<keyType>;
|
|
120
178
|
}> | OptionalRecord<key, {
|
|
121
179
|
op: 'BETWEEN';
|
|
122
180
|
values: [keyType, keyType];
|
|
123
181
|
}> | OptionalRecord<key, {
|
|
124
|
-
op:
|
|
182
|
+
op: COND_NUMERIC_OP;
|
|
125
183
|
value: keyType;
|
|
126
|
-
}
|
|
127
|
-
|
|
184
|
+
}> | OptionalRecord<key, NonEmptyArray<{
|
|
185
|
+
op: COND_NUMERIC_OP;
|
|
186
|
+
value: keyType;
|
|
187
|
+
}>>;
|
|
188
|
+
type COND_STRING<key extends PropertyKey> = OptionalRecord<key, string> | OptionalRecord<key, NonEmptyArray<string>> | OptionalRecord<key, {
|
|
128
189
|
op: 'IN' | 'NOT IN';
|
|
129
190
|
values: Array<string>;
|
|
130
191
|
}> | OptionalRecord<key, {
|
|
@@ -133,17 +194,23 @@ type COND_STRING<key extends PropertyKey> = OptionalRecord<key, string> | Option
|
|
|
133
194
|
}> | OptionalRecord<key, {
|
|
134
195
|
op: '!=';
|
|
135
196
|
value: string;
|
|
136
|
-
}
|
|
137
|
-
|
|
197
|
+
}> | OptionalRecord<key, NonEmptyArray<{
|
|
198
|
+
op: 'LIKE' | 'NOT LIKE' | '!=' | '=';
|
|
199
|
+
value: string;
|
|
200
|
+
}>>;
|
|
201
|
+
type COND_DATETIME<key extends PropertyKey, keyType> = OptionalRecord<key, keyType> | OptionalRecord<key, NonEmptyArray<keyType>> | OptionalRecord<key, {
|
|
138
202
|
op: 'IN' | 'NOT IN';
|
|
139
203
|
values: Array<keyType>;
|
|
140
204
|
}> | OptionalRecord<key, {
|
|
141
205
|
op: 'BETWEEN';
|
|
142
206
|
values: [keyType, keyType];
|
|
143
207
|
}> | OptionalRecord<key, {
|
|
144
|
-
op:
|
|
208
|
+
op: COND_NUMERIC_OP;
|
|
145
209
|
value: keyType;
|
|
146
|
-
}
|
|
210
|
+
}> | OptionalRecord<key, NonEmptyArray<{
|
|
211
|
+
op: COND_NUMERIC_OP;
|
|
212
|
+
value: keyType;
|
|
213
|
+
}>>;
|
|
147
214
|
type COND_BOOLEAN<key extends PropertyKey, keyType> = OptionalRecord<key, keyType> | OptionalRecord<key, {
|
|
148
215
|
op: '!=';
|
|
149
216
|
value: keyType;
|
|
@@ -158,10 +225,18 @@ type TableFieldType<Table extends string, Fields extends Record<string, any>> =
|
|
|
158
225
|
[f in keyof Fields as CombineToString<f, Table>]: Fields[f];
|
|
159
226
|
};
|
|
160
227
|
type LogicalOperator = '$AND' | '$OR' | '$NOT' | "$NOR";
|
|
161
|
-
type
|
|
162
|
-
[k in LogicalOperator]?: [
|
|
228
|
+
type WhereCriteriaSingle<TFields extends Record<string, unknown>> = WhereCriteria_Fields_Single<TFields> & {
|
|
229
|
+
[k in LogicalOperator]?: [WhereCriteria_Fields_Single<TFields>, ...Array<WhereCriteria_Fields_Single<TFields>>];
|
|
163
230
|
};
|
|
164
|
-
type
|
|
231
|
+
type WhereCriteria_Fields_Single<TFields extends Record<string, unknown>> = OptionalObject<(TFields)> | OptionalObject<SQLCondition<TFields>>;
|
|
232
|
+
type WhereCriteriaMulti<T extends TArrSources, TFields extends TFieldsType, F = WhereCriteria_Fields<T, TFields>> = F & {
|
|
233
|
+
[k in LogicalOperator]?: [WhereCriteriaMulti<T, TFields, F>, ...Array<WhereCriteriaMulti<T, TFields, F>>];
|
|
234
|
+
};
|
|
235
|
+
type WhereCriteria<T extends TArrSources, TFields extends TFieldsType> = T['length'] extends 1 ? T[0] extends TVirtualTableSource ? WhereCriteriaMulti<T, TFields> : WhereCriteriaSingle<TFields[GetAliasTableNames<T[0]>]> : WhereCriteriaMulti<T, TFields>;
|
|
236
|
+
type JoinWhereCriteria<Table extends string, TAlias extends string | never> = [
|
|
237
|
+
TAlias
|
|
238
|
+
] extends [never] ? WhereCriteriaMulti<[Table], Record<Table, GetFieldsFromTable<Table>>> : WhereCriteriaMulti<[[Table, TAlias]], Record<TAlias, GetFieldsFromTable<Table>>>;
|
|
239
|
+
type WhereCriteria_Fields<T extends Array<TTableSources>, TFields extends TFieldsType, acc = {}> = T extends readonly [infer HEAD, ...infer Rest] ? HEAD extends string ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<HEAD, TFields[HEAD]> | SQLCondition<TableFieldType<HEAD, TFields[HEAD]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<HEAD, TFields[HEAD]> | SQLCondition<TableFieldType<HEAD, TFields[HEAD]>>)>> : HEAD extends readonly ["__cte__", infer CTE_NAME extends string] ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<CTE_NAME, TFields[CTE_NAME]> | SQLCondition<TableFieldType<CTE_NAME, TFields[CTE_NAME]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<CTE_NAME, TFields[CTE_NAME]> | SQLCondition<TableFieldType<CTE_NAME, TFields[CTE_NAME]>>)>> : HEAD extends [infer R_NAME extends string, infer A_NAME extends string] ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<A_NAME, TFields[R_NAME]> | SQLCondition<TableFieldType<A_NAME, TFields[R_NAME]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<A_NAME, TFields[R_NAME]> | SQLCondition<TableFieldType<A_NAME, TFields[R_NAME]>>)>> : never : acc;
|
|
165
240
|
type OnlyNull<T, R> = T extends null ? R : never;
|
|
166
241
|
type FindColsWithNull<TFields extends TFieldsType> = Prettify<{
|
|
167
242
|
[Table in keyof TFields]: {
|
|
@@ -171,15 +246,16 @@ type FindColsWithNull<TFields extends TFieldsType> = Prettify<{
|
|
|
171
246
|
type NO_START_WITH_WHERE<RAW extends string> = Uppercase<TRIM<RAW>> extends `WHERE ${string}` ? "Please do not start with `WHERE`" : RAW;
|
|
172
247
|
type TRIM<S extends string> = S extends ` ${infer S2}` ? TRIM<S2> : S;
|
|
173
248
|
declare class _fWhere<TSources extends TArrSources, TFields extends TFieldsType> extends _fGroupBy<TSources, TFields> {
|
|
174
|
-
whereNotNull<const TColWithNull extends FindColsWithNull<TFields>>(col: TColWithNull): _fWhere<TSources, TColWithNull extends `${infer table}.${infer col}` ? Omit<TFields, table> & (Record<table, Omit<Pick<TFields, table>[table], col> & Record<col, Exclude<Pick<TFields, table>[table][col], null>>> extends infer T_1 ? { [K_1 in keyof T_1]:
|
|
175
|
-
whereIsNull<const TColWithNull extends FindColsWithNull<TFields>>(col: TColWithNull): _fWhere<TSources, TColWithNull extends `${infer table}.${infer col}` ? Omit<TFields, table> & (Record<table, Omit<Pick<TFields, table>[table], col> & Record<col, null>> extends infer T_1 ? { [K_1 in keyof T_1]:
|
|
249
|
+
whereNotNull<const TColWithNull extends FindColsWithNull<TFields>>(col: TColWithNull): _fWhere<TSources, TColWithNull extends `${infer table}.${infer col}` ? Omit<TFields, table> & (Record<table, Omit<Pick<TFields, table>[table], col> & Record<col, Exclude<Pick<TFields, table>[table][col], null>>> extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never) extends infer T ? { [K in keyof T]: T[K]; } : never : never>;
|
|
250
|
+
whereIsNull<const TColWithNull extends FindColsWithNull<TFields>>(col: TColWithNull): _fWhere<TSources, TColWithNull extends `${infer table}.${infer col}` ? Omit<TFields, table> & (Record<table, Omit<Pick<TFields, table>[table], col> & Record<col, null>> extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never) extends infer T ? { [K in keyof T]: T[K]; } : never : never>;
|
|
251
|
+
where(fn: (ctx: SelectFnContext<TSources, TFields>) => Array<ExprCondPair>): _fGroupBy<TSources, TFields>;
|
|
176
252
|
where<const TCriteria extends WhereCriteria<TSources, TFields>>(criteria: TCriteria): _fGroupBy<TSources, TFields>;
|
|
177
253
|
whereRaw<RAW extends string>(where: NO_START_WITH_WHERE<RAW>): _fGroupBy<TSources, TFields>;
|
|
178
254
|
}
|
|
179
255
|
type GetFieldsFromTable<TDBBase extends TTableSources> = Extract<DATABASE, {
|
|
180
256
|
table: GetRealTableNames<TDBBase>;
|
|
181
257
|
}>["fields"];
|
|
182
|
-
type GetColsBaseTable<TDBBase extends TTableSources> = TDBBase extends string ? keyof GetFieldsFromTable<TDBBase> : keyof GetFieldsFromTable<TDBBase[0]
|
|
258
|
+
type GetColsBaseTable<TDBBase extends TTableSources> = TDBBase extends string ? keyof GetFieldsFromTable<TDBBase> & string : keyof GetFieldsFromTable<TDBBase[0]> & string;
|
|
183
259
|
type GetJoinCols<TDBBase extends TTableSources> = TDBBase extends string ? IterateFields<TDBBase, IsString<GetColsBaseTable<TDBBase>>> : IterateFields<TDBBase[1], IsString<GetColsBaseTable<TDBBase[0]>>>;
|
|
184
260
|
type IterateFields<TDBBase extends TTableSources, F extends string> = `${TDBBase extends string ? TDBBase : TDBBase[1]}.${F}`;
|
|
185
261
|
type Relations<Table extends TTableSources> = Extract<DATABASE, {
|
|
@@ -232,33 +308,200 @@ type GetColsFromTableType<TDBBase extends TTableSources, Type extends string> =
|
|
|
232
308
|
type Loop<Keys extends string, Type extends string> = Keys extends Type ? Type : never;
|
|
233
309
|
type GetJoinColsType<TDBBase extends TTableSources, Type extends string> = IterateFields<TDBBase, IsString<GetColsFromTableType<TDBBase, Type>>>;
|
|
234
310
|
type TFieldsType = Record<string, Record<string, any>>;
|
|
235
|
-
|
|
311
|
+
type MakeNullable<T extends Record<string, any>> = {
|
|
312
|
+
[K in keyof T]: T[K] | null;
|
|
313
|
+
};
|
|
314
|
+
type NullifyTableFields<TFields extends TFieldsType> = {
|
|
315
|
+
[T in keyof TFields]: MakeNullable<TFields[T]>;
|
|
316
|
+
};
|
|
317
|
+
type InferCTEShape<T> = T extends _fRun<any, any, infer TSelectRT> ? TSelectRT : never;
|
|
318
|
+
type CTENames<TSources extends TArrSources> = TSources[number] extends infer S ? S extends readonly ["__cte__", infer Name extends string] ? Name : never : never;
|
|
319
|
+
type GetCTEColumns<TSources extends TArrSources, TFields extends TFieldsType> = CTENames<TSources> extends infer CTE extends string & keyof TFields ? `${CTE}.${string & keyof TFields[CTE]}` : never;
|
|
320
|
+
type IsCTE<T extends string, TSources extends TArrSources> = TSources[number] extends infer S ? S extends readonly ["__cte__", T] ? true : never : never;
|
|
321
|
+
type _fJoinReturn<TSources extends TArrSources, TFields extends TFieldsType, TCTEs extends Record<string, Record<string, any>> = {}> = _fJoin<TSources, TFields, TCTEs>;
|
|
322
|
+
type GetColumnsOfType<TSources extends TArrSources, TFields extends TFieldsType, T> = GetOtherColumns<TSources> extends infer K ? K extends string ? NonNullable<ExtractColumnType<K, TSources, TFields>> extends T ? K : never : never : never;
|
|
323
|
+
type ColEntries<TSources extends TArrSources, TFields extends TFieldsType> = GetOtherColumns<TSources> extends infer K ? K extends string ? [K, ExtractColumnType<K, TSources, TFields>] : never : never;
|
|
324
|
+
type LitValue = string | number | boolean | null;
|
|
325
|
+
type BaseSelectFnContext<_TSources extends TArrSources, _TFields extends TFieldsType> = {
|
|
326
|
+
lit: <T extends LitValue>(v: T) => SQLExpr<LitToType<T>>;
|
|
327
|
+
min: <TTable extends string, TCol extends string & keyof _TFields[TTable]>(col: `${TTable}.${TCol}`) => SQLExpr<_TFields[TTable][TCol]>;
|
|
328
|
+
max: <TTable extends string, TCol extends string & keyof _TFields[TTable]>(col: `${TTable}.${TCol}`) => SQLExpr<_TFields[TTable][TCol]>;
|
|
329
|
+
replace: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>, from: string, to: string) => SQLExpr<string>;
|
|
330
|
+
upper: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
|
|
331
|
+
lower: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
|
|
332
|
+
trim: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
|
|
333
|
+
ltrim: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
|
|
334
|
+
rtrim: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
|
|
335
|
+
cond: (criteria: WhereCriteria<_TSources, _TFields>) => SQLExpr<boolean>;
|
|
336
|
+
coalesce: <T>(...args: [GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>, ...Array<GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>>]) => SQLExpr<T>;
|
|
337
|
+
nullif: <T>(expr1: SQLExpr<T>, expr2: SQLExpr<T>) => SQLExpr<T | null>;
|
|
338
|
+
caseWhen: <T, TElse extends SQLExpr<T> | undefined = undefined>(cases: [{
|
|
339
|
+
when: WhereCriteria<_TSources, _TFields>;
|
|
340
|
+
then: SQLExpr<T>;
|
|
341
|
+
}, ...Array<{
|
|
342
|
+
when: WhereCriteria<_TSources, _TFields>;
|
|
343
|
+
then: SQLExpr<T>;
|
|
344
|
+
}>], elseVal?: TElse) => TElse extends SQLExpr<T> ? SQLExpr<T> : SQLExpr<T | null>;
|
|
345
|
+
};
|
|
346
|
+
type SelectFnContext<_TSources extends TArrSources, _TFields extends TFieldsType> = BaseSelectFnContext<_TSources, _TFields>;
|
|
347
|
+
type ImplicitJoinsFrom<TSources extends TArrSources> = AvailableJoins<TSources> & `_${string}`;
|
|
348
|
+
type AvailableM2MTargets<TSources extends TArrSources> = keyof Relations<ImplicitJoinsFrom<TSources>> extends infer T ? T extends TTables & string ? T extends `_${string}` ? never : T : never : never;
|
|
349
|
+
type GetJunctionTable<TSource extends TTables, TTarget extends TTables> = keyof Relations<TSource> & keyof Relations<TTarget> & `_${string}` & TTables;
|
|
350
|
+
type AvailableRefNames<TSources extends TArrSources> = ImplicitJoinsFrom<TSources> extends `_${infer R}` ? R : never;
|
|
351
|
+
declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType, TCTEs extends Record<string, Record<string, any>> = {}> extends _fWhere<TSources, TFields> {
|
|
352
|
+
join<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
|
|
353
|
+
joinType?: JoinType;
|
|
354
|
+
}): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
|
|
236
355
|
join<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
|
|
237
356
|
table: Table;
|
|
238
357
|
src: TCol1;
|
|
239
358
|
on: find<TJoinCols, TCol1>;
|
|
240
359
|
alias?: TAlias;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
360
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
361
|
+
joinType?: JoinType;
|
|
362
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
363
|
+
join<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
|
|
364
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
365
|
+
joinType?: JoinType;
|
|
366
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
367
|
+
private _joinImpl;
|
|
368
|
+
joinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
|
|
244
369
|
table: Table;
|
|
245
370
|
src: TCol1;
|
|
246
371
|
on: TCol2;
|
|
247
372
|
alias?: TAlias;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
373
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
374
|
+
joinType?: JoinType;
|
|
375
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
376
|
+
joinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
|
|
377
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
378
|
+
joinType?: JoinType;
|
|
379
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
380
|
+
joinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
|
|
251
381
|
table: Table;
|
|
252
382
|
src: TCol1;
|
|
253
383
|
on: TCol2;
|
|
254
384
|
alias?: TAlias;
|
|
255
|
-
|
|
256
|
-
|
|
385
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
386
|
+
joinType?: JoinType;
|
|
387
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
388
|
+
joinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
|
|
389
|
+
where?: JoinWhereCriteria<Table, TAlias>;
|
|
390
|
+
joinType?: JoinType;
|
|
391
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
392
|
+
manyToManyJoin<const TTableInput extends `${AvailableM2MTargets<TSources>}` | `${AvailableM2MTargets<TSources>} ${string}`, TTarget extends AvailableM2MTargets<TSources> = ExtractTableName<TTableInput> & AvailableM2MTargets<TSources>, TAlias extends string | never = ExtractAlias<TTableInput>, const TRefName extends AvailableRefNames<TSources> | undefined = undefined, TJunction extends TTables = TRefName extends string ? `_${TRefName}` & TTables : GetJunctionTable<GetRealTableNames<TSources[number]>, TTarget>>(targetTable: TTableInput, options?: {
|
|
393
|
+
source?: `${GetAliasTableNames<TSources[number]>}.${string}`;
|
|
394
|
+
refName?: TRefName;
|
|
395
|
+
}): _fJoin<[
|
|
396
|
+
...TSources,
|
|
397
|
+
TJunction,
|
|
398
|
+
[TAlias] extends [never] ? TTarget : [TTarget, TAlias]
|
|
399
|
+
], Prettify<TFields & Record<TJunction, GetFieldsFromTable<TJunction>> & Record<[TAlias] extends [never] ? TTarget : TAlias, GetFieldsFromTable<TTarget>>>>;
|
|
400
|
+
innerJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
|
|
401
|
+
table: Table;
|
|
402
|
+
src: TCol1;
|
|
403
|
+
on: find<TJoinCols, TCol1>;
|
|
404
|
+
alias?: TAlias;
|
|
405
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
406
|
+
innerJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
407
|
+
leftJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
|
|
408
|
+
table: Table;
|
|
409
|
+
src: TCol1;
|
|
410
|
+
on: find<TJoinCols, TCol1>;
|
|
411
|
+
alias?: TAlias;
|
|
412
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
413
|
+
leftJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
414
|
+
rightJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
|
|
415
|
+
table: Table;
|
|
416
|
+
src: TCol1;
|
|
417
|
+
on: find<TJoinCols, TCol1>;
|
|
418
|
+
alias?: TAlias;
|
|
419
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
420
|
+
rightJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
421
|
+
fullJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
|
|
422
|
+
table: Table;
|
|
423
|
+
src: TCol1;
|
|
424
|
+
on: find<TJoinCols, TCol1>;
|
|
425
|
+
alias?: TAlias;
|
|
426
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
427
|
+
fullJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
428
|
+
crossJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
429
|
+
innerJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
|
|
430
|
+
table: Table;
|
|
431
|
+
src: TCol1;
|
|
432
|
+
on: TCol2;
|
|
433
|
+
alias?: TAlias;
|
|
434
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
435
|
+
innerJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
436
|
+
innerJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
|
|
437
|
+
table: Table;
|
|
438
|
+
src: TCol1;
|
|
439
|
+
on: TCol2;
|
|
440
|
+
alias?: TAlias;
|
|
441
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
442
|
+
innerJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
443
|
+
leftJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
|
|
444
|
+
table: Table;
|
|
445
|
+
src: TCol1;
|
|
446
|
+
on: TCol2;
|
|
447
|
+
alias?: TAlias;
|
|
448
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
449
|
+
leftJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
450
|
+
leftJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
|
|
451
|
+
table: Table;
|
|
452
|
+
src: TCol1;
|
|
453
|
+
on: TCol2;
|
|
454
|
+
alias?: TAlias;
|
|
455
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
|
|
456
|
+
leftJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
|
|
457
|
+
rightJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
|
|
458
|
+
table: Table;
|
|
459
|
+
src: TCol1;
|
|
460
|
+
on: TCol2;
|
|
461
|
+
alias?: TAlias;
|
|
462
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
463
|
+
rightJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
464
|
+
rightJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
|
|
465
|
+
table: Table;
|
|
466
|
+
src: TCol1;
|
|
467
|
+
on: TCol2;
|
|
468
|
+
alias?: TAlias;
|
|
469
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
470
|
+
rightJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
|
|
471
|
+
fullJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
|
|
472
|
+
table: Table;
|
|
473
|
+
src: TCol1;
|
|
474
|
+
on: TCol2;
|
|
475
|
+
alias?: TAlias;
|
|
476
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
477
|
+
fullJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
|
|
478
|
+
fullJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
|
|
479
|
+
table: Table;
|
|
480
|
+
src: TCol1;
|
|
481
|
+
on: TCol2;
|
|
482
|
+
alias?: TAlias;
|
|
483
|
+
}): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
|
|
484
|
+
fullJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
|
|
485
|
+
crossJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
486
|
+
crossJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
|
|
487
|
+
}
|
|
488
|
+
declare class DbWith<TCTEs extends Record<string, Record<string, any>>> {
|
|
489
|
+
private db;
|
|
490
|
+
private _withs;
|
|
491
|
+
constructor(db: PrismaClient, _withs: Array<{
|
|
492
|
+
name: string;
|
|
493
|
+
sql: string;
|
|
494
|
+
}>);
|
|
495
|
+
with<const TName extends string, TQuery extends _fRun<any, any, any>>(name: TName, query: TQuery): DbWith<TCTEs & Record<TName, InferCTEShape<TQuery>>>;
|
|
496
|
+
from<const TName extends keyof TCTEs & string>(cteName: TName): _fJoinReturn<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>, TCTEs>;
|
|
497
|
+
from<const TDBBase extends TTables, const TAlias extends string = never, TRT extends TArrSources = [TAlias] extends [never] ? [TDBBase] : [[TDBBase, TAlias]]>(baseTable: TDBBase, alias?: TAlias): _fJoinReturn<TRT, Record<GetAliasTableNames<TRT[0]>, GetFieldsFromTable<TDBBase>>, TCTEs>;
|
|
257
498
|
}
|
|
258
|
-
declare const
|
|
499
|
+
declare const extendedPrismaClient: {
|
|
500
|
+
name: string;
|
|
259
501
|
client: {
|
|
260
|
-
$from<const T extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<T>, TAlias extends string | never = ExtractAlias<T>>(table: T):
|
|
502
|
+
$from<const T extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<T>, TAlias extends string | never = ExtractAlias<T>>(table: T): _fJoinReturn<[TAlias] extends [never] ? [Table] : [[Table, TAlias]], Record<GetAliasTableNames<([TAlias] extends [never] ? [Table] : [[Table, TAlias]])[0]>, GetFieldsFromTable<Table>>, {}>;
|
|
503
|
+
$with<const TName extends string, TQuery extends _fRun<any, any, any>>(name: TName, query: TQuery): DbWith<Record<TName, InferCTEShape<TQuery>>>;
|
|
261
504
|
};
|
|
262
505
|
};
|
|
263
506
|
|
|
264
|
-
export { type DBType, type GetUnionOfRelations, type JSONArray, type JSONObject, type JSONPrimitive, type JSONValue, type MapJoinsToKnownTables, type RemoveNullChar, type SafeJoins, type TTableSources, type TTables,
|
|
507
|
+
export { type ColEntries, type DBType, type GetColumnsOfType, type GetUnionOfRelations, type InferCTEShape, type JSONArray, type JSONObject, type JSONPrimitive, type JSONValue, type MapJoinsToKnownTables, type RemoveNullChar, type SafeJoins, type SelectFnContext, type TTableSources, type TTables, type _fJoinReturn, extendedPrismaClient as default };
|