orchid-orm 1.21.6 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +112 -81
- package/dist/index.js +17 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -1,32 +1,35 @@
|
|
|
1
|
-
import { Query, SelectableFromShape, CreateMethodsNames, AddQueryDefaults, RelationConfigBase, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, UpdateData, WhereArg, CreateData, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationQuery,
|
|
1
|
+
import { Query, SelectableFromShape, CreateMethodsNames, AddQueryDefaults, RelationConfigBase, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, UpdateData, WhereArg, CreateData, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationQuery, MapTableScopesOption, ComputedColumnsBase, QueryData, QueryBase, DbTableOptionScopes, DefaultSchemaConfig, DefaultColumnTypes, RelationQueryBase, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery } from 'pqb';
|
|
2
2
|
export * from 'pqb';
|
|
3
|
-
import { ColumnsShapeBase, EmptyObject, MaybeArray,
|
|
3
|
+
import { ColumnsShapeBase, RecordKeyTrue, EmptyObject, MaybeArray, RecordUnknown, CoreQueryScopes, ColumnShapeOutput, ColumnShapeInput, ColumnShapeInputPartial, ColumnSchemaConfig, QueryReturnType } from 'orchid-core';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
interface RelationCommonOptions<Related extends TableClass = TableClass, Scope extends Query = Query> {
|
|
6
6
|
scope?: ScopeFn<Related, Scope>;
|
|
7
7
|
required?: boolean;
|
|
8
|
-
}
|
|
9
|
-
|
|
8
|
+
}
|
|
9
|
+
interface RelationRefsOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string> {
|
|
10
10
|
columns: Column[];
|
|
11
11
|
references: Ref[];
|
|
12
|
-
}
|
|
13
|
-
|
|
12
|
+
}
|
|
13
|
+
interface RelationKeysOptions<PK extends PropertyKey = string, FK extends PropertyKey = string> {
|
|
14
14
|
primaryKey: PK;
|
|
15
15
|
foreignKey: FK;
|
|
16
|
-
}
|
|
16
|
+
}
|
|
17
17
|
type RelationRefsOrKeysOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string, PK extends PropertyKey = string, FK extends PropertyKey = string> = RelationRefsOptions<Column, Ref> | RelationKeysOptions<PK, FK>;
|
|
18
|
-
|
|
18
|
+
interface RelationThroughOptions<Through extends PropertyKey = string, Source extends PropertyKey = string> {
|
|
19
19
|
through: Through;
|
|
20
20
|
source: Source;
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
type RelationHasOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string> = RelationRefsOrKeysOptions<Column, Ref, Column, Ref>;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
interface HasOne extends RelationThunkBase {
|
|
25
25
|
type: 'hasOne';
|
|
26
26
|
options: HasOneOptions;
|
|
27
|
-
}
|
|
27
|
+
}
|
|
28
28
|
type HasOneOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = RelationCommonOptions<Related, Scope> & (RelationHasOptions<keyof Columns, keyof InstanceType<Related>['columns']> | RelationThroughOptions<Through, Source>);
|
|
29
|
-
|
|
29
|
+
type HasOneParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
|
|
30
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
31
|
+
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
|
|
32
|
+
interface HasOneInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Populate extends RecordKeyTrue = T['relations'][Name]['options'] extends RelationRefsOptions ? Record<T['relations'][Name]['options']['references'][number], true> : T['relations'][Name]['options'] extends RelationKeysOptions ? Record<T['relations'][Name]['options']['foreignKey'], true> : never, Q extends Query = T['relations'][Name]['options'] extends RelationThroughOptions ? {
|
|
30
33
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
31
34
|
as: Name;
|
|
32
35
|
defaults: Populate;
|
|
@@ -40,13 +43,13 @@ interface HasOneInfo<T extends Table, Relations extends RelationThunks, Relation
|
|
|
40
43
|
hasWhere: true;
|
|
41
44
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
42
45
|
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
43
|
-
}, NestedCreateQuery extends Query =
|
|
46
|
+
}, NestedCreateQuery extends Query = T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Populate>> extends RelationConfigBase {
|
|
44
47
|
query: Q;
|
|
45
|
-
methodQuery:
|
|
48
|
+
methodQuery: T['relations'][Name]['options']['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
|
|
46
49
|
joinQuery: RelationJoinQuery;
|
|
47
50
|
one: true;
|
|
48
51
|
omitForeignKeyInCreate: never;
|
|
49
|
-
optionalDataForCreate:
|
|
52
|
+
optionalDataForCreate: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
50
53
|
[P in Name]?: RelationToOneDataForCreate<{
|
|
51
54
|
nestedCreateQuery: NestedCreateQuery;
|
|
52
55
|
table: Q;
|
|
@@ -69,39 +72,40 @@ interface HasOneInfo<T extends Table, Relations extends RelationThunks, Relation
|
|
|
69
72
|
} | {
|
|
70
73
|
create: CreateData<NestedCreateQuery>;
|
|
71
74
|
};
|
|
72
|
-
params:
|
|
73
|
-
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
74
|
-
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfig<T, Relations, Relations[Relation['options']['through']], Relation['options']['through']>['params'] : never;
|
|
75
|
+
params: HasOneParams<T, T['relations'][Name]>;
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
interface HasMany extends RelationThunkBase {
|
|
78
79
|
type: 'hasMany';
|
|
79
80
|
options: HasManyOptions;
|
|
80
|
-
}
|
|
81
|
+
}
|
|
81
82
|
type HasManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query, Through extends string = string, Source extends string = string> = HasOneOptions<Columns, Related, Scope, Through, Source>;
|
|
82
|
-
|
|
83
|
+
type HasManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
|
|
84
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
85
|
+
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
|
|
86
|
+
interface HasManyInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Populate extends PropertyKey = T['relations'][Name]['options'] extends RelationRefsOptions ? T['relations'][Name]['options']['references'][number] : T['relations'][Name]['options'] extends RelationKeysOptions ? T['relations'][Name]['options']['foreignKey'] : never, Q extends Query = T['relations'][Name]['options'] extends RelationThroughOptions ? {
|
|
83
87
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
84
88
|
as: Name;
|
|
85
|
-
defaults: Populate
|
|
89
|
+
defaults: Record<Populate, true>;
|
|
86
90
|
hasWhere: true;
|
|
87
91
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
88
92
|
} : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
89
93
|
} : {
|
|
90
94
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
91
95
|
as: Name;
|
|
92
|
-
defaults: Populate
|
|
96
|
+
defaults: Record<Populate, true>;
|
|
93
97
|
hasWhere: true;
|
|
94
98
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
95
99
|
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
96
|
-
}
|
|
100
|
+
}> extends RelationConfigBase {
|
|
97
101
|
query: Q;
|
|
98
102
|
methodQuery: Q;
|
|
99
103
|
joinQuery: RelationJoinQuery;
|
|
100
104
|
one: false;
|
|
101
105
|
omitForeignKeyInCreate: never;
|
|
102
106
|
optionalDataForCreate: {
|
|
103
|
-
[P in Name]?:
|
|
104
|
-
nestedCreateQuery:
|
|
107
|
+
[P in Name]?: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : RelationToManyDataForCreate<{
|
|
108
|
+
nestedCreateQuery: T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Record<Populate, true>>;
|
|
105
109
|
table: Q;
|
|
106
110
|
}>;
|
|
107
111
|
};
|
|
@@ -115,22 +119,25 @@ interface HasManyInfo<T extends Table, Relations extends RelationThunks, Relatio
|
|
|
115
119
|
};
|
|
116
120
|
dataForUpdateOne: {
|
|
117
121
|
set?: MaybeArray<WhereArg<Q>>;
|
|
118
|
-
create?: CreateData<
|
|
122
|
+
create?: CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Record<Populate, true>>>[];
|
|
119
123
|
};
|
|
120
|
-
params:
|
|
121
|
-
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
122
|
-
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfig<T, Relations, Relations[Relation['options']['through']], Relation['options']['through']>['params'] : never;
|
|
124
|
+
params: HasManyParams<T, T['relations'][Name]>;
|
|
123
125
|
}
|
|
124
126
|
|
|
125
|
-
type RelJoin = <T extends Query>(this: T) => T;
|
|
127
|
+
type RelJoin = JoinQueryMethod & (<T extends Query>(this: T) => T);
|
|
126
128
|
|
|
127
|
-
|
|
129
|
+
interface BelongsTo extends RelationThunkBase {
|
|
128
130
|
type: 'belongsTo';
|
|
129
131
|
options: BelongsToOptions;
|
|
130
|
-
}
|
|
132
|
+
}
|
|
131
133
|
type BelongsToOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & RelationRefsOrKeysOptions<keyof Columns, keyof InstanceType<Related>['columns'], keyof InstanceType<Related>['columns'], keyof Columns>;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
type BelongsToFKey<Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? Relation['options']['columns'][number] : Relation['options'] extends RelationKeysOptions ? Relation['options']['foreignKey'] : never;
|
|
135
|
+
type BelongsToParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = {
|
|
136
|
+
[Name in BelongsToFKey<Relation>]: T['columns'][Name]['type'];
|
|
137
|
+
};
|
|
138
|
+
interface BelongsToInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, FK extends string = BelongsToFKey<T['relations'][Name]>, Required = T['relations'][Name]['options']['required'] extends true ? true : false, Q extends Query = {
|
|
139
|
+
[K in keyof TableQuery]: K extends 'meta' ? // Omit is optimal
|
|
140
|
+
Omit<TableQuery['meta'], 'selectable'> & {
|
|
134
141
|
as: Name;
|
|
135
142
|
hasWhere: true;
|
|
136
143
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
@@ -146,15 +153,9 @@ interface BelongsToInfo<T extends Table, Relation extends BelongsTo, Name extend
|
|
|
146
153
|
[L in FK]: T['columns'][L]['inputType'];
|
|
147
154
|
};
|
|
148
155
|
nested: Required extends true ? {
|
|
149
|
-
[Key in Name]:
|
|
150
|
-
nestedCreateQuery: Q;
|
|
151
|
-
table: Q;
|
|
152
|
-
}>;
|
|
156
|
+
[Key in Name]: RelationToOneDataForCreateSameQuery<Q>;
|
|
153
157
|
} : {
|
|
154
|
-
[Key in Name]?:
|
|
155
|
-
nestedCreateQuery: Q;
|
|
156
|
-
table: Q;
|
|
157
|
-
}>;
|
|
158
|
+
[Key in Name]?: RelationToOneDataForCreateSameQuery<Q>;
|
|
158
159
|
};
|
|
159
160
|
};
|
|
160
161
|
optionalDataForCreate: EmptyObject;
|
|
@@ -175,9 +176,7 @@ interface BelongsToInfo<T extends Table, Relation extends BelongsTo, Name extend
|
|
|
175
176
|
create: CreateData<Q> | (() => CreateData<Q>);
|
|
176
177
|
};
|
|
177
178
|
};
|
|
178
|
-
params:
|
|
179
|
-
[Name in FK]: T['columns'][FK]['type'];
|
|
180
|
-
};
|
|
179
|
+
params: BelongsToParams<T, T['relations'][Name]>;
|
|
181
180
|
}
|
|
182
181
|
|
|
183
182
|
declare function transaction<T extends {
|
|
@@ -188,7 +187,7 @@ declare function transaction<T extends {
|
|
|
188
187
|
}, Result>(this: T, options: IsolationLevel | TransactionOptions, fn: () => Promise<Result>): Promise<Result>;
|
|
189
188
|
|
|
190
189
|
type OrchidORM<T extends TableClasses = TableClasses> = {
|
|
191
|
-
[K in keyof T]: DbTable<T[K]
|
|
190
|
+
[K in keyof T]: DbTable<InstanceType<T[K]>>;
|
|
192
191
|
} & {
|
|
193
192
|
$transaction: typeof transaction;
|
|
194
193
|
$adapter: Adapter;
|
|
@@ -262,10 +261,10 @@ declare const orchidORM: <T extends TableClasses>({ log, logger, autoPreparedSta
|
|
|
262
261
|
noPrimaryKey?: NoPrimaryKeyOption | undefined;
|
|
263
262
|
}, tables: T) => OrchidORM<T>;
|
|
264
263
|
|
|
265
|
-
|
|
264
|
+
interface HasAndBelongsToMany extends RelationThunkBase {
|
|
266
265
|
type: 'hasAndBelongsToMany';
|
|
267
266
|
options: HasAndBelongsToManyOptions;
|
|
268
|
-
}
|
|
267
|
+
}
|
|
269
268
|
type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> = RelationCommonOptions<Related, Scope> & ({
|
|
270
269
|
columns: (keyof Columns)[];
|
|
271
270
|
references: string[];
|
|
@@ -281,7 +280,14 @@ type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeB
|
|
|
281
280
|
associationPrimaryKey: string;
|
|
282
281
|
associationForeignKey: keyof InstanceType<Related>['columns'];
|
|
283
282
|
});
|
|
284
|
-
|
|
283
|
+
type HasAndBelongsToManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends {
|
|
284
|
+
columns: string[];
|
|
285
|
+
} ? {
|
|
286
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
287
|
+
} : Relation['options'] extends {
|
|
288
|
+
primaryKey: string;
|
|
289
|
+
} ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
|
|
290
|
+
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Q extends Query = {
|
|
285
291
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
286
292
|
as: Name;
|
|
287
293
|
hasWhere: true;
|
|
@@ -310,13 +316,7 @@ interface HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelong
|
|
|
310
316
|
create?: CreateData<Q>[];
|
|
311
317
|
};
|
|
312
318
|
dataForUpdateOne: EmptyObject;
|
|
313
|
-
params:
|
|
314
|
-
columns: string[];
|
|
315
|
-
} ? {
|
|
316
|
-
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
317
|
-
} : Relation['options'] extends {
|
|
318
|
-
primaryKey: string;
|
|
319
|
-
} ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
|
|
319
|
+
params: HasAndBelongsToManyParams<T, T['relations'][Name]>;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
type RelationToOneDataForCreate<Rel extends {
|
|
@@ -338,6 +338,22 @@ type RelationToOneDataForCreate<Rel extends {
|
|
|
338
338
|
create: CreateData<Rel['nestedCreateQuery']>;
|
|
339
339
|
};
|
|
340
340
|
};
|
|
341
|
+
type RelationToOneDataForCreateSameQuery<Q extends Query> = {
|
|
342
|
+
create: CreateData<Q>;
|
|
343
|
+
connect?: never;
|
|
344
|
+
connectOrCreate?: never;
|
|
345
|
+
} | {
|
|
346
|
+
create?: never;
|
|
347
|
+
connect: WhereArg<Q>;
|
|
348
|
+
connectOrCreate?: never;
|
|
349
|
+
} | {
|
|
350
|
+
create?: never;
|
|
351
|
+
connect?: never;
|
|
352
|
+
connectOrCreate: {
|
|
353
|
+
where: WhereArg<Q>;
|
|
354
|
+
create: CreateData<Q>;
|
|
355
|
+
};
|
|
356
|
+
};
|
|
341
357
|
type RelationToManyDataForCreate<Rel extends {
|
|
342
358
|
nestedCreateQuery: Query;
|
|
343
359
|
table: Query;
|
|
@@ -355,33 +371,44 @@ interface RelationThunkBase {
|
|
|
355
371
|
options: RelationCommonOptions;
|
|
356
372
|
}
|
|
357
373
|
type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
type
|
|
362
|
-
|
|
363
|
-
|
|
374
|
+
interface RelationThunks {
|
|
375
|
+
[K: string]: RelationThunk;
|
|
376
|
+
}
|
|
377
|
+
type RelationScopeOrTable<Relation extends RelationThunkBase> = Relation['options']['scope'] extends (q: Query) => Query ? ReturnType<Relation['options']['scope']> : DbTable<InstanceType<ReturnType<Relation['fn']>>>;
|
|
378
|
+
interface RelationConfigSelf {
|
|
379
|
+
columns: ColumnsShapeBase;
|
|
380
|
+
relations: RelationThunks;
|
|
381
|
+
}
|
|
382
|
+
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation> : Relation extends HasOne ? HasOneParams<T, Relation> : Relation extends HasMany ? HasManyParams<T, Relation> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation> : never;
|
|
383
|
+
type MapRelation<T extends RelationConfigSelf, K extends keyof T['relations'] & string> = RelationQuery<T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : T['relations'][K] extends HasOne ? HasOneInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : T['relations'][K] extends HasMany ? HasManyInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : T['relations'][K] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, K, RelationScopeOrTable<T['relations'][K]>> : never>;
|
|
384
|
+
type MapRelations<T> = T extends {
|
|
385
|
+
columns: ColumnsShapeBase;
|
|
364
386
|
relations: RelationThunks;
|
|
365
387
|
} ? {
|
|
366
|
-
[K in keyof T['relations'] & string]: MapRelation<T,
|
|
388
|
+
[K in keyof T['relations'] & string]: MapRelation<T, K>;
|
|
367
389
|
} : EmptyObject;
|
|
368
390
|
|
|
369
|
-
|
|
391
|
+
interface TableClass<T extends Table = Table> {
|
|
370
392
|
new (): T;
|
|
371
393
|
instance(): T;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
|
|
394
|
+
}
|
|
395
|
+
interface TableClasses {
|
|
396
|
+
[K: string]: TableClass;
|
|
397
|
+
}
|
|
398
|
+
interface RelationQueriesBase {
|
|
399
|
+
[K: string]: RelationQueryBase;
|
|
400
|
+
}
|
|
401
|
+
interface TableToDb<T extends Table, RelationQueries extends RelationQueriesBase> extends Db<T['table'], T['columns'], RelationQueries, T['types'], T['computed'] extends RecordUnknown ? T['columns'] & {
|
|
375
402
|
[K in keyof T['computed']]: ReturnType<T['computed'][K]>['_type'];
|
|
376
|
-
} : T['columns'], MapTableScopesOption<T['scopes'], T['softDelete']>>
|
|
403
|
+
} : T['columns'], MapTableScopesOption<T['scopes'], T['softDelete']>> {
|
|
377
404
|
definedAs: string;
|
|
378
405
|
db: OrchidORM;
|
|
379
406
|
getFilePath(): string;
|
|
380
407
|
name: string;
|
|
381
|
-
}
|
|
382
|
-
type DbTable<
|
|
383
|
-
type ScopeFn<Related extends TableClass, Scope extends Query> = (q: DbTable<Related
|
|
384
|
-
|
|
408
|
+
}
|
|
409
|
+
type DbTable<T extends Table> = TableToDb<T, MapRelations<T>> & MapRelations<T>;
|
|
410
|
+
type ScopeFn<Related extends TableClass, Scope extends Query> = (q: DbTable<InstanceType<Related>>) => Scope;
|
|
411
|
+
interface Table {
|
|
385
412
|
table: string;
|
|
386
413
|
columns: ColumnsShapeBase;
|
|
387
414
|
schema?: string;
|
|
@@ -395,14 +422,16 @@ type Table = {
|
|
|
395
422
|
computed?: ComputedColumnsBase<never>;
|
|
396
423
|
scopes?: CoreQueryScopes;
|
|
397
424
|
readonly softDelete?: true | string;
|
|
425
|
+
}
|
|
426
|
+
type Queryable<T extends Table> = {
|
|
427
|
+
[K in keyof T['columns']]?: T['columns'][K]['queryType'];
|
|
398
428
|
};
|
|
399
|
-
type Queryable<T extends Table> = Partial<ColumnShapeQueryType<T['columns']>>;
|
|
400
429
|
type Selectable<T extends Table> = ColumnShapeOutput<T['columns']>;
|
|
401
430
|
type Insertable<T extends Table> = ColumnShapeInput<T['columns']>;
|
|
402
|
-
type Updateable<T extends Table> =
|
|
431
|
+
type Updateable<T extends Table> = ColumnShapeInputPartial<T['columns']>;
|
|
403
432
|
type BeforeHookMethod = <T extends Table>(cb: QueryBeforeHook) => T;
|
|
404
433
|
type AfterHookMethod = <T extends Table>(cb: QueryAfterHook) => T;
|
|
405
|
-
type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns']
|
|
434
|
+
type AfterSelectableHookMethod = <T extends Table, S extends (keyof T['columns'])[]>(this: T, select: S, cb: AfterHook<S, T['columns']>) => T;
|
|
406
435
|
interface BaseTableInstance<ColumnTypes> {
|
|
407
436
|
table: string;
|
|
408
437
|
columns: ColumnsShapeBase;
|
|
@@ -580,14 +609,16 @@ declare function createBaseTable<SchemaConfig extends ColumnSchemaConfig = Defau
|
|
|
580
609
|
}): BaseTableClass<SchemaConfig, ColumnTypes>;
|
|
581
610
|
|
|
582
611
|
type QueryMethods<T extends Query> = Record<string, (q: T, ...args: any[]) => any>;
|
|
583
|
-
type QueryOne<T extends Query> =
|
|
584
|
-
|
|
612
|
+
type QueryOne<T extends Query> = {
|
|
613
|
+
[K in keyof T]: K extends 'returnType' ? Exclude<QueryReturnType, 'all'> : T[K];
|
|
614
|
+
};
|
|
615
|
+
interface MethodsBase<T extends Query> {
|
|
585
616
|
queryMethods?: QueryMethods<T>;
|
|
586
617
|
queryOneMethods?: QueryMethods<QueryOne<T>>;
|
|
587
618
|
queryWithWhereMethods?: QueryMethods<WhereResult<T>>;
|
|
588
619
|
queryOneWithWhereMethods?: QueryMethods<QueryOne<WhereResult<T>>>;
|
|
589
|
-
methods?:
|
|
590
|
-
}
|
|
620
|
+
methods?: RecordUnknown;
|
|
621
|
+
}
|
|
591
622
|
type MapQueryMethods<T extends Query, BaseQuery extends Query, Methods> = Methods extends QueryMethods<T> ? {
|
|
592
623
|
[K in keyof Methods]: Methods[K] extends (q: any, ...args: infer Args) => infer Result ? <T extends BaseQuery>(this: T, ...args: Args) => Result extends Query ? MergeQuery<T, Result> : Result : never;
|
|
593
624
|
} : EmptyObject;
|
package/dist/index.js
CHANGED
|
@@ -229,7 +229,8 @@ const joinQueryChainingHOF = (reverseJoin, joinQuery) => (joiningQuery, baseQuer
|
|
|
229
229
|
const inner = reverseJoin(query, joiningQuery);
|
|
230
230
|
return joiningQuery.where({
|
|
231
231
|
EXISTS: {
|
|
232
|
-
|
|
232
|
+
first: inner,
|
|
233
|
+
args: orchidCore.emptyArray
|
|
233
234
|
}
|
|
234
235
|
});
|
|
235
236
|
};
|
|
@@ -360,7 +361,10 @@ const nestedInsert$3 = ({ query, primaryKeys }) => {
|
|
|
360
361
|
for (let i = 0, len = items.length; i < len; i++) {
|
|
361
362
|
items[i] = "create" in items[i] ? items[i].create : items[i].connectOrCreate.create;
|
|
362
363
|
}
|
|
363
|
-
created = await pqb._queryCreateMany(
|
|
364
|
+
created = await pqb._queryCreateMany(
|
|
365
|
+
t.select(...primaryKeys),
|
|
366
|
+
items
|
|
367
|
+
);
|
|
364
368
|
} else {
|
|
365
369
|
created = orchidCore.emptyArray;
|
|
366
370
|
}
|
|
@@ -711,10 +715,7 @@ const nestedUpdate$2 = ({ query, primaryKeys, foreignKeys }) => {
|
|
|
711
715
|
ids
|
|
712
716
|
);
|
|
713
717
|
if (params.create || params.disconnect || params.set) {
|
|
714
|
-
await pqb._queryUpdate(
|
|
715
|
-
currentRelationsQuery,
|
|
716
|
-
setNulls
|
|
717
|
-
);
|
|
718
|
+
await pqb._queryUpdate(currentRelationsQuery, setNulls);
|
|
718
719
|
const record = data[0];
|
|
719
720
|
if (params.create) {
|
|
720
721
|
const obj = __spreadValues$5({}, params.create);
|
|
@@ -734,10 +735,7 @@ const nestedUpdate$2 = ({ query, primaryKeys, foreignKeys }) => {
|
|
|
734
735
|
);
|
|
735
736
|
}
|
|
736
737
|
} else if (params.update) {
|
|
737
|
-
await pqb._queryUpdate(
|
|
738
|
-
currentRelationsQuery,
|
|
739
|
-
params.update
|
|
740
|
-
);
|
|
738
|
+
await pqb._queryUpdate(currentRelationsQuery, params.update);
|
|
741
739
|
} else if (params.delete) {
|
|
742
740
|
await pqb._queryDelete(currentRelationsQuery);
|
|
743
741
|
} else if (params.upsert) {
|
|
@@ -958,10 +956,7 @@ const nestedInsert$1 = ({ query, primaryKeys, foreignKeys }) => {
|
|
|
958
956
|
obj[foreignKeys[i2]] = selfData[primaryKeys[i2]];
|
|
959
957
|
}
|
|
960
958
|
queries.push(
|
|
961
|
-
pqb._queryUpdate(
|
|
962
|
-
t.where(item.where),
|
|
963
|
-
obj
|
|
964
|
-
)
|
|
959
|
+
pqb._queryUpdate(t.where(item.where), obj)
|
|
965
960
|
);
|
|
966
961
|
}
|
|
967
962
|
}
|
|
@@ -1516,7 +1511,9 @@ const nestedUpdate = (state) => {
|
|
|
1516
1511
|
);
|
|
1517
1512
|
}
|
|
1518
1513
|
if (params.disconnect) {
|
|
1519
|
-
await pqb._queryDelete(
|
|
1514
|
+
await pqb._queryDelete(
|
|
1515
|
+
queryJoinTable(state, data, params.disconnect)
|
|
1516
|
+
);
|
|
1520
1517
|
}
|
|
1521
1518
|
if (params.delete) {
|
|
1522
1519
|
const j = queryJoinTable(state, data, params.delete);
|
|
@@ -1538,7 +1535,9 @@ const nestedUpdate = (state) => {
|
|
|
1538
1535
|
delete j.q[pqb.toSQLCacheKey];
|
|
1539
1536
|
const idsRows = await pqb._queryRows(
|
|
1540
1537
|
pqb._querySelect(
|
|
1541
|
-
state.relatedTableQuery.where(
|
|
1538
|
+
state.relatedTableQuery.where(
|
|
1539
|
+
conditionsToWhereArg(params.set)
|
|
1540
|
+
),
|
|
1542
1541
|
state.throughPrimaryKeys
|
|
1543
1542
|
)
|
|
1544
1543
|
);
|
|
@@ -1731,7 +1730,8 @@ const makeRelationQuery = (table, relationName, data, q) => {
|
|
|
1731
1730
|
query = pqb._queryWhere(pqb._queryAll(toTable), [
|
|
1732
1731
|
{
|
|
1733
1732
|
EXISTS: {
|
|
1734
|
-
|
|
1733
|
+
first: data.reverseJoin(this, toTable),
|
|
1734
|
+
args: orchidCore.emptyArray
|
|
1735
1735
|
}
|
|
1736
1736
|
}
|
|
1737
1737
|
]);
|