orchid-orm 1.31.1 → 1.31.3
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 +110 -120
- package/dist/index.js +15 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Query, SelectableFromShape, CreateMethodsNames,
|
|
1
|
+
import { Query, SelectableFromShape, CreateMethodsNames, CreateData, AddQueryDefaults, RelationConfigBase, UpdateData, WhereArg, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArg, FromResult, AdapterOptions, DbSharedOptions, RelationJoinQuery, RelationQuery, RelationsBase, ShapeColumnPrimaryKeys, ShapeUniqueColumns, TableDataItemsUniqueColumns, TableDataItemsUniqueColumnTuples, UniqueConstraints, TableDataItemsUniqueConstraints, ComputedColumnsFromOptions, MapTableScopesOption, TableDataItem, ComputedOptionsFactory, QueryData, QueryBase, TableDataFn, DbTableOptionScopes, SqlMethod, DefaultSchemaConfig, DefaultColumnTypes, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery } from 'pqb';
|
|
2
2
|
export * from 'pqb';
|
|
3
|
-
import { ColumnsShapeBase, EmptyObject, MaybeArray,
|
|
3
|
+
import { ColumnsShapeBase, EmptyObject, MaybeArray, RecordUnknown, Simplify, ColumnShapeOutput, ColumnShapeInput, ColumnShapeInputPartial, CoreQueryScopes, ColumnSchemaConfig, QueryColumns, QueryReturnType } from 'orchid-core';
|
|
4
4
|
export * from 'orchid-core';
|
|
5
5
|
|
|
6
6
|
interface RelationCommonOptions<Related extends TableClass = TableClass, Scope extends Query = Query> {
|
|
@@ -11,48 +11,41 @@ interface RelationRefsOptions<Column extends PropertyKey = string, Ref extends P
|
|
|
11
11
|
columns: Column[];
|
|
12
12
|
references: Ref[];
|
|
13
13
|
}
|
|
14
|
-
interface RelationKeysOptions<PK extends PropertyKey = string, FK extends PropertyKey = string> {
|
|
15
|
-
primaryKey: PK;
|
|
16
|
-
foreignKey: FK;
|
|
17
|
-
}
|
|
18
|
-
type RelationRefsOrKeysOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string, PK extends PropertyKey = string, FK extends PropertyKey = string> = RelationRefsOptions<Column, Ref> | RelationKeysOptions<PK, FK>;
|
|
19
14
|
interface RelationThroughOptions<Through extends PropertyKey = string, Source extends PropertyKey = string> {
|
|
20
15
|
through: Through;
|
|
21
16
|
source: Source;
|
|
22
17
|
}
|
|
23
|
-
type RelationHasOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string> = RelationRefsOrKeysOptions<Column, Ref, Column, Ref>;
|
|
24
18
|
|
|
25
19
|
interface HasOne extends RelationThunkBase {
|
|
26
20
|
type: 'hasOne';
|
|
27
21
|
options: HasOneOptions;
|
|
28
22
|
}
|
|
29
|
-
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> & (
|
|
23
|
+
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> & (RelationRefsOptions<keyof Columns, keyof InstanceType<Related>['columns']['shape']> | RelationThroughOptions<Through, Source>);
|
|
30
24
|
type HasOneParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
|
|
31
25
|
[Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
|
|
32
|
-
} : Relation['options'] extends
|
|
33
|
-
|
|
26
|
+
} : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
|
|
27
|
+
type HasOnePopulate<T extends RelationConfigSelf, Name extends string> = T['relations'][Name]['options'] extends RelationRefsOptions ? Record<T['relations'][Name]['options']['references'][number], true> : never;
|
|
28
|
+
type HasOneQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationThroughOptions ? {
|
|
34
29
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
35
30
|
as: Name;
|
|
36
|
-
defaults:
|
|
31
|
+
defaults: HasOnePopulate<T, Name>;
|
|
37
32
|
hasWhere: true;
|
|
38
33
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
39
34
|
} : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
40
35
|
} : {
|
|
41
36
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
42
37
|
as: Name;
|
|
43
|
-
defaults:
|
|
38
|
+
defaults: HasOnePopulate<T, Name>;
|
|
44
39
|
hasWhere: true;
|
|
45
40
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
46
41
|
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
47
|
-
}
|
|
42
|
+
};
|
|
43
|
+
interface HasOneInfo<T extends RelationConfigSelf, Name extends string, Q extends Query, CD = CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, HasOnePopulate<T, Name>>>> extends RelationConfigBase {
|
|
48
44
|
query: Q;
|
|
49
|
-
methodQuery: T['relations'][Name]['options']['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
|
|
50
|
-
joinQuery: RelationJoinQuery;
|
|
51
|
-
one: true;
|
|
52
45
|
omitForeignKeyInCreate: never;
|
|
53
46
|
optionalDataForCreate: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
54
47
|
[P in Name]?: RelationToOneDataForCreate<{
|
|
55
|
-
nestedCreateQuery:
|
|
48
|
+
nestedCreateQuery: CD;
|
|
56
49
|
table: Q;
|
|
57
50
|
}>;
|
|
58
51
|
};
|
|
@@ -65,51 +58,39 @@ interface HasOneInfo<T extends RelationConfigSelf, Name extends keyof T['relatio
|
|
|
65
58
|
update: UpdateData<Q>;
|
|
66
59
|
};
|
|
67
60
|
dataForUpdateOne: {
|
|
61
|
+
disconnect: boolean;
|
|
62
|
+
} | {
|
|
63
|
+
delete: boolean;
|
|
64
|
+
} | {
|
|
65
|
+
update: UpdateData<Q>;
|
|
66
|
+
} | {
|
|
68
67
|
set: WhereArg<Q>;
|
|
69
68
|
} | {
|
|
70
69
|
upsert: {
|
|
71
70
|
update: UpdateData<Q>;
|
|
72
|
-
create:
|
|
71
|
+
create: CD | (() => CD);
|
|
73
72
|
};
|
|
74
73
|
} | {
|
|
75
|
-
create:
|
|
74
|
+
create: CD;
|
|
76
75
|
};
|
|
77
|
-
params: HasOneParams<T, T['relations'][Name]>;
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
interface HasMany extends RelationThunkBase {
|
|
81
79
|
type: 'hasMany';
|
|
82
|
-
options:
|
|
80
|
+
options: HasOneOptions;
|
|
83
81
|
}
|
|
84
|
-
|
|
85
|
-
type HasManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? {
|
|
86
|
-
[Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
|
|
87
|
-
} : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['primaryKey'], T['columns']['shape'][Relation['options']['primaryKey']]['type']> : Relation['options'] extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Relation['options']['through']]> : never;
|
|
88
|
-
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 ? {
|
|
89
|
-
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
90
|
-
as: Name;
|
|
91
|
-
defaults: Record<Populate, true>;
|
|
92
|
-
hasWhere: true;
|
|
93
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
94
|
-
} : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
95
|
-
} : {
|
|
96
|
-
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
97
|
-
as: Name;
|
|
98
|
-
defaults: Record<Populate, true>;
|
|
99
|
-
hasWhere: true;
|
|
100
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
101
|
-
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
102
|
-
}> {
|
|
82
|
+
interface HasManyInfo<T extends RelationConfigSelf, Name extends string, Q extends Query> extends RelationConfigBase {
|
|
103
83
|
query: Q;
|
|
104
|
-
methodQuery: Q;
|
|
105
|
-
joinQuery: RelationJoinQuery;
|
|
106
|
-
one: false;
|
|
107
84
|
omitForeignKeyInCreate: never;
|
|
108
85
|
optionalDataForCreate: {
|
|
109
|
-
[P in Name]?: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject :
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
86
|
+
[P in Name]?: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
87
|
+
create?: CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, HasOnePopulate<T, Name>>>[];
|
|
88
|
+
connect?: WhereArg<Q>[];
|
|
89
|
+
connectOrCreate?: {
|
|
90
|
+
where: WhereArg<Q>;
|
|
91
|
+
create: CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, HasOnePopulate<T, Name>>>;
|
|
92
|
+
}[];
|
|
93
|
+
};
|
|
113
94
|
};
|
|
114
95
|
dataForCreate: never;
|
|
115
96
|
dataForUpdate: {
|
|
@@ -121,35 +102,41 @@ interface HasManyInfo<T extends RelationConfigSelf, Name extends keyof T['relati
|
|
|
121
102
|
};
|
|
122
103
|
};
|
|
123
104
|
dataForUpdateOne: {
|
|
105
|
+
disconnect?: MaybeArray<WhereArg<Q>>;
|
|
106
|
+
delete?: MaybeArray<WhereArg<Q>>;
|
|
107
|
+
update?: {
|
|
108
|
+
where: MaybeArray<WhereArg<Q>>;
|
|
109
|
+
data: UpdateData<Q>;
|
|
110
|
+
};
|
|
124
111
|
set?: MaybeArray<WhereArg<Q>>;
|
|
125
|
-
create?: CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q,
|
|
112
|
+
create?: CreateData<T['relations'][Name]['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, HasOnePopulate<T, Name>>>[];
|
|
126
113
|
};
|
|
127
|
-
params: HasManyParams<T, T['relations'][Name]>;
|
|
128
114
|
}
|
|
129
115
|
|
|
130
|
-
|
|
116
|
+
interface RelJoin extends JoinQueryMethod {
|
|
117
|
+
<T extends Query>(this: T): T;
|
|
118
|
+
}
|
|
131
119
|
|
|
132
120
|
interface BelongsTo extends RelationThunkBase {
|
|
133
121
|
type: 'belongsTo';
|
|
134
122
|
options: BelongsToOptions;
|
|
135
123
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
type
|
|
124
|
+
interface BelongsToOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> extends RelationCommonOptions<Related, Scope>, RelationRefsOptions<keyof Columns, keyof InstanceType<Related>['columns']['shape']> {
|
|
125
|
+
}
|
|
126
|
+
type BelongsToFKey<Relation extends RelationThunkBase> = Relation['options'] extends RelationRefsOptions ? Relation['options']['columns'][number] : never;
|
|
127
|
+
type BelongsToParams<T extends RelationConfigSelf, Relation extends BelongsTo> = {
|
|
139
128
|
[Name in BelongsToFKey<Relation>]: T['columns']['shape'][Name]['type'];
|
|
140
129
|
};
|
|
141
|
-
|
|
142
|
-
[P in keyof
|
|
143
|
-
Omit<
|
|
130
|
+
type BelongsToQuery<T extends Query, Name extends string> = {
|
|
131
|
+
[P in keyof T]: P extends 'meta' ? // Omit is optimal
|
|
132
|
+
Omit<T['meta'], 'selectable'> & {
|
|
144
133
|
as: Name;
|
|
145
134
|
hasWhere: true;
|
|
146
|
-
selectable: SelectableFromShape<
|
|
147
|
-
} : P extends 'join' ? RelJoin : P extends CreateMethodsNames | DeleteMethodsNames ? never :
|
|
148
|
-
}
|
|
135
|
+
selectable: SelectableFromShape<T['shape'], Name>;
|
|
136
|
+
} : P extends 'join' ? RelJoin : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P];
|
|
137
|
+
};
|
|
138
|
+
interface BelongsToInfo<T extends RelationConfigSelf, Name extends string, FK extends string, Required, Q extends Query> extends RelationConfigBase {
|
|
149
139
|
query: Q;
|
|
150
|
-
methodQuery: Required extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
|
|
151
|
-
joinQuery: RelationJoinQuery;
|
|
152
|
-
one: true;
|
|
153
140
|
omitForeignKeyInCreate: FK;
|
|
154
141
|
dataForCreate: {
|
|
155
142
|
columns: {
|
|
@@ -174,12 +161,21 @@ interface BelongsToInfo<T extends RelationConfigSelf, Name extends keyof T['rela
|
|
|
174
161
|
create: CreateData<Q>;
|
|
175
162
|
};
|
|
176
163
|
dataForUpdateOne: {
|
|
164
|
+
disconnect: boolean;
|
|
165
|
+
} | {
|
|
166
|
+
set: WhereArg<Q>;
|
|
167
|
+
} | {
|
|
168
|
+
delete: boolean;
|
|
169
|
+
} | {
|
|
170
|
+
update: UpdateData<Q>;
|
|
171
|
+
} | {
|
|
172
|
+
create: CreateData<Q>;
|
|
173
|
+
} | {
|
|
177
174
|
upsert: {
|
|
178
175
|
update: UpdateData<Q>;
|
|
179
176
|
create: CreateData<Q> | (() => CreateData<Q>);
|
|
180
177
|
};
|
|
181
178
|
};
|
|
182
|
-
params: BelongsToParams<T, T['relations'][Name]>;
|
|
183
179
|
}
|
|
184
180
|
|
|
185
181
|
declare function transaction<T extends {
|
|
@@ -272,7 +268,9 @@ interface HasAndBelongsToMany extends RelationThunkBase {
|
|
|
272
268
|
type: 'hasAndBelongsToMany';
|
|
273
269
|
options: HasAndBelongsToManyOptions;
|
|
274
270
|
}
|
|
275
|
-
|
|
271
|
+
interface HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeBase, Related extends TableClass = TableClass, Scope extends Query = Query> {
|
|
272
|
+
scope?: ScopeFn<Related, Scope>;
|
|
273
|
+
required?: boolean;
|
|
276
274
|
columns: (keyof Columns)[];
|
|
277
275
|
references: string[];
|
|
278
276
|
through: {
|
|
@@ -280,37 +278,30 @@ type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeB
|
|
|
280
278
|
columns: string[];
|
|
281
279
|
references: (keyof InstanceType<Related>['columns']['shape'])[];
|
|
282
280
|
};
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
foreignKey: string;
|
|
286
|
-
joinTable: string;
|
|
287
|
-
associationPrimaryKey: string;
|
|
288
|
-
associationForeignKey: keyof InstanceType<Related>['columns']['shape'];
|
|
289
|
-
});
|
|
290
|
-
type HasAndBelongsToManyParams<T extends RelationConfigSelf, Relation extends RelationThunkBase> = Relation['options'] extends {
|
|
291
|
-
columns: string[];
|
|
292
|
-
} ? {
|
|
281
|
+
}
|
|
282
|
+
type HasAndBelongsToManyParams<T extends RelationConfigSelf, Relation extends HasAndBelongsToMany> = {
|
|
293
283
|
[Name in Relation['options']['columns'][number]]: T['columns']['shape'][Name]['type'];
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
} ? Record<Relation['options']['primaryKey'], T['columns']['shape'][Relation['options']['primaryKey']]['type']> : never;
|
|
297
|
-
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends keyof T['relations'] & string, TableQuery extends Query, Q extends Query = {
|
|
284
|
+
};
|
|
285
|
+
type HasAndBelongsToManyQuery<Name extends string, TableQuery extends Query> = {
|
|
298
286
|
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
299
287
|
as: Name;
|
|
300
288
|
hasWhere: true;
|
|
301
289
|
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
302
290
|
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
303
|
-
}
|
|
291
|
+
};
|
|
292
|
+
interface HasAndBelongsToManyInfo<Name extends string, Q extends Query> extends RelationConfigBase {
|
|
304
293
|
query: Q;
|
|
305
|
-
methodQuery: Q;
|
|
306
294
|
joinQuery: RelationJoinQuery;
|
|
307
|
-
one: false;
|
|
308
295
|
omitForeignKeyInCreate: never;
|
|
309
296
|
optionalDataForCreate: {
|
|
310
|
-
[P in Name]?:
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
297
|
+
[P in Name]?: {
|
|
298
|
+
create?: CreateData<Q>[];
|
|
299
|
+
connect?: WhereArg<Q>[];
|
|
300
|
+
connectOrCreate?: {
|
|
301
|
+
where: WhereArg<Q>;
|
|
302
|
+
create: CreateData<Q>;
|
|
303
|
+
}[];
|
|
304
|
+
};
|
|
314
305
|
};
|
|
315
306
|
dataForCreate: never;
|
|
316
307
|
dataForUpdate: {
|
|
@@ -323,15 +314,23 @@ interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends key
|
|
|
323
314
|
};
|
|
324
315
|
create?: CreateData<Q>[];
|
|
325
316
|
};
|
|
326
|
-
dataForUpdateOne:
|
|
327
|
-
|
|
317
|
+
dataForUpdateOne: {
|
|
318
|
+
disconnect?: MaybeArray<WhereArg<Q>>;
|
|
319
|
+
set?: MaybeArray<WhereArg<Q>>;
|
|
320
|
+
delete?: MaybeArray<WhereArg<Q>>;
|
|
321
|
+
update?: {
|
|
322
|
+
where: MaybeArray<WhereArg<Q>>;
|
|
323
|
+
data: UpdateData<Q>;
|
|
324
|
+
};
|
|
325
|
+
create?: CreateData<Q>[];
|
|
326
|
+
};
|
|
328
327
|
}
|
|
329
328
|
|
|
330
329
|
type RelationToOneDataForCreate<Rel extends {
|
|
331
|
-
nestedCreateQuery:
|
|
330
|
+
nestedCreateQuery: unknown;
|
|
332
331
|
table: Query;
|
|
333
332
|
}> = {
|
|
334
|
-
create:
|
|
333
|
+
create: Rel['nestedCreateQuery'];
|
|
335
334
|
connect?: never;
|
|
336
335
|
connectOrCreate?: never;
|
|
337
336
|
} | {
|
|
@@ -343,7 +342,7 @@ type RelationToOneDataForCreate<Rel extends {
|
|
|
343
342
|
connect?: never;
|
|
344
343
|
connectOrCreate: {
|
|
345
344
|
where: WhereArg<Rel['table']>;
|
|
346
|
-
create:
|
|
345
|
+
create: Rel['nestedCreateQuery'];
|
|
347
346
|
};
|
|
348
347
|
};
|
|
349
348
|
type RelationToOneDataForCreateSameQuery<Q extends Query> = {
|
|
@@ -362,17 +361,6 @@ type RelationToOneDataForCreateSameQuery<Q extends Query> = {
|
|
|
362
361
|
create: CreateData<Q>;
|
|
363
362
|
};
|
|
364
363
|
};
|
|
365
|
-
type RelationToManyDataForCreate<Rel extends {
|
|
366
|
-
nestedCreateQuery: Query;
|
|
367
|
-
table: Query;
|
|
368
|
-
}> = {
|
|
369
|
-
create?: CreateData<Rel['nestedCreateQuery']>[];
|
|
370
|
-
connect?: WhereArg<Rel['table']>[];
|
|
371
|
-
connectOrCreate?: {
|
|
372
|
-
where: WhereArg<Rel['table']>;
|
|
373
|
-
create: CreateData<Rel['nestedCreateQuery']>;
|
|
374
|
-
}[];
|
|
375
|
-
};
|
|
376
364
|
interface RelationThunkBase {
|
|
377
365
|
type: string;
|
|
378
366
|
fn(): TableClass;
|
|
@@ -389,10 +377,10 @@ interface RelationConfigSelf {
|
|
|
389
377
|
};
|
|
390
378
|
relations: RelationThunks;
|
|
391
379
|
}
|
|
392
|
-
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation> : Relation extends HasOne
|
|
393
|
-
type MapRelation<T extends RelationConfigSelf, K extends keyof T['relations'] & string> =
|
|
380
|
+
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation> : Relation extends HasOne | HasMany ? HasOneParams<T, Relation> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation> : never;
|
|
381
|
+
type MapRelation<T extends RelationConfigSelf, K extends keyof T['relations'] & string, R extends Query> = T['relations'][K] extends BelongsTo ? RelationQuery<BelongsToInfo<T, K, T['relations'][K]['options']['columns'][number] & string, T['relations'][K]['options']['required'], BelongsToQuery<R, K>>, BelongsToParams<T, T['relations'][K]>, T['relations'][K]['options']['required'], true> : T['relations'][K] extends HasOne ? RelationQuery<HasOneInfo<T, K, HasOneQuery<T, K, RelationScopeOrTable<T['relations'][K]>>>, HasOneParams<T, T['relations'][K]>, T['relations'][K]['options']['required'], true> : T['relations'][K] extends HasMany ? RelationQuery<HasManyInfo<T, K, HasOneQuery<T, K, RelationScopeOrTable<T['relations'][K]>>>, HasOneParams<T, T['relations'][K]>, true, false> : T['relations'][K] extends HasAndBelongsToMany ? RelationQuery<HasAndBelongsToManyInfo<K, HasAndBelongsToManyQuery<K, RelationScopeOrTable<T['relations'][K]>>>, HasAndBelongsToManyParams<T, T['relations'][K]>, true, false> : never;
|
|
394
382
|
type MapRelations<T> = T extends RelationConfigSelf ? {
|
|
395
|
-
[K in keyof T['relations'] & string]: MapRelation<T, K
|
|
383
|
+
[K in keyof T['relations'] & string]: MapRelation<T, K, RelationScopeOrTable<T['relations'][K]>>;
|
|
396
384
|
} : EmptyObject;
|
|
397
385
|
|
|
398
386
|
interface TableClass<T extends Table = Table> {
|
|
@@ -402,16 +390,14 @@ interface TableClass<T extends Table = Table> {
|
|
|
402
390
|
interface TableClasses {
|
|
403
391
|
[K: string]: TableClass;
|
|
404
392
|
}
|
|
405
|
-
interface
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
interface TableToDb<T extends Table, RelationQueries extends RelationQueriesBase> extends Db<T['table'], T['columns']['shape'], keyof ShapeColumnPrimaryKeys<T['columns']['shape']> extends never ? never : ShapeColumnPrimaryKeys<T['columns']['shape']>, ShapeUniqueColumns<T['columns']['shape']> | TableDataItemsUniqueColumns<T['columns']['shape'], T['columns']['data']>, TableDataItemsUniqueColumnTuples<T['columns']['shape'], T['columns']['data']>, UniqueConstraints<T['columns']['shape']> | TableDataItemsUniqueConstraints<T['columns']['data']>, RelationQueries, T['types'], T['columns']['shape'] & ComputedColumnsFromOptions<T['computed']>, MapTableScopesOption<T['scopes'], T['softDelete']>> {
|
|
393
|
+
interface TableToDb<T extends Table, Relations extends RelationsBase> extends Db<T['table'], T['columns']['shape'], keyof ShapeColumnPrimaryKeys<T['columns']['shape']> extends never ? never : ShapeColumnPrimaryKeys<T['columns']['shape']>, ShapeUniqueColumns<T['columns']['shape']> | TableDataItemsUniqueColumns<T['columns']['shape'], T['columns']['data']>, TableDataItemsUniqueColumnTuples<T['columns']['shape'], T['columns']['data']>, UniqueConstraints<T['columns']['shape']> | TableDataItemsUniqueConstraints<T['columns']['data']>, T['types'], T['columns']['shape'] & ComputedColumnsFromOptions<T['computed']>, MapTableScopesOption<T['scopes'], T['softDelete']>> {
|
|
394
|
+
relations: Relations;
|
|
409
395
|
definedAs: string;
|
|
410
396
|
db: OrchidORM;
|
|
411
397
|
getFilePath(): string;
|
|
412
398
|
name: string;
|
|
413
399
|
}
|
|
414
|
-
type DbTable<T extends Table> = TableToDb<T, MapRelations<T>> & MapRelations<T>;
|
|
400
|
+
type DbTable<T extends Table> = T extends RelationConfigSelf ? TableToDb<T, MapRelations<T>> & MapRelations<T> : TableToDb<T, RelationsBase>;
|
|
415
401
|
type ScopeFn<Related extends TableClass, Scope extends Query> = (q: DbTable<InstanceType<Related>>) => Scope;
|
|
416
402
|
interface Table {
|
|
417
403
|
table: string;
|
|
@@ -428,19 +414,23 @@ interface Table {
|
|
|
428
414
|
* collect computed columns returned by {@link BaseTable.setColumns}
|
|
429
415
|
*/
|
|
430
416
|
computed?: ComputedOptionsFactory<never, never>;
|
|
431
|
-
scopes?:
|
|
417
|
+
scopes?: RecordUnknown;
|
|
432
418
|
readonly softDelete?: true | string;
|
|
433
419
|
comment?: string;
|
|
434
420
|
}
|
|
435
|
-
type Queryable<T extends Table> = {
|
|
421
|
+
type Queryable<T extends Table> = Simplify<{
|
|
436
422
|
[K in keyof T['columns']['shape']]?: T['columns']['shape'][K]['queryType'];
|
|
437
|
-
}
|
|
438
|
-
type Selectable<T extends Table> = ColumnShapeOutput<T['columns']['shape']
|
|
439
|
-
type Insertable<T extends Table> = ColumnShapeInput<T['columns']['shape']
|
|
440
|
-
type Updatable<T extends Table> = ColumnShapeInputPartial<T['columns']['shape']
|
|
441
|
-
type BeforeHookMethod =
|
|
442
|
-
type AfterHookMethod =
|
|
443
|
-
type AfterSelectableHookMethod = <
|
|
423
|
+
}>;
|
|
424
|
+
type Selectable<T extends Table> = Simplify<ColumnShapeOutput<T['columns']['shape']>>;
|
|
425
|
+
type Insertable<T extends Table> = Simplify<ColumnShapeInput<T['columns']['shape']>>;
|
|
426
|
+
type Updatable<T extends Table> = Simplify<ColumnShapeInputPartial<T['columns']['shape']>>;
|
|
427
|
+
type BeforeHookMethod = (cb: QueryBeforeHook) => void;
|
|
428
|
+
type AfterHookMethod = (cb: QueryAfterHook) => void;
|
|
429
|
+
type AfterSelectableHookMethod = <Shape extends QueryColumns, S extends (keyof Shape)[]>(this: {
|
|
430
|
+
columns: {
|
|
431
|
+
shape: Shape;
|
|
432
|
+
};
|
|
433
|
+
}, select: S, cb: AfterHook<S, Shape>) => void;
|
|
444
434
|
interface SetColumnsResult<Shape extends ColumnsShapeBase, Data extends MaybeArray<MaybeArray<TableDataItem>>> {
|
|
445
435
|
shape: Shape;
|
|
446
436
|
data: Data extends unknown[] ? Data : [Data];
|
|
@@ -584,7 +574,7 @@ interface BaseTableInstance<ColumnTypes> {
|
|
|
584
574
|
fn: () => Related;
|
|
585
575
|
options: Options;
|
|
586
576
|
};
|
|
587
|
-
hasMany<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Through extends string, Source extends string, Options extends
|
|
577
|
+
hasMany<Columns extends ColumnsShapeBase, Related extends TableClass, Scope extends Query, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Scope, Through, Source>>(this: {
|
|
588
578
|
columns: {
|
|
589
579
|
shape: Columns;
|
|
590
580
|
};
|
package/dist/index.js
CHANGED
|
@@ -299,8 +299,8 @@ class BelongsToVirtualColumn extends pqb.VirtualColumn {
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
const makeBelongsToMethod = (relation, relationName, query) => {
|
|
302
|
-
const primaryKeys =
|
|
303
|
-
const foreignKeys =
|
|
302
|
+
const primaryKeys = relation.options.references;
|
|
303
|
+
const foreignKeys = relation.options.columns;
|
|
304
304
|
const len = primaryKeys.length;
|
|
305
305
|
const state = { query, primaryKeys, foreignKeys, len };
|
|
306
306
|
const makeWhere = relationWhere(len, primaryKeys, foreignKeys);
|
|
@@ -617,8 +617,8 @@ const makeHasOneMethod = (table, relation, relationName, query) => {
|
|
|
617
617
|
reverseJoin: reverseJoin2
|
|
618
618
|
};
|
|
619
619
|
}
|
|
620
|
-
const primaryKeys =
|
|
621
|
-
const foreignKeys =
|
|
620
|
+
const primaryKeys = relation.options.columns;
|
|
621
|
+
const foreignKeys = relation.options.references;
|
|
622
622
|
const state = { query, primaryKeys, foreignKeys };
|
|
623
623
|
const len = primaryKeys.length;
|
|
624
624
|
const reversedOn = {};
|
|
@@ -879,8 +879,8 @@ const makeHasManyMethod = (table, relation, relationName, query) => {
|
|
|
879
879
|
reverseJoin: reverseJoin2
|
|
880
880
|
};
|
|
881
881
|
}
|
|
882
|
-
const primaryKeys =
|
|
883
|
-
const foreignKeys =
|
|
882
|
+
const primaryKeys = relation.options.columns;
|
|
883
|
+
const foreignKeys = relation.options.references;
|
|
884
884
|
const state = { query, primaryKeys, foreignKeys };
|
|
885
885
|
const len = primaryKeys.length;
|
|
886
886
|
const reversedOn = {};
|
|
@@ -977,7 +977,10 @@ const nestedInsert$1 = ({ query, primaryKeys, foreignKeys }) => {
|
|
|
977
977
|
obj[foreignKeys[i2]] = selfData[primaryKeys[i2]];
|
|
978
978
|
}
|
|
979
979
|
queries.push(
|
|
980
|
-
pqb._queryUpdate(
|
|
980
|
+
pqb._queryUpdate(
|
|
981
|
+
t.where(item.where),
|
|
982
|
+
obj
|
|
983
|
+
)
|
|
981
984
|
);
|
|
982
985
|
}
|
|
983
986
|
}
|
|
@@ -1147,25 +1150,12 @@ const removeColumnName = (column) => {
|
|
|
1147
1150
|
return cloned;
|
|
1148
1151
|
};
|
|
1149
1152
|
const makeHasAndBelongsToManyMethod = (table, qb, relation, relationName, query) => {
|
|
1150
|
-
let primaryKeys;
|
|
1151
|
-
let foreignKeys;
|
|
1152
|
-
let joinTable;
|
|
1153
|
-
let throughForeignKeys;
|
|
1154
|
-
let throughPrimaryKeys;
|
|
1155
1153
|
const { options } = relation;
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
throughPrimaryKeys = options.through.references;
|
|
1162
|
-
} else {
|
|
1163
|
-
primaryKeys = [options.primaryKey];
|
|
1164
|
-
foreignKeys = [options.foreignKey];
|
|
1165
|
-
joinTable = options.joinTable;
|
|
1166
|
-
throughForeignKeys = [options.associationForeignKey];
|
|
1167
|
-
throughPrimaryKeys = [options.associationPrimaryKey];
|
|
1168
|
-
}
|
|
1154
|
+
const primaryKeys = options.columns;
|
|
1155
|
+
const foreignKeys = options.references;
|
|
1156
|
+
const joinTable = options.through.table;
|
|
1157
|
+
const throughForeignKeys = options.through.columns;
|
|
1158
|
+
const throughPrimaryKeys = options.through.references;
|
|
1169
1159
|
const { snakeCase } = table.internal;
|
|
1170
1160
|
const foreignKeysFull = foreignKeys.map((key, i) => {
|
|
1171
1161
|
if (snakeCase)
|