drizzle-orm 1.0.0-beta.22-3f96465 → 1.0.0-beta.22-8d8ecb7

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.
@@ -4,7 +4,7 @@ import { Field, TypeHint } from "@aws-sdk/client-rds-data";
4
4
 
5
5
  //#region src/aws-data-api/common/index.d.ts
6
6
  declare const typeHint: { [K in TypeHint]: K };
7
- declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array<ArrayBufferLike> | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
7
+ declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array<ArrayBufferLike> | number[] | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
8
8
  declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
9
9
  declare function toValueParam(value: any, typings?: QueryTypingsValue): {
10
10
  value: Field;
@@ -4,7 +4,7 @@ import { Field, TypeHint } from "@aws-sdk/client-rds-data";
4
4
 
5
5
  //#region src/aws-data-api/common/index.d.ts
6
6
  declare const typeHint: { [K in TypeHint]: K };
7
- declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array<ArrayBufferLike> | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
7
+ declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array<ArrayBufferLike> | number[] | boolean[] | _aws_sdk_client_rds_data0.ArrayValue[] | null;
8
8
  declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
9
9
  declare function toValueParam(value: any, typings?: QueryTypingsValue): {
10
10
  value: Field;
@@ -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: () => "all" | "explicit";
11
+ strategy: () => "explicit" | "all";
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: () => "all" | "explicit";
11
+ strategy: () => "explicit" | "all";
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(): "all" | "explicit";
47
+ strategy(): "explicit" | "all";
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>;
@@ -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(): "all" | "explicit";
47
+ strategy(): "explicit" | "all";
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>;
@@ -6,7 +6,7 @@ import * as effect_Effect0 from "effect/Effect";
6
6
  import * as _effect_sql_SqlError0 from "@effect/sql/SqlError";
7
7
 
8
8
  //#region src/effect-postgres/migrator.d.ts
9
- declare function migrate<TRelations extends AnyRelations>(db: EffectPgDatabase<TRelations>, config: MigrationConfig): effect_Effect0.Effect<undefined, EffectDrizzleQueryError | MigratorInitError | _effect_sql_SqlError0.SqlError, never>;
9
+ declare function migrate<TRelations extends AnyRelations>(db: EffectPgDatabase<TRelations>, config: MigrationConfig): effect_Effect0.Effect<undefined, EffectDrizzleQueryError | _effect_sql_SqlError0.SqlError | MigratorInitError, never>;
10
10
  //#endregion
11
11
  export { migrate };
12
12
  //# sourceMappingURL=migrator.d.cts.map
@@ -6,7 +6,7 @@ import { AnyRelations } from "../relations.js";
6
6
  import * as _effect_sql_SqlError0 from "@effect/sql/SqlError";
7
7
 
8
8
  //#region src/effect-postgres/migrator.d.ts
9
- declare function migrate<TRelations extends AnyRelations>(db: EffectPgDatabase<TRelations>, config: MigrationConfig): effect_Effect0.Effect<undefined, EffectDrizzleQueryError | MigratorInitError | _effect_sql_SqlError0.SqlError, never>;
9
+ declare function migrate<TRelations extends AnyRelations>(db: EffectPgDatabase<TRelations>, config: MigrationConfig): effect_Effect0.Effect<undefined, EffectDrizzleQueryError | _effect_sql_SqlError0.SqlError | MigratorInitError, never>;
10
10
  //#endregion
11
11
  export { migrate };
12
12
  //# sourceMappingURL=migrator.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "1.0.0-beta.22-3f96465",
3
+ "version": "1.0.0-beta.22-8d8ecb7",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -52,7 +52,7 @@ declare abstract class PgEffectTransaction<TEffectHKT extends QueryEffectHKTBase
52
52
  rollback(): EffectTransactionRollbackError;
53
53
  setTransaction(config: PgTransactionConfig): QueryEffectKind<TEffectHKT, void[]>;
54
54
  }
55
- declare const migrate: <TEffectHKT extends QueryEffectHKTBase>(migrations: MigrationMeta[], session: PgEffectSession<TEffectHKT, PgQueryResultHKT, EmptyRelations>, config: string | MigrationConfig) => Effect.Effect<undefined, MigratorInitError | TEffectHKT["error"] | SqlError, TEffectHKT["context"]>;
55
+ declare const migrate: <TEffectHKT extends QueryEffectHKTBase>(migrations: MigrationMeta[], session: PgEffectSession<TEffectHKT, PgQueryResultHKT, EmptyRelations>, config: string | MigrationConfig) => Effect.Effect<undefined, SqlError | MigratorInitError | TEffectHKT["error"], TEffectHKT["context"]>;
56
56
  //#endregion
57
57
  export { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction, migrate };
58
58
  //# sourceMappingURL=session.d.cts.map
@@ -52,7 +52,7 @@ declare abstract class PgEffectTransaction<TEffectHKT extends QueryEffectHKTBase
52
52
  rollback(): EffectTransactionRollbackError;
53
53
  setTransaction(config: PgTransactionConfig): QueryEffectKind<TEffectHKT, void[]>;
54
54
  }
55
- declare const migrate: <TEffectHKT extends QueryEffectHKTBase>(migrations: MigrationMeta[], session: PgEffectSession<TEffectHKT, PgQueryResultHKT, EmptyRelations>, config: string | MigrationConfig) => Effect.Effect<undefined, MigratorInitError | TEffectHKT["error"] | SqlError, TEffectHKT["context"]>;
55
+ declare const migrate: <TEffectHKT extends QueryEffectHKTBase>(migrations: MigrationMeta[], session: PgEffectSession<TEffectHKT, PgQueryResultHKT, EmptyRelations>, config: string | MigrationConfig) => Effect.Effect<undefined, SqlError | MigratorInitError | TEffectHKT["error"], TEffectHKT["context"]>;
56
56
  //#endregion
57
57
  export { PgEffectPreparedQuery, PgEffectSession, PgEffectTransaction, migrate };
58
58
  //# sourceMappingURL=session.d.ts.map
package/utils.cjs CHANGED
@@ -39,64 +39,77 @@ function mapResultRow(columns, row, joinsNotNullableMap) {
39
39
  /** @internal bypass bundle-time filtering */
40
40
  const FnConstructor = Object.getPrototypeOf(() => null).constructor;
41
41
  /** @internal */
42
- function makeJitQueryMapperInner(columns, joinsNotNullableMap) {
43
- let fn = [];
44
- if (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);
45
- const initializedPaths = /* @__PURE__ */ new Set();
46
- for (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {
47
- const pathPrefix = pathArr.slice(0, -1);
48
- const path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join("");
49
- let processedPath;
50
- for (const p of pathPrefix) {
51
- processedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;
52
- if (initializedPaths.has(processedPath)) continue;
53
- fn.push(`res${processedPath} = {};`);
54
- initializedPaths.add(processedPath);
55
- }
42
+ function makeJitQueryMapperInner(columns, joinsNotNullableMap = {}) {
43
+ const preFn = [];
44
+ const fn = [];
45
+ fn.push(`const [ ${columns.map((_, i) => `c${i}`).join(", ")} ] = rows[i];`);
46
+ const nullifyMap = {};
47
+ const objectIds = {};
48
+ const decodes = Array.from({ length: columns.length });
49
+ for (let idx = 0; idx < columns.length; ++idx) {
50
+ const { field, path, codec, arrayDimensions } = columns[idx];
56
51
  let decoder;
57
52
  let decoderStr;
53
+ let decoderFieldDestructure;
54
+ let isColumn = false;
58
55
  if (require_entity.is(field, require_column.Column)) {
56
+ isColumn = true;
59
57
  decoder = field;
60
- decoderStr = `this.columns[${idx}].field.mapFromDriverValue`;
58
+ decoderFieldDestructure = `field: decoder${idx}`;
61
59
  } else if (require_entity.is(field, require_sql_sql.SQL)) {
62
60
  decoder = field.decoder;
63
- decoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;
61
+ decoderFieldDestructure = `field: { decoder: decoder${idx} }`;
64
62
  } else if (require_entity.is(field, require_subquery.Subquery)) {
65
63
  decoder = field._.sql.decoder;
66
- decoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;
64
+ decoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;
67
65
  } else {
68
66
  decoder = field.sql.decoder;
69
- decoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;
67
+ decoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;
70
68
  }
69
+ decoderStr = `decoder${idx}.mapFromDriverValue`;
71
70
  if (decoder.mapFromDriverValue.isNoop) decoderStr = "";
72
- const rowStr = `rows[i][${idx}]`;
73
- let decodedValue = rowStr;
74
- if (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;
71
+ if (decoderStr) preFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ""} } = columns[${idx}];`);
72
+ else if (codec) preFn.push(`const { codec: codec${idx} } = columns[${idx}];`);
73
+ const colStr = `c${idx}`;
74
+ let decodedValue = colStr;
75
+ if (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;
75
76
  if (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;
76
- if (rowStr === decodedValue) fn.push(`res${path} = ${rowStr};`);
77
- else fn.push(`res${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`);
78
- if (joinsNotNullableMap && require_entity.is(field, require_column.Column) && pathArr.length === 2) {
79
- const objectName = JSON.stringify(pathArr[0]);
80
- const tableName = JSON.stringify(require_table.getTableName(field.table));
81
- fn.push(`if (!(${objectName} in nullifyMap)) {`, ` nullifyMap[${objectName}] = res${path} === null ? ${tableName} : false;`, `} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== ${tableName}) {`, ` nullifyMap[${objectName}] = false;`, `}`);
82
- }
77
+ decodes[idx] = colStr === decodedValue ? `${colStr}` : `${colStr} === null ? ${colStr} : ${decodedValue}`;
78
+ if (path.length !== 2 || !isColumn) continue;
79
+ if (objectIds[path[0]] === void 0) objectIds[path[0]] = [`c${idx}`];
80
+ else objectIds[path[0]]?.push(`c${idx}`);
81
+ const [objectName] = path;
82
+ const tableName = require_table.getTableName(field.table);
83
+ nullifyMap[objectName] = joinsNotNullableMap[tableName] ? false : typeof nullifyMap[objectName] === "string" ? nullifyMap[objectName] === tableName ? tableName : false : tableName;
83
84
  }
84
- if (joinsNotNullableMap) fn.push(`if(Object.keys(nullifyMap).length) {`, ` for (const [objectName, tableName] of Object.entries(nullifyMap)) {`, ` if (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`, ` res[objectName] = null;`, ` }`, ` }`, `}`);
85
- return fn.join("\n ");
85
+ fn.push(`mapped[i] = {`);
86
+ let currentObjectPath = [];
87
+ for (let idx = 0; idx < columns.length; ++idx) {
88
+ const { path } = columns[idx];
89
+ const jsonPath = path.map((e) => JSON.stringify(e));
90
+ const decodedValue = decodes[idx];
91
+ const objectPath = path.slice(0, -1);
92
+ let commonLen = 0;
93
+ while (commonLen < currentObjectPath.length && commonLen < objectPath.length && currentObjectPath[commonLen] === objectPath[commonLen]) commonLen++;
94
+ for (let d = currentObjectPath.length - 1; d >= commonLen; --d) fn.push(`${" ".repeat(d + 1)}},`);
95
+ for (let d = commonLen; d < objectPath.length; ++d) fn.push(`${" ".repeat(d + 1)}${jsonPath[d]}: ${d === 0 && objectPath.length === 1 && typeof nullifyMap[path[0]] === "string" ? `${objectIds[path[0]]?.map((c) => `${c} === null`).join(" && ")} ? null : {` : "{"}`);
96
+ currentObjectPath = objectPath;
97
+ fn.push(`${" ".repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);
98
+ }
99
+ for (let d = currentObjectPath.length - 1; d >= 0; --d) fn.push(`${" ".repeat(d + 1)}},`);
100
+ fn.push(`};`);
101
+ return `${preFn.length ? `${preFn.join("\n ")}\n\t` : ""}for (let i = 0; i < length; ++i) {
102
+ ${fn.join("\n ")}
103
+ }`;
86
104
  }
87
105
  function makeJitQueryMapper(columns, joinsNotNullableMap) {
88
- const internals = `\tconst mapped = [];
89
- for (let i = 0; i < rows.length; ++i) {
90
- const res = {};
91
- ${makeJitQueryMapperInner(columns, joinsNotNullableMap)}
92
- mapped[i] = res;
93
- }
106
+ const internals = `\tconst { columns } = this;
107
+ const { length } = rows;
108
+ const mapped = Array.from({ length });
109
+ ${makeJitQueryMapperInner(columns, joinsNotNullableMap)}
94
110
  return mapped;
95
111
  //# sourceURL=drizzle:jit-query-mapper`;
96
- return Object.assign(new FnConstructor("rows", internals).bind({
97
- columns,
98
- joinsNotNullableMap
99
- }), { body: `function jitQueryMapper (rows) {\n${internals}\n}` });
112
+ return Object.assign(new FnConstructor("rows", internals).bind({ columns }), { body: `function jitQueryMapper (rows) {\n${internals}\n}` });
100
113
  }
101
114
  function makeDefaultQueryMapper(columns, joinsNotNullableMap) {
102
115
  const interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {
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 bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\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\tif (rowStr === decodedValue) {\n\t\t\tfn.push(`res${path} = ${rowStr};`);\n\t\t} else {\n\t\t\tfn.push(\n\t\t\t\t`res${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t\t);\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\tconst tableName = JSON.stringify(getTableName(field.table));\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? ${tableName} : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== ${tableName}) {`,\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\\t\\t');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\tconst mapped = [];\n\tfor (let i = 0; i < rows.length; ++i) {\n\t\tconst res = {};\n\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)}\n\t\tmapped[i] = res;\n\t}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t\tjoinsNotNullableMap,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\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 interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\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};\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 ('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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"}
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 bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> = {},\n): string {\n\tconst preFn = [] as string[];\n\tconst fn = [] as string[];\n\tfn.push(`const [ ${columns.map((_, i) => `c${i}`).join(', ')} ] = rows[i];`);\n\n\tconst nullifyMap: Record<string, string | false> = {};\n\tconst objectIds: Record<string, string[]> = {};\n\tconst decodes = Array.from<string>({ length: columns.length });\n\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { field, path, codec, arrayDimensions } = columns[idx]!;\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tlet decoderFieldDestructure: string;\n\t\tlet isColumn = false;\n\t\tif (is(field, Column)) {\n\t\t\tisColumn = true;\n\t\t\tdecoder = field;\n\t\t\tdecoderFieldDestructure = `field: decoder${idx}`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderFieldDestructure = `field: { decoder: decoder${idx} }`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;\n\t\t}\n\t\tdecoderStr = `decoder${idx}.mapFromDriverValue`;\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tif (decoderStr) {\n\t\t\tpreFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ''} } = columns[${idx}];`);\n\t\t} else if (codec) {\n\t\t\tpreFn.push(`const { codec: codec${idx} } = columns[${idx}];`);\n\t\t}\n\n\t\tconst colStr = `c${idx}`;\n\t\tlet decodedValue = colStr;\n\t\tif (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tdecodes[idx] = colStr === decodedValue\n\t\t\t? `${colStr}`\n\t\t\t: `${colStr} === null ? ${colStr} : ${decodedValue}`;\n\n\t\tif (path.length !== 2 || !isColumn) continue;\n\t\tif (objectIds[path[0]!] === undefined) objectIds[path[0]!] = [`c${idx}`];\n\t\telse objectIds[path[0]!]?.push(`c${idx}`);\n\t\tconst [objectName] = path as [string];\n\t\tconst tableName = getTableName((<Column> field).table);\n\t\tnullifyMap[objectName] = joinsNotNullableMap[tableName] ? false : typeof nullifyMap[objectName] === 'string'\n\t\t\t? nullifyMap[objectName] === tableName ? tableName : false\n\t\t\t: tableName;\n\t}\n\n\tfn.push(`mapped[i] = {`);\n\tlet currentObjectPath: string[] = [];\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { path } = columns[idx]!;\n\t\tconst jsonPath = path.map((e) => JSON.stringify(e));\n\t\tconst decodedValue = decodes[idx]!;\n\n\t\tconst objectPath = path.slice(0, -1);\n\t\tlet commonLen = 0;\n\t\twhile (\n\t\t\tcommonLen < currentObjectPath.length\n\t\t\t&& commonLen < objectPath.length\n\t\t\t&& currentObjectPath[commonLen] === objectPath[commonLen]\n\t\t) commonLen++;\n\n\t\tfor (let d = currentObjectPath.length - 1; d >= commonLen; --d) {\n\t\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t\t}\n\n\t\tfor (let d = commonLen; d < objectPath.length; ++d) {\n\t\t\tfn.push(\n\t\t\t\t`${'\\t'.repeat(d + 1)}${jsonPath[d]}: ${\n\t\t\t\t\td === 0 && objectPath.length === 1 && typeof nullifyMap[path[0]!] === 'string'\n\t\t\t\t\t\t? `${objectIds[path[0]!]?.map((c) => `${c} === null`).join(' && ')} ? null : {`\n\t\t\t\t\t\t: '{'\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tcurrentObjectPath = objectPath;\n\t\tfn.push(`${'\\t'.repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);\n\t}\n\n\tfor (let d = currentObjectPath.length - 1; d >= 0; --d) {\n\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t}\n\tfn.push(`};`);\n\n\treturn `${preFn.length ? `${preFn.join('\\n\\t')}\\n\\t` : ''}for (let i = 0; i < length; ++i) {\n\t\t${fn.join('\\n\\t\\t')}\n\t}`;\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\tconst { columns } = this;\n\tconst { length } = rows;\n\tconst mapped = Array.from({ length });\n\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\n}\n\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 interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\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};\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 ('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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"}
package/utils.js CHANGED
@@ -38,64 +38,77 @@ function mapResultRow(columns, row, joinsNotNullableMap) {
38
38
  /** @internal bypass bundle-time filtering */
39
39
  const FnConstructor = Object.getPrototypeOf(() => null).constructor;
40
40
  /** @internal */
41
- function makeJitQueryMapperInner(columns, joinsNotNullableMap) {
42
- let fn = [];
43
- if (joinsNotNullableMap) fn.push(`const nullifyMap = {};`);
44
- const initializedPaths = /* @__PURE__ */ new Set();
45
- for (const [idx, { path: pathArr, field, codec, arrayDimensions }] of columns.entries()) {
46
- const pathPrefix = pathArr.slice(0, -1);
47
- const path = pathArr.map((e) => `[${JSON.stringify(e)}]`).join("");
48
- let processedPath;
49
- for (const p of pathPrefix) {
50
- processedPath = processedPath ? `${processedPath}[${JSON.stringify(p)}]` : `[${JSON.stringify(p)}]`;
51
- if (initializedPaths.has(processedPath)) continue;
52
- fn.push(`res${processedPath} = {};`);
53
- initializedPaths.add(processedPath);
54
- }
41
+ function makeJitQueryMapperInner(columns, joinsNotNullableMap = {}) {
42
+ const preFn = [];
43
+ const fn = [];
44
+ fn.push(`const [ ${columns.map((_, i) => `c${i}`).join(", ")} ] = rows[i];`);
45
+ const nullifyMap = {};
46
+ const objectIds = {};
47
+ const decodes = Array.from({ length: columns.length });
48
+ for (let idx = 0; idx < columns.length; ++idx) {
49
+ const { field, path, codec, arrayDimensions } = columns[idx];
55
50
  let decoder;
56
51
  let decoderStr;
52
+ let decoderFieldDestructure;
53
+ let isColumn = false;
57
54
  if (is(field, Column)) {
55
+ isColumn = true;
58
56
  decoder = field;
59
- decoderStr = `this.columns[${idx}].field.mapFromDriverValue`;
57
+ decoderFieldDestructure = `field: decoder${idx}`;
60
58
  } else if (is(field, SQL)) {
61
59
  decoder = field.decoder;
62
- decoderStr = `this.columns[${idx}].field.decoder.mapFromDriverValue`;
60
+ decoderFieldDestructure = `field: { decoder: decoder${idx} }`;
63
61
  } else if (is(field, Subquery)) {
64
62
  decoder = field._.sql.decoder;
65
- decoderStr = `this.columns[${idx}].field._.sql.decoder.mapFromDriverValue`;
63
+ decoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;
66
64
  } else {
67
65
  decoder = field.sql.decoder;
68
- decoderStr = `this.columns[${idx}].field.sql.decoder.mapFromDriverValue`;
66
+ decoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;
69
67
  }
68
+ decoderStr = `decoder${idx}.mapFromDriverValue`;
70
69
  if (decoder.mapFromDriverValue.isNoop) decoderStr = "";
71
- const rowStr = `rows[i][${idx}]`;
72
- let decodedValue = rowStr;
73
- if (codec) decodedValue = `this.columns[${idx}].codec(${decodedValue}, ${arrayDimensions})`;
70
+ if (decoderStr) preFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ""} } = columns[${idx}];`);
71
+ else if (codec) preFn.push(`const { codec: codec${idx} } = columns[${idx}];`);
72
+ const colStr = `c${idx}`;
73
+ let decodedValue = colStr;
74
+ if (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;
74
75
  if (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;
75
- if (rowStr === decodedValue) fn.push(`res${path} = ${rowStr};`);
76
- else fn.push(`res${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`);
77
- if (joinsNotNullableMap && is(field, Column) && pathArr.length === 2) {
78
- const objectName = JSON.stringify(pathArr[0]);
79
- const tableName = JSON.stringify(getTableName(field.table));
80
- fn.push(`if (!(${objectName} in nullifyMap)) {`, ` nullifyMap[${objectName}] = res${path} === null ? ${tableName} : false;`, `} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== ${tableName}) {`, ` nullifyMap[${objectName}] = false;`, `}`);
81
- }
76
+ decodes[idx] = colStr === decodedValue ? `${colStr}` : `${colStr} === null ? ${colStr} : ${decodedValue}`;
77
+ if (path.length !== 2 || !isColumn) continue;
78
+ if (objectIds[path[0]] === void 0) objectIds[path[0]] = [`c${idx}`];
79
+ else objectIds[path[0]]?.push(`c${idx}`);
80
+ const [objectName] = path;
81
+ const tableName = getTableName(field.table);
82
+ nullifyMap[objectName] = joinsNotNullableMap[tableName] ? false : typeof nullifyMap[objectName] === "string" ? nullifyMap[objectName] === tableName ? tableName : false : tableName;
82
83
  }
83
- if (joinsNotNullableMap) fn.push(`if(Object.keys(nullifyMap).length) {`, ` for (const [objectName, tableName] of Object.entries(nullifyMap)) {`, ` if (typeof tableName === 'string' && !this.joinsNotNullableMap[tableName]) {`, ` res[objectName] = null;`, ` }`, ` }`, `}`);
84
- return fn.join("\n ");
84
+ fn.push(`mapped[i] = {`);
85
+ let currentObjectPath = [];
86
+ for (let idx = 0; idx < columns.length; ++idx) {
87
+ const { path } = columns[idx];
88
+ const jsonPath = path.map((e) => JSON.stringify(e));
89
+ const decodedValue = decodes[idx];
90
+ const objectPath = path.slice(0, -1);
91
+ let commonLen = 0;
92
+ while (commonLen < currentObjectPath.length && commonLen < objectPath.length && currentObjectPath[commonLen] === objectPath[commonLen]) commonLen++;
93
+ for (let d = currentObjectPath.length - 1; d >= commonLen; --d) fn.push(`${" ".repeat(d + 1)}},`);
94
+ for (let d = commonLen; d < objectPath.length; ++d) fn.push(`${" ".repeat(d + 1)}${jsonPath[d]}: ${d === 0 && objectPath.length === 1 && typeof nullifyMap[path[0]] === "string" ? `${objectIds[path[0]]?.map((c) => `${c} === null`).join(" && ")} ? null : {` : "{"}`);
95
+ currentObjectPath = objectPath;
96
+ fn.push(`${" ".repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);
97
+ }
98
+ for (let d = currentObjectPath.length - 1; d >= 0; --d) fn.push(`${" ".repeat(d + 1)}},`);
99
+ fn.push(`};`);
100
+ return `${preFn.length ? `${preFn.join("\n ")}\n\t` : ""}for (let i = 0; i < length; ++i) {
101
+ ${fn.join("\n ")}
102
+ }`;
85
103
  }
86
104
  function makeJitQueryMapper(columns, joinsNotNullableMap) {
87
- const internals = `\tconst mapped = [];
88
- for (let i = 0; i < rows.length; ++i) {
89
- const res = {};
90
- ${makeJitQueryMapperInner(columns, joinsNotNullableMap)}
91
- mapped[i] = res;
92
- }
105
+ const internals = `\tconst { columns } = this;
106
+ const { length } = rows;
107
+ const mapped = Array.from({ length });
108
+ ${makeJitQueryMapperInner(columns, joinsNotNullableMap)}
93
109
  return mapped;
94
110
  //# sourceURL=drizzle:jit-query-mapper`;
95
- return Object.assign(new FnConstructor("rows", internals).bind({
96
- columns,
97
- joinsNotNullableMap
98
- }), { body: `function jitQueryMapper (rows) {\n${internals}\n}` });
111
+ return Object.assign(new FnConstructor("rows", internals).bind({ columns }), { body: `function jitQueryMapper (rows) {\n${internals}\n}` });
99
112
  }
100
113
  function makeDefaultQueryMapper(columns, joinsNotNullableMap) {
101
114
  const interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {
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 bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\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\tif (rowStr === decodedValue) {\n\t\t\tfn.push(`res${path} = ${rowStr};`);\n\t\t} else {\n\t\t\tfn.push(\n\t\t\t\t`res${path} = ${rowStr} === null ? ${rowStr} : ${decodedValue};`,\n\t\t\t);\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\tconst tableName = JSON.stringify(getTableName(field.table));\n\t\t\tfn.push(\n\t\t\t\t`if (!(${objectName} in nullifyMap)) {`,\n\t\t\t\t`\tnullifyMap[${objectName}] = res${path} === null ? ${tableName} : false;`,\n\t\t\t\t`} else if (typeof nullifyMap[${objectName}] === 'string' && nullifyMap[${objectName}] !== ${tableName}) {`,\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\\t\\t');\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\tconst mapped = [];\n\tfor (let i = 0; i < rows.length; ++i) {\n\t\tconst res = {};\n\t\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)}\n\t\tmapped[i] = res;\n\t}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t\tjoinsNotNullableMap,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\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 interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\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};\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 ('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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"}
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 bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> = {},\n): string {\n\tconst preFn = [] as string[];\n\tconst fn = [] as string[];\n\tfn.push(`const [ ${columns.map((_, i) => `c${i}`).join(', ')} ] = rows[i];`);\n\n\tconst nullifyMap: Record<string, string | false> = {};\n\tconst objectIds: Record<string, string[]> = {};\n\tconst decodes = Array.from<string>({ length: columns.length });\n\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { field, path, codec, arrayDimensions } = columns[idx]!;\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tlet decoderFieldDestructure: string;\n\t\tlet isColumn = false;\n\t\tif (is(field, Column)) {\n\t\t\tisColumn = true;\n\t\t\tdecoder = field;\n\t\t\tdecoderFieldDestructure = `field: decoder${idx}`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderFieldDestructure = `field: { decoder: decoder${idx} }`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;\n\t\t}\n\t\tdecoderStr = `decoder${idx}.mapFromDriverValue`;\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tif (decoderStr) {\n\t\t\tpreFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ''} } = columns[${idx}];`);\n\t\t} else if (codec) {\n\t\t\tpreFn.push(`const { codec: codec${idx} } = columns[${idx}];`);\n\t\t}\n\n\t\tconst colStr = `c${idx}`;\n\t\tlet decodedValue = colStr;\n\t\tif (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tdecodes[idx] = colStr === decodedValue\n\t\t\t? `${colStr}`\n\t\t\t: `${colStr} === null ? ${colStr} : ${decodedValue}`;\n\n\t\tif (path.length !== 2 || !isColumn) continue;\n\t\tif (objectIds[path[0]!] === undefined) objectIds[path[0]!] = [`c${idx}`];\n\t\telse objectIds[path[0]!]?.push(`c${idx}`);\n\t\tconst [objectName] = path as [string];\n\t\tconst tableName = getTableName((<Column> field).table);\n\t\tnullifyMap[objectName] = joinsNotNullableMap[tableName] ? false : typeof nullifyMap[objectName] === 'string'\n\t\t\t? nullifyMap[objectName] === tableName ? tableName : false\n\t\t\t: tableName;\n\t}\n\n\tfn.push(`mapped[i] = {`);\n\tlet currentObjectPath: string[] = [];\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { path } = columns[idx]!;\n\t\tconst jsonPath = path.map((e) => JSON.stringify(e));\n\t\tconst decodedValue = decodes[idx]!;\n\n\t\tconst objectPath = path.slice(0, -1);\n\t\tlet commonLen = 0;\n\t\twhile (\n\t\t\tcommonLen < currentObjectPath.length\n\t\t\t&& commonLen < objectPath.length\n\t\t\t&& currentObjectPath[commonLen] === objectPath[commonLen]\n\t\t) commonLen++;\n\n\t\tfor (let d = currentObjectPath.length - 1; d >= commonLen; --d) {\n\t\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t\t}\n\n\t\tfor (let d = commonLen; d < objectPath.length; ++d) {\n\t\t\tfn.push(\n\t\t\t\t`${'\\t'.repeat(d + 1)}${jsonPath[d]}: ${\n\t\t\t\t\td === 0 && objectPath.length === 1 && typeof nullifyMap[path[0]!] === 'string'\n\t\t\t\t\t\t? `${objectIds[path[0]!]?.map((c) => `${c} === null`).join(' && ')} ? null : {`\n\t\t\t\t\t\t: '{'\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tcurrentObjectPath = objectPath;\n\t\tfn.push(`${'\\t'.repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);\n\t}\n\n\tfor (let d = currentObjectPath.length - 1; d >= 0; --d) {\n\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t}\n\tfn.push(`};`);\n\n\treturn `${preFn.length ? `${preFn.join('\\n\\t')}\\n\\t` : ''}for (let i = 0; i < length; ++i) {\n\t\t${fn.join('\\n\\t\\t')}\n\t}`;\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\tconst { columns } = this;\n\tconst { length } = rows;\n\tconst mapped = Array.from({ length });\n\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\n}\n\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 interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\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};\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 ('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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"}