prisma-ts-select 0.0.33 → 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 +1455 -263
- 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 +342 -57
- package/dist/extend/extend.js +813 -161
- 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 +52 -41
- package/built/extend.cjs +0 -565
- package/built/extend.d.cts +0 -451
- package/built/extend.d.ts +0 -451
- package/built/extend.js +0 -563
- package/dist/chunk-G66FOFCO.cjs +0 -195
- package/dist/chunk-GBXPF5FT.js +0 -187
- package/dist/extend/extend.cjs +0 -277
- package/dist/extend/extend.d.cts +0 -222
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,19 +34,33 @@ 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
|
|
36
|
-
type
|
|
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]}.*`;
|
|
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;
|
|
37
41
|
type TTables = DATABASE["table"];
|
|
38
|
-
type
|
|
42
|
+
type TVirtualTableSource = readonly ["__cte__", name: string];
|
|
43
|
+
type TTableSources = DATABASE["table"] | [table: DATABASE["table"], alias: string] | TVirtualTableSource;
|
|
44
|
+
type TArrSources = [TTableSources, ...Array<TTableSources>];
|
|
39
45
|
type ClauseType = Array<string | WhereCriteria<TArrSources, Record<string, any>>>;
|
|
46
|
+
type JoinType = "INNER" | "LEFT" | "LEFT OUTER" | "RIGHT" | "RIGHT OUTER" | "FULL" | "FULL OUTER" | "CROSS";
|
|
40
47
|
type Values = {
|
|
41
|
-
database: TTables;
|
|
42
48
|
selectDistinct?: true;
|
|
43
49
|
selects: Array<string>;
|
|
44
|
-
tables
|
|
45
|
-
table:
|
|
50
|
+
tables: [{
|
|
51
|
+
table: string;
|
|
52
|
+
alias?: string;
|
|
53
|
+
}, ...Array<{
|
|
54
|
+
table: string;
|
|
46
55
|
local: string;
|
|
47
56
|
remote: string;
|
|
57
|
+
alias?: string;
|
|
58
|
+
joinWhere?: ClauseType;
|
|
59
|
+
joinType?: JoinType;
|
|
60
|
+
}>];
|
|
61
|
+
withs?: Array<{
|
|
62
|
+
name: string;
|
|
63
|
+
sql: string;
|
|
48
64
|
}>;
|
|
49
65
|
limit?: number;
|
|
50
66
|
offset?: number;
|
|
@@ -57,9 +73,10 @@ declare class _fRun<TSources extends TArrSources, TFields extends TFieldsType, T
|
|
|
57
73
|
protected db: PrismaClient;
|
|
58
74
|
protected values: Values;
|
|
59
75
|
constructor(db: PrismaClient, values: Values);
|
|
60
|
-
run():
|
|
76
|
+
run(): Promise<TSelectRT[]>;
|
|
61
77
|
getTables(): TSources;
|
|
62
78
|
getFields(): TFields;
|
|
79
|
+
getResultType(): Array<TSelectRT>;
|
|
63
80
|
getSQL(formatted?: boolean): string;
|
|
64
81
|
}
|
|
65
82
|
declare class _fOffset<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fRun<TSources, TFields, TSelectRT> {
|
|
@@ -68,29 +85,49 @@ declare class _fOffset<TSources extends TArrSources, TFields extends TFieldsType
|
|
|
68
85
|
declare class _fLimit<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fRun<TSources, TFields, TSelectRT> {
|
|
69
86
|
limit(limit: number): _fOffset<TSources, TFields, TSelectRT>;
|
|
70
87
|
}
|
|
71
|
-
type OrderBy<Tables extends TArrSources> = Tables extends [infer T extends
|
|
88
|
+
type OrderBy<Tables extends TArrSources, TSelectRT extends Record<string, any> = {}> = Tables extends [infer T extends TTableSources, ...Array<TTableSources>] ? GetColsBaseTable<T> | GetJoinCols<Tables[number]> | (keyof TSelectRT & string) : never;
|
|
72
89
|
declare class _fOrderBy<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fLimit<TSources, TFields, TSelectRT> {
|
|
73
|
-
orderBy(orderBy: Array<`${OrderBy<TSources>}${"" | " DESC" | " ASC"}`>): _fLimit<TSources, TFields, TSelectRT>;
|
|
90
|
+
orderBy(orderBy: Array<`${OrderBy<TSources, TSelectRT>}${"" | " DESC" | " ASC"}`>): _fLimit<TSources, TFields, TSelectRT>;
|
|
74
91
|
}
|
|
75
|
-
type MergeItems<Field extends string, TSources extends TArrSources, TFields extends TFieldsType, IncTName extends boolean = false,
|
|
76
|
-
|
|
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<{
|
|
95
|
+
[K in Field]: TFields[T][F];
|
|
96
|
+
}> : never : never : FindColumnInFields<Field, TFields>;
|
|
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;
|
|
98
|
+
type IterateTables<Tables extends Array<TTableSources>, TFields extends TFieldsType, IncTName extends boolean, acc extends Record<string, any> = {}> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? [IncTName] extends [false] ? IterateTables<Rest, TFields, IncTName, acc & TFields[T extends string ? T : T[1]]> : IterateTables<Rest, TFields, IncTName, acc & IterateTablesFromFields<T, TFields[T extends string ? T : T[1]], IncTName>> : acc;
|
|
77
99
|
type GenName<T extends string, F extends unknown, IncName extends boolean> = F extends string ? [IncName] extends [false] ? F : `${T}.${F}` : never;
|
|
78
|
-
type IterateTablesFromFields<Table extends
|
|
79
|
-
[f in keyof TFields as GenName<Table
|
|
100
|
+
type IterateTablesFromFields<Table extends TTableSources, TFields extends Record<string, string>, IncTName extends boolean> = {
|
|
101
|
+
[f in keyof TFields as GenName<Table extends string ? Table : `Come back to 6`, f, IncTName>]: TFields[f];
|
|
80
102
|
};
|
|
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;
|
|
104
|
+
type GetColumnNamesFromTable<TDBBase extends TTableSources> = TDBBase extends TVirtualTableSource ? never : keyof GetFieldsFromTable<GetRealTableNames<TDBBase>>;
|
|
105
|
+
type GetColumnsFromTables<Tables extends Array<TTableSources>> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? GetColumnNamesFromTable<T> | GetColumnsFromTables<Rest> : never;
|
|
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;
|
|
107
|
+
type IsColumnUnique<Col extends string, Tables extends TArrSources> = Col extends GetDuplicateColumnsPairwise<Tables> ? false : true;
|
|
108
|
+
type GetOtherColumns<Tables extends TArrSources> = Exclude<GetColumnsFromTables<Tables>, GetDuplicateColumnsPairwise<Tables>> | GetJoinCols<Tables[number]>;
|
|
81
109
|
declare class _fSelect<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fOrderBy<TSources, TFields, TSelectRT> {
|
|
82
|
-
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>>>>;
|
|
83
114
|
}
|
|
84
|
-
type CountKeys<T extends Array<
|
|
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;
|
|
85
117
|
declare class _fSelectDistinct<TSources extends TArrSources, TFields extends TFieldsType, TSelectRT extends Record<string, any> = {}> extends _fSelect<TSources, TFields, TSelectRT> {
|
|
86
118
|
selectDistinct(): _fSelect<TSources, TFields, TSelectRT>;
|
|
87
|
-
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>;
|
|
88
121
|
}
|
|
89
|
-
declare class _fHaving<TSources extends TArrSources, TFields extends TFieldsType> extends
|
|
90
|
-
|
|
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>;
|
|
91
126
|
}
|
|
92
|
-
declare class _fGroupBy<TSources extends TArrSources, TFields extends TFieldsType> extends
|
|
93
|
-
|
|
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>;
|
|
94
131
|
}
|
|
95
132
|
type OptionalRecord<K extends PropertyKey, V> = {
|
|
96
133
|
[key in K]?: V;
|
|
@@ -98,17 +135,57 @@ type OptionalRecord<K extends PropertyKey, V> = {
|
|
|
98
135
|
type OptionalObject<K extends Record<PropertyKey, unknown>> = {
|
|
99
136
|
[key in keyof K]?: K[key];
|
|
100
137
|
};
|
|
101
|
-
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, {
|
|
102
176
|
op: 'IN' | 'NOT IN';
|
|
103
177
|
values: Array<keyType>;
|
|
104
178
|
}> | OptionalRecord<key, {
|
|
105
179
|
op: 'BETWEEN';
|
|
106
180
|
values: [keyType, keyType];
|
|
107
181
|
}> | OptionalRecord<key, {
|
|
108
|
-
op:
|
|
182
|
+
op: COND_NUMERIC_OP;
|
|
109
183
|
value: keyType;
|
|
110
|
-
}
|
|
111
|
-
|
|
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, {
|
|
112
189
|
op: 'IN' | 'NOT IN';
|
|
113
190
|
values: Array<string>;
|
|
114
191
|
}> | OptionalRecord<key, {
|
|
@@ -117,17 +194,23 @@ type COND_STRING<key extends PropertyKey> = OptionalRecord<key, string> | Option
|
|
|
117
194
|
}> | OptionalRecord<key, {
|
|
118
195
|
op: '!=';
|
|
119
196
|
value: string;
|
|
120
|
-
}
|
|
121
|
-
|
|
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, {
|
|
122
202
|
op: 'IN' | 'NOT IN';
|
|
123
203
|
values: Array<keyType>;
|
|
124
204
|
}> | OptionalRecord<key, {
|
|
125
205
|
op: 'BETWEEN';
|
|
126
206
|
values: [keyType, keyType];
|
|
127
207
|
}> | OptionalRecord<key, {
|
|
128
|
-
op:
|
|
208
|
+
op: COND_NUMERIC_OP;
|
|
129
209
|
value: keyType;
|
|
130
|
-
}
|
|
210
|
+
}> | OptionalRecord<key, NonEmptyArray<{
|
|
211
|
+
op: COND_NUMERIC_OP;
|
|
212
|
+
value: keyType;
|
|
213
|
+
}>>;
|
|
131
214
|
type COND_BOOLEAN<key extends PropertyKey, keyType> = OptionalRecord<key, keyType> | OptionalRecord<key, {
|
|
132
215
|
op: '!=';
|
|
133
216
|
value: keyType;
|
|
@@ -142,10 +225,18 @@ type TableFieldType<Table extends string, Fields extends Record<string, any>> =
|
|
|
142
225
|
[f in keyof Fields as CombineToString<f, Table>]: Fields[f];
|
|
143
226
|
};
|
|
144
227
|
type LogicalOperator = '$AND' | '$OR' | '$NOT' | "$NOR";
|
|
145
|
-
type
|
|
146
|
-
[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>>];
|
|
230
|
+
};
|
|
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>>];
|
|
147
234
|
};
|
|
148
|
-
type
|
|
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;
|
|
149
240
|
type OnlyNull<T, R> = T extends null ? R : never;
|
|
150
241
|
type FindColsWithNull<TFields extends TFieldsType> = Prettify<{
|
|
151
242
|
[Table in keyof TFields]: {
|
|
@@ -155,23 +246,30 @@ type FindColsWithNull<TFields extends TFieldsType> = Prettify<{
|
|
|
155
246
|
type NO_START_WITH_WHERE<RAW extends string> = Uppercase<TRIM<RAW>> extends `WHERE ${string}` ? "Please do not start with `WHERE`" : RAW;
|
|
156
247
|
type TRIM<S extends string> = S extends ` ${infer S2}` ? TRIM<S2> : S;
|
|
157
248
|
declare class _fWhere<TSources extends TArrSources, TFields extends TFieldsType> extends _fGroupBy<TSources, TFields> {
|
|
158
|
-
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]:
|
|
159
|
-
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>;
|
|
160
252
|
where<const TCriteria extends WhereCriteria<TSources, TFields>>(criteria: TCriteria): _fGroupBy<TSources, TFields>;
|
|
161
253
|
whereRaw<RAW extends string>(where: NO_START_WITH_WHERE<RAW>): _fGroupBy<TSources, TFields>;
|
|
162
254
|
}
|
|
163
|
-
type GetFieldsFromTable<TDBBase extends
|
|
164
|
-
table: TDBBase
|
|
255
|
+
type GetFieldsFromTable<TDBBase extends TTableSources> = Extract<DATABASE, {
|
|
256
|
+
table: GetRealTableNames<TDBBase>;
|
|
165
257
|
}>["fields"];
|
|
166
|
-
type GetColsBaseTable<TDBBase extends
|
|
167
|
-
type GetJoinCols<TDBBase extends
|
|
168
|
-
type IterateFields<TDBBase extends
|
|
169
|
-
type Relations<Table extends
|
|
170
|
-
table: Table
|
|
258
|
+
type GetColsBaseTable<TDBBase extends TTableSources> = TDBBase extends string ? keyof GetFieldsFromTable<TDBBase> & string : keyof GetFieldsFromTable<TDBBase[0]> & string;
|
|
259
|
+
type GetJoinCols<TDBBase extends TTableSources> = TDBBase extends string ? IterateFields<TDBBase, IsString<GetColsBaseTable<TDBBase>>> : IterateFields<TDBBase[1], IsString<GetColsBaseTable<TDBBase[0]>>>;
|
|
260
|
+
type IterateFields<TDBBase extends TTableSources, F extends string> = `${TDBBase extends string ? TDBBase : TDBBase[1]}.${F}`;
|
|
261
|
+
type Relations<Table extends TTableSources> = Extract<DATABASE, {
|
|
262
|
+
table: GetRealTableNames<Table>;
|
|
171
263
|
}>["relations"];
|
|
172
|
-
type AvailableJoins<Tables extends Array<
|
|
173
|
-
type
|
|
174
|
-
|
|
264
|
+
type AvailableJoins<Tables extends Array<TTableSources>, acc extends TTableSources = never> = Tables extends [infer T extends TTableSources, ...infer Rest extends Array<TTableSources>] ? AvailableJoins<Rest, acc | keyof Relations<T>> : acc;
|
|
265
|
+
type GetRealTableNames<Tables extends TTableSources> = Tables extends any ? Tables extends string ? Tables : Tables[0] : never;
|
|
266
|
+
type GetAliasTableNames<Tables extends TTableSources> = Tables extends any ? Tables extends string ? Tables : Tables[1] : never;
|
|
267
|
+
type SafeJoins<TNewJoin extends TTables, TJoins extends TArrSources, TRelations = Relations<TNewJoin>> = {
|
|
268
|
+
[k in keyof TRelations as Filter<k, GetRealTableNames<TJoins[number]>>]: TRelations[k];
|
|
269
|
+
};
|
|
270
|
+
type ToUnion<TJoins extends TArrSources> = TJoins[number];
|
|
271
|
+
type MapJoinsToKnownTables<TSafeJoins extends Record<string, unknown>, TJoins extends TArrSources> = {
|
|
272
|
+
[k in ToUnion<TJoins> as GetAliasTableNames<k>]: TSafeJoins[GetRealTableNames<k>];
|
|
175
273
|
};
|
|
176
274
|
type CombineToString<A extends unknown, T extends unknown> = A extends string ? T extends string ? `${T}.${A}` : never : never;
|
|
177
275
|
type GetUnionOfRelations<TSafe> = {
|
|
@@ -183,7 +281,7 @@ type GetUnionOfRelations<TSafe> = {
|
|
|
183
281
|
}[keyof TSafe[T]];
|
|
184
282
|
}[keyof TSafe];
|
|
185
283
|
type ValidStringTuple<T> = T extends [string, string] ? T : never;
|
|
186
|
-
type find<
|
|
284
|
+
type find<TJoinCols extends [string, string], toFind extends string> = TJoinCols extends [infer col1, infer col2] ? col1 extends toFind ? col2 : never : never;
|
|
187
285
|
type RemoveNullable<T extends string> = T extends `?${infer R}` ? R : T;
|
|
188
286
|
type SwapKeysAndValues<T extends Record<string, any>> = {
|
|
189
287
|
[K in keyof T as RemoveNullable<T[K]>]: K;
|
|
@@ -191,6 +289,8 @@ type SwapKeysAndValues<T extends Record<string, any>> = {
|
|
|
191
289
|
type Prettify<T> = {
|
|
192
290
|
[K in keyof T]: T[K];
|
|
193
291
|
} & {};
|
|
292
|
+
type ExtractTableName<T extends string> = T extends `${infer Table} ${string}` ? Table : T;
|
|
293
|
+
type ExtractAlias<T extends string> = T extends `${string} ${infer Alias}` ? Alias : never;
|
|
194
294
|
type FieldsByTableByType = Prettify<{
|
|
195
295
|
[Table in TTables]: SwapKeysAndValues<_db[Table]["fields"]>;
|
|
196
296
|
}>;
|
|
@@ -202,21 +302,206 @@ type FieldsByTypeByTable = Prettify<{
|
|
|
202
302
|
[Table in keyof FieldsByTableByType as [FieldsByTableByType[Table][Filter<keyof FieldsByTableByType[Table], Type>]] extends [never] ? never : Table]: FieldsByTableByType[Table][Filter<keyof FieldsByTableByType[Table], Type>];
|
|
203
303
|
};
|
|
204
304
|
}>;
|
|
205
|
-
type GetColumnType<Table extends
|
|
206
|
-
type GetJoinOnColsType<Type extends string, TSources extends
|
|
207
|
-
type GetColsFromTableType<TDBBase extends
|
|
305
|
+
type GetColumnType<Table extends TTableSources, Col1 extends keyof _db[Table extends string ? Table : `Come back to 8`]["fields"]> = RemoveNullChar<IsString<_db[Table extends string ? Table : `Come back to 9`]["fields"][Col1]>>;
|
|
306
|
+
type GetJoinOnColsType<Type extends string, TSources extends TArrSources> = GetJoinColsType<TSources[number], Type>;
|
|
307
|
+
type GetColsFromTableType<TDBBase extends TTableSources, Type extends string> = FieldsByTypeByTable[Loop<keyof FieldsByTypeByTable, Type>][GetRealTableNames<TDBBase>];
|
|
208
308
|
type Loop<Keys extends string, Type extends string> = Keys extends Type ? Type : never;
|
|
209
|
-
type GetJoinColsType<TDBBase extends
|
|
309
|
+
type GetJoinColsType<TDBBase extends TTableSources, Type extends string> = IterateFields<TDBBase, IsString<GetColsFromTableType<TDBBase, Type>>>;
|
|
210
310
|
type TFieldsType = Record<string, Record<string, any>>;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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>;
|
|
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: {
|
|
356
|
+
table: Table;
|
|
357
|
+
src: TCol1;
|
|
358
|
+
on: find<TJoinCols, TCol1>;
|
|
359
|
+
alias?: TAlias;
|
|
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: {
|
|
369
|
+
table: Table;
|
|
370
|
+
src: TCol1;
|
|
371
|
+
on: TCol2;
|
|
372
|
+
alias?: TAlias;
|
|
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: {
|
|
381
|
+
table: Table;
|
|
382
|
+
src: TCol1;
|
|
383
|
+
on: TCol2;
|
|
384
|
+
alias?: TAlias;
|
|
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>;
|
|
215
498
|
}
|
|
216
|
-
declare const
|
|
499
|
+
declare const extendedPrismaClient: {
|
|
500
|
+
name: string;
|
|
217
501
|
client: {
|
|
218
|
-
$from<T extends TTables
|
|
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>>>;
|
|
219
504
|
};
|
|
220
505
|
};
|
|
221
506
|
|
|
222
|
-
export { type DBType, type GetUnionOfRelations, type JSONArray, type JSONObject, type JSONPrimitive, type JSONValue, type RemoveNullChar, type SafeJoins, 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 };
|