orchid-orm 1.59.2 → 1.59.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 +74 -84
- package/dist/index.js +23 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -12
- package/dist/index.mjs.map +1 -1
- package/dist/migrations/node-postgres.js +3 -3
- package/dist/migrations/node-postgres.js.map +1 -1
- package/dist/migrations/node-postgres.mjs +4 -4
- package/dist/migrations/node-postgres.mjs.map +1 -1
- package/dist/migrations/postgres-js.js +3 -3
- package/dist/migrations/postgres-js.js.map +1 -1
- package/dist/migrations/postgres-js.mjs +4 -4
- package/dist/migrations/postgres-js.mjs.map +1 -1
- package/dist/node-postgres.d.ts +1 -1
- package/dist/node-postgres.js +6 -2
- package/dist/node-postgres.js.map +1 -1
- package/dist/node-postgres.mjs +6 -2
- package/dist/node-postgres.mjs.map +1 -1
- package/dist/postgres-js.d.ts +1 -1
- package/dist/postgres-js.js +2 -1
- package/dist/postgres-js.js.map +1 -1
- package/dist/postgres-js.mjs +2 -1
- package/dist/postgres-js.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Column, TableData, ColumnsShape, Query, SelectableFromShape, CreateManyMethodsNames, CreateData, AddQueryDefaults, RelationConfigBase,
|
|
1
|
+
import { Column, TableData, ColumnsShape, Query, SelectableFromShape, CreateManyMethodsNames, QueryHasWhere, CreateData, AddQueryDefaults, RelationConfigBase, QueryManyTake, QueryManyTakeOptional, EmptyObject, UpdateData, WhereArg, CreateMethodsNames, MaybeArray, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, AfterCommitStandaloneHook, AdapterBase, FromArg, FromResult, DbSharedOptions, RelationsBase, ShapeColumnPrimaryKeys, ShapeUniqueColumns, TableDataItemsUniqueColumns, TableDataItemsUniqueColumnTuples, UniqueConstraints, TableDataItemsUniqueConstraints, ComputedColumnsFromOptions, MapTableScopesOption, TableDataItem, ComputedOptionsFactory, RecordUnknown, ShallowSimplify, ComputedOptionsConfig, QueryOrExpression, QueryData, IsQuery, TableDataFn, DbTableOptionScopes, QueryScopes, ColumnSchemaConfig, StaticSQLArgs, RawSql, DynamicSQLArg, DynamicRawSQL, DefaultSchemaConfig, DefaultColumnTypes, QueryBeforeHookInternal, QueryAfterHook, AfterHook, MergeQuery, QueryReturnType } from 'pqb';
|
|
2
2
|
export * from 'pqb';
|
|
3
3
|
|
|
4
4
|
interface RelationRefsOptions<Column extends PropertyKey = string, Shape extends Column.Shape.QueryInit = Column.Shape.QueryInit> {
|
|
@@ -20,32 +20,22 @@ interface HasOne extends RelationThunkBase {
|
|
|
20
20
|
interface RelationHasOneThroughOptions<Through extends string, Source extends string> extends RelationThroughOptions<Through, Source> {
|
|
21
21
|
required?: boolean;
|
|
22
22
|
}
|
|
23
|
-
type HasOneOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
24
|
-
type HasOneParams<T extends RelationConfigSelf,
|
|
25
|
-
[Name in
|
|
26
|
-
} :
|
|
27
|
-
type HasOnePopulate<T extends RelationConfigSelf, Name extends string> = T['relations'][Name]['options'] extends RelationRefsOptions ?
|
|
23
|
+
type HasOneOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput, Through extends string = string, Source extends string = string> = RelationRefsOptions<keyof Columns, Related['columns']['shape']> | RelationHasOneThroughOptions<Through, Source>;
|
|
24
|
+
type HasOneParams<T extends RelationConfigSelf, Options> = Options extends RelationRefsOptions ? {
|
|
25
|
+
[Name in Options['columns'][number]]: T['columns']['shape'][Name]['type'];
|
|
26
|
+
} : Options extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Options['through']]> : never;
|
|
27
|
+
type HasOnePopulate<T extends RelationConfigSelf, Name extends string> = T['relations'][Name]['options'] extends RelationRefsOptions ? T['relations'][Name]['options']['references'][number] : never;
|
|
28
28
|
type HasOneQueryThrough<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = {
|
|
29
|
-
[K in keyof TableQuery]: K extends '
|
|
30
|
-
|
|
31
|
-
defaults: HasOnePopulate<T, Name>;
|
|
32
|
-
hasWhere: true;
|
|
33
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
34
|
-
} : K extends 'join' ? RelJoin : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
35
|
-
};
|
|
29
|
+
[K in keyof TableQuery]: K extends '__defaults' ? HasOnePopulate<T, Name> : K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
30
|
+
} & QueryHasWhere & HasRelJoin;
|
|
36
31
|
type HasOneQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationThroughOptions ? HasOneQueryThrough<T, Name, TableQuery> : {
|
|
37
|
-
[K in keyof TableQuery]: K extends '
|
|
38
|
-
|
|
39
|
-
defaults: HasOnePopulate<T, Name>;
|
|
40
|
-
hasWhere: true;
|
|
41
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
42
|
-
} : K extends 'join' ? RelJoin : K extends CreateManyMethodsNames ? never : TableQuery[K];
|
|
43
|
-
};
|
|
32
|
+
[K in keyof TableQuery]: K extends '__defaults' ? HasOnePopulate<T, Name> : K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : K extends CreateManyMethodsNames ? never : TableQuery[K];
|
|
33
|
+
} & QueryHasWhere & HasRelJoin;
|
|
44
34
|
interface HasOneInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasOne, Q extends Query, CD = T['relations'][Name]['options'] extends RelationThroughOptions ? CreateData<Q> : CreateData<AddQueryDefaults<Q, HasOnePopulate<T, Name>>>> extends RelationConfigBase {
|
|
45
35
|
returnsOne: true;
|
|
46
36
|
query: Q;
|
|
47
|
-
params: HasOneParams<T, Rel>;
|
|
48
|
-
maybeSingle: T['relations'][Name]['options']['required'] extends true ?
|
|
37
|
+
params: HasOneParams<T, Rel['options']>;
|
|
38
|
+
maybeSingle: T['relations'][Name]['options']['required'] extends true ? QueryManyTake<Q> : QueryManyTakeOptional<Q>;
|
|
49
39
|
omitForeignKeyInCreate: never;
|
|
50
40
|
optionalDataForCreate: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
51
41
|
[P in Name]?: RelationToOneDataForCreate<{
|
|
@@ -84,17 +74,12 @@ interface HasMany extends RelationThunkBase {
|
|
|
84
74
|
options: HasOneOptions;
|
|
85
75
|
}
|
|
86
76
|
type HasManyQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationThroughOptions ? HasOneQueryThrough<T, Name, TableQuery> : {
|
|
87
|
-
[K in keyof TableQuery]: K extends '
|
|
88
|
-
|
|
89
|
-
defaults: HasOnePopulate<T, Name>;
|
|
90
|
-
hasWhere: true;
|
|
91
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
92
|
-
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
93
|
-
};
|
|
77
|
+
[K in keyof TableQuery]: K extends '__defaults' ? HasOnePopulate<T, Name> : K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : TableQuery[K];
|
|
78
|
+
} & QueryHasWhere & HasRelJoin;
|
|
94
79
|
interface HasManyInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasMany, Q extends Query> extends RelationConfigBase {
|
|
95
80
|
returnsOne: false;
|
|
96
81
|
query: Q;
|
|
97
|
-
params: HasOneParams<T, Rel>;
|
|
82
|
+
params: HasOneParams<T, Rel['options']>;
|
|
98
83
|
maybeSingle: Q;
|
|
99
84
|
omitForeignKeyInCreate: never;
|
|
100
85
|
optionalDataForCreate: {
|
|
@@ -132,35 +117,32 @@ interface HasManyInfo<T extends RelationConfigSelf, Name extends string, Rel ext
|
|
|
132
117
|
interface RelJoin extends JoinQueryMethod {
|
|
133
118
|
<T extends Query>(this: T): T;
|
|
134
119
|
}
|
|
120
|
+
interface HasRelJoin {
|
|
121
|
+
join: RelJoin;
|
|
122
|
+
}
|
|
135
123
|
|
|
136
124
|
interface BelongsTo extends RelationThunkBase {
|
|
137
125
|
type: 'belongsTo';
|
|
138
126
|
options: BelongsToOptions;
|
|
139
127
|
}
|
|
140
|
-
interface BelongsToOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
128
|
+
interface BelongsToOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput> {
|
|
141
129
|
required?: boolean;
|
|
142
130
|
columns: (keyof Columns)[];
|
|
143
|
-
references: (keyof
|
|
131
|
+
references: (keyof Related['columns']['shape'])[];
|
|
144
132
|
foreignKey?: boolean | TableData.References.Options;
|
|
145
|
-
on?: ColumnsShape.InputPartial<
|
|
133
|
+
on?: ColumnsShape.InputPartial<Related['columns']['shape']>;
|
|
146
134
|
}
|
|
147
|
-
type
|
|
148
|
-
|
|
149
|
-
[Name in BelongsToFKey<Relation>]: T['columns']['shape'][Name]['type'];
|
|
135
|
+
type BelongsToParams<T extends RelationConfigSelf, FK extends string> = {
|
|
136
|
+
[Name in FK]: T['columns']['shape'][Name]['type'];
|
|
150
137
|
};
|
|
151
138
|
type BelongsToQuery<T extends Query, Name extends string> = {
|
|
152
|
-
[P in keyof T]: P extends '
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
hasWhere: true;
|
|
156
|
-
selectable: SelectableFromShape<T['shape'], Name>;
|
|
157
|
-
} : P extends 'join' ? RelJoin : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P];
|
|
158
|
-
};
|
|
159
|
-
interface BelongsToInfo<T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo, FK extends string, Required, Q extends Query> extends RelationConfigBase {
|
|
139
|
+
[P in keyof T]: P extends '__selectable' ? SelectableFromShape<T['shape'], Name> : P extends '__as' ? Name : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P];
|
|
140
|
+
} & QueryHasWhere & HasRelJoin;
|
|
141
|
+
interface BelongsToInfo<T extends RelationConfigSelf, Name extends string, FK extends string, Required, Q extends Query> extends RelationConfigBase {
|
|
160
142
|
returnsOne: true;
|
|
161
143
|
query: Q;
|
|
162
|
-
params: BelongsToParams<T,
|
|
163
|
-
maybeSingle: Required extends true ?
|
|
144
|
+
params: BelongsToParams<T, FK>;
|
|
145
|
+
maybeSingle: Required extends true ? QueryManyTake<Q> : QueryManyTakeOptional<Q>;
|
|
164
146
|
omitForeignKeyInCreate: FK;
|
|
165
147
|
dataForCreate: {
|
|
166
148
|
columns: FK;
|
|
@@ -220,8 +202,11 @@ interface FromQuery extends Query {
|
|
|
220
202
|
returnType: 'all';
|
|
221
203
|
}
|
|
222
204
|
type OrchidORM<T extends TableClasses = TableClasses> = {
|
|
223
|
-
[K in keyof T]:
|
|
224
|
-
|
|
205
|
+
[K in keyof T]: T[K] extends {
|
|
206
|
+
new (): infer R extends ORMTableInput;
|
|
207
|
+
} ? ORMTableInputToQueryBuilder<R> : never;
|
|
208
|
+
} & OrchidORMMethods;
|
|
209
|
+
interface OrchidORMMethods {
|
|
225
210
|
/**
|
|
226
211
|
* @see import('pqb').Transaction.prototype.transaction
|
|
227
212
|
*/
|
|
@@ -302,7 +287,7 @@ type OrchidORM<T extends TableClasses = TableClasses> = {
|
|
|
302
287
|
*/
|
|
303
288
|
$from<Arg extends MaybeArray<FromArg<Query>>>(arg: Arg): FromResult<FromQuery, Arg>;
|
|
304
289
|
$close(): Promise<void>;
|
|
305
|
-
}
|
|
290
|
+
}
|
|
306
291
|
type OrchidOrmParam<Options> = true | null extends true ? 'Set strict: true to tsconfig' : Options;
|
|
307
292
|
declare const orchidORMWithAdapter: <T extends TableClasses>({ log, logger, autoPreparedStatements, noPrimaryKey, ...options }: OrchidOrmParam<({
|
|
308
293
|
db: Query;
|
|
@@ -314,7 +299,7 @@ interface HasAndBelongsToMany extends RelationThunkBase {
|
|
|
314
299
|
type: 'hasAndBelongsToMany';
|
|
315
300
|
options: HasAndBelongsToManyOptions;
|
|
316
301
|
}
|
|
317
|
-
interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
302
|
+
interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput> {
|
|
318
303
|
required?: boolean;
|
|
319
304
|
columns: (keyof Columns)[];
|
|
320
305
|
references: string[];
|
|
@@ -322,25 +307,21 @@ interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Co
|
|
|
322
307
|
through: {
|
|
323
308
|
table: string;
|
|
324
309
|
columns: string[];
|
|
325
|
-
references: (keyof
|
|
310
|
+
references: (keyof Related['columns']['shape'])[];
|
|
326
311
|
foreignKey?: boolean | TableData.References.Options;
|
|
327
312
|
};
|
|
328
|
-
on?: ColumnsShape.InputPartial<
|
|
313
|
+
on?: ColumnsShape.InputPartial<Related['columns']['shape']>;
|
|
329
314
|
}
|
|
330
|
-
type HasAndBelongsToManyParams<T extends RelationConfigSelf,
|
|
331
|
-
[Name in
|
|
315
|
+
type HasAndBelongsToManyParams<T extends RelationConfigSelf, FK extends string> = {
|
|
316
|
+
[Name in FK]: T['columns']['shape'][Name]['type'];
|
|
332
317
|
};
|
|
333
318
|
type HasAndBelongsToManyQuery<Name extends string, TableQuery extends Query> = {
|
|
334
|
-
[K in keyof TableQuery]: K extends '
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
338
|
-
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
339
|
-
};
|
|
340
|
-
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasAndBelongsToMany, Q extends Query> extends RelationConfigBase {
|
|
319
|
+
[K in keyof TableQuery]: K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : TableQuery[K];
|
|
320
|
+
} & QueryHasWhere & HasRelJoin;
|
|
321
|
+
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends string, FK extends string, Q extends Query> extends RelationConfigBase {
|
|
341
322
|
returnsOne: false;
|
|
342
323
|
query: Q;
|
|
343
|
-
params: HasAndBelongsToManyParams<T,
|
|
324
|
+
params: HasAndBelongsToManyParams<T, FK>;
|
|
344
325
|
maybeSingle: Q;
|
|
345
326
|
omitForeignKeyInCreate: never;
|
|
346
327
|
optionalDataForCreate: {
|
|
@@ -415,25 +396,26 @@ type RelationToOneDataForCreateSameQuery<Q extends Query> = {
|
|
|
415
396
|
};
|
|
416
397
|
interface RelationThunkBase {
|
|
417
398
|
type: string;
|
|
418
|
-
|
|
399
|
+
related: ORMTableInput;
|
|
419
400
|
options: unknown;
|
|
420
401
|
}
|
|
421
402
|
type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;
|
|
422
403
|
interface RelationThunks {
|
|
423
404
|
[K: string]: RelationThunk;
|
|
424
405
|
}
|
|
425
|
-
type RelationTableToQuery<Relation
|
|
406
|
+
type RelationTableToQuery<Relation> = Relation extends {
|
|
407
|
+
related: infer R extends ORMTableInput;
|
|
408
|
+
} ? ORMTableInputToQueryBuilder<R> : never;
|
|
426
409
|
interface RelationConfigSelf {
|
|
427
410
|
columns: {
|
|
428
411
|
shape: Column.Shape.QueryInit;
|
|
429
412
|
};
|
|
430
413
|
relations: RelationThunks;
|
|
431
414
|
}
|
|
432
|
-
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;
|
|
415
|
+
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation['options']['columns'][number] & string> : Relation extends HasOne | HasMany ? HasOneParams<T, Relation['options']> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation['options']['columns'][number] & string> : never;
|
|
433
416
|
|
|
434
417
|
interface TableClass<T extends ORMTableInput = ORMTableInput> {
|
|
435
418
|
new (): T;
|
|
436
|
-
instance(): T;
|
|
437
419
|
}
|
|
438
420
|
interface TableClasses {
|
|
439
421
|
[K: string]: TableClass;
|
|
@@ -446,11 +428,11 @@ interface TableInfo {
|
|
|
446
428
|
}
|
|
447
429
|
interface Table extends Query, TableInfo {
|
|
448
430
|
}
|
|
449
|
-
interface TableToDb<T extends ORMTableInput, Relations extends RelationsBase> extends TableInfo, 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>> {
|
|
431
|
+
interface TableToDb<T extends ORMTableInput, Relations extends RelationsBase> extends TableInfo, 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>, ColumnsShape.DefaultSelectKeys<T['columns']['shape']>> {
|
|
450
432
|
relations: Relations;
|
|
451
433
|
}
|
|
452
434
|
type ORMTableInputToQueryBuilder<T extends ORMTableInput> = T extends RelationConfigSelf ? TableToDb<T, T extends RelationConfigSelf ? {
|
|
453
|
-
[K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, T['relations'][K]
|
|
435
|
+
[K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, T['relations'][K]['options']['columns'][number] & string, T['relations'][K]['options']['required'], BelongsToQuery<RelationTableToQuery<T['relations'][K]>, K>> : T['relations'][K] extends HasOne ? HasOneInfo<T, K, T['relations'][K], HasOneQuery<T, K, RelationTableToQuery<T['relations'][K]>>> : T['relations'][K] extends HasMany ? HasManyInfo<T, K, T['relations'][K], HasManyQuery<T, K, RelationTableToQuery<T['relations'][K]>>> : T['relations'][K] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, K, T['relations'][K]['options']['columns'][number] & string, HasAndBelongsToManyQuery<K, RelationTableToQuery<T['relations'][K]>>> : never;
|
|
454
436
|
} : EmptyObject> : TableToDb<T, EmptyObject>;
|
|
455
437
|
interface ORMTableInput {
|
|
456
438
|
table: string;
|
|
@@ -617,40 +599,48 @@ interface BaseTableInstance<ColumnTypes> {
|
|
|
617
599
|
shape: Shape;
|
|
618
600
|
};
|
|
619
601
|
}, scopes: DbTableOptionScopes<Table, Shape, Keys>): QueryScopes<Keys>;
|
|
620
|
-
belongsTo<Columns extends Column.Shape.QueryInit, Related extends
|
|
602
|
+
belongsTo<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Options extends BelongsToOptions<Columns, Related>>(this: {
|
|
621
603
|
columns: {
|
|
622
604
|
shape: Columns;
|
|
623
605
|
};
|
|
624
|
-
}, fn: () =>
|
|
606
|
+
}, fn: () => {
|
|
607
|
+
new (): Related;
|
|
608
|
+
}, options: Options): {
|
|
625
609
|
type: 'belongsTo';
|
|
626
|
-
|
|
610
|
+
related: Related;
|
|
627
611
|
options: Options;
|
|
628
612
|
};
|
|
629
|
-
hasOne<Columns extends Column.Shape.QueryInit, Related extends
|
|
613
|
+
hasOne<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
|
|
630
614
|
columns: {
|
|
631
615
|
shape: Columns;
|
|
632
616
|
};
|
|
633
|
-
}, fn: () =>
|
|
617
|
+
}, fn: () => {
|
|
618
|
+
new (): Related;
|
|
619
|
+
}, options: Options): {
|
|
634
620
|
type: 'hasOne';
|
|
635
|
-
|
|
621
|
+
related: Related;
|
|
636
622
|
options: Options;
|
|
637
623
|
};
|
|
638
|
-
hasMany<Columns extends Column.Shape.QueryInit, Related extends
|
|
624
|
+
hasMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
|
|
639
625
|
columns: {
|
|
640
626
|
shape: Columns;
|
|
641
627
|
};
|
|
642
|
-
}, fn: () =>
|
|
628
|
+
}, fn: () => {
|
|
629
|
+
new (): Related;
|
|
630
|
+
}, options: Options): {
|
|
643
631
|
type: 'hasMany';
|
|
644
|
-
|
|
632
|
+
related: Related;
|
|
645
633
|
options: Options;
|
|
646
634
|
};
|
|
647
|
-
hasAndBelongsToMany<Columns extends Column.Shape.QueryInit, Related extends
|
|
635
|
+
hasAndBelongsToMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Options extends HasAndBelongsToManyOptions<Columns, Related>>(this: {
|
|
648
636
|
columns: {
|
|
649
637
|
shape: Columns;
|
|
650
638
|
};
|
|
651
|
-
}, fn: () =>
|
|
639
|
+
}, fn: () => {
|
|
640
|
+
new (): Related;
|
|
641
|
+
}, options: Options): {
|
|
652
642
|
type: 'hasAndBelongsToMany';
|
|
653
|
-
|
|
643
|
+
related: Related;
|
|
654
644
|
options: Options;
|
|
655
645
|
};
|
|
656
646
|
beforeQuery: BeforeHookMethod;
|
|
@@ -673,7 +663,7 @@ interface BaseTableClass<SchemaConfig extends ColumnSchemaConfig, ColumnTypes> {
|
|
|
673
663
|
exportAs: string;
|
|
674
664
|
columnTypes: ColumnTypes;
|
|
675
665
|
getFilePath(): string;
|
|
676
|
-
sql<T>(...args: StaticSQLArgs):
|
|
666
|
+
sql<T>(...args: StaticSQLArgs): RawSql<Column.Pick.QueryColumnOfType<T>, ColumnTypes>;
|
|
677
667
|
sql<T>(...args: [DynamicSQLArg<Column.Pick.QueryColumnOfType<T>>]): DynamicRawSQL<Column.Pick.QueryColumnOfType<T>, ColumnTypes>;
|
|
678
668
|
new (): BaseTableInstance<ColumnTypes>;
|
|
679
669
|
instance(): BaseTableInstance<ColumnTypes>;
|
|
@@ -722,13 +712,13 @@ type QueryOne<T extends Query> = {
|
|
|
722
712
|
interface MethodsBase<T extends Query> {
|
|
723
713
|
queryMethods?: QueryMethods<T>;
|
|
724
714
|
queryOneMethods?: QueryMethods<QueryOne<T>>;
|
|
725
|
-
queryWithWhereMethods?: QueryMethods<
|
|
726
|
-
queryOneWithWhereMethods?: QueryMethods<QueryOne<
|
|
715
|
+
queryWithWhereMethods?: QueryMethods<T & QueryHasWhere>;
|
|
716
|
+
queryOneWithWhereMethods?: QueryMethods<QueryOne<T & QueryHasWhere>>;
|
|
727
717
|
methods?: RecordUnknown;
|
|
728
718
|
}
|
|
729
719
|
type MapQueryMethods<BaseQuery extends Query, Method> = Method extends (q: any, ...args: infer Args) => infer Result ? <T extends BaseQuery>(this: T, ...args: Args) => Result extends Query ? MergeQuery<T, Result> : Result : never;
|
|
730
720
|
type MapMethods<T extends Query, Methods extends MethodsBase<T>> = {
|
|
731
|
-
[K in keyof Methods['queryMethods'] | keyof Methods['queryOneMethods'] | keyof Methods['queryWithWhereMethods'] | keyof Methods['queryOneWithWhereMethods'] | keyof Methods['methods']]: K extends keyof Methods['methods'] ? Methods['methods'][K] : K extends keyof Methods['queryOneWithWhereMethods'] ? MapQueryMethods<QueryOne<
|
|
721
|
+
[K in keyof Methods['queryMethods'] | keyof Methods['queryOneMethods'] | keyof Methods['queryWithWhereMethods'] | keyof Methods['queryOneWithWhereMethods'] | keyof Methods['methods']]: K extends keyof Methods['methods'] ? Methods['methods'][K] : K extends keyof Methods['queryOneWithWhereMethods'] ? MapQueryMethods<QueryOne<Query & QueryHasWhere>, Methods['queryOneWithWhereMethods'][K]> : K extends keyof Methods['queryWithWhereMethods'] ? MapQueryMethods<Query & QueryHasWhere, Methods['queryWithWhereMethods'][K]> : K extends keyof Methods['queryOneMethods'] ? MapQueryMethods<QueryOne<Query>, Methods['queryOneMethods'][K]> : K extends keyof Methods['queryMethods'] ? MapQueryMethods<Query, Methods['queryMethods'][K]> : never;
|
|
732
722
|
};
|
|
733
723
|
type Repo<T extends Query, Methods extends MethodsBase<T>> = T & MapMethods<T, Methods>;
|
|
734
724
|
declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(table: T, methods: Methods) => Repo<(<Q extends {
|
package/dist/index.js
CHANGED
|
@@ -388,7 +388,7 @@ const combineOrdering = (result, joined) => {
|
|
|
388
388
|
const wrapQuery = (joiningQuery, result, item) => {
|
|
389
389
|
const baseOuterQuery = pqb.cloneQueryBaseUnscoped(joiningQuery);
|
|
390
390
|
const outer = baseOuterQuery.clone();
|
|
391
|
-
outer.q.and = [new pqb.DynamicRawSQL(() => new pqb.
|
|
391
|
+
outer.q.and = [new pqb.DynamicRawSQL(() => new pqb.RawSql(`${item.as || "r"} = 1`))];
|
|
392
392
|
outer.q.useFromLimitOffset = true;
|
|
393
393
|
outer.shape = pqb.getShapeFromSelect(result, true);
|
|
394
394
|
outer.q.select = Object.keys(outer.shape);
|
|
@@ -416,13 +416,16 @@ class BelongsToVirtualColumn extends pqb.VirtualColumn {
|
|
|
416
416
|
}
|
|
417
417
|
const value = item[key];
|
|
418
418
|
if ("create" in value || "connectOrCreate" in value) {
|
|
419
|
-
foreignKeys.forEach((foreignKey) => item[foreignKey] = new pqb.
|
|
419
|
+
foreignKeys.forEach((foreignKey) => item[foreignKey] = new pqb.RawSql(""));
|
|
420
420
|
const selectPKeys = query.select(...primaryKeys);
|
|
421
421
|
pqb._with(
|
|
422
422
|
q,
|
|
423
423
|
(as) => {
|
|
424
424
|
foreignKeys.forEach((foreignKey, i) => {
|
|
425
|
-
item[foreignKey]._sql =
|
|
425
|
+
item[foreignKey]._sql = selectCteColumnSql(
|
|
426
|
+
as,
|
|
427
|
+
primaryKeys[i]
|
|
428
|
+
);
|
|
426
429
|
});
|
|
427
430
|
},
|
|
428
431
|
"create" in value ? pqb._queryCreate(selectPKeys, value.create) : pqb._orCreate(
|
|
@@ -437,9 +440,8 @@ class BelongsToVirtualColumn extends pqb.VirtualColumn {
|
|
|
437
440
|
const as = pqb.getFreeAlias(q.q.withShapes, "q");
|
|
438
441
|
pqb._with(q, as, query.select(...primaryKeys).findBy(value.connect));
|
|
439
442
|
foreignKeys.map((foreignKey, i) => {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
i === 0 ? `CASE WHEN (SELECT count(*) FROM "${as}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn
|
|
443
|
+
item[foreignKey] = new pqb.RawSql(
|
|
444
|
+
selectCteColumnMustExistSql(i, as, primaryKeys[i])
|
|
443
445
|
);
|
|
444
446
|
});
|
|
445
447
|
return;
|
|
@@ -543,13 +545,18 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
|
|
|
543
545
|
}
|
|
544
546
|
}
|
|
545
547
|
if (loadPrimaryKeys) {
|
|
546
|
-
const record = await pqb._queryFindBy(
|
|
547
|
-
query.select(...loadPrimaryKeys),
|
|
548
|
-
params.set
|
|
549
|
-
);
|
|
550
548
|
for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
|
|
551
|
-
update[loadForeignKeys[i]] =
|
|
549
|
+
update[loadForeignKeys[i]] = new pqb.RawSql("");
|
|
552
550
|
}
|
|
551
|
+
pqb._with(
|
|
552
|
+
q2,
|
|
553
|
+
(as) => {
|
|
554
|
+
for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
|
|
555
|
+
update[loadForeignKeys[i]]._sql = selectCteColumnMustExistSql(i, as, loadPrimaryKeys[i]);
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
pqb._queryFindBy(query.select(...loadPrimaryKeys), params.set)
|
|
559
|
+
);
|
|
553
560
|
}
|
|
554
561
|
} else if (params.create) {
|
|
555
562
|
const q3 = query.clone();
|
|
@@ -646,6 +653,11 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
|
|
|
646
653
|
}
|
|
647
654
|
};
|
|
648
655
|
};
|
|
656
|
+
const selectCteColumnSql = (cteAs, column) => `(SELECT "${cteAs}"."${column}" FROM "${cteAs}")`;
|
|
657
|
+
const selectCteColumnMustExistSql = (i, cteAs, column) => {
|
|
658
|
+
const selectColumn = selectCteColumnSql(cteAs, column);
|
|
659
|
+
return i === 0 ? `CASE WHEN (SELECT count(*) FROM "${cteAs}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn;
|
|
660
|
+
};
|
|
649
661
|
|
|
650
662
|
class HasOneVirtualColumn extends pqb.VirtualColumn {
|
|
651
663
|
constructor(schema, key, state) {
|