pqb 0.18.22 → 0.18.23

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
@@ -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,24 @@ 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
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];
3870
+ type SelectResult<T extends Query, Columns extends SelectArg<T>[], Result extends ColumnsShapeBase = {
3871
+ [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;
3872
+ }, Data = GetQueryResult<T['returnType'], Result>> = {
3873
+ [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];
3874
+ };
3875
+ type SelectResultWithObj<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>, Result extends ColumnsShapeBase = {
3876
+ [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;
3877
+ }, Data = GetQueryResult<T['returnType'], Result>> = {
3878
+ [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
3879
  };
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;
3880
+ type PrevResultKeys<T extends Query> = T['meta']['hasSelect'] extends true ? keyof T['result'] : never;
3881
+ type SetMetaHasSelect<T extends Query> = T['meta']['hasSelect'] extends true ? T['meta'] : {
3882
+ [K in keyof T['meta'] | 'hasSelect']: K extends 'hasSelect' ? true : T['meta'][K];
3885
3883
  };
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 = {
3884
+ type SelectAsSelectable<T extends Query, Arg extends SelectAsArg<T>> = {
3888
3885
  [K in keyof Arg]: Arg[K] extends ((q: never) => infer R extends QueryBase) ? (x: {
3889
3886
  [C in keyof R['result'] as `${StringKey<K>}.${StringKey<C>}`]: {
3890
3887
  as: C;
@@ -3892,13 +3889,8 @@ type SelectAsResult<T extends Query, Arg, Result extends SelectObjectResultTuple
3892
3889
  };
3893
3890
  }) => void : never;
3894
3891
  }[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;
3892
+ [K in keyof T['selectable'] | keyof I]: K extends keyof I ? I[K] : T['selectable'][K];
3893
+ } : never;
3902
3894
  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
3895
  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
3896
  relationConfig: {
@@ -3914,7 +3906,7 @@ declare class Select {
3914
3906
  /**
3915
3907
  * Takes a list of columns to be selected, and by default, the query builder will select all columns of the table.
3916
3908
  *
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.
3909
+ * 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
3910
  *
3919
3911
  * ```ts
3920
3912
  * // select columns of the table:
@@ -3967,8 +3959,10 @@ declare class Select {
3967
3959
  * .where({ 'author.isPopular': true });
3968
3960
  * ```
3969
3961
  */
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>;
3962
+ select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
3963
+ select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
3964
+ _select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
3965
+ _select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
3972
3966
  /**
3973
3967
  * When querying the table or creating records, all columns are selected by default,
3974
3968
  * 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,