orchid-orm 1.20.1 → 1.21.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 +46 -38
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -3
- 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,
|
|
1
|
+
import { Query, CreateMethodsNames, DeleteMethodsNames, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, WhereArg, UpdateData, CreateData, AddQueryDefaults, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationQuery, RelationConfigBase, RelationQueryBase, ComputedColumnsBase, MapTableScopesOption, QueryWithTable, QueryData, QueryBase, DbTableOptionScopes, DefaultSchemaConfig, DefaultColumnTypes, QueryBeforeHook, QueryAfterHook, AfterHook, WhereResult, MergeQuery, SetQueryReturns, QueryReturnType } from 'pqb';
|
|
2
2
|
export * from 'pqb';
|
|
3
|
-
import { ColumnsShapeBase, EmptyObject, MaybeArray,
|
|
3
|
+
import { ColumnsShapeBase, StringKey, EmptyObject, MaybeArray, CoreQueryScopes, ColumnShapeQueryType, ColumnShapeOutput, ColumnShapeInput, ColumnSchemaConfig } from 'orchid-core';
|
|
4
4
|
|
|
5
5
|
type RelationCommonOptions<Related extends TableClass = TableClass, Scope extends Query = Query> = {
|
|
6
6
|
scope?: ScopeFn<Related, Scope>;
|
|
@@ -26,24 +26,29 @@ type BelongsTo = RelationThunkBase & {
|
|
|
26
26
|
options: BelongsToOptions;
|
|
27
27
|
};
|
|
28
28
|
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>;
|
|
29
|
-
type BelongsToInfo<T extends Table, Relation extends BelongsTo,
|
|
29
|
+
type BelongsToInfo<T extends Table, Relation extends BelongsTo, Name extends string, TableQuery extends Query, FK extends string = Relation['options'] extends RelationRefsOptions ? Relation['options']['columns'][number] : Relation['options'] extends RelationKeysOptions ? Relation['options']['foreignKey'] : never, Required = Relation['options']['required'] extends true ? true : false, Q extends Query = {
|
|
30
|
+
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'as' | 'defaults'> & {
|
|
31
|
+
as: StringKey<Name>;
|
|
32
|
+
defaults: TableQuery['meta']['defaults'];
|
|
33
|
+
hasWhere: true;
|
|
34
|
+
} : K extends 'join' ? <T extends Query>(this: T) => T : K extends CreateMethodsNames | DeleteMethodsNames ? never : K extends keyof TableQuery ? TableQuery[K] : never;
|
|
35
|
+
}, DataForCreate = RelationToOneDataForCreate<{
|
|
30
36
|
nestedCreateQuery: Q;
|
|
31
37
|
table: Q;
|
|
32
|
-
}
|
|
33
|
-
table: Q;
|
|
38
|
+
}>> = {
|
|
34
39
|
query: Q;
|
|
40
|
+
methodQuery: Required extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
|
|
35
41
|
joinQuery: RelationJoinQuery;
|
|
36
42
|
one: true;
|
|
37
|
-
required: Required;
|
|
38
43
|
omitForeignKeyInCreate: FK;
|
|
39
44
|
dataForCreate: {
|
|
40
45
|
columns: {
|
|
41
46
|
[L in FK]: T['columns'][L]['inputType'];
|
|
42
47
|
};
|
|
43
48
|
nested: Required extends true ? {
|
|
44
|
-
[Key in
|
|
49
|
+
[Key in Name]: DataForCreate;
|
|
45
50
|
} : {
|
|
46
|
-
[Key in
|
|
51
|
+
[Key in Name]?: DataForCreate;
|
|
47
52
|
};
|
|
48
53
|
};
|
|
49
54
|
optionalDataForCreate: EmptyObject;
|
|
@@ -65,11 +70,8 @@ type BelongsToInfo<T extends Table, Relation extends BelongsTo, K extends string
|
|
|
65
70
|
};
|
|
66
71
|
};
|
|
67
72
|
params: {
|
|
68
|
-
[
|
|
73
|
+
[Name in FK]: T['columns'][FK]['type'];
|
|
69
74
|
};
|
|
70
|
-
populate: EmptyObject;
|
|
71
|
-
chainedCreate: false;
|
|
72
|
-
chainedDelete: false;
|
|
73
75
|
};
|
|
74
76
|
|
|
75
77
|
type HasMany = RelationThunkBase & {
|
|
@@ -77,15 +79,20 @@ type HasMany = RelationThunkBase & {
|
|
|
77
79
|
options: HasManyOptions;
|
|
78
80
|
};
|
|
79
81
|
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>;
|
|
80
|
-
type HasManyInfo<T extends Table, Relations extends RelationThunks, Relation extends HasMany,
|
|
81
|
-
|
|
82
|
+
type HasManyInfo<T extends Table, Relations extends RelationThunks, Relation extends HasMany, Name extends string, TableQuery extends Query, Populate extends Record<string, true> = Relation['options'] extends RelationRefsOptions ? Record<Relation['options']['references'][number], true> : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['foreignKey'], true> : never, Q extends Query = {
|
|
83
|
+
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'as' | 'defaults'> & {
|
|
84
|
+
as: StringKey<Name>;
|
|
85
|
+
defaults: TableQuery['meta']['defaults'] & Populate;
|
|
86
|
+
hasWhere: true;
|
|
87
|
+
} : K extends 'join' ? <TableQuery extends Query>(this: TableQuery) => TableQuery : K extends CreateMethodsNames ? Relation['options'] extends RelationThroughOptions ? never : TableQuery[K] : K extends DeleteMethodsNames ? TableQuery[K] : K extends keyof TableQuery ? TableQuery[K] : never;
|
|
88
|
+
}, NestedCreateQuery extends Query = Relation['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Populate>> = {
|
|
82
89
|
query: Q;
|
|
90
|
+
methodQuery: Q;
|
|
83
91
|
joinQuery: RelationJoinQuery;
|
|
84
92
|
one: false;
|
|
85
|
-
required: Relation['options']['required'] extends true ? true : false;
|
|
86
93
|
omitForeignKeyInCreate: never;
|
|
87
94
|
optionalDataForCreate: {
|
|
88
|
-
[P in
|
|
95
|
+
[P in Name]?: Relation['options'] extends RelationThroughOptions ? EmptyObject : RelationToManyDataForCreate<{
|
|
89
96
|
nestedCreateQuery: NestedCreateQuery;
|
|
90
97
|
table: Q;
|
|
91
98
|
}>;
|
|
@@ -103,11 +110,8 @@ type HasManyInfo<T extends Table, Relations extends RelationThunks, Relation ext
|
|
|
103
110
|
create?: CreateData<NestedCreateQuery>[];
|
|
104
111
|
};
|
|
105
112
|
params: Relation['options'] extends RelationRefsOptions ? {
|
|
106
|
-
[
|
|
113
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
107
114
|
} : 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;
|
|
108
|
-
populate: Populate;
|
|
109
|
-
chainedCreate: Relation['options'] extends RelationThroughOptions ? false : true;
|
|
110
|
-
chainedDelete: true;
|
|
111
115
|
};
|
|
112
116
|
|
|
113
117
|
type HasOne = RelationThunkBase & {
|
|
@@ -115,15 +119,20 @@ type HasOne = RelationThunkBase & {
|
|
|
115
119
|
options: HasOneOptions;
|
|
116
120
|
};
|
|
117
121
|
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>);
|
|
118
|
-
type HasOneInfo<T extends Table, Relations extends RelationThunks, Relation extends HasOne,
|
|
119
|
-
|
|
122
|
+
type HasOneInfo<T extends Table, Relations extends RelationThunks, Relation extends HasOne, Name extends string, TableQuery extends Query, Populate extends Record<string, true> = Relation['options'] extends RelationRefsOptions ? Record<Relation['options']['references'][number], true> : Relation['options'] extends RelationKeysOptions ? Record<Relation['options']['foreignKey'], true> : never, Q extends Query = {
|
|
123
|
+
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'as' | 'defaults'> & {
|
|
124
|
+
as: StringKey<Name>;
|
|
125
|
+
defaults: TableQuery['meta']['defaults'] & Populate;
|
|
126
|
+
hasWhere: true;
|
|
127
|
+
} : K extends 'join' ? <T extends Query>(this: T) => T : K extends CreateMethodsNames ? Relation['options'] extends RelationThroughOptions ? never : TableQuery[K] : K extends DeleteMethodsNames ? TableQuery[K] : K extends keyof TableQuery ? TableQuery[K] : never;
|
|
128
|
+
}, NestedCreateQuery extends Query = Relation['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Populate>> = {
|
|
120
129
|
query: Q;
|
|
130
|
+
methodQuery: Relation['options']['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
|
|
121
131
|
joinQuery: RelationJoinQuery;
|
|
122
132
|
one: true;
|
|
123
|
-
required: Relation['options']['required'] extends true ? true : false;
|
|
124
133
|
omitForeignKeyInCreate: never;
|
|
125
134
|
optionalDataForCreate: Relation['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
126
|
-
[P in
|
|
135
|
+
[P in Name]?: RelationToOneDataForCreate<{
|
|
127
136
|
nestedCreateQuery: NestedCreateQuery;
|
|
128
137
|
table: Q;
|
|
129
138
|
}>;
|
|
@@ -146,11 +155,8 @@ type HasOneInfo<T extends Table, Relations extends RelationThunks, Relation exte
|
|
|
146
155
|
create: CreateData<NestedCreateQuery>;
|
|
147
156
|
};
|
|
148
157
|
params: Relation['options'] extends RelationRefsOptions ? {
|
|
149
|
-
[
|
|
158
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
150
159
|
} : 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;
|
|
151
|
-
populate: Populate;
|
|
152
|
-
chainedCreate: Relation['options'] extends RelationThroughOptions ? false : true;
|
|
153
|
-
chainedDelete: true;
|
|
154
160
|
};
|
|
155
161
|
|
|
156
162
|
declare function transaction<T extends {
|
|
@@ -254,15 +260,20 @@ type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeB
|
|
|
254
260
|
associationPrimaryKey: string;
|
|
255
261
|
associationForeignKey: keyof InstanceType<Related>['columns'];
|
|
256
262
|
});
|
|
257
|
-
type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMany,
|
|
258
|
-
|
|
263
|
+
type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMany, Name extends string, TableQuery extends Query, Q extends Query = {
|
|
264
|
+
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'as' | 'defaults'> & {
|
|
265
|
+
as: StringKey<Name>;
|
|
266
|
+
defaults: TableQuery['meta']['defaults'];
|
|
267
|
+
hasWhere: true;
|
|
268
|
+
} : K extends 'join' ? <T extends Query>(this: T) => T : K extends CreateMethodsNames ? TableQuery[K] : K extends DeleteMethodsNames ? TableQuery[K] : K extends keyof TableQuery ? TableQuery[K] : never;
|
|
269
|
+
}> = {
|
|
259
270
|
query: Q;
|
|
271
|
+
methodQuery: Q;
|
|
260
272
|
joinQuery: RelationJoinQuery;
|
|
261
273
|
one: false;
|
|
262
|
-
required: Relation['options']['required'] extends true ? true : false;
|
|
263
274
|
omitForeignKeyInCreate: never;
|
|
264
275
|
optionalDataForCreate: {
|
|
265
|
-
[P in
|
|
276
|
+
[P in Name]?: RelationToManyDataForCreate<{
|
|
266
277
|
nestedCreateQuery: Q;
|
|
267
278
|
table: Q;
|
|
268
279
|
}>;
|
|
@@ -281,13 +292,10 @@ type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMa
|
|
|
281
292
|
params: Relation['options'] extends {
|
|
282
293
|
columns: string[];
|
|
283
294
|
} ? {
|
|
284
|
-
[
|
|
295
|
+
[Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
|
|
285
296
|
} : Relation['options'] extends {
|
|
286
297
|
primaryKey: string;
|
|
287
298
|
} ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
|
|
288
|
-
populate: EmptyObject;
|
|
289
|
-
chainedCreate: true;
|
|
290
|
-
chainedDelete: true;
|
|
291
299
|
};
|
|
292
300
|
|
|
293
301
|
type RelationToOneDataForCreate<Rel extends {
|
|
@@ -329,8 +337,8 @@ type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;
|
|
|
329
337
|
type RelationThunks = Record<string, RelationThunk>;
|
|
330
338
|
type RelationScopeOrTable<Relation extends RelationThunkBase> = Relation['options']['scope'] extends (q: Query) => Query ? ReturnType<Relation['options']['scope']> : RelationQueryFromFn<Relation>;
|
|
331
339
|
type RelationQueryFromFn<Relation extends RelationThunkBase, TC extends TableClass = ReturnType<Relation['fn']>, Q extends Query = DbTable<TC>> = Q;
|
|
332
|
-
type RelationConfig<T extends Table = Table, Relations extends RelationThunks = RelationThunks, Relation extends RelationThunk = RelationThunk, K extends PropertyKey = PropertyKey, Result extends RelationConfigBase = Relation extends BelongsTo ? BelongsToInfo<T, Relation, StringKey<K
|
|
333
|
-
type MapRelation<T extends Table, Relations extends RelationThunks, RelationName extends keyof Relations, Relation extends RelationThunk = Relations[RelationName]
|
|
340
|
+
type RelationConfig<T extends Table = Table, Relations extends RelationThunks = RelationThunks, Relation extends RelationThunk = RelationThunk, K extends PropertyKey = PropertyKey, TableQuery extends Query = Query, Result extends RelationConfigBase = Relation extends BelongsTo ? BelongsToInfo<T, Relation, StringKey<K>, TableQuery> : Relation extends HasOne ? HasOneInfo<T, Relations, Relation, StringKey<K>, TableQuery> : Relation extends HasMany ? HasManyInfo<T, Relations, Relation, StringKey<K>, TableQuery> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, Relation, StringKey<K>, TableQuery> : never> = Result;
|
|
341
|
+
type MapRelation<T extends Table, Relations extends RelationThunks, RelationName extends keyof Relations, Relation extends RelationThunk = Relations[RelationName], TableQuery extends Query = RelationScopeOrTable<Relation>> = RelationQuery<RelationConfig<T, Relations, Relation, RelationName, TableQuery>>;
|
|
334
342
|
type MapRelations<T extends Table> = T extends {
|
|
335
343
|
relations: RelationThunks;
|
|
336
344
|
} ? {
|
package/dist/index.js
CHANGED
|
@@ -133,7 +133,7 @@ const getThroughRelation = (table, through) => {
|
|
|
133
133
|
};
|
|
134
134
|
const getSourceRelation = (throughRelation, source) => {
|
|
135
135
|
var _a;
|
|
136
|
-
return (_a = throughRelation.
|
|
136
|
+
return (_a = throughRelation.query.relations[source]) == null ? void 0 : _a.relationConfig;
|
|
137
137
|
};
|
|
138
138
|
const hasRelationHandleCreate = (q, ctx, item, rowIndex, key, primaryKeys, nestedInsert) => {
|
|
139
139
|
const value = item[key];
|
|
@@ -1345,7 +1345,9 @@ const nestedInsert = ({
|
|
|
1345
1345
|
const queries = [];
|
|
1346
1346
|
for (const [, { connect }] of items) {
|
|
1347
1347
|
for (const item of connect) {
|
|
1348
|
-
queries.push(
|
|
1348
|
+
queries.push(
|
|
1349
|
+
pqb._queryFindBy(t.select(...throughPrimaryKeys), [item])
|
|
1350
|
+
);
|
|
1349
1351
|
}
|
|
1350
1352
|
}
|
|
1351
1353
|
connected = await Promise.all(queries);
|
|
@@ -1364,7 +1366,9 @@ const nestedInsert = ({
|
|
|
1364
1366
|
for (const [, { connectOrCreate }] of items) {
|
|
1365
1367
|
for (const item of connectOrCreate) {
|
|
1366
1368
|
queries.push(
|
|
1367
|
-
pqb._queryFindByOptional(t.select(...throughPrimaryKeys), [
|
|
1369
|
+
pqb._queryFindByOptional(t.select(...throughPrimaryKeys), [
|
|
1370
|
+
item.where
|
|
1371
|
+
])
|
|
1368
1372
|
);
|
|
1369
1373
|
}
|
|
1370
1374
|
}
|