pqb 0.0.1
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 +3630 -0
- package/dist/index.esm.js +4587 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +4691 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
- package/rollup.config.js +35 -0
- package/src/adapter.test.ts +10 -0
- package/src/adapter.ts +171 -0
- package/src/columnSchema/array.ts +21 -0
- package/src/columnSchema/boolean.ts +10 -0
- package/src/columnSchema/columnType.test.ts +129 -0
- package/src/columnSchema/columnType.ts +77 -0
- package/src/columnSchema/columnTypes.ts +145 -0
- package/src/columnSchema/columnsSchema.test.ts +32 -0
- package/src/columnSchema/columnsSchema.ts +100 -0
- package/src/columnSchema/commonMethods.ts +130 -0
- package/src/columnSchema/dateTime.ts +104 -0
- package/src/columnSchema/enum.ts +13 -0
- package/src/columnSchema/index.ts +11 -0
- package/src/columnSchema/json/array.ts +55 -0
- package/src/columnSchema/json/discriminatedUnion.ts +91 -0
- package/src/columnSchema/json/enum.ts +29 -0
- package/src/columnSchema/json/instanceOf.ts +16 -0
- package/src/columnSchema/json/intersection.ts +23 -0
- package/src/columnSchema/json/lazy.ts +22 -0
- package/src/columnSchema/json/literal.ts +12 -0
- package/src/columnSchema/json/map.ts +29 -0
- package/src/columnSchema/json/nativeEnum.ts +30 -0
- package/src/columnSchema/json/nullable.ts +33 -0
- package/src/columnSchema/json/nullish.ts +30 -0
- package/src/columnSchema/json/object.ts +206 -0
- package/src/columnSchema/json/optional.ts +28 -0
- package/src/columnSchema/json/record.ts +40 -0
- package/src/columnSchema/json/scalarTypes.ts +117 -0
- package/src/columnSchema/json/set.ts +34 -0
- package/src/columnSchema/json/tuple.ts +40 -0
- package/src/columnSchema/json/typeBase.ts +202 -0
- package/src/columnSchema/json/union.ts +16 -0
- package/src/columnSchema/json.ts +64 -0
- package/src/columnSchema/number.ts +122 -0
- package/src/columnSchema/string.ts +222 -0
- package/src/columnSchema/utils.ts +27 -0
- package/src/common.ts +86 -0
- package/src/db.test.ts +67 -0
- package/src/db.ts +212 -0
- package/src/errors.ts +7 -0
- package/src/index.ts +18 -0
- package/src/operators.test.ts +608 -0
- package/src/operators.ts +177 -0
- package/src/query.ts +292 -0
- package/src/queryDataUtils.ts +50 -0
- package/src/queryMethods/aggregate.test.ts +583 -0
- package/src/queryMethods/aggregate.ts +878 -0
- package/src/queryMethods/callbacks.test.ts +69 -0
- package/src/queryMethods/callbacks.ts +55 -0
- package/src/queryMethods/clear.test.ts +64 -0
- package/src/queryMethods/clear.ts +58 -0
- package/src/queryMethods/columnInfo.test.ts +45 -0
- package/src/queryMethods/columnInfo.ts +67 -0
- package/src/queryMethods/delete.test.ts +135 -0
- package/src/queryMethods/delete.ts +50 -0
- package/src/queryMethods/for.test.ts +57 -0
- package/src/queryMethods/for.ts +99 -0
- package/src/queryMethods/from.test.ts +66 -0
- package/src/queryMethods/from.ts +58 -0
- package/src/queryMethods/get.test.ts +66 -0
- package/src/queryMethods/get.ts +88 -0
- package/src/queryMethods/having.test.ts +247 -0
- package/src/queryMethods/having.ts +99 -0
- package/src/queryMethods/insert.test.ts +555 -0
- package/src/queryMethods/insert.ts +453 -0
- package/src/queryMethods/join.test.ts +150 -0
- package/src/queryMethods/join.ts +508 -0
- package/src/queryMethods/json.test.ts +398 -0
- package/src/queryMethods/json.ts +259 -0
- package/src/queryMethods/log.test.ts +172 -0
- package/src/queryMethods/log.ts +123 -0
- package/src/queryMethods/queryMethods.test.ts +629 -0
- package/src/queryMethods/queryMethods.ts +428 -0
- package/src/queryMethods/select.test.ts +479 -0
- package/src/queryMethods/select.ts +249 -0
- package/src/queryMethods/then.ts +236 -0
- package/src/queryMethods/transaction.test.ts +66 -0
- package/src/queryMethods/transaction.ts +66 -0
- package/src/queryMethods/union.test.ts +59 -0
- package/src/queryMethods/union.ts +89 -0
- package/src/queryMethods/update.test.ts +417 -0
- package/src/queryMethods/update.ts +350 -0
- package/src/queryMethods/upsert.test.ts +56 -0
- package/src/queryMethods/upsert.ts +43 -0
- package/src/queryMethods/where.test.ts +1594 -0
- package/src/queryMethods/where.ts +450 -0
- package/src/queryMethods/window.test.ts +66 -0
- package/src/queryMethods/window.ts +108 -0
- package/src/queryMethods/with.test.ts +191 -0
- package/src/queryMethods/with.ts +92 -0
- package/src/quote.ts +36 -0
- package/src/relations.ts +194 -0
- package/src/sql/aggregate.ts +80 -0
- package/src/sql/columnInfo.ts +22 -0
- package/src/sql/common.ts +42 -0
- package/src/sql/delete.ts +41 -0
- package/src/sql/distinct.ts +19 -0
- package/src/sql/fromAndAs.ts +51 -0
- package/src/sql/having.ts +140 -0
- package/src/sql/index.ts +2 -0
- package/src/sql/insert.ts +102 -0
- package/src/sql/join.ts +242 -0
- package/src/sql/orderBy.ts +41 -0
- package/src/sql/select.ts +153 -0
- package/src/sql/toSql.ts +153 -0
- package/src/sql/truncate.ts +13 -0
- package/src/sql/types.ts +355 -0
- package/src/sql/update.ts +62 -0
- package/src/sql/where.ts +314 -0
- package/src/sql/window.ts +38 -0
- package/src/sql/with.ts +32 -0
- package/src/test-utils.ts +172 -0
- package/src/utils.ts +140 -0
- package/tsconfig.build.json +6 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/columnSchema/columnType.ts","../src/common.ts","../src/quote.ts","../src/sql/common.ts","../src/operators.ts","../src/utils.ts","../src/columnSchema/utils.ts","../src/columnSchema/commonMethods.ts","../src/columnSchema/number.ts","../src/columnSchema/string.ts","../src/columnSchema/dateTime.ts","../src/columnSchema/boolean.ts","../src/columnSchema/enum.ts","../src/columnSchema/json/optional.ts","../src/columnSchema/json/nullable.ts","../src/columnSchema/json/nullish.ts","../src/columnSchema/json/intersection.ts","../src/columnSchema/json/array.ts","../src/columnSchema/json/union.ts","../src/columnSchema/json/typeBase.ts","../src/columnSchema/json/scalarTypes.ts","../src/columnSchema/json/discriminatedUnion.ts","../src/columnSchema/json/enum.ts","../src/columnSchema/json/instanceOf.ts","../src/columnSchema/json/lazy.ts","../src/columnSchema/json/literal.ts","../src/columnSchema/json/map.ts","../src/columnSchema/json/nativeEnum.ts","../src/columnSchema/json/object.ts","../src/columnSchema/json/record.ts","../src/columnSchema/json/set.ts","../src/columnSchema/json/tuple.ts","../src/columnSchema/json.ts","../src/columnSchema/array.ts","../src/columnSchema/columnTypes.ts","../src/columnSchema/columnsSchema.ts","../src/sql/distinct.ts","../src/sql/orderBy.ts","../src/sql/window.ts","../src/sql/join.ts","../src/sql/where.ts","../src/sql/aggregate.ts","../src/relations.ts","../src/sql/select.ts","../src/sql/having.ts","../src/sql/with.ts","../src/sql/types.ts","../src/sql/fromAndAs.ts","../src/sql/insert.ts","../src/sql/update.ts","../src/sql/delete.ts","../src/sql/truncate.ts","../src/sql/columnInfo.ts","../src/sql/toSql.ts","../src/adapter.ts","../src/queryDataUtils.ts","../src/errors.ts","../src/queryMethods/then.ts","../src/queryMethods/select.ts","../src/queryMethods/aggregate.ts","../src/queryMethods/from.ts","../src/queryMethods/where.ts","../src/queryMethods/join.ts","../src/queryMethods/with.ts","../src/queryMethods/union.ts","../src/queryMethods/json.ts","../src/queryMethods/insert.ts","../src/queryMethods/update.ts","../src/queryMethods/delete.ts","../src/queryMethods/transaction.ts","../src/queryMethods/for.ts","../src/queryMethods/columnInfo.ts","../src/queryMethods/clear.ts","../src/queryMethods/having.ts","../src/queryMethods/window.ts","../src/queryMethods/log.ts","../src/queryMethods/callbacks.ts","../src/queryMethods/upsert.ts","../src/queryMethods/get.ts","../src/queryMethods/queryMethods.ts","../src/db.ts","../src/query.ts"],"sourcesContent":["import { Operator, Operators } from '../operators';\nimport { EmptyObject } from './utils';\n\nexport type ColumnOutput<T extends ColumnType> = T['type'];\n\nexport type ColumnInput<T extends ColumnType> = T['inputType'];\n\nexport type NullableColumn<T extends ColumnType> = Omit<\n T,\n 'type' | 'operators'\n> & {\n type: T['type'] | null;\n isNullable: true;\n operators: Omit<T['operators'], 'equals' | 'not'> & {\n equals: Operator<T['type'] | null>;\n not: Operator<T['type'] | null>;\n };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyColumnType = ColumnType<any, Record<string, Operator<any>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyColumnTypeCreator = (...args: any[]) => AnyColumnType;\n\nexport abstract class ColumnType<\n Type = unknown,\n Ops extends Operators = Operators,\n InputType = Type,\n> {\n abstract dataType: string;\n abstract operators: Ops;\n\n type!: Type;\n inputType!: InputType;\n data = {} as EmptyObject;\n isPrimaryKey = false;\n isHidden = false;\n isNullable = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n encodeFn?: (input: any) => unknown;\n parseFn?: (input: unknown) => unknown;\n\n primaryKey<T extends ColumnType>(this: T): T & { isPrimaryKey: true } {\n return Object.assign(this, { isPrimaryKey: true as const });\n }\n\n hidden<T extends ColumnType>(this: T): T & { isHidden: true } {\n return Object.assign(this, { isHidden: true as const });\n }\n\n nullable<T extends ColumnType>(this: T): NullableColumn<T> {\n this.isNullable = true;\n return this as unknown as NullableColumn<T>;\n }\n\n encode<T extends ColumnType, Input>(\n this: T,\n fn: (input: Input) => unknown,\n ): Omit<T, 'inputType'> & { inputType: Input } {\n const self = this as unknown as Omit<T, 'inputType'> & { inputType: Input };\n self.encodeFn = fn;\n return self;\n }\n\n parse<T extends ColumnType, Output>(\n this: T,\n fn: (input: T['type']) => Output,\n ): Omit<T, 'type'> & { type: Output } {\n this.parseFn = fn;\n return this as unknown as Omit<T, 'type'> & { type: Output };\n }\n\n toSQL() {\n return this.dataType;\n }\n}\n","import { Query, Selectable } from './query';\nimport { ColumnOutput, ColumnType } from './columnSchema';\n\nexport type AliasOrTable<T extends Pick<Query, 'tableAlias' | 'table'>> =\n T['tableAlias'] extends string\n ? T['tableAlias']\n : T['table'] extends string\n ? T['table']\n : never;\n\nexport type StringKey<K extends PropertyKey> = Exclude<K, symbol | number>;\n\nexport type RawExpression<C extends ColumnType = ColumnType> = {\n __raw: string;\n __values: unknown[];\n __column: C;\n};\n\nexport type Expression<\n T extends Query = Query,\n C extends ColumnType = ColumnType,\n> = keyof T['selectable'] | RawExpression<C>;\n\nexport type ExpressionOfType<T extends Query, C extends ColumnType, Type> =\n | {\n [K in keyof T['selectable']]: ColumnOutput<\n T['selectable'][K]['column']\n > extends Type | null\n ? K\n : never;\n }[Selectable<T>]\n | RawExpression<C>;\n\nexport type NumberExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, number>;\n\nexport type StringExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, string>;\n\nexport type BooleanExpression<\n T extends Query,\n C extends ColumnType = ColumnType,\n> = ExpressionOfType<T, C, boolean>;\n\nexport type ExpressionOutput<\n T extends Query,\n Expr extends Expression<T>,\n> = Expr extends keyof T['selectable']\n ? T['selectable'][Expr]['column']\n : Expr extends RawExpression<infer ColumnType>\n ? ColumnType\n : never;\n\nexport const raw = <C extends ColumnType>(sql: string, ...values: unknown[]) =>\n ({\n __raw: sql,\n __values: values,\n } as RawExpression<C>);\n\nexport const rawColumn = <C extends ColumnType>(\n column: C,\n sql: string,\n ...values: unknown[]\n) =>\n ({\n __column: column,\n __raw: sql,\n __values: values,\n } as RawExpression<C>);\n\nexport const isRaw = (obj: object): obj is RawExpression => '__raw' in obj;\n\nexport const getRaw = (raw: RawExpression, values: unknown[]) => {\n values.push(...raw.__values);\n return raw.__raw;\n};\n\nexport const EMPTY_OBJECT = {};\n\nexport const getQueryParsers = (q: Query) => {\n return q.query.parsers || q.columnsParsers;\n};\n","const singleQuoteRegex = /'/g;\nconst doubleQuoteRegex = /\"/g;\n\n// eslint-disable-next-line\ntype Value = any\n\nconst quoteValue = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return String(value);\n else if (type === 'string')\n return `\"${(value as string)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `\"${value.toISOString()}\"`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (type === null || type === undefined) return 'NULL';\n else\n return `\"${JSON.stringify(value)\n .replace(doubleQuoteRegex, '\\\\\"')\n .replace(singleQuoteRegex, \"''\")}\"`;\n};\n\nconst quoteArray = (array: Value[]) => `'{${array.map(quoteValue).join(',')}}'`;\n\nexport const quote = (value: Value): string => {\n const type = typeof value;\n if (type === 'number') return `${value}`;\n else if (type === 'string')\n return `'${(value as string).replace(singleQuoteRegex, \"''\")}'`;\n else if (type === 'boolean') return value ? 'true' : 'false';\n else if (value instanceof Date) return `'${value.toISOString()}'`;\n else if (Array.isArray(value)) return quoteArray(value);\n else if (value === null || value === undefined) return 'NULL';\n else return `'${JSON.stringify(value).replace(singleQuoteRegex, \"''\")}'`;\n};\n","// quote table or column\nimport { Query } from '../query';\nimport { Expression, getRaw, isRaw } from '../common';\n\nexport const q = (sql: string) => `\"${sql}\"`;\n\n// quote column with table or as\nexport const qc = (column: string, quotedAs?: string) =>\n quotedAs ? `${quotedAs}.${q(column)}` : column;\n\nexport const quoteFullColumn = (fullColumn: string, quotedAs?: string) => {\n const index = fullColumn.indexOf('.');\n if (index !== -1) {\n return `${q(fullColumn.slice(0, index))}.${q(fullColumn.slice(index + 1))}`;\n } else if (quotedAs) {\n return `${quotedAs}.${q(fullColumn)}`;\n } else {\n return q(fullColumn);\n }\n};\n\nexport const expressionToSql = <T extends Query>(\n expr: Expression<T>,\n values: unknown[],\n quotedAs?: string,\n) => {\n return typeof expr === 'object' && isRaw(expr)\n ? getRaw(expr, values)\n : quoteFullColumn(expr as string, quotedAs);\n};\n\nexport const quoteSchemaAndTable = (\n schema: string | undefined,\n table: string,\n) => {\n return schema ? `${q(schema)}.${q(table)}` : q(table);\n};\n\nexport const addValue = (values: unknown[], value: unknown) => {\n values.push(value);\n return `$${values.length}`;\n};\n","import { Query } from './query';\nimport { getRaw, isRaw, RawExpression } from './common';\nimport { quote } from './quote';\nimport { addValue } from './sql/common';\n\ntype Fn<T> = (key: string, value: T, values: unknown[]) => string;\n\nexport type Operator<T> = Fn<T> & { type: T };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Operators = Record<string, Operator<any>>;\n\nexport const createOperator = <T>(fn: Fn<T>) => {\n return Object.assign(fn, { type: undefined as unknown as T });\n};\n\nconst quoteValue = (\n arg: unknown,\n values: unknown[],\n jsonArray?: boolean,\n): string => {\n if (arg && typeof arg === 'object') {\n if (!jsonArray && Array.isArray(arg)) {\n return `(${arg.map((value) => addValue(values, value)).join(', ')})`;\n }\n\n if ('toSql' in arg) {\n const sql = (arg as Query).toSql(values);\n return `(${sql.text})`;\n }\n\n if (isRaw(arg)) {\n return getRaw(arg, values);\n }\n }\n\n return addValue(values, arg);\n};\n\nconst all = {\n equals: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NULL`\n : `${key} = ${quoteValue(value, values)}`,\n ),\n not: <T>() =>\n createOperator<T | Query | RawExpression>((key, value, values) =>\n value === null\n ? `${key} IS NOT NULL`\n : `${key} <> ${quoteValue(value, values)}`,\n ),\n in: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `${key} IN ${quoteValue(value, values)}`,\n ),\n notIn: <T>() =>\n createOperator<T[] | Query | RawExpression>(\n (key, value, values) => `NOT ${key} IN ${quoteValue(value, values)}`,\n ),\n lt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} < ${quoteValue(value, values)}`,\n ),\n lte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <= ${quoteValue(value, values)}`,\n ),\n gt: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} > ${quoteValue(value, values)}`,\n ),\n gte: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} >= ${quoteValue(value, values)}`,\n ),\n contains: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} LIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n containsInsensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)} || '%'`,\n ),\n startsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE ${quoteValue(value, values)} || '%'`,\n ),\n startsWithInsensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE ${quoteValue(value, values)} || '%'`,\n ),\n endsWith: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} LIKE '%' || ${quoteValue(value, values)}`,\n ),\n endsWithInsensitive: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) =>\n `${key} ILIKE '%' || ${quoteValue(value, values)}`,\n ),\n between: <T>() =>\n createOperator<[T | Query | RawExpression, T | Query | RawExpression]>(\n (key, [from, to], values) =>\n `${key} BETWEEN ${quoteValue(from, values)} AND ${quoteValue(\n to,\n values,\n )}`,\n ),\n jsonPath: <T>() =>\n createOperator<\n [path: string, op: string, value: T | Query | RawExpression]\n >(\n (key, [path, op, value], values) =>\n `jsonb_path_query_first(${key}, ${quote(\n path,\n )}) #>> '{}' ${op} ${quoteValue(value, values, true)}`,\n ),\n jsonSupersetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} @> ${quoteValue(value, values, true)}`,\n ),\n jsonSubsetOf: <T>() =>\n createOperator<T | Query | RawExpression>(\n (key, value, values) => `${key} <@ ${quoteValue(value, values, true)}`,\n ),\n};\n\nconst base = <T>() => ({\n equals: all.equals<T>(),\n not: all.not<T>(),\n in: all.in<T>(),\n notIn: all.notIn<T>(),\n});\n\nconst numeric = <T>() => ({\n ...base<T>(),\n lt: all.lt<T>(),\n lte: all.lte<T>(),\n gt: all.gt<T>(),\n gte: all.gte<T>(),\n between: all.between<T>(),\n});\n\nconst text = <T>() => ({\n ...base<T>(),\n contains: all.contains<T>(),\n containsInsensitive: all.containsInsensitive<T>(),\n startsWith: all.startsWith<T>(),\n startsWithInsensitive: all.startsWithInsensitive<T>(),\n endsWith: all.endsWith<T>(),\n endsWithInsensitive: all.endsWithInsensitive<T>(),\n});\n\nconst json = <T>() => ({\n ...base<T>(),\n jsonPath: all.jsonPath<T>(),\n jsonSupersetOf: all.jsonSupersetOf<T>(),\n jsonSubsetOf: all.jsonSubsetOf<T>(),\n});\n\nexport const Operators = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any: base<any>(),\n boolean: base<boolean>(),\n number: numeric<number>(),\n date: numeric<Date>(),\n time: numeric<Date>(),\n text: text<string>(),\n json: json<unknown>(),\n // TODO: array operators\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n array: base<any>(),\n};\n","import { RawExpression } from './common';\nimport { QueryData } from './sql';\n\nexport type MaybeArray<T> = T | T[];\n\nexport type SetOptional<T, K extends PropertyKey> = Omit<T, K> & {\n [P in K]?: P extends keyof T ? T[P] : never;\n};\n\nexport type GetTypesOrRaw<T extends [...unknown[]]> = T extends [\n infer Head,\n ...infer Tail,\n]\n ? [GetTypeOrRaw<Head>, ...GetTypesOrRaw<Tail>]\n : [];\n\nexport type GetTypeOrRaw<T> = T | RawExpression;\n\n// credits goes to https://stackoverflow.com/a/50375286\nexport type UnionToIntersection<U> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (U extends any ? (k: U) => void : never) extends (k: infer I) => void\n ? I\n : never;\n\n// Converts union to overloaded function\nexport type UnionToOvlds<U> = UnionToIntersection<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n U extends any ? (f: U) => void : never\n>;\n\ntype PopPropertyKeyUnion<U> = UnionToOvlds<U> extends (\n a: infer A extends PropertyKey,\n) => void\n ? A\n : never;\n\ntype IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;\n\nexport type PropertyKeyUnionToArray<\n T,\n A extends PropertyKey[] = [],\n> = IsUnion<T> extends true\n ? PropertyKeyUnionToArray<\n Exclude<T, PopPropertyKeyUnion<T>>,\n [PopPropertyKeyUnion<T>, ...A]\n >\n : [T, ...A];\n\ntype OptionalPropertyNames<T> = {\n // eslint-disable-next-line @typescript-eslint/ban-types\n [K in keyof T]-?: {} extends { [P in K]: T[K] } ? K : never;\n}[keyof T];\n\ntype SpreadProperties<L, R, K extends keyof L & keyof R> = {\n [P in K]: L[P] | Exclude<R[P], undefined>;\n};\n\ntype Id<T> = T extends infer U ? { [K in keyof U]: U[K] } : never;\n\ntype SpreadTwo<L, R> = Id<\n Pick<L, Exclude<keyof L, keyof R>> &\n Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> &\n Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> &\n SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Spread<A extends readonly [...any]> = A extends [\n infer L,\n ...infer R,\n]\n ? SpreadTwo<L, Spread<R>>\n : unknown;\n\nexport type SimpleSpread<A extends readonly [...any]> = A extends [\n infer L,\n ...infer R,\n]\n ? L & SimpleSpread<R>\n : // eslint-disable-next-line @typescript-eslint/ban-types\n {};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FilterTuple<T extends readonly any[], E> = T extends [\n infer F,\n ...infer R,\n]\n ? [F] extends [E]\n ? [F, ...FilterTuple<R, E>]\n : FilterTuple<R, E>\n : [];\n\nexport type CoalesceString<\n Left extends string | undefined,\n Right extends string,\n> = Left extends undefined ? Right : Left;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function applyMixins(derivedCtor: any, constructors: any[]) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n}\n\nexport const joinTruthy = (...strings: (string | false | undefined)[]) => {\n return strings.filter((string) => string).join('');\n};\n\nexport const getClonedQueryData = (query: QueryData): QueryData => {\n const cloned = { ...query };\n\n for (const key in query) {\n if (Array.isArray(query[key as keyof QueryData])) {\n (cloned as Record<string, unknown>)[key] = [\n ...(query[key as keyof QueryData] as unknown[]),\n ];\n }\n }\n\n return cloned;\n};\n\nexport const getQueryAs = (q: { table?: string; query: { as?: string } }) => {\n return q.query.as || (q.table as string);\n};\n\nexport const toArray = <T>(item: T) =>\n (Array.isArray(item) ? item : [item]) as unknown as T extends unknown[]\n ? T\n : [T];\n\nexport const noop = () => {};\n","export type EmptyObject = Record<never, never>;\n\nexport const cloneInstance = <T>(instance: T): T => {\n return Object.assign(\n Object.create(Object.getPrototypeOf(instance)),\n instance,\n );\n};\n\nexport const assignMethodsToClass = <Methods extends Record<string, unknown>>(\n klass: { prototype: unknown },\n methods: Methods,\n) => {\n for (const name in methods) {\n Object.defineProperty(klass.prototype, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value(...args: unknown[]) {\n const cloned = cloneInstance(this);\n return (\n methods as unknown as Record<string, (...args: unknown[]) => unknown>\n )[name].call(cloned, args);\n },\n });\n }\n};\n","import { BaseStringData } from './string';\nimport { BaseNumberData } from './number';\n\nexport type ArrayMethods = typeof arrayMethods;\n\nexport const arrayMethods = {\n min<T extends { data: { min?: number } }, Value extends number>(\n this: T,\n value: Value,\n ) {\n this.data.min = value;\n return this as T & { data: Omit<T['data'], 'min'> & { min: Value } };\n },\n\n max<T extends { data: { max?: number } }, Value extends number>(\n this: T,\n value: Value,\n ) {\n this.data.max = value;\n return this as T & { data: Omit<T['data'], 'max'> & { max: Value } };\n },\n\n length<T extends { data: { length?: number } }, Value extends number>(\n this: T,\n value: Value,\n ) {\n this.data.length = value;\n return this as T & { data: Omit<T['data'], 'length'> & { length: Value } };\n },\n};\n\nexport const stringTypeMethods = <Base extends { data: BaseStringData }>() => ({\n ...arrayMethods,\n\n email<T extends Base>(this: T) {\n this.data.email = true;\n return this as T & { data: Omit<T['data'], 'email'> & { email: true } };\n },\n\n url<T extends Base>(this: T) {\n this.data.url = true;\n return this as T & { data: Omit<T['data'], 'url'> & { url: true } };\n },\n\n uuid<T extends Base>(this: T) {\n this.data.uuid = true;\n return this as T & { data: Omit<T['data'], 'uuid'> & { uuid: true } };\n },\n\n cuid<T extends Base>(this: T) {\n this.data.cuid = true;\n return this as T & { data: Omit<T['data'], 'cuid'> & { cuid: true } };\n },\n\n regex<T extends Base, Value extends RegExp>(this: T, value: Value) {\n this.data.regex = value;\n return this as T & { data: Omit<T['data'], 'regex'> & { regex: Value } };\n },\n\n trim<T extends Base>(this: T) {\n this.data.trim = true;\n return this as T & { data: Omit<T['data'], 'cuid'> & { trim: true } };\n },\n});\n\nexport const numberTypeMethods = <Base extends { data: BaseNumberData }>() => ({\n lt<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.lt = value;\n return this as T & { data: Omit<T['data'], 'lt'> & { lt: Value } };\n },\n\n lte<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.lte = value;\n return this as T & { data: Omit<T['data'], 'lte'> & { lte: Value } };\n },\n\n max<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.lte = value;\n return this as T & { data: Omit<T['data'], 'lte'> & { lte: Value } };\n },\n\n gt<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.gt = value;\n return this as T & { data: Omit<T['data'], 'gt'> & { gt: Value } };\n },\n\n gte<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.gte = value;\n return this as T & { data: Omit<T['data'], 'gte'> & { gte: Value } };\n },\n\n min<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.gte = value;\n return this as T & { data: Omit<T['data'], 'gte'> & { gte: Value } };\n },\n\n positive<T extends Base>(this: T) {\n this.data.gt = 0;\n return this as T & { data: Omit<T['data'], 'gt'> & { gt: 0 } };\n },\n\n nonNegative<T extends Base>(this: T) {\n this.data.gte = 0;\n return this as T & { data: Omit<T['data'], 'gte'> & { gte: 0 } };\n },\n\n negative<T extends Base>(this: T) {\n this.data.lt = 0;\n return this as T & { data: Omit<T['data'], 'lt'> & { lt: 0 } };\n },\n\n nonPositive<T extends Base>(this: T) {\n this.data.lte = 0;\n return this as T & { data: Omit<T['data'], 'lte'> & { lte: 0 } };\n },\n\n multipleOf<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.multipleOf = value;\n return this as T & {\n data: Omit<T['data'], 'multipleOf'> & { multipleOf: Value };\n };\n },\n\n step<T extends Base, Value extends number>(this: T, value: Value) {\n this.data.multipleOf = value;\n return this as T & {\n data: Omit<T['data'], 'multipleOf'> & { multipleOf: Value };\n };\n },\n});\n","import { Operators } from '../operators';\nimport { ColumnType } from './columnType';\nimport { joinTruthy } from '../utils';\nimport { assignMethodsToClass } from './utils';\nimport { numberTypeMethods } from './commonMethods';\n\nexport interface BaseNumberData {\n lt?: number;\n lte?: number;\n gt?: number;\n gte?: number;\n multipleOf?: number;\n}\n\nexport type NumberColumn = ColumnType<number>;\n\nexport type NumberColumnData = BaseNumberData;\n\ntype NumberMethods = typeof numberMethods;\nconst numberMethods = numberTypeMethods<ColumnType>();\n\nexport interface NumberBaseColumn<Type>\n extends ColumnType<Type, typeof Operators.number>,\n NumberMethods {}\n\nexport abstract class NumberBaseColumn<Type> extends ColumnType<\n Type,\n typeof Operators.number\n> {\n data = {} as NumberColumnData;\n operators = Operators.number;\n}\n\nassignMethodsToClass(NumberBaseColumn, numberMethods);\n\nexport interface DecimalColumnData extends NumberColumnData {\n precision?: number;\n scale?: number;\n}\n\nexport class DecimalBaseColumn<\n Type extends number | bigint,\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends NumberBaseColumn<Type> {\n data: DecimalColumnData & { precision: Precision; scale: Scale };\n dataType = 'decimal' as const;\n\n constructor(precision?: Precision, scale?: Scale) {\n super();\n\n this.data = {\n precision,\n scale,\n } as DecimalColumnData & { precision: Precision; scale: Scale };\n }\n\n toSQL() {\n const { precision, scale } = this.data;\n\n return joinTruthy(\n this.dataType,\n precision\n ? scale\n ? `(${precision}, ${scale})`\n : `(${precision})`\n : undefined,\n );\n }\n}\n\n// signed two-byte integer\nexport class SmallIntColumn extends NumberBaseColumn<number> {\n dataType = 'smallint' as const;\n}\n\n// signed four-byte integer\nexport class IntegerColumn extends NumberBaseColumn<number> {\n dataType = 'integer' as const;\n}\n\n// signed eight-byte integer\nexport class BigIntColumn extends NumberBaseColumn<bigint> {\n dataType = 'bigint' as const;\n}\n\n// exact numeric of selectable precision\nexport class DecimalColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends DecimalBaseColumn<number, Precision, Scale> {}\n\n// exact numeric of selectable precision, bigint JS type\nexport class DecimalBigIntColumn<\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n> extends DecimalBaseColumn<bigint, Precision, Scale> {}\n\n// single precision floating-point number (4 bytes)\nexport class RealColumn extends NumberBaseColumn<number> {\n dataType = 'real' as const;\n}\n\n// double precision floating-point number (8 bytes)\nexport class DoublePrecisionColumn extends NumberBaseColumn<bigint> {\n dataType = 'double precision' as const;\n}\n\n// autoincrementing two-byte integer\nexport class SmallSerialColumn extends NumberBaseColumn<number> {\n dataType = 'smallserial' as const;\n}\n\n// autoincrementing four-byte integer\nexport class SerialColumn extends NumberBaseColumn<number> {\n dataType = 'serial' as const;\n}\n\n// autoincrementing eight-byte integer\nexport class BigSerialColumn extends NumberBaseColumn<bigint> {\n dataType = 'bigserial' as const;\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\nimport { joinTruthy } from '../utils';\nimport { NumberBaseColumn } from './number';\nimport { assignMethodsToClass } from './utils';\nimport { stringTypeMethods } from './commonMethods';\n\nexport interface BaseStringData {\n min?: number;\n max?: number;\n length?: number;\n email?: boolean;\n url?: boolean;\n uuid?: boolean;\n cuid?: boolean;\n regex?: RegExp;\n trim?: boolean;\n}\n\nexport type StringColumn = ColumnType<string>;\n\nexport type TextColumnData = BaseStringData;\n\ntype TextMethods = typeof textMethods;\nconst textMethods = stringTypeMethods<ColumnType<string>>();\n\nexport interface TextBaseColumn\n extends ColumnType<string, typeof Operators.text>,\n TextMethods {}\n\nexport abstract class TextBaseColumn extends ColumnType<\n string,\n typeof Operators.text\n> {\n data = {} as TextColumnData;\n operators = Operators.text;\n}\n\nassignMethodsToClass(TextBaseColumn, textMethods);\n\nexport abstract class LimitedTextBaseColumn<\n Limit extends number | undefined = undefined,\n> extends TextBaseColumn {\n data: TextColumnData & { max: Limit };\n\n constructor(limit?: Limit) {\n super();\n\n this.data = { max: limit } as TextColumnData & { max: Limit };\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.max !== undefined && `(${this.data.max})`,\n );\n }\n}\n\n// character varying(n), varchar(n)\tvariable-length with limit\nexport class VarCharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'varchar' as const;\n}\n\n// character(n), char(n)\tfixed-length, blank padded\nexport class CharColumn<\n Limit extends number | undefined = undefined,\n> extends LimitedTextBaseColumn<Limit> {\n dataType = 'char' as const;\n}\n\n// text\tvariable unlimited length\nexport class TextColumn extends ColumnType<string> {\n dataType = 'text' as const;\n operators = Operators.text;\n}\n\n// To store binary strings\nexport class ByteaColumn extends NumberBaseColumn<string> {\n dataType = 'bytea' as const;\n}\n\n// point\t16 bytes\tPoint on a plane\t(x,y)\nexport class PointColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// line\t32 bytes\tInfinite line\t{A,B,C}\nexport class LineColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// lseg\t32 bytes\tFinite line segment\t((x1,y1),(x2,y2))\nexport class LsegColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// box\t32 bytes\tRectangular box\t((x1,y1),(x2,y2))\nexport class BoxColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// path\t16+16n bytes\tClosed path (similar to polygon)\t((x1,y1),...)\n// path\t16+16n bytes\tOpen path\t[(x1,y1),...]\nexport class PathColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// polygon\t40+16n bytes\tPolygon (similar to closed path)\t((x1,y1),...)\nexport class PolygonColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\n// circle\t24 bytes\tCircle\t<(x,y),r> (center point and radius)\nexport class CircleColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'point' as const;\n operators = Operators.text;\n}\n\nexport class MoneyColumn extends NumberBaseColumn<string> {\n dataType = 'money' as const;\n}\n\n// cidr\t7 or 19 bytes\tIPv4 and IPv6 networks\nexport class CidrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'cidr' as const;\n operators = Operators.text;\n}\n\n// inet\t7 or 19 bytes\tIPv4 and IPv6 hosts and networks\nexport class InetColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'inet' as const;\n operators = Operators.text;\n}\n\n// macaddr\t6 bytes\tMAC addresses\nexport class MacAddrColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr' as const;\n operators = Operators.text;\n}\n\n// macaddr8\t8 bytes\tMAC addresses (EUI-64 format)\nexport class MacAddr8Column extends ColumnType<string, typeof Operators.text> {\n dataType = 'macaddr8' as const;\n operators = Operators.text;\n}\n\n// Bit strings are strings of 1's and 0's.\n// They can be used to store or visualize bit masks.\n// There are two SQL bit types: bit(n) and bit varying(n), where n is a positive integer.\nexport class BitColumn<\n Length extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.text> {\n dataType = 'bit' as const;\n operators = Operators.text;\n data: { length: Length };\n\n constructor(length?: Length) {\n super();\n\n this.data = { length } as { length: Length };\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\nexport class BitVaryingColumn<\n Length extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.text> {\n dataType = 'bit varying' as const;\n operators = Operators.text;\n data: { length: Length };\n\n constructor(length?: Length) {\n super();\n\n this.data = { length } as { length: Length };\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.length && `(${this.data.length})`,\n );\n }\n}\n\n// A tsvector value is a sorted list of distinct lexemes\nexport class TsVectorColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsvector' as const;\n operators = Operators.text;\n}\n\n// A tsquery value stores lexemes that are to be searched for\nexport class TsQueryColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'tsquery' as const;\n operators = Operators.text;\n}\n\n// A tsquery value stores lexemes that are to be searched for\nexport class UUIDColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'uuid' as const;\n operators = Operators.text;\n}\n\nexport class XMLColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'uuid' as const;\n operators = Operators.text;\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\nimport { joinTruthy } from '../utils';\n\n// date\t4 bytes\tdate (no time of day)\t4713 BC\t5874897 AD\t1 day\nexport class DateColumn extends ColumnType<string, typeof Operators.date> {\n dataType = 'date' as const;\n operators = Operators.date;\n}\n\nexport interface DateTimeColumnData {\n precision?: number;\n}\n\nexport abstract class DateTimeBaseClass<\n Precision extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.date, string | number | Date> {\n data: DateTimeColumnData & { precision: Precision };\n operators = Operators.date;\n\n constructor(precision?: Precision) {\n super();\n\n this.data = { precision } as DateTimeColumnData & { precision: Precision };\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.precision !== undefined && `(${this.data.precision})`,\n );\n }\n}\n\nexport abstract class DateTimeWithTimeZoneBaseClass<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n abstract baseDataType: string;\n\n toSQL() {\n return joinTruthy(\n this.baseDataType,\n this.data.precision !== undefined && `(${this.data.precision})`,\n ' with time zone',\n );\n }\n}\n\n// timestamp [ (p) ] [ without time zone ]\t8 bytes\tboth date and time (no time zone)\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'timestamp' as const;\n}\n\n// timestamp [ (p) ] with time zone\t8 bytes\tboth date and time, with time zone\t4713 BC\t294276 AD\t1 microsecond\nexport class TimestampWithTimeZoneColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeWithTimeZoneBaseClass<Precision> {\n dataType = 'timestamp with time zone' as const;\n baseDataType = 'timestamp' as const;\n}\n\n// time [ (p) ] [ without time zone ]\t8 bytes\ttime of day (no date)\t00:00:00\t24:00:00\t1 microsecond\nexport class TimeColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeBaseClass<Precision> {\n dataType = 'time' as const;\n}\n\n// time [ (p) ] with time zone\t12 bytes\ttime of day (no date), with time zone\t00:00:00+1559\t24:00:00-1559\t1 microsecond\nexport class TimeWithTimeZoneColumn<\n Precision extends number | undefined = undefined,\n> extends DateTimeWithTimeZoneBaseClass<Precision> {\n dataType = 'time with time zone' as const;\n baseDataType = 'time' as const;\n}\n\n// interval [ fields ] [ (p) ]\t16 bytes\ttime interval\t-178000000 years\t178000000 years\t1 microsecond\nexport class IntervalColumn<\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n> extends ColumnType<string, typeof Operators.date> {\n dataType = 'interval' as const;\n data: DateTimeColumnData & { fields: Fields; precision: Precision };\n operators = Operators.date;\n\n constructor(fields?: Fields, precision?: Precision) {\n super();\n\n this.data = { fields, precision } as DateTimeColumnData & {\n fields: Fields;\n precision: Precision;\n };\n }\n\n toSQL() {\n return joinTruthy(\n this.dataType,\n this.data.fields && ` ${this.data.fields}`,\n this.data.precision !== undefined && ` (${this.data.precision})`,\n );\n }\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\n\nexport class BooleanColumn extends ColumnType<\n boolean,\n typeof Operators.boolean\n> {\n dataType = 'boolean' as const;\n operators = Operators.boolean;\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\n\nexport class EnumColumn<DataType extends string, Type> extends ColumnType<\n Type,\n typeof Operators.any\n> {\n operators = Operators.any;\n\n constructor(public dataType: DataType) {\n super();\n }\n}\n","import { JSONTypeAny } from './typeBase';\n\nexport type JSONOptional<T extends JSONTypeAny> = Omit<T, 'type' | 'data'> & {\n type: T['type'] | undefined;\n data: T['data'] & { optional: true };\n};\n\nexport const optional = <T extends JSONTypeAny>(type: T): JSONOptional<T> => {\n return {\n ...type,\n data: { ...type.data, optional: true },\n };\n};\n\nexport type JSONRequired<T extends JSONTypeAny> = Omit<T, 'type' | 'data'> & {\n type: Exclude<T['type'], undefined>;\n data: Omit<T['data'], 'optional'>;\n};\n\nexport const required = <T extends JSONTypeAny>(type: T): JSONRequired<T> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { optional: _, ...data } = type.data;\n\n return {\n ...type,\n data,\n } as JSONRequired<T>;\n};\n","import { JSONTypeAny } from './typeBase';\n\nexport type JSONNullable<T extends JSONTypeAny> = Omit<T, 'type' | 'data'> & {\n type: T['type'] | null;\n data: T['data'] & { nullable: true };\n};\n\nexport const nullable = <T extends JSONTypeAny>(type: T): JSONNullable<T> => {\n return {\n ...type,\n data: { ...type.data, nullable: true },\n };\n};\n\nexport type JSONNotNullable<T extends JSONTypeAny> = Omit<\n T,\n 'type' | 'data'\n> & {\n type: Exclude<T['type'], null>;\n data: Omit<T['data'], 'nullable'>;\n};\n\nexport const notNullable = <T extends JSONTypeAny>(\n type: T,\n): JSONNotNullable<T> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { nullable: _, ...data } = type.data;\n\n return {\n ...type,\n data,\n } as JSONNotNullable<T>;\n};\n","import { JSONTypeAny } from './typeBase';\n\nexport type JSONNullish<T extends JSONTypeAny> = Omit<T, 'type' | 'data'> & {\n type: T['type'] | undefined | null;\n data: T['data'] & { nullable: true };\n};\n\nexport const nullish = <T extends JSONTypeAny>(type: T): JSONNullish<T> => {\n return {\n ...type,\n data: { ...type.data, nullable: true, optional: true },\n };\n};\n\nexport type JSONNotNullish<T extends JSONTypeAny> = Omit<T, 'type' | 'data'> & {\n type: Exclude<T['type'], undefined | null>;\n data: Omit<T['data'], 'nullable'>;\n};\n\nexport const notNullish = <T extends JSONTypeAny>(\n type: T,\n): JSONNotNullish<T> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { nullable, optional, ...data } = type.data;\n\n return {\n ...type,\n data,\n } as JSONNotNullish<T>;\n};\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\n\nexport type JSONIntersection<\n Left extends JSONTypeAny,\n Right extends JSONTypeAny,\n> = JSONType<Left['type'] & Right['type'], 'intersection'> & {\n left: Left;\n right: Right;\n};\n\nexport const intersection = <\n Left extends JSONTypeAny,\n Right extends JSONTypeAny,\n>(\n left: Left,\n right: Right,\n) => {\n return constructType<JSONIntersection<Left, Right>>({\n dataType: 'intersection',\n left,\n right,\n });\n};\n","import {\n constructType,\n DeepPartial,\n JSONType,\n JSONTypeAny,\n JSONTypeData,\n} from './typeBase';\nimport { arrayMethods, ArrayMethods } from '../commonMethods';\n\nexport type ArrayCardinality = 'many' | 'atLeastOne';\n\ntype arrayOutputType<\n T extends JSONTypeAny,\n Cardinality extends ArrayCardinality = 'many',\n> = Cardinality extends 'atLeastOne'\n ? [T['type'], ...T['type'][]]\n : T['type'][];\n\nexport interface JSONArray<\n Type extends JSONTypeAny,\n Cardinality extends ArrayCardinality = 'many',\n> extends JSONType<arrayOutputType<Type, Cardinality>, 'array'>,\n ArrayMethods {\n data: JSONTypeData & {\n min?: number;\n max?: number;\n length?: number;\n };\n element: Type;\n deepPartial(): JSONArray<DeepPartial<Type>, Cardinality>;\n nonEmpty(\n this: JSONArray<Type>,\n ): JSONArray<Type, 'atLeastOne'> & { data: { min: 1 } };\n}\n\nexport const array = <Type extends JSONTypeAny>(\n element: Type,\n): JSONArray<Type> => {\n return constructType<JSONArray<Type>>({\n dataType: 'array' as const,\n element,\n deepPartial(this: JSONArray<Type>) {\n return {\n ...this,\n element: this.element.deepPartial(),\n };\n },\n nonEmpty(this: JSONArray<Type>) {\n return this.min(1) as unknown as JSONArray<Type, 'atLeastOne'> & {\n data: { min: 1 };\n };\n },\n ...arrayMethods,\n });\n};\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\n\nexport interface JSONUnion<\n T extends [JSONTypeAny, JSONTypeAny, ...JSONTypeAny[]],\n> extends JSONType<T[number]['type'], 'union'> {\n types: T;\n}\n\nexport const union = <T extends [JSONTypeAny, JSONTypeAny, ...JSONTypeAny[]]>(\n types: T,\n): T[number] => {\n return constructType<JSONUnion<T>>({\n dataType: 'union',\n types,\n });\n};\n","import { JSONOptional, JSONRequired, optional, required } from './optional';\nimport {\n JSONNotNullable,\n JSONNullable,\n notNullable,\n nullable,\n} from './nullable';\nimport { JSONNotNullish, JSONNullish, notNullish, nullish } from './nullish';\nimport { intersection, JSONIntersection } from './intersection';\nimport { array, JSONArray } from './array';\nimport { union } from './union';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type JSONTypeAny = JSONType<any, string>;\n\nexport type DeepPartial<T extends JSONTypeAny> = ReturnType<\n JSONTypeAny['deepPartial']\n> extends ReturnType<T['deepPartial']>\n ? T\n : ReturnType<T['deepPartial']>;\n\nexport type JSONTypeData = {\n optional?: true;\n nullable?: true;\n};\n\nexport type Primitive = string | number | bigint | boolean | null | undefined;\n\nexport type JSONType<Type, DataType> = {\n type: Type;\n data: JSONTypeData;\n dataType: DataType;\n chain: (\n | ['transform', (input: unknown) => unknown]\n | ['to', (input: unknown) => JSONTypeAny | undefined, JSONTypeAny]\n | ['refine', (input: unknown) => unknown]\n | ['superRefine', (input: unknown) => unknown]\n )[];\n\n optional<T extends JSONTypeAny>(this: T): JSONOptional<T>;\n required<T extends JSONTypeAny>(this: T): JSONRequired<T>;\n nullable<T extends JSONTypeAny>(this: T): JSONNullable<T>;\n notNullable<T extends JSONTypeAny>(this: T): JSONNotNullable<T>;\n nullish<T extends JSONTypeAny>(this: T): JSONNullish<T>;\n notNullish<T extends JSONTypeAny>(this: T): JSONNotNullish<T>;\n deepPartial(): JSONTypeAny;\n\n transform<T extends JSONTypeAny, Transformed>(\n this: T,\n fn: (input: T['type']) => Transformed,\n ): JSONType<\n Transformed extends PromiseLike<unknown>\n ? Awaited<Transformed>\n : Transformed,\n T['dataType']\n >;\n\n to<T extends JSONTypeAny, ToType extends JSONTypeAny>(\n this: T,\n fn: (input: T['type']) => ToType['type'] | undefined,\n type: ToType,\n ): ToType;\n\n refine<T extends JSONTypeAny, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type']) => unknown,\n ): T & { type: RefinedOutput };\n\n superRefine<T extends JSONTypeAny, RefinedOutput extends T['type']>(\n this: T,\n check: (arg: T['type']) => unknown,\n ): T & { type: RefinedOutput };\n\n and<A extends JSONTypeAny, B extends JSONTypeAny>(\n this: A,\n type: B,\n ): JSONIntersection<A, B>;\n\n or<T extends JSONTypeAny, U extends [JSONTypeAny, ...JSONTypeAny[]]>(\n this: T,\n ...types: U\n ): T | U[number];\n\n default<T extends JSONTypeAny>(\n this: T,\n value: T['type'] | (() => T['type']),\n ): JSONNotNullish<T>;\n\n array<T extends JSONTypeAny>(this: T): JSONArray<T>;\n};\n\nconst baseTypeMethods: JSONTypeAny = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: undefined as any,\n data: {},\n dataType: 'any',\n chain: [],\n\n optional<T extends JSONTypeAny>(this: T) {\n return optional(this);\n },\n\n required<T extends JSONTypeAny>(this: T) {\n return required(this);\n },\n\n nullable<T extends JSONTypeAny>(this: T) {\n return nullable(this);\n },\n\n notNullable<T extends JSONTypeAny>(this: T) {\n return notNullable(this);\n },\n\n nullish<T extends JSONTypeAny>(this: T) {\n return nullish(this);\n },\n\n notNullish<T extends JSONTypeAny>(this: T) {\n return notNullish(this);\n },\n\n deepPartial() {\n return this;\n },\n\n transform<T extends JSONTypeAny, Transformed>(\n this: T,\n fn: (input: unknown) => Transformed,\n ) {\n return {\n ...this,\n chain: [...this.chain, ['transform', fn]],\n };\n },\n\n to(fn, type) {\n return {\n ...type,\n chain: [...this.chain, ['to', fn, type], ...type.chain],\n };\n },\n\n refine(check) {\n return {\n ...this,\n chain: [...this.chain, ['refine', check]],\n };\n },\n\n superRefine(check) {\n return {\n ...this,\n chain: [...this.chain, ['superRefine', check]],\n };\n },\n\n and(type) {\n return intersection(this, type);\n },\n\n or(...args) {\n const [type, ...types] = args;\n return union([this, type, ...types]);\n },\n\n default(value) {\n const defaultFn =\n typeof value === 'function'\n ? (input: unknown) => input ?? (value as () => unknown)()\n : (input: unknown) => input ?? value;\n\n return notNullish({\n ...this,\n chain: ['transform', defaultFn],\n });\n },\n\n array() {\n return array(this);\n },\n};\n\ntype BaseTypeProps<T extends JSONTypeAny> = Omit<\n JSONType<T['type'], string>,\n 'dataType'\n>;\nexport type OwnTypeProps<T extends JSONTypeAny> = Omit<\n T,\n keyof BaseTypeProps<T>\n> & {\n [k in keyof BaseTypeProps<T>]?: BaseTypeProps<T>[k];\n};\n\nexport const constructType = <T extends JSONTypeAny>(\n type: OwnTypeProps<T>,\n): T => {\n return {\n ...(baseTypeMethods as BaseTypeProps<T>),\n ...type,\n } as T;\n};\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\nimport { BaseNumberData } from '../number';\nimport { BaseStringData } from '../string';\nimport { numberTypeMethods, stringTypeMethods } from '../commonMethods';\n\nexport type JSONAny = JSONTypeAny & {\n dataType: 'any';\n};\nconst any = () => {\n return constructType<JSONAny>({\n dataType: 'any',\n });\n};\n\nexport type JSONBigInt = JSONType<bigint, 'bigint'> & {\n data: BaseNumberData;\n} & typeof bigIntMethods;\nconst bigIntMethods = {\n dataType: 'bigint' as const,\n ...numberTypeMethods<JSONType<bigint, 'bigint'> & { data: BaseNumberData }>(),\n};\nconst bigint = () => {\n return constructType<JSONBigInt>(bigIntMethods);\n};\n\nexport type JSONBoolean = JSONType<boolean, 'boolean'>;\nconst boolean = () => {\n return constructType<JSONBoolean>({\n dataType: 'boolean',\n });\n};\n\nexport type JSONNaN = JSONType<number, 'nan'>;\nconst nan = () => {\n return constructType<JSONNaN>({\n dataType: 'nan',\n });\n};\n\nexport type JSONNever = JSONType<unknown, 'never'>;\nconst never = () => {\n return constructType<JSONNever>({\n dataType: 'never',\n });\n};\n\nexport type JSONNull = JSONType<null, 'null'>;\nconst nullType = () => {\n return constructType<JSONNull>({\n dataType: 'null',\n });\n};\n\nexport type JSONNumber = JSONType<number, 'number'> & {\n data: BaseNumberData;\n} & typeof numberMethods;\nconst numberMethods = {\n ...numberTypeMethods<JSONType<number, 'number'> & { data: BaseNumberData }>(),\n dataType: 'number' as const,\n};\nconst number = () => {\n return constructType<JSONNumber>(numberMethods);\n};\n\nexport type JSONDate = JSONType<Date, 'date'>;\nconst date = () => {\n return constructType<JSONDate>({\n dataType: 'date',\n });\n};\n\nexport type JSONString = JSONType<string, 'string'> & {\n data: BaseStringData;\n} & typeof stringMethods;\nconst stringMethods = {\n ...stringTypeMethods<JSONType<number, 'string'> & { data: BaseStringData }>(),\n dataType: 'string' as const,\n};\nconst string = () => {\n return constructType<JSONString>(stringMethods);\n};\n\nexport type JSONUndefined = JSONType<undefined, 'undefined'>;\nconst undefinedType = () => {\n return constructType<JSONUndefined>({\n dataType: 'undefined',\n });\n};\n\nexport type JSONUnknown = JSONType<unknown, 'unknown'>;\nconst unknown = () => {\n return constructType<JSONUnknown>({\n dataType: 'unknown',\n });\n};\n\nexport type JSONVoid = JSONType<void, 'void'>;\nconst voidType = () => {\n return constructType<JSONVoid>({\n dataType: 'void',\n });\n};\n\nexport const scalarTypes = {\n any,\n bigint,\n boolean,\n date,\n nan,\n never,\n null: nullType,\n number,\n string,\n undefined: undefinedType,\n unknown,\n void: voidType,\n};\n","import { constructType, JSONType, Primitive } from './typeBase';\nimport { JSONObject } from './object';\nimport { JSONLiteral } from './literal';\n\nexport interface JSONDiscriminatedUnion<\n Discriminator extends string,\n Options extends DiscriminatedOptions<Discriminator>,\n> extends JSONType<Options[number]['type'], 'discriminatedUnion'> {\n discriminator: Discriminator;\n options: OptionsMap<Discriminator, Options>;\n // TODO: gave up on deepPartial type\n // deepPartial(): JSONDiscriminatedUnion<\n // Discriminator,\n // {\n // [Index in keyof Options]: {\n // [K in keyof Options[Index]['shape']]: K extends Discriminator\n // ? Options[Index]['shape'][K]\n // : JSONOptional<Options[Index]['shape'][K]>;\n // } extends JSONObject<Record<Discriminator, JSONLiteral<Primitive>>>\n // ? JSONObject<\n // {\n // [K in keyof Options[Index]['shape']]: K extends Discriminator\n // ? Options[Index]['shape'][K]\n // : JSONOptional<Options[Index]['shape'][K]>;\n // },\n // Options[Index]['unknownKeys'],\n // Options[Index]['catchAllType']\n // >\n // : Options[Index];\n // } & {\n // length: Options['length'];\n // }\n // >;\n}\n\ntype JSONDiscriminatedObject<Discriminator extends string> = JSONObject<\n Record<Discriminator, JSONLiteral<Primitive>>\n>;\n\ntype DiscriminatedOptions<Discriminator extends string> = readonly [\n JSONDiscriminatedObject<Discriminator>,\n JSONDiscriminatedObject<Discriminator>,\n ...JSONDiscriminatedObject<Discriminator>[],\n];\n\ntype OptionsMap<\n Discriminator extends string,\n Options extends DiscriminatedOptions<Discriminator>,\n> = Map<Options[number]['shape'][Discriminator]['value'], Options[number]>;\n\nexport const discriminatedUnion = <\n Discriminator extends string,\n Options extends DiscriminatedOptions<Discriminator>,\n>(\n discriminator: Discriminator,\n options: Options,\n) => {\n const optionsMap: OptionsMap<\n Discriminator,\n DiscriminatedOptions<Discriminator>\n > = new Map();\n\n options.forEach((option) => {\n const discriminatorValue = option.shape[discriminator].value;\n optionsMap.set(discriminatorValue, option);\n });\n\n return constructType<JSONDiscriminatedUnion<Discriminator, Options>>({\n dataType: 'discriminatedUnion',\n discriminator,\n options: optionsMap,\n deepPartial(this: JSONDiscriminatedUnion<Discriminator, Options>) {\n const newOptionsMap: OptionsMap<\n Discriminator,\n DiscriminatedOptions<Discriminator>\n > = new Map();\n\n optionsMap.forEach((option, key) => {\n const partial =\n option.deepPartial() as unknown as JSONDiscriminatedObject<Discriminator>;\n partial.shape[discriminator] = option.shape[discriminator];\n newOptionsMap.set(key, partial);\n });\n\n return {\n ...this,\n options: newOptionsMap,\n };\n },\n });\n};\n","import { constructType, JSONType } from './typeBase';\n\nexport interface JSONEnum<T extends EnumValues>\n extends JSONType<T[number], 'enum'> {\n enum: { [k in T[number]]: k };\n options: T;\n}\n\ntype EnumValues = readonly [string, ...string[]];\n\nexport const arrayToEnum = <T extends string, U extends readonly [T, ...T[]]>(\n items: U,\n) => {\n const obj = {} as { [k in U[number]]: k };\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n};\n\nexport const enumType = <T extends readonly [string, ...string[]]>(\n options: T,\n) => {\n return constructType<JSONEnum<T>>({\n dataType: 'enum',\n enum: arrayToEnum(options),\n options,\n });\n};\n","import { constructType, JSONType } from './typeBase';\n\nexport interface JSONInstanceOf<T extends Class>\n extends JSONType<T, 'instanceOf'> {\n class: T;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Class = new (...args: any[]) => any;\n\nexport const instanceOf = <T extends Class>(cls: T) => {\n return constructType<JSONInstanceOf<T>>({\n dataType: 'instanceOf',\n class: cls,\n });\n};\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\n\nexport interface JSONLazy<T extends JSONTypeAny>\n extends JSONType<T['type'], 'lazy'> {\n typeCache?: T;\n getter(): T;\n deepPartial(): JSONLazy<ReturnType<T['deepPartial']>>;\n}\n\nexport const lazy = <T extends JSONTypeAny>(fn: () => T) => {\n constructType<JSONLazy<T>>({\n dataType: 'lazy',\n getter: fn,\n deepPartial(this: JSONLazy<T>) {\n return {\n ...this,\n typeCache: undefined,\n getter: () => this.getter().deepPartial(),\n };\n },\n });\n};\n","import { constructType, JSONType, Primitive } from './typeBase';\n\nexport interface JSONLiteral<T extends Primitive>\n extends JSONType<T, 'literal'> {\n value: Primitive;\n}\n\nexport const literal = <T extends Primitive>(value: T) =>\n constructType<JSONLiteral<T>>({\n dataType: 'literal',\n value,\n });\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\n\nexport interface JSONMap<Key extends JSONTypeAny, Value extends JSONTypeAny>\n extends JSONType<Map<Key['type'], Value['type']>, 'map'> {\n keyType: Key;\n valueType: Value;\n deepPartial(): JSONMap<\n ReturnType<Key['deepPartial']>,\n ReturnType<Value['deepPartial']>\n >;\n}\n\nexport const map = <Key extends JSONTypeAny, Value extends JSONTypeAny>(\n keyType: Key,\n valueType: Value,\n) => {\n return constructType<JSONMap<Key, Value>>({\n dataType: 'map',\n keyType: keyType,\n valueType: valueType,\n deepPartial(this: JSONMap<Key, Value>) {\n return {\n ...this,\n keyType: this.keyType.deepPartial(),\n valueType: this.valueType.deepPartial(),\n };\n },\n });\n};\n","import { constructType, JSONType } from './typeBase';\n\nexport interface JSONNativeEnum<T extends EnumLike>\n extends JSONType<T[keyof T], 'nativeEnum'> {\n dataType: 'nativeEnum';\n enum: T;\n options: (number | string)[];\n}\n\ntype EnumLike = { [k: string]: string | number; [nu: number]: string };\n\nexport const getValidEnumValues = (obj: EnumLike) => {\n const values: (number | string)[] = [];\n Object.keys(obj).forEach((k) => {\n if (typeof obj[obj[k]] !== 'number' && !values.includes(obj[k])) {\n values.push(obj[k]);\n }\n });\n return values;\n};\n\nexport const nativeEnum = <T extends EnumLike>(givenEnum: T) => {\n const options = getValidEnumValues(givenEnum);\n\n return constructType<JSONNativeEnum<T>>({\n dataType: 'nativeEnum',\n enum: givenEnum,\n options,\n });\n};\n","import { constructType, DeepPartial, JSONType, JSONTypeAny } from './typeBase';\nimport { JSONOptional, optional } from './optional';\n\nexport type JSONObjectShape = Record<string, JSONTypeAny>;\n\nexport type UnknownKeysParam = 'passthrough' | 'strict' | 'strip';\n\ntype FullyPartial<T extends JSONObjectShape> = {\n [K in keyof T]: JSONOptional<T[K]>;\n};\n\ntype PartiallyPartial<T extends JSONObjectShape, P extends keyof T> = {\n [K in keyof T]: K extends P ? JSONOptional<T[K]> : T[K];\n};\n\nexport type identity<T> = T;\n\nexport type flatten<T extends object> = identity<{ [k in keyof T]: T[k] }>;\n\ntype optionalKeys<T extends object> = {\n [k in keyof T]: undefined extends T[k] ? k : never;\n}[keyof T];\n\ntype requiredKeys<T extends object> = {\n [k in keyof T]: undefined extends T[k] ? never : k;\n}[keyof T];\n\nexport type addQuestionMarks<T extends object> = Partial<\n Pick<T, optionalKeys<T>>\n> &\n Pick<T, requiredKeys<T>>;\n\nexport type baseObjectOutputType<Shape extends JSONObjectShape> = flatten<\n addQuestionMarks<{\n [k in keyof Shape]: Shape[k]['type'];\n }>\n>;\n\ntype objectOutputType<\n Shape extends JSONObjectShape,\n Catchall extends JSONTypeAny,\n> = JSONTypeAny extends Catchall\n ? baseObjectOutputType<Shape>\n : flatten<baseObjectOutputType<Shape> & { [k: string]: Catchall['type'] }>;\n\nexport type IsEqual<T, U> = (<G>() => G extends T ? 1 : 2) extends <\n G,\n>() => G extends U ? 1 : 2\n ? true\n : false;\n\ntype Filter<KeyType, ExcludeType> = IsEqual<KeyType, ExcludeType> extends true\n ? never\n : KeyType extends ExcludeType\n ? never\n : KeyType;\n\nexport type Except<ObjectType, KeysType extends keyof ObjectType> = {\n [KeyType in keyof ObjectType as Filter<\n KeyType,\n KeysType\n >]: ObjectType[KeyType];\n};\n\nexport type Merge<FirstType, SecondType> = Except<\n FirstType,\n Extract<keyof FirstType, keyof SecondType>\n> &\n SecondType;\n\nexport interface JSONObject<\n T extends JSONObjectShape,\n UnknownKeys extends UnknownKeysParam = 'strip',\n Catchall extends JSONTypeAny = JSONTypeAny,\n Output = objectOutputType<T, Catchall>,\n> extends JSONType<Output, 'object'> {\n shape: T;\n unknownKeys: UnknownKeys;\n catchAllType: Catchall;\n extend<S extends JSONObjectShape>(\n shape: S,\n ): JSONObject<Merge<T, S>, UnknownKeys, Catchall>;\n merge<\n S extends JSONObjectShape,\n U extends UnknownKeysParam,\n C extends JSONTypeAny,\n >(\n obj: JSONObject<S, U, C>,\n ): JSONObject<Merge<T, S>, U, C>;\n pick<K extends keyof T>(\n ...arr: K[]\n ): JSONObject<Pick<T, K>, UnknownKeys, Catchall>;\n omit<K extends keyof T>(\n ...arr: K[]\n ): JSONObject<Omit<T, K>, UnknownKeys, Catchall>;\n partial(): JSONObject<FullyPartial<T>, UnknownKeys, Catchall>;\n partial<P extends keyof T>(\n ...arr: P[]\n ): JSONObject<PartiallyPartial<T, P>, UnknownKeys, Catchall>;\n deepPartial(): JSONObject<\n { [k in keyof T]: JSONOptional<DeepPartial<T[k]>> },\n UnknownKeys,\n Catchall\n >;\n passthrough(): JSONObject<T, 'passthrough', Catchall>;\n strict(): JSONObject<T, 'strict', Catchall>;\n strip(): JSONObject<T, 'strip', Catchall>;\n catchAll<C extends JSONTypeAny>(type: C): JSONObject<T, UnknownKeys, C>;\n}\n\nexport const object = <\n T extends JSONObjectShape,\n UnknownKeys extends UnknownKeysParam = 'strip',\n Catchall extends JSONTypeAny = JSONTypeAny,\n>(\n shape: T,\n): JSONObject<T, UnknownKeys, Catchall> => {\n return constructType<JSONObject<T, UnknownKeys, Catchall>>({\n dataType: 'object' as const,\n shape,\n unknownKeys: 'strip' as UnknownKeys,\n catchAllType: undefined as unknown as Catchall,\n extend<S extends JSONObjectShape>(add: S) {\n return object<Merge<T, S>, UnknownKeys, Catchall>(\n Object.assign({ ...this.shape }, add),\n );\n },\n merge<\n S extends JSONObjectShape,\n U extends UnknownKeysParam,\n C extends JSONTypeAny,\n >(obj: JSONObject<S, U, C>) {\n return object<Merge<T, S>, U, C>(\n Object.assign({ ...this.shape }, obj.shape),\n );\n },\n pick<K extends keyof T>(...arr: K[]) {\n const picked = {} as Pick<T, K>;\n arr.forEach((key) => (picked[key] = this.shape[key]));\n return object<Pick<T, K>, UnknownKeys, Catchall>(picked);\n },\n omit<K extends keyof T>(...arr: K[]) {\n const picked = {} as Omit<T, K>;\n for (const key in this.shape) {\n if (!arr.includes(key as unknown as K)) {\n (picked as T)[key] = this.shape[key];\n }\n }\n return object<Omit<T, K>, UnknownKeys, Catchall>(picked);\n },\n partial<P extends keyof T>(...arr: P[]) {\n const mapped = { ...this.shape };\n\n if (arr.length) {\n arr.forEach((key) => {\n mapped[key] = mapped[key].optional();\n });\n } else {\n for (const key in mapped) {\n mapped[key] = mapped[key].optional();\n }\n }\n\n return object<typeof mapped, UnknownKeys, Catchall>(mapped);\n },\n deepPartial(this: JSONObject<T, UnknownKeys, Catchall>) {\n const newShape: JSONObjectShape = {};\n\n for (const key in this.shape) {\n newShape[key] = optional(this.shape[key].deepPartial());\n }\n\n return {\n ...this,\n shape: newShape,\n };\n },\n passthrough(this: JSONObject<T, UnknownKeys, Catchall>) {\n return {\n ...this,\n unknownKeys: 'passthrough',\n } as JSONObject<T, 'passthrough', Catchall>;\n },\n strict(this: JSONObject<T, UnknownKeys, Catchall>) {\n return {\n ...this,\n unknownKeys: 'strict',\n } as JSONObject<T, 'strict', Catchall>;\n },\n strip(this: JSONObject<T, UnknownKeys, Catchall>) {\n return {\n ...this,\n unknownKeys: 'strip',\n } as JSONObject<T, 'strip', Catchall>;\n },\n catchAll<C extends JSONTypeAny>(\n this: JSONObject<T, UnknownKeys, C>,\n type: C,\n ) {\n return {\n ...this,\n catchAllType: type,\n };\n },\n });\n};\n","import { constructType, JSONType, JSONTypeAny } from './typeBase';\nimport { JSONNumber, JSONString, scalarTypes } from './scalarTypes';\n\nexport interface JSONRecord<Key extends KeyType, Value extends JSONTypeAny>\n extends JSONType<Record<Key['type'], Value['type']>, 'record'> {\n keyType: Key;\n valueType: Value;\n deepPartial(): JSONRecord<Key, ReturnType<Value['deepPartial']>>;\n}\n\ntype KeyType = JSONType<string | number, 'string' | 'number'>;\ntype Args<Key extends KeyType, Value extends JSONTypeAny> =\n | Args2<Key, Value>\n | Args1<Key>;\n\ntype Args2<Key extends KeyType, Value extends JSONTypeAny> = [\n key: Key,\n value: Value,\n];\ntype Args1<Value extends JSONTypeAny> = [value: Value];\n\nexport function record(\n ...args: Args<JSONString | JSONNumber, JSONTypeAny>\n): JSONRecord<JSONString | JSONNumber, JSONTypeAny> {\n const [keyType, valueType] = (\n args.length === 1 ? [scalarTypes.string(), args[0]] : args\n ) as Args2<JSONString | JSONNumber, JSONTypeAny>;\n\n return constructType<JSONRecord<JSONString | JSONNumber, JSONTypeAny>>({\n dataType: 'record',\n keyType,\n valueType,\n deepPartial(this: JSONRecord<JSONString, JSONTypeAny>) {\n return {\n ...this,\n valueType: this.valueType.deepPartial(),\n };\n },\n });\n}\n","import { constructType, JSONType, JSONTypeAny, JSONTypeData } from './typeBase';\nimport { ArrayMethods, arrayMethods } from '../commonMethods';\n\nexport interface JSONSet<Value extends JSONTypeAny>\n extends JSONType<Set<Value['type']>, 'set'>,\n ArrayMethods {\n data: JSONTypeData & {\n min?: number;\n max?: number;\n length?: number;\n };\n valueType: Value;\n deepPartial(): JSONSet<ReturnType<Value['deepPartial']>>;\n nonEmpty(this: JSONSet<Value>): JSONSet<Value> & { data: { min: 1 } };\n}\n\nexport const set = <Value extends JSONTypeAny>(valueType: Value) => {\n return constructType<JSONSet<Value>>({\n dataType: 'set',\n valueType,\n deepPartial(this: JSONSet<Value>) {\n return {\n ...this,\n valueType: this.valueType.deepPartial(),\n };\n },\n nonEmpty(this: JSONSet<Value>) {\n return this.min(1) as unknown as JSONSet<Value> & {\n data: { min: 1 };\n };\n },\n ...arrayMethods,\n });\n};\n","import { constructType, DeepPartial, JSONType, JSONTypeAny } from './typeBase';\n\nexport interface JSONTuple<\n T extends JSONTupleItems | [] = JSONTupleItems,\n Rest extends JSONTypeAny | null = null,\n> extends JSONType<OutputTypeOfTupleWithRest<T, Rest>, 'tuple'> {\n items: T;\n deepPartial(): {\n [k in keyof T]: T[k] extends JSONTypeAny ? DeepPartial<T[k]> : never;\n } extends infer PI\n ? PI extends JSONTupleItems\n ? JSONTuple<PI>\n : never\n : never;\n}\n\nexport type JSONTupleItems = [JSONTypeAny, ...JSONTypeAny[]];\nexport type AssertArray<T> = T extends unknown[] ? T : never;\nexport type OutputTypeOfTuple<T extends JSONTupleItems | []> = AssertArray<{\n [k in keyof T]: T[k] extends JSONTypeAny ? T[k]['type'] : never;\n}>;\nexport type OutputTypeOfTupleWithRest<\n T extends JSONTupleItems | [],\n Rest extends JSONTypeAny | null = null,\n> = Rest extends JSONTypeAny\n ? [...OutputTypeOfTuple<T>, ...Rest['type'][]]\n : OutputTypeOfTuple<T>;\n\nexport const tuple = <T extends JSONTupleItems | []>(items: T) => {\n return constructType<JSONTuple<T>>({\n dataType: 'tuple',\n items,\n deepPartial(this: JSONTuple<T>) {\n return {\n ...this,\n items: this.items.map((item) => item.deepPartial()),\n };\n },\n });\n};\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\nimport { scalarTypes } from './json/scalarTypes';\nimport { array } from './json/array';\nimport { discriminatedUnion } from './json/discriminatedUnion';\nimport { enumType } from './json/enum';\nimport { instanceOf } from './json/instanceOf';\nimport { intersection } from './json/intersection';\nimport { lazy } from './json/lazy';\nimport { literal } from './json/literal';\nimport { map } from './json/map';\nimport { nativeEnum } from './json/nativeEnum';\nimport { nullable } from './json/nullable';\nimport { nullish } from './json/nullish';\nimport { object } from './json/object';\nimport { optional } from './json/optional';\nimport { record } from './json/record';\nimport { set } from './json/set';\nimport { tuple } from './json/tuple';\nimport { union } from './json/union';\nimport { JSONTypeAny } from './json/typeBase';\n\nexport type JSONTypes = typeof jsonTypes;\nconst jsonTypes = {\n array,\n discriminatedUnion,\n enum: enumType,\n instanceOf,\n intersection,\n lazy,\n literal,\n map,\n nativeEnum,\n nullable,\n nullish,\n object,\n optional,\n record,\n ...scalarTypes,\n set,\n tuple,\n union,\n};\n\nexport class JSONColumn<\n Type extends JSONTypeAny = JSONTypeAny,\n> extends ColumnType<Type['type'], typeof Operators.json> {\n dataType = 'jsonb' as const;\n operators = Operators.json;\n data: { schema: Type };\n\n constructor(schemaOrFn: Type | ((j: JSONTypes) => Type)) {\n super();\n\n const schema =\n typeof schemaOrFn === 'function' ? schemaOrFn(jsonTypes) : schemaOrFn;\n this.data = { schema };\n }\n}\n\nexport class JSONTextColumn extends ColumnType<string, typeof Operators.text> {\n dataType = 'json' as const;\n operators = Operators.text;\n}\n","import { ColumnType } from './columnType';\nimport { Operators } from '../operators';\n\nexport class ArrayColumn<Item extends ColumnType> extends ColumnType<\n Item['type'][],\n typeof Operators.array\n> {\n dataType = 'array' as const;\n operators = Operators.array;\n data: { item: Item };\n\n constructor(item: Item) {\n super();\n\n this.data = { item };\n }\n\n toSQL() {\n return `${this.data.item.toSQL()}[]`;\n }\n}\n","import {\n BigIntColumn,\n BigSerialColumn,\n DecimalBigIntColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n IntegerColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n} from './number';\nimport {\n BitColumn,\n BitVaryingColumn,\n BoxColumn,\n ByteaColumn,\n CharColumn,\n CidrColumn,\n CircleColumn,\n InetColumn,\n LineColumn,\n LsegColumn,\n MacAddrColumn,\n MacAddr8Column,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n TextColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n XMLColumn,\n} from './string';\nimport {\n DateColumn,\n IntervalColumn,\n TimeColumn,\n TimestampColumn,\n TimestampWithTimeZoneColumn,\n TimeWithTimeZoneColumn,\n} from './dateTime';\nimport { BooleanColumn } from './boolean';\nimport { EnumColumn } from './enum';\nimport { JSONColumn, JSONTextColumn, JSONTypes } from './json';\nimport { JSONTypeAny } from './json/typeBase';\nimport { ArrayColumn } from './array';\nimport { ColumnType } from './columnType';\n\nexport type ColumnTypes = typeof columnTypes;\n\nexport const columnTypes = {\n smallint: () => new SmallIntColumn(),\n integer: () => new IntegerColumn(),\n bigint: () => new BigIntColumn(),\n numeric: <\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(\n precision?: Precision,\n scale?: Scale,\n ) => new DecimalColumn(precision, scale),\n numericBigInt: <\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(\n precision?: Precision,\n scale?: Scale,\n ) => new DecimalBigIntColumn(precision, scale),\n decimal: <\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(\n precision?: Precision,\n scale?: Scale,\n ) => new DecimalColumn(precision, scale),\n decimalBigInt: <\n Precision extends number | undefined = undefined,\n Scale extends number | undefined = undefined,\n >(\n precision?: Precision,\n scale?: Scale,\n ) => new DecimalBigIntColumn(precision, scale),\n real: () => new RealColumn(),\n doublePrecision: () => new DoublePrecisionColumn(),\n smallSerial: () => new SmallSerialColumn(),\n serial: () => new SerialColumn(),\n bigserial: () => new BigSerialColumn(),\n money: () => new MoneyColumn(),\n varchar: <Limit extends number | undefined = undefined>(limit?: Limit) =>\n new VarCharColumn(limit),\n char: <Limit extends number | undefined = undefined>(limit?: Limit) =>\n new CharColumn(limit),\n text: () => new TextColumn(),\n bytea: () => new ByteaColumn(),\n date: () => new DateColumn(),\n timestamp: <Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) => new TimestampColumn(precision),\n timestampWithTimeZone: <Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) => new TimestampWithTimeZoneColumn(precision),\n time: <Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) => new TimeColumn(precision),\n timeWithTimeZone: <Precision extends number | undefined = undefined>(\n precision?: Precision,\n ) => new TimeWithTimeZoneColumn(precision),\n interval: <\n Fields extends string | undefined = undefined,\n Precision extends number | undefined = undefined,\n >(\n fields?: Fields,\n precision?: Precision,\n ) => new IntervalColumn(fields, precision),\n boolean: () => new BooleanColumn(),\n enum: <DataType extends string, Type>(dataType: DataType) =>\n new EnumColumn<DataType, Type>(dataType),\n point: () => new PointColumn(),\n line: () => new LineColumn(),\n lseg: () => new LsegColumn(),\n box: () => new BoxColumn(),\n path: () => new PathColumn(),\n polygon: () => new PolygonColumn(),\n circle: () => new CircleColumn(),\n cidr() {\n return new CidrColumn();\n },\n inet: () => new InetColumn(),\n macaddr: () => new MacAddrColumn(),\n macaddr8: () => new MacAddr8Column(),\n bit: () => new BitColumn(),\n bitVarying: () => new BitVaryingColumn(),\n tsvector: () => new TsVectorColumn(),\n tsquery: () => new TsQueryColumn(),\n uuid: () => new UUIDColumn(),\n xml: () => new XMLColumn(),\n json: <Type extends JSONTypeAny>(\n schemaOrFn: Type | ((j: JSONTypes) => Type),\n ) => new JSONColumn(schemaOrFn),\n jsonText: () => new JSONTextColumn(),\n array: <Item extends ColumnType>(item: Item) => new ArrayColumn(item),\n};\n","import { ColumnInput, ColumnOutput, ColumnType } from './columnType';\nimport { Operators } from '../operators';\nimport { UnionToIntersection } from '../utils';\n\nexport type ColumnsShape = Record<string, ColumnType>;\n\nexport type ColumnShapeOutput<Shape extends ColumnsShape> = {\n [K in keyof Shape]: ColumnOutput<Shape[K]>;\n};\n\nexport type ColumnShapeInput<Shape extends ColumnsShape> = {\n [K in keyof Shape]: ColumnInput<Shape[K]>;\n};\n\nexport class ColumnsObject<Shape extends ColumnsShape> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] },\n typeof Operators.any\n> {\n dataType = 'object';\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\nexport class ArrayOfColumnsObjects<\n Shape extends ColumnsShape,\n> extends ColumnType<\n { [K in keyof Shape]: Shape[K]['type'] }[],\n typeof Operators.any\n> {\n dataType = 'array';\n operators = Operators.any;\n\n constructor(public shape: Shape) {\n super();\n }\n}\n\ntype UnionKeyofToOvlds<S, U> = UnionToIntersection<\n U extends keyof S ? (f: U) => void : never\n>;\n\ntype PopKeyofColumnShapeUnion<\n S extends ColumnsShape,\n U extends keyof S,\n> = UnionKeyofToOvlds<S, U> extends (a: infer A extends keyof S) => void\n ? A\n : never;\n\ntype IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;\n\nexport type UnionToArray<\n S extends ColumnsShape,\n T extends keyof S,\n A extends [...(keyof S)[]] = [],\n> = IsUnion<T> extends true\n ? UnionToArray<\n S,\n Exclude<T, PopKeyofColumnShapeUnion<S, T>>,\n [PopKeyofColumnShapeUnion<S, T>, ...A]\n >\n : [T, ...A];\n\ntype GetPrimaryKeys<S extends ColumnsShape> = UnionToArray<\n S,\n { [K in keyof S]: S[K] extends { isPrimaryKey: true } ? K : never }[keyof S]\n>;\n\ntype GetPrimaryTypes<\n S extends ColumnsShape,\n Keys extends [...(keyof S | string)[]] = GetPrimaryKeys<S>,\n> = GetTypesFromKeys<S, Keys>;\n\ntype GetTypesFromKeys<\n S extends ColumnsShape,\n T extends [...(keyof S)[]],\n> = T extends [\n infer Head extends keyof S,\n ...infer Tail extends [...(keyof S)[]],\n]\n ? [GetTypeFromKey<S, Head>, ...GetTypesFromKeys<S, Tail>]\n : [];\n\ntype GetTypeFromKey<S extends ColumnsShape, T extends keyof S> = S[T]['type'];\n\nexport class TableSchema<Shape extends ColumnsShape> {\n primaryKeys: string extends keyof Shape ? string[] : GetPrimaryKeys<Shape>;\n primaryTypes!: GetPrimaryTypes<Shape>;\n\n constructor(public shape: Shape) {\n this.primaryKeys = Object.entries(this.shape)\n .filter(([, column]) => {\n return column.isPrimaryKey;\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(([key]) => key) as any;\n }\n}\n","import { SelectQueryData } from './types';\nimport { expressionToSql } from './common';\n\nexport const pushDistinctSql = (\n sql: string[],\n values: unknown[],\n distinct: Exclude<SelectQueryData['distinct'], undefined>,\n quotedAs?: string,\n) => {\n sql.push('DISTINCT');\n\n if (distinct.length) {\n const columns: string[] = [];\n distinct?.forEach((item) => {\n columns.push(expressionToSql(item, values, quotedAs));\n });\n sql.push(`ON (${columns.join(', ')})`);\n }\n};\n","import { OrderItem, SelectQueryData } from './types';\nimport { getRaw, isRaw } from '../common';\nimport { qc } from './common';\n\nexport const pushOrderBySql = (\n sql: string[],\n values: unknown[],\n quotedAs: string | undefined,\n order: Exclude<SelectQueryData['order'], undefined>,\n) => {\n sql.push(\n `ORDER BY ${order\n .map((item) => orderByToSql(item, values, quotedAs))\n .join(', ')}`,\n );\n};\n\nexport const orderByToSql = (\n order: OrderItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof order === 'string') {\n return `${qc(order, quotedAs)} ASC`;\n }\n\n if (isRaw(order)) {\n return getRaw(order, values);\n }\n\n const sql: string[] = [];\n for (const key in order) {\n const value = order[key];\n if (typeof value === 'string') {\n sql.push(`${qc(key, quotedAs)} ${value}`);\n } else if (value) {\n sql.push(`${qc(key, quotedAs)} ${value.dir} NULLS ${value.nulls}`);\n }\n }\n return sql.join(', ');\n};\n","import { Query } from '../query';\nimport { WindowDeclaration } from './types';\nimport { getRaw, isRaw, RawExpression } from '../common';\nimport { expressionToSql, q } from './common';\nimport { orderByToSql } from './orderBy';\n\nexport const windowToSql = <T extends Query>(\n window: T['windows'][number] | WindowDeclaration | RawExpression,\n values: unknown[],\n quotedAs?: string,\n) => {\n if (typeof window === 'object') {\n if (isRaw(window)) {\n return `(${getRaw(window, values)})`;\n } else {\n const sql: string[] = [];\n if (window.partitionBy) {\n sql.push(\n `PARTITION BY ${\n Array.isArray(window.partitionBy)\n ? window.partitionBy\n .map((partitionBy) =>\n expressionToSql(partitionBy, values, quotedAs),\n )\n .join(', ')\n : expressionToSql(window.partitionBy, values, quotedAs)\n }`,\n );\n }\n if (window.order) {\n sql.push(`ORDER BY ${orderByToSql(window.order, values, quotedAs)}`);\n }\n return `(${sql.join(' ')})`;\n }\n } else {\n return q(window as string);\n }\n};\n","import { q, quoteFullColumn, quoteSchemaAndTable } from './common';\nimport { getRaw, isRaw, RawExpression } from '../common';\nimport { JoinItem, QueryData } from './types';\nimport { Query, QueryBase } from '../query';\nimport { whereToSql } from './where';\nimport { Relation } from '../relations';\n\ntype ItemOf3Or4Length =\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n _: unknown,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn?: string | RawExpression,\n ];\n\nexport const processJoinItem = (\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'table' | 'shape' | 'relations'\n >,\n query: Pick<QueryData, 'as'>,\n values: unknown[],\n args: JoinItem['args'],\n quotedAs?: string,\n): { target: string; conditions?: string } => {\n const [first] = args;\n if (typeof first === 'string') {\n if (first in model.relations) {\n const { key, joinQuery } = (model.relations as Record<string, Relation>)[\n first\n ];\n\n const table = (\n typeof joinQuery.query.from === 'string'\n ? joinQuery.query.from\n : joinQuery.table\n ) as string;\n\n let target = quoteSchemaAndTable(joinQuery.query.schema, table);\n\n const as = joinQuery.query.as || key;\n if (as !== table) {\n target += ` AS ${q(as as string)}`;\n }\n\n const queryData = {\n and: [],\n or: [],\n } as {\n and: Exclude<QueryData['and'], undefined>;\n or: Exclude<QueryData['or'], undefined>;\n };\n\n if (joinQuery.query.and) queryData.and.push(...joinQuery.query.and);\n if (joinQuery.query.or) queryData.or.push(...joinQuery.query.or);\n\n const arg = (args[1] as ((q: unknown) => QueryBase) | undefined)?.(\n new model.onQueryBuilder({ table: model.table, query }, args[0]),\n ).query;\n\n if (arg) {\n if (arg.and) queryData.and.push(...arg.and);\n if (arg.or) queryData.or.push(...arg.or);\n }\n\n const joinAs = q(as as string);\n const onConditions = whereToSql(\n joinQuery,\n queryData,\n values,\n quotedAs,\n joinAs,\n );\n const conditions = onConditions ? onConditions : undefined;\n\n return { target, conditions };\n }\n\n const target = q(first);\n let conditions: string | undefined;\n\n if (args.length === 2) {\n const arg = args[1];\n if (typeof arg === 'function') {\n const joinQuery = arg(\n new model.onQueryBuilder({ table: model.table, query }, args[0]),\n );\n const onConditions = whereToSql(\n model,\n joinQuery.query,\n values,\n quotedAs,\n target,\n );\n if (onConditions) conditions = onConditions;\n } else {\n conditions = getObjectOrRawConditions(arg, values, quotedAs, target);\n }\n } else if (args.length >= 3) {\n conditions = getConditionsFor3Or4LengthItem(\n target,\n values,\n quotedAs,\n args as ItemOf3Or4Length,\n );\n }\n\n return { target, conditions };\n }\n\n const joinTarget = first;\n const joinQuery = joinTarget.query;\n\n const quotedFrom =\n typeof joinQuery?.from === 'string' ? q(joinQuery.from) : undefined;\n\n let target =\n quotedFrom || quoteSchemaAndTable(joinQuery?.schema, joinTarget.table);\n\n let joinAs = quotedFrom || q(joinTarget.table);\n if (joinQuery?.as) {\n const quoted = q(joinQuery.as);\n if (quoted !== joinAs) {\n joinAs = quoted;\n target += ` AS ${quoted}`;\n }\n }\n\n let conditions: string | undefined;\n\n if (args.length === 2) {\n const arg = args[1];\n if (typeof arg === 'function') {\n const joinQuery = arg(\n new model.onQueryBuilder({ table: model.table, query }, args[0]),\n );\n const onConditions = whereToSql(\n model,\n joinQuery.query,\n values,\n quotedAs,\n joinAs,\n );\n if (onConditions) conditions = onConditions;\n } else {\n conditions = getObjectOrRawConditions(arg, values, quotedAs, joinAs);\n }\n } else if (args.length >= 3) {\n conditions = getConditionsFor3Or4LengthItem(\n joinAs,\n values,\n quotedAs,\n args as ItemOf3Or4Length,\n );\n }\n\n if (joinQuery) {\n const whereSql = whereToSql(model, joinQuery, values, joinAs, quotedAs);\n if (whereSql) {\n if (conditions) conditions += ` AND ${whereSql}`;\n else conditions = whereSql;\n }\n }\n\n return { target, conditions };\n};\n\nconst getConditionsFor3Or4LengthItem = (\n target: string,\n values: unknown[],\n quotedAs: string | undefined,\n args: ItemOf3Or4Length,\n): string => {\n const [, leftColumn, opOrRightColumn, maybeRightColumn] = args;\n\n const op = maybeRightColumn ? opOrRightColumn : '=';\n const rightColumn = maybeRightColumn ? maybeRightColumn : opOrRightColumn;\n\n return `${\n typeof leftColumn === 'string'\n ? quoteFullColumn(leftColumn, target)\n : getRaw(leftColumn, values)\n } ${op} ${\n typeof rightColumn === 'string'\n ? quoteFullColumn(rightColumn, quotedAs)\n : getRaw(rightColumn, values)\n }`;\n};\n\nconst getObjectOrRawConditions = (\n data: Record<string, string | RawExpression> | RawExpression,\n values: unknown[],\n quotedAs: string | undefined,\n joinAs: string | undefined,\n): string => {\n if (isRaw(data)) {\n return getRaw(data, values);\n } else {\n const pairs: string[] = [];\n for (const key in data) {\n const value = data[key];\n\n pairs.push(\n `${quoteFullColumn(key, joinAs)} = ${\n typeof value === 'string'\n ? quoteFullColumn(value, quotedAs)\n : getRaw(value, values)\n }`,\n );\n }\n\n return pairs.join(', ');\n }\n};\n\nexport const pushJoinSql = (\n sql: string[],\n model: Query,\n query: QueryData & {\n join: JoinItem[];\n },\n values: unknown[],\n quotedAs?: string,\n) => {\n query.join.forEach((item) => {\n const { target, conditions } = processJoinItem(\n model,\n query,\n values,\n item.args,\n quotedAs,\n );\n\n sql.push(item.type, target);\n if (conditions) sql.push('ON', conditions);\n });\n};\n","import { Query } from '../query';\nimport {\n JoinItem,\n QueryData,\n WhereInItem,\n WhereItem,\n WhereJsonPathEqualsItem,\n WhereOnItem,\n} from './types';\nimport { addValue, q, qc, quoteFullColumn } from './common';\nimport { EMPTY_OBJECT, getRaw, isRaw, RawExpression } from '../common';\nimport { getQueryAs, MaybeArray, toArray } from '../utils';\nimport { processJoinItem } from './join';\n\nexport const pushWhereSql = (\n sql: string[],\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: Pick<QueryData, 'as' | 'and' | 'or'>,\n values: unknown[],\n quotedAs?: string,\n otherTableQuotedAs?: string,\n) => {\n const whereConditions = whereToSql(\n model,\n query,\n values,\n quotedAs,\n otherTableQuotedAs,\n );\n if (whereConditions) {\n sql.push('WHERE', whereConditions);\n }\n};\n\nexport const whereToSql = (\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'table' | 'shape' | 'relations'\n >,\n query: Pick<QueryData, 'as' | 'and' | 'or'>,\n values: unknown[],\n quotedAs?: string,\n otherTableQuotedAs?: string,\n not?: boolean,\n): string => {\n const or =\n query.and && query.or\n ? [query.and, ...query.or]\n : query.and\n ? [query.and]\n : query.or;\n if (!or?.length) return '';\n\n const ors: string[] = [];\n or.forEach((and) => {\n const ands: string[] = [];\n and.forEach((data) => {\n const prefix = not ? 'NOT ' : '';\n\n if (typeof data === 'function') {\n const qb = data(new model.whereQueryBuilder(model.table, query.as));\n\n const sql = whereToSql(\n model,\n {\n as: query.as,\n and: qb.query.and,\n or: qb.query.or,\n },\n values,\n quotedAs,\n otherTableQuotedAs,\n not,\n );\n if (sql) ands.push(sql);\n return;\n }\n\n if ('prototype' in data || '__model' in data) {\n const query = data as Query;\n const sql = whereToSql(\n query,\n query.query || EMPTY_OBJECT,\n values,\n query.table && q(query.table),\n );\n if (sql) {\n ands.push(`${prefix}(${sql})`);\n }\n return;\n }\n\n if (isRaw(data)) {\n ands.push(`${prefix}(${getRaw(data, values)})`);\n return;\n }\n\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n const handler = whereHandlers[key];\n if (handler) {\n handler(\n value,\n ands,\n prefix,\n model,\n query,\n values,\n quotedAs,\n otherTableQuotedAs,\n not,\n );\n } else if (\n typeof value === 'object' &&\n value !== null &&\n value !== undefined\n ) {\n if (isRaw(value)) {\n ands.push(\n `${prefix}${quoteFullColumn(key, quotedAs)} = ${getRaw(\n value,\n values,\n )}`,\n );\n } else {\n const column = model.shape[key];\n if (!column) {\n // TODO: custom error classes\n throw new Error(`Unknown column ${key} provided to condition`);\n }\n\n for (const op in value) {\n const operator = column.operators[op];\n if (!operator) {\n // TODO: custom error classes\n throw new Error(`Unknown operator ${op} provided to condition`);\n }\n\n ands.push(\n `${prefix}${operator(\n qc(key, quotedAs),\n value[op as keyof typeof value],\n values,\n )}`,\n );\n }\n }\n } else {\n ands.push(\n `${prefix}${quoteFullColumn(key, quotedAs)} ${\n value === null ? 'IS NULL' : `= ${addValue(values, value)}`\n }`,\n );\n }\n }\n });\n\n ors.push(ands.join(' AND '));\n });\n\n return ors.join(' OR ');\n};\n\nconst whereHandlers: Record<\n string,\n | ((\n value: unknown,\n ands: string[],\n prefix: string,\n ...params: Parameters<typeof whereToSql>\n ) => void)\n | undefined\n> = {\n AND(value, ands, _, model, _q, values, quotedAs, otherTableQuotedAs, not) {\n const sql = whereToSql(\n model,\n {\n and: toArray(value as MaybeArray<WhereItem>),\n },\n values,\n quotedAs,\n otherTableQuotedAs,\n not,\n );\n if (sql) ands.push(sql);\n },\n OR(value, ands, _, model, _q, values, quotedAs, otherTableQuotedAs, not) {\n const sql = whereToSql(\n model,\n {\n or: (value as MaybeArray<WhereItem>[]).map(toArray),\n },\n values,\n quotedAs,\n otherTableQuotedAs,\n not,\n );\n if (sql) ands.push(sql);\n },\n NOT(value, ands, _, model, _q, values, quotedAs, otherTableQuotedAs, not) {\n const sql = whereToSql(\n model,\n {\n and: toArray(value as MaybeArray<WhereItem>),\n },\n values,\n quotedAs,\n otherTableQuotedAs,\n !not,\n );\n if (sql) ands.push(sql);\n },\n ON(value, ands, prefix, _, _q, values, quotedAs, otherTableQuotedAs) {\n if (Array.isArray(value)) {\n const item = value as WhereJsonPathEqualsItem;\n const leftColumn = quoteFullColumn(item[0], quotedAs);\n const leftPath = item[1];\n const rightColumn = quoteFullColumn(item[2], otherTableQuotedAs);\n const rightPath = item[3];\n\n ands.push(\n `${prefix}jsonb_path_query_first(${leftColumn}, ${addValue(\n values,\n leftPath,\n )}) = jsonb_path_query_first(${rightColumn}, ${addValue(\n values,\n rightPath,\n )})`,\n );\n } else {\n const item = value as WhereOnItem;\n const leftColumn = quoteFullColumn(\n item.on[0],\n typeof item.joinTo === 'string'\n ? q(item.joinTo)\n : q(getQueryAs(item.joinTo)),\n );\n\n const joinTo =\n typeof item.joinFrom === 'string'\n ? item.joinFrom\n : q(getQueryAs(item.joinFrom));\n\n const [op, rightColumn] =\n item.on.length === 2\n ? ['=', quoteFullColumn(item.on[1], joinTo)]\n : [item.on[1], quoteFullColumn(item.on[2], joinTo)];\n\n ands.push(`${prefix}${leftColumn} ${op} ${rightColumn}`);\n }\n },\n IN(value, ands, prefix, _, _q, values, quotedAs) {\n toArray(value as MaybeArray<WhereInItem>).forEach((item) => {\n pushIn(ands, prefix, quotedAs, values, item);\n });\n },\n EXISTS(value, ands, prefix, model, query, values, quotedAs) {\n const joinItems = Array.isArray((value as unknown[])[0]) ? value : [value];\n (joinItems as JoinItem['args'][]).forEach((item) => {\n const { target, conditions } = processJoinItem(\n model,\n query,\n values,\n item,\n quotedAs,\n );\n\n ands.push(\n `${prefix}EXISTS (SELECT 1 FROM ${target} WHERE ${conditions} LIMIT 1)`,\n );\n });\n },\n};\n\nconst pushIn = (\n ands: string[],\n prefix: string,\n quotedAs: string | undefined,\n values: unknown[],\n arg: {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n },\n) => {\n let value: string;\n\n if (Array.isArray(arg.values)) {\n value = `${arg.values\n .map(\n (arr) => `(${arr.map((value) => addValue(values, value)).join(', ')})`,\n )\n .join(', ')}`;\n\n if (arg.columns.length > 1) value = `(${value})`;\n } else if (isRaw(arg.values)) {\n value = getRaw(arg.values, values);\n } else {\n const sql = arg.values.toSql(values);\n value = `(${sql.text})`;\n }\n\n const columnsSql = arg.columns\n .map((column) => quoteFullColumn(column, quotedAs))\n .join(', ');\n\n ands.push(\n `${prefix}${\n arg.columns.length > 1 ? `(${columnsSql})` : columnsSql\n } IN ${value}`,\n );\n};\n","import { AggregateItem } from './types';\nimport { addValue, expressionToSql, q } from './common';\nimport { EMPTY_OBJECT, Expression, getRaw, isRaw } from '../common';\nimport { windowToSql } from './window';\nimport { pushOrderBySql } from './orderBy';\nimport { whereToSql } from './where';\nimport { Query } from '../query';\n\nexport const aggregateToSql = (\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n values: unknown[],\n item: AggregateItem,\n quotedAs?: string,\n) => {\n const sql: string[] = [`${item.function}(`];\n\n const options = item.options || EMPTY_OBJECT;\n\n if (options.distinct && !options.withinGroup) sql.push('DISTINCT ');\n\n if (typeof item.arg === 'object') {\n if (Array.isArray(item.arg)) {\n sql.push(\n `${expressionToSql(item.arg[0], values, quotedAs)}, ${addValue(\n values,\n item.arg[1],\n )}`,\n );\n } else if (isRaw(item.arg)) {\n sql.push(getRaw(item.arg, values));\n } else {\n const args: string[] = [];\n for (const key in item.arg) {\n args.push(\n // ::text is needed to bypass \"could not determine data type of parameter\" postgres error\n `${addValue(values, key)}::text, ${expressionToSql(\n item.arg[key as keyof typeof item.arg] as unknown as Expression,\n values,\n quotedAs,\n )}`,\n );\n }\n sql.push(args.join(', '));\n }\n } else if (item.arg) {\n sql.push(expressionToSql(item.arg, values, quotedAs));\n }\n\n if (options.withinGroup) sql.push(') WITHIN GROUP (');\n else if (options.order) sql.push(' ');\n\n if (options.order) pushOrderBySql(sql, values, quotedAs, options.order);\n\n sql.push(')');\n\n if (options.filter || options.filterOr) {\n const whereSql = whereToSql(\n model,\n {\n and: options.filter ? [options.filter] : undefined,\n or: options.filterOr?.map((item) => [item]),\n },\n values,\n quotedAs,\n );\n\n sql.push(` FILTER (WHERE ${whereSql})`);\n }\n\n if (options.over) {\n sql.push(` OVER ${windowToSql(options.over, values, quotedAs)}`);\n }\n\n if (options.as) sql.push(` AS ${q(options.as)}`);\n\n return sql.join('');\n};\n","import { defaultsKey, Query, QueryBase, QueryWithTable } from './query';\nimport { WhereArg } from './queryMethods/where';\nimport { MaybeArray } from './utils';\nimport { UpdateData } from './queryMethods/update';\n\nexport type NestedInsertOneItem = {\n create?: Record<string, unknown>;\n connect?: WhereArg<QueryBase>;\n};\n\nexport type NestedInsertManyItems = {\n create?: Record<string, unknown>[];\n connect?: WhereArg<QueryBase>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n};\n\nexport type NestedInsertItem = NestedInsertOneItem | NestedInsertManyItems;\n\nexport type BelongsToNestedInsert = (\n query: Query,\n relationData: NestedInsertOneItem[],\n) => Promise<Record<string, unknown>[]>;\n\nexport type HasOneNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertOneItem,\n ][],\n) => Promise<void>;\n\nexport type HasManyNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertManyItems,\n ][],\n) => Promise<void>;\n\nexport type NestedUpdateOneItem = {\n disconnect?: boolean;\n set?: WhereArg<QueryBase>;\n delete?: boolean;\n update?: UpdateData<Query>;\n upsert?: {\n update: UpdateData<Query>;\n create: Record<string, unknown>;\n };\n create: Record<string, unknown>;\n};\n\nexport type NestedUpdateManyItems = {\n disconnect?: MaybeArray<WhereArg<QueryBase>>;\n set?: MaybeArray<WhereArg<QueryBase>>;\n delete?: MaybeArray<WhereArg<QueryBase>>;\n update?: {\n where: MaybeArray<WhereArg<QueryBase>>;\n data: UpdateData<Query>;\n };\n create: Record<string, unknown>[];\n};\n\nexport type NestedUpdateItem = NestedUpdateOneItem | NestedUpdateManyItems;\n\nexport type BelongsToNestedUpdate = (\n q: Query,\n update: Record<string, unknown>,\n params: NestedUpdateOneItem,\n state: {\n updateLater?: Record<string, unknown>;\n updateLaterPromises?: Promise<void>[];\n },\n) => boolean;\n\nexport type HasOneNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateOneItem,\n) => Promise<void>;\n\nexport type HasManyNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateManyItems,\n) => Promise<void>;\n\nexport type BaseRelation = {\n type: string;\n key: string;\n model: QueryWithTable;\n joinQuery: Query;\n nestedCreateQuery: Query;\n nestedInsert?:\n | BelongsToNestedInsert\n | HasOneNestedInsert\n | HasManyNestedInsert;\n nestedUpdate?:\n | BelongsToNestedUpdate\n | HasOneNestedUpdate\n | HasManyNestedUpdate;\n primaryKey: string;\n options: {\n scope?(q: QueryWithTable): QueryWithTable;\n required?: boolean;\n };\n};\n\nexport interface BelongsToRelation extends BaseRelation {\n type: 'belongsTo';\n returns: 'one';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n };\n}\n\nexport interface HasOneRelation extends BaseRelation {\n type: 'hasOne';\n returns: 'one';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasManyRelation extends BaseRelation {\n type: 'hasMany';\n returns: 'many';\n options: BaseRelation['options'] &\n (\n | {\n primaryKey: string;\n foreignKey: string;\n }\n | {\n through: string;\n source: string;\n }\n );\n}\n\nexport interface HasAndBelongsToManyRelation extends BaseRelation {\n type: 'hasAndBelongsToMany';\n returns: 'many';\n options: BaseRelation['options'] & {\n primaryKey: string;\n foreignKey: string;\n associationPrimaryKey: string;\n associationForeignKey: string;\n joinTable: string;\n };\n}\n\nexport type Relation =\n | BelongsToRelation\n | HasOneRelation\n | HasManyRelation\n | HasAndBelongsToManyRelation;\n\nexport type RelationsBase = Record<never, Relation>;\n\nexport type relationQueryKey = typeof relationQueryKey;\nexport const relationQueryKey = Symbol('relationQuery');\n\nexport type isRequiredRelationKey = typeof isRequiredRelationKey;\nexport const isRequiredRelationKey = Symbol('isRequiredRelation');\n\nexport type RelationQueryBase = Query & {\n [relationQueryKey]: string;\n [isRequiredRelationKey]: boolean;\n};\n\nexport type RelationQuery<\n RelationName extends PropertyKey = string,\n Params extends Record<string, unknown> = never,\n Populate extends string = never,\n T extends Query = Query,\n Required extends boolean = boolean,\n Q extends RelationQueryBase = Omit<T, 'tableAlias'> & {\n tableAlias: RelationName extends string ? RelationName : never;\n [isRequiredRelationKey]: Required;\n [relationQueryKey]: string;\n },\n> = ((params: Params) => Q & { [defaultsKey]: Pick<T['type'], Populate> }) & Q;\n","import { JsonItem, SelectFunctionItem, SelectQueryData } from './types';\nimport { Expression, getRaw, isRaw } from '../common';\nimport { Query } from '../query';\nimport { addValue, q, quoteFullColumn } from './common';\nimport { aggregateToSql } from './aggregate';\nimport { getQueryAs } from '../utils';\nimport { RelationQuery, relationQueryKey } from '../relations';\n\nconst jsonColumnOrMethodToSql = (\n column: string | JsonItem,\n values: unknown[],\n quotedAs?: string,\n) => {\n return typeof column === 'string'\n ? quoteFullColumn(column, quotedAs)\n : jsonToSql(column, values, quotedAs);\n};\n\nconst jsonToSql = (\n item: JsonItem,\n values: unknown[],\n quotedAs?: string,\n): string => {\n const json = item.__json;\n if (json[0] === 'pathQuery') {\n const [, , , column, path, options] = json;\n return `jsonb_path_query(${jsonColumnOrMethodToSql(\n column,\n values,\n quotedAs,\n )}, ${addValue(values, path)}${\n options?.vars ? `, ${addValue(values, options.vars)}` : ''\n }${options?.silent ? ', true' : ''})`;\n } else if (json[0] === 'set') {\n const [, , , column, path, value, options] = json;\n return `jsonb_set(${jsonColumnOrMethodToSql(\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.createIfMissing ? ', true' : ''\n })`;\n } else if (json[0] === 'insert') {\n const [, , , column, path, value, options] = json;\n return `jsonb_insert(${jsonColumnOrMethodToSql(\n column,\n values,\n quotedAs,\n )}, '{${path.join(', ')}}', ${addValue(values, JSON.stringify(value))}${\n options?.insertAfter ? ', true' : ''\n })`;\n } else if (json[0] === 'remove') {\n const [, , , column, path] = json;\n return `${jsonColumnOrMethodToSql(\n column,\n values,\n quotedAs,\n )} #- '{${path.join(', ')}}'`;\n }\n return '';\n};\n\nexport const pushSelectSql = (\n sql: string[],\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n values: unknown[],\n quotedAs?: string,\n) => {\n sql.push(selectToSql(model, query, values, quotedAs));\n};\n\nexport const selectToSql = (\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: Pick<SelectQueryData, 'select' | 'join'>,\n values: unknown[],\n quotedAs?: string,\n): string => {\n if (query.select) {\n const list: string[] = [];\n query.select.forEach((item) => {\n if (typeof item === 'string') {\n list.push(\n item === '*'\n ? query.join?.length\n ? `${quotedAs}.*`\n : '*'\n : quoteFullColumn(item, quotedAs),\n );\n } else if ((item as Query).query?.[relationQueryKey]) {\n let relationQuery = (item as RelationQuery).clone();\n const as = q(getQueryAs(relationQuery));\n relationQuery._as(relationQuery.query[relationQueryKey] as string);\n\n const { returnType } = relationQuery.query;\n if (\n returnType === 'all' ||\n returnType === 'one' ||\n returnType === 'oneOrThrow'\n ) {\n relationQuery = relationQuery._json() as unknown as RelationQuery;\n }\n\n list.push(`(${relationQuery.toSql(values).text}) AS ${as}`);\n } else {\n if ('selectAs' in item) {\n const obj = item.selectAs as Record<string, Expression | Query>;\n for (const as in obj) {\n const value = obj[as];\n if (typeof value === 'object') {\n if (isRaw(value)) {\n list.push(`${getRaw(value, values)} AS ${q(as)}`);\n } else {\n const sql = (value as Query).json().toSql(values);\n list.push(`(${sql.text}) AS ${q(as)}`);\n }\n } else {\n list.push(\n `${quoteFullColumn(value as string, quotedAs)} AS ${q(as)}`,\n );\n }\n }\n } else if ('__json' in item) {\n list.push(\n `${jsonToSql(item, values, quotedAs)} AS ${q(item.__json[1])}`,\n );\n } else if (isRaw(item)) {\n list.push(getRaw(item, values));\n } else if ('arguments' in item) {\n list.push(\n `${(item as SelectFunctionItem).function}(${selectToSql(\n model,\n { select: item.arguments },\n values,\n quotedAs,\n )})${item.as ? ` AS ${q((item as { as: string }).as)}` : ''}`,\n );\n } else {\n list.push(aggregateToSql(model, values, item, quotedAs));\n }\n }\n });\n return list.join(', ');\n } else {\n return query.join?.length ? `${quotedAs}.*` : '*';\n }\n};\n","import { AggregateItemOptions, HavingItem, SelectQueryData } from './types';\nimport { EMPTY_OBJECT, getRaw, isRaw, RawExpression } from '../common';\nimport { Operator } from '../operators';\nimport { aggregateToSql } from './aggregate';\nimport { Query } from '../query';\nimport { addValue, q } from './common';\n\nconst aggregateOptionNames: (keyof AggregateItemOptions)[] = [\n 'distinct',\n 'order',\n 'filter',\n 'filterOr',\n 'withinGroup',\n];\n\nexport const pushHavingSql = (\n sql: string[],\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: SelectQueryData,\n values: unknown[],\n quotedAs?: string,\n) => {\n const conditions = havingToSql(model, query, values, quotedAs);\n if (conditions.length) sql.push('HAVING', conditions);\n};\n\nexport const havingToSql = (\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: SelectQueryData,\n values: unknown[],\n quotedAs?: string,\n): string => {\n const or =\n query.having && query.havingOr\n ? [query.having, ...query.havingOr]\n : query.having\n ? [query.having]\n : query.havingOr;\n if (!or?.length) return '';\n\n const ors: string[] = [];\n or.forEach((and) => {\n const ands: string[] = [];\n and.forEach((item) => {\n if ('prototype' in item || '__model' in item) {\n const query = item as Query;\n const sql = havingToSql(\n query,\n query.query as SelectQueryData,\n values,\n query.table && q(query.table),\n );\n if (sql.length) ands.push(`(${sql})`);\n return;\n }\n\n if (isRaw(item)) {\n ands.push(getRaw(item, values));\n return;\n }\n\n for (const key in item) {\n const columns = item[key as keyof Exclude<HavingItem, RawExpression>];\n if (typeof columns === 'object') {\n for (const column in columns) {\n const valueOrOptions = columns[column as keyof typeof columns];\n if (\n typeof valueOrOptions === 'object' &&\n valueOrOptions !== null &&\n valueOrOptions !== undefined\n ) {\n for (const op in valueOrOptions) {\n if (\n !aggregateOptionNames.includes(\n op as keyof AggregateItemOptions,\n )\n ) {\n const operator = model.shape[column].operators[\n op\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as Operator<any>;\n if (!operator) {\n // TODO: custom error classes\n throw new Error(\n `Unknown operator ${op} provided to condition`,\n );\n }\n\n const expression = aggregateToSql(\n model,\n values,\n {\n function: key,\n arg: column,\n options: valueOrOptions as AggregateItemOptions,\n },\n quotedAs,\n );\n\n ands.push(\n operator(\n expression,\n valueOrOptions[op as keyof typeof valueOrOptions],\n values,\n ),\n );\n }\n }\n } else {\n ands.push(\n `${aggregateToSql(\n model,\n values,\n {\n function: key,\n arg: column,\n options: EMPTY_OBJECT,\n },\n quotedAs,\n )} = ${addValue(values, valueOrOptions)}`,\n );\n }\n }\n } else {\n ands.push(`${key}(*) = ${columns}`);\n }\n }\n });\n\n ors.push(ands.join(' AND '));\n });\n\n return ors.join(' OR ');\n};\n","import { QueryData } from './types';\nimport { q } from './common';\nimport { isRaw, getRaw } from '../common';\n\nexport const pushWithSql = (\n sql: string[],\n values: unknown[],\n withData: Exclude<QueryData['with'], undefined>,\n) => {\n withData.forEach((withItem) => {\n const [name, options, query] = withItem;\n\n let inner: string;\n if (isRaw(query)) {\n inner = getRaw(query, values);\n } else {\n inner = query.toSql(values).text;\n }\n\n sql.push(\n `WITH ${options.recursive ? 'RECURSIVE ' : ''}${q(name)}${\n options.columns ? `(${options.columns.map(q).join(', ')})` : ''\n } AS ${\n options.materialized\n ? 'MATERIALIZED '\n : options.notMaterialized\n ? 'NOT MATERIALIZED '\n : ''\n }(${inner})`,\n );\n });\n};\n","import {\n ColumnsParsers,\n Query,\n QueryBase,\n QueryReturnType,\n QueryWithTable,\n SelectableBase,\n} from '../query';\nimport { Expression, RawExpression } from '../common';\nimport { ColumnsShape, ColumnType } from '../columnSchema';\nimport { RelationQuery, relationQueryKey } from '../relations';\nimport { Adapter, QueryResult } from '../adapter';\nimport { MaybeArray } from '../utils';\nimport { QueryLogger, QueryLogObject } from '../queryMethods/log';\nimport { AfterCallback, BeforeCallback } from '../queryMethods/callbacks';\n\nexport type Sql = {\n text: string;\n values: unknown[];\n};\n\n// used in `from` logic to decide if convert query to sql or just write table name\nexport const queryKeysOfNotSimpleQuery: (keyof SelectQueryData)[] = [\n 'take',\n 'with',\n 'as',\n 'from',\n 'and',\n 'or',\n 'select',\n 'distinct',\n 'fromOnly',\n 'join',\n 'group',\n 'having',\n 'havingOr',\n 'window',\n 'union',\n 'order',\n 'limit',\n 'offset',\n 'for',\n];\n\nexport type CommonQueryData = {\n adapter: Adapter;\n handleResult(q: Query, result: QueryResult): Promise<unknown>;\n returnType: QueryReturnType;\n [relationQueryKey]?: string;\n inTransaction?: boolean;\n wrapInTransaction?: boolean;\n throwOnNotFound?: boolean;\n take?: boolean;\n with?: WithItem[];\n withShapes?: Record<string, ColumnsShape>;\n schema?: string;\n select?: SelectItem[];\n as?: string;\n from?: string | Query | RawExpression;\n and?: WhereItem[];\n or?: WhereItem[][];\n parsers?: ColumnsParsers;\n defaults?: Record<string, unknown>;\n beforeQuery?: BeforeCallback<Query>[];\n afterQuery?: AfterCallback<Query>[];\n log?: QueryLogObject;\n logger: QueryLogger;\n};\n\nexport type SelectQueryData = CommonQueryData & {\n type: undefined;\n distinct?: Expression[];\n fromOnly?: boolean;\n join?: JoinItem[];\n joinedParsers?: Record<string, ColumnsParsers>;\n group?: (string | RawExpression)[];\n having?: HavingItem[];\n havingOr?: HavingItem[][];\n window?: WindowItem[];\n union?: { arg: UnionItem; kind: UnionKind; wrap?: boolean }[];\n order?: OrderItem[];\n limit?: number;\n offset?: number;\n for?: {\n type: 'UPDATE' | 'NO KEY UPDATE' | 'SHARE' | 'KEY SHARE';\n tableNames?: string[] | RawExpression;\n mode?: 'NO WAIT' | 'SKIP LOCKED';\n };\n};\n\nexport type InsertQueryData = CommonQueryData & {\n type: 'insert';\n columns: string[];\n values: unknown[][] | RawExpression;\n using?: JoinItem[];\n join?: JoinItem[];\n joinedParsers?: Record<string, ColumnsParsers>;\n onConflict?:\n | {\n type: 'ignore';\n expr?: OnConflictItem;\n }\n | {\n type: 'merge';\n expr?: OnConflictItem;\n update?: OnConflictMergeUpdate;\n };\n beforeInsert?: BeforeCallback<Query>[];\n afterInsert?: AfterCallback<Query>[];\n};\n\nexport type UpdateQueryData = CommonQueryData & {\n type: 'update';\n data: (\n | Record<string, RawExpression | { op: string; arg: unknown } | unknown>\n | RawExpression\n )[];\n beforeUpdate?: BeforeCallback<Query>[];\n afterUpdate?: AfterCallback<Query>[];\n};\n\nexport type DeleteQueryData = CommonQueryData & {\n type: 'delete';\n join?: JoinItem[];\n joinedParsers?: Record<string, ColumnsParsers>;\n};\n\nexport type TruncateQueryData = CommonQueryData & {\n type: 'truncate';\n restartIdentity?: boolean;\n cascade?: boolean;\n};\n\nexport type ColumnInfoQueryData = CommonQueryData & {\n type: 'columnInfo';\n column?: string;\n};\n\nexport type QueryData =\n | SelectQueryData\n | InsertQueryData\n | UpdateQueryData\n | DeleteQueryData\n | TruncateQueryData\n | ColumnInfoQueryData;\n\nexport type WithItem = [\n as: string,\n options: WithOptions,\n query: Query | RawExpression,\n];\n\nexport type WithOptions = {\n columns?: string[];\n recursive?: true;\n materialized?: true;\n notMaterialized?: true;\n};\n\nexport type JsonItem<\n As extends string = string,\n Type extends ColumnType = ColumnType,\n> = {\n __json:\n | [\n kind: 'set',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n createIfMissing?: boolean;\n },\n ]\n | [\n kind: 'insert',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n value: unknown,\n options?: {\n insertAfter?: boolean;\n },\n ]\n | [\n kind: 'remove',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: Array<string | number>,\n ]\n | [\n kind: 'pathQuery',\n as: As,\n type: Type,\n column: string | JsonItem,\n path: string,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ];\n};\n\nexport type SelectItem =\n | string\n | RelationQuery\n | AggregateItem\n | { selectAs: Record<string, string | Query | RawExpression> }\n | SelectFunctionItem\n | JsonItem\n | RawExpression;\n\nexport type SelectFunctionItem = {\n function: string;\n arguments: SelectItem[];\n as?: string;\n};\n\nexport type JoinItem = {\n type: string;\n args:\n | [relation: string]\n | [\n arg: string | QueryWithTable,\n conditions:\n | Record<string, string | RawExpression>\n | RawExpression\n | ((q: unknown) => QueryBase),\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n rightColumn: string | RawExpression,\n ]\n | [\n arg: string | QueryWithTable,\n leftColumn: string | RawExpression,\n op: string,\n rightColumn: string | RawExpression,\n ];\n};\n\nexport type WhereItem =\n | (Omit<\n Record<\n string,\n | unknown\n | Record<string, unknown | Query | RawExpression>\n | RawExpression\n >,\n 'NOT' | 'AND' | 'OR' | 'IN' | 'EXISTS' | 'ON' | 'ON_JSON_PATH_EQUALS'\n > & {\n NOT?: MaybeArray<WhereItem>;\n AND?: MaybeArray<WhereItem>;\n OR?: MaybeArray<WhereItem>[];\n IN?: MaybeArray<WhereInItem>;\n EXISTS?: MaybeArray<JoinItem['args']>;\n ON?: WhereOnItem | WhereJsonPathEqualsItem;\n })\n | ((q: unknown) => QueryBase)\n | Query\n | RawExpression;\n\nexport type WhereInItem = {\n columns: string[];\n values: unknown[][] | Query | RawExpression;\n};\n\nexport type WhereJsonPathEqualsItem = [\n leftColumn: string,\n leftPath: string,\n rightColumn: string,\n rightPath: string,\n];\n\nexport type WhereOnItem = {\n joinFrom: { table?: string; query: { as?: string } } | string;\n joinTo: { table?: string; query: { as?: string } } | string;\n on:\n | [leftFullColumn: string, rightFullColumn: string]\n | [leftFullColumn: string, op: string, rightFullColumn: string];\n};\n\nexport type AggregateItemOptions = {\n as?: string;\n distinct?: boolean;\n order?: OrderItem[];\n filter?: WhereItem;\n filterOr?: WhereItem[];\n withinGroup?: boolean;\n over?: string;\n window?: WindowItem;\n};\n\nexport type SortDir = 'ASC' | 'DESC';\n\nexport type OrderItem =\n | string\n | Record<string, SortDir | { dir: SortDir; nulls: 'FIRST' | 'LAST' }>\n | RawExpression;\n\nexport type AggregateItemArg =\n | Expression\n | Record<string, Expression>\n | [Expression, string];\n\nexport type AggregateItem = {\n function: string;\n arg?: AggregateItemArg;\n options: AggregateItemOptions;\n};\n\nexport type ColumnOperators<\n S extends SelectableBase,\n Column extends keyof S,\n> = {\n [O in keyof S[Column]['column']['operators']]?:\n | S[Column]['column']['operators'][O]['type'];\n};\n\ntype HavingItemObject = Record<string, unknown>;\n\nexport type HavingItem =\n | Record<string, HavingItemObject>\n | { count?: number | HavingItemObject }\n | Query\n | RawExpression;\n\nexport type WindowItem = Record<string, WindowDeclaration | RawExpression>;\n\nexport type WindowDeclaration = {\n partitionBy?: Expression | Expression[];\n order?: OrderItem;\n};\n\nexport type UnionItem = Query | RawExpression;\n\ntype UnionKind =\n | 'UNION'\n | 'UNION ALL'\n | 'INTERSECT'\n | 'INTERSECT ALL'\n | 'EXCEPT'\n | 'EXCEPT ALL';\n\nexport type OnConflictItem = string | string[] | RawExpression;\n\nexport type OnConflictMergeUpdate =\n | string\n | string[]\n | Record<string, unknown>\n | RawExpression;\n","import { getRaw, isRaw } from '../common';\nimport { quoteSchemaAndTable } from './common';\nimport { Query } from '../query';\nimport { queryKeysOfNotSimpleQuery, SelectQueryData } from './types';\n\nexport const pushFromAndAs = (\n sql: string[],\n model: Query,\n query: SelectQueryData,\n values: unknown[],\n quotedAs?: string,\n) => {\n sql.push('FROM');\n if (query.fromOnly) sql.push('ONLY');\n\n const from = getFrom(model, query, values);\n sql.push(from);\n\n if (query.as && quotedAs && quotedAs !== from) {\n sql.push('AS', quotedAs as string);\n }\n};\n\nconst getFrom = (model: Query, query: SelectQueryData, values: unknown[]) => {\n if (query.from) {\n if (typeof query.from === 'object') {\n if (isRaw(query.from)) {\n return getRaw(query.from, values);\n }\n\n if (!query.from.table) {\n const sql = query.from.toSql(values);\n return `(${sql.text})`;\n }\n\n const q = query.from.query;\n const keys = Object.keys(q) as (keyof SelectQueryData)[];\n // if query contains more than just schema return (SELECT ...)\n if (keys.some((key) => queryKeysOfNotSimpleQuery.includes(key))) {\n const sql = query.from.toSql(values);\n return `(${sql.text})`;\n }\n\n return quoteSchemaAndTable(q.schema, query.from.table);\n }\n\n return quoteSchemaAndTable(query.schema, query.from);\n }\n\n return quoteSchemaAndTable(query.schema, model.table as string);\n};\n","import { InsertQueryData, QueryData } from './types';\nimport { addValue, q } from './common';\nimport { getRaw, isRaw } from '../common';\nimport { pushWhereSql } from './where';\nimport { Query } from '../query';\nimport { selectToSql } from './select';\n\nexport const pushInsertSql = (\n sql: string[],\n values: unknown[],\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: InsertQueryData,\n quotedAs: string,\n) => {\n const quotedColumns = query.columns.map(q);\n\n sql.push(\n `INSERT INTO ${quotedAs}(${quotedColumns.join(', ')}) VALUES ${\n isRaw(query.values)\n ? getRaw(query.values, values)\n : query.values\n .map(\n (row) =>\n `(${row\n .map((value) =>\n value === undefined ? 'DEFAULT' : addValue(values, value),\n )\n .join(', ')})`,\n )\n .join(', ')\n }`,\n );\n\n if (query.onConflict) {\n sql.push('ON CONFLICT');\n\n const { expr, type } = query.onConflict;\n if (expr) {\n if (typeof expr === 'string') {\n sql.push(`(${q(expr)})`);\n } else if (Array.isArray(expr)) {\n sql.push(`(${expr.map(q).join(', ')})`);\n } else {\n sql.push(getRaw(expr, values));\n }\n } else {\n sql.push(`(${quotedColumns.join(', ')})`);\n }\n\n if (type === 'ignore') {\n sql.push('DO NOTHING');\n } else if (type === 'merge') {\n let set: string;\n\n const { update } = query.onConflict;\n if (update) {\n if (typeof update === 'string') {\n set = `${q(update)} = excluded.${q(update)}`;\n } else if (Array.isArray(update)) {\n set = update\n .map((column) => `${q(column)} = excluded.${q(column)}`)\n .join(', ');\n } else if (isRaw(update)) {\n set = getRaw(update, values);\n } else {\n const arr: string[] = [];\n for (const key in update) {\n arr.push(`${q(key)} = ${addValue(values, update[key])}`);\n }\n set = arr.join(', ');\n }\n } else {\n set = quotedColumns\n .map((column) => `${column} = excluded.${column}`)\n .join(', ');\n }\n\n sql.push('DO UPDATE SET', set);\n }\n }\n\n pushWhereSql(sql, model, query, values, quotedAs);\n pushReturningSql(sql, model, query, values, quotedAs);\n};\n\nexport const pushReturningSql = (\n sql: string[],\n model: Pick<\n Query,\n 'whereQueryBuilder' | 'onQueryBuilder' | 'as' | 'shape' | 'relations'\n >,\n query: QueryData,\n values: unknown[],\n quotedAs: string,\n) => {\n if (query.select) {\n sql.push(`RETURNING ${selectToSql(model, query, values, quotedAs)}`);\n }\n};\n","import { Query } from '../query';\nimport { UpdateQueryData } from './types';\nimport { addValue, q, quoteSchemaAndTable } from './common';\nimport { getRaw, isRaw, RawExpression } from '../common';\nimport { pushReturningSql } from './insert';\nimport { pushWhereSql } from './where';\n\nexport const pushUpdateSql = (\n sql: string[],\n values: unknown[],\n model: Query,\n query: UpdateQueryData,\n quotedAs: string,\n) => {\n const quotedTable = quoteSchemaAndTable(query.schema, model.table as string);\n sql.push(`UPDATE ${quotedTable}`);\n\n if (query.as && quotedTable !== quotedAs) {\n sql.push(`AS ${quotedAs}`);\n }\n\n sql.push('SET');\n\n query.data.forEach((item) => {\n if (isRaw(item)) {\n sql.push(getRaw(item, values));\n } else {\n const set: string[] = [];\n\n for (const key in item) {\n const value = item[key];\n if (value !== undefined) {\n set.push(`${q(key)} = ${processValue(values, key, value)}`);\n }\n }\n\n sql.push(set.join(', '));\n }\n });\n\n pushWhereSql(sql, model, query, values, quotedAs);\n pushReturningSql(sql, model, query, values, quotedAs);\n};\n\nconst processValue = (\n values: unknown[],\n key: string,\n value: Exclude<UpdateQueryData['data'][number], RawExpression>[string],\n) => {\n if (value && typeof value === 'object') {\n if (isRaw(value)) {\n return getRaw(value, values);\n } else if ('op' in value && 'arg' in value) {\n return `${q(key)} ${(value as { op: string }).op} ${addValue(\n values,\n (value as { arg: unknown }).arg,\n )}`;\n }\n }\n\n return addValue(values, value);\n};\n","import { Query } from '../query';\nimport { DeleteQueryData } from './types';\nimport { pushWhereSql } from './where';\nimport { pushReturningSql } from './insert';\nimport { processJoinItem } from './join';\n\nexport const pushDeleteSql = (\n sql: string[],\n values: unknown[],\n model: Query,\n query: DeleteQueryData,\n quotedAs: string,\n) => {\n sql.push(`DELETE FROM ${quotedAs}`);\n\n let conditions: string | undefined;\n if (query.join?.length) {\n const items = query.join.map((item) =>\n processJoinItem(model, query, values, item.args, quotedAs),\n );\n\n sql.push(`USING ${items.map((item) => item.target).join(', ')}`);\n\n conditions = items\n .map((item) => item.conditions)\n .filter(Boolean)\n .join(' AND ');\n }\n\n pushWhereSql(sql, model, query, values, quotedAs);\n\n if (conditions?.length) {\n if (query.and?.length || query.or?.length) {\n sql.push('AND', conditions);\n } else {\n sql.push('WHERE', conditions);\n }\n }\n\n pushReturningSql(sql, model, query, values, quotedAs);\n};\n","import { TruncateQueryData } from './types';\nimport { quoteSchemaAndTable } from './common';\n\nexport const pushTruncateSql = (\n sql: string[],\n table: string,\n query: TruncateQueryData,\n) => {\n sql.push('TRUNCATE', quoteSchemaAndTable(query.schema, table));\n\n if (query.restartIdentity) sql.push('RESTART IDENTITY');\n if (query.cascade) sql.push('CASCADE');\n};\n","import { ColumnInfoQueryData } from './types';\nimport { addValue } from './common';\n\nexport const pushColumnInfoSql = (\n sql: string[],\n values: unknown[],\n table: string,\n query: ColumnInfoQueryData,\n) => {\n sql.push(\n `SELECT * FROM information_schema.columns WHERE table_name = ${addValue(\n values,\n table,\n )} AND table_catalog = current_database() AND table_schema = ${\n query.schema || 'current_schema()'\n }`,\n );\n\n if (query.column) {\n sql.push(`AND column_name = ${addValue(values, query.column)}`);\n }\n};\n","import { getRaw, isRaw } from '../common';\nimport { Query } from '../query';\nimport { addValue, q, qc } from './common';\nimport { JoinItem, QueryData, Sql } from './types';\nimport { pushDistinctSql } from './distinct';\nimport { pushSelectSql } from './select';\nimport { windowToSql } from './window';\nimport { pushJoinSql } from './join';\nimport { pushWhereSql } from './where';\nimport { pushHavingSql } from './having';\nimport { pushWithSql } from './with';\nimport { pushFromAndAs } from './fromAndAs';\nimport { pushInsertSql } from './insert';\nimport { pushUpdateSql } from './update';\nimport { pushDeleteSql } from './delete';\nimport { pushTruncateSql } from './truncate';\nimport { pushColumnInfoSql } from './columnInfo';\nimport { pushOrderBySql } from './orderBy';\n\nexport const toSql = (model: Query, values: unknown[] = []): Sql => {\n const query = model.query;\n const sql: string[] = [];\n\n if (query.with) {\n pushWithSql(sql, values, query.with);\n }\n\n if (query.type) {\n if (query.type === 'truncate') {\n if (!model.table) throw new Error('Table is missing for truncate');\n\n pushTruncateSql(sql, model.table, query);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'columnInfo') {\n if (!model.table) throw new Error('Table is missing for truncate');\n\n pushColumnInfoSql(sql, values, model.table, query);\n return { text: sql.join(' '), values };\n }\n\n if (!model.table) throw new Error(`Table is missing for ${query.type}`);\n\n const quotedAs = q(query.as || model.table);\n\n if (query.type === 'insert') {\n pushInsertSql(sql, values, model, query, q(model.table));\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'update') {\n pushUpdateSql(sql, values, model, query, quotedAs);\n return { text: sql.join(' '), values };\n }\n\n if (query.type === 'delete') {\n pushDeleteSql(sql, values, model, query, q(model.table));\n return { text: sql.join(' '), values };\n }\n }\n\n const quotedAs = model.table && q(query.as || model.table);\n\n sql.push('SELECT');\n\n if (query.distinct) {\n pushDistinctSql(sql, values, query.distinct, quotedAs);\n }\n\n pushSelectSql(sql, model, query, values, quotedAs);\n\n if (model.table || query.from) {\n pushFromAndAs(sql, model, query, values, quotedAs);\n }\n\n if (query.join) {\n pushJoinSql(\n sql,\n model,\n query as QueryData & { join: JoinItem[] },\n values,\n quotedAs,\n );\n }\n\n if (query.and || query.or) {\n pushWhereSql(sql, model, query, values, quotedAs);\n }\n\n if (query.group) {\n const group = query.group.map((item) =>\n typeof item === 'object' && isRaw(item)\n ? getRaw(item, values)\n : qc(item as string, quotedAs),\n );\n sql.push(`GROUP BY ${group.join(', ')}`);\n }\n\n if (query.having || query.havingOr) {\n pushHavingSql(sql, model, query, values, quotedAs);\n }\n\n if (query.window) {\n const window: string[] = [];\n query.window.forEach((item) => {\n for (const key in item) {\n window.push(`${q(key)} AS ${windowToSql(item[key], values, quotedAs)}`);\n }\n });\n sql.push(`WINDOW ${window.join(', ')}`);\n }\n\n if (query.union) {\n query.union.forEach((item) => {\n let itemSql: string;\n if (isRaw(item.arg)) {\n itemSql = getRaw(item.arg, values);\n } else {\n const argSql = item.arg.toSql(values);\n itemSql = argSql.text;\n }\n sql.push(`${item.kind} ${item.wrap ? `(${itemSql})` : itemSql}`);\n });\n }\n\n if (query.order) {\n pushOrderBySql(sql, values, quotedAs, query.order);\n }\n\n if (query.take || query.limit !== undefined) {\n sql.push(`LIMIT ${addValue(values, query.take ? 1 : query.limit)}`);\n }\n\n if (query.offset) {\n sql.push(`OFFSET ${addValue(values, query.offset)}`);\n }\n\n if (query.for) {\n sql.push('FOR', query.for.type);\n const { tableNames } = query.for;\n if (tableNames) {\n if (isRaw(tableNames)) {\n sql.push('OF', getRaw(tableNames, values));\n } else {\n sql.push('OF', tableNames.map(q).join(', '));\n }\n }\n if (query.for.mode) sql.push(query.for.mode);\n }\n\n return { text: sql.join(' '), values };\n};\n","import { Pool, PoolClient, PoolConfig, types } from 'pg';\n\nexport interface QueryResultRow {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [column: string]: any;\n}\n\nexport type TypeParsers = Record<number, (input: string) => unknown>;\n\ntype Query = string | { text: string; values?: unknown[] };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryResult<T extends QueryResultRow = any> = {\n rowCount: number;\n rows: T[];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type QueryArraysResult<R extends any[] = any[]> = {\n rowCount: number;\n rows: R[];\n fields: { name: string }[];\n};\n\nconst defaultTypeParsers: TypeParsers = {};\n\nfor (const key in types.builtins) {\n const id = types.builtins[key as keyof typeof types.builtins];\n defaultTypeParsers[id] = types.getTypeParser(id);\n}\n\n[\n types.builtins.DATE,\n types.builtins.TIMESTAMP,\n types.builtins.TIMESTAMPTZ,\n types.builtins.TIME,\n].forEach((id) => {\n delete defaultTypeParsers[id];\n});\n\nconst returnArg = (arg: unknown) => arg;\n\nexport type AdapterOptions = Omit<PoolConfig, 'types'> & {\n types?: TypeParsers;\n};\n\nexport class Adapter {\n types: TypeParsers;\n pool: Pool;\n\n constructor({ types = defaultTypeParsers, ...config }: AdapterOptions) {\n this.types = types;\n this.pool = new Pool(config);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: Query,\n types: TypeParsers = this.types,\n ): Promise<QueryResult<T>> {\n const client = await this.pool.connect();\n try {\n return await performQuery<T>(client, query, types);\n } finally {\n client.release();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: Query,\n types: TypeParsers = this.types,\n ): Promise<QueryArraysResult<R>> {\n const client = await this.pool.connect();\n try {\n return await performQueryArrays<R>(client, query, types);\n } finally {\n client.release();\n }\n }\n\n async transaction<Result>(\n cb: (adapter: Adapter) => Promise<Result>,\n ): Promise<Result> {\n const client = await this.pool.connect();\n try {\n await performQuery(client, { text: 'BEGIN' }, this.types);\n const result = await cb(\n new TransactionAdapter(this.pool, client, this.types),\n );\n await performQuery(client, { text: 'COMMIT' }, this.types);\n return result;\n } catch (err) {\n await performQuery(client, { text: 'ROLLBACK' }, this.types);\n throw err;\n } finally {\n client.release();\n }\n }\n destroy(): Promise<void> {\n return this.pool.end();\n }\n}\n\nconst performQuery = <T extends QueryResultRow>(\n client: PoolClient,\n query: Query,\n types: TypeParsers,\n) => {\n return client.query<T>({\n text: typeof query === 'string' ? query : query.text,\n values: typeof query === 'string' ? undefined : query.values,\n types: types && {\n getTypeParser(id: number) {\n return types[id] || returnArg;\n },\n },\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst performQueryArrays = <T extends any[] = any[]>(\n client: PoolClient,\n query: Query,\n types: TypeParsers,\n) => {\n return client.query<T>({\n text: typeof query === 'string' ? query : query.text,\n values: typeof query === 'string' ? undefined : query.values,\n rowMode: 'array',\n types: types && {\n getTypeParser(id: number) {\n return types[id] || returnArg;\n },\n },\n });\n};\n\nexport class TransactionAdapter implements Adapter {\n constructor(\n public pool: Pool,\n public client: PoolClient,\n public types: TypeParsers,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: Query,\n types: TypeParsers = this.types,\n ): Promise<QueryResult<T>> {\n return await performQuery<T>(this.client, query, types);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: Query,\n types: TypeParsers = this.types,\n ): Promise<QueryArraysResult<R>> {\n return await performQueryArrays<R>(this.client, query, types);\n }\n\n async transaction<Result>(\n cb: (adapter: Adapter) => Promise<Result>,\n ): Promise<Result> {\n return await cb(this);\n }\n\n destroy() {\n return this.pool.end();\n }\n}\n","import { Query } from './query';\nimport { QueryData } from './sql';\n\n// TODO: remove\nexport const removeFromQuery = <T extends Query>(q: T, key: string): T => {\n if (q.query) delete q.query[key as keyof typeof q.query];\n return q;\n};\n\nexport const pushQueryArray = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[key as keyof typeof q.query])\n (q.query as Record<string, unknown>)[key] = value;\n else\n (q.query[key as keyof typeof q.query] as unknown[]).push(\n ...(value as unknown[]),\n );\n return q as T;\n};\n\nexport const pushQueryValue = <T extends { query: QueryData }>(\n q: T,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[key as keyof typeof q.query])\n (q.query as Record<string, unknown>)[key] = [value];\n else (q.query[key as keyof typeof q.query] as unknown[]).push(value);\n return q as unknown as T;\n};\n\nexport const setQueryObjectValue = <T extends { query: QueryData }>(\n q: T,\n object: string,\n key: string,\n value: unknown,\n): T => {\n if (!q.query[object as keyof typeof q.query])\n (q.query as unknown as Record<string, Record<string, unknown>>)[object] = {\n [key]: value,\n };\n else\n (q.query as unknown as Record<string, Record<string, unknown>>)[object][\n key\n ] = value;\n return q as unknown as T;\n};\n","export class NotFoundError extends Error {\n constructor(message = 'Record is not found') {\n super(message);\n }\n}\n\nexport class MoreThanOneRowError extends Error {}\n","import { ColumnsParsers, Query, QueryReturnType } from '../query';\nimport { getQueryParsers } from '../common';\nimport { NotFoundError } from '../errors';\nimport { QueryArraysResult, QueryResult } from '../adapter';\nimport { CommonQueryData, Sql } from '../sql';\nimport { AfterCallback, BeforeCallback } from './callbacks';\n\nexport type ThenResult<Res> = <T extends Query>(\n this: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve?: (value: Res) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject?: (error: any) => any,\n) => Promise<Res | never>;\n\nexport const queryMethodByReturnType: Record<\n QueryReturnType,\n 'query' | 'arrays'\n> = {\n all: 'query',\n one: 'query',\n oneOrThrow: 'query',\n rows: 'arrays',\n pluck: 'arrays',\n value: 'arrays',\n valueOrThrow: 'arrays',\n rowCount: 'arrays',\n void: 'arrays',\n};\n\nexport class Then {\n then(\n this: Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve?: (result: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject?: (error: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n if (this.query.wrapInTransaction && !this.query.inTransaction) {\n return this.transaction((q) => then(q, resolve, reject));\n } else {\n return then(this, resolve, reject);\n }\n }\n}\n\nexport const handleResult: CommonQueryData['handleResult'] = async (\n q,\n result: QueryResult,\n) => {\n return parseResult(q, q.query.returnType, result);\n};\n\nconst then = async (\n q: Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve?: (result: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject?: (error: any) => any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> => {\n let sql: Sql | undefined;\n let logData: unknown | undefined;\n try {\n let beforeCallbacks: BeforeCallback<Query>[] | undefined;\n let afterCallbacks: AfterCallback<Query>[] | undefined;\n if (q.query.type === 'insert') {\n beforeCallbacks = q.query.beforeInsert;\n afterCallbacks = q.query.afterInsert;\n } else if (q.query.type === 'update') {\n beforeCallbacks = q.query.beforeUpdate;\n afterCallbacks = q.query.afterUpdate;\n }\n\n if (beforeCallbacks) {\n await Promise.all(beforeCallbacks.map((cb) => cb(q)));\n }\n\n if (q.query.beforeQuery) {\n await Promise.all(q.query.beforeQuery.map((cb) => cb(q)));\n }\n\n sql = q.toSql();\n\n if (q.query.log) {\n logData = q.query.log?.beforeQuery(q, sql);\n }\n\n const queryResult = await q.query.adapter[\n queryMethodByReturnType[q.query.returnType] as 'query'\n ](sql);\n\n if (q.query.log) {\n q.query.log?.afterQuery(q, sql, logData);\n // set sql to be undefined to prevent logging on error in case if afterCallbacks throws\n sql = undefined;\n }\n\n const result = await q.query.handleResult(q, queryResult);\n\n if (afterCallbacks?.length || q.query.afterQuery?.length) {\n if (q.query.afterQuery?.length) {\n await Promise.all(q.query.afterQuery.map((query) => query(q, result)));\n }\n\n if (afterCallbacks?.length) {\n await Promise.all(afterCallbacks.map((query) => query(q, result)));\n }\n }\n\n resolve?.(result);\n } catch (error) {\n if (q.query.log && sql && logData) {\n q.query.log.onError(error as Error, q, sql, logData);\n }\n reject?.(error);\n }\n};\n\nexport const parseResult = (\n q: Query,\n returnType: QueryReturnType,\n result: QueryResult,\n): unknown => {\n switch (returnType) {\n case 'all': {\n if (q.query.throwOnNotFound && result.rows.length === 0)\n throw new NotFoundError();\n\n const parsers = getQueryParsers(q);\n return parsers\n ? result.rows.map((row) => parseRecord(parsers, row))\n : result.rows;\n }\n case 'one': {\n const row = result.rows[0];\n if (!row) return;\n\n const parsers = getQueryParsers(q);\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'oneOrThrow': {\n const row = result.rows[0];\n if (!row) throw new NotFoundError();\n\n const parsers = getQueryParsers(q);\n return parsers ? parseRecord(parsers, row) : row;\n }\n case 'rows': {\n const parsers = getQueryParsers(q);\n return parsers\n ? parseRows(\n parsers,\n (result as unknown as QueryArraysResult).fields,\n result.rows,\n )\n : result.rows;\n }\n case 'pluck': {\n const parsers = getQueryParsers(q);\n if (parsers?.pluck) {\n return result.rows.map((row) => parsers.pluck(row[0]));\n }\n return result.rows.map((row) => row[0]);\n }\n case 'value': {\n const value = result.rows[0]?.[0];\n return value !== undefined\n ? parseValue(value, (result as unknown as QueryArraysResult).fields, q)\n : undefined;\n }\n case 'valueOrThrow': {\n const value = result.rows[0]?.[0];\n if (value === undefined) throw new NotFoundError();\n\n return parseValue(\n value,\n (result as unknown as QueryArraysResult).fields,\n q,\n );\n }\n case 'rowCount': {\n if (q.query.throwOnNotFound && result.rowCount === 0) {\n throw new NotFoundError();\n }\n return result.rowCount;\n }\n case 'void': {\n return;\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const parseRecord = (parsers: ColumnsParsers, row: any) => {\n for (const key in parsers) {\n if (row[key] !== null && row[key] !== undefined) {\n row[key] = parsers[key](row[key]);\n }\n }\n return row;\n};\n\nconst parseRows = (\n parsers: ColumnsParsers,\n fields: { name: string }[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: any[],\n) => {\n fields.forEach((field, i) => {\n const parser = parsers[field.name];\n if (parser) {\n rows.forEach((row) => {\n row[i] = parser(row[i]);\n });\n }\n });\n return rows;\n};\n\nconst parseValue = (\n value: unknown,\n fields: { name: string }[],\n query: Query,\n) => {\n const field = fields[0];\n if (value !== null) {\n const parsers = getQueryParsers(query);\n const parser = parsers?.[field.name];\n if (parser) {\n return parser(value);\n }\n }\n return value;\n};\n","import {\n AddQuerySelect,\n ColumnParser,\n Query,\n QueryBase,\n QuerySelectAll,\n} from '../query';\nimport {\n ArrayOfColumnsObjects,\n ColumnsObject,\n NullableColumn,\n} from '../columnSchema';\nimport { getQueryParsers, isRaw, RawExpression } from '../common';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { parseRecord } from './then';\nimport { QueryData, SelectItem, SelectQueryData } from '../sql';\nimport { FilterTuple, getQueryAs, SimpleSpread } from '../utils';\nimport {\n isRequiredRelationKey,\n Relation,\n RelationQueryBase,\n relationQueryKey,\n} from '../relations';\n\nexport type SelectArg<T extends QueryBase> =\n | keyof T['selectable']\n | (T['relations'] extends Record<string, Relation>\n ? keyof T['relations']\n : never)\n | RelationQueryBase\n | SelectAsArg<T>;\n\ntype SelectAsArg<T extends QueryBase> = Record<\n string,\n keyof T['selectable'] | Query | RawExpression\n>;\n\ntype SelectResult<\n T extends Query,\n Args extends SelectArg<T>[],\n SelectAsArgs = SimpleSpread<FilterTuple<Args, SelectAsArg<QueryBase>>>,\n> = AddQuerySelect<\n T,\n {\n [Arg in Args[number] as Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['as']\n : Arg extends keyof T['relations']\n ? Arg\n : Arg extends RelationQueryBase\n ? Arg['tableAlias'] extends string\n ? Arg['tableAlias']\n : never\n : never]: Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['returnType'] extends 'all'\n ? ArrayOfColumnsObjects<Arg['result']>\n : Arg['returnType'] extends 'valueOrThrow'\n ? Arg['result']['value']\n : Arg[isRequiredRelationKey] extends true\n ? ColumnsObject<Arg['result']>\n : NullableColumn<ColumnsObject<Arg['result']>>\n : T['relations'] extends Record<string, Relation>\n ? Arg extends keyof T['relations']\n ? T['relations'][Arg]['returns'] extends 'many'\n ? ArrayOfColumnsObjects<T['relations'][Arg]['model']['result']>\n : T['relations'][Arg]['options']['required'] extends true\n ? ColumnsObject<T['relations'][Arg]['model']['result']>\n : NullableColumn<\n ColumnsObject<T['relations'][Arg]['model']['result']>\n >\n : never\n : never;\n } & {\n [K in keyof SelectAsArgs]: SelectAsArgs[K] extends keyof T['selectable']\n ? T['selectable'][SelectAsArgs[K]]['column']\n : SelectAsArgs[K] extends RawExpression\n ? SelectAsArgs[K]['__column']\n : SelectAsArgs[K] extends Query\n ? SelectAsArgs[K]['returnType'] extends 'all'\n ? ArrayOfColumnsObjects<SelectAsArgs[K]['result']>\n : ColumnsObject<SelectAsArgs[K]['result']>\n : never;\n }\n>;\n\nexport const addParserForRawExpression = (\n q: Query,\n key: string,\n raw: RawExpression,\n) => {\n const parser = raw.__column?.parseFn;\n if (parser) addParserToQuery(q.query, key, parser);\n};\n\nexport const addParserForSelectItem = <T extends Query>(\n q: T,\n as: string | undefined,\n key: string,\n item: keyof T['selectable'] | Query | RawExpression,\n) => {\n if (typeof item === 'object') {\n if (isRaw(item)) {\n addParserForRawExpression(q, key, item);\n } else {\n const parsers = getQueryParsers(item);\n if (parsers) {\n if (item.query.take) {\n addParserToQuery(q.query, key, (item) => parseRecord(parsers, item));\n } else {\n addParserToQuery(q.query, key, (items) =>\n (items as unknown[]).map((item) => parseRecord(parsers, item)),\n );\n }\n }\n }\n } else {\n const index = (item as string).indexOf('.');\n if (index !== -1) {\n const table = (item as string).slice(0, index);\n const column = (item as string).slice(index + 1);\n\n if (table === as) {\n const parser = q.columnsParsers?.[column];\n if (parser) addParserToQuery(q.query, key, parser);\n } else {\n const parser = (q.query as SelectQueryData).joinedParsers?.[table]?.[\n column\n ];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n } else {\n const parser = q.columnsParsers?.[item as string];\n if (parser) addParserToQuery(q.query, key, parser);\n }\n }\n};\n\nexport const addParserToQuery = (\n query: QueryData,\n key: string,\n parser: ColumnParser,\n) => {\n if (query.parsers) query.parsers[key] = parser;\n else query.parsers = { [key]: parser };\n};\n\nexport const processSelectArg = <T extends Query>(\n q: T,\n as: string | undefined,\n item: SelectArg<T>,\n): SelectItem => {\n if (typeof item === 'string') {\n if ((q.relations as Record<string, Relation>)[item]) {\n item = (q as unknown as Record<string, RelationQueryBase>)[item];\n } else {\n const index = item.indexOf('.');\n if (index !== -1) {\n const table = item.slice(0, index);\n const column = item.slice(index + 1);\n\n if (table === as) {\n const parser = q.columnsParsers?.[column];\n if (parser) addParserToQuery(q.query, column, parser);\n } else {\n const parser = (q.query as SelectQueryData).joinedParsers?.[table]?.[\n column\n ];\n if (parser) addParserToQuery(q.query, column, parser);\n }\n } else {\n const parser = q.columnsParsers?.[item];\n if (parser) addParserToQuery(q.query, item, parser);\n }\n return item;\n }\n }\n\n if ((item as { query?: QueryData }).query?.[relationQueryKey]) {\n const relation = item as RelationQueryBase;\n const parsers = relation.query.parsers || relation.columnsParsers;\n if (parsers) {\n addParserToQuery(q.query, getQueryAs(relation), (input) => {\n if (Array.isArray(input)) {\n input.forEach((record: unknown) => {\n for (const key in parsers) {\n const value = (record as Record<string, unknown>)[key];\n if (value !== null) {\n (record as Record<string, unknown>)[key] = parsers[key](value);\n }\n }\n });\n } else {\n for (const key in parsers) {\n const value = (input as Record<string, unknown>)[key];\n if (value !== null) {\n (input as Record<string, unknown>)[key] = parsers[key](value);\n }\n }\n }\n return input;\n });\n }\n } else {\n for (const key in item as SelectAsArg<QueryBase>) {\n addParserForSelectItem(q, as, key, (item as SelectAsArg<QueryBase>)[key]);\n }\n\n return { selectAs: item } as SelectItem;\n }\n\n return item as SelectItem;\n};\n\nexport class Select {\n select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n return this.clone()._select(...args) as unknown as SelectResult<T, K>;\n }\n\n _select<T extends Query, K extends SelectArg<T>[]>(\n this: T,\n ...args: K\n ): SelectResult<T, K> {\n if (!args.length) {\n return this as unknown as SelectResult<T, K>;\n }\n\n const as = this.query.as || this.table;\n const selectArgs = args.map((item) => processSelectArg(this, as, item));\n\n return pushQueryArray(\n this,\n 'select',\n selectArgs,\n ) as unknown as SelectResult<T, K>;\n }\n\n selectAll<T extends Query>(this: T): QuerySelectAll<T> {\n return this.clone()._selectAll();\n }\n\n _selectAll<T extends Query>(this: T): QuerySelectAll<T> {\n this.query.select = ['*'];\n return this as unknown as QuerySelectAll<T>;\n }\n}\n","import {\n BooleanExpression,\n Expression,\n ExpressionOutput,\n NumberExpression,\n raw,\n StringExpression,\n} from '../common';\nimport { AddQuerySelect, Query, SetQueryReturnsValue } from '../query';\nimport { pushQueryValue, removeFromQuery } from '../queryDataUtils';\nimport {\n BooleanColumn,\n ColumnType,\n ArrayColumn,\n NumberColumn,\n StringColumn,\n IntegerColumn,\n NullableColumn,\n} from '../columnSchema';\nimport { CoalesceString } from '../utils';\nimport { OrderArg, WindowArgDeclaration } from './queryMethods';\nimport { WhereArg } from './where';\nimport { addParserToQuery } from './select';\nimport { SelectItem } from '../sql';\n\nconst allColumns = raw('*');\n\nexport type AggregateArg<T extends Query> =\n | Expression<T>\n | Record<string, Expression<T>>\n | [Expression<T>, string];\n\nexport type AggregateOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = {\n as?: As;\n distinct?: boolean;\n order?: OrderArg<T> | OrderArg<T>[];\n filter?: WhereArg<T>;\n filterOr?: WhereArg<T>[];\n withinGroup?: boolean;\n over?: T['windows'][number] | WindowArgDeclaration<T>;\n};\n\n// 1 in the name means only methods which takes 1 argument are listed here\n// only such one argument methods are available in .having method\nexport type Aggregate1ArgumentTypes<\n T extends Query = Query,\n C extends ColumnType = ColumnType,\n> = {\n count: Expression<T, C>;\n avg: NumberExpression<T, C>;\n min: Expression<T, C>;\n max: Expression<T, C>;\n sum: NumberExpression<T, C>;\n bitAnd: NumberExpression<T, C>;\n bitOr: NumberExpression<T, C>;\n boolAnd: BooleanExpression<T, C>;\n boolOr: BooleanExpression<T, C>;\n every: BooleanExpression<T, C>;\n jsonAgg: Expression<T, C>;\n jsonbAgg: Expression<T, C>;\n xmlAgg: Expression<T, C>;\n};\n\nexport const aggregate1FunctionNames = {\n count: 'count',\n avg: 'avg',\n min: 'min',\n max: 'max',\n sum: 'sum',\n bitAnd: 'bit_and',\n bitOr: 'bit_or',\n boolAnd: 'bool_and',\n boolOr: 'bool_or',\n every: 'every',\n jsonAgg: 'json_agg',\n jsonbAgg: 'jsonb_agg',\n xmlAgg: 'xmlagg',\n} as const;\n\nexport type SelectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n> = AddQuerySelect<T, Record<CoalesceString<As, Func>, Value>>;\n\ntype AT1<T extends Query> = Aggregate1ArgumentTypes<T>;\n\nexport type WindowFunctionOptions<\n T extends Query = Query,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n As extends string | undefined = any,\n> = { as?: As } & WindowArgDeclaration<T>;\n\nconst buildAggregateSelectItem = <T extends Query>(\n functionName: string,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T>,\n) => {\n return {\n function: functionName,\n arg,\n options: {\n ...options,\n order: options?.order\n ? Array.isArray(options.order)\n ? options.order\n : [options.order]\n : undefined,\n filter: options?.filter,\n filterOr: options?.filterOr,\n },\n };\n};\n\nconst parseIntColumn = new IntegerColumn().parse((input) =>\n parseInt(input as unknown as string),\n);\n\nconst parseIntOrNullColumn = new IntegerColumn().parse((input) =>\n input === null ? null : parseInt(input as unknown as string),\n);\n\nconst get = <T extends Query, Column extends ColumnType>(\n q: Query,\n): SetQueryReturnsValue<T, Column> => {\n q.query.returnType = 'valueOrThrow';\n removeFromQuery(q, 'take');\n\n const select = q.query.select as SelectItem[];\n if (select.length > 1) {\n select[0] = select[select.length - 1];\n select.length = 1;\n }\n\n return q as unknown as SetQueryReturnsValue<T, Column>;\n};\n\nexport class Aggregate {\n selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, Func, As, Value> {\n return this.clone()._selectAgg(functionName, arg, options) as SelectAgg<\n T,\n Func,\n As,\n Value\n >;\n }\n\n _selectAgg<\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n >(\n this: T,\n functionName: Func,\n arg: AggregateArg<T>,\n options?: AggregateOptions<T, As>,\n columnType?: ColumnType,\n ): SelectAgg<T, Func, As, Value> {\n pushQueryValue(\n this,\n 'select',\n buildAggregateSelectItem<T>(functionName, arg, options),\n );\n\n if (columnType?.parseFn) {\n addParserToQuery(\n this.query,\n options?.as || functionName,\n columnType.parseFn,\n );\n }\n\n return this as unknown as SelectAgg<T, Func, As, Value>;\n }\n\n count<T extends Query>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> {\n return this.clone()._count(arg, options);\n }\n\n _count<T extends Query>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NumberColumn> {\n return get<T, NumberColumn>(this._selectCount(arg, options));\n }\n\n selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg?: AT1<T>['count'] | '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this.clone()._selectCount(arg, options);\n }\n\n _selectCount<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: AT1<T>['count'] | '*' = '*',\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'count', As, NumberColumn> {\n return this._selectAgg(\n aggregate1FunctionNames.count,\n arg === '*' ? allColumns : arg,\n options,\n parseIntColumn,\n );\n }\n\n avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._avg(arg, options);\n }\n\n _avg<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['avg'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectAvg(arg, options));\n }\n\n selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectAvg(arg, options);\n }\n\n _selectAvg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'avg', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.avg,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._min(arg, options);\n }\n\n _min<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['min'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMin(arg, options));\n }\n\n selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMin(arg, options);\n }\n\n _selectMin<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'min', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.min,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._max(arg, options);\n }\n\n _max<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['max'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectMax(arg, options));\n }\n\n selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectMax(arg, options);\n }\n\n _selectMax<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'max', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.max,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._sum(arg, options);\n }\n\n _sum<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['sum'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(this._selectSum(arg, options));\n }\n\n selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectSum(arg, options);\n }\n\n _selectSum<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'sum', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(\n aggregate1FunctionNames.sum,\n arg,\n options,\n parseIntOrNullColumn,\n );\n }\n\n bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitAnd(arg, options);\n }\n\n _bitAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitAnd(arg, options),\n );\n }\n\n selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitAnd(arg, options);\n }\n\n _selectBitAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_and', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitAnd, arg, options);\n }\n\n bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return this.clone()._bitOr(arg, options);\n }\n\n _bitOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['bitOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<NumberColumn>> {\n return get<T, NullableColumn<NumberColumn>>(\n this._selectBitOr(arg, options),\n );\n }\n\n selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this.clone()._selectBitOr(arg, options);\n }\n\n _selectBitOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bit_or', As, NullableColumn<NumberColumn>> {\n return this._selectAgg(aggregate1FunctionNames.bitOr, arg, options);\n }\n\n boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolAnd(arg, options);\n }\n\n _boolAnd<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolAnd'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolAnd(arg, options),\n );\n }\n\n selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolAnd(arg, options);\n }\n\n _selectBoolAnd<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_and', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolAnd, arg, options);\n }\n\n boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._boolOr(arg, options);\n }\n\n _boolOr<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['boolOr'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectBoolOr(arg, options),\n );\n }\n\n selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectBoolOr(arg, options);\n }\n\n _selectBoolOr<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'bool_or', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.boolOr, arg, options);\n }\n\n every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return this.clone()._every(arg, options);\n }\n\n _every<T extends Query>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['every'],\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<BooleanColumn>> {\n return get<T, NullableColumn<BooleanColumn>>(\n this._selectEvery(arg, options),\n );\n }\n\n selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this.clone()._selectEvery(arg, options);\n }\n\n _selectEvery<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Expression<T>,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'every', As, NullableColumn<BooleanColumn>> {\n return this._selectAgg(aggregate1FunctionNames.every, arg, options);\n }\n\n jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonAgg(arg, options);\n }\n\n _jsonAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['jsonAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonAgg(arg, options),\n );\n }\n\n selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonAgg(arg, options);\n }\n\n _selectJsonAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonAgg, arg, options);\n }\n\n jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._jsonbAgg(arg, options);\n }\n\n _jsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return get<T, NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>>(\n this._selectJsonbAgg(arg, options),\n );\n }\n\n selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this.clone()._selectJsonbAgg(arg, options);\n }\n\n _selectJsonbAgg<\n T extends Query,\n Expr extends Aggregate1ArgumentTypes<T>['jsonbAgg'],\n As extends string | undefined = undefined,\n >(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_agg',\n As,\n NullableColumn<ArrayColumn<ExpressionOutput<T, Expr>>>\n > {\n return this._selectAgg(aggregate1FunctionNames.jsonbAgg, arg, options);\n }\n\n xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._xmlAgg(arg, options);\n }\n\n _xmlAgg<T extends Query, Expr extends Aggregate1ArgumentTypes<T>['xmlAgg']>(\n this: T,\n arg: Expr,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectXmlAgg(arg, options),\n );\n }\n\n selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectXmlAgg(arg, options);\n }\n\n _selectXmlAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: Aggregate1ArgumentTypes<T>['xmlAgg'],\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'xmlagg', As, NullableColumn<StringColumn>> {\n return this._selectAgg(aggregate1FunctionNames.xmlAgg, arg, options);\n }\n\n jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonObjectAgg(obj, options);\n }\n\n _jsonObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonObjectAgg(obj, options));\n }\n\n selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonObjectAgg(obj, options);\n }\n\n _selectJsonObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'json_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('json_object_agg', obj, options);\n }\n\n jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._jsonbObjectAgg(obj, options);\n }\n\n _jsonbObjectAgg<T extends Query, Obj extends Record<string, Expression<T>>>(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return get<\n T,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n >(this._selectJsonbObjectAgg(obj, options));\n }\n\n selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this.clone()._selectJsonbObjectAgg(obj, options);\n }\n\n _selectJsonbObjectAgg<\n T extends Query,\n Obj extends Record<string, Expression<T>>,\n As extends string | undefined = undefined,\n >(\n this: T,\n obj: Obj,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<\n T,\n 'jsonb_object_agg',\n As,\n NullableColumn<\n ColumnType<{ [K in keyof Obj]: ExpressionOutput<T, Obj[K]>['type'] }>\n >\n > {\n return this._selectAgg('jsonb_object_agg', obj, options);\n }\n\n stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return this.clone()._stringAgg(arg, delimiter, options);\n }\n\n _stringAgg<T extends Query>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T>,\n ): SetQueryReturnsValue<T, NullableColumn<StringColumn>> {\n return get<T, NullableColumn<StringColumn>>(\n this._selectStringAgg(arg, delimiter, options),\n );\n }\n\n selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this.clone()._selectStringAgg(arg, delimiter, options);\n }\n\n _selectStringAgg<T extends Query, As extends string | undefined = undefined>(\n this: T,\n arg: StringExpression<T>,\n delimiter: string,\n options?: AggregateOptions<T, As>,\n ): SelectAgg<T, 'string_agg', As, NullableColumn<StringColumn>> {\n return this._selectAgg('string_agg', [arg, delimiter], options);\n }\n}\n","import { Query, SetQueryTableAlias } from '../query';\nimport { AliasOrTable, isRaw, RawExpression } from '../common';\nimport { SelectQueryData } from '../sql';\n\ntype FromArgs<T extends Query> = [\n first:\n | string\n | Query\n | RawExpression\n | Exclude<keyof T['withData'], symbol | number>,\n second?: string | { as?: string; only?: boolean },\n];\n\ntype FromResult<\n T extends Query,\n Args extends FromArgs<T>,\n> = Args[1] extends string\n ? SetQueryTableAlias<T, Args[1]>\n : Args[1] extends { as: string }\n ? SetQueryTableAlias<T, Args[1]['as']>\n : Args[0] extends string\n ? SetQueryTableAlias<T, Args[0]>\n : Args[0] extends Query\n ? SetQueryTableAlias<T, AliasOrTable<Args[0]>>\n : T;\n\nexport class From {\n from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n return this.clone()._from(...args) as FromResult<T, Args>;\n }\n\n _from<T extends Query, Args extends FromArgs<T>>(\n this: T,\n ...args: Args\n ): FromResult<T, Args> {\n let as: string | undefined;\n if (typeof args[1] === 'string') {\n as = args[1];\n } else if (typeof args[1] === 'object' && args[1].as) {\n as = args[1].as;\n } else if (typeof args[0] === 'string') {\n if (!this.query.as) as = args[0];\n } else if (!isRaw(args[0] as RawExpression)) {\n as = (args[0] as Query).query.as || (args[0] as Query).table;\n }\n\n if (typeof args[1] === 'object' && 'only' in args[1]) {\n (this.query as SelectQueryData).fromOnly = args[1].only;\n }\n\n const q = as ? this._as(as) : this;\n q.query.from = args[0];\n return q as unknown as FromResult<T, Args>;\n }\n}\n","import { Query, QueryBase, SelectableBase, WithDataBase } from '../query';\nimport { ColumnOperators, QueryData } from '../sql';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { RawExpression } from '../common';\nimport { getClonedQueryData, MaybeArray } from '../utils';\nimport { JoinArgs, JoinCallback, JoinCallbackArg } from './join';\nimport { RelationsBase } from '../relations';\n\nexport type WhereArg<T extends QueryBase> =\n | (Omit<\n {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type']\n | null\n | ColumnOperators<T['selectable'], K>\n | RawExpression;\n },\n 'NOT' | 'OR' | 'IN' | 'EXISTS'\n > & {\n NOT?: MaybeArray<WhereArg<T>>;\n OR?: MaybeArray<WhereArg<T>>[];\n IN?: MaybeArray<{\n columns: (keyof T['selectable'])[];\n values: unknown[][] | Query | RawExpression;\n }>;\n EXISTS?: MaybeArray<JoinArgs<T> | JoinCallbackArg<T>>;\n })\n | QueryBase\n | RawExpression\n | ((q: WhereQueryBuilder<T>) => WhereQueryBuilder);\n\nexport type WhereInColumn<T extends QueryBase> =\n | keyof T['selectable']\n | [keyof T['selectable'], ...(keyof T['selectable'])[]];\n\nexport type WhereInValues<\n T extends QueryBase,\n Column extends WhereInColumn<T>,\n> = Column extends keyof T['selectable']\n ? T['selectable'][Column]['column']['type'][] | Query | RawExpression\n :\n | ({\n [I in keyof Column]: Column[I] extends keyof T['selectable']\n ? T['selectable'][Column[I]]['column']['type']\n : never;\n } & {\n length: Column extends { length: number } ? Column['length'] : never;\n })[]\n | Query\n | RawExpression;\n\nexport type WhereResult<T extends QueryBase> = Omit<T, 'hasWhere'> & {\n hasWhere: true;\n};\n\nexport type WhereInArg<T extends Pick<Query, 'selectable'>> = {\n [K in keyof T['selectable']]?:\n | T['selectable'][K]['column']['type'][]\n | Query\n | RawExpression;\n};\n\nexport const addWhere = <T extends Where>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(q, 'and', args) as unknown as WhereResult<T>;\n};\n\nexport const addWhereNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryValue(q, 'and', {\n NOT: args,\n }) as unknown as WhereResult<T>;\n};\n\nexport const addOr = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [item]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addOrNot = <T extends QueryBase>(\n q: T,\n args: WhereArg<T>[],\n): WhereResult<T> => {\n return pushQueryArray(\n q,\n 'or',\n args.map((item) => [{ NOT: item }]),\n ) as unknown as WhereResult<T>;\n};\n\nexport const addWhereIn = <T extends QueryBase>(\n q: T,\n and: boolean,\n arg: unknown,\n values: unknown[] | unknown[][] | Query | RawExpression | undefined,\n not?: boolean,\n): WhereResult<T> => {\n const op = not ? 'notIn' : 'in';\n\n let item;\n if (values) {\n if (Array.isArray(arg)) {\n item = {\n IN: {\n columns: arg,\n values,\n },\n };\n if (not) item = { NOT: item };\n } else {\n item = { [arg as string]: { [op]: values } };\n }\n } else {\n item = {} as Record<string, { in: unknown[] }>;\n for (const key in arg as Record<string, unknown[]>) {\n item[key] = { [op as 'in']: (arg as Record<string, unknown[]>)[key] };\n }\n }\n\n if (and) {\n pushQueryValue(q, 'and', item);\n } else {\n pushQueryValue(q, 'or', [item]);\n }\n\n return q as unknown as WhereResult<T>;\n};\n\nexport abstract class Where implements QueryBase {\n abstract clone<T extends this>(this: T): T;\n abstract selectable: SelectableBase;\n abstract relations: RelationsBase;\n abstract withData: WithDataBase;\n abstract __model: Query;\n\n query = {} as QueryData;\n table?: string;\n tableAlias?: string;\n\n where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._where(...args);\n }\n\n _where<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhere(this, args);\n }\n\n whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._whereNot(...args);\n }\n\n _whereNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addWhereNot(this, args);\n }\n\n and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.where(...args);\n }\n\n _and<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._where(...args);\n }\n\n andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.whereNot(...args);\n }\n\n _andNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this._whereNot(...args);\n }\n\n or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._or(...args);\n }\n\n _or<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOr(this, args);\n }\n\n orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return this.clone()._orNot(...args);\n }\n\n _orNot<T extends Where>(this: T, ...args: WhereArg<T>[]): WhereResult<T> {\n return addOrNot(this, args);\n }\n\n whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): T;\n whereIn<T extends Where>(this: T, arg: WhereInArg<T>): T;\n whereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereIn(\n arg as any,\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _whereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values);\n }\n\n orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return this.clone()._orWhereIn(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arg as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values as any,\n ) as unknown as WhereResult<T>;\n }\n\n _orWhereIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values);\n }\n\n whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n whereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._whereNotIn(arg as any, values as any);\n }\n\n _whereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _whereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _whereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, true, arg, values, true);\n }\n\n orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown | unknown[],\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.clone()._orWhereNotIn(arg as any, values as any);\n }\n\n _orWhereNotIn<T extends Where, Column extends WhereInColumn<T>>(\n this: T,\n column: Column,\n values: WhereInValues<T, Column>,\n ): WhereResult<T>;\n _orWhereNotIn<T extends Where>(this: T, arg: WhereInArg<T>): WhereResult<T>;\n _orWhereNotIn<T extends Where>(\n this: T,\n arg: unknown,\n values?: unknown[] | unknown[][] | Query | RawExpression,\n ): WhereResult<T> {\n return addWhereIn(this, false, arg, values, true);\n }\n\n whereExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n whereExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereExists(...args: any) {\n return this.clone()._whereExists(...args);\n }\n _whereExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n _whereExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereExists(this: Where, ...args: any) {\n return this._where({ EXISTS: args });\n }\n\n orWhereExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n orWhereExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereExists(...args: any) {\n return this.clone()._orWhereExists(...args);\n }\n _orWhereExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n _orWhereExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereExists(this: Where, ...args: any) {\n return this._or({ EXISTS: args });\n }\n\n whereNotExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n whereNotExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n whereNotExists(...args: any) {\n return this.clone()._whereNotExists(...args);\n }\n _whereNotExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n _whereNotExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _whereNotExists(this: Where, ...args: any) {\n return this._whereNot({ EXISTS: args });\n }\n\n orWhereNotExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n orWhereNotExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n orWhereNotExists(...args: any) {\n return this.clone()._orWhereNotExists(...args);\n }\n _orWhereNotExists<T extends Where, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): WhereResult<T>;\n _orWhereNotExists<T extends Where, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): WhereResult<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _orWhereNotExists(this: Where, ...args: any) {\n return this._orNot({ EXISTS: args });\n }\n}\n\nexport class WhereQueryBuilder<Q extends QueryBase = QueryBase>\n extends Where\n implements QueryBase\n{\n query = {} as QueryData;\n selectable!: Q['selectable'];\n __model: Query;\n relations = {};\n withData = {};\n\n constructor(public table: Q['table'], public tableAlias: Q['tableAlias']) {\n super();\n this.__model = this as unknown as Query;\n }\n\n clone<T extends this>(this: T): T {\n const cloned = Object.create(this.__model);\n cloned.query = getClonedQueryData(this.query);\n return cloned as unknown as T;\n }\n}\n","import {\n AddQueryJoinedTable,\n ColumnsParsers,\n Query,\n QueryBase,\n Selectable,\n SelectableBase,\n WithDataItem,\n} from '../query';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\nimport { RawExpression, StringKey } from '../common';\nimport { WhereQueryBuilder } from './where';\nimport { Relation } from '../relations';\n\ntype WithSelectable<\n T extends QueryBase,\n W extends keyof T['withData'],\n> = T['withData'][W] extends WithDataItem\n ?\n | StringKey<keyof T['withData'][W]['shape']>\n | `${T['withData'][W]['table']}.${StringKey<\n keyof T['withData'][W]['shape']\n >}`\n : never;\n\nexport type JoinArgs<\n T extends QueryBase,\n Q extends Query = Query,\n R extends keyof T['relations'] = keyof T['relations'],\n W extends keyof T['withData'] = keyof T['withData'],\n> =\n | [relation: R]\n | [\n query: Q,\n conditions:\n | Record<Selectable<Q>, Selectable<T> | RawExpression>\n | RawExpression,\n ]\n | [\n withAlias: W,\n conditions:\n | Record<WithSelectable<T, W>, Selectable<T> | RawExpression>\n | RawExpression,\n ]\n | [\n query: Q,\n leftColumn: Selectable<Q> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n withAlias: W,\n leftColumn: WithSelectable<T, W> | RawExpression,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n query: Q,\n leftColumn: Selectable<Q> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ]\n | [\n withAlias: W,\n leftColumn: WithSelectable<T, W> | RawExpression,\n op: string,\n rightColumn: Selectable<T> | RawExpression,\n ];\n\ntype JoinResult<\n T extends Query,\n Args extends JoinArgs<T>,\n A extends Query | keyof T['relations'] = Args[0],\n> = AddQueryJoinedTable<\n T,\n A extends Query\n ? A\n : T['relations'] extends Record<string, Relation>\n ? A extends keyof T['relations']\n ? T['relations'][A]['model']\n : A extends keyof T['withData']\n ? T['withData'][A] extends WithDataItem\n ? {\n table: T['withData'][A]['table'];\n tableAlias: undefined;\n result: T['withData'][A]['shape'];\n }\n : never\n : never\n : never\n>;\n\nexport type JoinCallbackArg<T extends QueryBase> =\n | Query\n | keyof T['withData']\n | keyof T['relations'];\n\nexport type JoinCallback<\n T extends QueryBase,\n Arg extends JoinCallbackArg<T>,\n> = (\n q: OnQueryBuilder<\n T,\n Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? {\n table: T['withData'][Arg]['table'];\n tableAlias: undefined;\n shape: T['withData'][Arg]['shape'];\n selectable: {\n [K in keyof T['withData'][Arg]['shape'] as `${T['withData'][Arg]['table']}.${StringKey<K>}`]: {\n as: StringKey<K>;\n column: T['withData'][Arg]['shape'][K];\n };\n };\n }\n : never\n : Arg extends Query\n ? Arg\n : T['relations'] extends Record<string, Relation>\n ? Arg extends keyof T['relations']\n ? T['relations'][Arg]['model']\n : never\n : never\n >,\n) => OnQueryBuilder;\n\ntype JoinCallbackResult<\n T extends Query,\n Arg extends JoinCallbackArg<T>,\n> = AddQueryJoinedTable<\n T,\n Arg extends Query\n ? Arg\n : T['relations'] extends Record<string, Relation>\n ? Arg extends keyof T['relations']\n ? T['relations'][Arg]['model']\n : Arg extends keyof T['withData']\n ? T['withData'][Arg] extends WithDataItem\n ? {\n table: T['withData'][Arg]['table'];\n tableAlias: undefined;\n result: T['withData'][Arg]['shape'];\n }\n : never\n : never\n : never\n>;\n\nconst join = <T extends Query, Args extends JoinArgs<T>>(\n q: T,\n type: string,\n args: Args,\n): JoinResult<T, Args> => {\n return _join(q.clone() as T, type, args) as unknown as JoinResult<T, Args>;\n};\n\nconst _join = <\n T extends Query,\n Arg extends JoinCallbackArg<T>,\n Args extends JoinArgs<T>,\n>(\n q: T,\n type: string,\n args: Args | [arg: Arg, cb: JoinCallback<T, Arg>],\n): JoinResult<T, Args> => {\n const first = args[0];\n let joinKey: string | undefined;\n let parsers: ColumnsParsers | undefined;\n\n if (typeof first === 'object') {\n const as = first.tableAlias || first.table;\n if (as) {\n joinKey = as;\n parsers = first.query.parsers || first.columnsParsers;\n }\n } else {\n joinKey = first as string;\n\n const relation = (q.relations as Record<string, Relation>)[joinKey];\n if (relation) {\n parsers = relation.model.query.parsers || relation.model.columnsParsers;\n } else {\n const shape = q.query.withShapes?.[first as string];\n if (shape) {\n parsers = {};\n for (const key in shape) {\n const parser = shape[key].parseFn;\n if (parser) {\n parsers[key] = parser;\n }\n }\n }\n }\n }\n\n if (joinKey && parsers) {\n setQueryObjectValue(q, 'joinedParsers', joinKey, parsers);\n }\n\n return pushQueryValue(q, 'join', {\n type,\n args,\n }) as unknown as JoinResult<T, Args>;\n};\n\nexport class Join {\n join<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n join<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n join(this: Query, ...args: any) {\n return join(this, 'JOIN', args);\n }\n _join<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _join<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _join(this: Query, ...args: any) {\n return _join(this, 'JOIN', args);\n }\n\n innerJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n innerJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n innerJoin(this: Query, ...args: any) {\n return join(this, 'INNER JOIN', args);\n }\n _innerJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _innerJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _innerJoin(this: Query, ...args: any) {\n return _join(this, 'INNER JOIN', args);\n }\n\n leftJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n leftJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n leftJoin(this: Query, ...args: any) {\n return join(this, 'LEFT JOIN', args);\n }\n _leftJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _leftJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _leftJoin(this: Query, ...args: any) {\n return _join(this, 'LEFT JOIN', args);\n }\n\n leftOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n leftOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n leftOuterJoin(this: Query, ...args: any) {\n return join(this, 'LEFT OUTER JOIN', args);\n }\n _leftOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _leftOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _leftOuterJoin(this: Query, ...args: any) {\n return _join(this, 'LEFT OUTER JOIN', args);\n }\n\n rightJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n rightJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rightJoin(this: Query, ...args: any) {\n return join(this, 'RIGHT JOIN', args);\n }\n _rightJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _rightJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _rightJoin(this: Query, ...args: any) {\n return _join(this, 'RIGHT JOIN', args);\n }\n\n rightOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n rightOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rightOuterJoin(this: Query, ...args: any) {\n return join(this, 'RIGHT OUTER JOIN', args);\n }\n _rightOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _rightOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _rightOuterJoin(this: Query, ...args: any) {\n return _join(this, 'RIGHT OUTER JOIN', args);\n }\n\n fullOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n fullOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fullOuterJoin(this: Query, ...args: any) {\n return join(this, 'FULL OUTER JOIN', args);\n }\n _fullOuterJoin<T extends Query, Args extends JoinArgs<T>>(\n this: T,\n ...args: Args\n ): JoinResult<T, Args>;\n _fullOuterJoin<T extends Query, Arg extends JoinCallbackArg<T>>(\n this: T,\n arg: Arg,\n cb: JoinCallback<T, Arg>,\n ): JoinCallbackResult<T, Arg>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _fullOuterJoin(this: Query, ...args: any) {\n return _join(this, 'FULL OUTER JOIN', args);\n }\n}\n\ntype PickQueryForSelect<T extends QueryBase = QueryBase> = Pick<\n T,\n 'table' | 'tableAlias' | 'selectable'\n>;\n\ntype OnArgs<Q extends { selectable: SelectableBase }> =\n | [leftColumn: keyof Q['selectable'], rightColumn: keyof Q['selectable']]\n | [\n leftColumn: keyof Q['selectable'],\n op: string,\n rightColumn: keyof Q['selectable'],\n ];\n\nconst makeOnItem = (\n joinTo: QueryBase | string,\n joinFrom: QueryBase | string,\n args: OnArgs<QueryBase>,\n) => {\n return {\n ON: {\n joinTo,\n joinFrom,\n on: args,\n },\n };\n};\n\nexport const pushQueryOn = <T extends QueryBase>(\n q: T,\n joinFrom: QueryBase | string,\n joinTo: QueryBase | string,\n ...on: OnArgs<QueryBase>\n): T => {\n return pushQueryValue(q, 'and', makeOnItem(joinFrom, joinTo, on));\n};\n\nexport const pushQueryOrOn: typeof pushQueryOn = (\n q,\n joinFrom,\n joinTo,\n ...on\n) => {\n return pushQueryValue(q, 'or', [makeOnItem(joinFrom, joinTo, on)]);\n};\n\nexport const addQueryOn: typeof pushQueryOrOn = (\n q,\n joinFrom,\n joinTo,\n ...args\n) => {\n return pushQueryOn(q.clone() as typeof q, joinFrom, joinTo, ...args);\n};\n\nexport const addQueryOrOn: typeof pushQueryOrOn = (\n q,\n joinFrom,\n joinTo,\n ...args\n) => {\n return pushQueryOrOn(q.clone() as typeof q, joinFrom, joinTo, ...args);\n};\n\ntype OnJsonPathEqualsArgs<T extends QueryBase> = [\n leftColumn: keyof T['selectable'],\n leftPath: string,\n rightColumn: keyof T['selectable'],\n rightPath: string,\n];\n\nexport class OnQueryBuilder<\n S extends QueryBase = QueryBase,\n J extends PickQueryForSelect = PickQueryForSelect,\n >\n extends WhereQueryBuilder<\n Omit<S, 'selectable'> & { selectable: S['selectable'] & J['selectable'] }\n >\n implements QueryBase\n{\n constructor(\n q: { table?: string; query: { as?: string } },\n public joinTo: QueryBase | string,\n ) {\n super(q.table, q.query.as);\n }\n\n on<T extends this>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._on(...args);\n }\n _on<T extends this>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOn(this, this.joinTo, this, ...args);\n }\n\n orOn<T extends this>(this: T, ...args: OnArgs<T>): T {\n return this.clone()._orOn(...args);\n }\n _orOn<T extends this>(this: T, ...args: OnArgs<T>): T {\n return pushQueryOrOn(this, this.joinTo, this, ...args);\n }\n\n onJsonPathEquals<T extends this>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return this.clone()._onJsonPathEquals(...args);\n }\n _onJsonPathEquals<T extends this>(\n this: T,\n ...args: OnJsonPathEqualsArgs<T>\n ): T {\n return pushQueryValue(this, 'and', { ON: args });\n }\n}\n","import { WithOptions } from '../sql';\nimport { ColumnShapeOutput, ColumnsShape, ColumnTypes } from '../columnSchema';\nimport { EMPTY_OBJECT, isRaw, RawExpression } from '../common';\nimport { AddQueryWith, Query } from '../query';\nimport { Db } from '../db';\nimport { pushQueryValue, setQueryObjectValue } from '../queryDataUtils';\n\ntype WithArgsOptions = Omit<WithOptions, 'columns'> & {\n columns?: boolean | string[];\n};\n\ntype WithArgs =\n | [string, ColumnsShape, RawExpression]\n | [string, WithArgsOptions, ColumnsShape, RawExpression]\n | [string, Query | ((qb: Db) => Query)]\n | [string, WithArgsOptions, Query | ((qb: Db) => Query)];\n\ntype WithShape<Args extends WithArgs> = Args[1] extends Query\n ? Args[1]['result']\n : Args[1] extends (qb: Db) => Query\n ? ReturnType<Args[1]>['result']\n : Args[2] extends Query\n ? Args[2]['result']\n : Args[2] extends (qb: Db) => Query\n ? ReturnType<Args[2]>['result']\n : Args[1] extends ColumnsShape\n ? Args[1]\n : Args[2] extends ColumnsShape\n ? Args[2]\n : Args[2] extends (t: ColumnTypes) => ColumnsShape\n ? ReturnType<Args[2]>\n : never;\n\ntype WithResult<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape,\n> = AddQueryWith<\n T,\n {\n table: Args[0];\n shape: Shape;\n type: ColumnShapeOutput<Shape>;\n }\n>;\n\nexport class With {\n with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n return this.clone()._with<T, Args, Shape>(...args);\n }\n\n _with<\n T extends Query,\n Args extends WithArgs,\n Shape extends ColumnsShape = WithShape<Args>,\n >(this: T, ...args: Args): WithResult<T, Args, Shape> {\n let options =\n (args.length === 3 && !isRaw(args[2])) || args.length === 4\n ? (args[1] as WithArgsOptions | WithOptions)\n : undefined;\n\n const last = args[args.length - 1] as\n | Query\n | ((qb: Db) => Query)\n | RawExpression;\n\n const query = typeof last === 'function' ? last(this.queryBuilder) : last;\n\n const shape =\n args.length === 4 ? (args[2] as ColumnsShape) : (query as Query).shape;\n\n if (options?.columns === true) {\n options = {\n ...options,\n columns: Object.keys(shape),\n };\n }\n\n pushQueryValue(this, 'with', [args[0], options || EMPTY_OBJECT, query]);\n\n return setQueryObjectValue(\n this,\n 'withShapes',\n args[0],\n shape,\n ) as unknown as WithResult<T, Args, Shape>;\n }\n}\n","import { Query } from '../query';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { RawExpression } from '../common';\n\nexport type UnionArg<T extends Query> =\n | (Omit<Query, 'result'> & { result: T['result'] })\n | RawExpression;\n\nexport class Union {\n union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._union(args, wrap);\n }\n\n _union<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION' as const, wrap })),\n );\n }\n\n unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._unionAll(args, wrap);\n }\n\n _unionAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'UNION ALL' as const, wrap })),\n );\n }\n\n intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._intersect(args, wrap);\n }\n\n _intersect<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT' as const, wrap })),\n );\n }\n\n intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return this._intersectAll(args, wrap);\n }\n\n _intersectAll<T extends Query>(\n this: T,\n args: UnionArg<T>[],\n wrap?: boolean,\n ): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'INTERSECT ALL' as const, wrap })),\n );\n }\n\n except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._except(args, wrap);\n }\n\n _except<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT' as const, wrap })),\n );\n }\n\n exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return this._exceptAll(args, wrap);\n }\n\n _exceptAll<T extends Query>(this: T, args: UnionArg<T>[], wrap?: boolean): T {\n return pushQueryArray(\n this,\n 'union',\n args.map((arg) => ({ arg, kind: 'EXCEPT ALL' as const, wrap })),\n );\n }\n}\n","import { AddQuerySelect, Query, SetQueryReturnsValueOptional } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { ColumnType, StringColumn } from '../columnSchema';\nimport { JsonItem } from '../sql';\nimport { raw, StringKey } from '../common';\n\ntype JsonColumnName<T extends Pick<Query, 'selectable'>> = StringKey<\n {\n [K in keyof T['selectable']]: T['selectable'][K]['column']['dataType'] extends 'jsonb'\n ? K\n : never;\n }[keyof T['selectable']]\n>;\n\ntype ColumnOrJsonMethod<T extends Query> = JsonColumnName<T> | JsonItem;\n\ntype JsonSetResult<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string,\n Type extends ColumnType = Column extends keyof T['shape']\n ? T['shape'][Column]\n : Column extends JsonItem\n ? Column['__json'][2]\n : ColumnType,\n> = JsonItem<As, Type> &\n (Type extends ColumnType ? AddQuerySelect<T, Record<As, Type>> : T);\n\ntype JsonPathQueryResult<\n T extends Query,\n As extends string,\n Type extends ColumnType,\n> = JsonItem &\n AddQuerySelect<\n T,\n {\n [K in As]: Type;\n }\n >;\n\nexport class Json {\n json<T extends Query>(\n this: T,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n return this.clone()._json();\n }\n\n _json<T extends Query>(\n this: T,\n ): SetQueryReturnsValueOptional<T, StringColumn> {\n const q = this._wrap(this.__model.clone()) as T;\n q._getOptional(\n raw<StringColumn>(\n this.query.take\n ? `row_to_json(\"t\".*)`\n : `COALESCE(json_agg(row_to_json(\"t\".*)), '[]')`,\n ),\n );\n delete q.query.take;\n return q as unknown as SetQueryReturnsValueOptional<T, StringColumn>;\n }\n\n jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonSet(column, path, value, options);\n }\n\n _jsonSet<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n createIfMissing?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'set',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonInsert(...args);\n }\n\n _jsonInsert<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n value: unknown,\n options?: {\n as?: As;\n insertAfter?: boolean;\n },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'insert',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n value,\n options,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n ...args: [\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ]\n ): JsonSetResult<T, Column, As> {\n const q = this.clone() as T;\n return q._jsonRemove(...args);\n }\n\n _jsonRemove<\n T extends Query,\n Column extends ColumnOrJsonMethod<T>,\n As extends string = Column extends JsonItem ? Column['__json'][1] : Column,\n >(\n this: T,\n column: Column,\n path: Array<string | number>,\n options?: { as?: As },\n ): JsonSetResult<T, Column, As> {\n const json: JsonItem = {\n __json: [\n 'remove',\n options?.as ??\n (typeof column === 'string'\n ? column\n : (column as JsonItem).__json[1]),\n typeof column === 'string'\n ? this.shape[column]\n : (column as JsonItem).__json[2],\n column,\n path,\n ],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonSetResult<T, Column, As>;\n }\n\n jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n ...args: [\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ]\n ): JsonPathQueryResult<T, As, Type> {\n const q = this.clone() as T;\n return q._jsonPathQuery(...args);\n }\n\n _jsonPathQuery<T extends Query, As extends string, Type extends ColumnType>(\n this: T,\n type: Type,\n column: ColumnOrJsonMethod<T>,\n path: string,\n as: As,\n options?: {\n vars?: string;\n silent?: boolean;\n },\n ): JsonPathQueryResult<T, As, Type> {\n const json: JsonItem = {\n __json: ['pathQuery', as, type, column, path, options],\n };\n\n return Object.assign(\n pushQueryValue(this, 'select', json),\n json,\n ) as unknown as JsonPathQueryResult<T, As, Type>;\n }\n}\n","import {\n defaultsKey,\n Query,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsRowCount,\n} from '../query';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { isRaw, RawExpression } from '../common';\nimport {\n BelongsToNestedInsert,\n BelongsToRelation,\n HasOneNestedInsert,\n HasOneRelation,\n NestedInsertItem,\n NestedInsertOneItem,\n Relation,\n} from '../relations';\nimport { SetOptional } from '../utils';\nimport { InsertQueryData, OnConflictItem, OnConflictMergeUpdate } from '../sql';\nimport { WhereArg } from './where';\nimport { parseResult, queryMethodByReturnType } from './then';\n\nexport type OptionalKeys<T extends Query> = {\n [K in keyof T['shape']]: T['shape'][K]['isPrimaryKey'] extends true\n ? K\n : T['shape'][K]['isNullable'] extends true\n ? K\n : never;\n}[keyof T['shape']];\n\nexport type InsertData<\n T extends Query,\n DefaultKeys extends string = T[defaultsKey] extends string\n ? T[defaultsKey]\n : never,\n Data = SetOptional<SetOptional<T['inputType'], OptionalKeys<T>>, DefaultKeys>,\n> = [keyof T['relations']] extends [never]\n ? Data\n : Omit<\n Data,\n {\n [K in keyof T['relations']]: T['relations'][K] extends BelongsToRelation\n ? T['relations'][K]['options']['foreignKey']\n : never;\n }[keyof T['relations']]\n > &\n {\n [Key in keyof T['relations']]: T['relations'][Key] extends BelongsToRelation\n ?\n | SetOptional<\n {\n [K in T['relations'][Key]['options']['foreignKey']]: T['relations'][Key]['options']['foreignKey'] extends keyof T['inputType']\n ? T['inputType'][T['relations'][Key]['options']['foreignKey']]\n : never;\n },\n DefaultKeys\n >\n | {\n [K in Key]: {\n create?: InsertData<\n T['relations'][Key]['nestedCreateQuery']\n >;\n connect?: WhereArg<T['relations'][Key]['model']>;\n };\n }\n : T['relations'][Key] extends HasOneRelation\n ? 'through' extends T['relations'][Key]['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?: {\n create?: InsertData<T['relations'][Key]['nestedCreateQuery']>;\n connect?: WhereArg<T['relations'][Key]['model']>;\n };\n }\n : T['relations'][Key] extends Relation\n ? 'through' extends T['relations'][Key]['options']\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : {\n [K in Key]?: {\n create?: InsertData<\n T['relations'][Key]['nestedCreateQuery']\n >[];\n connect?: WhereArg<T['relations'][Key]['model']>[];\n connectOrCreate?: {\n where: WhereArg<T['relations'][Key]['model']>;\n create: InsertData<\n T['relations'][Key]['nestedCreateQuery']\n >;\n }[];\n };\n }\n : // eslint-disable-next-line @typescript-eslint/ban-types\n {};\n }[keyof T['relations']];\n\ntype InsertOneResult<T extends Query> = T['hasSelect'] extends false\n ? SetQueryReturnsRowCount<T>\n : T['returnType'] extends 'all'\n ? SetQueryReturnsOne<T>\n : T['returnType'] extends 'one'\n ? SetQueryReturnsOne<T>\n : T;\n\ntype InsertManyResult<T extends Query> = T['hasSelect'] extends false\n ? SetQueryReturnsRowCount<T>\n : T['returnType'] extends 'one' | 'oneOrThrow'\n ? SetQueryReturnsAll<T>\n : T;\n\ntype OnConflictArg<T extends Query> =\n | keyof T['shape']\n | (keyof T['shape'])[]\n | RawExpression;\n\ntype PrependRelations = Record<\n string,\n [rowIndex: number, columnIndex: number, data: Record<string, unknown>][]\n>;\n\ntype AppendRelations = Record<\n string,\n [rowIndex: number, data: NestedInsertItem][]\n>;\n\nconst processInsertItem = (\n item: Record<string, unknown>,\n rowIndex: number,\n relations: Record<string, Relation>,\n prependRelations: PrependRelations,\n appendRelations: AppendRelations,\n requiredReturning: Record<string, boolean>,\n columns: string[],\n columnsMap: Record<string, number>,\n) => {\n Object.keys(item).forEach((key) => {\n if (relations[key]) {\n if (relations[key].type === 'belongsTo') {\n const foreignKey = (relations[key] as BelongsToRelation).options\n .foreignKey;\n\n let columnIndex = columnsMap[foreignKey];\n if (columnIndex === undefined) {\n columnsMap[foreignKey] = columnIndex = columns.length;\n columns.push(foreignKey);\n }\n\n if (!prependRelations[key]) prependRelations[key] = [];\n\n prependRelations[key].push([\n rowIndex,\n columnIndex,\n item[key] as Record<string, unknown>,\n ]);\n } else {\n requiredReturning[relations[key].primaryKey] = true;\n\n if (!appendRelations[key]) appendRelations[key] = [];\n\n appendRelations[key].push([rowIndex, item[key] as NestedInsertItem]);\n }\n } else if (columnsMap[key] === undefined) {\n columnsMap[key] = columns.length;\n columns.push(key);\n }\n });\n};\n\nexport class Insert {\n insert<T extends Query>(this: T, data: InsertData<T>): InsertOneResult<T>;\n insert<T extends Query>(\n this: T,\n data: InsertData<T>[] | { columns: string[]; values: RawExpression },\n ): InsertManyResult<T>;\n insert(this: Query, data: InsertData<Query> & InsertData<Query>[]) {\n return this.clone()._insert(data) as unknown as InsertOneResult<Query> &\n InsertManyResult<Query>;\n }\n\n _insert<T extends Query>(this: T, data: InsertData<T>): InsertOneResult<T>;\n _insert<T extends Query>(\n this: T,\n data: InsertData<T>[] | { columns: string[]; values: RawExpression },\n ): InsertManyResult<T>;\n _insert(\n data:\n | Record<string, unknown>\n | Record<string, unknown>[]\n | { columns: string[]; values: RawExpression },\n ) {\n const q = this as unknown as Query & { query: InsertQueryData };\n const returning = q.query.select;\n\n delete q.query.and;\n delete q.query.or;\n\n let columns: string[];\n const prependRelations: PrependRelations = {};\n const appendRelations: AppendRelations = {};\n const requiredReturning: Record<string, boolean> = {};\n const relations = (this as unknown as Query).relations as unknown as Record<\n string,\n Relation\n >;\n let values: unknown[][] | RawExpression;\n\n let returnType = q.query.returnType;\n if (returning) {\n if (Array.isArray(data)) {\n if (returnType === 'one' || returnType === 'oneOrThrow') {\n returnType = 'all';\n }\n } else {\n if (returnType === 'all') {\n returnType = 'one';\n }\n }\n } else {\n returnType = 'rowCount';\n }\n\n if (\n 'values' in data &&\n typeof data.values === 'object' &&\n data.values &&\n isRaw(data.values)\n ) {\n columns = (data as { columns: string[] }).columns;\n values = data.values;\n } else {\n columns = [];\n const columnsMap: Record<string, number> = {};\n const defaults = q.query.defaults;\n\n if (Array.isArray(data)) {\n if (defaults) {\n data = data.map((item) => ({ ...defaults, ...item }));\n }\n\n data.forEach((item, i) => {\n processInsertItem(\n item,\n i,\n relations,\n prependRelations,\n appendRelations,\n requiredReturning,\n columns,\n columnsMap,\n );\n });\n\n values = Array(data.length);\n\n data.forEach((item, i) => {\n (values as unknown[][])[i] = columns.map((key) => item[key]);\n });\n } else {\n if (defaults) {\n data = { ...defaults, ...data };\n }\n\n processInsertItem(\n data,\n 0,\n relations,\n prependRelations,\n appendRelations,\n requiredReturning,\n columns,\n columnsMap,\n );\n\n values = [columns.map((key) => (data as Record<string, unknown>)[key])];\n }\n }\n\n const prependRelationsKeys = Object.keys(prependRelations);\n if (prependRelationsKeys.length) {\n pushQueryArray(\n q,\n 'beforeQuery',\n prependRelationsKeys.map((relationName) => {\n return async (q: Query) => {\n const relationData = prependRelations[relationName];\n const relation = relations[relationName];\n\n const inserted = await (\n relation.nestedInsert as BelongsToNestedInsert\n )(\n q,\n relationData.map(([, , data]) => data as NestedInsertOneItem),\n );\n\n const primaryKey = (relation as BelongsToRelation).options\n .primaryKey;\n relationData.forEach(([rowIndex, columnIndex], index) => {\n (values as unknown[][])[rowIndex][columnIndex] =\n inserted[index][primaryKey];\n });\n };\n }),\n );\n }\n\n const appendRelationsKeys = Object.keys(appendRelations);\n if (appendRelationsKeys.length) {\n if (!returning?.includes('*')) {\n const requiredColumns = Object.keys(requiredReturning);\n\n if (!returning) {\n q.query.select = requiredColumns;\n } else {\n q.query.select = [\n ...new Set([...(returning as string[]), ...requiredColumns]),\n ];\n }\n }\n\n let resultOfTypeAll: Record<string, unknown>[] | undefined;\n if (returnType !== 'all') {\n const { handleResult } = q.query;\n q.query.handleResult = async (q, queryResult) => {\n resultOfTypeAll = (await handleResult(q, queryResult)) as Record<\n string,\n unknown\n >[];\n\n if (queryMethodByReturnType[returnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n return parseResult(q, returnType, queryResult);\n };\n }\n\n pushQueryArray(\n q,\n 'afterQuery',\n appendRelationsKeys.map((relationName) => {\n return (q: Query, result: Record<string, unknown>[]) => {\n const all = resultOfTypeAll || result;\n return (\n relations[relationName].nestedInsert as HasOneNestedInsert\n )?.(\n q,\n appendRelations[relationName].map(([rowIndex, data]) => [\n all[rowIndex],\n data as NestedInsertOneItem,\n ]),\n );\n };\n }),\n );\n }\n\n q.query.type = 'insert';\n q.query.columns = columns;\n q.query.values = values;\n if (prependRelationsKeys.length || appendRelationsKeys.length) {\n q.query.wrapInTransaction = true;\n }\n\n q.query.returnType = appendRelationsKeys.length ? 'all' : returnType;\n\n return q as unknown as InsertOneResult<Query> & InsertManyResult<Query>;\n }\n\n create<T extends Query>(this: T, data: InsertData<T>): SetQueryReturnsOne<T>;\n create<T extends Query>(\n this: T,\n data: InsertData<T>[] | { columns: string[]; values: RawExpression },\n ): SetQueryReturnsAll<T>;\n create(this: Query, data: InsertData<Query> & InsertData<Query>[]) {\n return this.clone()._create(data) as unknown as SetQueryReturnsOne<Query> &\n SetQueryReturnsAll<Query>;\n }\n\n _create<T extends Query>(this: T, data: InsertData<T>): SetQueryReturnsOne<T>;\n _create<T extends Query>(\n this: T,\n data: InsertData<T>[] | { columns: string[]; values: RawExpression },\n ): SetQueryReturnsAll<T>;\n _create(this: Query, data: InsertData<Query> & InsertData<Query>[]) {\n if (!this.query.select) {\n this.query.select = ['*'];\n }\n return this.insert(data) as unknown as never;\n }\n\n defaults<T extends Query, Data extends Partial<InsertData<T>>>(\n this: T,\n data: Data,\n ): T & { [defaultsKey]: keyof Data } {\n return (this.clone() as T)._defaults(data);\n }\n _defaults<T extends Query, Data extends Partial<InsertData<T>>>(\n this: T,\n data: Data,\n ): T & { [defaultsKey]: keyof Data } {\n this.query.defaults = data;\n return this as T & { [defaultsKey]: keyof Data };\n }\n\n onConflict<T extends Query, Arg extends OnConflictArg<T>>(\n this: T,\n arg?: Arg,\n ): OnConflictQueryBuilder<T, Arg> {\n return this.clone()._onConflict(arg);\n }\n _onConflict<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined = undefined,\n >(this: T, arg?: Arg): OnConflictQueryBuilder<T, Arg> {\n return new OnConflictQueryBuilder(this, arg as Arg);\n }\n}\n\nexport class OnConflictQueryBuilder<\n T extends Query,\n Arg extends OnConflictArg<T> | undefined,\n> {\n constructor(private query: T, private onConflict: Arg) {}\n\n ignore(): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'ignore',\n expr: this.onConflict as OnConflictItem,\n };\n return this.query;\n }\n\n merge(\n update?:\n | keyof T['shape']\n | (keyof T['shape'])[]\n | Partial<T['inputType']>\n | RawExpression,\n ): T {\n (this.query.query as InsertQueryData).onConflict = {\n type: 'merge',\n expr: this.onConflict as OnConflictItem,\n update: update as OnConflictMergeUpdate,\n };\n return this.query;\n }\n}\n","import { Query, SetQueryReturnsRowCount } from '../query';\nimport { pushQueryArray, pushQueryValue } from '../queryDataUtils';\nimport { isRaw, RawExpression } from '../common';\nimport {\n BelongsToNestedUpdate,\n HasOneNestedUpdate,\n NestedUpdateOneItem,\n Relation,\n} from '../relations';\nimport { WhereArg, WhereResult } from './where';\nimport { MaybeArray } from '../utils';\nimport { InsertData } from './insert';\nimport { parseResult, queryMethodByReturnType } from './then';\n\nexport type UpdateData<T extends Query> = {\n [K in keyof T['type']]?: T['type'][K] | RawExpression;\n} & (T['relations'] extends Record<string, Relation>\n ? {\n [K in keyof T['relations']]?: T['relations'][K]['type'] extends 'belongsTo'\n ?\n | { disconnect: boolean }\n | { set: WhereArg<T['relations'][K]['model']> }\n | { delete: boolean }\n | { update: UpdateData<T['relations'][K]['model']> }\n | (T['returnType'] extends 'one' | 'oneOrThrow'\n ?\n | {\n create: InsertData<\n T['relations'][K]['nestedCreateQuery']\n >;\n }\n | {\n upsert: {\n update: UpdateData<T['relations'][K]['model']>;\n create: InsertData<\n T['relations'][K]['nestedCreateQuery']\n >;\n };\n }\n : never)\n : T['relations'][K]['type'] extends 'hasOne'\n ?\n | { disconnect: boolean }\n | { delete: boolean }\n | { update: UpdateData<T['relations'][K]['model']> }\n | (T['returnType'] extends 'one' | 'oneOrThrow'\n ?\n | { set: WhereArg<T['relations'][K]['model']> }\n | {\n upsert: {\n update: UpdateData<T['relations'][K]['model']>;\n create: InsertData<\n T['relations'][K]['nestedCreateQuery']\n >;\n };\n }\n | {\n create: InsertData<\n T['relations'][K]['nestedCreateQuery']\n >;\n }\n : never)\n : T['relations'][K]['type'] extends 'hasMany'\n ?\n | { disconnect: MaybeArray<WhereArg<T['relations'][K]['model']>> }\n | { delete: MaybeArray<WhereArg<T['relations'][K]['model']>> }\n | {\n update: {\n where: MaybeArray<WhereArg<T['relations'][K]['model']>>;\n data: UpdateData<T['relations'][K]['model']>;\n };\n }\n | (T['returnType'] extends 'one' | 'oneOrThrow'\n ?\n | { set: MaybeArray<WhereArg<T['relations'][K]['model']>> }\n | {\n create: InsertData<\n T['relations'][K]['nestedCreateQuery']\n >[];\n }\n : never)\n : T['relations'][K]['type'] extends 'hasAndBelongsToMany'\n ?\n | { disconnect: MaybeArray<WhereArg<T['relations'][K]['model']>> }\n | {\n set: MaybeArray<WhereArg<T['relations'][K]['model']>>;\n }\n | { delete: MaybeArray<WhereArg<T['relations'][K]['model']>> }\n | {\n update: {\n where: MaybeArray<WhereArg<T['relations'][K]['model']>>;\n data: UpdateData<T['relations'][K]['model']>;\n };\n }\n | {\n create: InsertData<T['relations'][K]['nestedCreateQuery']>[];\n }\n : never;\n }\n : // eslint-disable-next-line @typescript-eslint/ban-types\n {});\n\ntype UpdateArgs<T extends Query, ForceAll extends boolean> = (\n T['hasWhere'] extends true ? true : ForceAll\n) extends true\n ? [update: RawExpression | UpdateData<T>, forceAll?: ForceAll]\n : [update: RawExpression | UpdateData<T>, forceAll: true];\n\ntype UpdateResult<T extends Query> = T['hasSelect'] extends false\n ? SetQueryReturnsRowCount<T>\n : T;\n\ntype ChangeCountArg<T extends Query> =\n | keyof T['shape']\n | Partial<Record<keyof T['shape'], number>>;\n\nconst applyCountChange = <T extends Query>(\n self: T,\n op: string,\n data: ChangeCountArg<T>,\n) => {\n self.query.type = 'update';\n\n let map: Record<string, { op: string; arg: number }>;\n if (typeof data === 'object') {\n map = {};\n for (const key in data) {\n map[key] = { op, arg: data[key] as number };\n }\n } else {\n map = { [data as string]: { op, arg: 1 } };\n }\n\n pushQueryValue(self, 'data', map);\n return self as unknown as UpdateResult<T>;\n};\n\nexport class Update {\n update<T extends Query, ForceAll extends boolean = false>(\n this: T,\n ...args: UpdateArgs<T, ForceAll>\n ): UpdateResult<T> {\n const q = this.clone() as T;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return q._update(...(args as any));\n }\n\n _update<T extends Query, ForceAll extends boolean = false>(\n this: T,\n ...args: UpdateArgs<T, ForceAll>\n ): UpdateResult<T> {\n const [data, forceAll] = args as unknown as [\n Record<string, unknown>,\n boolean | undefined,\n ];\n const { query } = this;\n query.type = 'update';\n\n if (!query.and?.length && !query.or?.length && !forceAll) {\n throw new Error(\n 'No where conditions or forceAll flag provided to update',\n );\n }\n\n if (isRaw(data)) {\n pushQueryValue(this, 'data', data);\n } else {\n const relations = this.relations as Record<string, Relation>;\n\n const prependRelations: Record<string, Record<string, unknown>> = {};\n const appendRelations: Record<string, Record<string, unknown>> = {};\n\n const originalReturnType = this.query.returnType;\n\n const update: Record<string, unknown> = { ...data };\n for (const key in data) {\n if (relations[key]) {\n delete update[key];\n if (relations[key].type === 'belongsTo') {\n prependRelations[key] = data[key] as Record<string, unknown>;\n } else {\n if (!query.select?.includes('*')) {\n const primaryKey = relations[key].primaryKey;\n if (!query.select?.includes(primaryKey)) {\n this._select(primaryKey);\n }\n }\n appendRelations[key] = data[key] as Record<string, unknown>;\n }\n }\n }\n\n const state: {\n updateLater?: Record<string, unknown>;\n updateLaterPromises?: Promise<void>[];\n } = {};\n\n const prependRelationKeys = Object.keys(prependRelations);\n if (prependRelationKeys.length) {\n const willSetKeys = prependRelationKeys.some((relationName) => {\n const data = prependRelations[relationName] as NestedUpdateOneItem;\n\n return (\n relations[relationName] as {\n nestedUpdate: BelongsToNestedUpdate;\n }\n ).nestedUpdate(this, update, data, state);\n });\n\n if (!willSetKeys && !Object.keys(update).length) {\n delete this.query.type;\n }\n } else if (!Object.keys(update).length) {\n delete this.query.type;\n }\n\n const appendRelationKeys = Object.keys(appendRelations);\n\n let resultOfTypeAll: Record<string, unknown>[] | undefined;\n\n if (\n state?.updateLater ||\n (appendRelationKeys.length && originalReturnType !== 'all')\n ) {\n this.query.returnType = 'all';\n\n if (state?.updateLater) {\n this.schema.primaryKeys.forEach((key: string) => {\n if (!query.select?.includes('*') && !query.select?.includes(key)) {\n this._select(key);\n }\n });\n }\n\n const { handleResult } = this.query;\n this.query.handleResult = async (q, queryResult) => {\n resultOfTypeAll = (await handleResult(q, queryResult)) as Record<\n string,\n unknown\n >[];\n\n if (state?.updateLater) {\n await Promise.all(state.updateLaterPromises as Promise<void>[]);\n\n const t = this.__model.clone().transacting(q);\n const keys = this.schema.primaryKeys as string[];\n (\n t._whereIn as unknown as (\n keys: string[],\n values: unknown[][],\n ) => Query\n )(\n keys,\n resultOfTypeAll.map((item) => keys.map((key) => item[key])),\n );\n\n await (t as WhereResult<Query>)._update(state.updateLater);\n\n resultOfTypeAll.forEach((item) =>\n Object.assign(item, state.updateLater),\n );\n }\n\n if (queryMethodByReturnType[originalReturnType] === 'arrays') {\n queryResult.rows.forEach(\n (row, i) =>\n ((queryResult.rows as unknown as unknown[][])[i] =\n Object.values(row)),\n );\n }\n\n return parseResult(q, originalReturnType, queryResult);\n };\n }\n\n if (appendRelationKeys.length) {\n pushQueryArray(\n this,\n 'afterQuery',\n appendRelationKeys.map((relationName) => {\n return (q: Query, result: Record<string, unknown>[]) => {\n const all = resultOfTypeAll || result;\n return (\n relations[relationName].nestedUpdate as HasOneNestedUpdate\n )?.(q, all, appendRelations[relationName] as NestedUpdateOneItem);\n };\n }),\n );\n }\n\n if (prependRelationKeys.length || appendRelationKeys.length) {\n query.wrapInTransaction = true;\n }\n\n pushQueryValue(this, 'data', update);\n }\n\n if (!query.select) {\n this.query.returnType = 'rowCount';\n }\n\n return this as unknown as UpdateResult<T>;\n }\n\n updateOrThrow<T extends Query, ForceAll extends boolean = false>(\n this: T,\n ...args: UpdateArgs<T, ForceAll>\n ): UpdateResult<T> {\n const q = this.clone() as T;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return q._updateOrThrow(...(args as any));\n }\n\n _updateOrThrow<T extends Query, ForceAll extends boolean = false>(\n this: T,\n ...args: UpdateArgs<T, ForceAll>\n ): UpdateResult<T> {\n this.query.throwOnNotFound = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this._update(...(args as any)) as unknown as UpdateResult<T>;\n }\n\n increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._increment(data) as unknown as UpdateResult<T>;\n }\n\n _increment<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '+', data);\n }\n\n decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return this.clone()._decrement(data) as unknown as UpdateResult<T>;\n }\n\n _decrement<T extends Query>(\n this: T,\n data: ChangeCountArg<T>,\n ): UpdateResult<T> {\n return applyCountChange(this, '-', data);\n }\n}\n","import { Query, SetQueryReturnsRowCount } from '../query';\n\ntype DeleteArgs<T extends Query> = T['hasWhere'] extends true\n ? [forceAll?: boolean]\n : [true];\n\ntype DeleteResult<T extends Query> = T['hasSelect'] extends false\n ? SetQueryReturnsRowCount<T>\n : T;\n\nconst del = <T extends Query>(\n self: T,\n ...args: DeleteArgs<T>\n): DeleteResult<T> => {\n return self.clone()._del(...args) as unknown as DeleteResult<T>;\n};\n\nconst _del = <T extends Query>(\n q: T,\n ...args: DeleteArgs<T>\n): DeleteResult<T> => {\n if (!q.query.and?.length && !q.query.or?.length && !args[0]) {\n throw new Error('No where conditions or forceAll flag provided to delete');\n }\n\n if (!q.query.select) {\n q.query.returnType = 'rowCount';\n }\n\n q.query.type = 'delete';\n return q as unknown as DeleteResult<T>;\n};\n\nexport class Delete {\n del<T extends Query>(this: T, ...args: DeleteArgs<T>): DeleteResult<T> {\n return del(this, ...args);\n }\n\n _del<T extends Query>(this: T, ...args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this, ...args);\n }\n\n delete<T extends Query>(this: T, ...args: DeleteArgs<T>): DeleteResult<T> {\n return del(this, ...args);\n }\n\n _delete<T extends Query>(this: T, ...args: DeleteArgs<T>): DeleteResult<T> {\n return _del(this, ...args);\n }\n}\n","import { Query } from '../query';\n\nconst beginSql = {\n text: 'BEGIN',\n values: [],\n};\n\nconst commitSql = {\n text: 'COMMIT',\n values: [],\n};\n\nconst rollbackSql = {\n text: 'ROLLBACK',\n values: [],\n};\n\nexport class Transaction {\n async transaction<T extends Query, Result>(\n this: T,\n cb: (query: T) => Promise<Result>,\n ): Promise<Result> {\n const log = this.query.log;\n let logData: unknown | undefined;\n if (log) {\n logData = log.beforeQuery(this, beginSql);\n }\n const t = this.query.adapter.transaction((adapter) => {\n if (log) {\n log.afterQuery(this, beginSql, logData);\n }\n\n const q = this.clone();\n q.query.adapter = adapter;\n q.query.inTransaction = true;\n\n if (log) {\n logData = log.beforeQuery(this, commitSql);\n }\n return cb(q);\n });\n\n if (log) {\n t.then(\n () => {\n log.afterQuery(this, commitSql, logData);\n },\n () => {\n log.afterQuery(this, rollbackSql, logData);\n },\n );\n }\n\n return t;\n }\n\n transacting<T extends Query>(this: T, query: Query): T {\n return this.clone()._transacting(query);\n }\n\n _transacting<T extends Query>(this: T, query: Query): T {\n this.query.adapter = query.query.adapter;\n this.query.inTransaction = true;\n return this;\n }\n}\n","import { Query } from '../query';\nimport { RawExpression } from '../common';\nimport { SelectQueryData } from '../sql';\n\ntype ForQueryBuilder<Q extends Query> = Q & {\n noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n _noWait<T extends ForQueryBuilder<Q>>(this: T): T;\n skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n _skipLocked<T extends ForQueryBuilder<Q>>(this: T): T;\n};\n\nconst forQueryBuilder = <T extends Query>(\n q: T,\n type: Exclude<SelectQueryData['for'], undefined>['type'],\n tableNames?: string[] | RawExpression,\n) => {\n (q.query as SelectQueryData).for = { type, tableNames };\n q.__model = Object.create(q.__model);\n q.__model.__model = q.__model;\n\n Object.assign(q.__model, {\n noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._noWait();\n },\n _noWait<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'NO WAIT';\n return this;\n },\n skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n return this.clone()._skipLocked();\n },\n _skipLocked<T extends ForQueryBuilder<Query>>(this: T): T {\n const q = this.query as SelectQueryData | undefined;\n if (q?.for) q.for.mode = 'SKIP LOCKED';\n return this;\n },\n });\n\n return q.clone() as ForQueryBuilder<T>;\n};\n\nexport class For {\n forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forUpdate(tableNames);\n }\n\n _forUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'UPDATE', tableNames);\n }\n\n forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forNoKeyUpdate(tableNames);\n }\n\n _forNoKeyUpdate<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'NO KEY UPDATE', tableNames);\n }\n\n forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forShare(tableNames);\n }\n\n _forShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'SHARE', tableNames);\n }\n\n forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return this.clone()._forKeyShare(tableNames);\n }\n\n _forKeyShare<T extends Query>(\n this: T,\n tableNames?: string[] | RawExpression,\n ): ForQueryBuilder<T> {\n return forQueryBuilder(this, 'KEY SHARE', tableNames);\n }\n}\n","import { Query, SetQueryReturnsColumnInfo } from '../query';\nimport { ThenResult, Then } from './then';\nimport { ColumnInfoQueryData } from '../sql';\n\nexport type ColumnInfo = {\n defaultValue: unknown;\n type: string;\n maxLength: number | null;\n nullable: boolean;\n};\n\nconst rowToColumnInfo = (row: unknown): ColumnInfo => {\n const typed = row as {\n column_default: string | null;\n is_nullable: 'YES' | 'NO';\n data_type: string;\n character_maximum_length: number | null;\n };\n\n return {\n defaultValue: typed.column_default,\n type: typed.data_type,\n maxLength: typed.character_maximum_length,\n nullable: typed.is_nullable === 'YES',\n };\n};\n\nexport class ColumnInfoMethods {\n columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n return this.clone()._columnInfo(column);\n }\n\n _columnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined = undefined,\n >(this: T, column?: Column): SetQueryReturnsColumnInfo<T, Column> {\n this.query.type = 'columnInfo';\n this.query.returnType = 'all';\n\n if (column) {\n (this.query as ColumnInfoQueryData).column = column as string;\n }\n\n this.then = function (resolve, reject) {\n new Then().then.call(\n this,\n (rows) => {\n if (column) {\n resolve?.(rowToColumnInfo(rows[0]));\n } else {\n const info: Record<string, ColumnInfo> = {};\n (rows as unknown[]).forEach((row) => {\n info[(row as { column_name: string }).column_name] =\n rowToColumnInfo(row);\n });\n resolve?.(info);\n }\n },\n reject,\n );\n } as ThenResult<unknown>;\n return this as unknown as SetQueryReturnsColumnInfo<T, Column>;\n }\n}\n","import { Query } from '../query';\nimport { removeFromQuery } from '../queryDataUtils';\nimport { isRaw } from '../common';\n\nexport type ClearStatement =\n | 'with'\n | 'select'\n | 'where'\n | 'union'\n | 'using'\n | 'join'\n | 'group'\n | 'order'\n | 'having'\n | 'limit'\n | 'offset'\n | 'counters';\n\nexport class Clear {\n clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n return this.clone()._clear(...clears);\n }\n\n _clear<T extends Query>(this: T, ...clears: ClearStatement[]): T {\n clears.forEach((clear) => {\n if (clear === 'where') {\n removeFromQuery(this, 'and');\n removeFromQuery(this, 'or');\n } else if (clear === 'counters') {\n if ('type' in this.query && this.query.type === 'update') {\n this.query.data = this.query.data.filter((item) => {\n if (!isRaw(item)) {\n let removed = false;\n for (const key in item) {\n const value = item[key] as Record<string, unknown>;\n if (\n typeof value === 'object' &&\n (value.op === '+' || value.op === '-')\n ) {\n delete item[key];\n removed = true;\n }\n }\n if (removed && !Object.keys(item).length) {\n return false;\n }\n }\n\n return true;\n });\n }\n } else {\n removeFromQuery(this, clear);\n }\n });\n return this;\n }\n}\n","import { Query } from '../query';\nimport {\n AggregateItemOptions,\n ColumnOperators,\n HavingItem,\n OrderItem,\n WhereItem,\n} from '../sql';\nimport { pushQueryArray } from '../queryDataUtils';\nimport { Aggregate1ArgumentTypes, AggregateOptions } from './aggregate';\nimport { isRaw, RawExpression } from '../common';\n\ntype HavingArgObject<\n T extends Query,\n Agg extends keyof Aggregate1ArgumentTypes<T>,\n> = {\n [Column in Exclude<Aggregate1ArgumentTypes<T>[Agg], RawExpression>]?:\n | T['selectable'][Column]['column']['type']\n | (ColumnOperators<T['selectable'], Column> & AggregateOptions<T>);\n};\n\nexport type HavingArg<T extends Query = Query> =\n | ({\n [Agg in keyof Aggregate1ArgumentTypes<T>]?: HavingArgObject<T, Agg>;\n } & {\n count?: number | HavingArgObject<T, 'count'>;\n })\n | Query\n | RawExpression;\n\nconst processHavingArg = <T extends Query>(arg: HavingArg<T>): HavingItem => {\n if ('__model' in arg || isRaw(arg)) {\n return arg;\n } else {\n const processed = { ...arg } as Record<\n string,\n Record<string, AggregateItemOptions>\n >;\n\n for (const fn in arg) {\n const data = arg[fn as keyof typeof arg];\n if (typeof data === 'object') {\n processed[fn] = { ...data } as typeof processed[string];\n for (const column in data) {\n const value = data[column as keyof typeof data];\n\n if (typeof value === 'object') {\n processed[fn][column] = { ...(value as object) };\n\n const options = value as AggregateOptions<T>;\n\n if (\n 'order' in options &&\n options.order &&\n !Array.isArray(options.order)\n ) {\n processed[fn][column].order = [options.order as OrderItem];\n }\n\n if ('filter' in options && options.filter) {\n processed[fn][column].filter = options.filter as WhereItem;\n }\n\n if ('filterOr' in options && options.filterOr) {\n processed[fn][column].filterOr = options.filterOr as WhereItem[];\n }\n }\n }\n }\n }\n return processed;\n }\n};\n\nexport class Having {\n having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._having(...args);\n }\n\n _having<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'having',\n args.map((arg) => processHavingArg(arg)),\n );\n }\n\n havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return this.clone()._havingOr(...args);\n }\n\n _havingOr<T extends Query>(this: T, ...args: HavingArg<T>[]): T {\n return pushQueryArray(\n this,\n 'havingOr',\n args.map((arg) => [processHavingArg(arg)]),\n );\n }\n}\n","import { Query } from '../query';\nimport { ColumnType, IntegerColumn } from '../columnSchema';\nimport { SelectAgg, WindowFunctionOptions } from './aggregate';\nimport { pushQueryValue } from '../queryDataUtils';\nimport { addParserToQuery } from './select';\n\nconst selectWindowFunction = <\n T extends Query,\n Func extends string,\n As extends string | undefined,\n Value extends ColumnType,\n>(\n self: T,\n functionName: Func,\n options: WindowFunctionOptions<T, As>,\n parse?: (input: unknown) => Value['type'],\n): SelectAgg<T, Func, As, Value> => {\n pushQueryValue(self, 'select', {\n function: functionName,\n options: {\n as: options.as,\n over: options,\n },\n });\n\n if (parse) {\n addParserToQuery(self.query, options.as || functionName, parse);\n }\n\n return self as unknown as SelectAgg<T, Func, As, Value>;\n};\n\nconst toInt = (input: unknown) => parseInt(input as string);\n\nexport class Window {\n selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return this.clone()._selectRowNumber(options);\n }\n\n _selectRowNumber<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'row_number', As, IntegerColumn> {\n return selectWindowFunction(this, 'row_number', options, toInt);\n }\n\n selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return this.clone()._selectRank(options);\n }\n\n _selectRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'rank', options, toInt);\n }\n\n selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return this.clone()._selectDenseRank(options);\n }\n\n _selectDenseRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'dense_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'dense_rank', options, toInt);\n }\n\n selectPercentRank<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return this.clone()._selectPercentRank(options);\n }\n\n _selectPercentRank<\n T extends Query,\n As extends string | undefined = undefined,\n >(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'percent_rank', As, IntegerColumn> {\n return selectWindowFunction(this, 'percent_rank', options, toInt);\n }\n\n selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return this.clone()._selectCumeDist(options);\n }\n\n _selectCumeDist<T extends Query, As extends string | undefined = undefined>(\n this: T,\n options: WindowFunctionOptions<T, As>,\n ): SelectAgg<T, 'cume_dist', As, IntegerColumn> {\n return selectWindowFunction(this, 'cume_dist', options, toInt);\n }\n}\n","import { Query } from '../query';\nimport { Sql } from '../sql';\nimport { quote } from '../quote';\n\nexport type QueryLogObject = {\n colors: boolean;\n beforeQuery(q: Query, sql: Sql): unknown;\n afterQuery(q: Query, sql: Sql, logData: unknown): void;\n onError(error: Error, q: Query, sql: Sql, logData: unknown): void;\n};\n\nexport type QueryLogger = {\n log(message: string): void;\n error(message: string): void;\n};\n\nexport type QueryLogOptions = {\n log?: boolean | Partial<QueryLogObject>;\n logger?: QueryLogger;\n};\n\nexport const logColors = {\n boldCyanBright: (message: string) =>\n `\\u001b[1m\\u001b[96m${message}\\u001b[39m\\u001b[22m`,\n\n boldBlue: (message: string) =>\n `\\u001b[1m\\u001b[34m${message}\\u001b[39m\\u001b[22m`,\n\n boldYellow: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldMagenta: (message: string) =>\n `\\u001b[1m\\u001b[33m${message}\\u001b[39m\\u001b[22m`,\n\n boldRed: (message: string) =>\n `\\u001b[1m\\u001b[31m${message}\\u001b[39m\\u001b[22m`,\n};\n\nconst makeMessage = (\n colors: boolean,\n timeColor: (message: string) => string,\n time: [number, number],\n sqlColor: (message: string) => string,\n sql: string,\n valuesColor: (message: string) => string,\n values: unknown[],\n): string => {\n const elapsed = process.hrtime(time);\n const formattedTime = `(${elapsed[0] ? `${elapsed[0]}s ` : ''}${(\n elapsed[1] / 1000000\n ).toFixed(1)}ms)`;\n\n const result = `${colors ? timeColor(formattedTime) : formattedTime} ${\n colors ? sqlColor(sql) : sql\n }`;\n\n if (!values.length) {\n return result;\n }\n\n const formattedValues = `[${values.map(quote).join(', ')}]`;\n\n return `${result} ${colors ? valuesColor(formattedValues) : formattedValues}`;\n};\n\nexport const logParamToLogObject = (\n logger: QueryLogger,\n log: QueryLogOptions['log'],\n): QueryLogObject | undefined => {\n if (!log) return;\n const logObject = Object.assign(\n {\n colors: true,\n beforeQuery() {\n return process.hrtime();\n },\n afterQuery(_, sql, time: [number, number]) {\n logger.log(\n makeMessage(\n colors,\n logColors.boldCyanBright,\n time,\n logColors.boldBlue,\n sql.text,\n logColors.boldYellow,\n sql.values,\n ),\n );\n },\n onError(error, _, sql, time: [number, number]) {\n const message = `Error: ${error.message}`;\n\n logger.error(\n `${makeMessage(\n colors,\n logColors.boldMagenta,\n time,\n logColors.boldRed,\n sql.text,\n logColors.boldYellow,\n sql.values,\n )} ${colors ? logColors.boldRed(message) : message}`,\n );\n },\n } as QueryLogObject,\n log === true ? {} : log,\n );\n\n const colors = logObject.colors;\n\n return logObject;\n};\n\nexport class QueryLog {\n log<T extends Query>(this: T, log = true): T {\n return this.clone()._log(log);\n }\n\n _log<T extends Query>(this: T, log = true): T {\n this.query.log = logParamToLogObject(this.query.logger, log);\n return this;\n }\n}\n","import { Query } from '../query';\nimport { pushQueryValue } from '../queryDataUtils';\n\nexport type BeforeCallback<T extends Query> = (\n query: T,\n) => void | Promise<void>;\n\nexport type AfterCallback<T extends Query> = (\n query: T,\n data: unknown,\n) => void | Promise<void>;\n\nexport class QueryCallbacks {\n beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeQuery(cb);\n }\n _beforeQuery<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeQuery', cb);\n }\n\n afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterQuery(cb);\n }\n _afterQuery<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterQuery', cb);\n }\n\n beforeInsert<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeInsert(cb);\n }\n _beforeInsert<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeInsert', cb);\n }\n\n afterInsert<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterInsert(cb);\n }\n _afterInsert<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterInsert', cb);\n }\n\n beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return this.clone()._beforeUpdate(cb);\n }\n _beforeUpdate<T extends Query>(this: T, cb: BeforeCallback<T>): T {\n return pushQueryValue(this, 'beforeUpdate', cb);\n }\n\n afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return this.clone()._afterUpdate(cb);\n }\n _afterUpdate<T extends Query>(this: T, cb: AfterCallback<T>): T {\n return pushQueryValue(this, 'afterUpdate', cb);\n }\n}\n","import { Query, SetQueryReturnsOne, SetQueryReturnsVoid } from '../query';\nimport { UpdateData } from './update';\nimport { InsertData } from './insert';\nimport { WhereResult } from './where';\nimport { MoreThanOneRowError } from '../errors';\n\nexport type UpsertData<T extends Query> = {\n update: UpdateData<T>;\n create: InsertData<T>;\n};\n\nexport type UpsertResult<T extends Query> = T['hasSelect'] extends true\n ? SetQueryReturnsOne<T>\n : SetQueryReturnsVoid<T>;\n\nexport type UpsertThis = WhereResult<Query> & {\n returnType: 'one' | 'oneOrThrow';\n};\n\nexport class QueryUpsert {\n upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n return this.clone()._upsert(data);\n }\n\n _upsert<T extends UpsertThis>(this: T, data: UpsertData<T>): UpsertResult<T> {\n this._update<WhereResult<Query>>(data.update);\n this.query.returnType = 'one';\n this.query.wrapInTransaction = true;\n const { handleResult } = this.query;\n this.query.handleResult = async (q, queryResult) => {\n if (queryResult.rowCount === 0) {\n return q.insert(data.create);\n } else if (queryResult.rowCount > 1) {\n throw new MoreThanOneRowError(\n `Only one row was expected to find for upsert, found ${queryResult.rowCount} rows.`,\n );\n }\n\n return handleResult(q, queryResult);\n };\n return this as unknown as UpsertResult<T>;\n }\n}\n","import {\n Query,\n QueryBase,\n SetQueryReturnsValue,\n SetQueryReturnsValueOptional,\n} from '../query';\nimport { RelationQueryBase } from '../relations';\nimport { isRaw, RawExpression } from '../common';\nimport { addParserForRawExpression, processSelectArg } from './select';\nimport { getQueryAs } from '../utils';\n\nexport type GetArg<T extends QueryBase> =\n | keyof T['selectable']\n | (RelationQueryBase & { returnType: 'value' | 'valueOrThrow' })\n | RawExpression;\n\ntype UnwrapRaw<\n T extends Query,\n Arg extends GetArg<T>,\n> = Arg extends RawExpression ? Arg['__column'] : Exclude<Arg, RawExpression>;\n\ntype GetResult<T extends Query, Arg extends GetArg<T>> = SetQueryReturnsValue<\n T,\n UnwrapRaw<T, Arg>\n>;\n\ntype GetOptionalResult<\n T extends Query,\n Arg extends GetArg<T>,\n> = SetQueryReturnsValueOptional<T, UnwrapRaw<T, Arg>>;\n\nconst _get = <\n T extends Query,\n R extends 'value' | 'valueOrThrow',\n Arg extends GetArg<T>,\n>(\n q: T,\n returnType: R,\n arg: Arg,\n): R extends 'value' ? GetOptionalResult<T, Arg> : GetResult<T, Arg> => {\n q.query.returnType = returnType;\n q.query.take = true;\n\n if (typeof arg === 'object' && isRaw(arg)) {\n addParserForRawExpression(q, 'value', arg);\n q.query.select = [arg];\n } else {\n q.query.select = [\n processSelectArg(\n q,\n getQueryAs(q),\n arg as Exclude<GetArg<T>, RawExpression>,\n ),\n ];\n }\n\n return q as unknown as GetResult<T, Arg> & GetOptionalResult<T, Arg>;\n};\n\nexport class QueryGet {\n get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return this.clone()._get(arg);\n }\n\n _get<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetResult<T, Arg> {\n return _get(this, 'valueOrThrow', arg);\n }\n\n getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return this.clone()._getOptional(arg);\n }\n\n _getOptional<T extends Query, Arg extends GetArg<T>>(\n this: T,\n arg: Arg,\n ): GetOptionalResult<T, Arg> {\n return _get(this, 'value', arg);\n }\n}\n","import { Expression, raw, RawExpression } from '../common';\nimport {\n Query,\n Selectable,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsPluck,\n SetQueryReturnsRows,\n SetQueryReturnsValueOptional,\n SetQueryReturnsVoid,\n SetQueryTableAlias,\n SetQueryWindows,\n QueryBase,\n SetQueryReturnsOneOptional,\n} from '../query';\nimport {\n applyMixins,\n getClonedQueryData,\n GetTypesOrRaw,\n PropertyKeyUnionToArray,\n} from '../utils';\nimport {\n SelectItem,\n SelectQueryData,\n SortDir,\n Sql,\n toSql,\n TruncateQueryData,\n} from '../sql';\nimport {\n pushQueryArray,\n pushQueryValue,\n removeFromQuery,\n} from '../queryDataUtils';\nimport { Then } from './then';\nimport { NumberColumn } from '../columnSchema';\nimport { Aggregate } from './aggregate';\nimport { addParserForSelectItem, Select } from './select';\nimport { From } from './from';\nimport { Join } from './join';\nimport { With } from './with';\nimport { Union } from './union';\nimport { Json } from './json';\nimport { Insert } from './insert';\nimport { Update } from './update';\nimport { Delete } from './delete';\nimport { Transaction } from './transaction';\nimport { For } from './for';\nimport { ColumnInfoMethods } from './columnInfo';\nimport { addWhere, Where, WhereArg, WhereResult } from './where';\nimport { Clear } from './clear';\nimport { Having } from './having';\nimport { Window } from './window';\nimport { QueryLog } from './log';\nimport { QueryCallbacks } from './callbacks';\nimport { QueryUpsert } from './upsert';\nimport { QueryGet } from './get';\n\nexport type WindowArg<T extends Query> = Record<\n string,\n WindowArgDeclaration<T> | RawExpression\n>;\n\nexport type WindowArgDeclaration<T extends Query = Query> = {\n partitionBy?: Expression<T> | Expression<T>[];\n order?: OrderArg<T>;\n};\n\ntype WindowResult<T extends Query, W extends WindowArg<T>> = SetQueryWindows<\n T,\n PropertyKeyUnionToArray<keyof W>\n>;\n\nexport type OrderArg<T extends Query> =\n | keyof T['selectable']\n | {\n [K in Selectable<T>]?:\n | SortDir\n | { dir: SortDir; nulls: 'FIRST' | 'LAST' };\n }\n | RawExpression;\n\nexport interface QueryMethods\n extends Aggregate,\n Select,\n From,\n Join,\n With,\n Union,\n Json,\n Insert,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Where,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsert,\n QueryGet {}\n\nexport class QueryMethods {\n windows!: PropertyKey[];\n __model!: Query;\n\n all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n return this.query.returnType === 'all'\n ? (this as unknown as SetQueryReturnsAll<T>)\n : this.clone()._all();\n }\n\n _all<T extends Query>(this: T): SetQueryReturnsAll<T> {\n this.query.returnType = 'all';\n removeFromQuery(this, 'take');\n return this as unknown as SetQueryReturnsAll<T>;\n }\n\n take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n return this.query.returnType === 'oneOrThrow'\n ? (this as unknown as SetQueryReturnsOne<T>)\n : this.clone()._take();\n }\n\n _take<T extends Query>(this: T): SetQueryReturnsOne<T> {\n this.query.returnType = 'oneOrThrow';\n this.query.take = true;\n return this as unknown as SetQueryReturnsOne<T>;\n }\n\n takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n return this.query.returnType === 'one'\n ? (this as unknown as SetQueryReturnsOneOptional<T>)\n : this.clone()._takeOptional();\n }\n\n _takeOptional<T extends Query>(this: T): SetQueryReturnsOneOptional<T> {\n this.query.returnType = 'one';\n this.query.take = true;\n return this as unknown as SetQueryReturnsOneOptional<T>;\n }\n\n rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n return this.query.returnType === 'rows'\n ? (this as unknown as SetQueryReturnsRows<T>)\n : this.clone()._rows();\n }\n\n _rows<T extends Query>(this: T): SetQueryReturnsRows<T> {\n this.query.returnType = 'rows';\n removeFromQuery(this, 'take');\n return this as unknown as SetQueryReturnsRows<T>;\n }\n\n pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n return this.query.returnType === 'pluck'\n ? (this as unknown as SetQueryReturnsPluck<T, S>)\n : this.clone()._pluck(select);\n }\n\n _pluck<T extends Query, S extends Expression<T>>(\n this: T,\n select: S,\n ): SetQueryReturnsPluck<T, S> {\n this.query.returnType = 'pluck';\n removeFromQuery(this, 'take');\n (this.query as SelectQueryData).select = [select as SelectItem];\n addParserForSelectItem(this, this.query.as || this.table, 'pluck', select);\n return this as unknown as SetQueryReturnsPluck<T, S>;\n }\n\n exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n return this.query.returnType === 'void'\n ? (this as unknown as SetQueryReturnsVoid<T>)\n : this.clone()._exec();\n }\n\n _exec<T extends Query>(this: T): SetQueryReturnsVoid<T> {\n this.query.returnType = 'void';\n removeFromQuery(this, 'take');\n return this as unknown as SetQueryReturnsVoid<T>;\n }\n\n clone<T extends QueryBase>(this: T): T {\n const cloned = Object.create(this.__model);\n cloned.query = getClonedQueryData(this.query);\n return cloned;\n }\n\n toSql(this: Query, values?: unknown[]): Sql {\n return toSql(this, values);\n }\n\n distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._distinct(...columns);\n }\n\n _distinct<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'distinct', columns as string[]);\n }\n\n find<T extends Query>(\n this: T,\n ...args: GetTypesOrRaw<T['schema']['primaryTypes']>\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._find(...args);\n }\n\n _find<T extends Query>(\n this: T,\n ...args: GetTypesOrRaw<T['schema']['primaryTypes']>\n ): SetQueryReturnsOne<WhereResult<T>> {\n const conditions: Partial<T['type']> = {};\n this.schema.primaryKeys.forEach((key: string, i: number) => {\n conditions[key as keyof T['type']] = args[i];\n });\n return this._where(conditions as WhereArg<T>)._take();\n }\n\n findOptional<T extends Query>(\n this: T,\n ...args: GetTypesOrRaw<T['schema']['primaryTypes']>\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findOptional(...args);\n }\n\n _findOptional<T extends Query>(\n this: T,\n ...args: GetTypesOrRaw<T['schema']['primaryTypes']>\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this._find(\n ...args,\n ).takeOptional() as unknown as SetQueryReturnsOneOptional<WhereResult<T>>;\n }\n\n findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return this.clone()._findBy(...args);\n }\n\n _findBy<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOne<WhereResult<T>> {\n return addWhere(this, args).take();\n }\n\n findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return this.clone()._findByOptional(...args);\n }\n\n _findByOptional<T extends Query>(\n this: T,\n ...args: WhereArg<T>[]\n ): SetQueryReturnsOneOptional<WhereResult<T>> {\n return addWhere(this, args).takeOptional();\n }\n\n as<T extends Query, TableAlias extends string>(\n this: T,\n tableAlias: TableAlias,\n ): SetQueryTableAlias<T, TableAlias> {\n return this.clone()._as(tableAlias) as unknown as SetQueryTableAlias<\n T,\n TableAlias\n >;\n }\n\n _as<T extends Query, TableAlias extends string>(\n this: T,\n tableAlias: TableAlias,\n ): SetQueryTableAlias<T, TableAlias> {\n this.query.as = tableAlias;\n return this as unknown as SetQueryTableAlias<T, TableAlias>;\n }\n\n withSchema<T extends Query>(this: T, schema: string): T {\n return this.clone()._withSchema(schema);\n }\n\n _withSchema<T extends Query>(this: T, schema: string): T {\n this.query.schema = schema;\n return this;\n }\n\n group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return this.clone()._group(...columns);\n }\n\n _group<T extends Query>(this: T, ...columns: Expression<T>[]): T {\n return pushQueryArray(this, 'group', columns);\n }\n\n window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return this.clone()._window(arg);\n }\n\n _window<T extends Query, W extends WindowArg<T>>(\n this: T,\n arg: W,\n ): WindowResult<T, W> {\n return pushQueryValue(this, 'window', arg) as unknown as WindowResult<T, W>;\n }\n\n wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as?: As,\n ): SetQueryTableAlias<Q, As> {\n return this.clone()._wrap(query, as);\n }\n\n _wrap<T extends Query, Q extends Query, As extends string = 't'>(\n this: T,\n query: Q,\n as?: As,\n ): SetQueryTableAlias<Q, As> {\n const sql = this.toSql();\n\n return query\n .as(as ?? 't')\n ._from(\n raw(`(${sql.text})`, ...sql.values),\n ) as unknown as SetQueryTableAlias<Q, As>;\n }\n\n order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return this.clone()._order(...args);\n }\n\n _order<T extends Query>(this: T, ...args: OrderArg<T>[]): T {\n return pushQueryArray(this, 'order', args);\n }\n\n limit<T extends Query>(this: T, arg: number): T {\n return this.clone()._limit(arg);\n }\n\n _limit<T extends Query>(this: T, arg: number): T {\n (this.query as SelectQueryData).limit = arg;\n return this;\n }\n\n offset<T extends Query>(this: T, arg: number): T {\n return this.clone()._offset(arg);\n }\n\n _offset<T extends Query>(this: T, arg: number): T {\n (this.query as SelectQueryData).offset = arg;\n return this;\n }\n\n exists<T extends Query>(\n this: T,\n ): SetQueryReturnsValueOptional<T, NumberColumn> {\n return this.clone()._exists();\n }\n\n _exists<T extends Query>(\n this: T,\n ): SetQueryReturnsValueOptional<T, NumberColumn> {\n const q = this._getOptional(raw<NumberColumn>('1'));\n delete q.query.take;\n return q as unknown as SetQueryReturnsValueOptional<T, NumberColumn>;\n }\n\n truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n return this.clone()._truncate(options);\n }\n\n _truncate<T extends Query>(\n this: T,\n options?: { restartIdentity?: boolean; cascade?: boolean },\n ): SetQueryReturnsVoid<T> {\n const q = this.query as TruncateQueryData;\n q.type = 'truncate';\n if (options?.restartIdentity) {\n q.restartIdentity = true;\n }\n if (options?.cascade) {\n q.cascade = true;\n }\n return this._exec();\n }\n}\n\napplyMixins(QueryMethods, [\n Aggregate,\n Select,\n From,\n Join,\n With,\n Union,\n Json,\n Insert,\n Update,\n Delete,\n Transaction,\n For,\n ColumnInfoMethods,\n Where,\n Clear,\n Having,\n Window,\n Then,\n QueryLog,\n QueryCallbacks,\n QueryUpsert,\n QueryGet,\n]);\n","import {\n ColumnsParsers,\n DefaultSelectColumns,\n defaultsKey,\n Query,\n} from './query';\nimport { QueryMethods } from './queryMethods/queryMethods';\nimport { QueryData, SelectQueryData, Sql } from './sql';\nimport { AdapterOptions, Adapter } from './adapter';\nimport {\n ColumnsShape,\n columnTypes,\n ColumnShapeOutput,\n TableSchema,\n AnyColumnTypeCreator,\n ColumnShapeInput,\n ColumnTypes,\n} from './columnSchema';\nimport { applyMixins } from './utils';\nimport { StringKey } from './common';\nimport { handleResult, ThenResult } from './queryMethods/then';\nimport { WhereQueryBuilder } from './queryMethods/where';\nimport { OnQueryBuilder } from './queryMethods/join';\nimport { logParamToLogObject, QueryLogOptions } from './queryMethods/log';\n\nexport type DbTableOptions = {\n schema?: string;\n} & QueryLogOptions;\n\nexport interface Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n> extends QueryMethods {\n new (\n adapter: Adapter,\n queryBuilder: Db,\n table?: Table,\n shape?: Shape,\n options?: DbTableOptions,\n ): this;\n\n adapter: Adapter;\n queryBuilder: Db;\n whereQueryBuilder: Query['whereQueryBuilder'];\n table: Table;\n shape: Shape;\n schema: TableSchema<Shape>;\n type: ColumnShapeOutput<Shape>;\n inputType: ColumnShapeInput<Shape>;\n returnType: 'all';\n then: ThenResult<\n Pick<ColumnShapeOutput<Shape>, DefaultSelectColumns<Shape>[number]>[]\n >;\n query: QueryData;\n columns: (keyof ColumnShapeOutput<Shape>)[];\n defaultSelectColumns: DefaultSelectColumns<Shape>;\n columnsParsers?: ColumnsParsers;\n result: Pick<Shape, DefaultSelectColumns<Shape>[number]>;\n hasSelect: false;\n hasWhere: false;\n selectable: { [K in keyof Shape]: { as: K; column: Shape[K] } } & {\n [K in keyof Shape as `${Table}.${StringKey<K>}`]: {\n as: K;\n column: Shape[K];\n };\n };\n tableAlias: undefined;\n windows: PropertyKey[];\n withData: Query['withData'];\n joinedTables: Query['joinedTables'];\n relations: Relations;\n [defaultsKey]: Query[defaultsKey];\n}\n\nexport class Db<\n Table extends string | undefined = undefined,\n Shape extends ColumnsShape = Record<string, never>,\n Relations extends Query['relations'] = Query['relations'],\n> implements Query\n{\n whereQueryBuilder = WhereQueryBuilder;\n onQueryBuilder = OnQueryBuilder;\n\n constructor(\n public adapter: Adapter,\n public queryBuilder: Db,\n public table: Table = undefined as Table,\n public shape: Shape = {} as Shape,\n options: DbTableOptions,\n ) {\n this.__model = this;\n\n const logger = options.logger || console;\n this.query = {\n adapter,\n handleResult: handleResult,\n returnType: 'all',\n logger,\n log: logParamToLogObject(logger, options.log),\n } as QueryData;\n\n if (options?.schema) {\n this.query.schema = options.schema;\n }\n\n this.schema = new TableSchema(shape);\n const columns = Object.keys(\n shape,\n ) as unknown as (keyof ColumnShapeOutput<Shape>)[];\n const { toSql } = this;\n\n this.columns = columns as (keyof ColumnShapeOutput<Shape>)[];\n this.defaultSelectColumns = columns.filter(\n (column) => !shape[column as keyof typeof shape].isHidden,\n ) as DefaultSelectColumns<Shape>;\n\n const defaultSelect =\n this.defaultSelectColumns.length === columns.length\n ? undefined\n : this.defaultSelectColumns;\n\n const columnsParsers: ColumnsParsers = {};\n let hasParsers = false;\n for (const key in shape) {\n const column = shape[key];\n if (column.parseFn) {\n hasParsers = true;\n columnsParsers[key] = column.parseFn;\n }\n }\n this.columnsParsers = hasParsers ? columnsParsers : undefined;\n\n this.toSql = defaultSelect\n ? function <T extends Query>(this: T, values?: unknown[]): Sql {\n const q = this.clone();\n if (!(q.query as SelectQueryData).select) {\n (q.query as SelectQueryData).select = defaultSelect as string[];\n }\n return toSql.call(q, values);\n }\n : toSql;\n\n this.relations = {} as Relations;\n }\n}\n\napplyMixins(Db, [QueryMethods]);\nDb.prototype.constructor = Db;\n\ntype DbResult<CT extends Record<string, AnyColumnTypeCreator>> = Db & {\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?: ((t: CT) => Shape) | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape>;\n\n adapter: Adapter;\n destroy: Adapter['destroy'];\n};\n\nexport type DbOptions<\n CT extends Record<string, AnyColumnTypeCreator> = ColumnTypes,\n> = ({ adapter: Adapter } | Omit<AdapterOptions, 'log'>) &\n QueryLogOptions & {\n columnTypes?: CT;\n };\n\nexport const createDb = <CT extends Record<string, AnyColumnTypeCreator>>({\n log,\n logger,\n columnTypes: ct = columnTypes as unknown as CT,\n ...options\n}: DbOptions<CT>): DbResult<CT> => {\n const adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n const commonOptions = { log, logger };\n\n const qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n {},\n commonOptions,\n );\n qb.queryBuilder = qb;\n\n const db = Object.assign(\n <Table extends string, Shape extends ColumnsShape = ColumnsShape>(\n table: Table,\n shape?: ((t: CT) => Shape) | Shape,\n options?: DbTableOptions,\n ): Db<Table, Shape> => {\n return new Db<Table, Shape>(\n adapter,\n qb,\n table as Table,\n typeof shape === 'function' ? shape(ct) : shape,\n { ...commonOptions, ...options },\n );\n },\n qb,\n { adapter, destroy: () => adapter.destroy() },\n );\n\n // Set all methods from prototype to the db instance (needed for transaction at least):\n Object.getOwnPropertyNames(Db.prototype).forEach((name) => {\n (db as unknown as Record<string, unknown>)[name] =\n Db.prototype[name as keyof typeof Db.prototype];\n });\n\n return db as DbResult<CT>;\n};\n","import { QueryMethods } from './queryMethods/queryMethods';\nimport { QueryData } from './sql';\nimport {\n ColumnShapeOutput,\n ColumnsShape,\n ColumnType,\n TableSchema,\n} from './columnSchema';\nimport { Spread } from './utils';\nimport { AliasOrTable, RawExpression, StringKey } from './common';\nimport { ThenResult } from './queryMethods/then';\nimport { Db } from './db';\nimport { ColumnInfo } from './queryMethods/columnInfo';\nimport { RelationQueryBase, RelationsBase } from './relations';\nimport { WhereQueryBuilder } from './queryMethods/where';\nimport { OnQueryBuilder } from './queryMethods/join';\nimport { GetArg } from './queryMethods/get';\n\nexport type ColumnParser = (input: unknown) => unknown;\nexport type ColumnsParsers = Record<string, ColumnParser>;\n\nexport type SelectableBase = Record<\n PropertyKey,\n { as: string; column: ColumnType }\n>;\n\nexport type WithDataItem = { table: string; shape: ColumnsShape };\nexport type WithDataBase = Record<never, WithDataItem>;\n\nexport type QueryBase = {\n query: QueryData;\n table?: string;\n tableAlias?: string;\n clone(): QueryBase;\n selectable: SelectableBase;\n __model: Query;\n relations: RelationsBase;\n withData: WithDataBase;\n};\n\nexport type defaultsKey = typeof defaultsKey;\nexport const defaultsKey: unique symbol = Symbol('defaults');\n\nexport type Query = QueryMethods & {\n queryBuilder: Db;\n whereQueryBuilder: typeof WhereQueryBuilder;\n onQueryBuilder: typeof OnQueryBuilder;\n table?: string;\n shape: ColumnsShape;\n schema: Omit<TableSchema<ColumnsShape>, 'primaryKeys' | 'primaryTypes'> & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n primaryKeys: any[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n primaryTypes: any[];\n };\n type: Record<string, unknown>;\n inputType: Record<string, unknown>;\n query: QueryData;\n result: ColumnsShape;\n hasSelect: boolean;\n hasWhere: boolean;\n selectable: SelectableBase;\n returnType: QueryReturnType;\n then: ThenResult<unknown>;\n tableAlias: string | undefined;\n joinedTables: Record<string, Pick<Query, 'result' | 'tableAlias' | 'table'>>;\n windows: PropertyKey[];\n defaultSelectColumns: string[];\n columnsParsers?: ColumnsParsers;\n relations: RelationsBase;\n withData: WithDataBase;\n [defaultsKey]?: string;\n};\n\nexport type Selectable<T extends QueryBase> = StringKey<keyof T['selectable']>;\n\nexport type QueryWithTable = Query & { table: string };\n\nexport type DefaultSelectColumns<S extends ColumnsShape> = {\n [K in keyof S]: S[K]['isHidden'] extends true ? never : K;\n}[StringKey<keyof S>][];\n\nexport type QueryReturnType =\n | 'all'\n | 'one'\n | 'oneOrThrow'\n | 'rows'\n | 'pluck'\n | 'value'\n | 'valueOrThrow'\n | 'rowCount'\n | 'void';\n\nexport type JoinedTablesBase = Record<\n string,\n Pick<Query, 'result' | 'tableAlias' | 'table'>\n>;\n\ntype QueryThen<\n ReturnType extends QueryReturnType,\n Result extends ColumnsShape,\n> = ReturnType extends 'all'\n ? ThenResult<ColumnShapeOutput<Result>[]>\n : ReturnType extends 'one'\n ? ThenResult<ColumnShapeOutput<Result> | undefined>\n : ReturnType extends 'oneOrThrow'\n ? ThenResult<ColumnShapeOutput<Result>>\n : ReturnType extends 'value'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type'] | undefined>\n : never\n : ReturnType extends 'valueOrThrow'\n ? Result extends { value: ColumnType }\n ? ThenResult<Result['value']['type']>\n : never\n : ReturnType extends 'rows'\n ? ThenResult<ColumnShapeOutput<Result>[keyof Result][][]>\n : ReturnType extends 'pluck'\n ? Result extends { pluck: ColumnType }\n ? ThenResult<Result['pluck']['type'][]>\n : never\n : ReturnType extends 'rowCount'\n ? ThenResult<number>\n : ReturnType extends 'void'\n ? ThenResult<void>\n : never;\n\nexport type AddQuerySelect<\n T extends Pick<Query, 'hasSelect' | 'result' | 'then' | 'returnType'>,\n Result extends ColumnsShape,\n> = T['hasSelect'] extends false\n ? Omit<T, 'hasSelect' | 'result' | 'then'> & {\n hasSelect: true;\n result: Result;\n then: QueryThen<T['returnType'], Result>;\n }\n : Omit<T, 'result' | 'then'> & {\n result: Spread<[T['result'], Result]>;\n then: QueryThen<T['returnType'], Spread<[T['result'], Result]>>;\n };\n\nexport type QuerySelectAll<T extends Query> = Omit<\n T,\n 'hasSelect' | 'result' | 'then'\n> & {\n hasSelect: true;\n result: T['shape'];\n then: QueryThen<T['returnType'], T['shape']>;\n};\n\nexport type SetQueryReturns<T extends Query, R extends QueryReturnType> = Omit<\n T,\n 'returnType' | 'then'\n> & { returnType: R; then: QueryThen<R, T['result']> };\n\nexport type SetQueryReturnsAll<T extends Query> = SetQueryReturns<T, 'all'>;\n\nexport type SetQueryReturnsOneOptional<T extends Query> = SetQueryReturns<\n T,\n 'one'\n>;\n\nexport type SetQueryReturnsOne<T extends Query> = SetQueryReturns<\n T,\n 'oneOrThrow'\n>;\n\nexport type SetQueryReturnsRows<T extends Query> = SetQueryReturns<T, 'rows'>;\n\nexport type SetQueryReturnsPluck<\n T extends Query,\n S extends keyof T['selectable'] | RawExpression,\n C extends ColumnType = S extends keyof T['selectable']\n ? T['selectable'][S]['column']\n : S extends RawExpression\n ? S['__column']\n : never,\n> = Omit<T, 'hasSelect' | 'result' | 'returnType' | 'then'> & {\n hasSelect: true;\n result: { pluck: C };\n returnType: 'pluck';\n then: ThenResult<C['type'][]>;\n};\n\nexport type SetQueryReturnsValueOptional<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnType,\n Column extends ColumnType = Arg extends ColumnType\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'hasSelect' | 'result' | 'returnType' | 'then'> & {\n hasSelect: true;\n result: { value: Column };\n returnType: 'value';\n then: ThenResult<Column['type'] | undefined>;\n};\n\nexport type SetQueryReturnsValue<\n T extends Query,\n Arg extends Exclude<GetArg<T>, RawExpression> | ColumnType,\n Column extends ColumnType = Arg extends ColumnType\n ? Arg\n : Arg extends keyof T['selectable']\n ? T['selectable'][Arg]['column']\n : Arg extends RelationQueryBase\n ? Arg['result']['value']\n : never,\n> = Omit<T, 'hasSelect' | 'result' | 'returnType' | 'then'> & {\n hasSelect: true;\n result: { value: Column };\n returnType: 'valueOrThrow';\n then: ThenResult<Column['type']>;\n};\n\nexport type SetQueryReturnsRowCount<T extends Query> = SetQueryReturns<\n T,\n 'rowCount'\n>;\n\nexport type SetQueryReturnsVoid<T extends Query> = SetQueryReturns<T, 'void'>;\n\nexport type SetQueryReturnsColumnInfo<\n T extends Query,\n Column extends keyof T['shape'] | undefined,\n Result = Column extends keyof T['shape']\n ? ColumnInfo\n : Record<keyof T['shape'], ColumnInfo>,\n> = Omit<T, 'result' | 'returnType' | 'then'> & {\n result: { value: ColumnType<Result> };\n returnType: 'value';\n then: ThenResult<Result>;\n};\n\nexport type SetQueryTableAlias<\n T extends Query,\n TableAlias extends string,\n> = Omit<T, 'tableAlias' | 'selectable'> & {\n tableAlias: TableAlias;\n selectable: Omit<\n T['selectable'],\n `${AliasOrTable<T>}.${StringKey<keyof T['shape']>}`\n > & {\n [K in keyof T['shape'] as `${TableAlias}.${StringKey<keyof T['shape']>}`]: {\n as: K;\n column: T['shape'][K];\n };\n };\n};\n\nexport type SetQueryJoinedTables<\n T extends Query,\n Selectable extends Record<string, { as: string; column: ColumnType }>,\n JoinedTables extends JoinedTablesBase,\n> = Omit<T, 'selectable' | 'joinedTables'> & {\n selectable: Selectable;\n joinedTables: JoinedTables;\n};\n\nexport type AddQueryJoinedTable<\n T extends Query,\n J extends Pick<Query, 'result' | 'tableAlias' | 'table'>,\n> = SetQueryJoinedTables<\n T,\n T['selectable'] & {\n [K in keyof J['result'] as `${AliasOrTable<J>}.${StringKey<K>}`]: {\n as: K;\n column: J['result'][K];\n };\n },\n string extends keyof T['joinedTables']\n ? Record<AliasOrTable<J>, J>\n : Spread<[T['joinedTables'], Record<AliasOrTable<J>, J>]>\n>;\n\nexport type SetQueryWith<\n T extends Query,\n WithData extends Record<string, WithDataItem>,\n> = Omit<T, 'withData'> & { withData: WithData };\n\nexport type AddQueryWith<\n T extends Query,\n With extends WithDataItem,\n> = SetQueryWith<T, Spread<[T['withData'], { [K in With['table']]: With }]>>;\n\nexport type SetQueryWindows<T extends Query, W extends PropertyKey[]> = Omit<\n T,\n 'windows'\n> & { windows: W };\n"],"names":["quoteValue","__spreadProps","__spreadValues","numberMethods","__objRest","types","Pool"],"mappings":"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"}
|