pqb 0.18.22 → 0.18.24
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 +29 -32
- package/dist/index.js +3 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -61
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -94,13 +94,13 @@ type RelationsBase = Record<string, RelationQueryBase>;
|
|
|
94
94
|
type RelationQueryBase = Query & {
|
|
95
95
|
relationConfig: RelationConfigBase;
|
|
96
96
|
};
|
|
97
|
-
type RelationQuery<Name extends PropertyKey = PropertyKey, Config extends RelationConfigBase = RelationConfigBase, T extends Query = Query, Q = {
|
|
97
|
+
type RelationQuery<Name extends PropertyKey = PropertyKey, Config extends RelationConfigBase = RelationConfigBase, T extends Query = Query, Q extends Query = {
|
|
98
98
|
[K in keyof T | 'relationConfig']: K extends 'meta' ? Omit<T['meta'], 'as'> & {
|
|
99
99
|
as: StringKey<Name>;
|
|
100
100
|
defaults: Record<Config['populate'], true>;
|
|
101
101
|
hasWhere: true;
|
|
102
|
-
} : K extends 'join' ? <T extends Query>(this: T) => T : K extends CreateMethodsNames ? Config['chainedCreate'] extends true ? T[K] : never : K extends DeleteMethodsNames ? Config['chainedDelete'] extends true ? T[K] : never : K extends keyof T ? T[K] : Config;
|
|
103
|
-
}> = ((params: Config['params']) => Q) & Q;
|
|
102
|
+
} : K extends 'join' ? <T extends Query>(this: T) => T : K extends CreateMethodsNames ? Config['chainedCreate'] extends true ? T[K] : never : K extends DeleteMethodsNames ? Config['chainedDelete'] extends true ? T[K] : never : K extends keyof T ? T[K] : K extends 'relationConfig' ? Config : never;
|
|
103
|
+
}> = ((params: Config['params']) => Config['one'] extends true ? Config['required'] extends true ? SetQueryReturnsOne<Q> : SetQueryReturnsOneOptional<Q> : Q) & Q;
|
|
104
104
|
|
|
105
105
|
declare const checkIfASimpleQuery: (q: Query) => boolean;
|
|
106
106
|
type WithItem = [
|
|
@@ -3844,7 +3844,7 @@ declare class QueryLog {
|
|
|
3844
3844
|
type MergeQuery<T extends Query, Q extends Query, ReturnType extends QueryReturnType = QueryReturnType extends Q['returnType'] ? T['returnType'] : Q['returnType'], Result extends ColumnsShapeBase = T['meta']['hasSelect'] extends true ? Q['meta']['hasSelect'] extends true ? {
|
|
3845
3845
|
[K in keyof T['result'] | keyof Q['result']]: K extends keyof Q['result'] ? Q['result'][K] : T['result'][K];
|
|
3846
3846
|
} : T['result'] : Q['result'], Data = GetQueryResult<ReturnType, Result>> = {
|
|
3847
|
-
[K in keyof T]: K extends 'meta' ? MergeObjects<T['meta'], Q['meta']> : K extends 'result' ? Result : K extends 'returnType' ? ReturnType : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? T['selectable']
|
|
3847
|
+
[K in keyof T]: K extends 'meta' ? MergeObjects<T['meta'], Q['meta']> : K extends 'result' ? Result : K extends 'returnType' ? ReturnType : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? MergeObjects<T['selectable'], Q['selectable']> : K extends 'windows' ? MergeObjects<T['windows'], Q['windows']> : K extends 'withData' ? MergeObjects<T['withData'], Q['withData']> : T[K];
|
|
3848
3848
|
};
|
|
3849
3849
|
declare class MergeQueryMethods {
|
|
3850
3850
|
merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q>;
|
|
@@ -3864,27 +3864,27 @@ declare function maybeWrappedThen(this: Query, resolve?: Resolve, reject?: Rejec
|
|
|
3864
3864
|
declare const parseResult: (q: Query, parsers: ColumnsParsers | undefined, returnType: QueryReturnType | undefined, result: QueryResult, isSubQuery?: boolean) => unknown;
|
|
3865
3865
|
declare const parseRecord: (parsers: ColumnsParsers, row: any) => any;
|
|
3866
3866
|
|
|
3867
|
-
type SelectArg<T extends Query> = '*' |
|
|
3867
|
+
type SelectArg<T extends Query> = '*' | keyof T['selectable'];
|
|
3868
3868
|
type SelectAsArg<T extends Query> = Record<string, SelectAsValue<T>>;
|
|
3869
|
-
type SelectAsValue<T extends Query> = StringKey<keyof T['selectable']> | Expression | ((q: T) => QueryBase
|
|
3870
|
-
type
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
}
|
|
3881
|
-
[K in keyof T]: K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ?
|
|
3869
|
+
type SelectAsValue<T extends Query> = StringKey<keyof T['selectable']> | Expression | ((q: SelectSubQueryArg<T>) => QueryBase | Expression);
|
|
3870
|
+
type SelectSubQueryArg<T extends Query> = {
|
|
3871
|
+
[K in keyof T]: K extends keyof T['relations'] ? T[K] extends (...args: any) => any ? ReturnType<T[K]> : T[K] : T[K];
|
|
3872
|
+
};
|
|
3873
|
+
type SelectResult<T extends Query, Columns extends SelectArg<T>[], Result extends ColumnsShapeBase = {
|
|
3874
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | PrevResultKeys<T> as K extends keyof T['selectable'] ? T['selectable'][K]['as'] : K]: K extends keyof T['selectable'] ? T['selectable'][K]['column'] : K extends keyof T['result'] ? T['result'][K] : never;
|
|
3875
|
+
}, Data = GetQueryResult<T['returnType'], Result>> = {
|
|
3876
|
+
[K in keyof T]: K extends 'meta' ? SetMetaHasSelect<T> : K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : T[K];
|
|
3877
|
+
};
|
|
3878
|
+
type SelectResultWithObj<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>, Result extends ColumnsShapeBase = {
|
|
3879
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | keyof Obj | PrevResultKeys<T> as K extends keyof T['selectable'] ? T['selectable'][K]['as'] : K]: K extends keyof T['selectable'] ? T['selectable'][K]['column'] : K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : K extends keyof T['result'] ? T['result'][K] : never;
|
|
3880
|
+
}, Data = GetQueryResult<T['returnType'], Result>> = {
|
|
3881
|
+
[K in keyof T]: K extends 'meta' ? SetMetaHasSelect<T> : K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? SelectAsSelectable<T, Obj> : T[K];
|
|
3882
3882
|
};
|
|
3883
|
-
type
|
|
3884
|
-
|
|
3883
|
+
type PrevResultKeys<T extends Query> = T['meta']['hasSelect'] extends true ? keyof T['result'] : never;
|
|
3884
|
+
type SetMetaHasSelect<T extends Query> = T['meta']['hasSelect'] extends true ? T['meta'] : {
|
|
3885
|
+
[K in keyof T['meta'] | 'hasSelect']: K extends 'hasSelect' ? true : T['meta'][K];
|
|
3885
3886
|
};
|
|
3886
|
-
type
|
|
3887
|
-
type SelectAsResult<T extends Query, Arg, Result extends SelectObjectResultTuple, Shape = Result[0], AddSelectable extends SelectableBase = {
|
|
3887
|
+
type SelectAsSelectable<T extends Query, Arg extends SelectAsArg<T>> = {
|
|
3888
3888
|
[K in keyof Arg]: Arg[K] extends ((q: never) => infer R extends QueryBase) ? (x: {
|
|
3889
3889
|
[C in keyof R['result'] as `${StringKey<K>}.${StringKey<C>}`]: {
|
|
3890
3890
|
as: C;
|
|
@@ -3892,13 +3892,8 @@ type SelectAsResult<T extends Query, Arg, Result extends SelectObjectResultTuple
|
|
|
3892
3892
|
};
|
|
3893
3893
|
}) => void : never;
|
|
3894
3894
|
}[keyof Arg] extends (x: infer I) => void ? {
|
|
3895
|
-
[K in keyof I]: I[K];
|
|
3896
|
-
} : never
|
|
3897
|
-
{
|
|
3898
|
-
[K in keyof Shape | keyof Arg]: K extends keyof Arg ? SelectAsValueResult<T, Arg[K]> : K extends keyof Shape ? Shape[K] : never;
|
|
3899
|
-
},
|
|
3900
|
-
Result[1] & AddSelectable
|
|
3901
|
-
] : Result;
|
|
3895
|
+
[K in keyof T['selectable'] | keyof I]: K extends keyof I ? I[K] : T['selectable'][K];
|
|
3896
|
+
} : never;
|
|
3902
3897
|
type SelectAsValueResult<T extends Query, Arg extends SelectAsValue<T>> = Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : Arg extends Expression ? Arg['_type'] : Arg extends (q: never) => infer R ? R extends QueryBase ? SelectSubQueryResult<R> : R extends Expression ? R['_type'] : R extends QueryBase | Expression ? SelectSubQueryResult<Exclude<R, Expression>> | Exclude<R, QueryBase>['_type'] : never : never;
|
|
3903
3898
|
type SelectSubQueryResult<Arg extends QueryBase> = QueryReturnsAll<Arg['returnType']> extends true ? ArrayOfColumnsObjects<Arg['result']> : Arg['returnType'] extends 'valueOrThrow' ? Arg['result']['value'] : Arg['returnType'] extends 'pluck' ? PluckResultColumnType<Arg['result']['pluck']> : Arg extends {
|
|
3904
3899
|
relationConfig: {
|
|
@@ -3914,7 +3909,7 @@ declare class Select {
|
|
|
3914
3909
|
/**
|
|
3915
3910
|
* Takes a list of columns to be selected, and by default, the query builder will select all columns of the table.
|
|
3916
3911
|
*
|
|
3917
|
-
*
|
|
3912
|
+
* The last argument can be an object. Keys of the object are column aliases, value can be a column name, sub-query, or raw SQL expression.
|
|
3918
3913
|
*
|
|
3919
3914
|
* ```ts
|
|
3920
3915
|
* // select columns of the table:
|
|
@@ -3967,8 +3962,10 @@ declare class Select {
|
|
|
3967
3962
|
* .where({ 'author.isPopular': true });
|
|
3968
3963
|
* ```
|
|
3969
3964
|
*/
|
|
3970
|
-
select<T extends Query,
|
|
3971
|
-
|
|
3965
|
+
select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
|
|
3966
|
+
select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
|
|
3967
|
+
_select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
|
|
3968
|
+
_select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
|
|
3972
3969
|
/**
|
|
3973
3970
|
* When querying the table or creating records, all columns are selected by default,
|
|
3974
3971
|
* but updating and deleting queries are returning affected row counts by default.
|
package/dist/index.js
CHANGED
|
@@ -6013,76 +6013,18 @@ const maybeUnNameColumn = (column, isSubQuery) => {
|
|
|
6013
6013
|
return isSubQuery && column.data.name ? orchidCore.setColumnData(column, "name", void 0) : column;
|
|
6014
6014
|
};
|
|
6015
6015
|
class Select {
|
|
6016
|
-
|
|
6017
|
-
* Takes a list of columns to be selected, and by default, the query builder will select all columns of the table.
|
|
6018
|
-
*
|
|
6019
|
-
* Pass an object to select columns with aliases. Keys of the object are column aliases, value can be a column name, sub-query, or raw expression.
|
|
6020
|
-
*
|
|
6021
|
-
* ```ts
|
|
6022
|
-
* // select columns of the table:
|
|
6023
|
-
* db.table.select('id', 'name', { idAlias: 'id' });
|
|
6024
|
-
*
|
|
6025
|
-
* // accepts columns with table names:
|
|
6026
|
-
* db.table.select('user.id', 'user.name', { nameAlias: 'user.name' });
|
|
6027
|
-
*
|
|
6028
|
-
* // table name may refer to the current table or a joined table:
|
|
6029
|
-
* db.table
|
|
6030
|
-
* .join(Message, 'authorId', 'id')
|
|
6031
|
-
* .select('user.name', 'message.text', { textAlias: 'message.text' });
|
|
6032
|
-
*
|
|
6033
|
-
* // select value from the sub-query,
|
|
6034
|
-
* // this sub-query should return a single record and a single column:
|
|
6035
|
-
* db.table.select({
|
|
6036
|
-
* subQueryResult: Otherdb.table.select('column').take(),
|
|
6037
|
-
* });
|
|
6038
|
-
*
|
|
6039
|
-
* // select raw SQL value, the first argument of `raw` is a column type, it is used for return type of the query
|
|
6040
|
-
* db.table.select({
|
|
6041
|
-
* raw: db.table.sql((t) => t.integer())`1 + 2`,
|
|
6042
|
-
* });
|
|
6043
|
-
*
|
|
6044
|
-
* // same raw SQL query as above, but raw value is returned from a callback
|
|
6045
|
-
* db.table.select({
|
|
6046
|
-
* raw: (q) => q.sql((t) => t.integer())`1 + 2`,
|
|
6047
|
-
* });
|
|
6048
|
-
* ```
|
|
6049
|
-
*
|
|
6050
|
-
* When you use the ORM and defined relations, `select` can also accept callbacks with related table queries:
|
|
6051
|
-
*
|
|
6052
|
-
* ```ts
|
|
6053
|
-
* await db.author.select({
|
|
6054
|
-
* allBooks: (q) => q.books,
|
|
6055
|
-
* firstBook: (q) => q.books.order({ createdAt: 'ASC' }).take(),
|
|
6056
|
-
* booksCount: (q) => q.books.count(),
|
|
6057
|
-
* });
|
|
6058
|
-
* ```
|
|
6059
|
-
*
|
|
6060
|
-
* When you're selecting a relation that's connected via `belongsTo` or `hasOne`, it becomes available to use in `order` or in `where`:
|
|
6061
|
-
*
|
|
6062
|
-
* ```ts
|
|
6063
|
-
* // select books with their authors included, order by author name and filter by author column:
|
|
6064
|
-
* await db.books
|
|
6065
|
-
* .select({
|
|
6066
|
-
* author: (q) => q.author,
|
|
6067
|
-
* })
|
|
6068
|
-
* .order('author.name')
|
|
6069
|
-
* .where({ 'author.isPopular': true });
|
|
6070
|
-
* ```
|
|
6071
|
-
*/
|
|
6016
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6072
6017
|
select(...args) {
|
|
6073
6018
|
return this.clone()._select(...args);
|
|
6074
6019
|
}
|
|
6020
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6075
6021
|
_select(...args) {
|
|
6076
6022
|
if (!args.length) {
|
|
6077
6023
|
return this;
|
|
6078
6024
|
}
|
|
6079
6025
|
const as = this.q.as || this.table;
|
|
6080
6026
|
const selectArgs = args.map((item) => processSelectArg(this, as, item));
|
|
6081
|
-
return pushQueryArray(
|
|
6082
|
-
this,
|
|
6083
|
-
"select",
|
|
6084
|
-
selectArgs
|
|
6085
|
-
);
|
|
6027
|
+
return pushQueryArray(this, "select", selectArgs);
|
|
6086
6028
|
}
|
|
6087
6029
|
/**
|
|
6088
6030
|
* When querying the table or creating records, all columns are selected by default,
|