drizzle-orm 1.0.0-beta.21-4fa69ab → 1.0.0-beta.21-79fc602
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/cache/core/cache-effect.d.cts +1 -1
- package/cache/core/cache-effect.d.ts +1 -1
- package/cache/upstash/cache.d.cts +1 -1
- package/cache/upstash/cache.d.ts +1 -1
- package/effect-postgres/driver.d.cts +2 -2
- package/effect-postgres/driver.d.ts +2 -2
- package/package.json +1 -1
- package/utils.cjs +7 -2
- package/utils.cjs.map +1 -1
- package/utils.js +7 -2
- package/utils.js.map +1 -1
|
@@ -8,7 +8,7 @@ import * as Schema$1 from "effect/Schema";
|
|
|
8
8
|
//#region src/cache/core/cache-effect.d.ts
|
|
9
9
|
declare const EffectCache_base: Effect.Service.Class<EffectCache, "drizzle-orm/EffectCache", {
|
|
10
10
|
readonly sync: () => {
|
|
11
|
-
strategy: () => "
|
|
11
|
+
strategy: () => "all" | "explicit";
|
|
12
12
|
get: (key: string, tables: string[], isTag: boolean, isAutoInvalidate?: boolean | undefined) => Effect.Effect<any[] | undefined, EffectCacheError, never>;
|
|
13
13
|
put: (hashedQuery: string, response: any, tables: string[], isTag: boolean, config?: CacheConfig | undefined) => Effect.Effect<void, EffectCacheError, never>;
|
|
14
14
|
onMutate: (params: MutationOption) => Effect.Effect<void, EffectCacheError, never>;
|
|
@@ -8,7 +8,7 @@ import * as Schema$1 from "effect/Schema";
|
|
|
8
8
|
//#region src/cache/core/cache-effect.d.ts
|
|
9
9
|
declare const EffectCache_base: Effect.Service.Class<EffectCache, "drizzle-orm/EffectCache", {
|
|
10
10
|
readonly sync: () => {
|
|
11
|
-
strategy: () => "
|
|
11
|
+
strategy: () => "all" | "explicit";
|
|
12
12
|
get: (key: string, tables: string[], isTag: boolean, isAutoInvalidate?: boolean | undefined) => Effect.Effect<any[] | undefined, EffectCacheError, never>;
|
|
13
13
|
put: (hashedQuery: string, response: any, tables: string[], isTag: boolean, config?: CacheConfig | undefined) => Effect.Effect<void, EffectCacheError, never>;
|
|
14
14
|
onMutate: (params: MutationOption) => Effect.Effect<void, EffectCacheError, never>;
|
|
@@ -44,7 +44,7 @@ declare class UpstashCache extends Cache {
|
|
|
44
44
|
private luaScripts;
|
|
45
45
|
private internalConfig;
|
|
46
46
|
constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
|
|
47
|
-
strategy(): "
|
|
47
|
+
strategy(): "all" | "explicit";
|
|
48
48
|
private toInternalConfig;
|
|
49
49
|
get(key: string, tables: string[], isTag?: boolean, isAutoInvalidate?: boolean): Promise<any[] | undefined>;
|
|
50
50
|
put(key: string, response: any, tables: string[], isTag?: boolean, config?: CacheConfig): Promise<void>;
|
package/cache/upstash/cache.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ declare class UpstashCache extends Cache {
|
|
|
44
44
|
private luaScripts;
|
|
45
45
|
private internalConfig;
|
|
46
46
|
constructor(redis: Redis, config?: CacheConfig, useGlobally?: boolean | undefined);
|
|
47
|
-
strategy(): "
|
|
47
|
+
strategy(): "all" | "explicit";
|
|
48
48
|
private toInternalConfig;
|
|
49
49
|
get(key: string, tables: string[], isTag?: boolean, isAutoInvalidate?: boolean): Promise<any[] | undefined>;
|
|
50
50
|
put(key: string, response: any, tables: string[], isTag?: boolean, config?: CacheConfig): Promise<void>;
|
|
@@ -17,7 +17,7 @@ declare class EffectPgDatabase<TRelations extends AnyRelations = EmptyRelations>
|
|
|
17
17
|
static readonly [entityKind]: string;
|
|
18
18
|
}
|
|
19
19
|
type EffectDrizzlePgConfig<TRelations extends AnyRelations = EmptyRelations> = Omit<DrizzlePgConfig<TRelations>, 'cache' | 'logger'>;
|
|
20
|
-
declare const DefaultServices: Layer.Layer<
|
|
20
|
+
declare const DefaultServices: Layer.Layer<EffectCache | EffectLogger, never, never>;
|
|
21
21
|
declare const effectPgCodecs: PartialWithUndefined<Record<__pg_core_codecs_ts0.PostgresType, Codec>>;
|
|
22
22
|
/**
|
|
23
23
|
* Creates an EffectPgDatabase instance.
|
|
@@ -47,7 +47,7 @@ declare const effectPgCodecs: PartialWithUndefined<Record<__pg_core_codecs_ts0.P
|
|
|
47
47
|
*/
|
|
48
48
|
declare const make: <TRelations extends AnyRelations = EmptyRelations>(config?: EffectDrizzlePgConfig<TRelations> | undefined) => Effect.Effect<EffectPgDatabase<TRelations> & {
|
|
49
49
|
$client: PgClient;
|
|
50
|
-
}, never,
|
|
50
|
+
}, never, EffectCache | EffectLogger | PgClient>;
|
|
51
51
|
/**
|
|
52
52
|
* Convenience function that creates an EffectPgDatabase with `DefaultServices` already provided.
|
|
53
53
|
*/
|
|
@@ -17,7 +17,7 @@ declare class EffectPgDatabase<TRelations extends AnyRelations = EmptyRelations>
|
|
|
17
17
|
static readonly [entityKind]: string;
|
|
18
18
|
}
|
|
19
19
|
type EffectDrizzlePgConfig<TRelations extends AnyRelations = EmptyRelations> = Omit<DrizzlePgConfig<TRelations>, 'cache' | 'logger'>;
|
|
20
|
-
declare const DefaultServices: Layer.Layer<
|
|
20
|
+
declare const DefaultServices: Layer.Layer<EffectCache | EffectLogger, never, never>;
|
|
21
21
|
declare const effectPgCodecs: PartialWithUndefined<Record<__pg_core_codecs_ts0.PostgresType, Codec>>;
|
|
22
22
|
/**
|
|
23
23
|
* Creates an EffectPgDatabase instance.
|
|
@@ -47,7 +47,7 @@ declare const effectPgCodecs: PartialWithUndefined<Record<__pg_core_codecs_ts0.P
|
|
|
47
47
|
*/
|
|
48
48
|
declare const make: <TRelations extends AnyRelations = EmptyRelations>(config?: EffectDrizzlePgConfig<TRelations> | undefined) => Effect.Effect<EffectPgDatabase<TRelations> & {
|
|
49
49
|
$client: PgClient;
|
|
50
|
-
}, never,
|
|
50
|
+
}, never, EffectCache | EffectLogger | PgClient>;
|
|
51
51
|
/**
|
|
52
52
|
* Convenience function that creates an EffectPgDatabase with `DefaultServices` already provided.
|
|
53
53
|
*/
|
package/package.json
CHANGED
package/utils.cjs
CHANGED
|
@@ -240,11 +240,16 @@ function isConfig(data) {
|
|
|
240
240
|
if (type !== "object" && type !== "function" && type !== "undefined") return false;
|
|
241
241
|
return true;
|
|
242
242
|
}
|
|
243
|
-
if ("
|
|
244
|
-
const type = typeof data["
|
|
243
|
+
if ("useJitMappers" in data) {
|
|
244
|
+
const type = typeof data["useJitMappers"];
|
|
245
245
|
if (type !== "boolean" && type !== "undefined") return false;
|
|
246
246
|
return true;
|
|
247
247
|
}
|
|
248
|
+
if ("codecs" in data) {
|
|
249
|
+
const type = typeof data["connection"];
|
|
250
|
+
if (type !== "object" && type !== "undefined") return false;
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
248
253
|
if (Object.keys(data).length === 0) return true;
|
|
249
254
|
return false;
|
|
250
255
|
}
|
package/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["is","Column","SQL","Subquery","getTableName","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 } 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 mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[] | (readonly unknown[]),\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field, codec, arrayDimensions }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: decoder.mapFromDriverValue(codec ? codec(rawValue, arrayDimensions!) : rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): string {\n\tlet fn = [] as string[];\n\tif (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);\n\n\tconst initializedPaths = new Set<string>();\n\n\tfor (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {\n\t\tconst pathPrefix = pathArr.slice(0, -1);\n\t\tconst path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join('');\n\n\t\tlet processedPath;\n\t\tfor (const p of pathPrefix) {\n\t\t\tprocessedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;\n\t\t\tif (initializedPaths.has(processedPath)) continue;\n\t\t\tfn.push(`res${processedPath} = {};`);\n\t\t\tinitializedPaths.add(processedPath);\n\t\t}\n\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tif (is(field, Column)) {\n\t\t\tdecoder = field;\n\t\t\tdecoderStr = `this.columns[${idx}].field.mapFromDriverValue`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;\n\t\t}\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tconst rowStr = `rows[i][${idx}]`;\n\n\t\tlet decodedValue = rowStr;\n\t\tif (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tfn.push(\n\t\t\t`\tres${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t);\n\n\t\tif (joinsNotNullableMap && is(field, Column) && pathArr.length === 2) {\n\t\t\tconst objectName = JSON.stringify(pathArr[0]!);\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? this.getTableName(this.columns[${idx}].field.table) : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== this.getTableName(this.columns[${idx}].field.table)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = false;`,\n\t\t\t\t`}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (joinsNotNullableMap) {\n\t\tfn.push(\n\t\t\t`if(Object.keys(nullifyMap).length) {`,\n\t\t\t`\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {`,\n\t\t\t`\t\tif (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`,\n\t\t\t`\t\t\tres[objectName] = null;`,\n\t\t\t`\t\t}`,\n\t\t\t`\t}`,\n\t\t\t`}`,\n\t\t);\n\t}\n\n\treturn fn.join('\\n');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport type RowsMapper<TResult = Record<string, unknown>[]> = (rows: unknown[][]) => TResult;\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\treturn new Function(\n\t\t'rows',\n\t\t`const mapped = [];\n\t\tfor (let i = 0; i < rows.length; ++i) {\n\t\t\tconst res = {};\n\t\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)} \n\t\t\tmapped[i] = res;\n\t\t}\n\t\treturn mapped;\n\t\t//# sourceURL=drizzle:jit-query-mapper`,\n\t).bind({\n\t\tgetTableName,\n\t\tcolumns,\n\t\tjoinsNotNullableMap,\n\t}) as any;\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {\n\t\tlet processNullifyMap: ((nullifyMap: Record<string, string | false>, value: any) => void) | undefined;\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tif (is(field, Column)) {\n\t\t\tdecoderSrc = field;\n\n\t\t\tif (joinsNotNullableMap && path.length === 2) {\n\t\t\t\tconst objectName = path[0]!;\n\t\t\t\tprocessNullifyMap = (nullifyMap, value) => {\n\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoderSrc = field.decoder;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t} else {\n\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\treturn [decoder, processNullifyMap] as const;\n\t});\n\n\treturn ((rows) =>\n\t\trows.map((row) => {\n\t\t\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\t\t\tconst nullifyMap: Record<string, string | false> = {};\n\n\t\t\tconst result = columns.reduce<Record<string, any>>(\n\t\t\t\t(result, { path }, columnIndex) => {\n\t\t\t\t\tlet node = result;\n\t\t\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [decoder, processNullifyMap] = interpretedData[columnIndex]!;\n\n\t\t\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t\t: rawValue;\n\n\t\t\t\t\t\t\tprocessNullifyMap?.(nullifyMap, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// Nullify all nested objects from nullifyMap that are nullable\n\t\t\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\t\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\t\t\tresult[objectName] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result as TResult;\n\t\t})) as RowsMapper<TResult>;\n}\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\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,\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t});\n\t\t} else if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath, codecs));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath, codecs));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\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: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\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\n/**\n * @deprecated\n * Use `getColumns` instead\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 type Casing = 'snake_case' | 'camelCase';\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\tcasing?: Casing | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tuseJitMappers?: 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\tcasing?: 'snake_case' | 'camelCase' | 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 ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== 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 ('useJitMapper' in data) {\n\t\tconst type = typeof data['useJitMapper'];\n\t\tif (type !== 'boolean' && 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"],"mappings":";;;;;;;;;;AAgBA,SAAgB,aACf,SACA,KACA,qBACU;CAEV,MAAM,aAA6C,EAAE;CAErD,MAAM,SAAS,QAAQ,QACrB,QAAQ,EAAE,MAAM,OAAO,OAAO,mBAAmB,gBAAgB;EACjE,IAAI;AACJ,MAAIA,kBAAG,OAAOC,sBAAO,CACpB,WAAU;WACAD,kBAAG,OAAOE,oBAAI,CACxB,WAAU,MAAM;WACNF,kBAAG,OAAOG,0BAAS,CAC7B,WAAU,MAAM,EAAE,IAAI;MAEtB,WAAU,MAAM,IAAI;EAErB,IAAI,OAAO;AACX,OAAK,MAAM,CAAC,gBAAgB,cAAc,KAAK,SAAS,CACvD,KAAI,iBAAiB,KAAK,SAAS,GAAG;AACrC,OAAI,EAAE,aAAa,MAClB,MAAK,aAAa,EAAE;AAErB,UAAO,KAAK;SACN;GACN,MAAM,WAAW,IAAI;GACrB,MAAM,QAAQ,KAAK,aAAa,aAAa,OAC1C,OACA,QAAQ,mBAAmB,QAAQ,MAAM,UAAU,gBAAiB,GAAG,SAAS;AAEnF,OAAI,uBAAuBH,kBAAG,OAAOC,sBAAO,IAAI,KAAK,WAAW,GAAG;IAClE,MAAM,aAAa,KAAK;AACxB,QAAI,EAAE,cAAc,YACnB,YAAW,cAAc,UAAU,OAAOG,2BAAa,MAAM,MAAM,GAAG;aAEtE,OAAO,WAAW,gBAAgB,YAAY,WAAW,gBAAgBA,2BAAa,MAAM,MAAM,CAElG,YAAW,cAAc;;;AAK7B,SAAO;IAER,EAAE,CACF;AAGD,KAAI,uBAAuB,OAAO,KAAK,WAAW,CAAC,SAAS,GAC3D;OAAK,MAAM,CAAC,YAAY,cAAc,OAAO,QAAQ,WAAW,CAC/D,KAAI,OAAO,cAAc,YAAY,CAAC,oBAAoB,WACzD,QAAO,cAAc;;AAKxB,QAAO;;;AAIR,SAAS,wBACR,SACA,qBACS;CACT,IAAI,KAAK,EAAE;AACX,KAAI,oBAAqB,IAAG,KAAK,yBAAyB;CAE1D,MAAM,mCAAmB,IAAI,KAAa;AAE1C,MAAK,MAAM,CAAC,KAAK,EAAE,MAAM,SAAS,OAAO,OAAO,sBAAsB,QAAQ,SAAS,EAAE;EACxF,MAAM,aAAa,QAAQ,MAAM,GAAG,GAAG;EACvC,MAAM,OAAO,QAAQ,KAAK,MAAM,IAAI,KAAK,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG;EAElE,IAAI;AACJ,OAAK,MAAM,KAAK,YAAY;AAC3B,mBAAgB,gBAAgB,GAAG,cAAc,GAAG,KAAK,UAAU,EAAE,CAAC,KAAK,IAAI,KAAK,UAAU,EAAE,CAAC;AACjG,OAAI,iBAAiB,IAAI,cAAc,CAAE;AACzC,MAAG,KAAK,MAAM,cAAc,QAAQ;AACpC,oBAAiB,IAAI,cAAc;;EAGpC,IAAI;EACJ,IAAI;AACJ,MAAIJ,kBAAG,OAAOC,sBAAO,EAAE;AACtB,aAAU;AACV,gBAAa,gBAAgB,IAAI;aACvBD,kBAAG,OAAOE,oBAAI,EAAE;AAC1B,aAAU,MAAM;AAChB,gBAAa,gBAAgB,IAAI;aACvBF,kBAAG,OAAOG,0BAAS,EAAE;AAC/B,aAAU,MAAM,EAAE,IAAI;AACtB,gBAAa,gBAAgB,IAAI;SAC3B;AACN,aAAU,MAAM,IAAI;AACpB,gBAAa,gBAAgB,IAAI;;AAElC,MAAI,QAAQ,mBAAmB,OAAQ,cAAa;EACpD,MAAM,SAAS,WAAW,IAAI;EAE9B,IAAI,eAAe;AACnB,MAAI,MAAO,gBAAe,gBAAgB,IAAI,UAAU,aAAa,IAAI,gBAAgB;AACzF,MAAI,WAAY,gBAAe,GAAG,WAAW,GAAG,aAAa;AAC7D,KAAG,KACF,OAAO,KAAK,KAAK,OAAO,cAAc,OAAO,KAAK,aAAa,GAC/D;AAED,MAAI,uBAAuBH,kBAAG,OAAOC,sBAAO,IAAI,QAAQ,WAAW,GAAG;GACrE,MAAM,aAAa,KAAK,UAAU,QAAQ,GAAI;AAC9C,MAAG,KACF,SAAS,WAAW,qBACpB,eAAe,WAAW,SAAS,KAAK,6CAA6C,IAAI,0BACzF,gCAAgC,WAAW,+BAA+B,WAAW,uCAAuC,IAAI,oBAChI,eAAe,WAAW,aAC1B,IACA;;;AAIH,KAAI,oBACH,IAAG,KACF,wCACA,wEACA,kFACA,8BACA,OACA,MACA,IACA;AAGF,QAAO,GAAG,KAAK,KAAK;;AASrB,SAAgB,mBACf,SACA,qBACsB;AACtB,QAAO,IAAI,SACV,QACA;;;KAGG,wBAAwB,SAAS,oBAAoB,CAAC;;;;0CAKzD,CAAC,KAAK;EACN;EACA;EACA;EACA,CAAC;;AAGH,SAAgB,uBACf,SACA,qBACsB;CACtB,MAAM,kBAAkB,QAAQ,KAAK,EAAE,OAAO,OAAO,iBAAiB,WAAW;EAChF,IAAI;EACJ,IAAI;AACJ,MAAID,kBAAG,OAAOC,sBAAO,EAAE;AACtB,gBAAa;AAEb,OAAI,uBAAuB,KAAK,WAAW,GAAG;IAC7C,MAAM,aAAa,KAAK;AACxB,yBAAqB,YAAY,UAAU;AAC1C,SAAI,EAAE,cAAc,YACnB,YAAW,cAAc,UAAU,OAAOG,2BAAa,MAAM,MAAM,GAAG;cAEtE,OAAO,WAAW,gBAAgB,YAAY,WAAW,gBAAgBA,2BAAa,MAAM,MAAM,CAElG,YAAW,cAAc;;;aAIlBJ,kBAAG,OAAOE,oBAAI,CACxB,cAAa,MAAM;WACTF,kBAAG,OAAOG,0BAAS,CAC7B,cAAa,MAAM,EAAE,IAAI;MAEzB,cAAa,MAAM,IAAI;EAGxB,IAAI;AACJ,MAAI,WAAW,mBAAmB,OACjC,WAAU,SAAS,MAAW,MAAM,GAAG,gBAAiB,GAAG;MAE3D,WAAU,SACN,MAAW,WAAW,mBAAmB,MAAM,GAAG,gBAAiB,CAAC,IACpE,MAAW,WAAW,mBAAmB,EAAE;AAGhD,SAAO,CAAC,SAAS,kBAAkB;GAClC;AAEF,UAAS,SACR,KAAK,KAAK,QAAQ;EAEjB,MAAM,aAA6C,EAAE;EAErD,MAAM,SAAS,QAAQ,QACrB,QAAQ,EAAE,QAAQ,gBAAgB;GAClC,IAAI,OAAO;AACX,QAAK,MAAM,CAAC,gBAAgB,cAAc,KAAK,SAAS,CACvD,KAAI,iBAAiB,KAAK,SAAS,GAAG;AACrC,QAAI,EAAE,aAAa,MAClB,MAAK,aAAa,EAAE;AAErB,WAAO,KAAK;UACN;IACN,MAAM,CAAC,SAAS,qBAAqB,gBAAgB;IAErD,MAAM,WAAW,IAAI;IACrB,MAAM,QAAQ,KAAK,aAAa,aAAa,OAC1C,OACA,UACA,QAAQ,SAAS,GACjB;AAEH,wBAAoB,YAAY,MAAM;;AAGxC,UAAO;KAER,EAAE,CACF;AAGD,MAAI,uBAAuB,OAAO,KAAK,WAAW,CAAC,SAAS,GAC3D;QAAK,MAAM,CAAC,YAAY,cAAc,OAAO,QAAQ,WAAW,CAC/D,KAAI,OAAO,cAAc,YAAY,CAAC,oBAAoB,WACzD,QAAO,cAAc;;AAKxB,SAAO;GACN;;;AAGJ,SAAgB,oBACf,QACA,YACA,QACiC;AACjC,QAAO,OAAO,QAAQ,OAAO,CAAC,QAA0C,QAAQ,CAAC,MAAM,WAAW;AACjG,MAAI,OAAO,SAAS,SACnB,QAAO;EAGR,MAAM,UAAU,aAAa,CAAC,GAAG,YAAY,KAAK,GAAG,CAAC,KAAK;AAC3D,MAAIH,kBAAG,OAAOC,sBAAO,CACpB,QAAO,KAAK;GACX,MAAM;GACN;GACA,OAAO,QAAQ,IAAI,OAAO,YAAY;GACtC,iBAAwB,MAAO;GAC/B,CAAC;WACQD,kBAAG,OAAOC,sBAAO,IAAID,kBAAG,OAAOE,oBAAI,IAAIF,kBAAG,OAAOE,oBAAI,QAAQ,IAAIF,kBAAG,OAAOG,0BAAS,CAC9F,QAAO,KAAK;GAAE,MAAM;GAAS;GAAO,CAAC;WAC3BH,kBAAG,OAAOK,oBAAM,CAC1B,QAAO,KAAK,GAAG,oBAAoB,MAAMA,oBAAM,OAAO,UAAU,SAAS,OAAO,CAAC;MAEjF,QAAO,KAAK,GAAG,oBAAoB,OAAkC,SAAS,OAAO,CAAC;AAEvF,SAAO;IACL,EAAE,CAAC;;AAGP,SAAgB,aAAa,MAA+B,OAAgC;CAC3F,MAAM,WAAW,OAAO,KAAK,KAAK;CAClC,MAAM,YAAY,OAAO,KAAK,MAAM;AAEpC,KAAI,SAAS,WAAW,UAAU,OACjC,QAAO;AAGR,MAAK,MAAM,CAAC,OAAO,QAAQ,SAAS,SAAS,CAC5C,KAAI,QAAQ,UAAU,OACrB,QAAO;AAIT,QAAO;;;AAIR,SAAgB,aAAa,OAAc,QAA4C;CACtF,MAAM,UAAyC,OAAO,QAAQ,OAAO,CACnE,QAAQ,GAAG,WAAW,UAAU,OAAU,CAC1C,KAAK,CAAC,KAAK,WAAW;AAEtB,MAAIL,kBAAG,OAAOE,oBAAI,IAAIF,kBAAG,OAAOC,sBAAO,CACtC,QAAO,CAAC,KAAK,MAAM;MAEnB,QAAO,CAAC,KAAK,IAAIK,sBAAM,OAAO,MAAMD,oBAAM,OAAO,SAAS,KAAK,CAAC;GAEhE;AAEH,KAAI,QAAQ,WAAW,EACtB,OAAM,IAAI,MAAM,mBAAmB;AAGpC,QAAO,OAAO,YAAY,QAAQ;;;AAkDnC,SAAgB,YAAY,WAAgB,iBAAwB;AACnE,MAAK,MAAM,iBAAiB,gBAC3B,MAAK,MAAM,QAAQ,OAAO,oBAAoB,cAAc,UAAU,EAAE;AACvE,MAAI,SAAS,cAAe;AAE5B,SAAO,eACN,UAAU,WACV,MACA,OAAO,yBAAyB,cAAc,WAAW,KAAK,IAAI,OAAO,OAAO,KAAK,CACrF;;;;;;;AAqBJ,SAAgB,gBAAiC,OAA6B;AAC7E,QAAO,MAAMA,oBAAM,OAAO;;AAG3B,SAAgB,sBAAsC,MAAmC;AACxF,QAAO,KAAKE,oCAAgB;;AAG7B,SAAgB,WACf,OAKD;AACC,QAAQP,kBAAG,OAAOK,oBAAM,GACrB,MAAMA,oBAAM,OAAO,WACnBL,kBAAG,OAAOQ,qBAAK,GACf,MAAMD,oCAAgB,iBACtB,MAAM,EAAE;;;AAIZ,SAAgB,iBAAiB,OAAsC;AACtE,QAAOP,kBAAG,OAAOG,0BAAS,GACvB,MAAM,EAAE,QACRH,kBAAG,OAAOQ,qBAAK,GACf,MAAMD,oCAAgB,OACtBP,kBAAG,OAAOE,oBAAI,GACd,SACA,MAAMG,oBAAM,OAAO,WACnB,MAAMA,oBAAM,OAAO,QACnB,MAAMA,oBAAM,OAAO;;;AAoCvB,SAAgB,uBAEd,GAAiC,GAAwB;AAC1D,QAAO;EACN,MAAM,OAAO,MAAM,YAAY,EAAE,SAAS,IAAI,IAAI;EAClD,QAAQ,OAAO,MAAM,WAAW,IAAI;EACpC;;AAyBF,SAAgB,SAAS,MAAoB;AAC5C,KAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;AAEtD,KAAI,KAAK,YAAY,SAAS,SAAU,QAAO;AAE/C,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MACC,SAAS,cAAc,SAAS,YAAY,OAAO,KAAK,UAAU,gBAAgB,eAC/E,SAAS,YACX,QAAO;AAET,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,eAAe,MAAM;EACxB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,UAAU,MAAM;AACnB,MAAI,KAAK,YAAY,aAAa,KAAK,YAAY,iBAAiB,KAAK,YAAY,OAAW,QAAO;AAEvG,SAAO;;AAGR,KAAI,gBAAgB,MAAM;EACzB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAY,SAAS,YAAa,QAAO;AAE3E,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,cAAc,SAAS,YAAa,QAAO;AAE7E,SAAO;;AAGR,KAAI,kBAAkB,MAAM;EAC3B,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,aAAa,SAAS,YAAa,QAAO;AAEvD,SAAO;;AAGR,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,EAAG,QAAO;AAE3C,QAAO;;AAKR,MAAa,cAAc,OAAO,gBAAgB,cAAc,OAAO,IAAI,aAAa;AAExF,SAAgB,kBAAkB,IAA8B;AAC/D,OAAM,IAAI,MAAM,4BAA4B;;AAK7C,SAAgB,WAAW,OAAyB;AACnD,SAAS,OAAO,UAAU,YAAY,UAAU,QAAS,OAAO,UAAU,eAAe,gBAAgB,SACrG,MAAM,QAAQ,MAAM,WAAW,IAC/B,MAAM,WAAW,SAAS;;AAkC/B,MAAa,YAAY;CACxB,UAAU;CACV,UAAU;CACV,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW,CAAC;CACZ,WAAW;CACX,oBAAoB;CACpB;AAED,SAAgB,mBAAmB,QAA4B;AAC9D,KAAI,CAAC,OAAQ,QAAO,IAAI,WAAW,EAAE;CACrC,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,MAAM,OAAO;CACnB,MAAM,QAAQ,IAAI,WAAW,IAAI;AAEjC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,EAC1B,OAAM,KAAK,OAAO,WAAW,EAAE;AAGhC,QAAO"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["is","Column","SQL","Subquery","getTableName","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 } 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 mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[] | (readonly unknown[]),\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field, codec, arrayDimensions }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: decoder.mapFromDriverValue(codec ? codec(rawValue, arrayDimensions!) : rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): string {\n\tlet fn = [] as string[];\n\tif (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);\n\n\tconst initializedPaths = new Set<string>();\n\n\tfor (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {\n\t\tconst pathPrefix = pathArr.slice(0, -1);\n\t\tconst path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join('');\n\n\t\tlet processedPath;\n\t\tfor (const p of pathPrefix) {\n\t\t\tprocessedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;\n\t\t\tif (initializedPaths.has(processedPath)) continue;\n\t\t\tfn.push(`res${processedPath} = {};`);\n\t\t\tinitializedPaths.add(processedPath);\n\t\t}\n\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tif (is(field, Column)) {\n\t\t\tdecoder = field;\n\t\t\tdecoderStr = `this.columns[${idx}].field.mapFromDriverValue`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;\n\t\t}\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tconst rowStr = `rows[i][${idx}]`;\n\n\t\tlet decodedValue = rowStr;\n\t\tif (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tfn.push(\n\t\t\t`\tres${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t);\n\n\t\tif (joinsNotNullableMap && is(field, Column) && pathArr.length === 2) {\n\t\t\tconst objectName = JSON.stringify(pathArr[0]!);\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? this.getTableName(this.columns[${idx}].field.table) : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== this.getTableName(this.columns[${idx}].field.table)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = false;`,\n\t\t\t\t`}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (joinsNotNullableMap) {\n\t\tfn.push(\n\t\t\t`if(Object.keys(nullifyMap).length) {`,\n\t\t\t`\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {`,\n\t\t\t`\t\tif (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`,\n\t\t\t`\t\t\tres[objectName] = null;`,\n\t\t\t`\t\t}`,\n\t\t\t`\t}`,\n\t\t\t`}`,\n\t\t);\n\t}\n\n\treturn fn.join('\\n');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport type RowsMapper<TResult = Record<string, unknown>[]> = (rows: unknown[][]) => TResult;\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\treturn new Function(\n\t\t'rows',\n\t\t`const mapped = [];\n\t\tfor (let i = 0; i < rows.length; ++i) {\n\t\t\tconst res = {};\n\t\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)} \n\t\t\tmapped[i] = res;\n\t\t}\n\t\treturn mapped;\n\t\t//# sourceURL=drizzle:jit-query-mapper`,\n\t).bind({\n\t\tgetTableName,\n\t\tcolumns,\n\t\tjoinsNotNullableMap,\n\t}) as any;\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {\n\t\tlet processNullifyMap: ((nullifyMap: Record<string, string | false>, value: any) => void) | undefined;\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tif (is(field, Column)) {\n\t\t\tdecoderSrc = field;\n\n\t\t\tif (joinsNotNullableMap && path.length === 2) {\n\t\t\t\tconst objectName = path[0]!;\n\t\t\t\tprocessNullifyMap = (nullifyMap, value) => {\n\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoderSrc = field.decoder;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t} else {\n\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\treturn [decoder, processNullifyMap] as const;\n\t});\n\n\treturn ((rows) =>\n\t\trows.map((row) => {\n\t\t\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\t\t\tconst nullifyMap: Record<string, string | false> = {};\n\n\t\t\tconst result = columns.reduce<Record<string, any>>(\n\t\t\t\t(result, { path }, columnIndex) => {\n\t\t\t\t\tlet node = result;\n\t\t\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [decoder, processNullifyMap] = interpretedData[columnIndex]!;\n\n\t\t\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t\t: rawValue;\n\n\t\t\t\t\t\t\tprocessNullifyMap?.(nullifyMap, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// Nullify all nested objects from nullifyMap that are nullable\n\t\t\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\t\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\t\t\tresult[objectName] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result as TResult;\n\t\t})) as RowsMapper<TResult>;\n}\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\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,\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t});\n\t\t} else if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath, codecs));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath, codecs));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\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: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\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\n/**\n * @deprecated\n * Use `getColumns` instead\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 type Casing = 'snake_case' | 'camelCase';\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\tcasing?: Casing | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tuseJitMappers?: 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\tcasing?: 'snake_case' | 'camelCase' | 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 ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== 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 ('useJitMappers' in data) {\n\t\tconst type = typeof data['useJitMappers'];\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"],"mappings":";;;;;;;;;;AAgBA,SAAgB,aACf,SACA,KACA,qBACU;CAEV,MAAM,aAA6C,EAAE;CAErD,MAAM,SAAS,QAAQ,QACrB,QAAQ,EAAE,MAAM,OAAO,OAAO,mBAAmB,gBAAgB;EACjE,IAAI;AACJ,MAAIA,kBAAG,OAAOC,sBAAO,CACpB,WAAU;WACAD,kBAAG,OAAOE,oBAAI,CACxB,WAAU,MAAM;WACNF,kBAAG,OAAOG,0BAAS,CAC7B,WAAU,MAAM,EAAE,IAAI;MAEtB,WAAU,MAAM,IAAI;EAErB,IAAI,OAAO;AACX,OAAK,MAAM,CAAC,gBAAgB,cAAc,KAAK,SAAS,CACvD,KAAI,iBAAiB,KAAK,SAAS,GAAG;AACrC,OAAI,EAAE,aAAa,MAClB,MAAK,aAAa,EAAE;AAErB,UAAO,KAAK;SACN;GACN,MAAM,WAAW,IAAI;GACrB,MAAM,QAAQ,KAAK,aAAa,aAAa,OAC1C,OACA,QAAQ,mBAAmB,QAAQ,MAAM,UAAU,gBAAiB,GAAG,SAAS;AAEnF,OAAI,uBAAuBH,kBAAG,OAAOC,sBAAO,IAAI,KAAK,WAAW,GAAG;IAClE,MAAM,aAAa,KAAK;AACxB,QAAI,EAAE,cAAc,YACnB,YAAW,cAAc,UAAU,OAAOG,2BAAa,MAAM,MAAM,GAAG;aAEtE,OAAO,WAAW,gBAAgB,YAAY,WAAW,gBAAgBA,2BAAa,MAAM,MAAM,CAElG,YAAW,cAAc;;;AAK7B,SAAO;IAER,EAAE,CACF;AAGD,KAAI,uBAAuB,OAAO,KAAK,WAAW,CAAC,SAAS,GAC3D;OAAK,MAAM,CAAC,YAAY,cAAc,OAAO,QAAQ,WAAW,CAC/D,KAAI,OAAO,cAAc,YAAY,CAAC,oBAAoB,WACzD,QAAO,cAAc;;AAKxB,QAAO;;;AAIR,SAAS,wBACR,SACA,qBACS;CACT,IAAI,KAAK,EAAE;AACX,KAAI,oBAAqB,IAAG,KAAK,yBAAyB;CAE1D,MAAM,mCAAmB,IAAI,KAAa;AAE1C,MAAK,MAAM,CAAC,KAAK,EAAE,MAAM,SAAS,OAAO,OAAO,sBAAsB,QAAQ,SAAS,EAAE;EACxF,MAAM,aAAa,QAAQ,MAAM,GAAG,GAAG;EACvC,MAAM,OAAO,QAAQ,KAAK,MAAM,IAAI,KAAK,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG;EAElE,IAAI;AACJ,OAAK,MAAM,KAAK,YAAY;AAC3B,mBAAgB,gBAAgB,GAAG,cAAc,GAAG,KAAK,UAAU,EAAE,CAAC,KAAK,IAAI,KAAK,UAAU,EAAE,CAAC;AACjG,OAAI,iBAAiB,IAAI,cAAc,CAAE;AACzC,MAAG,KAAK,MAAM,cAAc,QAAQ;AACpC,oBAAiB,IAAI,cAAc;;EAGpC,IAAI;EACJ,IAAI;AACJ,MAAIJ,kBAAG,OAAOC,sBAAO,EAAE;AACtB,aAAU;AACV,gBAAa,gBAAgB,IAAI;aACvBD,kBAAG,OAAOE,oBAAI,EAAE;AAC1B,aAAU,MAAM;AAChB,gBAAa,gBAAgB,IAAI;aACvBF,kBAAG,OAAOG,0BAAS,EAAE;AAC/B,aAAU,MAAM,EAAE,IAAI;AACtB,gBAAa,gBAAgB,IAAI;SAC3B;AACN,aAAU,MAAM,IAAI;AACpB,gBAAa,gBAAgB,IAAI;;AAElC,MAAI,QAAQ,mBAAmB,OAAQ,cAAa;EACpD,MAAM,SAAS,WAAW,IAAI;EAE9B,IAAI,eAAe;AACnB,MAAI,MAAO,gBAAe,gBAAgB,IAAI,UAAU,aAAa,IAAI,gBAAgB;AACzF,MAAI,WAAY,gBAAe,GAAG,WAAW,GAAG,aAAa;AAC7D,KAAG,KACF,OAAO,KAAK,KAAK,OAAO,cAAc,OAAO,KAAK,aAAa,GAC/D;AAED,MAAI,uBAAuBH,kBAAG,OAAOC,sBAAO,IAAI,QAAQ,WAAW,GAAG;GACrE,MAAM,aAAa,KAAK,UAAU,QAAQ,GAAI;AAC9C,MAAG,KACF,SAAS,WAAW,qBACpB,eAAe,WAAW,SAAS,KAAK,6CAA6C,IAAI,0BACzF,gCAAgC,WAAW,+BAA+B,WAAW,uCAAuC,IAAI,oBAChI,eAAe,WAAW,aAC1B,IACA;;;AAIH,KAAI,oBACH,IAAG,KACF,wCACA,wEACA,kFACA,8BACA,OACA,MACA,IACA;AAGF,QAAO,GAAG,KAAK,KAAK;;AASrB,SAAgB,mBACf,SACA,qBACsB;AACtB,QAAO,IAAI,SACV,QACA;;;KAGG,wBAAwB,SAAS,oBAAoB,CAAC;;;;0CAKzD,CAAC,KAAK;EACN;EACA;EACA;EACA,CAAC;;AAGH,SAAgB,uBACf,SACA,qBACsB;CACtB,MAAM,kBAAkB,QAAQ,KAAK,EAAE,OAAO,OAAO,iBAAiB,WAAW;EAChF,IAAI;EACJ,IAAI;AACJ,MAAID,kBAAG,OAAOC,sBAAO,EAAE;AACtB,gBAAa;AAEb,OAAI,uBAAuB,KAAK,WAAW,GAAG;IAC7C,MAAM,aAAa,KAAK;AACxB,yBAAqB,YAAY,UAAU;AAC1C,SAAI,EAAE,cAAc,YACnB,YAAW,cAAc,UAAU,OAAOG,2BAAa,MAAM,MAAM,GAAG;cAEtE,OAAO,WAAW,gBAAgB,YAAY,WAAW,gBAAgBA,2BAAa,MAAM,MAAM,CAElG,YAAW,cAAc;;;aAIlBJ,kBAAG,OAAOE,oBAAI,CACxB,cAAa,MAAM;WACTF,kBAAG,OAAOG,0BAAS,CAC7B,cAAa,MAAM,EAAE,IAAI;MAEzB,cAAa,MAAM,IAAI;EAGxB,IAAI;AACJ,MAAI,WAAW,mBAAmB,OACjC,WAAU,SAAS,MAAW,MAAM,GAAG,gBAAiB,GAAG;MAE3D,WAAU,SACN,MAAW,WAAW,mBAAmB,MAAM,GAAG,gBAAiB,CAAC,IACpE,MAAW,WAAW,mBAAmB,EAAE;AAGhD,SAAO,CAAC,SAAS,kBAAkB;GAClC;AAEF,UAAS,SACR,KAAK,KAAK,QAAQ;EAEjB,MAAM,aAA6C,EAAE;EAErD,MAAM,SAAS,QAAQ,QACrB,QAAQ,EAAE,QAAQ,gBAAgB;GAClC,IAAI,OAAO;AACX,QAAK,MAAM,CAAC,gBAAgB,cAAc,KAAK,SAAS,CACvD,KAAI,iBAAiB,KAAK,SAAS,GAAG;AACrC,QAAI,EAAE,aAAa,MAClB,MAAK,aAAa,EAAE;AAErB,WAAO,KAAK;UACN;IACN,MAAM,CAAC,SAAS,qBAAqB,gBAAgB;IAErD,MAAM,WAAW,IAAI;IACrB,MAAM,QAAQ,KAAK,aAAa,aAAa,OAC1C,OACA,UACA,QAAQ,SAAS,GACjB;AAEH,wBAAoB,YAAY,MAAM;;AAGxC,UAAO;KAER,EAAE,CACF;AAGD,MAAI,uBAAuB,OAAO,KAAK,WAAW,CAAC,SAAS,GAC3D;QAAK,MAAM,CAAC,YAAY,cAAc,OAAO,QAAQ,WAAW,CAC/D,KAAI,OAAO,cAAc,YAAY,CAAC,oBAAoB,WACzD,QAAO,cAAc;;AAKxB,SAAO;GACN;;;AAGJ,SAAgB,oBACf,QACA,YACA,QACiC;AACjC,QAAO,OAAO,QAAQ,OAAO,CAAC,QAA0C,QAAQ,CAAC,MAAM,WAAW;AACjG,MAAI,OAAO,SAAS,SACnB,QAAO;EAGR,MAAM,UAAU,aAAa,CAAC,GAAG,YAAY,KAAK,GAAG,CAAC,KAAK;AAC3D,MAAIH,kBAAG,OAAOC,sBAAO,CACpB,QAAO,KAAK;GACX,MAAM;GACN;GACA,OAAO,QAAQ,IAAI,OAAO,YAAY;GACtC,iBAAwB,MAAO;GAC/B,CAAC;WACQD,kBAAG,OAAOC,sBAAO,IAAID,kBAAG,OAAOE,oBAAI,IAAIF,kBAAG,OAAOE,oBAAI,QAAQ,IAAIF,kBAAG,OAAOG,0BAAS,CAC9F,QAAO,KAAK;GAAE,MAAM;GAAS;GAAO,CAAC;WAC3BH,kBAAG,OAAOK,oBAAM,CAC1B,QAAO,KAAK,GAAG,oBAAoB,MAAMA,oBAAM,OAAO,UAAU,SAAS,OAAO,CAAC;MAEjF,QAAO,KAAK,GAAG,oBAAoB,OAAkC,SAAS,OAAO,CAAC;AAEvF,SAAO;IACL,EAAE,CAAC;;AAGP,SAAgB,aAAa,MAA+B,OAAgC;CAC3F,MAAM,WAAW,OAAO,KAAK,KAAK;CAClC,MAAM,YAAY,OAAO,KAAK,MAAM;AAEpC,KAAI,SAAS,WAAW,UAAU,OACjC,QAAO;AAGR,MAAK,MAAM,CAAC,OAAO,QAAQ,SAAS,SAAS,CAC5C,KAAI,QAAQ,UAAU,OACrB,QAAO;AAIT,QAAO;;;AAIR,SAAgB,aAAa,OAAc,QAA4C;CACtF,MAAM,UAAyC,OAAO,QAAQ,OAAO,CACnE,QAAQ,GAAG,WAAW,UAAU,OAAU,CAC1C,KAAK,CAAC,KAAK,WAAW;AAEtB,MAAIL,kBAAG,OAAOE,oBAAI,IAAIF,kBAAG,OAAOC,sBAAO,CACtC,QAAO,CAAC,KAAK,MAAM;MAEnB,QAAO,CAAC,KAAK,IAAIK,sBAAM,OAAO,MAAMD,oBAAM,OAAO,SAAS,KAAK,CAAC;GAEhE;AAEH,KAAI,QAAQ,WAAW,EACtB,OAAM,IAAI,MAAM,mBAAmB;AAGpC,QAAO,OAAO,YAAY,QAAQ;;;AAkDnC,SAAgB,YAAY,WAAgB,iBAAwB;AACnE,MAAK,MAAM,iBAAiB,gBAC3B,MAAK,MAAM,QAAQ,OAAO,oBAAoB,cAAc,UAAU,EAAE;AACvE,MAAI,SAAS,cAAe;AAE5B,SAAO,eACN,UAAU,WACV,MACA,OAAO,yBAAyB,cAAc,WAAW,KAAK,IAAI,OAAO,OAAO,KAAK,CACrF;;;;;;;AAqBJ,SAAgB,gBAAiC,OAA6B;AAC7E,QAAO,MAAMA,oBAAM,OAAO;;AAG3B,SAAgB,sBAAsC,MAAmC;AACxF,QAAO,KAAKE,oCAAgB;;AAG7B,SAAgB,WACf,OAKD;AACC,QAAQP,kBAAG,OAAOK,oBAAM,GACrB,MAAMA,oBAAM,OAAO,WACnBL,kBAAG,OAAOQ,qBAAK,GACf,MAAMD,oCAAgB,iBACtB,MAAM,EAAE;;;AAIZ,SAAgB,iBAAiB,OAAsC;AACtE,QAAOP,kBAAG,OAAOG,0BAAS,GACvB,MAAM,EAAE,QACRH,kBAAG,OAAOQ,qBAAK,GACf,MAAMD,oCAAgB,OACtBP,kBAAG,OAAOE,oBAAI,GACd,SACA,MAAMG,oBAAM,OAAO,WACnB,MAAMA,oBAAM,OAAO,QACnB,MAAMA,oBAAM,OAAO;;;AAoCvB,SAAgB,uBAEd,GAAiC,GAAwB;AAC1D,QAAO;EACN,MAAM,OAAO,MAAM,YAAY,EAAE,SAAS,IAAI,IAAI;EAClD,QAAQ,OAAO,MAAM,WAAW,IAAI;EACpC;;AAyBF,SAAgB,SAAS,MAAoB;AAC5C,KAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;AAEtD,KAAI,KAAK,YAAY,SAAS,SAAU,QAAO;AAE/C,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MACC,SAAS,cAAc,SAAS,YAAY,OAAO,KAAK,UAAU,gBAAgB,eAC/E,SAAS,YACX,QAAO;AAET,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,eAAe,MAAM;EACxB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,UAAU,MAAM;AACnB,MAAI,KAAK,YAAY,aAAa,KAAK,YAAY,iBAAiB,KAAK,YAAY,OAAW,QAAO;AAEvG,SAAO;;AAGR,KAAI,gBAAgB,MAAM;EACzB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAY,SAAS,YAAa,QAAO;AAE3E,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,cAAc,SAAS,YAAa,QAAO;AAE7E,SAAO;;AAGR,KAAI,mBAAmB,MAAM;EAC5B,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,aAAa,SAAS,YAAa,QAAO;AAEvD,SAAO;;AAGR,KAAI,YAAY,MAAM;EACrB,MAAM,OAAO,OAAO,KAAK;AACzB,MAAI,SAAS,YAAY,SAAS,YAAa,QAAO;AAEtD,SAAO;;AAGR,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,EAAG,QAAO;AAE3C,QAAO;;AAKR,MAAa,cAAc,OAAO,gBAAgB,cAAc,OAAO,IAAI,aAAa;AAExF,SAAgB,kBAAkB,IAA8B;AAC/D,OAAM,IAAI,MAAM,4BAA4B;;AAK7C,SAAgB,WAAW,OAAyB;AACnD,SAAS,OAAO,UAAU,YAAY,UAAU,QAAS,OAAO,UAAU,eAAe,gBAAgB,SACrG,MAAM,QAAQ,MAAM,WAAW,IAC/B,MAAM,WAAW,SAAS;;AAkC/B,MAAa,YAAY;CACxB,UAAU;CACV,UAAU;CACV,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW;CACX,WAAW;CACX,oBAAoB;CACpB,WAAW,CAAC;CACZ,WAAW;CACX,oBAAoB;CACpB;AAED,SAAgB,mBAAmB,QAA4B;AAC9D,KAAI,CAAC,OAAQ,QAAO,IAAI,WAAW,EAAE;CACrC,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,MAAM,OAAO;CACnB,MAAM,QAAQ,IAAI,WAAW,IAAI;AAEjC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,EAC1B,OAAM,KAAK,OAAO,WAAW,EAAE;AAGhC,QAAO"}
|
package/utils.js
CHANGED
|
@@ -239,11 +239,16 @@ function isConfig(data) {
|
|
|
239
239
|
if (type !== "object" && type !== "function" && type !== "undefined") return false;
|
|
240
240
|
return true;
|
|
241
241
|
}
|
|
242
|
-
if ("
|
|
243
|
-
const type = typeof data["
|
|
242
|
+
if ("useJitMappers" in data) {
|
|
243
|
+
const type = typeof data["useJitMappers"];
|
|
244
244
|
if (type !== "boolean" && type !== "undefined") return false;
|
|
245
245
|
return true;
|
|
246
246
|
}
|
|
247
|
+
if ("codecs" in data) {
|
|
248
|
+
const type = typeof data["connection"];
|
|
249
|
+
if (type !== "object" && type !== "undefined") return false;
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
247
252
|
if (Object.keys(data).length === 0) return true;
|
|
248
253
|
return false;
|
|
249
254
|
}
|
package/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"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 } 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 mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[] | (readonly unknown[]),\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field, codec, arrayDimensions }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: decoder.mapFromDriverValue(codec ? codec(rawValue, arrayDimensions!) : rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): string {\n\tlet fn = [] as string[];\n\tif (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);\n\n\tconst initializedPaths = new Set<string>();\n\n\tfor (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {\n\t\tconst pathPrefix = pathArr.slice(0, -1);\n\t\tconst path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join('');\n\n\t\tlet processedPath;\n\t\tfor (const p of pathPrefix) {\n\t\t\tprocessedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;\n\t\t\tif (initializedPaths.has(processedPath)) continue;\n\t\t\tfn.push(`res${processedPath} = {};`);\n\t\t\tinitializedPaths.add(processedPath);\n\t\t}\n\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tif (is(field, Column)) {\n\t\t\tdecoder = field;\n\t\t\tdecoderStr = `this.columns[${idx}].field.mapFromDriverValue`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;\n\t\t}\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tconst rowStr = `rows[i][${idx}]`;\n\n\t\tlet decodedValue = rowStr;\n\t\tif (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tfn.push(\n\t\t\t`\tres${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t);\n\n\t\tif (joinsNotNullableMap && is(field, Column) && pathArr.length === 2) {\n\t\t\tconst objectName = JSON.stringify(pathArr[0]!);\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? this.getTableName(this.columns[${idx}].field.table) : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== this.getTableName(this.columns[${idx}].field.table)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = false;`,\n\t\t\t\t`}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (joinsNotNullableMap) {\n\t\tfn.push(\n\t\t\t`if(Object.keys(nullifyMap).length) {`,\n\t\t\t`\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {`,\n\t\t\t`\t\tif (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`,\n\t\t\t`\t\t\tres[objectName] = null;`,\n\t\t\t`\t\t}`,\n\t\t\t`\t}`,\n\t\t\t`}`,\n\t\t);\n\t}\n\n\treturn fn.join('\\n');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport type RowsMapper<TResult = Record<string, unknown>[]> = (rows: unknown[][]) => TResult;\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\treturn new Function(\n\t\t'rows',\n\t\t`const mapped = [];\n\t\tfor (let i = 0; i < rows.length; ++i) {\n\t\t\tconst res = {};\n\t\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)} \n\t\t\tmapped[i] = res;\n\t\t}\n\t\treturn mapped;\n\t\t//# sourceURL=drizzle:jit-query-mapper`,\n\t).bind({\n\t\tgetTableName,\n\t\tcolumns,\n\t\tjoinsNotNullableMap,\n\t}) as any;\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {\n\t\tlet processNullifyMap: ((nullifyMap: Record<string, string | false>, value: any) => void) | undefined;\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tif (is(field, Column)) {\n\t\t\tdecoderSrc = field;\n\n\t\t\tif (joinsNotNullableMap && path.length === 2) {\n\t\t\t\tconst objectName = path[0]!;\n\t\t\t\tprocessNullifyMap = (nullifyMap, value) => {\n\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoderSrc = field.decoder;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t} else {\n\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\treturn [decoder, processNullifyMap] as const;\n\t});\n\n\treturn ((rows) =>\n\t\trows.map((row) => {\n\t\t\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\t\t\tconst nullifyMap: Record<string, string | false> = {};\n\n\t\t\tconst result = columns.reduce<Record<string, any>>(\n\t\t\t\t(result, { path }, columnIndex) => {\n\t\t\t\t\tlet node = result;\n\t\t\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [decoder, processNullifyMap] = interpretedData[columnIndex]!;\n\n\t\t\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t\t: rawValue;\n\n\t\t\t\t\t\t\tprocessNullifyMap?.(nullifyMap, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// Nullify all nested objects from nullifyMap that are nullable\n\t\t\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\t\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\t\t\tresult[objectName] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result as TResult;\n\t\t})) as RowsMapper<TResult>;\n}\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\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,\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t});\n\t\t} else if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath, codecs));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath, codecs));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\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: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\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\n/**\n * @deprecated\n * Use `getColumns` instead\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 type Casing = 'snake_case' | 'camelCase';\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\tcasing?: Casing | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tuseJitMappers?: 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\tcasing?: 'snake_case' | 'camelCase' | 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 ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== 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 ('useJitMapper' in data) {\n\t\tconst type = typeof data['useJitMapper'];\n\t\tif (type !== 'boolean' && 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"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 } 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 mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[] | (readonly unknown[]),\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field, codec, arrayDimensions }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: decoder.mapFromDriverValue(codec ? codec(rawValue, arrayDimensions!) : rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): string {\n\tlet fn = [] as string[];\n\tif (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);\n\n\tconst initializedPaths = new Set<string>();\n\n\tfor (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {\n\t\tconst pathPrefix = pathArr.slice(0, -1);\n\t\tconst path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join('');\n\n\t\tlet processedPath;\n\t\tfor (const p of pathPrefix) {\n\t\t\tprocessedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;\n\t\t\tif (initializedPaths.has(processedPath)) continue;\n\t\t\tfn.push(`res${processedPath} = {};`);\n\t\t\tinitializedPaths.add(processedPath);\n\t\t}\n\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tif (is(field, Column)) {\n\t\t\tdecoder = field;\n\t\t\tdecoderStr = `this.columns[${idx}].field.mapFromDriverValue`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;\n\t\t}\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tconst rowStr = `rows[i][${idx}]`;\n\n\t\tlet decodedValue = rowStr;\n\t\tif (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tfn.push(\n\t\t\t`\tres${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t);\n\n\t\tif (joinsNotNullableMap && is(field, Column) && pathArr.length === 2) {\n\t\t\tconst objectName = JSON.stringify(pathArr[0]!);\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? this.getTableName(this.columns[${idx}].field.table) : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== this.getTableName(this.columns[${idx}].field.table)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = false;`,\n\t\t\t\t`}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (joinsNotNullableMap) {\n\t\tfn.push(\n\t\t\t`if(Object.keys(nullifyMap).length) {`,\n\t\t\t`\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {`,\n\t\t\t`\t\tif (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`,\n\t\t\t`\t\t\tres[objectName] = null;`,\n\t\t\t`\t\t}`,\n\t\t\t`\t}`,\n\t\t\t`}`,\n\t\t);\n\t}\n\n\treturn fn.join('\\n');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport type RowsMapper<TResult = Record<string, unknown>[]> = (rows: unknown[][]) => TResult;\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\treturn new Function(\n\t\t'rows',\n\t\t`const mapped = [];\n\t\tfor (let i = 0; i < rows.length; ++i) {\n\t\t\tconst res = {};\n\t\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)} \n\t\t\tmapped[i] = res;\n\t\t}\n\t\treturn mapped;\n\t\t//# sourceURL=drizzle:jit-query-mapper`,\n\t).bind({\n\t\tgetTableName,\n\t\tcolumns,\n\t\tjoinsNotNullableMap,\n\t}) as any;\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {\n\t\tlet processNullifyMap: ((nullifyMap: Record<string, string | false>, value: any) => void) | undefined;\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tif (is(field, Column)) {\n\t\t\tdecoderSrc = field;\n\n\t\t\tif (joinsNotNullableMap && path.length === 2) {\n\t\t\t\tconst objectName = path[0]!;\n\t\t\t\tprocessNullifyMap = (nullifyMap, value) => {\n\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoderSrc = field.decoder;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t} else {\n\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\treturn [decoder, processNullifyMap] as const;\n\t});\n\n\treturn ((rows) =>\n\t\trows.map((row) => {\n\t\t\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\t\t\tconst nullifyMap: Record<string, string | false> = {};\n\n\t\t\tconst result = columns.reduce<Record<string, any>>(\n\t\t\t\t(result, { path }, columnIndex) => {\n\t\t\t\t\tlet node = result;\n\t\t\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [decoder, processNullifyMap] = interpretedData[columnIndex]!;\n\n\t\t\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t\t: rawValue;\n\n\t\t\t\t\t\t\tprocessNullifyMap?.(nullifyMap, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// Nullify all nested objects from nullifyMap that are nullable\n\t\t\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\t\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\t\t\tresult[objectName] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result as TResult;\n\t\t})) as RowsMapper<TResult>;\n}\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\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,\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t});\n\t\t} else if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath, codecs));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath, codecs));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\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: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\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\n/**\n * @deprecated\n * Use `getColumns` instead\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 type Casing = 'snake_case' | 'camelCase';\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\tcasing?: Casing | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tuseJitMappers?: 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\tcasing?: 'snake_case' | 'camelCase' | 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 ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== 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 ('useJitMappers' in data) {\n\t\tconst type = typeof data['useJitMappers'];\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"],"mappings":"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"}
|