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 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'] & Q['selectable'] : K extends 'windows' ? MergeObjects<T['windows'], Q['windows']> : K extends 'withData' ? MergeObjects<T['withData'], Q['withData']> : T[K];
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> = '*' | StringKey<keyof T['selectable']> | SelectAsArg<T>;
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) | ((q: T) => Expression) | ((q: T) => QueryBase | Expression);
3870
- type SelectObjectResultTuple = [ColumnsShapeBase, SelectableBase];
3871
- type SelectResult<T extends Query, Args extends SelectArg<T>[], SelectStringsResult extends ColumnsShapeBase = SelectStringArgsResult<T, Args>, StringsKeys extends keyof SelectStringsResult = keyof SelectStringsResult, SelectAsResult extends SelectObjectResultTuple = SpreadSelectObjectArgs<T, Args, [
3872
- EmptyObject,
3873
- T['selectable']
3874
- ]>, AsKeys extends keyof SelectAsResult[0] = keyof SelectAsResult[0], ResultKeys extends keyof T['result'] = T['meta']['hasSelect'] extends true ? keyof T['result'] : never, ShapeKeys extends keyof T['shape'] = '*' extends Args[number] ? keyof T['shape'] : never, Result extends ColumnsShapeBase = {
3875
- [K in StringsKeys | AsKeys | ResultKeys | ShapeKeys]: K extends StringsKeys ? SelectStringsResult[K] : K extends AsKeys ? SelectAsResult[0][K] : K extends ResultKeys ? T['result'][K] : K extends ShapeKeys ? T['shape'][K] : never;
3876
- }, Data = GetQueryResult<T['returnType'], Result>> = (T['meta']['hasSelect'] extends true ? unknown : {
3877
- meta: {
3878
- hasSelect: true;
3879
- };
3880
- }) & {
3881
- [K in keyof T]: K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? SelectAsResult[1] : T[K];
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 SelectStringArgsResult<T extends Query, Args extends SelectArg<T>[]> = {
3884
- [Arg in Args[number] as Arg extends keyof T['selectable'] ? T['selectable'][Arg]['as'] : never]: Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : never;
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 SpreadSelectObjectArgs<T extends Query, Args extends [...unknown[]], Result extends SelectObjectResultTuple> = Args extends [infer L, ...infer R] ? SpreadSelectObjectArgs<T, R, SelectAsResult<T, L, Result>> : Result;
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> = Arg extends SelectAsArg<T> ? [
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
- * 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.
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, K extends SelectArg<T>[]>(this: T, ...args: K): SelectResult<T, K>;
3971
- _select<T extends Query, K extends SelectArg<T>[]>(this: T, ...args: K): SelectResult<T, K>;
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,