{"version":3,"file":"utils.cjs","names":["getTableName","is","Column","SQL","Subquery","Table","Param","ViewBaseConfig","View"],"sources":["../src/utils.ts"],"sourcesContent":["import type { Cache } from './cache/core/cache.ts';\nimport type { CodecsCollection } from './codecs.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport type { AnyRelations, EmptyRelations } from './relations.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder, SQLWrapper } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function resolveNullableObjectPaths(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): string[] | undefined {\n\tif (!joinsNotNullableMap) return undefined;\n\n\t// prefix -> table\n\tconst tableOf = new Map<string, string | false>();\n\tconst order: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const { path, field, fieldType } of columns) {\n\t\tif (path.length < 2) continue;\n\t\tconst key = path[0]!;\n\t\tif (!seen.has(key)) {\n\t\t\tseen.add(key);\n\t\t\torder.push(key);\n\t\t}\n\t\tif (fieldType !== 'Column') continue;\n\t\tconst tableName = getTableName(field.table);\n\t\tconst current = tableOf.get(key);\n\t\tif (current === undefined) tableOf.set(key, tableName);\n\t\telse if (current !== false && current !== tableName) tableOf.set(key, false);\n\t}\n\n\tconst result: string[] = [];\n\tfor (const key of order) {\n\t\tconst table = tableOf.get(key);\n\t\t// sql field only group remains not nullable due to lack of table to be bound to\n\t\tif (typeof table === 'string' && !joinsNotNullableMap[table]) result.push(key);\n\t}\n\n\treturn result;\n}\n\nfunction nullablePathTargets(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tnullableObjectPaths: string[],\n): { key: string; leaves: number[] }[] {\n\tconst targets: {\n\t\tkey: string;\n\t\tleaves: number[];\n\t}[] = new Array(nullableObjectPaths.length);\n\n\tfor (let i = 0; i < nullableObjectPaths.length; ++i) {\n\t\tconst key = nullableObjectPaths[i]!;\n\t\tconst leaves: number[] = [];\n\t\tfor (let j = 0; j < columns.length; ++j) {\n\t\t\tconst cp = columns[j]!.path;\n\t\t\tif (cp.length > 1 && cp[0] === key) leaves.push(j);\n\t\t}\n\n\t\ttargets[i] = { key, leaves };\n\t}\n\n\treturn targets;\n}\n\n/** @internal bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tnullableObjectPaths?: string[],\n): string {\n\tconst preFn = [] as string[];\n\tconst fn = [] as string[];\n\tfn.push(`const [ ${columns.map((_, i) => `c${i}`).join(', ')} ] = rows[i];`);\n\n\t// top-level key -> the c-ids of every leaf nested under it, so a nullable group can test them all at once.\n\tconst descendantIds: Record<string, string[]> = {};\n\tconst nullableKeys = new Set(nullableObjectPaths ?? []);\n\tconst decodes = new Array<string>(columns.length);\n\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { field, fieldType, path, codec, arrayDimensions } = columns[idx]!;\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tlet decoderFieldDestructure: string;\n\t\tswitch (fieldType) {\n\t\t\tcase 'Column':\n\t\t\t\tdecoder = field;\n\t\t\t\tdecoderFieldDestructure = `field: decoder${idx}`;\n\t\t\t\tbreak;\n\t\t\tcase 'SQL':\n\t\t\t\tdecoder = field.decoder;\n\t\t\t\tdecoderFieldDestructure = `field: { decoder: decoder${idx} }`;\n\t\t\t\tbreak;\n\t\t\tcase 'Subquery':\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t\tdecoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t\tdecoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;\n\t\t}\n\t\tdecoderStr = `decoder${idx}.mapFromDriverValue`;\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tif (decoderStr) {\n\t\t\tpreFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ''} } = columns[${idx}];`);\n\t\t} else if (codec) {\n\t\t\tpreFn.push(`const { codec: codec${idx} } = columns[${idx}];`);\n\t\t}\n\n\t\tconst colStr = `c${idx}`;\n\t\tlet decodedValue = colStr;\n\t\tif (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tdecodes[idx] = colStr === decodedValue\n\t\t\t? `${colStr}`\n\t\t\t: `${colStr} === null ? ${colStr} : ${decodedValue}`;\n\n\t\tif (path.length > 1) (descendantIds[path[0]!] ??= []).push(colStr);\n\t}\n\n\tfn.push(`mapped[i] = {`);\n\tlet currentObjectPath: string[] = [];\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { path } = columns[idx]!;\n\t\tconst jsonPath = path.map((e) => JSON.stringify(e));\n\t\tconst decodedValue = decodes[idx]!;\n\n\t\tconst objectPath = path.slice(0, -1);\n\t\tlet commonLen = 0;\n\t\twhile (\n\t\t\tcommonLen < currentObjectPath.length\n\t\t\t&& commonLen < objectPath.length\n\t\t\t&& currentObjectPath[commonLen] === objectPath[commonLen]\n\t\t) commonLen++;\n\n\t\tfor (let d = currentObjectPath.length - 1; d >= commonLen; --d) {\n\t\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t\t}\n\n\t\tfor (let d = commonLen; d < objectPath.length; ++d) {\n\t\t\tconst nullable = d === 0 && nullableKeys.has(path[0]!);\n\t\t\tfn.push(\n\t\t\t\t`${'\\t'.repeat(d + 1)}${jsonPath[d]}: ${\n\t\t\t\t\tnullable\n\t\t\t\t\t\t? `${descendantIds[path[0]!]!.map((c) => `${c} === null`).join(' && ')} ? null : {`\n\t\t\t\t\t\t: '{'\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tcurrentObjectPath = objectPath;\n\t\tfn.push(`${'\\t'.repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);\n\t}\n\n\tfor (let d = currentObjectPath.length - 1; d >= 0; --d) {\n\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t}\n\tfn.push(`};`);\n\n\treturn `${preFn.length ? `${preFn.join('\\n\\t')}\\n\\t` : ''}for (let i = 0; i < length; ++i) {\n\t\t${fn.join('\\n\\t\\t')}\n\t}`;\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tnullableObjectPaths: string[] | undefined,\n) => RowsMapper<TResult> | undefined;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tnullableObjectPaths: string[] | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\t\"use strict\";\n\tconst { columns } = this;\n\tconst { length } = rows;\n\tconst mapped = new Array(length);\n\t${makeJitQueryMapperInner(columns, nullableObjectPaths)}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\n}\n\n/** @internal */\nexport function jitCompatCheck(isEnabled?: boolean): boolean {\n\tif (!isEnabled) return false;\n\n\ttry {\n\t\tconst res = new FnConstructor('input', '\"use strict\"; return input;')(true);\n\t\tif (res !== true) {\n\t\t\t// In case it's broken in runtime but not forbidden\n\t\t\tconsole.warn(\n\t\t\t\t'Unable to use jit mappers due to incompatibility: corrupted jit function output.\\nFalling back to premade mappers.\\nError details:',\n\t\t\t);\n\t\t\tconsole.error(`Expected to receive \\`true\\`, got: ${res}`);\n\t\t}\n\t\treturn true;\n\t} catch (e) {\n\t\tconsole.warn(\n\t\t\t'Unable to use jit mappers due to incompatibility.\\nFalling back to premade mappers.\\nError details:',\n\t\t);\n\t\tconsole.error(e);\n\t\treturn false;\n\t}\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tnullableObjectPaths: string[] | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData: (((v: any) => any) | undefined)[] = new Array(columns.length);\n\tfor (let i = 0; i < columns.length; ++i) {\n\t\tconst { field, fieldType, codec, arrayDimensions } = columns[i]!;\n\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tswitch (fieldType) {\n\t\t\tcase 'Column':\n\t\t\t\tdecoderSrc = field;\n\t\t\t\tbreak;\n\t\t\tcase 'SQL':\n\t\t\t\tdecoderSrc = field.decoder;\n\t\t\t\tbreak;\n\t\t\tcase 'Subquery':\n\t\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdecoderSrc = field.sql.decoder;\n\t\t}\n\n\t\tlet decoder: ((v: any) => any) | undefined;\n\t\tif (decoderSrc.mapFromDriverValue.isNoop) {\n\t\t\tdecoder = codec ? (v: any) => codec(v, arrayDimensions!) : undefined;\n\t\t} else {\n\t\t\tdecoder = codec\n\t\t\t\t? (v: any) => decoderSrc.mapFromDriverValue(codec(v, arrayDimensions!))\n\t\t\t\t: (v: any) => decoderSrc.mapFromDriverValue(v);\n\t\t}\n\n\t\tinterpretedData[i] = decoder;\n\t}\n\n\tconst targets = nullableObjectPaths?.length\n\t\t? nullablePathTargets(columns, nullableObjectPaths)\n\t\t: undefined;\n\n\treturn ((rows) => {\n\t\tconst { length: rowLength } = rows;\n\t\tconst output: TResult[] = new Array(rowLength);\n\t\tfor (let j = 0; j < rowLength; ++j) {\n\t\t\tconst row = rows[j]!;\n\n\t\t\tconst result: Record<string, any> = {};\n\n\t\t\tfor (let i = 0; i < columns.length; ++i) {\n\t\t\t\tconst { path } = columns[i]!;\n\n\t\t\t\tlet node = result;\n\t\t\t\tfor (let p = 0; p < path.length; ++p) {\n\t\t\t\t\tconst pathChunk = path[p]!;\n\t\t\t\t\tif (p < path.length - 1) {\n\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst decoder = interpretedData[i]!;\n\t\t\t\t\t\tconst rawValue = row[i]!;\n\t\t\t\t\t\tnode[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t: rawValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Nullify every top-level nullable group whose leaves are all null on this row.\n\t\t\tif (targets) {\n\t\t\t\tfor (let i = 0; i < targets.length; ++i) {\n\t\t\t\t\tconst { key, leaves } = targets[i]!;\n\n\t\t\t\t\tlet allNull = true;\n\t\t\t\t\tfor (let j = 0; j < leaves.length; ++j) {\n\t\t\t\t\t\tconst i = leaves[j]!;\n\n\t\t\t\t\t\tif (row[i] !== null) {\n\t\t\t\t\t\t\tallNull = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (allNull) result[key] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toutput[j] = result as TResult;\n\t\t}\n\n\t\treturn output;\n\t}) as RowsMapper<TResult>;\n}\n\nexport function make$ReturningResponseMapper(\n\treturningIds: SelectedFieldsOrdered<Column> | undefined,\n\tgeneratedIds?: Record<string, unknown>[],\n) {\n\tif (!returningIds) return;\n\n\treturn ({ insertId, affectedRows }: {\n\t\tinsertId: number;\n\t\taffectedRows: number;\n\t}) => {\n\t\tconst returningResponse = [];\n\t\tlet j = 0;\n\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\tfor (const column of returningIds) {\n\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t}\n\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tj++;\n\t\t}\n\n\t\treturn returningResponse;\n\t};\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn>;\n/**\n * @deprecated `result` argument is used for internal recursion, do not use outside of the function\n * @internal\n */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n\tresult?: SelectedFieldsOrdered<AnyColumn>,\n): SelectedFieldsOrdered<TColumn>;\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n\tresult: SelectedFieldsOrdered<AnyColumn> = [],\n): SelectedFieldsOrdered<TColumn> {\n\tconst entries = Object.entries(fields);\n\n\tfor (let i = 0; i < entries.length; ++i) {\n\t\tconst [name, field] = entries[i]!;\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result as SelectedFieldsOrdered<TColumn>;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column)) {\n\t\t\tresult.push({\n\t\t\t\tpath: newPath,\n\t\t\t\tfield: field,\n\t\t\t\tfieldType: 'Column',\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t\tcolumn: field,\n\t\t\t});\n\t\t} else if (is(field, SQL)) {\n\t\t\tconst col = getColumnFromDecoder(field);\n\t\t\tresult.push(\n\t\t\t\tcol\n\t\t\t\t\t? {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'SQL',\n\t\t\t\t\t\tcodec: codecs?.get(col, 'normalize'),\n\t\t\t\t\t\tarrayDimensions: (<any> col).dimensions,\n\t\t\t\t\t\tcolumn: col,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'SQL',\n\t\t\t\t\t},\n\t\t\t);\n\t\t} else if (is(field, SQL.Aliased)) {\n\t\t\tconst col = getColumnFromDecoder(field);\n\t\t\tresult.push(\n\t\t\t\tcol\n\t\t\t\t\t? {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'SQL.Aliased',\n\t\t\t\t\t\tcodec: codecs?.get(col, 'normalize'),\n\t\t\t\t\t\tarrayDimensions: (<any> col).dimensions,\n\t\t\t\t\t\tcolumn: col,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'SQL.Aliased',\n\t\t\t\t\t},\n\t\t\t);\n\t\t} else if (is(field, Subquery)) {\n\t\t\tlet column: Column | undefined;\n\t\t\tconst entries = Object.values(field._.selectedFields) as (SQL.Aliased | Column | SQL)[];\n\t\t\tconst entry = entries[0]!;\n\n\t\t\tlet fieldDecoder: DriverValueDecoder<any, any>;\n\t\t\tif (is(entry, Column)) {\n\t\t\t\tcolumn = entry;\n\t\t\t\tfieldDecoder = entry;\n\t\t\t} else if (is(entry, SQL)) {\n\t\t\t\tcolumn = getColumnFromDecoder(entry);\n\t\t\t\tfieldDecoder = entry.decoder;\n\t\t\t} else {\n\t\t\t\tcolumn = getColumnFromDecoder(entry);\n\t\t\t\tfieldDecoder = entry.sql.decoder;\n\t\t\t}\n\n\t\t\tif (fieldDecoder) {\n\t\t\t\tfield._.sql.decoder = fieldDecoder;\n\t\t\t}\n\n\t\t\tresult.push(\n\t\t\t\tcolumn\n\t\t\t\t\t? {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'Subquery',\n\t\t\t\t\t\tcodec: codecs?.get(column, 'normalize'),\n\t\t\t\t\t\tarrayDimensions: (<any> column).dimensions,\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tfieldType: 'Subquery',\n\t\t\t\t\t},\n\t\t\t);\n\t\t} else if (is(field, Table)) {\n\t\t\torderSelectedFields(field[Table.Symbol.Columns], newPath, codecs, result);\n\t\t} else {\n\t\t\torderSelectedFields(field as Record<string, unknown>, newPath, codecs, result);\n\t\t}\n\t}\n\n\treturn result as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function getColumnFromDecoder(source: SQL | SQL.Aliased | SQLWrapper): Column | undefined {\n\tconst query = source.getSQL();\n\n\tif (is(query.decoder, Column)) return query.decoder;\n\treturn undefined;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries = Object.entries(values).filter(([, value]) => value !== undefined);\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\tconst mapped: [string, UpdateSet[string]][] = new Array(entries.length);\n\tfor (let i = 0; i < entries.length; ++i) {\n\t\tconst [key, value] = entries[i]!;\n\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\tmapped[i] = [key, value];\n\t\t} else {\n\t\t\tmapped[i] = [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t}\n\t}\n\n\treturn Object.fromEntries(mapped);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\nexport function getColumns<T extends Table | View | Subquery>(\n\ttable: T,\n): T extends Table ? T['_']['columns']\n\t: T extends View ? T['_']['selectedFields']\n\t: T extends Subquery ? T['_']['selectedFields']\n\t: never\n{\n\treturn (is(table, Table)\n\t\t? table[Table.Symbol.Columns]\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].selectedFields\n\t\t: table._.selectedFields) as any;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tjit?: boolean | undefined;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t} | undefined;\n\tschema?: Record<string, never> | undefined;\n\trelations?: AnyRelations | undefined;\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig<any, any> = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('relations' in data) {\n\t\tconst type = typeof data['relations'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('jit' in data) {\n\t\tconst type = typeof data['jit'];\n\t\tif (type !== 'boolean' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('codecs' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n\nexport function assertUnreachable(_x: never | undefined): never {\n\tthrow new Error(\"Didn't expect to get here\");\n}\n\nexport function isWithEnum(column: Column<any>): column is typeof column & { enumValues: [string, ...string[]] };\nexport function isWithEnum(value: unknown): value is { enumValues: [string, ...string[]] };\nexport function isWithEnum(value: unknown): boolean {\n\treturn ((typeof value === 'object' && value !== null) || typeof value === 'function') && 'enumValues' in value\n\t\t&& Array.isArray(value.enumValues)\n\t\t&& value.enumValues.length > 0;\n}\n\nexport type Literal = string | number | boolean | null;\nexport type Json = Literal | { [key: string]: any } | any[];\n\nexport type ColumnIsGeneratedAlwaysAs<TColumn> = TColumn extends Column<any>\n\t? TColumn['_']['identity'] extends 'always' ? true\n\t: TColumn['_'] extends { generated: undefined } ? false\n\t: TColumn['_']['generated'] extends { type: 'byDefault' } ? false\n\t: true\n\t: false;\n\nexport type GetSelection<T extends SelectedFieldsFlat<Column<any>> | Table<any> | View> = T extends Table<any>\n\t? T['_']['columns']\n\t: T extends View ? T['_']['selectedFields']\n\t: T;\n\nexport type RemoveNeverElements<T extends any[]> = T extends [infer First, ...infer Rest]\n\t? IsNever<First> extends true ? RemoveNeverElements<Rest>\n\t: [First, ...RemoveNeverElements<Rest>]\n\t: [];\n\nexport type HasBaseColumn<TColumn> = TColumn extends { _: { baseColumn: Column | undefined } }\n\t? IsNever<TColumn['_']['baseColumn']> extends false ? true\n\t: false\n\t: false;\n\nexport type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = { [K in TEnumValues[number]]: K };\n\nexport type EnumValuesToReadonlyEnum<TEnumValues extends [string, ...string[]]> = {\n\treadonly [K in TEnumValues[number]]: K;\n};\n\nexport const CONSTANTS = {\n\tINT8_MIN: -128,\n\tINT8_MAX: 127,\n\tINT8_UNSIGNED_MAX: 255,\n\tINT16_MIN: -32768,\n\tINT16_MAX: 32767,\n\tINT16_UNSIGNED_MAX: 65535,\n\tINT24_MIN: -8388608,\n\tINT24_MAX: 8388607,\n\tINT24_UNSIGNED_MAX: 16777215,\n\tINT32_MIN: -2147483648,\n\tINT32_MAX: 2147483647,\n\tINT32_UNSIGNED_MAX: 4294967295,\n\tINT48_MIN: -140737488355328,\n\tINT48_MAX: 140737488355327,\n\tINT48_UNSIGNED_MAX: 281474976710655,\n\tINT64_MIN: -9223372036854775808n,\n\tINT64_MAX: 9223372036854775807n,\n\tINT64_UNSIGNED_MAX: 18446744073709551615n,\n};\n\nexport function base64ToUint8Array(base64: string): Uint8Array {\n\tif (!base64) return new Uint8Array(0);\n\tconst binary = atob(base64);\n\tconst len = binary.length;\n\tconst bytes = new Uint8Array(len);\n\n\tfor (let i = 0; i < len; ++i) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn bytes;\n}\n\nexport type PartialWithUndefined<T> = {\n\t[K in keyof T]?: T[K] | undefined;\n};\n\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I\n\t: never;\n\nexport type LastInUnion<U> = UnionToIntersection<U extends any ? (x: U) => void : never> extends (x: infer M) => void\n\t? M\n\t: never;\n\nexport type UnionToTuple<U, Last = LastInUnion<U>> = [U] extends [never] ? []\n\t: [...UnionToTuple<Exclude<U, Last>>, Last];\n\nexport type JoinTuple<T extends any[], Separator extends string> = T extends [] ? ''\n\t: T extends [string | number | boolean | bigint] ? `${T[0]}`\n\t: T extends [string | number | boolean | bigint, ...infer U] ? `${T[0]}${Separator}${JoinTuple<U, Separator>}`\n\t: string;\n\nexport type JoinUnion<U extends string, Separator extends string> = JoinTuple<UnionToTuple<U>, Separator>;\n"],"mappings":"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"}