orchid-orm 1.21.3 → 1.21.4

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 CHANGED
@@ -1,6 +1,6 @@
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';
1
+ import { Query, SelectableFromShape, CreateMethodsNames, AddQueryDefaults, RelationConfigBase, SetQueryReturnsOne, SetQueryReturnsOneOptional, RelationJoinQuery, UpdateData, WhereArg, CreateData, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, Adapter, FromArgs, FromResult, AdapterOptions, QueryLogOptions, NoPrimaryKeyOption, RelationQuery, 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, StringKey, EmptyObject, MaybeArray, CoreQueryScopes, ColumnShapeQueryType, ColumnShapeOutput, ColumnShapeInput, ColumnSchemaConfig } from 'orchid-core';
3
+ import { ColumnsShapeBase, EmptyObject, MaybeArray, StringKey, 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>;
@@ -21,71 +21,75 @@ type RelationThroughOptions<Through extends PropertyKey = string, Source extends
21
21
  };
22
22
  type RelationHasOptions<Column extends PropertyKey = string, Ref extends PropertyKey = string> = RelationRefsOrKeysOptions<Column, Ref, Column, Ref>;
23
23
 
24
- type BelongsTo = RelationThunkBase & {
25
- type: 'belongsTo';
26
- options: BelongsToOptions;
24
+ type HasOne = RelationThunkBase & {
25
+ type: 'hasOne';
26
+ options: HasOneOptions;
27
27
  };
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, 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'];
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
+ interface 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 = Relation['options'] extends RelationThroughOptions ? {
30
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
31
+ as: Name;
32
+ defaults: Populate;
33
+ hasWhere: true;
34
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
35
+ } : {
36
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
37
+ as: Name;
38
+ defaults: Populate;
33
39
  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<{
36
- nestedCreateQuery: Q;
37
- table: Q;
38
- }>> = {
40
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : TableQuery[K];
41
+ }, NestedCreateQuery extends Query = Relation['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Populate>> extends RelationConfigBase {
39
42
  query: Q;
40
- methodQuery: Required extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
43
+ methodQuery: Relation['options']['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
41
44
  joinQuery: RelationJoinQuery;
42
45
  one: true;
43
- omitForeignKeyInCreate: FK;
44
- dataForCreate: {
45
- columns: {
46
- [L in FK]: T['columns'][L]['inputType'];
47
- };
48
- nested: Required extends true ? {
49
- [Key in Name]: DataForCreate;
50
- } : {
51
- [Key in Name]?: DataForCreate;
52
- };
46
+ omitForeignKeyInCreate: never;
47
+ optionalDataForCreate: Relation['options'] extends RelationThroughOptions ? EmptyObject : {
48
+ [P in Name]?: RelationToOneDataForCreate<{
49
+ nestedCreateQuery: NestedCreateQuery;
50
+ table: Q;
51
+ }>;
53
52
  };
54
- optionalDataForCreate: EmptyObject;
55
53
  dataForUpdate: {
56
54
  disconnect: boolean;
57
- } | {
58
- set: WhereArg<Q>;
59
55
  } | {
60
56
  delete: boolean;
61
57
  } | {
62
58
  update: UpdateData<Q>;
63
- } | {
64
- create: CreateData<Q>;
65
59
  };
66
60
  dataForUpdateOne: {
61
+ set: WhereArg<Q>;
62
+ } | {
67
63
  upsert: {
68
64
  update: UpdateData<Q>;
69
- create: CreateData<Q> | (() => CreateData<Q>);
65
+ create: CreateData<NestedCreateQuery> | (() => CreateData<NestedCreateQuery>);
70
66
  };
67
+ } | {
68
+ create: CreateData<NestedCreateQuery>;
71
69
  };
72
- params: {
73
- [Name in FK]: T['columns'][FK]['type'];
74
- };
75
- };
70
+ params: Relation['options'] extends RelationRefsOptions ? {
71
+ [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
72
+ } : 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;
73
+ }
76
74
 
77
75
  type HasMany = RelationThunkBase & {
78
76
  type: 'hasMany';
79
77
  options: HasManyOptions;
80
78
  };
81
79
  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
- 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;
80
+ interface 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 = Relation['options'] extends RelationThroughOptions ? {
81
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
82
+ as: Name;
83
+ defaults: Populate;
84
+ hasWhere: true;
85
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
86
+ } : {
87
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
88
+ as: Name;
89
+ defaults: Populate;
86
90
  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>> = {
91
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : TableQuery[K];
92
+ }, NestedCreateQuery extends Query = Relation['options'] extends RelationThroughOptions ? Q : AddQueryDefaults<Q, Populate>> extends RelationConfigBase {
89
93
  query: Q;
90
94
  methodQuery: Q;
91
95
  joinQuery: RelationJoinQuery;
@@ -112,52 +116,64 @@ type HasManyInfo<T extends Table, Relations extends RelationThunks, Relation ext
112
116
  params: Relation['options'] extends RelationRefsOptions ? {
113
117
  [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
114
118
  } : 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;
115
- };
119
+ }
116
120
 
117
- type HasOne = RelationThunkBase & {
118
- type: 'hasOne';
119
- options: HasOneOptions;
121
+ type RelJoin = <T extends Query>(this: T) => T;
122
+
123
+ type BelongsTo = RelationThunkBase & {
124
+ type: 'belongsTo';
125
+ options: BelongsToOptions;
120
126
  };
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>);
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;
127
+ 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>;
128
+ interface 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 = {
129
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
130
+ as: Name;
126
131
  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>> = {
132
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : K extends CreateMethodsNames | DeleteMethodsNames ? never : TableQuery[K];
133
+ }> extends RelationConfigBase {
129
134
  query: Q;
130
- methodQuery: Relation['options']['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
135
+ methodQuery: Required extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q>;
131
136
  joinQuery: RelationJoinQuery;
132
137
  one: true;
133
- omitForeignKeyInCreate: never;
134
- optionalDataForCreate: Relation['options'] extends RelationThroughOptions ? EmptyObject : {
135
- [P in Name]?: RelationToOneDataForCreate<{
136
- nestedCreateQuery: NestedCreateQuery;
137
- table: Q;
138
- }>;
138
+ omitForeignKeyInCreate: FK;
139
+ dataForCreate: {
140
+ columns: {
141
+ [L in FK]: T['columns'][L]['inputType'];
142
+ };
143
+ nested: Required extends true ? {
144
+ [Key in Name]: RelationToOneDataForCreate<{
145
+ nestedCreateQuery: Q;
146
+ table: Q;
147
+ }>;
148
+ } : {
149
+ [Key in Name]?: RelationToOneDataForCreate<{
150
+ nestedCreateQuery: Q;
151
+ table: Q;
152
+ }>;
153
+ };
139
154
  };
155
+ optionalDataForCreate: EmptyObject;
140
156
  dataForUpdate: {
141
157
  disconnect: boolean;
158
+ } | {
159
+ set: WhereArg<Q>;
142
160
  } | {
143
161
  delete: boolean;
144
162
  } | {
145
163
  update: UpdateData<Q>;
164
+ } | {
165
+ create: CreateData<Q>;
146
166
  };
147
167
  dataForUpdateOne: {
148
- set: WhereArg<Q>;
149
- } | {
150
168
  upsert: {
151
169
  update: UpdateData<Q>;
152
- create: CreateData<NestedCreateQuery> | (() => CreateData<NestedCreateQuery>);
170
+ create: CreateData<Q> | (() => CreateData<Q>);
153
171
  };
154
- } | {
155
- create: CreateData<NestedCreateQuery>;
156
172
  };
157
- params: Relation['options'] extends RelationRefsOptions ? {
158
- [Name in Relation['options']['columns'][number]]: T['columns'][Name]['type'];
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;
160
- };
173
+ params: {
174
+ [Name in FK]: T['columns'][FK]['type'];
175
+ };
176
+ }
161
177
 
162
178
  declare function transaction<T extends {
163
179
  $queryBuilder: Db;
@@ -260,13 +276,12 @@ type HasAndBelongsToManyOptions<Columns extends ColumnsShapeBase = ColumnsShapeB
260
276
  associationPrimaryKey: string;
261
277
  associationForeignKey: keyof InstanceType<Related>['columns'];
262
278
  });
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'];
279
+ interface HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMany, Name extends string, TableQuery extends Query, Q extends Query = {
280
+ [K in keyof TableQuery]: K extends 'meta' ? TableQuery['meta'] & {
281
+ as: Name;
267
282
  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
- }> = {
283
+ } : K extends 'selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends 'join' ? RelJoin : TableQuery[K];
284
+ }> extends RelationConfigBase {
270
285
  query: Q;
271
286
  methodQuery: Q;
272
287
  joinQuery: RelationJoinQuery;
@@ -296,7 +311,7 @@ type HasAndBelongsToManyInfo<T extends Table, Relation extends HasAndBelongsToMa
296
311
  } : Relation['options'] extends {
297
312
  primaryKey: string;
298
313
  } ? Record<Relation['options']['primaryKey'], T['columns'][Relation['options']['primaryKey']]['type']> : never;
299
- };
314
+ }
300
315
 
301
316
  type RelationToOneDataForCreate<Rel extends {
302
317
  nestedCreateQuery: Query;