pqb 0.35.6 → 0.36.0

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
@@ -5057,9 +5057,14 @@ type SelectArgs<T extends SelectSelf> = ('*' | keyof T['meta']['selectable'])[];
5057
5057
  interface SelectAsArg<T extends SelectSelf> {
5058
5058
  [K: string]: keyof T['meta']['selectable'] | Expression | ((q: {
5059
5059
  [K in keyof T]: K extends keyof T['relations'] ? T[K] extends (...args: any[]) => any ? ReturnType<T[K]> : never : T[K];
5060
- }) => (QueryBase & {
5061
- returnType: Exclude<QueryReturnType, 'rows'>;
5062
- }) | Expression);
5060
+ }) => unknown);
5061
+ }
5062
+ type SelectAsFnReturnType = {
5063
+ result: QueryColumns;
5064
+ returnType: Exclude<QueryReturnType, 'rows'>;
5065
+ } | Expression;
5066
+ interface SelectAsCheckReturnTypes {
5067
+ [K: string]: PropertyKey | Expression | ((q: never) => SelectAsFnReturnType);
5063
5068
  }
5064
5069
  type SelectResult<T extends SelectSelf, Columns extends PropertyKey[]> = {
5065
5070
  [K in keyof T]: K extends 'result' ? ('*' extends Columns[number] ? {
@@ -5072,7 +5077,7 @@ type SelectResult<T extends SelectSelf, Columns extends PropertyKey[]> = {
5072
5077
  [K in Columns[number] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
5073
5078
  }) & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown)>> : T[K];
5074
5079
  } & QueryMetaHasSelect;
5075
- type SelectResultObj<T extends SelectSelf, Obj> = {
5080
+ type SelectResultObj<T extends SelectSelf, Obj> = Obj extends SelectAsCheckReturnTypes ? {
5076
5081
  [K in keyof T]: K extends 'meta' ? T['meta'] & {
5077
5082
  hasSelect: true;
5078
5083
  selectable: SelectAsSelectable<Obj>;
@@ -5081,7 +5086,9 @@ type SelectResultObj<T extends SelectSelf, Obj> = {
5081
5086
  } : K extends 'then' ? QueryThen<GetQueryResult<T, {
5082
5087
  [K in T['meta']['hasSelect'] extends true ? keyof Obj | keyof T['result'] : keyof Obj]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : K extends keyof T['result'] ? T['result'][K] : never;
5083
5088
  }>> : T[K];
5084
- };
5089
+ } : `Invalid return type of ${{
5090
+ [K in keyof Obj]: Obj[K] extends (...args: any[]) => any ? ReturnType<Obj[K]> extends SelectAsFnReturnType ? never : K : never;
5091
+ }[keyof Obj] & string}`;
5085
5092
  type SelectResultColumnsAndObj<T extends SelectSelf, Columns extends PropertyKey[], Obj> = {
5086
5093
  [K in keyof T]: K extends 'meta' ? T['meta'] & {
5087
5094
  hasSelect: true;
@@ -7355,7 +7362,10 @@ interface ColumnData extends ColumnDataBase {
7355
7362
  compression?: string;
7356
7363
  foreignKeys?: TableData.ColumnReferences[];
7357
7364
  identity?: TableData.Identity;
7358
- generated?: RawSQLBase;
7365
+ generated?(ctx: {
7366
+ values: unknown[];
7367
+ snakeCase: boolean | undefined;
7368
+ }, quotedAs?: string): string;
7359
7369
  }
7360
7370
  interface ColumnFromDbParams {
7361
7371
  isNullable?: boolean;
package/dist/index.js CHANGED
@@ -380,7 +380,8 @@ class ColumnType extends orchidCore.ColumnTypeBase {
380
380
  * @param args - raw SQL
381
381
  */
382
382
  generated(...args) {
383
- return orchidCore.setColumnData(this, "generated", raw(...args));
383
+ const sql = raw(...args);
384
+ return orchidCore.setColumnData(this, "generated", (...args2) => sql.toSQL(...args2));
384
385
  }
385
386
  }
386
387
 
@@ -461,6 +462,10 @@ const columnsShapeToCode = (shape, t) => {
461
462
  for (const key in shape) {
462
463
  if (hasTimestamps && (key === "createdAt" || key === "updatedAt"))
463
464
  continue;
465
+ const column = shape[key];
466
+ const name = column.data.name;
467
+ if (name === key)
468
+ column.data.name = void 0;
464
469
  code.push(
465
470
  ...combineCodeElements([
466
471
  `${orchidCore.quoteObjectKey(key)}: `,
@@ -468,6 +473,8 @@ const columnsShapeToCode = (shape, t) => {
468
473
  ","
469
474
  ])
470
475
  );
476
+ if (name === key)
477
+ column.data.name = name;
471
478
  }
472
479
  if (hasTimestamps) {
473
480
  code.push(`...${t}.timestamps(),`);
@@ -1517,26 +1524,33 @@ class TsVectorColumn extends ColumnType {
1517
1524
  * @param args
1518
1525
  */
1519
1526
  generated(...args) {
1520
- const first = args[0];
1521
- if (typeof first === "string" || !("raw" in first)) {
1522
- const target = typeof first === "string" ? args[1] : first;
1523
- const language = typeof first === "string" ? first : this.defaultLanguage;
1524
- let sql;
1525
- if (Array.isArray(target)) {
1526
- const columns = target.length === 1 ? `"${target[0]}"` : target.map((column) => `coalesce("${column}", '')`).join(` || ' ' || `);
1527
- sql = `to_tsvector('${language}', ${columns})`;
1528
- } else {
1529
- for (const key in target) {
1530
- sql = (sql ? sql + " || " : "(") + `setweight(to_tsvector('${language}', coalesce("${key}", '')), '${target[key]}')`;
1527
+ return orchidCore.setColumnData(this, "generated", (ctx, quotedAs) => {
1528
+ const first = args[0];
1529
+ if (typeof first === "string" || !("raw" in first)) {
1530
+ const target = typeof first === "string" ? args[1] : first;
1531
+ const language = typeof first === "string" ? first : this.defaultLanguage;
1532
+ const { snakeCase } = ctx;
1533
+ let sql;
1534
+ if (Array.isArray(target)) {
1535
+ const columns = target.length === 1 ? `"${snakeCase ? orchidCore.toSnakeCase(target[0]) : target[0]}"` : target.map(
1536
+ (column) => `coalesce("${snakeCase ? orchidCore.toSnakeCase(column) : column}", '')`
1537
+ ).join(` || ' ' || `);
1538
+ sql = `to_tsvector('${language}', ${columns})`;
1539
+ } else {
1540
+ for (const key in target) {
1541
+ sql = (sql ? sql + " || " : "(") + `setweight(to_tsvector('${language}', coalesce("${snakeCase ? orchidCore.toSnakeCase(key) : key}", '')), '${target[key]}')`;
1542
+ }
1543
+ if (sql) {
1544
+ sql += ")";
1545
+ } else {
1546
+ throw new Error("Empty target in the text search generated column");
1547
+ }
1531
1548
  }
1532
- if (sql)
1533
- sql += ")";
1549
+ return sql;
1550
+ } else {
1551
+ return raw(...args).toSQL(ctx, quotedAs);
1534
1552
  }
1535
- const arr = [sql];
1536
- arr.raw = arr;
1537
- args = [arr];
1538
- }
1539
- return super.generated(...args);
1553
+ });
1540
1554
  }
1541
1555
  }
1542
1556
  class TsQueryColumn extends ColumnType {