@vantreeseba/drizzle-graphql 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/util/builders/mysql.ts","../src/util/builders/common.ts","../src/util/case-ops/index.ts","../src/util/data-mappers/index.ts","../src/util/type-converter/index.ts","../src/util/builders/pg.ts","../src/util/builders/sqlite.ts"],"sourcesContent":["import { is } from 'drizzle-orm';\nimport { MySqlDatabase } from 'drizzle-orm/mysql-core';\nimport { PgAsyncDatabase } from 'drizzle-orm/pg-core';\nimport { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';\nimport {\n type GraphQLFieldConfig,\n type GraphQLInputObjectType,\n GraphQLObjectType,\n GraphQLSchema,\n type GraphQLSchemaConfig,\n} from 'graphql';\nimport type { AnyDrizzleDB, BuildSchemaConfig, GeneratedData } from './types.ts';\nimport { generateMySQL, generatePG, generateSQLite } from './util/builders/index.ts';\n\nexport { extractFilters, extractOrderBy } from './util/builders/common.ts';\n\nexport type {\n AnyDrizzleDB,\n BuildSchemaConfig,\n DeleteResolver,\n ExtractRelations,\n ExtractTableByName,\n ExtractTableRelations,\n ExtractTables,\n GeneratedData,\n GeneratedEntities,\n GeneratedInputs,\n GeneratedOutputs,\n InsertArrResolver,\n InsertResolver,\n MutationReturnlessResult,\n MutationsCore,\n QueriesCore,\n SelectResolver,\n SelectSingleResolver,\n UpdateResolver,\n} from './types.ts';\n\ntype ObjMap<T> = Record<string, T>;\n\nexport const buildSchema = <TDbClient extends AnyDrizzleDB<any>>(\n db: TDbClient,\n config?: BuildSchemaConfig,\n): GeneratedData<TDbClient> => {\n const schema = db._.fullSchema;\n const relations = db._.relations;\n\n if (!schema) {\n throw new Error(\n \"Drizzle-GraphQL Error: Schema not found in drizzle instance. Make sure you're using drizzle-orm v0.30.9 or above and schema is passed to drizzle constructor!\",\n );\n }\n\n const prefixes = {\n insert: config?.prefixes?.insert ?? 'insertInto',\n delete: config?.prefixes?.delete ?? 'deleteFrom',\n update: config?.prefixes?.update ?? 'update',\n };\n\n const suffixes = {\n list: config?.suffixes?.list ?? '',\n single: config?.suffixes?.single ?? 'Single',\n };\n\n const singularTypes = config?.singularTypes ?? false;\n\n if (typeof config?.relationsDepthLimit === 'number') {\n if (config.relationsDepthLimit < 0) {\n throw new Error(\n 'Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!',\n );\n }\n if (config.relationsDepthLimit !== ~~config.relationsDepthLimit) {\n throw new Error(\n 'Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!',\n );\n }\n if (suffixes.list === suffixes.single) {\n throw new Error(\n 'Drizzle-GraphQL Error: List and single query suffixes cannot be the same. This would create conflicting GraphQL field names.',\n );\n }\n }\n\n let generatorOutput;\n if (is(db, MySqlDatabase)) {\n generatorOutput = generateMySQL(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n singularTypes,\n );\n } else if (is(db, PgAsyncDatabase)) {\n generatorOutput = generatePG(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n config?.conflictDoNothing ?? false,\n singularTypes,\n );\n } else if (is(db, BaseSQLiteDatabase)) {\n generatorOutput = generateSQLite(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n singularTypes,\n );\n } else {\n throw new Error('Drizzle-GraphQL Error: Unknown database instance type');\n }\n\n const { queries, mutations, inputs, types } = generatorOutput;\n\n const graphQLSchemaConfig: GraphQLSchemaConfig = {\n types: [...Object.values(inputs), ...Object.values(types)] as (GraphQLInputObjectType | GraphQLObjectType)[],\n query: new GraphQLObjectType({\n name: 'Query',\n fields: queries as ObjMap<GraphQLFieldConfig<any, any, any>>,\n }),\n };\n\n if (config?.mutations !== false) {\n const mutation = new GraphQLObjectType({\n name: 'Mutation',\n fields: mutations as ObjMap<GraphQLFieldConfig<any, any, any>>,\n });\n\n graphQLSchemaConfig.mutation = mutation;\n }\n\n const outputSchema = new GraphQLSchema(graphQLSchemaConfig);\n\n return { schema: outputSchema, entities: generatorOutput };\n};\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, type Relation, type Table } from 'drizzle-orm';\nimport { type MySqlDatabase, MySqlTable } from 'drizzle-orm/mysql-core';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, ThunkObjMap } from 'graphql';\nimport {\n GraphQLBoolean,\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\n\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n extractFilters,\n extractOrderBy,\n extractRelationsParams,\n extractSelectedColumnsFromTree,\n generateTableTypes,\n type TypeCacheCtx,\n} from '../builders/common.ts';\nimport { capitalize, singularize, uncapitalize } from '../case-ops/index.ts';\n\n/** Produce the GraphQL object type name for a table, optionally singularized. */\nconst toTypeName = (name: string, singular: boolean): string =>\n singular ? capitalize(singularize(name)) : capitalize(name);\n\nimport {\n remapFromGraphQLArrayInput,\n remapFromGraphQLSingleInput,\n remapToGraphQLArrayOutput,\n remapToGraphQLSingleOutput,\n} from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n listSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryName = `${uncapitalize(tableName)}${listSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n limit: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const { offset, limit, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const query = queryBase.findMany({\n columns: extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table),\n offset,\n limit,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy —\n // use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased: Table) => extractFilters(aliased, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined,\n });\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError((e as any).message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n singleSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryName = `${uncapitalize(tableName)}${singleSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const { offset, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const query = queryBase.findFirst({\n columns: extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table),\n offset,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy —\n // use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased: Table) => extractFilters(aliased, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined,\n });\n\n const result = await query;\n if (!result) {\n return undefined;\n }\n\n return remapToGraphQLSingleOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError((e as any).message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertArray = (\n db: MySqlDatabase<any, any, any, any>,\n tableName: string,\n table: MySqlTable,\n baseType: GraphQLInputObjectType,\n): CreatedResolver => {\n const queryName = `insertInto${capitalize(tableName)}`;\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, _info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n await db.insert(table).values(input);\n\n return { isSuccess: true };\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: MySqlDatabase<any, any, any, any>,\n tableName: string,\n table: MySqlTable,\n baseType: GraphQLInputObjectType,\n): CreatedResolver => {\n const queryName = `insertInto${capitalize(tableName)}Single`;\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, _info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n await db.insert(table).values(input);\n\n return { isSuccess: true };\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n table: MySqlTable,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n): CreatedResolver => {\n const queryName = `update${capitalize(tableName)}`;\n\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, _info) => {\n try {\n const { where, set } = args;\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n await query;\n\n return { isSuccess: true };\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n table: MySqlTable,\n filterArgs: GraphQLInputObjectType,\n): CreatedResolver => {\n const queryName = `deleteFrom${capitalize(tableName)}`;\n\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, _info) => {\n try {\n const { where } = args;\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n await query;\n\n return { isSuccess: true };\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\n/** Shape of the relational config from drizzle-orm v1 db._.relations */\ninterface TableRelationalConfig {\n table: Table;\n name: string;\n relations: Record<string, Relation<string>>;\n}\ntype TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\n/**\n * Build namedRelations from drizzle-orm v1 TablesRelationalConfig.\n *\n * In drizzle-orm 1.0, db._.relations is a Record where each key is the\n * schema variable name (e.g. \"Users\") and the value has { table, name, relations }.\n * Each relation has a referencedTable property we can match against tableEntries.\n */\nconst buildNamedRelations = (\n relations: TablesRelationalConfig,\n tableEntries: [string, Table][],\n): Record<string, Record<string, TableNamedRelations>> => {\n const namedRelations: Record<string, Record<string, TableNamedRelations>> = {};\n\n for (const [relTableName, relConfig] of Object.entries(relations)) {\n if (!relConfig?.relations) {\n continue;\n }\n\n const namedConfig: Record<string, TableNamedRelations> = {};\n\n for (const [innerRelName, innerRelValue] of Object.entries(relConfig.relations)) {\n // drizzle-orm v1 uses `targetTable` (not `referencedTable`)\n // and provides `targetTableName` directly.\n const targetTable = (innerRelValue as any).targetTable ?? (innerRelValue as any).referencedTable;\n const directTargetName = (innerRelValue as any).targetTableName as string | undefined;\n\n let targetTableName: string | undefined;\n\n if (directTargetName) {\n // v1: use the direct name to find the schema key\n const targetEntry = tableEntries.find(([key]) => key === directTargetName);\n targetTableName = targetEntry?.[0];\n } else if (targetTable) {\n // fallback: match by object reference\n const targetEntry = tableEntries.find(([, tableValue]) => tableValue === targetTable);\n targetTableName = targetEntry?.[0];\n }\n\n if (!targetTableName) {\n continue;\n }\n\n namedConfig[innerRelName] = {\n relation: innerRelValue,\n targetTableName,\n };\n }\n\n if (Object.keys(namedConfig).length > 0) {\n namedRelations[relTableName] = namedConfig;\n }\n }\n\n return namedRelations;\n};\n\nexport const generateSchemaData = <\n TDrizzleInstance extends MySqlDatabase<any, any, any, any>,\n TSchema extends Record<string, Table | unknown>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TablesRelationalConfig,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n singularTypes: boolean = false,\n): GeneratedEntities<TDrizzleInstance, TSchema> => {\n const rawSchema = schema;\n const schemaEntries = Object.entries(rawSchema);\n\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, MySqlTable)) as [string, MySqlTable][];\n const tables = Object.fromEntries(tableEntries);\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Build namedRelations from the drizzle-orm v1 relations config.\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n false,\n relationsDepthLimit,\n cacheCtx,\n singularTypes,\n prefixes.insert,\n prefixes.update,\n ),\n ]),\n );\n\n const mutationReturnType = new GraphQLObjectType({\n name: 'MutationReturn',\n fields: {\n isSuccess: {\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n });\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {\n MutationReturn: mutationReturnType,\n };\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput } = tableTypes.outputs;\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.list,\n singularTypes,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.single,\n singularTypes,\n );\n const insertArrGenerated = generateInsertArray(db, tableName, schema[tableName] as MySqlTable, insertInput);\n const insertSingleGenerated = generateInsertSingle(db, tableName, schema[tableName] as MySqlTable, insertInput);\n const updateGenerated = generateUpdate(db, tableName, schema[tableName] as MySqlTable, updateInput, tableFilters);\n const deleteGenerated = generateDelete(db, tableName, schema[tableName] as MySqlTable, tableFilters);\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: mutationReturnType,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: mutationReturnType,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: mutationReturnType,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: mutationReturnType,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n }\n\n return { queries, mutations, inputs, types: outputs } as any;\n};\n","// =============================================================================\n// LOCAL MODIFICATION — diverges from upstream drizzle-graphql\n//\n// 1. generateColumnFilterValues() rewritten to produce generic shared filter\n// types (IdFilter, StringFilter, DateTimeFilter, BooleanFilter, per-enum)\n// instead of one type per (table, column) pair.\n//\n// 2. Type naming:\n// - Select types: ${capitalize(tableName)} (e.g. Users)\n// - Relation fields: reference the target table's type directly (e.g. posts: [Posts!]!)\n// - Mutation return: same type as select (${capitalize(tableName)})\n// - Insert input: ${capitalize(insertPrefix)}${toTypeName(tableName)}Input (e.g. CreateUsersInput)\n// - Update input: ${capitalize(updatePrefix)}${toTypeName(tableName)}Input (e.g. UpdateUsersInput)\n// =============================================================================\n// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport type { Column, Relation, Table } from 'drizzle-orm';\nimport {\n and,\n asc,\n desc,\n eq,\n getColumns,\n gt,\n gte,\n ilike,\n inArray,\n is,\n isNotNull,\n isNull,\n like,\n lt,\n lte,\n ne,\n notIlike,\n notInArray,\n notLike,\n One,\n or,\n type SQL,\n} from 'drizzle-orm';\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLError,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLString,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { capitalize, singularize } from '../case-ops/index.ts';\nimport { remapFromGraphQLCore } from '../data-mappers/index.ts';\nimport { drizzleColumnToGraphQLType, drizzleRelationToGraphQLInsertType } from '../type-converter/index.ts';\nimport type {\n ConvertedColumn,\n ConvertedInputColumn,\n ConvertedRelationColumnWithArgs,\n} from '../type-converter/types.ts';\nimport type {\n FilterColumnOperators,\n FilterColumnOperatorsCore,\n Filters,\n FiltersCore,\n GeneratedTableTypes,\n GeneratedTableTypesOutputs,\n OrderByArgs,\n ProcessedTableSelectArgs,\n SelectData,\n SelectedColumnsRaw,\n SelectedSQLColumns,\n TableNamedRelations,\n TableSelectArgs,\n} from './types.ts';\n\nconst rqbCrashTypes = ['SQLiteBigInt', 'SQLiteBlobJson', 'SQLiteBlobBuffer'];\n\n/** Produce the GraphQL object type name for a table, optionally singularized. */\nconst toTypeName = (name: string, singular: boolean): string =>\n singular ? capitalize(singularize(name)) : capitalize(name);\n\n/**\n * Shape of the relational config from drizzle-orm v1 db._.relations.\n * Each entry has { table, name, relations }.\n */\ninterface TableRelationalConfig {\n table: Table;\n name: string;\n relations: Record<string, Relation<string>>;\n}\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\n/**\n * Flatten drizzle-orm v1 TablesRelationalConfig into the canonical\n * Record<tableName, Record<relName, TableNamedRelations>> shape used\n * throughout common.ts. Both pg.ts and sqlite.ts call this before\n * passing the relation map to any shared function.\n */\nexport const buildNamedRelations = (\n relations: TablesRelationalConfig,\n tableEntries: [string, Table][],\n): Record<string, Record<string, TableNamedRelations>> => {\n const namedRelations: Record<string, Record<string, TableNamedRelations>> = {};\n\n for (const [relTableName, relConfig] of Object.entries(relations)) {\n if (!relConfig?.relations) {\n continue;\n }\n\n const namedConfig: Record<string, TableNamedRelations> = {};\n\n for (const [innerRelName, innerRelValue] of Object.entries(relConfig.relations)) {\n // drizzle-orm v1 uses `targetTable` (not `referencedTable`)\n // and provides `targetTableName` directly.\n const targetTable = (innerRelValue as any).targetTable ?? (innerRelValue as any).referencedTable;\n const directTargetName = (innerRelValue as any).targetTableName as string | undefined;\n\n let targetTableName: string | undefined;\n\n if (directTargetName) {\n // v1: use the direct name to find the schema key\n const targetEntry = tableEntries.find(([key]) => key === directTargetName);\n targetTableName = targetEntry?.[0];\n } else if (targetTable) {\n // fallback: match by object reference\n const targetEntry = tableEntries.find(([, tableValue]) => tableValue === targetTable);\n targetTableName = targetEntry?.[0];\n }\n\n if (!targetTableName) {\n continue;\n }\n\n namedConfig[innerRelName] = {\n relation: innerRelValue,\n targetTableName,\n };\n }\n\n if (Object.keys(namedConfig).length > 0) {\n namedRelations[relTableName] = namedConfig;\n }\n }\n\n return namedRelations;\n};\n\n/** Per-call cache context — created fresh on each generateSchemaData call to avoid type name collisions. */\nexport interface TypeCacheCtx {\n /** Cache of generic filter type pairs, keyed by generic name (e.g. \"String\", \"DateTime\"). */\n genericFilterCache: Map<string, { main: GraphQLInputObjectType; or: GraphQLInputObjectType }>;\n /**\n * Cache of shared select object types, keyed by table name.\n * Value: the ${capitalize(tableName)} type (columns + relation fields).\n * A table may be pre-registered here as a columns-only shell before its root call runs.\n * Use fullyBuiltTables to distinguish a complete type from a pre-registered shell.\n */\n objectTypeCache: Map<string, GraphQLObjectType>;\n /**\n * Mutable containers for relation fields, keyed by table name.\n * Each container object is closed over by the corresponding GraphQLObjectType thunk so that\n * when the root call for a table populates its relation fields, the thunk automatically picks\n * them up — even if the shell was pre-registered by a different table's relation traversal.\n */\n relationFieldContainers: Map<string, { fields: Record<string, ConvertedRelationColumnWithArgs> }>;\n /**\n * Set of table names whose GraphQL object type has been fully built (root call completed).\n * Pre-registered shells (created when another table references this table as a relation target)\n * are NOT in this set until the root call for that table runs.\n */\n fullyBuiltTables: Set<string>;\n /**\n * Cache of relation types, keyed by \"${fromTableName}::${relName}\".\n * @deprecated No longer used — relation fields now reference the target table's own type directly.\n */\n relationTypeCache: Map<string, GraphQLObjectType>;\n}\n\nexport const extractSelectedColumnsFromTree = (\n tree: Record<string, ResolveTree>,\n table: Table,\n): Record<string, true> => {\n const tableColumns = getColumns(table);\n\n const treeEntries = Object.entries(tree);\n const selectedColumns: SelectedColumnsRaw = [];\n\n for (const [_fieldName, fieldData] of treeEntries) {\n if (!tableColumns[fieldData.name]) {\n continue;\n }\n\n selectedColumns.push([fieldData.name, true]);\n }\n\n if (!selectedColumns.length) {\n const columnKeys = Object.entries(tableColumns);\n const columnName =\n columnKeys.find((e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram))?.[0] ?? columnKeys[0]![0];\n\n selectedColumns.push([columnName, true]);\n }\n\n return Object.fromEntries(selectedColumns);\n};\n\n/**\n * Can't automatically determine column type on type level\n * Since drizzle table types extend eachother\n */\nexport const extractSelectedColumnsFromTreeSQLFormat = <TColType extends Column = Column>(\n tree: Record<string, ResolveTree>,\n table: Table,\n): Record<string, TColType> => {\n const tableColumns = getColumns(table);\n\n const treeEntries = Object.entries(tree);\n const selectedColumns: SelectedSQLColumns = [];\n\n for (const [_fieldName, fieldData] of treeEntries) {\n if (!tableColumns[fieldData.name]) {\n continue;\n }\n\n selectedColumns.push([fieldData.name, tableColumns[fieldData.name]!]);\n }\n\n if (!selectedColumns.length) {\n const columnKeys = Object.entries(tableColumns);\n const columnName =\n columnKeys.find((e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram))?.[0] ?? columnKeys[0]![0];\n\n selectedColumns.push([columnName, tableColumns[columnName]!]);\n }\n\n return Object.fromEntries(selectedColumns) as Record<string, TColType>;\n};\n\nexport const innerOrder = new GraphQLInputObjectType({\n name: 'InnerOrder' as const,\n fields: {\n direction: {\n type: new GraphQLNonNull(\n new GraphQLEnumType({\n name: 'OrderDirection',\n description: 'Order by direction',\n values: {\n asc: {\n value: 'asc',\n description: 'Ascending order',\n },\n desc: {\n value: 'desc',\n description: 'Descending order',\n },\n },\n }),\n ),\n },\n priority: {\n type: new GraphQLNonNull(GraphQLInt),\n description: 'Priority of current field',\n },\n } as const,\n});\n\n/**\n * Maps a Drizzle column to the generic filter type name to use.\n * - \"Id\" → uuid PK/FK columns (no like/ilike operators)\n * - \"DateTime\" → timestamp and date columns\n * - \"Boolean\" → boolean columns\n * - the enum GraphQL type name → enum columns (still unique per enum)\n * - \"IntArray\" → integer[]/serial[] array columns\n * - \"FloatArray\" → float[]/numeric[] array columns\n * - \"String\" → all other text/varchar columns\n */\nconst resolveGenericFilterName = (\n column: Column,\n columnName: string,\n columnGraphQLType: ReturnType<typeof drizzleColumnToGraphQLType>,\n): string => {\n // ID / foreign-key columns\n if (columnName === 'id' || columnName.endsWith('Id')) {\n return 'Id';\n }\n // Boolean scalar\n if (columnGraphQLType.type === GraphQLBoolean) {\n return 'Boolean';\n }\n // Enum type — keep unique per enum since values differ\n if (columnGraphQLType.type instanceof GraphQLEnumType) {\n return columnGraphQLType.type.name;\n }\n // Array columns — give them a distinct name so they never collide with StringFilter.\n // integer().array() columns have a `dimensions` property set on them.\n if (columnGraphQLType.type instanceof GraphQLList) {\n const desc = (columnGraphQLType as any).description ?? '';\n return desc.includes('Integer') ? 'IntArray' : 'FloatArray';\n }\n // Date / timestamp columns (check Drizzle internal columnType string)\n const ct: string = (column as any).columnType ?? '';\n if (ct === 'PgTimestamp' || ct === 'PgTimestampString' || ct === 'PgDate') {\n return 'DateTime';\n }\n // Default: plain text/varchar\n return 'String';\n};\n\nconst generateColumnFilterValues = (\n column: Column,\n tableName: string,\n columnName: string,\n cacheCtx: TypeCacheCtx,\n): GraphQLInputObjectType => {\n const columnGraphQLType = drizzleColumnToGraphQLType(column, columnName, tableName, true, false, true);\n\n const genericName = resolveGenericFilterName(column, columnName, columnGraphQLType);\n const cached = cacheCtx.genericFilterCache.get(genericName);\n if (cached) {\n return cached.main;\n }\n\n const colType = columnGraphQLType.type;\n const colDesc = columnGraphQLType.description;\n const colArr = new GraphQLList(new GraphQLNonNull(colType));\n\n // IdFilter omits like/notLike/ilike/notIlike — they are nonsensical on UUIDs.\n const isId = genericName === 'Id';\n\n const baseFields = {\n eq: { type: colType, description: colDesc },\n ne: { type: colType, description: colDesc },\n lt: { type: colType, description: colDesc },\n lte: { type: colType, description: colDesc },\n gt: { type: colType, description: colDesc },\n gte: { type: colType, description: colDesc },\n ...(isId\n ? {}\n : {\n like: { type: GraphQLString },\n notLike: { type: GraphQLString },\n ilike: { type: GraphQLString },\n notIlike: { type: GraphQLString },\n }),\n inArray: { type: colArr, description: `Array<${colDesc}>` },\n notInArray: { type: colArr, description: `Array<${colDesc}>` },\n isNull: { type: GraphQLBoolean },\n isNotNull: { type: GraphQLBoolean },\n };\n\n const orType = new GraphQLInputObjectType({\n name: `${genericName}FilterOr`,\n fields: { ...baseFields },\n });\n\n const mainType = new GraphQLInputObjectType({\n name: `${genericName}Filter`,\n fields: {\n ...baseFields,\n OR: {\n type: new GraphQLList(new GraphQLNonNull(orType)),\n },\n },\n });\n\n cacheCtx.genericFilterCache.set(genericName, { main: mainType, or: orType });\n return mainType;\n};\n\nconst orderMap = new WeakMap<Object, Record<string, ConvertedInputColumn>>();\nconst generateTableOrderCached = (table: Table) => {\n if (orderMap.has(table)) {\n return orderMap.get(table)!;\n }\n\n let remapped = {};\n try {\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n remapped = Object.fromEntries(\n columnEntries.map(([columnName, _columnDescription]) => [columnName, { type: innerOrder }]),\n );\n\n orderMap.set(table, remapped);\n } catch (_err) {}\n return remapped;\n};\n\nconst filterMap = new WeakMap<Object, Record<string, ConvertedInputColumn>>();\nconst generateTableFilterValuesCached = (table: Table, tableName: string, cacheCtx: TypeCacheCtx) => {\n if (filterMap.has(table)) {\n return filterMap.get(table)!;\n }\n\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const remapped = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n {\n type: generateColumnFilterValues(columnDescription, tableName, columnName, cacheCtx),\n },\n ]),\n );\n\n filterMap.set(table, remapped);\n\n return remapped;\n};\n\nconst fieldMap = new WeakMap<Object, Record<string, ConvertedColumn>>();\nconst generateTableSelectTypeFieldsCached = (table: Table, tableName: string): Record<string, ConvertedColumn> => {\n if (fieldMap.has(table)) {\n return fieldMap.get(table)!;\n }\n\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const remapped = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName),\n ]),\n );\n\n fieldMap.set(table, remapped);\n\n return remapped;\n};\n\nconst orderTypeMap = new WeakMap<Object, GraphQLInputObjectType>();\nconst generateTableOrderTypeCached = (table: Table, tableName: string, singularTypes: boolean) => {\n if (orderTypeMap.has(table)) {\n return orderTypeMap.get(table)!;\n }\n\n const orderColumns = generateTableOrderCached(table);\n const order = new GraphQLInputObjectType({\n name: `${toTypeName(tableName, singularTypes)}OrderBy`,\n fields: orderColumns,\n });\n\n orderTypeMap.set(table, order);\n\n return order;\n};\n\nconst filterTypeMap = new WeakMap<Object, GraphQLInputObjectType>();\nconst generateTableFilterTypeCached = (\n table: Table,\n tableName: string,\n cacheCtx: TypeCacheCtx,\n singularTypes: boolean,\n) => {\n if (filterTypeMap.has(table)) {\n return filterTypeMap.get(table)!;\n }\n\n const filterColumns = generateTableFilterValuesCached(table, tableName, cacheCtx);\n const filters = new GraphQLInputObjectType({\n name: `${toTypeName(tableName, singularTypes)}Filters`,\n fields: {\n ...filterColumns,\n OR: {\n type: new GraphQLList(\n new GraphQLNonNull(\n new GraphQLInputObjectType({\n name: `${toTypeName(tableName, singularTypes)}FiltersOr`,\n fields: filterColumns,\n }),\n ),\n ),\n },\n },\n });\n\n filterTypeMap.set(table, filters);\n\n return filters;\n};\n\n/**\n * Build the select fields for a table.\n * Creates:\n * - Main select type: ${capitalize(tableName)} (e.g. Users)\n * - Relation fields reference the target table's own type directly (e.g. posts: [Posts!]!)\n * rather than creating intermediate relation types.\n *\n * The function is called recursively for relation targets.\n * Cycle detection: usedTables tracks tables currently being processed in the call stack.\n * When we see a table already in usedTables, we stop recursing (no relation fields for that type).\n */\nconst generateSelectFields = <TWithOrder extends boolean>(\n tables: Record<string, Table>,\n tableName: string,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n fromTableName: string,\n fromRelationName: string,\n withOrder: TWithOrder,\n _relationsDepthLimit: number | undefined,\n cacheCtx: TypeCacheCtx,\n singularTypes: boolean,\n usedTables: Set<string> = new Set(),\n): SelectData<TWithOrder> => {\n const table = tables[tableName]!;\n const order = withOrder ? generateTableOrderTypeCached(table, tableName, singularTypes) : undefined;\n const filters = generateTableFilterTypeCached(table, tableName, cacheCtx, singularTypes);\n const tableFields = generateTableSelectTypeFieldsCached(table, tableName);\n\n const relationsForTable = relationMap[tableName];\n const relationEntries: [string, TableNamedRelations][] = relationsForTable ? Object.entries(relationsForTable) : [];\n\n // If this table is already being processed (cycle), stop recursing.\n // Return just the base fields with no relation fields.\n if (usedTables.has(tableName)) {\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n }\n\n // For the root call (fromTableName === '' && fromRelationName === ''), this builds the\n // main ${capitalize(tableName)}SelectItem type.\n // For recursive calls, this builds the relation type.\n const isRootCall = fromTableName === '' && fromRelationName === '';\n\n // If the root type has already been fully built (not just pre-registered as a shell), return early.\n if (isRootCall && cacheCtx.fullyBuiltTables.has(tableName)) {\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n }\n\n // Obtain or create the mutable relation-fields container for this table.\n // The container is a plain object whose `fields` property the GraphQLObjectType thunk reads.\n // Pre-registering it here (before recursion) allows sibling relation traversals to reference\n // the same single GraphQLObjectType instance even when it hasn't been fully built yet.\n let container = cacheCtx.relationFieldContainers.get(tableName);\n if (!container) {\n container = { fields: {} };\n cacheCtx.relationFieldContainers.set(tableName, container);\n }\n\n if (isRootCall && !cacheCtx.objectTypeCache.has(tableName)) {\n const typeName = toTypeName(tableName, singularTypes);\n // Pre-register shell with thunk BEFORE recursing to break circular refs.\n // The thunk reads container.fields, which will be populated after recursion completes.\n const shell = new GraphQLObjectType({\n name: typeName,\n fields: () => ({ ...tableFields, ...container!.fields }),\n });\n cacheCtx.objectTypeCache.set(tableName, shell);\n }\n\n // Build relation fields — recurse into each related table.\n // Mark this table as in-progress before recursing to detect cycles.\n if (relationEntries.length > 0) {\n const rawRelationFields: [string, ConvertedRelationColumnWithArgs][] = [];\n\n // Mark this table as currently being processed.\n const nextUsedTables = new Set(usedTables);\n nextUsedTables.add(tableName);\n\n for (const [relationName, relEntry] of relationEntries) {\n const { targetTableName } = relEntry;\n const relation = (relEntry as any).relation ?? relEntry;\n const isOne = is(relation, One);\n\n // Always recurse to get the target table's filters/order (needed for args).\n // The usedTables check inside the recursive call prevents actual infinite recursion.\n const relSelectData = generateSelectFields(\n tables,\n targetTableName,\n relationMap,\n tableName, // fromTableName for the relation type\n relationName, // fromRelationName for the relation type\n !isOne,\n undefined,\n cacheCtx,\n singularTypes,\n nextUsedTables,\n );\n\n // Use the target table's own GraphQL type directly instead of creating an intermediate relation type.\n // Ensure exactly one GraphQLObjectType instance exists for the target table.\n // If the root call for the target table has already run (or pre-registered a shell),\n // reuse that instance so the schema never contains duplicate type names.\n let relType = cacheCtx.objectTypeCache.get(targetTableName);\n if (!relType) {\n // The target table hasn't been processed yet. Pre-register a shell so that:\n // (a) this relation field has a concrete type reference, and\n // (b) when the target table's root call eventually runs, it reuses this same object.\n const targetTable = tables[targetTableName]!;\n const targetTableFields = generateTableSelectTypeFieldsCached(targetTable, targetTableName);\n // Get or create a container for the target table's relation fields.\n let targetContainer = cacheCtx.relationFieldContainers.get(targetTableName);\n if (!targetContainer) {\n targetContainer = { fields: {} };\n cacheCtx.relationFieldContainers.set(targetTableName, targetContainer);\n }\n const capturedTargetContainer = targetContainer;\n // The thunk reads capturedTargetContainer.fields so that when the target table's root\n // call populates the container, the shell automatically includes those relation fields.\n relType = new GraphQLObjectType({\n name: toTypeName(targetTableName, singularTypes),\n fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields }),\n });\n cacheCtx.objectTypeCache.set(targetTableName, relType);\n }\n\n if (isOne) {\n rawRelationFields.push([\n relationName,\n {\n type: relType,\n args: {\n where: { type: relSelectData.filters },\n },\n },\n ]);\n continue;\n }\n\n rawRelationFields.push([\n relationName,\n {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(relType))),\n args: {\n where: { type: relSelectData.filters },\n orderBy: { type: relSelectData.order! },\n offset: { type: GraphQLInt },\n limit: { type: GraphQLInt },\n },\n },\n ]);\n }\n\n const builtRelationFields = Object.fromEntries(rawRelationFields);\n\n // Only the root call should populate the container — non-root calls are temporary traversals\n // to collect filters/order for args and should not overwrite the canonical relation fields.\n if (isRootCall) {\n // Populate the container so that the thunk on the GraphQLObjectType shell (whether it was\n // created here or pre-registered by another table's relation traversal) picks up the fields.\n container.fields = builtRelationFields;\n cacheCtx.fullyBuiltTables.add(tableName);\n }\n\n return {\n order,\n filters,\n tableFields,\n relationFields: builtRelationFields,\n } as SelectData<TWithOrder>;\n }\n\n // No relation entries — mark as fully built if root call.\n if (isRootCall) {\n cacheCtx.fullyBuiltTables.add(tableName);\n }\n\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n};\n\nexport const generateTableTypes = <WithReturning extends boolean>(\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n withReturning: WithReturning,\n relationsDepthLimit: number | undefined,\n cacheCtx: TypeCacheCtx,\n singularTypes: boolean = false,\n insertPrefix: string = 'insertInto',\n updatePrefix: string = 'update',\n): GeneratedTableTypes<WithReturning> => {\n const { tableFields, relationFields, filters, order } = generateSelectFields(\n tables,\n tableName,\n relationMap,\n '', // root call: no fromTableName\n '', // root call: no fromRelationName\n true,\n relationsDepthLimit,\n cacheCtx,\n singularTypes,\n );\n\n const table = tables[tableName]!;\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const _insertNested = drizzleRelationToGraphQLInsertType(tables, relationMap[tableName] ?? {});\n\n const insertFields = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName, false, true, true),\n ]),\n );\n\n const updateFields = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName, true, false, true),\n ]),\n );\n\n // Insert/update input types: ${capitalize(insertPrefix)}${toTypeName(tableName)}Input / ${capitalize(updatePrefix)}${toTypeName(tableName)}Input\n const insertInput = new GraphQLInputObjectType({\n name: `${capitalize(insertPrefix)}${toTypeName(tableName, singularTypes)}Input`,\n fields: insertFields,\n });\n\n const updateInput = new GraphQLInputObjectType({\n name: `${capitalize(updatePrefix)}${toTypeName(tableName, singularTypes)}Input`,\n fields: updateFields,\n });\n\n // Select type: ${toTypeName(tableName)} (with relation fields)\n // Reuse the cached shell created in generateSelectFields.\n const selectSingleOutput =\n cacheCtx.objectTypeCache.get(tableName) ??\n new GraphQLObjectType({\n name: toTypeName(tableName, singularTypes),\n fields: { ...tableFields, ...relationFields },\n });\n\n const selectArrOutput = new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(selectSingleOutput)));\n\n // Mutation return type: ${capitalize(tableName)}Item (table columns only, no relations)\n // const singleTableItemOutput = withReturning\n // ? new GraphQLObjectType({\n // name: `${capitalize(tableName)}`,\n // // name: `${capitalize(tableName)}Item`,\n // fields: tableFields,\n // })\n // : undefined;\n\n const arrTableItemOutput = withReturning\n ? // ? new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(singleTableItemOutput!)))\n new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(selectSingleOutput!)))\n : undefined;\n\n const inputs = {\n insertInput,\n updateInput,\n tableOrder: order,\n tableFilters: filters,\n };\n\n const outputs = (\n withReturning\n ? {\n selectSingleOutput,\n selectArrOutput,\n singleTableItemOutput: selectSingleOutput!,\n // singleTableItemOutput: singleTableItemOutput!,\n arrTableItemOutput: arrTableItemOutput!,\n }\n : {\n selectSingleOutput,\n selectArrOutput,\n }\n ) as GeneratedTableTypesOutputs<WithReturning>;\n\n return {\n inputs,\n outputs,\n };\n};\n\nexport const extractOrderBy = <TTable extends Table, TArgs extends OrderByArgs<any> = OrderByArgs<TTable>>(\n table: TTable,\n orderArgs: TArgs,\n): SQL[] => {\n const res = [] as SQL[];\n\n for (const [column, config] of Object.entries(orderArgs).sort(\n (a, b) => (b[1]?.priority ?? 0) - (a[1]?.priority ?? 0),\n )) {\n if (!config) {\n continue;\n }\n const { direction } = config;\n\n res.push(direction === 'asc' ? asc(getColumns(table)[column]!) : desc(getColumns(table)[column]!));\n }\n\n return res;\n};\n\nexport const extractFiltersColumn = <TColumn extends Column>(\n column: TColumn,\n columnName: string,\n operators: FilterColumnOperators<TColumn>,\n): SQL | undefined => {\n if (!operators.OR?.length) {\n delete operators.OR;\n }\n\n const entries = Object.entries(operators as FilterColumnOperatorsCore<TColumn>);\n\n if (operators.OR) {\n if (entries.length > 1) {\n throw new GraphQLError(`WHERE ${columnName}: Cannot specify both fields and 'OR' in column operators!`);\n }\n\n const variants = [] as SQL[];\n\n for (const variant of operators.OR) {\n const extracted = extractFiltersColumn(column, columnName, variant);\n\n if (extracted) {\n variants.push(extracted);\n }\n }\n\n return variants.length ? (variants.length > 1 ? or(...variants) : variants[0]) : undefined;\n }\n\n const variants = [] as SQL[];\n for (const [operatorName, operatorValue] of entries) {\n if (operatorValue === null || operatorValue === false) {\n continue;\n }\n\n let operator: ((...args: any[]) => SQL) | undefined;\n switch (operatorName as keyof FilterColumnOperatorsCore<TColumn>) {\n case 'eq':\n operator = operator ?? eq;\n case 'ne':\n operator = operator ?? ne;\n case 'gt':\n operator = operator ?? gt;\n case 'gte':\n operator = operator ?? gte;\n case 'lt':\n operator = operator ?? lt;\n case 'lte': {\n operator = operator ?? lte;\n\n const singleValue = remapFromGraphQLCore(operatorValue, column, columnName);\n variants.push(operator(column, singleValue));\n\n break;\n }\n\n case 'like':\n operator = operator ?? like;\n case 'notLike':\n operator = operator ?? notLike;\n case 'ilike':\n operator = operator ?? ilike;\n case 'notIlike':\n operator = operator ?? notIlike;\n\n variants.push(operator(column, operatorValue as string));\n\n break;\n\n case 'inArray':\n operator = operator ?? inArray;\n case 'notInArray': {\n operator = operator ?? notInArray;\n\n if (!(operatorValue as any[]).length) {\n throw new GraphQLError(`WHERE ${columnName}: Unable to use operator ${operatorName} with an empty array!`);\n }\n const arrayValue = (operatorValue as any[]).map((val) => remapFromGraphQLCore(val, column, columnName));\n\n variants.push(operator(column, arrayValue));\n break;\n }\n\n case 'isNull':\n operator = operator ?? isNull;\n case 'isNotNull':\n operator = operator ?? isNotNull;\n\n variants.push(operator(column));\n }\n }\n\n return variants.length ? (variants.length > 1 ? and(...variants) : variants[0]) : undefined;\n};\n\nexport const extractFilters = <TTable extends Table>(\n table: TTable,\n tableName: string,\n filters: Filters<TTable>,\n): SQL | undefined => {\n if (!filters.OR?.length) {\n delete filters.OR;\n }\n\n const entries = Object.entries(filters as FiltersCore<TTable>);\n if (!entries.length) {\n return;\n }\n\n if (filters.OR) {\n if (entries.length > 1) {\n throw new GraphQLError(`WHERE ${tableName}: Cannot specify both fields and 'OR' in table filters!`);\n }\n\n const variants = [] as SQL[];\n\n for (const variant of filters.OR) {\n const extracted = extractFilters(table, tableName, variant);\n if (extracted) {\n variants.push(extracted);\n }\n }\n\n return variants.length ? (variants.length > 1 ? or(...variants) : variants[0]) : undefined;\n }\n\n const variants = [] as SQL[];\n for (const [columnName, operators] of entries) {\n if (operators === null) {\n continue;\n }\n\n const column = getColumns(table)[columnName]!;\n variants.push(extractFiltersColumn(column, columnName, operators)!);\n }\n\n return variants.length ? (variants.length > 1 ? and(...variants) : variants[0]) : undefined;\n};\n\nconst extractRelationsParamsInner = (\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n tables: Record<string, Table>,\n tableName: string,\n typeName: string,\n originField: ResolveTree,\n singularTypes: boolean = false,\n _isInitial: boolean = false,\n) => {\n const relationsForTable = relationMap[tableName];\n if (!relationsForTable) {\n return undefined;\n }\n\n const baseField = Object.entries(originField.fieldsByTypeName).find(([key, _value]) => key === typeName)?.[1];\n if (!baseField) {\n return undefined;\n }\n\n const args: Record<string, Partial<ProcessedTableSelectArgs>> = {};\n\n for (const [relName, { targetTableName }] of Object.entries(relationsForTable)) {\n // The relation field resolves to the target table's own type, e.g. \"Posts\" not \"UsersPostsRelation\".\n const relTypeName = toTypeName(targetTableName, singularTypes);\n // Look up by field name OR by alias (when the caller uses an alias for the relation).\n // graphql-parse-resolve-info keys fieldsByTypeName entries by alias.\n const field = baseField[relName] ?? Object.values(baseField).find((f) => (f as ResolveTree).name === relName);\n if (!field) {\n continue;\n }\n const relField = (field as ResolveTree)?.fieldsByTypeName;\n const relFieldSelection = relField?.[relTypeName];\n\n // Guard: if the relation type is not in fieldsByTypeName, this field is\n // either an aliased scalar column (not an actual relation) or the relation\n // was not selected in the query. Skip it in both cases.\n if (!relFieldSelection) {\n continue;\n }\n\n const columns = extractSelectedColumnsFromTree(relFieldSelection, tables[targetTableName]!);\n\n const thisRecord: Partial<ProcessedTableSelectArgs> = {};\n thisRecord.columns = columns;\n\n const relationField = Object.values(baseField).find((e) => e.name === relName);\n const relationArgs: Partial<TableSelectArgs> | undefined = relationField?.args;\n\n const offset = relationArgs?.offset ?? undefined;\n const limit = relationArgs?.limit ?? undefined;\n\n // drizzle-orm v1 RQB calls both `where` and `orderBy` callbacks with an\n // aliased table proxy (e.g. d0, d1). Pass the proxy through so column\n // references in the generated SQL match the CTE alias rather than the\n // original unaliased table name.\n const relWhere = relationArgs?.where;\n thisRecord.where = relWhere\n ? { RAW: (aliasedTable: Table) => extractFilters(aliasedTable, relName, relWhere) }\n : undefined;\n thisRecord.orderBy = relationArgs?.orderBy\n ? (aliasedTable: Table) => extractOrderBy(aliasedTable, relationArgs.orderBy!)\n : undefined;\n thisRecord.offset = offset;\n thisRecord.limit = limit;\n\n const relWith = relationField\n ? extractRelationsParamsInner(relationMap, tables, targetTableName, relTypeName, relationField, singularTypes)\n : undefined;\n thisRecord.with = relWith;\n\n args[relName] = thisRecord;\n }\n\n return args;\n};\n\nexport const extractRelationsParams = (\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n tables: Record<string, Table>,\n tableName: string,\n info: ResolveTree | undefined,\n typeName: string,\n singularTypes: boolean = false,\n): Record<string, Partial<ProcessedTableSelectArgs>> | undefined => {\n if (!info) {\n return undefined;\n }\n\n return extractRelationsParamsInner(relationMap, tables, tableName, typeName, info, singularTypes, true);\n};\n","import pluralize from 'pluralize';\n\nexport const uncapitalize = <T extends string>(input: T) =>\n (input?.length\n ? `${input[0]!.toLocaleLowerCase()}${input.length > 1 ? input.slice(1, input.length) : ''}`\n : input) as Uncapitalize<T>;\n\nexport const capitalize = <T extends string>(input: T) =>\n (input?.length\n ? `${input[0]!.toLocaleUpperCase()}${input.length > 1 ? input.slice(1, input.length) : ''}`\n : input) as Capitalize<T>;\n\nexport const singularize = <T extends string>(input: T) => pluralize.singular(input);\n\nexport const cleanTableName = <T extends string>(input: T) => singularize(uncapitalize(input));\n\nexport const tableNameToModel = <T extends string>(input: T) => singularize(capitalize(input));\n\n// (input.length\n// ? `${input[-]!.toLocaleUpperCase()}${input.length > 1 ? input.slice(1, input.length) : \"\"}`\n// : input) as Capitalize<T>;\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { type Column, getTableColumns, type Table } from 'drizzle-orm';\nimport { GraphQLError } from 'graphql';\nimport type { TableNamedRelations } from '../builders/index.ts';\n\nexport const remapToGraphQLCore = (\n key: string,\n value: any,\n tableName: string,\n column: Column,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n): any => {\n // Check for relation fields BEFORE the column check.\n // Relation fields don't have corresponding table columns.\n if (Array.isArray(value)) {\n const relations = relationMap?.[tableName];\n if (relations?.[key]) {\n const rel = relations[key]!;\n return remapToGraphQLArrayOutput(\n value,\n rel.targetTableName,\n (rel.relation as any)?.targetTable ?? (rel.relation as any)?.referencedTable,\n relationMap,\n );\n }\n }\n\n if (typeof value === 'object' && value !== null) {\n const relations = relationMap?.[tableName];\n if (relations?.[key]) {\n const rel = relations[key]!;\n const remapped = remapToGraphQLSingleOutput(\n value,\n rel.targetTableName,\n (rel.relation as any)?.targetTable ?? (rel.relation as any)?.referencedTable,\n relationMap,\n );\n return remapped;\n }\n }\n\n // For non-relation fields, require a column definition.\n if (!column) {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Buffer) {\n return Array.from(value);\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n if (column.columnType === 'PgGeometry' || column.columnType === 'PgVector') {\n return value;\n }\n\n return value.map((arrVal) => remapToGraphQLCore(key, arrVal, tableName, column, relationMap));\n }\n\n if (typeof value === 'object' && value !== null) {\n if (column.columnType === 'PgGeometryObject') {\n return value;\n }\n\n return JSON.stringify(value);\n }\n\n return value;\n};\n\nexport const remapToGraphQLSingleOutput = (\n queryOutput: Record<string, any>,\n tableName: string,\n table: Table,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n) => {\n for (const [key, value] of Object.entries(queryOutput)) {\n if (value === undefined || value === null) {\n delete queryOutput[key];\n continue;\n }\n\n const column = table[key as keyof Table] as Column | undefined;\n\n // SQLite blob(bigint) returns 0n for null DB values — treat as absent when nullable.\n if (value === 0n && column && (column as any).columnType === 'SQLiteBigInt' && !(column as any).notNull) {\n delete queryOutput[key];\n continue;\n }\n\n queryOutput[key] = remapToGraphQLCore(key, value, tableName, column!, relationMap);\n }\n\n return queryOutput;\n};\n\nexport const remapToGraphQLArrayOutput = (\n queryOutput: Record<string, any>[],\n tableName: string,\n table: Table,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n) => {\n for (const entry of queryOutput) {\n remapToGraphQLSingleOutput(entry, tableName, table, relationMap);\n }\n\n return queryOutput;\n};\n\nexport const remapFromGraphQLCore = (value: any, column: Column, columnName: string) => {\n // drizzle-orm v1 uses compound dataType strings (e.g. \"object date\", \"bigint int64\").\n // We must check inclusion rather than equality to handle these cases.\n const dataType: string = (column as any).dataType ?? '';\n\n // Timestamp/datetime columns (SQLite: \"object date\", MySQL timestamp/datetime: \"object date\").\n // Only convert string→Date for timestamp/datetime columns, NOT pure DATE columns.\n // MySqlDateString has dataType \"string date\" (excluded by startsWith check).\n // MySqlDate has columnType \"MySqlDate\" — excluded below since it can accept raw strings.\n const columnType: string = (column as any).columnType ?? '';\n const isTimestampColumn =\n columnType === 'SQLiteTimestamp' ||\n columnType === 'SQLiteTimestampMs' ||\n columnType === 'MySqlTimestamp' ||\n columnType === 'MySqlDateTime' ||\n columnType === 'PgTimestamp' ||\n columnType === 'PgTimestampString';\n if (isTimestampColumn) {\n const formatted = new Date(value);\n if (Number.isNaN(formatted.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return formatted;\n }\n\n // Date-only columns (no time component) — extract YYYY-MM-DD portion to avoid\n // timezone shifts when mysql2 formats Date objects using local time.\n const isDateOnlyColumn = columnType === 'MySqlDate' || columnType === 'PgDate';\n if (isDateOnlyColumn && typeof value === 'string') {\n // Accept ISO strings like \"2024-04-04T00:00:00.000Z\" or plain \"2024-04-04\"\n const dateOnly = value.includes('T') ? value.split('T')[0] : value;\n // Validate it's a real date by parsing\n const check = new Date(dateOnly!);\n if (Number.isNaN(check.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return dateOnly;\n }\n\n // BigInt columns (SQLite: \"bigint int64\", others: \"bigint\").\n if (dataType.includes('bigint')) {\n try {\n return BigInt(value);\n } catch {\n throw new GraphQLError(`Field '${columnName}' is not a BigInt!`);\n }\n }\n\n // JSON columns (SQLite: \"object json\", PG: \"json\").\n // PgGeometryObject is already handled by the switch case below.\n if (dataType.includes('json') && (column as any).columnType !== 'PgGeometryObject') {\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(value);\n } catch (e) {\n throw new GraphQLError(\n `Invalid JSON in field '${columnName}':\\n${e instanceof Error ? e.message : 'Unknown error'}`,\n );\n }\n }\n\n switch (dataType) {\n case 'date': {\n const formatted = new Date(value);\n if (Number.isNaN(formatted.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return formatted;\n }\n\n case 'buffer': {\n if (!Array.isArray(value)) {\n throw new GraphQLError(`Field '${columnName}' is not an array!`);\n }\n\n return Buffer.from(value);\n }\n\n case 'json': {\n if (column.columnType === 'PgGeometryObject') {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n throw new GraphQLError(\n `Invalid JSON in field '${columnName}':\\n${e instanceof Error ? e.message : 'Unknown error'}`,\n );\n }\n }\n\n case 'array': {\n if (!Array.isArray(value)) {\n throw new GraphQLError(`Field '${columnName}' is not an array!`);\n }\n\n if (column.columnType === 'PgGeometry' && value.length !== 2) {\n throw new GraphQLError(\n `Invalid float tuple in field '${columnName}': expected array with length of 2, received ${value.length}`,\n );\n }\n\n return value;\n }\n\n case 'bigint': {\n try {\n return BigInt(value);\n } catch (_error) {\n throw new GraphQLError(`Field '${columnName}' is not a BigInt!`);\n }\n }\n\n default: {\n // graphql-js coerces input object types using Object.create(null), producing\n // null-prototype objects. Drizzle's internal is() check accesses\n // Object.getPrototypeOf(value).constructor and throws for null-prototype objects.\n // Convert to a plain object so drizzle can process it safely.\n if (typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === null) {\n return Object.assign({}, value);\n }\n return value;\n }\n }\n};\n\nexport const remapFromGraphQLSingleInput = (queryInput: Record<string, any>, table: Table) => {\n for (const [key, value] of Object.entries(queryInput)) {\n if (value === undefined) {\n delete queryInput[key];\n } else {\n const column = getTableColumns(table)[key];\n if (!column) {\n throw new GraphQLError(`Unknown column: ${key}`);\n }\n\n if (value === null && column.notNull) {\n delete queryInput[key];\n continue;\n }\n\n queryInput[key] = remapFromGraphQLCore(value, column, key);\n }\n }\n\n return queryInput;\n};\n\nexport const remapFromGraphQLArrayInput = (queryInput: Record<string, any>[], table: Table) => {\n for (const entry of queryInput) {\n remapFromGraphQLSingleInput(entry, table);\n }\n\n return queryInput;\n};\n","import type { Column, Table } from 'drizzle-orm';\nimport { extractExtendedColumnType, getColumns, is } from 'drizzle-orm';\nimport { MySqlInt, MySqlSerial } from 'drizzle-orm/mysql-core';\nimport { PgDate, PgDateString, PgInteger, PgSerial, PgTimestamp, PgTimestampString } from 'drizzle-orm/pg-core';\nimport { SQLiteInteger } from 'drizzle-orm/sqlite-core';\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLScalarType,\n GraphQLString,\n} from 'graphql';\nimport { GraphQLDate, GraphQLDateTime } from 'graphql-scalars';\nimport type { TableNamedRelations } from '../builders/types.ts';\nimport { capitalize } from '../case-ops/index.ts';\nimport type { ConvertedColumn } from './types.ts';\n\nconst allowedNameChars = /^[a-zA-Z0-9_]+$/;\n\nconst enumMap = new WeakMap<Object, GraphQLEnumType>();\nconst generateEnumCached = (column: Column, columnName: string, tableName: string): GraphQLEnumType => {\n if (enumMap.has(column)) {\n return enumMap.get(column)!;\n }\n\n const gqlEnum = new GraphQLEnumType({\n name: `${capitalize(tableName)}${capitalize(columnName)}Enum`,\n values: Object.fromEntries(\n column.enumValues!.map((e, index) => [\n allowedNameChars.test(e) ? e : `Option${index}`,\n {\n value: e,\n description: `Value: ${e}`,\n },\n ]),\n ),\n });\n\n enumMap.set(column, gqlEnum);\n\n return gqlEnum;\n};\n\nconst geoXyType = new GraphQLObjectType({\n name: 'PgGeometryObject',\n fields: {\n x: { type: GraphQLFloat },\n y: { type: GraphQLFloat },\n },\n});\n\nconst geoXyInputType = new GraphQLInputObjectType({\n name: 'PgGeometryObjectInput',\n fields: {\n x: { type: GraphQLFloat },\n y: { type: GraphQLFloat },\n },\n});\n\nconst columnToGraphQLCore = (\n column: Column,\n columnName: string,\n tableName: string,\n isInput: boolean,\n): ConvertedColumn<boolean> => {\n const { type: baseType } = extractExtendedColumnType(column);\n switch (baseType) {\n case 'boolean':\n return { type: GraphQLBoolean, description: 'Boolean' };\n case 'object':\n if (column instanceof PgTimestamp || column instanceof PgDate) {\n return { type: GraphQLDateTime, description: 'DateTime' };\n }\n return column.columnType === 'PgGeometryObject'\n ? {\n type: isInput ? geoXyInputType : geoXyType,\n description: 'Geometry points XY',\n }\n : column.columnType === 'PgBytea'\n ? {\n type: new GraphQLList(new GraphQLNonNull(GraphQLInt)),\n description: 'Buffer',\n }\n : { type: GraphQLString, description: 'JSON' };\n case 'string':\n if (column.enumValues?.length) {\n return { type: generateEnumCached(column, columnName, tableName) };\n }\n\n if (column instanceof PgTimestamp || column instanceof PgTimestampString) {\n return { type: GraphQLDateTime, description: 'DateTime' };\n }\n if (column instanceof PgDateString) {\n // For input, accept any string (drivers truncate ISO timestamps to date on write).\n // For output, keep the strict GraphQLDate scalar so the returned value is validated.\n return isInput ? { type: GraphQLString, description: 'Date' } : { type: GraphQLDate, description: 'Date' };\n }\n\n return { type: GraphQLString, description: 'String' };\n case 'bigint':\n return { type: GraphQLString, description: 'BigInt' };\n case 'number': {\n // integer().array() columns keep columnType=PgInteger but gain a `dimensions` property.\n // drizzle-orm's extractExtendedColumnType still returns 'number' for them, so we\n // detect the array wrapper here and recurse with a synthetic base-int scalar.\n const dims = (column as any).dimensions as number | undefined;\n if (dims !== undefined && dims > 0) {\n const baseDesc = is(column, PgInteger) || is(column, PgSerial) ? 'Integer' : 'Float';\n const baseType = baseDesc === 'Integer' ? GraphQLInt : GraphQLFloat;\n return {\n type: new GraphQLList(new GraphQLNonNull(baseType)),\n description: `Array<${baseDesc}>`,\n };\n }\n return is(column, PgInteger) ||\n is(column, PgSerial) ||\n is(column, MySqlInt) ||\n is(column, MySqlSerial) ||\n is(column, SQLiteInteger)\n ? { type: GraphQLInt, description: 'Integer' }\n : { type: GraphQLFloat, description: 'Float' };\n }\n case 'array': {\n if (column.columnType === 'PgVector') {\n return {\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n description: 'Array<Float>',\n };\n }\n\n if (column.columnType === 'PgGeometry') {\n return {\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n description: 'Tuple<[Float, Float]>',\n };\n }\n\n const innerType = columnToGraphQLCore(\n (column as unknown as { baseColumn: Column }).baseColumn,\n columnName,\n tableName,\n isInput,\n );\n\n return {\n type: new GraphQLList(new GraphQLNonNull(innerType.type as GraphQLScalarType)),\n description: `Array<${innerType.description}>`,\n };\n }\n default:\n throw new Error(`Drizzle-GraphQL Error: Type ${column.dataType} is not implemented!`);\n }\n};\n\nexport const drizzleRelationToGraphQLInsertType = (tables: Record<string, Table>, relationMap: TableNamedRelations) => {\n if (!relationMap) {\n return null;\n }\n\n for (const [tableName, _val] of Object.entries(relationMap)) {\n const table = tables[tableName];\n if (!table) {\n continue;\n }\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns).filter(([_key, value]) => value.primary);\n\n const _connectFields = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName, false, true, true),\n ]),\n );\n }\n\n // const typeDesc = columnToGraphQLCore(column, columnName, tableName, isInput);\n // const noDesc = ['string', 'boolean', 'number'];\n // const { type: baseType } = extractExtendedColumnType(column);\n // if (noDesc.find((e) => e === baseType)) delete typeDesc.description;\n //\n // if (forceNullable) return typeDesc as ConvertedColumn<TIsInput>;\n // if (\n // column.notNull &&\n // !(defaultIsNullable && (column.hasDefault || column.defaultFn))\n // ) {\n // return {\n // type: new GraphQLNonNull(typeDesc.type),\n // description: typeDesc.description,\n // } as ConvertedColumn<TIsInput>;\n // }\n //\n // return typeDesc as ConvertedColumn<TIsInput>;\n\n return null;\n};\n\nexport const drizzleColumnToGraphQLType = <TColumn extends Column, TIsInput extends boolean>(\n column: TColumn,\n columnName: string,\n tableName: string,\n forceNullable = false,\n defaultIsNullable = false,\n isInput: TIsInput = false as TIsInput,\n): ConvertedColumn<TIsInput> => {\n const typeDesc = columnToGraphQLCore(column, columnName, tableName, isInput);\n const noDesc = ['string', 'boolean', 'number'];\n const { type: baseType } = extractExtendedColumnType(column);\n if (noDesc.find((e) => e === baseType)) {\n delete typeDesc.description;\n }\n\n if (forceNullable) {\n return typeDesc as ConvertedColumn<TIsInput>;\n }\n if (column.notNull && !(defaultIsNullable && (column.hasDefault || column.defaultFn))) {\n return {\n type: new GraphQLNonNull(typeDesc.type),\n description: typeDesc.description,\n } as ConvertedColumn<TIsInput>;\n }\n\n return typeDesc as ConvertedColumn<TIsInput>;\n};\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, type Table, type View } from 'drizzle-orm';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport { type PgAsyncDatabase, type PgColumn, PgTable } from 'drizzle-orm/pg-core';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, ThunkObjMap } from 'graphql';\nimport {\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n type GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n buildNamedRelations,\n extractFilters,\n extractOrderBy,\n extractRelationsParams,\n extractSelectedColumnsFromTree,\n extractSelectedColumnsFromTreeSQLFormat,\n generateTableTypes,\n type TablesRelationalConfig,\n type TypeCacheCtx,\n} from '../builders/common.ts';\nimport { capitalize, singularize, uncapitalize } from '../case-ops/index.ts';\n\n/** Produce the GraphQL object type name for a table, optionally singularized. */\nconst toTypeName = (name: string, singular: boolean): string =>\n singular ? capitalize(singularize(name)) : capitalize(name);\n\nimport {\n remapFromGraphQLArrayInput,\n remapFromGraphQLSingleInput,\n remapToGraphQLArrayOutput,\n remapToGraphQLSingleOutput,\n} from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n listSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(uncapitalize(tableName)) : uncapitalize(tableName);\n const queryName = `${queryEntityBase}${listSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n // Tables without relations won't have db.query support — fall back to basic select.\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n limit: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const { offset, limit, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const selectedColumns = extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table);\n\n let result: any[];\n if (queryBase) {\n const withParams = relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined;\n\n result = await queryBase.findMany({\n columns: selectedColumns,\n offset,\n limit,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy (e.g.\n // d0, d1) — use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased) => extractFilters(aliased, tableName, where) } : undefined,\n with: withParams,\n });\n } else {\n // Fallback for tables without relational query builder support.\n let q = db.select(selectedColumns).from(table);\n if (where) {\n q = q.where(extractFilters(table, tableName, where)) as any;\n }\n if (orderBy) {\n q = q.orderBy(...extractOrderBy(table, orderBy)) as any;\n }\n if (offset) {\n q = q.offset(offset) as any;\n }\n if (limit) {\n q = q.limit(limit) as any;\n }\n result = await q;\n }\n\n return remapToGraphQLArrayOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n singleSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(uncapitalize(tableName)) : uncapitalize(tableName);\n const queryName = `${queryEntityBase}${singleSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n // Tables without relations won't have db.query support — fall back to basic select.\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const { offset, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const selectedColumns = extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table);\n\n let result: any;\n if (queryBase) {\n result = await queryBase.findFirst({\n columns: selectedColumns,\n offset,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy (e.g.\n // d0, d1) — use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased) => extractFilters(aliased, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined,\n });\n } else {\n // Fallback for tables without relational query builder support.\n let q = db.select(selectedColumns).from(table);\n if (where) {\n q = q.where(extractFilters(table, tableName, where)) as any;\n }\n if (orderBy) {\n q = q.orderBy(...extractOrderBy(table, orderBy)) as any;\n }\n if (offset) {\n q = q.offset(offset) as any;\n }\n const rows = await q.limit(1);\n result = rows[0];\n }\n\n if (!result) {\n return undefined;\n }\n\n return remapToGraphQLSingleOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertArray = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n baseType: GraphQLInputObjectType,\n prefix: string,\n conflictDoNothing: boolean = false,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `${prefix}${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.insert(table).values(input).returning(columns);\n if (conflictDoNothing) {\n query = query.onConflictDoNothing() as any;\n }\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n baseType: GraphQLInputObjectType,\n prefix: string,\n conflictDoNothing: boolean = false,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(capitalize(tableName)) : capitalize(tableName);\n const queryName = singularTypes ? `${prefix}${queryEntityBase}` : `${prefix}${queryEntityBase}Single`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.insert(table).values(input).returning(columns);\n if (conflictDoNothing) {\n query = query.onConflictDoNothing() as any;\n }\n const result = await query;\n\n if (!result[0]) {\n return undefined;\n }\n\n return remapToGraphQLSingleOutput(result[0], tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n prefix: string,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `${prefix}${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, info) => {\n try {\n const { where, set } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n filterArgs: GraphQLInputObjectType,\n prefix: string,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `${prefix}${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, info) => {\n try {\n const { where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\ntype SchemaEntry = Table<any> | View<string, boolean, any>;\n\nexport function generateSchemaData<\n TDrizzleInstance extends PgAsyncDatabase<any, any>,\n TRelations extends TablesRelationalConfig,\n TSchema extends Record<string, SchemaEntry>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TRelations,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n conflictDoNothing: boolean = false,\n singularTypes: boolean = false,\n): GeneratedEntities<TDrizzleInstance, TSchema> {\n const schemaEntries = Object.entries(schema);\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, PgTable)) as [string, PgTable][];\n const tables = Object.fromEntries(tableEntries) as Record<string, PgTable>;\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Flatten drizzle-orm v1 TablesRelationalConfig into the canonical shape\n // used throughout common.ts: Record<tableName, Record<relName, TableNamedRelations>>\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n true,\n relationsDepthLimit,\n cacheCtx,\n singularTypes,\n prefixes.insert,\n prefixes.update,\n ),\n ]),\n );\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {};\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.list,\n singularTypes,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.single,\n singularTypes,\n );\n const insertArrGenerated = generateInsertArray(\n db,\n tableName,\n schema[tableName] as PgTable,\n insertInput,\n prefixes.insert,\n conflictDoNothing,\n singularTypes,\n );\n const insertSingleGenerated = generateInsertSingle(\n db,\n tableName,\n schema[tableName] as PgTable,\n insertInput,\n prefixes.insert,\n conflictDoNothing,\n singularTypes,\n );\n const updateGenerated = generateUpdate(\n db,\n tableName,\n schema[tableName] as PgTable,\n updateInput,\n tableFilters,\n prefixes.update,\n singularTypes,\n );\n const deleteGenerated = generateDelete(\n db,\n tableName,\n schema[tableName] as PgTable,\n tableFilters,\n prefixes.delete,\n singularTypes,\n );\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: arrTableItemOutput,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: singleTableItemOutput,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: arrTableItemOutput,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: arrTableItemOutput,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n outputs[singleTableItemOutput.name] = singleTableItemOutput;\n }\n\n return { queries, mutations, inputs, types: outputs } as any;\n}\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, type Table } from 'drizzle-orm';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport { type BaseSQLiteDatabase, type SQLiteColumn, SQLiteTable } from 'drizzle-orm/sqlite-core';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, GraphQLResolveInfo, ThunkObjMap } from 'graphql';\nimport {\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n type GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\n\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n buildNamedRelations,\n extractFilters,\n extractOrderBy,\n extractRelationsParams,\n extractSelectedColumnsFromTree,\n extractSelectedColumnsFromTreeSQLFormat,\n generateTableTypes,\n type TablesRelationalConfig,\n type TypeCacheCtx,\n} from '../builders/common.ts';\nimport { capitalize, singularize, uncapitalize } from '../case-ops/index.ts';\n\n/** Produce the GraphQL object type name for a table, optionally singularized. */\nconst toTypeName = (name: string, singular: boolean): string =>\n singular ? capitalize(singularize(name)) : capitalize(name);\n\nimport {\n remapFromGraphQLArrayInput,\n remapFromGraphQLSingleInput,\n remapToGraphQLArrayOutput,\n remapToGraphQLSingleOutput,\n} from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n listSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(uncapitalize(tableName)) : uncapitalize(tableName);\n const queryName = `${queryEntityBase}${listSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n limit: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source: any, args: Partial<TableSelectArgs>, _context: any, info: GraphQLResolveInfo) => {\n try {\n const { offset, limit, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const query = queryBase.findMany({\n columns: extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table),\n offset,\n limit,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy —\n // use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased: Table) => extractFilters(aliased, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined,\n });\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n singleSuffix: string,\n singularTypes: boolean,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(uncapitalize(tableName)) : uncapitalize(tableName);\n const queryName = `${queryEntityBase}${singleSuffix}`;\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = {\n offset: {\n type: GraphQLInt,\n },\n orderBy: {\n type: orderArgs,\n },\n where: {\n type: filterArgs,\n },\n } as GraphQLFieldConfigArgumentMap;\n\n const typeName = toTypeName(tableName, singularTypes);\n const table = tables[tableName]!;\n\n return {\n name: queryName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const { offset, orderBy, where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const query = queryBase.findFirst({\n columns: extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table),\n offset,\n // drizzle-orm v1 RQB calls orderBy with the aliased table proxy —\n // use it directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliased: Table) => extractFilters(aliased, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, singularTypes)\n : undefined,\n });\n\n const result = await query;\n if (!result) {\n return undefined;\n }\n\n return remapToGraphQLSingleOutput(result, tableName, table, relationMap);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertArray = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n baseType: GraphQLInputObjectType,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `insertInto${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<SQLiteColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n baseType: GraphQLInputObjectType,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryEntityBase = singularTypes ? singularize(capitalize(tableName)) : capitalize(tableName);\n const queryName = singularTypes ? `insertInto${queryEntityBase}` : `insertInto${queryEntityBase}Single`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n return {\n name: queryName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<SQLiteColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();\n\n if (!result[0]) {\n return undefined;\n }\n\n return remapToGraphQLSingleOutput(result[0], tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `update${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, info) => {\n try {\n const { where, set } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<SQLiteColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n filterArgs: GraphQLInputObjectType,\n singularTypes: boolean = false,\n): CreatedResolver => {\n const queryName = `deleteFrom${capitalize(tableName)}`;\n const typeName = toTypeName(tableName, singularTypes);\n\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: queryName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, info) => {\n try {\n const { where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<SQLiteColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n if (e instanceof Error) {\n throw new GraphQLError(e.message);\n }\n\n throw e;\n }\n },\n args: queryArgs,\n };\n};\n\nexport const generateSchemaData = <\n TDrizzleInstance extends BaseSQLiteDatabase<any, any, any, any>,\n TSchema extends Record<string, Table | unknown>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TablesRelationalConfig,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n singularTypes: boolean = false,\n): GeneratedEntities<TDrizzleInstance, TSchema> => {\n const rawSchema = schema;\n const schemaEntries = Object.entries(rawSchema);\n\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, SQLiteTable)) as [string, SQLiteTable][];\n const tables = Object.fromEntries(tableEntries) as Record<string, SQLiteTable>;\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Build namedRelations from the drizzle-orm v1 relations config.\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n true,\n relationsDepthLimit,\n cacheCtx,\n singularTypes,\n prefixes.insert,\n prefixes.update,\n ),\n ]),\n );\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {};\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.list,\n singularTypes,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n namedRelations,\n tableOrder,\n tableFilters,\n suffixes.single,\n singularTypes,\n );\n const insertArrGenerated = generateInsertArray(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n insertInput,\n singularTypes,\n );\n const insertSingleGenerated = generateInsertSingle(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n insertInput,\n singularTypes,\n );\n const updateGenerated = generateUpdate(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n updateInput,\n tableFilters,\n singularTypes,\n );\n const deleteGenerated = generateDelete(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n tableFilters,\n singularTypes,\n );\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: arrTableItemOutput,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: singleTableItemOutput,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: arrTableItemOutput,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: arrTableItemOutput,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n outputs[singleTableItemOutput.name] = singleTableItemOutput;\n }\n\n return { queries, mutations, inputs, types: outputs } as any;\n};\n"],"mappings":"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","names":["import_drizzle_orm","import_mysql_core","import_pg_core","import_sqlite_core","import_graphql","import_drizzle_orm","import_mysql_core","import_graphql","import_drizzle_orm","import_graphql","pluralize","import_drizzle_orm","import_graphql","baseType","desc","variants","toTypeName","buildNamedRelations","import_drizzle_orm","import_pg_core","import_graphql","import_graphql_parse_resolve_info","toTypeName","generateSelectArray","generateSelectSingle","generateInsertArray","generateInsertSingle","generateUpdate","generateDelete","generateSchemaData","import_drizzle_orm","import_sqlite_core","import_graphql","import_graphql_parse_resolve_info","toTypeName","generateSelectArray","generateSelectSingle","generateInsertArray","generateInsertSingle","generateUpdate","generateDelete","generateSchemaData","generateSchemaData"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/util/builders/mysql.ts","../src/util/builders/common.ts","../src/util/batch-loader/index.ts","../src/util/case-ops/index.ts","../src/util/data-mappers/index.ts","../src/util/type-converter/index.ts","../src/util/builders/pg.ts","../src/util/builders/sqlite.ts"],"sourcesContent":["import { is } from 'drizzle-orm';\nimport { MySqlDatabase } from 'drizzle-orm/mysql-core';\nimport { PgAsyncDatabase } from 'drizzle-orm/pg-core';\nimport { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';\nimport {\n type GraphQLFieldConfig,\n type GraphQLInputObjectType,\n GraphQLObjectType,\n GraphQLSchema,\n type GraphQLSchemaConfig,\n} from 'graphql';\nimport type { AnyDrizzleDB, BuildSchemaConfig, GeneratedData } from './types.ts';\nimport { generateMySQL, generatePG, generateSQLite } from './util/builders/index.ts';\n\nexport type {\n AnyDrizzleDB,\n BuildSchemaConfig,\n DeleteResolver,\n ExtractRelations,\n ExtractTableByName,\n ExtractTableRelations,\n ExtractTables,\n GeneratedData,\n GeneratedEntities,\n GeneratedInputs,\n GeneratedOutputs,\n InsertArrResolver,\n InsertResolver,\n MutationReturnlessResult,\n MutationsCore,\n QueriesCore,\n SelectResolver,\n SelectSingleResolver,\n UpdateResolver,\n} from './types.ts';\nexport type { RelationResolverFactory } from './util/builders/common.ts';\nexport {\n createRelationResolverFactory,\n extractFilters,\n extractOrderBy,\n extractRelationJoinColumns,\n} from './util/builders/common.ts';\nexport type { TableNamedRelations } from './util/builders/types.ts';\n\ntype ObjMap<T> = Record<string, T>;\n\nexport const buildSchema = <TDbClient extends AnyDrizzleDB<any>>(\n db: TDbClient,\n config?: BuildSchemaConfig,\n): GeneratedData<TDbClient> => {\n const relations = db._.relations;\n // drizzle-orm v1 rc.2 removed fullSchema from PgAsyncDatabase._\n // For PG, reconstruct a schema-like map from db._.relations (each entry has { table }).\n // MySQL and SQLite still expose fullSchema directly.\n const schema =\n (db._ as any).fullSchema ??\n Object.fromEntries(\n Object.entries(relations as Record<string, any>)\n .filter(([, config]) => config?.table != null)\n .map(([key, config]) => [key, config.table]),\n );\n\n if (!schema || !Object.keys(schema).length) {\n throw new Error(\n 'Drizzle-GraphQL Error: Schema not found in drizzle instance. Pass relations (from buildRelations/defineRelations) to the drizzle constructor so drizzle-graphql can detect your tables.',\n );\n }\n\n const prefixes = {\n insert: config?.prefixes?.insert ?? 'create',\n delete: config?.prefixes?.delete ?? 'delete',\n update: config?.prefixes?.update ?? 'update',\n };\n\n const suffixes = {\n list: config?.suffixes?.list ?? '',\n single: config?.suffixes?.single ?? 'Single',\n };\n\n const typeNameMapper = config?.typeNameMapper;\n\n // Normalize eagerLoadRelations (boolean | predicate | undefined) into a predicate.\n const eagerOpt = config?.eagerLoadRelations;\n const shouldEagerLoad: (tableName: string, relationName: string) => boolean =\n eagerOpt === undefined || eagerOpt === true ? () => true : eagerOpt === false ? () => false : eagerOpt;\n\n // When a typeNameMapper is provided, the mapper's singular/plural forms disambiguate the\n // list and single fields even if the suffixes are identical (e.g. both '').\n // Only enforce the suffix-collision check when no mapper is active.\n if (!typeNameMapper && suffixes.list === suffixes.single) {\n throw new Error(\n 'Drizzle-GraphQL Error: List and single query suffixes cannot be the same. This would create conflicting GraphQL field names.',\n );\n }\n\n if (typeof config?.relationsDepthLimit === 'number') {\n if (config.relationsDepthLimit < 0) {\n throw new Error(\n 'Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!',\n );\n }\n if (config.relationsDepthLimit !== ~~config.relationsDepthLimit) {\n throw new Error(\n 'Drizzle-GraphQL Error: config.relationsDepthLimit is supposed to be nonnegative integer or undefined!',\n );\n }\n }\n\n let generatorOutput;\n if (is(db, MySqlDatabase)) {\n generatorOutput = generateMySQL(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n typeNameMapper,\n shouldEagerLoad,\n );\n } else if (is(db, PgAsyncDatabase)) {\n generatorOutput = generatePG(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n config?.conflictDoNothing ?? false,\n typeNameMapper,\n shouldEagerLoad,\n );\n } else if (is(db, BaseSQLiteDatabase)) {\n generatorOutput = generateSQLite(\n db,\n schema,\n relations,\n config?.relationsDepthLimit,\n prefixes,\n suffixes,\n typeNameMapper,\n shouldEagerLoad,\n );\n } else {\n throw new Error('Drizzle-GraphQL Error: Unknown database instance type');\n }\n\n const { queries, mutations, inputs, types } = generatorOutput;\n\n const graphQLSchemaConfig: GraphQLSchemaConfig = {\n types: [...Object.values(inputs), ...Object.values(types)] as (GraphQLInputObjectType | GraphQLObjectType)[],\n query: new GraphQLObjectType({\n name: 'Query',\n fields: queries as ObjMap<GraphQLFieldConfig<any, any, any>>,\n }),\n };\n\n if (config?.mutations !== false) {\n const mutation = new GraphQLObjectType({\n name: 'Mutation',\n fields: mutations as ObjMap<GraphQLFieldConfig<any, any, any>>,\n });\n\n graphQLSchemaConfig.mutation = mutation;\n }\n\n const outputSchema = new GraphQLSchema(graphQLSchemaConfig);\n\n return { schema: outputSchema, entities: generatorOutput };\n};\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, One, type Table } from 'drizzle-orm';\nimport { getTableConfig, type MySqlDatabase, MySqlTable } from 'drizzle-orm/mysql-core';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, ThunkObjMap } from 'graphql';\nimport {\n GraphQLBoolean,\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\n\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n attachTargetPrimaryKeys,\n buildNamedRelations,\n computeResolverFieldNames,\n createRelationResolverFactory,\n extractFilters,\n generateTableTypes,\n getPrimaryKeyPropNamesFromConfig,\n pruneNonEagerRelations,\n type RelationResolverFactory,\n runRelationalSelect,\n selectArrayArgs,\n selectSingleArgs,\n type TablesRelationalConfig,\n type TypeCacheCtx,\n type TypeNameMapper,\n toGraphQLError,\n} from '../builders/common.ts';\n\nimport { remapFromGraphQLArrayInput, remapFromGraphQLSingleInput } from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = selectArrayArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: false,\n });\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = selectSingleArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: true,\n });\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertArray = (\n db: MySqlDatabase<any, any, any, any>,\n _tableName: string,\n table: MySqlTable,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, _info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n await db.insert(table).values(input);\n\n return { isSuccess: true };\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: MySqlDatabase<any, any, any, any>,\n _tableName: string,\n table: MySqlTable,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, _info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n await db.insert(table).values(input);\n\n return { isSuccess: true };\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n table: MySqlTable,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n): CreatedResolver => {\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, _info) => {\n try {\n const { where, set } = args;\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n await query;\n\n return { isSuccess: true };\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: MySqlDatabase<any, any, any>,\n tableName: string,\n table: MySqlTable,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n): CreatedResolver => {\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, _info) => {\n try {\n const { where } = args;\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n await query;\n\n return { isSuccess: true };\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\n/** Primary-key property names for a MySQL table, including table-level composite keys. */\nconst mysqlPrimaryKeyPropNames = (table: MySqlTable): string[] =>\n getPrimaryKeyPropNamesFromConfig(table, getTableConfig);\n\nexport const generateSchemaData = <\n TDrizzleInstance extends MySqlDatabase<any, any, any, any>,\n TSchema extends Record<string, Table | unknown>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TablesRelationalConfig,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n typeNameMapper?: TypeNameMapper,\n shouldEagerLoad: (tableName: string, relationName: string) => boolean = () => true,\n): GeneratedEntities<TDrizzleInstance, TSchema> => {\n const rawSchema = schema;\n const schemaEntries = Object.entries(rawSchema);\n\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, MySqlTable)) as [string, MySqlTable][];\n const tables = Object.fromEntries(tableEntries);\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Build namedRelations from the drizzle-orm v1 relations config.\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n // Record each relation target's (composite-aware) primary key for deterministic\n // paginated ordering. Must run before pruning / type generation (shared entry objects).\n attachTargetPrimaryKeys(namedRelations, tables, mysqlPrimaryKeyPropNames);\n // Pruned map for query resolvers' `with:`; type generation keeps the full map.\n const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);\n\n const resolverFactory: RelationResolverFactory = createRelationResolverFactory(db, tables);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n orderTypeCache: new WeakMap(),\n filterTypeCache: new WeakMap(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n false,\n relationsDepthLimit,\n cacheCtx,\n typeNameMapper,\n prefixes.insert,\n prefixes.update,\n resolverFactory,\n ),\n ]),\n );\n\n const mutationReturnType = new GraphQLObjectType({\n name: 'MutationReturn',\n fields: {\n isSuccess: {\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n });\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {\n MutationReturn: mutationReturnType,\n };\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput } = tableTypes.outputs;\n\n // Compute field names using the mapper logic\n const {\n typeName,\n listFieldName,\n singleFieldName,\n createArrayFieldName,\n createSingleFieldName,\n updateFieldName,\n deleteFieldName,\n } = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n listFieldName,\n typeName,\n typeNameMapper,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n singleFieldName,\n typeName,\n typeNameMapper,\n );\n const insertArrGenerated = generateInsertArray(\n db,\n tableName,\n schema[tableName] as MySqlTable,\n insertInput,\n createArrayFieldName,\n );\n const insertSingleGenerated = generateInsertSingle(\n db,\n tableName,\n schema[tableName] as MySqlTable,\n insertInput,\n createSingleFieldName,\n );\n const updateGenerated = generateUpdate(\n db,\n tableName,\n schema[tableName] as MySqlTable,\n updateInput,\n tableFilters,\n updateFieldName,\n );\n const deleteGenerated = generateDelete(\n db,\n tableName,\n schema[tableName] as MySqlTable,\n tableFilters,\n deleteFieldName,\n );\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: mutationReturnType,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: mutationReturnType,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: mutationReturnType,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: mutationReturnType,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n }\n\n const fieldResolvers: Record<string, Record<string, any>> = {};\n for (const [tableName, tableRelations] of Object.entries(namedRelations)) {\n const relResolvers: Record<string, any> = {};\n for (const [relName, relEntry] of Object.entries(tableRelations)) {\n const isOne = is((relEntry as any).relation ?? relEntry, One);\n const resolver = resolverFactory({ tableName, relationName: relName, relEntry, isOne });\n if (resolver) {\n relResolvers[relName] = resolver;\n }\n }\n if (Object.keys(relResolvers).length > 0) {\n fieldResolvers[tableName] = relResolvers;\n }\n }\n\n return { queries, mutations, inputs, types: outputs, fieldResolvers } as any;\n};\n","// =============================================================================\n// LOCAL MODIFICATION — diverges from upstream drizzle-graphql\n//\n// 1. generateColumnFilterValues() rewritten to produce generic shared filter\n// types (IdFilter, StringFilter, DateTimeFilter, BooleanFilter, per-enum)\n// instead of one type per (table, column) pair.\n//\n// 2. Type naming:\n// - Select types: ${capitalize(tableName)} (e.g. Users)\n// - Relation fields: reference the target table's type directly (e.g. posts: [Posts!]!)\n// - Mutation return: same type as select (${capitalize(tableName)})\n// - Insert input: ${capitalize(insertPrefix)}${toTypeName(tableName)}Input (e.g. CreateUsersInput)\n// - Update input: ${capitalize(updatePrefix)}${toTypeName(tableName)}Input (e.g. UpdateUsersInput)\n// =============================================================================\n// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport type { Column, Relation, Table } from 'drizzle-orm';\nimport {\n and,\n asc,\n desc,\n eq,\n getColumns,\n gt,\n gte,\n ilike,\n inArray,\n is,\n isNotNull,\n isNull,\n like,\n lt,\n lte,\n ne,\n notIlike,\n notInArray,\n notLike,\n One,\n or,\n type SQL,\n sql,\n} from 'drizzle-orm';\nimport type { GraphQLFieldResolver } from 'graphql';\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLError,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n GraphQLString,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { getOrCreateLoader } from '../batch-loader/index.ts';\nimport { capitalize, uncapitalize } from '../case-ops/index.ts';\nimport { remapFromGraphQLCore, remapToGraphQLArrayOutput, remapToGraphQLSingleOutput } from '../data-mappers/index.ts';\nimport { drizzleColumnToGraphQLType } from '../type-converter/index.ts';\nimport type {\n ConvertedColumn,\n ConvertedInputColumn,\n ConvertedRelationColumnWithArgs,\n} from '../type-converter/types.ts';\nimport type {\n FilterColumnOperators,\n FilterColumnOperatorsCore,\n Filters,\n FiltersCore,\n GeneratedTableTypes,\n GeneratedTableTypesOutputs,\n OrderByArgs,\n ProcessedTableSelectArgs,\n SelectData,\n SelectedColumnsRaw,\n SelectedSQLColumns,\n TableNamedRelations,\n TableSelectArgs,\n} from './types.ts';\n\nconst rqbCrashTypes = ['SQLiteBigInt', 'SQLiteBlobJson', 'SQLiteBlobBuffer'];\n\n/** Optional mapper from table key to singular/plural name pair. Return undefined to use default naming for a table. */\nexport type TypeNameMapper = (tableName: string) => { singular: string; plural: string } | undefined;\n\n/** Produce the GraphQL object type name for a table, using the mapper if provided. */\nconst resolveTypeName = (name: string, typeNameMapper?: TypeNameMapper): string => {\n const mapped = typeNameMapper?.(name);\n return mapped ? capitalize(mapped.singular) : capitalize(name);\n};\n\n/**\n * Shape of the relational config from drizzle-orm v1 db._.relations.\n * Each entry has { table, name, relations }.\n */\ninterface TableRelationalConfig {\n table: Table;\n name: string;\n relations: Record<string, Relation<string>>;\n}\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\n/**\n * Flatten drizzle-orm v1 TablesRelationalConfig into the canonical\n * Record<tableName, Record<relName, TableNamedRelations>> shape used\n * throughout common.ts. Both pg.ts and sqlite.ts call this before\n * passing the relation map to any shared function.\n */\nexport const buildNamedRelations = (\n relations: TablesRelationalConfig,\n tableEntries: [string, Table][],\n): Record<string, Record<string, TableNamedRelations>> => {\n const namedRelations: Record<string, Record<string, TableNamedRelations>> = {};\n\n for (const [relTableName, relConfig] of Object.entries(relations)) {\n if (!relConfig?.relations) {\n continue;\n }\n\n const namedConfig: Record<string, TableNamedRelations> = {};\n\n for (const [innerRelName, innerRelValue] of Object.entries(relConfig.relations)) {\n // drizzle-orm v1 uses `targetTable` (not `referencedTable`)\n // and provides `targetTableName` directly.\n const targetTable = (innerRelValue as any).targetTable ?? (innerRelValue as any).referencedTable;\n const directTargetName = (innerRelValue as any).targetTableName as string | undefined;\n\n let targetTableName: string | undefined;\n\n if (directTargetName) {\n // v1: use the direct name to find the schema key\n const targetEntry = tableEntries.find(([key]) => key === directTargetName);\n targetTableName = targetEntry?.[0];\n } else if (targetTable) {\n // fallback: match by object reference\n const targetEntry = tableEntries.find(([, tableValue]) => tableValue === targetTable);\n targetTableName = targetEntry?.[0];\n }\n\n if (!targetTableName) {\n continue;\n }\n\n namedConfig[innerRelName] = {\n relation: innerRelValue,\n targetTableName,\n };\n }\n\n if (Object.keys(namedConfig).length > 0) {\n namedRelations[relTableName] = namedConfig;\n }\n }\n\n return namedRelations;\n};\n\n/**\n * Records each relation's target-table primary-key property names on the relation entry,\n * so the pagination paths (the window-function batch loader and the eager `with:` orderBy\n * default) can fall back to a deterministic PK order without re-deriving it per request.\n *\n * Composite primary keys are only visible through the dialect's getTableConfig, so the\n * dialect builder passes a `resolvePkNames` that threads the composite column names in.\n * Mutates the relation entries in place (they are shared with the pruned eager map and\n * the resolver factory, so attaching once covers every consumer).\n */\nexport const attachTargetPrimaryKeys = (\n namedRelations: Record<string, Record<string, TableNamedRelations>>,\n tables: Record<string, Table>,\n resolvePkNames: (table: Table) => string[],\n): void => {\n const cache = new Map<string, readonly string[]>();\n for (const rels of Object.values(namedRelations)) {\n for (const relEntry of Object.values(rels)) {\n const { targetTableName } = relEntry;\n let pk = cache.get(targetTableName);\n if (!pk) {\n const targetTable = tables[targetTableName];\n pk = targetTable ? resolvePkNames(targetTable) : [];\n cache.set(targetTableName, pk);\n }\n relEntry.targetPkNames = pk;\n }\n }\n};\n\n/**\n * Extracts the join column info from a drizzle-orm v1 Relation object.\n * Returns the JS property name of the local column on the parent table and the\n * Column object for the foreign column on the target table, or undefined if the\n * relation internals are not accessible.\n */\nexport const extractRelationJoinColumns = (\n relEntry: TableNamedRelations,\n parentTable: Table,\n targetTable: Table,\n): { localColPropName: string; foreignCol: Column; foreignColPropName: string } | undefined => {\n const rel = (relEntry as any).relation ?? relEntry;\n const sourceColumns: any[] | undefined = rel.sourceColumns;\n const targetColumns: any[] | undefined = rel.targetColumns;\n\n if (!sourceColumns?.length || !targetColumns?.length) {\n return undefined;\n }\n\n const sourceCol = sourceColumns[0];\n const targetCol = targetColumns[0];\n\n const parentCols = getColumns(parentTable);\n const localColPropName = Object.entries(parentCols).find(([, c]) => c === sourceCol)?.[0];\n\n const targetCols = getColumns(targetTable);\n const foreignColPropName = Object.entries(targetCols).find(([, c]) => c === targetCol)?.[0];\n\n if (!localColPropName || !foreignColPropName) {\n return undefined;\n }\n\n return { localColPropName, foreignCol: targetCol, foreignColPropName };\n};\n\nexport type RelationResolverFactory = (params: {\n tableName: string;\n relationName: string;\n relEntry: TableNamedRelations;\n isOne: boolean;\n}) => GraphQLFieldResolver<any, any> | undefined;\n\n/**\n * Fetches a to-many relation with per-parent limit/offset for ALL parents in a\n * single query, using a window function (ROW_NUMBER() OVER (PARTITION BY fk ...)).\n *\n * This replaces the previous per-parent fallback that issued one query per parent\n * (true N+1) whenever pagination args were present. Each parent gets its own\n * limit/offset window while the database is hit exactly once for the whole batch.\n *\n * Window functions require PostgreSQL, MySQL >= 8.0, or SQLite >= 3.25.\n * Returns raw rows (NOT remapped); the caller groups + remaps them.\n */\nconst batchedPaginatedRelationQuery = async (\n db: any,\n targetTable: Table,\n foreignCol: Column,\n whereCondition: SQL | undefined,\n orderByArg: any,\n limit: number | null,\n offset: number | null,\n pkNames: readonly string[],\n): Promise<any[]> => {\n const cols = getColumns(targetTable);\n\n // Always tiebreak the window by the target's primary key so per-parent limit/offset\n // slices are deterministic even when the client supplies no (or a non-unique) orderBy.\n // pkNames is resolved at build time and includes composite keys.\n const orderExprs = [\n ...(orderByArg ? extractOrderBy(targetTable, orderByArg) : []),\n ...primaryKeyOrderExprs(targetTable, pkNames),\n ];\n const orderClause = orderExprs.length ? sql` order by ${sql.join(orderExprs, sql`, `)}` : sql``;\n // Namespaced alias so it can't collide with a real column on the target table.\n const RN = '__drizzle_graphql_rn';\n const rowNumber = sql`row_number() over (partition by ${foreignCol}${orderClause})`.as(RN);\n\n // Subquery: every target column plus a per-partition row number.\n const sub = db\n .select({ ...cols, [RN]: rowNumber })\n .from(targetTable)\n .where(whereCondition)\n .as('__paginated');\n\n // Outer: keep only the rows that fall inside each parent's window.\n const lower = offset ?? 0;\n const windowConds: any[] = [gt(sub[RN], lower)];\n if (limit != null) {\n windowConds.push(lte(sub[RN], lower + limit));\n }\n\n const rows: any[] = await db\n .select()\n .from(sub)\n .where(and(...windowConds))\n .orderBy(sub[RN]);\n\n // Strip the helper column so it doesn't leak into remapping/output.\n for (const row of rows) {\n delete row[RN];\n }\n return rows;\n};\n\n/**\n * Creates a RelationResolverFactory that generates field-level resolvers for each relation.\n * Each resolver:\n * 1. Returns pre-fetched data if the parent resolver already included it (eager path, zero cost).\n * 2. When limit/offset args are present, falls back to a direct per-item query.\n * 3. Otherwise batches all sibling resolver calls within the same GraphQL execution tick\n * into a single IN-clause query, eliminating N+1 database round-trips.\n */\nexport const createRelationResolverFactory =\n (db: any, tables: Record<string, Table>): RelationResolverFactory =>\n ({ tableName, relationName, relEntry, isOne }) => {\n const parentTable = tables[tableName];\n const targetTableName = relEntry.targetTableName;\n const targetTable = tables[targetTableName];\n\n if (!parentTable || !targetTable) {\n return undefined;\n }\n\n const joinCols = extractRelationJoinColumns(relEntry, parentTable, targetTable);\n if (!joinCols) {\n return undefined;\n }\n\n const { localColPropName, foreignCol, foreignColPropName } = joinCols;\n // Resolved at build time (composite keys included) — used to tiebreak paginated batches.\n const targetPkNames = relEntry.targetPkNames ?? [];\n\n return async (parent, args, context) => {\n // Eager path: the parent resolver pre-fetched this relation via Drizzle's `with`.\n if (parent[relationName] !== undefined) {\n return parent[relationName];\n }\n\n const localValue = parent[localColPropName];\n if (localValue == null) {\n return isOne ? null : [];\n }\n\n const { where: whereArg, orderBy: orderByArg, limit, offset } = (args ?? {}) as any;\n\n // Batch path: collect all sibling calls in this tick and execute one query.\n // Pagination args are part of the loader key so siblings sharing identical\n // args batch together; per-parent limit/offset is applied inside the batch\n // via a window function rather than bailing to a per-parent query (N+1).\n const argsKey = JSON.stringify({\n where: whereArg ?? null,\n orderBy: orderByArg ?? null,\n limit: limit ?? null,\n offset: offset ?? null,\n });\n const loaderKey = `${tableName}::${relationName}::${argsKey}`;\n\n const loader = getOrCreateLoader(context, loaderKey, async (parentIds: readonly any[]) => {\n const uniqueIds = [...new Set(parentIds)];\n const whereCondition = and(\n inArray(foreignCol, uniqueIds),\n whereArg ? extractFilters(targetTable, targetTableName, whereArg) : undefined,\n );\n\n let rows: any[];\n if (limit != null || offset != null) {\n // Per-parent pagination across the whole batch in one query.\n rows = await batchedPaginatedRelationQuery(\n db,\n targetTable,\n foreignCol,\n whereCondition,\n orderByArg,\n limit ?? null,\n offset ?? null,\n targetPkNames,\n );\n } else {\n // Use plain db.select() so column refs are never aliased — avoids drizzle-orm v1\n // RQB aliasing requirements that would require referencing via aliasedTable proxy.\n let q = db.select().from(targetTable).where(whereCondition) as any;\n if (orderByArg) {\n q = q.orderBy(...extractOrderBy(targetTable, orderByArg));\n }\n rows = await q;\n }\n\n // Group by FK value before remapping (remapping may delete null fields).\n if (isOne) {\n const byKey = new Map(rows.map((row: any) => [String(row[foreignColPropName]), row]));\n remapToGraphQLArrayOutput(rows, targetTableName, targetTable);\n return parentIds.map((id) => byKey.get(String(id)) ?? null);\n }\n\n const grouped = new Map<string, any[]>(uniqueIds.map((id) => [String(id), []]));\n for (const row of rows) {\n grouped.get(String(row[foreignColPropName]))?.push(row);\n }\n remapToGraphQLArrayOutput(rows, targetTableName, targetTable);\n return parentIds.map((id) => grouped.get(String(id)) ?? []);\n });\n\n return loader.load(localValue);\n };\n };\n\n/** Per-call cache context — created fresh on each generateSchemaData call to avoid type name collisions. */\nexport interface TypeCacheCtx {\n /** Cache of generic filter type pairs, keyed by generic name (e.g. \"String\", \"DateTime\"). */\n genericFilterCache: Map<string, { main: GraphQLInputObjectType; or: GraphQLInputObjectType }>;\n /**\n * Cache of shared select object types, keyed by table name.\n * Value: the ${capitalize(tableName)} type (columns + relation fields).\n * A table may be pre-registered here as a columns-only shell before its root call runs.\n * Use fullyBuiltTables to distinguish a complete type from a pre-registered shell.\n */\n objectTypeCache: Map<string, GraphQLObjectType>;\n /**\n * Mutable containers for relation fields, keyed by table name.\n * Each container object is closed over by the corresponding GraphQLObjectType thunk so that\n * when the root call for a table populates its relation fields, the thunk automatically picks\n * them up — even if the shell was pre-registered by a different table's relation traversal.\n */\n relationFieldContainers: Map<string, { fields: Record<string, ConvertedRelationColumnWithArgs> }>;\n /**\n * Set of table names whose GraphQL object type has been fully built (root call completed).\n * Pre-registered shells (created when another table references this table as a relation target)\n * are NOT in this set until the root call for that table runs.\n */\n fullyBuiltTables: Set<string>;\n /**\n * Cache of relation types, keyed by \"${fromTableName}::${relName}\".\n * @deprecated No longer used — relation fields now reference the target table's own type directly.\n */\n relationTypeCache: Map<string, GraphQLObjectType>;\n /** Per-call cache for order GraphQL input types, keyed by table reference. */\n orderTypeCache: WeakMap<object, GraphQLInputObjectType>;\n /** Per-call cache for filter GraphQL input types, keyed by table reference. */\n filterTypeCache: WeakMap<object, GraphQLInputObjectType>;\n}\n\nexport const extractSelectedColumnsFromTree = (\n tree: Record<string, ResolveTree>,\n table: Table,\n): Record<string, true> => {\n const tableColumns = getColumns(table);\n\n const treeEntries = Object.entries(tree);\n const selectedColumns: SelectedColumnsRaw = [];\n\n for (const [_fieldName, fieldData] of treeEntries) {\n if (!tableColumns[fieldData.name]) {\n continue;\n }\n\n selectedColumns.push([fieldData.name, true]);\n }\n\n if (!selectedColumns.length) {\n const columnKeys = Object.entries(tableColumns);\n const columnName =\n columnKeys.find((e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram))?.[0] ?? columnKeys[0]![0];\n\n selectedColumns.push([columnName, true]);\n }\n\n return Object.fromEntries(selectedColumns);\n};\n\n/**\n * Can't automatically determine column type on type level\n * Since drizzle table types extend eachother\n */\nexport const extractSelectedColumnsFromTreeSQLFormat = <TColType extends Column = Column>(\n tree: Record<string, ResolveTree>,\n table: Table,\n): Record<string, TColType> => {\n const tableColumns = getColumns(table);\n\n const treeEntries = Object.entries(tree);\n const selectedColumns: SelectedSQLColumns = [];\n\n for (const [_fieldName, fieldData] of treeEntries) {\n if (!tableColumns[fieldData.name]) {\n continue;\n }\n\n selectedColumns.push([fieldData.name, tableColumns[fieldData.name]!]);\n }\n\n if (!selectedColumns.length) {\n const columnKeys = Object.entries(tableColumns);\n const columnName =\n columnKeys.find((e) => rqbCrashTypes.find((haram) => e[1].columnType !== haram))?.[0] ?? columnKeys[0]![0];\n\n selectedColumns.push([columnName, tableColumns[columnName]!]);\n }\n\n return Object.fromEntries(selectedColumns) as Record<string, TColType>;\n};\n\nexport const innerOrder = new GraphQLInputObjectType({\n name: 'InnerOrder' as const,\n fields: {\n direction: {\n type: new GraphQLNonNull(\n new GraphQLEnumType({\n name: 'OrderDirection',\n description: 'Order by direction',\n values: {\n asc: {\n value: 'asc',\n description: 'Ascending order',\n },\n desc: {\n value: 'desc',\n description: 'Descending order',\n },\n },\n }),\n ),\n },\n priority: {\n type: new GraphQLNonNull(GraphQLInt),\n description: 'Priority of current field',\n },\n } as const,\n});\n\n/**\n * Maps a Drizzle column to the generic filter type name to use.\n * - \"Id\" → uuid PK/FK columns (no like/ilike operators)\n * - \"DateTime\" → timestamp and date columns\n * - \"Boolean\" → boolean columns\n * - the enum GraphQL type name → enum columns (still unique per enum)\n * - \"IntArray\" → integer[]/serial[] array columns\n * - \"FloatArray\" → float[]/numeric[] array columns\n * - \"String\" → all other text/varchar columns\n */\nconst resolveGenericFilterName = (\n column: Column,\n columnName: string,\n columnGraphQLType: ReturnType<typeof drizzleColumnToGraphQLType>,\n): string => {\n // ID / foreign-key columns\n if (columnName === 'id' || columnName.endsWith('Id')) {\n return 'Id';\n }\n // Boolean scalar\n if (columnGraphQLType.type === GraphQLBoolean) {\n return 'Boolean';\n }\n // Enum type — keep unique per enum since values differ\n if (columnGraphQLType.type instanceof GraphQLEnumType) {\n return columnGraphQLType.type.name;\n }\n // Array columns — give them a distinct name so they never collide with StringFilter.\n // integer().array() columns have a `dimensions` property set on them.\n if (columnGraphQLType.type instanceof GraphQLList) {\n const desc = (columnGraphQLType as any).description ?? '';\n return desc.includes('Integer') ? 'IntArray' : 'FloatArray';\n }\n // Date / timestamp columns (check Drizzle internal columnType string)\n const ct: string = (column as any).columnType ?? '';\n if (ct === 'PgTimestamp' || ct === 'PgTimestampString' || ct === 'PgDate') {\n return 'DateTime';\n }\n // Default: plain text/varchar\n return 'String';\n};\n\nconst generateColumnFilterValues = (\n column: Column,\n tableName: string,\n columnName: string,\n cacheCtx: TypeCacheCtx,\n): GraphQLInputObjectType => {\n const columnGraphQLType = drizzleColumnToGraphQLType(column, columnName, tableName, true, false, true);\n\n const genericName = resolveGenericFilterName(column, columnName, columnGraphQLType);\n const cached = cacheCtx.genericFilterCache.get(genericName);\n if (cached) {\n return cached.main;\n }\n\n const colType = columnGraphQLType.type;\n const colDesc = columnGraphQLType.description;\n const colArr = new GraphQLList(new GraphQLNonNull(colType));\n\n // IdFilter omits like/notLike/ilike/notIlike — they are nonsensical on UUIDs.\n const isId = genericName === 'Id';\n\n const baseFields = {\n eq: { type: colType, description: colDesc },\n ne: { type: colType, description: colDesc },\n lt: { type: colType, description: colDesc },\n lte: { type: colType, description: colDesc },\n gt: { type: colType, description: colDesc },\n gte: { type: colType, description: colDesc },\n ...(isId\n ? {}\n : {\n like: { type: GraphQLString },\n notLike: { type: GraphQLString },\n ilike: { type: GraphQLString },\n notIlike: { type: GraphQLString },\n }),\n inArray: { type: colArr, description: `Array<${colDesc}>` },\n notInArray: { type: colArr, description: `Array<${colDesc}>` },\n isNull: { type: GraphQLBoolean },\n isNotNull: { type: GraphQLBoolean },\n };\n\n const orType = new GraphQLInputObjectType({\n name: `${genericName}FilterOr`,\n fields: { ...baseFields },\n });\n\n const mainType = new GraphQLInputObjectType({\n name: `${genericName}Filter`,\n fields: {\n ...baseFields,\n OR: {\n type: new GraphQLList(new GraphQLNonNull(orType)),\n },\n },\n });\n\n cacheCtx.genericFilterCache.set(genericName, { main: mainType, or: orType });\n return mainType;\n};\n\nconst orderMap = new WeakMap<object, Record<string, ConvertedInputColumn>>();\nconst generateTableOrderCached = (table: Table) => {\n if (orderMap.has(table)) {\n return orderMap.get(table)!;\n }\n\n let remapped = {};\n try {\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n remapped = Object.fromEntries(\n columnEntries.map(([columnName, _columnDescription]) => [columnName, { type: innerOrder }]),\n );\n\n orderMap.set(table, remapped);\n } catch (_err) {}\n return remapped;\n};\n\nconst filterMap = new WeakMap<object, Record<string, ConvertedInputColumn>>();\nconst generateTableFilterValuesCached = (table: Table, tableName: string, cacheCtx: TypeCacheCtx) => {\n if (filterMap.has(table)) {\n return filterMap.get(table)!;\n }\n\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const remapped = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n {\n type: generateColumnFilterValues(columnDescription, tableName, columnName, cacheCtx),\n },\n ]),\n );\n\n filterMap.set(table, remapped);\n\n return remapped;\n};\n\nconst fieldMap = new WeakMap<object, Record<string, ConvertedColumn>>();\nconst generateTableSelectTypeFieldsCached = (table: Table, tableName: string): Record<string, ConvertedColumn> => {\n if (fieldMap.has(table)) {\n return fieldMap.get(table)!;\n }\n\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const remapped = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName),\n ]),\n );\n\n fieldMap.set(table, remapped);\n\n return remapped;\n};\n\nconst generateTableOrderTypeCached = (\n table: Table,\n tableName: string,\n typeNameMapper: TypeNameMapper | undefined,\n cacheCtx: TypeCacheCtx,\n) => {\n if (cacheCtx.orderTypeCache.has(table)) {\n return cacheCtx.orderTypeCache.get(table)!;\n }\n\n const orderColumns = generateTableOrderCached(table);\n const order = new GraphQLInputObjectType({\n name: `${resolveTypeName(tableName, typeNameMapper)}OrderBy`,\n fields: orderColumns,\n });\n\n cacheCtx.orderTypeCache.set(table, order);\n\n return order;\n};\n\nconst generateTableFilterTypeCached = (\n table: Table,\n tableName: string,\n cacheCtx: TypeCacheCtx,\n typeNameMapper?: TypeNameMapper,\n) => {\n if (cacheCtx.filterTypeCache.has(table)) {\n return cacheCtx.filterTypeCache.get(table)!;\n }\n\n const filterColumns = generateTableFilterValuesCached(table, tableName, cacheCtx);\n const filters = new GraphQLInputObjectType({\n name: `${resolveTypeName(tableName, typeNameMapper)}Filters`,\n fields: {\n ...filterColumns,\n OR: {\n type: new GraphQLList(\n new GraphQLNonNull(\n new GraphQLInputObjectType({\n name: `${resolveTypeName(tableName, typeNameMapper)}FiltersOr`,\n fields: filterColumns,\n }),\n ),\n ),\n },\n },\n });\n\n cacheCtx.filterTypeCache.set(table, filters);\n\n return filters;\n};\n\n/**\n * Build the select fields for a table.\n * Creates:\n * - Main select type: ${capitalize(tableName)} (e.g. Users)\n * - Relation fields reference the target table's own type directly (e.g. posts: [Posts!]!)\n * rather than creating intermediate relation types.\n *\n * The function is called recursively for relation targets.\n * Cycle detection: usedTables tracks tables currently being processed in the call stack.\n * When we see a table already in usedTables, we stop recursing (no relation fields for that type).\n */\nconst generateSelectFields = <TWithOrder extends boolean>(\n tables: Record<string, Table>,\n tableName: string,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n fromTableName: string,\n fromRelationName: string,\n withOrder: TWithOrder,\n relationsDepthLimit: number | undefined,\n cacheCtx: TypeCacheCtx,\n typeNameMapper: TypeNameMapper | undefined,\n usedTables: Set<string> = new Set(),\n resolverFactory?: RelationResolverFactory,\n currentDepth: number = 0,\n): SelectData<TWithOrder> => {\n const table = tables[tableName]!;\n const order = withOrder ? generateTableOrderTypeCached(table, tableName, typeNameMapper, cacheCtx) : undefined;\n const filters = generateTableFilterTypeCached(table, tableName, cacheCtx, typeNameMapper);\n const tableFields = generateTableSelectTypeFieldsCached(table, tableName);\n\n const relationsForTable = relationMap[tableName];\n const relationEntries: [string, TableNamedRelations][] = relationsForTable ? Object.entries(relationsForTable) : [];\n\n // Depth limit: stop generating relation fields once we reach the configured maximum.\n // relationsDepthLimit: 0 → no relation fields on any type.\n // relationsDepthLimit: N → each table's own root call (depth 0) generates its relations,\n // but traversals beyond depth N stop, which prevents unbounded recursive generation.\n if (relationsDepthLimit !== undefined && currentDepth >= relationsDepthLimit) {\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n }\n\n // If this table is already being processed (cycle), stop recursing.\n // Return just the base fields with no relation fields.\n if (usedTables.has(tableName)) {\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n }\n\n // For the root call (fromTableName === '' && fromRelationName === ''), this builds the\n // main ${capitalize(tableName)}SelectItem type.\n // For recursive calls, this builds the relation type.\n const isRootCall = fromTableName === '' && fromRelationName === '';\n\n // If the root type has already been fully built (not just pre-registered as a shell), return early.\n if (isRootCall && cacheCtx.fullyBuiltTables.has(tableName)) {\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n }\n\n // Obtain or create the mutable relation-fields container for this table.\n // The container is a plain object whose `fields` property the GraphQLObjectType thunk reads.\n // Pre-registering it here (before recursion) allows sibling relation traversals to reference\n // the same single GraphQLObjectType instance even when it hasn't been fully built yet.\n let container = cacheCtx.relationFieldContainers.get(tableName);\n if (!container) {\n container = { fields: {} };\n cacheCtx.relationFieldContainers.set(tableName, container);\n }\n\n if (isRootCall && !cacheCtx.objectTypeCache.has(tableName)) {\n const typeName = resolveTypeName(tableName, typeNameMapper);\n // Pre-register shell with thunk BEFORE recursing to break circular refs.\n // The thunk reads container.fields, which will be populated after recursion completes.\n const shell = new GraphQLObjectType({\n name: typeName,\n fields: () => ({ ...tableFields, ...container!.fields }),\n });\n cacheCtx.objectTypeCache.set(tableName, shell);\n }\n\n // Build relation fields — recurse into each related table.\n // Mark this table as in-progress before recursing to detect cycles.\n if (relationEntries.length > 0) {\n const rawRelationFields: [string, ConvertedRelationColumnWithArgs][] = [];\n\n // Mark this table as currently being processed.\n const nextUsedTables = new Set(usedTables);\n nextUsedTables.add(tableName);\n\n for (const [relationName, relEntry] of relationEntries) {\n const { targetTableName } = relEntry;\n const relation = (relEntry as any).relation ?? relEntry;\n const isOne = is(relation, One);\n\n // Always recurse to get the target table's filters/order (needed for args).\n // The usedTables check inside the recursive call prevents actual infinite recursion.\n const relSelectData = generateSelectFields(\n tables,\n targetTableName,\n relationMap,\n tableName, // fromTableName for the relation type\n relationName, // fromRelationName for the relation type\n !isOne,\n relationsDepthLimit,\n cacheCtx,\n typeNameMapper,\n nextUsedTables,\n resolverFactory,\n currentDepth + 1,\n );\n\n // Use the target table's own GraphQL type directly instead of creating an intermediate relation type.\n // Ensure exactly one GraphQLObjectType instance exists for the target table.\n // If the root call for the target table has already run (or pre-registered a shell),\n // reuse that instance so the schema never contains duplicate type names.\n let relType = cacheCtx.objectTypeCache.get(targetTableName);\n if (!relType) {\n // The target table hasn't been processed yet. Pre-register a shell so that:\n // (a) this relation field has a concrete type reference, and\n // (b) when the target table's root call eventually runs, it reuses this same object.\n const targetTable = tables[targetTableName]!;\n const targetTableFields = generateTableSelectTypeFieldsCached(targetTable, targetTableName);\n // Get or create a container for the target table's relation fields.\n let targetContainer = cacheCtx.relationFieldContainers.get(targetTableName);\n if (!targetContainer) {\n targetContainer = { fields: {} };\n cacheCtx.relationFieldContainers.set(targetTableName, targetContainer);\n }\n const capturedTargetContainer = targetContainer;\n // The thunk reads capturedTargetContainer.fields so that when the target table's root\n // call populates the container, the shell automatically includes those relation fields.\n relType = new GraphQLObjectType({\n name: resolveTypeName(targetTableName, typeNameMapper),\n fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields }),\n });\n cacheCtx.objectTypeCache.set(targetTableName, relType);\n }\n\n const resolve = resolverFactory?.({ tableName, relationName, relEntry: relEntry as TableNamedRelations, isOne });\n\n if (isOne) {\n rawRelationFields.push([\n relationName,\n {\n type: relType,\n args: {\n where: { type: relSelectData.filters },\n },\n resolve,\n },\n ]);\n continue;\n }\n\n rawRelationFields.push([\n relationName,\n {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(relType))),\n args: {\n where: { type: relSelectData.filters },\n orderBy: { type: relSelectData.order! },\n offset: { type: GraphQLInt },\n limit: { type: GraphQLInt },\n },\n resolve,\n },\n ]);\n }\n\n const builtRelationFields = Object.fromEntries(rawRelationFields);\n\n // Only the root call should populate the container — non-root calls are temporary traversals\n // to collect filters/order for args and should not overwrite the canonical relation fields.\n if (isRootCall) {\n // Populate the container so that the thunk on the GraphQLObjectType shell (whether it was\n // created here or pre-registered by another table's relation traversal) picks up the fields.\n container.fields = builtRelationFields;\n cacheCtx.fullyBuiltTables.add(tableName);\n }\n\n return {\n order,\n filters,\n tableFields,\n relationFields: builtRelationFields,\n } as SelectData<TWithOrder>;\n }\n\n // No relation entries — mark as fully built if root call.\n if (isRootCall) {\n cacheCtx.fullyBuiltTables.add(tableName);\n }\n\n return {\n order,\n filters,\n tableFields,\n relationFields: {},\n } as SelectData<TWithOrder>;\n};\n\nexport const generateTableTypes = <WithReturning extends boolean>(\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n withReturning: WithReturning,\n relationsDepthLimit: number | undefined,\n cacheCtx: TypeCacheCtx,\n typeNameMapper: TypeNameMapper | undefined = undefined,\n insertPrefix: string = 'create',\n updatePrefix: string = 'update',\n resolverFactory?: RelationResolverFactory,\n): GeneratedTableTypes<WithReturning> => {\n const { tableFields, relationFields, filters, order } = generateSelectFields(\n tables,\n tableName,\n relationMap,\n '', // root call: no fromTableName\n '', // root call: no fromRelationName\n true,\n relationsDepthLimit,\n cacheCtx,\n typeNameMapper,\n new Set(),\n resolverFactory,\n 0,\n );\n\n const table = tables[tableName]!;\n const columns = getColumns(table);\n const columnEntries = Object.entries(columns);\n\n const insertFields = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName, false, true, true),\n ]),\n );\n\n const updateFields = Object.fromEntries(\n columnEntries.map(([columnName, columnDescription]) => [\n columnName,\n drizzleColumnToGraphQLType(columnDescription, columnName, tableName, true, false, true),\n ]),\n );\n\n // Insert/update input types: ${capitalize(insertPrefix)}${resolveTypeName(tableName)}Input / ${capitalize(updatePrefix)}${resolveTypeName(tableName)}Input\n const insertInput = new GraphQLInputObjectType({\n name: `${capitalize(insertPrefix)}${resolveTypeName(tableName, typeNameMapper)}Input`,\n fields: insertFields,\n });\n\n const updateInput = new GraphQLInputObjectType({\n name: `${capitalize(updatePrefix)}${resolveTypeName(tableName, typeNameMapper)}Input`,\n fields: updateFields,\n });\n\n // Select type: ${resolveTypeName(tableName)} (with relation fields)\n // Reuse the cached shell created in generateSelectFields.\n const selectSingleOutput =\n cacheCtx.objectTypeCache.get(tableName) ??\n new GraphQLObjectType({\n name: resolveTypeName(tableName, typeNameMapper),\n fields: { ...tableFields, ...relationFields },\n });\n\n const selectArrOutput = new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(selectSingleOutput)));\n\n // Mutation return type: ${capitalize(tableName)}Item (table columns only, no relations)\n // const singleTableItemOutput = withReturning\n // ? new GraphQLObjectType({\n // name: `${capitalize(tableName)}`,\n // // name: `${capitalize(tableName)}Item`,\n // fields: tableFields,\n // })\n // : undefined;\n\n const arrTableItemOutput = withReturning\n ? // ? new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(singleTableItemOutput!)))\n new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(selectSingleOutput!)))\n : undefined;\n\n const inputs = {\n insertInput,\n updateInput,\n tableOrder: order,\n tableFilters: filters,\n };\n\n const outputs = (\n withReturning\n ? {\n selectSingleOutput,\n selectArrOutput,\n singleTableItemOutput: selectSingleOutput!,\n // singleTableItemOutput: singleTableItemOutput!,\n arrTableItemOutput: arrTableItemOutput!,\n }\n : {\n selectSingleOutput,\n selectArrOutput,\n }\n ) as GeneratedTableTypesOutputs<WithReturning>;\n\n return {\n inputs,\n outputs,\n };\n};\n\nexport const extractOrderBy = <TTable extends Table, TArgs extends OrderByArgs<any> = OrderByArgs<TTable>>(\n table: TTable,\n orderArgs: TArgs,\n): SQL[] => {\n const res = [] as SQL[];\n\n for (const [column, config] of Object.entries(orderArgs).sort(\n (a, b) => (b[1]?.priority ?? 0) - (a[1]?.priority ?? 0),\n )) {\n if (!config) {\n continue;\n }\n const { direction } = config;\n\n res.push(direction === 'asc' ? asc(getColumns(table)[column]!) : desc(getColumns(table)[column]!));\n }\n\n return res;\n};\n\nexport const extractFiltersColumn = <TColumn extends Column>(\n column: TColumn,\n columnName: string,\n operators: FilterColumnOperators<TColumn>,\n): SQL | undefined => {\n if (!operators.OR?.length) {\n delete operators.OR;\n }\n\n const entries = Object.entries(operators as FilterColumnOperatorsCore<TColumn>);\n\n if (operators.OR) {\n if (entries.length > 1) {\n throw new GraphQLError(`WHERE ${columnName}: Cannot specify both fields and 'OR' in column operators!`);\n }\n\n const variants = [] as SQL[];\n\n for (const variant of operators.OR) {\n const extracted = extractFiltersColumn(column, columnName, variant);\n\n if (extracted) {\n variants.push(extracted);\n }\n }\n\n return variants.length ? (variants.length > 1 ? or(...variants) : variants[0]) : undefined;\n }\n\n const singleValueOps: Record<string, (...args: any[]) => SQL> = { eq, ne, gt, gte, lt, lte };\n const stringValueOps: Record<string, (...args: any[]) => SQL> = { like, notLike, ilike, notIlike };\n const arrayValueOps: Record<string, (...args: any[]) => SQL> = { inArray, notInArray };\n const nullableOps: Record<string, (...args: any[]) => SQL> = { isNull, isNotNull };\n\n const variants = [] as SQL[];\n for (const [operatorName, operatorValue] of entries) {\n if (operatorValue === null || operatorValue === false) {\n continue;\n }\n\n if (operatorName in singleValueOps) {\n const singleValue = remapFromGraphQLCore(operatorValue, column, columnName);\n variants.push(singleValueOps[operatorName]!(column, singleValue));\n } else if (operatorName in stringValueOps) {\n variants.push(stringValueOps[operatorName]!(column, operatorValue as string));\n } else if (operatorName in arrayValueOps) {\n if (!(operatorValue as any[]).length) {\n throw new GraphQLError(`WHERE ${columnName}: Unable to use operator ${operatorName} with an empty array!`);\n }\n const arrayValue = (operatorValue as any[]).map((val) => remapFromGraphQLCore(val, column, columnName));\n variants.push(arrayValueOps[operatorName]!(column, arrayValue));\n } else if (operatorName in nullableOps) {\n variants.push(nullableOps[operatorName]!(column));\n }\n }\n\n return variants.length ? (variants.length > 1 ? and(...variants) : variants[0]) : undefined;\n};\n\nexport const extractFilters = <TTable extends Table>(\n table: TTable,\n tableName: string,\n filters: Filters<TTable>,\n): SQL | undefined => {\n if (!filters.OR?.length) {\n delete filters.OR;\n }\n\n const entries = Object.entries(filters as FiltersCore<TTable>);\n if (!entries.length) {\n return;\n }\n\n if (filters.OR) {\n if (entries.length > 1) {\n throw new GraphQLError(`WHERE ${tableName}: Cannot specify both fields and 'OR' in table filters!`);\n }\n\n const variants = [] as SQL[];\n\n for (const variant of filters.OR) {\n const extracted = extractFilters(table, tableName, variant);\n if (extracted) {\n variants.push(extracted);\n }\n }\n\n return variants.length ? (variants.length > 1 ? or(...variants) : variants[0]) : undefined;\n }\n\n const variants = [] as SQL[];\n for (const [columnName, operators] of entries) {\n if (operators === null) {\n continue;\n }\n\n const column = getColumns(table)[columnName]!;\n variants.push(extractFiltersColumn(column, columnName, operators)!);\n }\n\n return variants.length ? (variants.length > 1 ? and(...variants) : variants[0]) : undefined;\n};\n\nconst extractRelationsParamsInner = (\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n tables: Record<string, Table>,\n tableName: string,\n typeName: string,\n originField: ResolveTree,\n typeNameMapper?: TypeNameMapper,\n _isInitial: boolean = false,\n) => {\n const relationsForTable = relationMap[tableName];\n if (!relationsForTable) {\n return undefined;\n }\n\n const baseField = Object.entries(originField.fieldsByTypeName).find(([key, _value]) => key === typeName)?.[1];\n if (!baseField) {\n return undefined;\n }\n\n const args: Record<string, Partial<ProcessedTableSelectArgs>> = {};\n\n for (const [relName, relEntry] of Object.entries(relationsForTable)) {\n const { targetTableName, targetPkNames } = relEntry;\n // The relation field resolves to the target table's own type, e.g. \"Posts\" not \"UsersPostsRelation\".\n const relTypeName = resolveTypeName(targetTableName, typeNameMapper);\n // Look up by field name OR by alias (when the caller uses an alias for the relation).\n // graphql-parse-resolve-info keys fieldsByTypeName entries by alias.\n const field = baseField[relName] ?? Object.values(baseField).find((f) => (f as ResolveTree).name === relName);\n if (!field) {\n continue;\n }\n const relField = (field as ResolveTree)?.fieldsByTypeName;\n const relFieldSelection = relField?.[relTypeName];\n\n // Guard: if the relation type is not in fieldsByTypeName, this field is\n // either an aliased scalar column (not an actual relation) or the relation\n // was not selected in the query. Skip it in both cases.\n if (!relFieldSelection) {\n continue;\n }\n\n const columns = extractSelectedColumnsFromTree(relFieldSelection, tables[targetTableName]!);\n\n const thisRecord: Partial<ProcessedTableSelectArgs> = {};\n thisRecord.columns = columns;\n\n const relationField = Object.values(baseField).find((e) => e.name === relName);\n const relationArgs: Partial<TableSelectArgs> | undefined = relationField?.args;\n\n const offset = relationArgs?.offset ?? undefined;\n const limit = relationArgs?.limit ?? undefined;\n\n // drizzle-orm v1 RQB calls both `where` and `orderBy` callbacks with an\n // aliased table proxy (e.g. d0, d1). Pass the proxy through so column\n // references in the generated SQL match the CTE alias rather than the\n // original unaliased table name.\n const relWhere = relationArgs?.where;\n thisRecord.where = relWhere\n ? { RAW: (aliasedTable: Table) => extractFilters(aliasedTable, relName, relWhere) }\n : undefined;\n // When a relation is paginated (limit/offset) but unordered, default to the target's\n // primary key so the per-parent slice is deterministic. Drizzle's RQB calls orderBy\n // with the aliased table proxy, so resolve the PK columns from it. targetPkNames is\n // resolved at build time and includes composite keys.\n const hasPagination = offset != null || limit != null;\n const pkNames = targetPkNames ?? [];\n thisRecord.orderBy = relationArgs?.orderBy\n ? (aliasedTable: Table) => extractOrderBy(aliasedTable, relationArgs.orderBy!)\n : hasPagination && pkNames.length\n ? (aliasedTable: Table) => primaryKeyOrderExprs(aliasedTable, pkNames)\n : undefined;\n thisRecord.offset = offset;\n thisRecord.limit = limit;\n\n const relWith = relationField\n ? extractRelationsParamsInner(relationMap, tables, targetTableName, relTypeName, relationField, typeNameMapper)\n : undefined;\n thisRecord.with = relWith;\n\n args[relName] = thisRecord;\n }\n\n return args;\n};\n\nexport const extractRelationsParams = (\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n tables: Record<string, Table>,\n tableName: string,\n info: ResolveTree | undefined,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): Record<string, Partial<ProcessedTableSelectArgs>> | undefined => {\n if (!info) {\n return undefined;\n }\n\n return extractRelationsParamsInner(relationMap, tables, tableName, typeName, info, typeNameMapper, true);\n};\n\n/**\n * Returns a copy of `relationMap` containing only the relations that should be eagerly\n * pre-fetched (per the `shouldEagerLoad` predicate). Pass the result wherever a query or\n * mutation resolver builds its `with:` clause; pass the full map to type generation so\n * opted-out relations still get a (lazily-resolved) field. Relations excluded here are\n * never added to `with:`, so they don't overfetch — they resolve through their field\n * resolver instead (or a resolver you override, e.g. via `@graphql-tools/schema`).\n */\nexport const pruneNonEagerRelations = (\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n shouldEagerLoad: (tableName: string, relationName: string) => boolean,\n): Record<string, Record<string, TableNamedRelations>> => {\n const out: Record<string, Record<string, TableNamedRelations>> = {};\n for (const [tableName, rels] of Object.entries(relationMap)) {\n out[tableName] = Object.fromEntries(\n Object.entries(rels).filter(([relationName]) => shouldEagerLoad(tableName, relationName)),\n );\n }\n return out;\n};\n\n/**\n * Returns the property names of a table's primary key column(s).\n *\n * drizzle-orm marks inline `.primaryKey()` columns with `column.primary === true`,\n * but table-level composite keys (`primaryKey({ columns })`) leave `column.primary`\n * false on each member — those are only visible via the per-dialect `getTableConfig`.\n * Dialect builders pass the composite members' DB column names in via\n * `compositePkColumnNames`; we map them back to property names here.\n *\n * Resolution order: inline PK columns → composite PK columns → empty. We deliberately\n * do NOT guess a column named `id`: if no real primary key is declared, returning empty\n * lets callers fall back to the batch loader rather than re-keying on a possibly\n * non-unique column.\n */\nexport const getPrimaryKeyPropNames = (table: Table, compositePkColumnNames?: readonly string[]): string[] => {\n const cols = getColumns(table);\n const entries = Object.entries(cols);\n\n // Inline single `.primaryKey()` columns.\n const inlinePks = entries.filter(([, c]) => (c as any).primary).map(([k]) => k);\n if (inlinePks.length) {\n return inlinePks;\n }\n\n // Composite primary key (DB column names supplied by the dialect builder).\n if (compositePkColumnNames?.length) {\n const wanted = new Set(compositePkColumnNames);\n const fromComposite = entries.filter(([, c]) => wanted.has((c as any).name)).map(([k]) => k);\n if (fromComposite.length) {\n return fromComposite;\n }\n }\n\n // No declared primary key — let the caller fall back to the batch loader.\n return [];\n};\n\n/**\n * Ensures a selected-columns map (SQL format: prop name → Column) includes the table's\n * primary-key columns. Mutation resolvers pass their RETURNING columns through this so\n * the eager-loader can re-key rows by PK even when the client didn't select it. Mutates\n * and returns the same map.\n */\nexport const withPrimaryKeyColumns = <T extends Record<string, any>>(\n columns: T,\n table: Table,\n pkNames: readonly string[],\n): T => {\n const allCols = getColumns(table);\n for (const pk of pkNames) {\n if (!(pk in columns) && allCols[pk]) {\n (columns as any)[pk] = allCols[pk];\n }\n }\n return columns;\n};\n\n/**\n * Resolves a table's primary-key property names using a dialect's `getTableConfig` to\n * surface table-level composite keys (whose member columns aren't flagged `.primary`).\n * Each dialect builder binds this with its own getTableConfig and reuses the binding for\n * both relation pagination and mutation re-fetch keying.\n */\nexport const getPrimaryKeyPropNamesFromConfig = (\n table: Table,\n getTableConfig: (table: Table) => { primaryKeys: { columns: { name: string }[] }[] },\n): string[] => {\n const compositePkColumnNames = getTableConfig(table).primaryKeys.flatMap((pk) => pk.columns.map((c) => c.name));\n return getPrimaryKeyPropNames(table, compositePkColumnNames);\n};\n\n/**\n * Ascending order expressions for a table's primary key — the deterministic tiebreak for\n * paginated relations. Shared by the window-function batch path and the eager `with:`\n * orderBy default so both order identically. `table` may be the aliased RQB proxy.\n */\nexport const primaryKeyOrderExprs = (table: Table, pkNames: readonly string[]): any[] => {\n const cols = getColumns(table);\n return pkNames\n .map((n) => cols[n])\n .filter(Boolean)\n .map((col) => asc(col!));\n};\n\n/**\n * Computes the RETURNING columns and relation selection for a mutation resolver: extracts\n * the selected scalar columns, determines whether any relations were selected, and only\n * then forces the primary key into the column set (so the post-mutation eager-load can\n * re-key rows). Returns everything the resolver needs to decide whether to eager-load.\n */\nexport const prepareMutationRelationColumns = (params: {\n relationMap: Record<string, Record<string, TableNamedRelations>>;\n tables: Record<string, Table>;\n tableName: string;\n typeName: string;\n typeNameMapper: TypeNameMapper | undefined;\n table: Table;\n pkNames: readonly string[];\n parsedInfo: ResolveTree;\n}): {\n columns: Record<string, Column>;\n hasRelations: boolean;\n withParams: Record<string, Partial<ProcessedTableSelectArgs>> | undefined;\n} => {\n const { relationMap, tables, tableName, typeName, typeNameMapper, table, pkNames, parsedInfo } = params;\n const withParams = relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, typeNameMapper)\n : undefined;\n const hasRelations = !!(withParams && Object.keys(withParams).length);\n const baseColumns = extractSelectedColumnsFromTreeSQLFormat(parsedInfo.fieldsByTypeName[typeName]!, table);\n const columns = hasRelations ? withPrimaryKeyColumns(baseColumns, table, pkNames) : baseColumns;\n return { columns, hasRelations, withParams };\n};\n\n/** Wraps a thrown Error as a (message-only) GraphQLError; passes non-Errors through unchanged. */\nexport const toGraphQLError = (e: unknown): unknown => (e instanceof Error ? new GraphQLError(e.message) : e);\n\n/**\n * Derives the generated query/mutation field names for a table from the naming config\n * (typeNameMapper + prefixes/suffixes). Shared by all three dialect builders.\n */\nexport const computeResolverFieldNames = (\n tableName: string,\n typeNameMapper: TypeNameMapper | undefined,\n prefixes: { insert: string; update: string; delete: string },\n suffixes: { list: string; single: string },\n): {\n typeName: string;\n listFieldName: string;\n singleFieldName: string;\n createArrayFieldName: string;\n createSingleFieldName: string;\n updateFieldName: string;\n deleteFieldName: string;\n} => {\n const mapped = typeNameMapper?.(tableName);\n const typeName = mapped ? capitalize(mapped.singular) : capitalize(tableName);\n const listFieldName = (mapped?.plural ?? uncapitalize(tableName)) + suffixes.list;\n const singleFieldName = mapped?.singular ?? uncapitalize(tableName) + suffixes.single;\n const createArrayFieldName = `${prefixes.insert}${mapped ? capitalize(mapped.plural) : capitalize(tableName)}`;\n const createSingleFieldName = mapped\n ? `${prefixes.insert}${capitalize(mapped.singular)}`\n : `${prefixes.insert}${capitalize(tableName)}${suffixes.single}`;\n const updateFieldName = `${prefixes.update}${mapped ? capitalize(mapped.singular) : capitalize(tableName)}`;\n const deleteFieldName = `${prefixes.delete}${mapped ? capitalize(mapped.singular) : capitalize(tableName)}`;\n return {\n typeName,\n listFieldName,\n singleFieldName,\n createArrayFieldName,\n createSingleFieldName,\n updateFieldName,\n deleteFieldName,\n };\n};\n\n/** GraphQL argument map for a list/array select field. */\nexport const selectArrayArgs = (\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n): Record<string, { type: any }> => ({\n offset: { type: GraphQLInt },\n limit: { type: GraphQLInt },\n orderBy: { type: orderArgs },\n where: { type: filterArgs },\n});\n\n/** GraphQL argument map for a single-row select field (no `limit`). */\nexport const selectSingleArgs = (\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n): Record<string, { type: any }> => ({\n offset: { type: GraphQLInt },\n orderBy: { type: orderArgs },\n where: { type: filterArgs },\n});\n\n/**\n * Runs the relational-query-builder select shared by every dialect's `generateSelect*`\n * resolver: selected columns + offset/limit + aliased orderBy/where callbacks + the eager\n * `with:` relation params, then remaps the result. `single` switches between\n * findFirst/findMany (and the single path omits `limit`). The PG fallback for tables\n * without RQB support stays in pg.ts; this covers the common RQB path for all three.\n */\nexport const runRelationalSelect = async (opts: {\n queryBase: any;\n tables: Record<string, Table>;\n tableName: string;\n table: Table;\n relationMap: Record<string, Record<string, TableNamedRelations>>;\n typeName: string;\n typeNameMapper: TypeNameMapper | undefined;\n parsedInfo: ResolveTree;\n offset?: number;\n limit?: number;\n orderBy?: any;\n where?: any;\n single: boolean;\n}): Promise<any> => {\n const {\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n offset,\n orderBy,\n where,\n single,\n } = opts;\n const params: any = {\n columns: extractSelectedColumnsFromTree(parsedInfo.fieldsByTypeName[typeName]!, table),\n offset,\n // drizzle-orm v1 RQB calls orderBy/where with the aliased table proxy — use it\n // directly so column refs match the CTE alias.\n orderBy: orderBy ? (aliasedTable: Table) => extractOrderBy(aliasedTable, orderBy) : undefined,\n where: where ? { RAW: (aliasedTable: Table) => extractFilters(aliasedTable, tableName, where) } : undefined,\n with: relationMap[tableName]\n ? extractRelationsParams(relationMap, tables, tableName, parsedInfo, typeName, typeNameMapper)\n : undefined,\n };\n\n if (single) {\n const result = await queryBase.findFirst(params);\n return result ? remapToGraphQLSingleOutput(result, tableName, table, relationMap) : undefined;\n }\n\n params.limit = opts.limit;\n const result = await queryBase.findMany(params);\n return remapToGraphQLArrayOutput(result, tableName, table, relationMap);\n};\n\n/**\n * After a mutation, re-fetch the mutated rows through the relational query builder so the\n * selected relations are eagerly loaded in a single query, then merge those relations onto\n * the `.returning()` rows — making the per-field BatchLoader fallback unnecessary.\n *\n * `withParams` is the pre-computed relation selection (from extractRelationsParams); the\n * caller only invokes this when relations are actually selected, so it also gates whether\n * the PK was forced into RETURNING.\n *\n * Falls back to the original `.returning()` rows (relations then resolve via the\n * field-level BatchLoader) when the table has no RQB support, no primary key columns can be\n * determined, or the re-fetch fails. Supports single- and multi-column primary keys.\n */\nexport const eagerLoadMutationRelations = async (\n db: any,\n tableName: string,\n rows: any[],\n pkNames: readonly string[],\n withParams: Record<string, Partial<ProcessedTableSelectArgs>> | undefined,\n): Promise<any[]> => {\n if (!rows.length || !pkNames.length || !withParams || !Object.keys(withParams).length) {\n return rows;\n }\n\n const queryBase = db.query?.[tableName];\n if (!queryBase) {\n return rows;\n }\n\n // Only rows that carry every PK value can be re-keyed. Callers force the PK into\n // RETURNING, but if a value is still missing for some rows, eager-load just those that\n // are keyable and leave the rest untouched (their relations resolve lazily) rather than\n // bailing the whole batch.\n const keyableRows = rows.filter((row) => pkNames.every((n) => row[n] != null));\n if (!keyableRows.length) {\n return rows;\n }\n\n // Re-fetch ONLY the primary key + relations: the scalar columns are already present\n // on `rows` from RETURNING, so re-selecting them would transfer them a second time\n // (and would lose them on the fallback path). We merge the fetched relations back in.\n const pkColumns: Record<string, true> = {};\n for (const pk of pkNames) {\n pkColumns[pk] = true;\n }\n const relationNames = Object.keys(withParams);\n\n // Normalize bigint PK values to strings: JSON.stringify throws on bigint, and a\n // bigint and its string form never collide within a single column's values.\n const keyOf = (row: any) =>\n JSON.stringify(pkNames.map((n) => (typeof row[n] === 'bigint' ? row[n].toString() : row[n])));\n\n let whereRaw: (aliased: any) => SQL | undefined;\n if (pkNames.length === 1) {\n const pkName = pkNames[0]!;\n const ids = keyableRows.map((r) => r[pkName]);\n // drizzle-orm v1 RQB calls the where callback with the aliased table proxy;\n // reference the PK through it so the column ref matches the CTE alias.\n whereRaw = (aliased: any) => inArray(aliased[pkName], ids);\n } else {\n // Composite PK: use a row-value IN — `(a, b) IN ((..), (..))` — so the database can\n // plan it as a set membership test, instead of an OR of N per-row AND-tuples that\n // blows up for large bulk mutations.\n whereRaw = (aliased: any) => {\n const lhs = sql.join(\n pkNames.map((n) => sql`${aliased[n]}`),\n sql`, `,\n );\n const tuples = sql.join(\n keyableRows.map(\n (row) =>\n sql`(${sql.join(\n pkNames.map((n) => sql`${row[n]}`),\n sql`, `,\n )})`,\n ),\n sql`, `,\n );\n return sql`(${lhs}) in (${tuples})`;\n };\n }\n\n let enriched: any[];\n try {\n enriched = await queryBase.findMany({\n columns: pkColumns,\n where: { RAW: whereRaw },\n with: withParams,\n });\n } catch (err) {\n // The write has already committed; a re-fetch failure (e.g. an RQB-incompatible\n // column or relation) must not turn a successful mutation into an error. Fall back\n // to the raw rows — relations then resolve lazily via the batch loader — but surface\n // the cause so a genuine misconfiguration isn't silently hidden.\n console.warn(\n `[drizzle-graphql] eager-loading relations for a \"${tableName}\" mutation failed; ` +\n 'falling back to lazy resolution.',\n err,\n );\n return rows;\n }\n\n // Merge the fetched relations onto the RETURNING rows in place, preserving order. A row\n // the re-fetch didn't return (e.g. deleted concurrently) keeps its scalar columns and\n // its relations resolve lazily, so the result never reports fewer rows than were mutated.\n const byKey = new Map(enriched.map((e) => [keyOf(e), e]));\n for (const row of rows) {\n const match = byKey.get(keyOf(row));\n if (!match) {\n continue;\n }\n for (const rel of relationNames) {\n row[rel] = match[rel];\n }\n }\n return rows;\n};\n","// @ts-nocheck\nconst DRIZZLE_LOADERS_KEY = Symbol('drizzle-graphql-loaders');\n\ntype BatchFn<K, V> = (keys: readonly K[]) => Promise<readonly V[]>;\n\nclass BatchLoader<K, V> {\n private batch: Array<{ key: K; resolve: (v: V) => void; reject: (e: unknown) => void }> = [];\n private scheduled = false;\n\n constructor(private readonly batchFn: BatchFn<K, V>) {}\n\n load(key: K): Promise<V> {\n return new Promise<V>((resolve, reject) => {\n this.batch.push({ key, resolve, reject });\n if (!this.scheduled) {\n this.scheduled = true;\n Promise.resolve().then(() => this.dispatch());\n }\n });\n }\n\n private async dispatch(): Promise<void> {\n const current = this.batch.splice(0);\n this.scheduled = false;\n try {\n const results = await this.batchFn(current.map(({ key }) => key));\n for (let i = 0; i < current.length; i++) {\n current[i]!.resolve(results[i] as V);\n }\n } catch (err) {\n for (const { reject } of current) {\n reject(err);\n }\n }\n }\n}\n\n/**\n * Returns a BatchLoader keyed by `key` on the GraphQL context object.\n * Loaders are stored under a Symbol so they never collide with consumer properties.\n * If context is absent or not an object, a fresh (unbatched) loader is returned.\n */\nexport const getOrCreateLoader = <K, V>(context: any, key: string, batchFn: BatchFn<K, V>): BatchLoader<K, V> => {\n if (!context || typeof context !== 'object') {\n return new BatchLoader<K, V>(batchFn);\n }\n if (!context[DRIZZLE_LOADERS_KEY]) {\n context[DRIZZLE_LOADERS_KEY] = new Map<string, BatchLoader<any, any>>();\n }\n const loaders = context[DRIZZLE_LOADERS_KEY] as Map<string, BatchLoader<any, any>>;\n if (!loaders.has(key)) {\n loaders.set(key, new BatchLoader<K, V>(batchFn));\n }\n return loaders.get(key) as BatchLoader<K, V>;\n};\n","import pluralize from 'pluralize';\n\nexport const uncapitalize = <T extends string>(input: T) =>\n (input?.length\n ? `${input[0]!.toLocaleLowerCase()}${input.length > 1 ? input.slice(1, input.length) : ''}`\n : input) as Uncapitalize<T>;\n\nexport const capitalize = <T extends string>(input: T) =>\n (input?.length\n ? `${input[0]!.toLocaleUpperCase()}${input.length > 1 ? input.slice(1, input.length) : ''}`\n : input) as Capitalize<T>;\n\nexport const singularize = <T extends string>(input: T) => pluralize.singular(input);\n\nexport const cleanTableName = <T extends string>(input: T) => singularize(uncapitalize(input));\n\nexport const tableNameToModel = <T extends string>(input: T) => singularize(capitalize(input));\n\n// (input.length\n// ? `${input[-]!.toLocaleUpperCase()}${input.length > 1 ? input.slice(1, input.length) : \"\"}`\n// : input) as Capitalize<T>;\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { type Column, getTableColumns, is, One, type Table } from 'drizzle-orm';\nimport { GraphQLError } from 'graphql';\nimport type { TableNamedRelations } from '../builders/index.ts';\n\nexport const remapToGraphQLCore = (\n key: string,\n value: any,\n tableName: string,\n column: Column,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n): any => {\n // Check for relation fields BEFORE the column check.\n // Relation fields don't have corresponding table columns.\n if (Array.isArray(value)) {\n const relations = relationMap?.[tableName];\n if (relations?.[key]) {\n const rel = relations[key]!;\n return remapToGraphQLArrayOutput(\n value,\n rel.targetTableName,\n (rel.relation as any)?.targetTable ?? (rel.relation as any)?.referencedTable,\n relationMap,\n );\n }\n }\n\n if (typeof value === 'object' && value !== null) {\n const relations = relationMap?.[tableName];\n if (relations?.[key]) {\n const rel = relations[key]!;\n const remapped = remapToGraphQLSingleOutput(\n value,\n rel.targetTableName,\n (rel.relation as any)?.targetTable ?? (rel.relation as any)?.referencedTable,\n relationMap,\n );\n return remapped;\n }\n }\n\n // For non-relation fields, require a column definition.\n if (!column) {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Buffer) {\n return Array.from(value);\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n if (column.columnType === 'PgGeometry' || column.columnType === 'PgVector') {\n return value;\n }\n\n return value.map((arrVal) => remapToGraphQLCore(key, arrVal, tableName, column, relationMap));\n }\n\n if (typeof value === 'object' && value !== null) {\n if (column.columnType === 'PgGeometryObject') {\n return value;\n }\n\n return JSON.stringify(value);\n }\n\n return value;\n};\n\nexport const remapToGraphQLSingleOutput = (\n queryOutput: Record<string, any>,\n tableName: string,\n table: Table,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n) => {\n for (const [key, value] of Object.entries(queryOutput)) {\n if (value === undefined || value === null) {\n // Preserve an explicitly-null TO-ONE relation field (eager-loaded with no related\n // row) as null, so the relation's field resolver returns null directly instead of\n // re-querying it through the batch loader. Only to-one relations are nullable; a\n // to-many relation is a non-null list, so a null there must fall through to deletion\n // (the field resolver then resolves it to []) rather than be emitted as null.\n const relEntry = value === null ? relationMap?.[tableName]?.[key] : undefined;\n if (relEntry && is(relEntry.relation, One)) {\n queryOutput[key] = null;\n continue;\n }\n delete queryOutput[key];\n continue;\n }\n\n const column = table[key as keyof Table] as Column | undefined;\n\n // SQLite blob(bigint) returns 0n for null DB values — treat as absent when nullable.\n if (value === 0n && column && (column as any).columnType === 'SQLiteBigInt' && !(column as any).notNull) {\n delete queryOutput[key];\n continue;\n }\n\n queryOutput[key] = remapToGraphQLCore(key, value, tableName, column!, relationMap);\n }\n\n return queryOutput;\n};\n\nexport const remapToGraphQLArrayOutput = (\n queryOutput: Record<string, any>[],\n tableName: string,\n table: Table,\n relationMap?: Record<string, Record<string, TableNamedRelations>>,\n) => {\n for (const entry of queryOutput) {\n remapToGraphQLSingleOutput(entry, tableName, table, relationMap);\n }\n\n return queryOutput;\n};\n\nexport const remapFromGraphQLCore = (value: any, column: Column, columnName: string) => {\n // drizzle-orm v1 uses compound dataType strings (e.g. \"object date\", \"bigint int64\").\n // We must check inclusion rather than equality to handle these cases.\n const dataType: string = (column as any).dataType ?? '';\n\n // Timestamp/datetime columns (SQLite: \"object date\", MySQL timestamp/datetime: \"object date\").\n // Only convert string→Date for timestamp/datetime columns, NOT pure DATE columns.\n // MySqlDateString has dataType \"string date\" (excluded by startsWith check).\n // MySqlDate has columnType \"MySqlDate\" — excluded below since it can accept raw strings.\n const columnType: string = (column as any).columnType ?? '';\n const isTimestampColumn =\n columnType === 'SQLiteTimestamp' ||\n columnType === 'SQLiteTimestampMs' ||\n columnType === 'MySqlTimestamp' ||\n columnType === 'MySqlDateTime' ||\n columnType === 'PgTimestamp' ||\n columnType === 'PgTimestampString';\n if (isTimestampColumn) {\n const formatted = new Date(value);\n if (Number.isNaN(formatted.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return formatted;\n }\n\n // Date-only columns (no time component) — extract YYYY-MM-DD portion to avoid\n // timezone shifts when mysql2 formats Date objects using local time.\n const isDateOnlyColumn = columnType === 'MySqlDate' || columnType === 'PgDate';\n if (isDateOnlyColumn && typeof value === 'string') {\n // Accept ISO strings like \"2024-04-04T00:00:00.000Z\" or plain \"2024-04-04\"\n const dateOnly = value.includes('T') ? value.split('T')[0] : value;\n // Validate it's a real date by parsing\n const check = new Date(dateOnly!);\n if (Number.isNaN(check.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return dateOnly;\n }\n\n // BigInt columns (SQLite: \"bigint int64\", others: \"bigint\").\n if (dataType.includes('bigint')) {\n try {\n return BigInt(value);\n } catch {\n throw new GraphQLError(`Field '${columnName}' is not a BigInt!`);\n }\n }\n\n // JSON columns (SQLite: \"object json\", PG: \"json\").\n // PgGeometryObject is already handled by the switch case below.\n if (dataType.includes('json') && (column as any).columnType !== 'PgGeometryObject') {\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(value);\n } catch (e) {\n throw new GraphQLError(\n `Invalid JSON in field '${columnName}':\\n${e instanceof Error ? e.message : 'Unknown error'}`,\n );\n }\n }\n\n switch (dataType) {\n case 'date': {\n const formatted = new Date(value);\n if (Number.isNaN(formatted.getTime())) {\n throw new GraphQLError(`Field '${columnName}' is not a valid date!`);\n }\n\n return formatted;\n }\n\n case 'buffer': {\n if (!Array.isArray(value)) {\n throw new GraphQLError(`Field '${columnName}' is not an array!`);\n }\n\n return Buffer.from(value);\n }\n\n case 'json': {\n if (column.columnType === 'PgGeometryObject') {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n throw new GraphQLError(\n `Invalid JSON in field '${columnName}':\\n${e instanceof Error ? e.message : 'Unknown error'}`,\n );\n }\n }\n\n case 'array': {\n if (!Array.isArray(value)) {\n throw new GraphQLError(`Field '${columnName}' is not an array!`);\n }\n\n if (column.columnType === 'PgGeometry' && value.length !== 2) {\n throw new GraphQLError(\n `Invalid float tuple in field '${columnName}': expected array with length of 2, received ${value.length}`,\n );\n }\n\n return value;\n }\n\n case 'bigint': {\n try {\n return BigInt(value);\n } catch (_error) {\n throw new GraphQLError(`Field '${columnName}' is not a BigInt!`);\n }\n }\n\n default: {\n // graphql-js coerces input object types using Object.create(null), producing\n // null-prototype objects. Drizzle's internal is() check accesses\n // Object.getPrototypeOf(value).constructor and throws for null-prototype objects.\n // Convert to a plain object so drizzle can process it safely.\n if (typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === null) {\n return Object.assign({}, value);\n }\n return value;\n }\n }\n};\n\nexport const remapFromGraphQLSingleInput = (queryInput: Record<string, any>, table: Table) => {\n for (const [key, value] of Object.entries(queryInput)) {\n if (value === undefined) {\n delete queryInput[key];\n } else {\n const column = getTableColumns(table)[key];\n if (!column) {\n throw new GraphQLError(`Unknown column: ${key}`);\n }\n\n if (value === null && column.notNull) {\n delete queryInput[key];\n continue;\n }\n\n queryInput[key] = remapFromGraphQLCore(value, column, key);\n }\n }\n\n return queryInput;\n};\n\nexport const remapFromGraphQLArrayInput = (queryInput: Record<string, any>[], table: Table) => {\n for (const entry of queryInput) {\n remapFromGraphQLSingleInput(entry, table);\n }\n\n return queryInput;\n};\n","import type { Column } from 'drizzle-orm';\nimport { extractExtendedColumnType, is } from 'drizzle-orm';\nimport { MySqlInt, MySqlSerial } from 'drizzle-orm/mysql-core';\nimport { PgDate, PgDateString, PgInteger, PgSerial, PgTimestamp, PgTimestampString } from 'drizzle-orm/pg-core';\nimport { SQLiteInteger } from 'drizzle-orm/sqlite-core';\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n GraphQLFloat,\n GraphQLInputObjectType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLScalarType,\n GraphQLString,\n} from 'graphql';\nimport { GraphQLDate, GraphQLDateTime } from 'graphql-scalars';\nimport { capitalize } from '../case-ops/index.ts';\nimport type { ConvertedColumn } from './types.ts';\n\nconst allowedNameChars = /^[a-zA-Z0-9_]+$/;\n\nconst enumMap = new WeakMap<object, GraphQLEnumType>();\nconst generateEnumCached = (column: Column, columnName: string, tableName: string): GraphQLEnumType => {\n if (enumMap.has(column)) {\n return enumMap.get(column)!;\n }\n\n const gqlEnum = new GraphQLEnumType({\n name: `${capitalize(tableName)}${capitalize(columnName)}Enum`,\n values: Object.fromEntries(\n column.enumValues!.map((e, index) => [\n allowedNameChars.test(e) ? e : `Option${index}`,\n {\n value: e,\n description: `Value: ${e}`,\n },\n ]),\n ),\n });\n\n enumMap.set(column, gqlEnum);\n\n return gqlEnum;\n};\n\nconst geoXyType = new GraphQLObjectType({\n name: 'PgGeometryObject',\n fields: {\n x: { type: GraphQLFloat },\n y: { type: GraphQLFloat },\n },\n});\n\nconst geoXyInputType = new GraphQLInputObjectType({\n name: 'PgGeometryObjectInput',\n fields: {\n x: { type: GraphQLFloat },\n y: { type: GraphQLFloat },\n },\n});\n\nconst columnToGraphQLCore = (\n column: Column,\n columnName: string,\n tableName: string,\n isInput: boolean,\n): ConvertedColumn<boolean> => {\n const { type: baseType } = extractExtendedColumnType(column);\n switch (baseType) {\n case 'boolean':\n return { type: GraphQLBoolean, description: 'Boolean' };\n case 'object':\n if (column instanceof PgTimestamp || column instanceof PgDate) {\n return { type: GraphQLDateTime, description: 'DateTime' };\n }\n return column.columnType === 'PgGeometryObject'\n ? {\n type: isInput ? geoXyInputType : geoXyType,\n description: 'Geometry points XY',\n }\n : column.columnType === 'PgBytea'\n ? {\n type: new GraphQLList(new GraphQLNonNull(GraphQLInt)),\n description: 'Buffer',\n }\n : { type: GraphQLString, description: 'JSON' };\n case 'string':\n if (column.enumValues?.length) {\n return { type: generateEnumCached(column, columnName, tableName) };\n }\n\n if (column instanceof PgTimestamp || column instanceof PgTimestampString) {\n return { type: GraphQLDateTime, description: 'DateTime' };\n }\n if (column instanceof PgDateString) {\n // For input, accept any string (drivers truncate ISO timestamps to date on write).\n // For output, keep the strict GraphQLDate scalar so the returned value is validated.\n return isInput ? { type: GraphQLString, description: 'Date' } : { type: GraphQLDate, description: 'Date' };\n }\n\n return { type: GraphQLString, description: 'String' };\n case 'bigint':\n return { type: GraphQLString, description: 'BigInt' };\n case 'number': {\n // integer().array() columns keep columnType=PgInteger but gain a `dimensions` property.\n // drizzle-orm's extractExtendedColumnType still returns 'number' for them, so we\n // detect the array wrapper here and recurse with a synthetic base-int scalar.\n const dims = (column as any).dimensions as number | undefined;\n if (dims !== undefined && dims > 0) {\n const baseDesc = is(column, PgInteger) || is(column, PgSerial) ? 'Integer' : 'Float';\n const baseType = baseDesc === 'Integer' ? GraphQLInt : GraphQLFloat;\n return {\n type: new GraphQLList(new GraphQLNonNull(baseType)),\n description: `Array<${baseDesc}>`,\n };\n }\n return is(column, PgInteger) ||\n is(column, PgSerial) ||\n is(column, MySqlInt) ||\n is(column, MySqlSerial) ||\n is(column, SQLiteInteger)\n ? { type: GraphQLInt, description: 'Integer' }\n : { type: GraphQLFloat, description: 'Float' };\n }\n case 'array': {\n if (column.columnType === 'PgVector') {\n return {\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n description: 'Array<Float>',\n };\n }\n\n if (column.columnType === 'PgGeometry') {\n return {\n type: new GraphQLList(new GraphQLNonNull(GraphQLFloat)),\n description: 'Tuple<[Float, Float]>',\n };\n }\n\n const innerType = columnToGraphQLCore(\n (column as unknown as { baseColumn: Column }).baseColumn,\n columnName,\n tableName,\n isInput,\n );\n\n return {\n type: new GraphQLList(new GraphQLNonNull(innerType.type as GraphQLScalarType)),\n description: `Array<${innerType.description}>`,\n };\n }\n default:\n throw new Error(`Drizzle-GraphQL Error: Type ${column.dataType} is not implemented!`);\n }\n};\n\nexport const drizzleColumnToGraphQLType = <TColumn extends Column, TIsInput extends boolean>(\n column: TColumn,\n columnName: string,\n tableName: string,\n forceNullable = false,\n defaultIsNullable = false,\n isInput: TIsInput = false as TIsInput,\n): ConvertedColumn<TIsInput> => {\n const typeDesc = columnToGraphQLCore(column, columnName, tableName, isInput);\n const noDesc = ['string', 'boolean', 'number'];\n const { type: baseType } = extractExtendedColumnType(column);\n if (noDesc.find((e) => e === baseType)) {\n delete typeDesc.description;\n }\n\n if (forceNullable) {\n return typeDesc as ConvertedColumn<TIsInput>;\n }\n if (column.notNull && !(defaultIsNullable && (column.hasDefault || column.defaultFn))) {\n return {\n type: new GraphQLNonNull(typeDesc.type),\n description: typeDesc.description,\n } as ConvertedColumn<TIsInput>;\n }\n\n return typeDesc as ConvertedColumn<TIsInput>;\n};\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, One, type Table, type View } from 'drizzle-orm';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport { getTableConfig, type PgAsyncDatabase, type PgColumn, PgTable } from 'drizzle-orm/pg-core';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, ThunkObjMap } from 'graphql';\nimport {\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n type GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n attachTargetPrimaryKeys,\n buildNamedRelations,\n computeResolverFieldNames,\n createRelationResolverFactory,\n eagerLoadMutationRelations,\n extractFilters,\n extractOrderBy,\n extractSelectedColumnsFromTreeSQLFormat,\n generateTableTypes,\n getPrimaryKeyPropNamesFromConfig,\n prepareMutationRelationColumns,\n pruneNonEagerRelations,\n type RelationResolverFactory,\n runRelationalSelect,\n selectArrayArgs,\n selectSingleArgs,\n type TablesRelationalConfig,\n type TypeCacheCtx,\n type TypeNameMapper,\n toGraphQLError,\n} from '../builders/common.ts';\n\nimport {\n remapFromGraphQLArrayInput,\n remapFromGraphQLSingleInput,\n remapToGraphQLArrayOutput,\n remapToGraphQLSingleOutput,\n} from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n // Tables without relations won't have db.query support — fall back to basic select.\n\n const queryArgs = selectArrayArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n\n if (queryBase) {\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: false,\n });\n }\n\n // Fallback for tables without relational query builder support.\n // Use SQL column objects (not Record<string,true>) so db.select() receives valid expressions.\n const { offset, limit, orderBy, where } = args;\n const selectedColumnsSql = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n let q = db.select(selectedColumnsSql).from(table);\n if (where) {\n q = q.where(extractFilters(table, tableName, where)) as any;\n }\n if (orderBy) {\n q = q.orderBy(...extractOrderBy(table, orderBy)) as any;\n }\n if (offset) {\n q = q.offset(offset) as any;\n }\n if (limit) {\n q = q.limit(limit) as any;\n }\n return remapToGraphQLArrayOutput(await q, tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n // Tables without relations won't have db.query support — fall back to basic select.\n\n const queryArgs = selectSingleArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n\n if (queryBase) {\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: true,\n });\n }\n\n // Fallback for tables without relational query builder support.\n const { offset, orderBy, where } = args;\n const selectedColumnsSql = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n let q = db.select(selectedColumnsSql).from(table);\n if (where) {\n q = q.where(extractFilters(table, tableName, where)) as any;\n }\n if (orderBy) {\n q = q.orderBy(...extractOrderBy(table, orderBy)) as any;\n }\n if (offset) {\n q = q.offset(offset) as any;\n }\n const rows = await q.limit(1);\n const result = rows[0];\n return result ? remapToGraphQLSingleOutput(result, tableName, table, relationMap) : undefined;\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\n/** Primary-key property names for a PG table, including table-level composite keys. */\nconst pgPrimaryKeyPropNames = (table: PgTable): string[] => getPrimaryKeyPropNamesFromConfig(table, getTableConfig);\n\nconst generateInsertArray = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n conflictDoNothing: boolean = false,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n // Primary-key prop names are constant per table — derive them once at build time\n // rather than re-running getTableConfig on every mutation request.\n const pkNames = pgPrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n\n let query = db.insert(table).values(input).returning(columns);\n if (conflictDoNothing) {\n query = query.onConflictDoNothing() as any;\n }\n const result = await query;\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n conflictDoNothing: boolean = false,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n // Derived once at build time — PK prop names don't change per request.\n const pkNames = pgPrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n\n let query = db.insert(table).values(input).returning(columns);\n if (conflictDoNothing) {\n query = query.onConflictDoNothing() as any;\n }\n const result = await query;\n\n if (!result[0]) {\n return undefined;\n }\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n // Derived once at build time — PK prop names don't change per request.\n const pkNames = pgPrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, info) => {\n try {\n const { where, set } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: PgAsyncDatabase<any, any, any>,\n tableName: string,\n table: PgTable,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n): CreatedResolver => {\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, info) => {\n try {\n const { where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<PgColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\ntype SchemaEntry = Table<any> | View<string, boolean, any>;\n\nexport function generateSchemaData<\n TDrizzleInstance extends PgAsyncDatabase<any, any>,\n TRelations extends TablesRelationalConfig,\n TSchema extends Record<string, SchemaEntry>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TRelations,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n conflictDoNothing: boolean = false,\n typeNameMapper?: TypeNameMapper,\n shouldEagerLoad: (tableName: string, relationName: string) => boolean = () => true,\n): GeneratedEntities<TDrizzleInstance, TSchema> {\n const schemaEntries = Object.entries(schema);\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, PgTable)) as [string, PgTable][];\n const tables = Object.fromEntries(tableEntries) as Record<string, PgTable>;\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Flatten drizzle-orm v1 TablesRelationalConfig into the canonical shape\n // used throughout common.ts: Record<tableName, Record<relName, TableNamedRelations>>\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n // Record each relation target's primary key (composite-aware) so paginated relations\n // default to a deterministic PK order. Must run before pruning / type generation, which\n // share these entry objects.\n attachTargetPrimaryKeys(namedRelations, tables, pgPrimaryKeyPropNames);\n // Relations to eager-load via `with:`. Query/mutation resolvers use this pruned map so\n // opted-out relations never overfetch; type generation keeps the full map so their\n // fields still exist and resolve lazily.\n const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);\n\n const resolverFactory: RelationResolverFactory = createRelationResolverFactory(db, tables);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n orderTypeCache: new WeakMap(),\n filterTypeCache: new WeakMap(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n true,\n relationsDepthLimit,\n cacheCtx,\n typeNameMapper,\n prefixes.insert,\n prefixes.update,\n resolverFactory,\n ),\n ]),\n );\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {};\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;\n\n // Compute field names using the mapper logic\n const {\n typeName,\n listFieldName,\n singleFieldName,\n createArrayFieldName,\n createSingleFieldName,\n updateFieldName,\n deleteFieldName,\n } = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n listFieldName,\n typeName,\n typeNameMapper,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n singleFieldName,\n typeName,\n typeNameMapper,\n );\n const insertArrGenerated = generateInsertArray(\n db,\n tableName,\n schema[tableName] as PgTable,\n tables,\n eagerRelations,\n insertInput,\n createArrayFieldName,\n typeName,\n typeNameMapper,\n conflictDoNothing,\n );\n const insertSingleGenerated = generateInsertSingle(\n db,\n tableName,\n schema[tableName] as PgTable,\n tables,\n eagerRelations,\n insertInput,\n createSingleFieldName,\n typeName,\n typeNameMapper,\n conflictDoNothing,\n );\n const updateGenerated = generateUpdate(\n db,\n tableName,\n schema[tableName] as PgTable,\n tables,\n eagerRelations,\n updateInput,\n tableFilters,\n updateFieldName,\n typeName,\n typeNameMapper,\n );\n const deleteGenerated = generateDelete(\n db,\n tableName,\n schema[tableName] as PgTable,\n tableFilters,\n deleteFieldName,\n typeName,\n );\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: arrTableItemOutput,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: singleTableItemOutput,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: arrTableItemOutput,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: arrTableItemOutput,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n outputs[singleTableItemOutput.name] = singleTableItemOutput;\n }\n\n const fieldResolvers: Record<string, Record<string, any>> = {};\n for (const [tableName, tableRelations] of Object.entries(namedRelations)) {\n const relResolvers: Record<string, any> = {};\n for (const [relName, relEntry] of Object.entries(tableRelations)) {\n const isOne = is((relEntry as any).relation ?? relEntry, One);\n const resolver = resolverFactory({ tableName, relationName: relName, relEntry, isOne });\n if (resolver) {\n relResolvers[relName] = resolver;\n }\n }\n if (Object.keys(relResolvers).length > 0) {\n fieldResolvers[tableName] = relResolvers;\n }\n }\n\n return { queries, mutations, inputs, types: outputs, fieldResolvers } as any;\n}\n","// @ts-nocheck — vendored file, drizzle-orm 1.0 type compat not guaranteed\nimport { is, One, type Table } from 'drizzle-orm';\nimport type { RelationalQueryBuilder } from 'drizzle-orm/mysql-core/query-builders/query';\nimport { type BaseSQLiteDatabase, getTableConfig, type SQLiteColumn, SQLiteTable } from 'drizzle-orm/sqlite-core';\nimport type { GraphQLFieldConfig, GraphQLFieldConfigArgumentMap, GraphQLResolveInfo, ThunkObjMap } from 'graphql';\nimport {\n GraphQLError,\n type GraphQLInputObjectType,\n GraphQLList,\n GraphQLNonNull,\n type GraphQLObjectType,\n} from 'graphql';\nimport type { ResolveTree } from 'graphql-parse-resolve-info';\nimport { parseResolveInfo } from 'graphql-parse-resolve-info';\n\nimport type { BuildSchemaConfig, GeneratedEntities, MakeRequired } from '../../types.ts';\nimport {\n attachTargetPrimaryKeys,\n buildNamedRelations,\n computeResolverFieldNames,\n createRelationResolverFactory,\n eagerLoadMutationRelations,\n extractFilters,\n extractSelectedColumnsFromTreeSQLFormat,\n generateTableTypes,\n getPrimaryKeyPropNamesFromConfig,\n prepareMutationRelationColumns,\n pruneNonEagerRelations,\n type RelationResolverFactory,\n runRelationalSelect,\n selectArrayArgs,\n selectSingleArgs,\n type TablesRelationalConfig,\n type TypeCacheCtx,\n type TypeNameMapper,\n toGraphQLError,\n} from '../builders/common.ts';\n\nimport {\n remapFromGraphQLArrayInput,\n remapFromGraphQLSingleInput,\n remapToGraphQLArrayOutput,\n remapToGraphQLSingleOutput,\n} from '../data-mappers/index.ts';\nimport type { CreatedResolver, Filters, TableNamedRelations, TableSelectArgs } from './types.ts';\n\nconst generateSelectArray = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = selectArrayArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source: any, args: Partial<TableSelectArgs>, _context: any, info: GraphQLResolveInfo) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: false,\n });\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateSelectSingle = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n orderArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryBase = db.query[tableName as keyof typeof db.query] as unknown as\n | RelationalQueryBuilder<any, any, any>\n | undefined;\n if (!queryBase) {\n throw new Error(\n `Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`,\n );\n }\n\n const queryArgs = selectSingleArgs(orderArgs, filterArgs);\n\n const table = tables[tableName]!;\n\n return {\n name: fieldName,\n resolver: async (_source, args: Partial<TableSelectArgs>, _context, info) => {\n try {\n const parsedInfo = parseResolveInfo(info, { deep: true }) as ResolveTree;\n return await runRelationalSelect({\n queryBase,\n tables,\n tableName,\n table,\n relationMap,\n typeName,\n typeNameMapper,\n parsedInfo,\n ...args,\n single: true,\n });\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\n/** Primary-key property names for a SQLite table, including table-level composite keys. */\nconst sqlitePrimaryKeyPropNames = (table: SQLiteTable): string[] =>\n getPrimaryKeyPropNamesFromConfig(table, getTableConfig);\n\nconst generateInsertArray = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(baseType))),\n },\n };\n\n // Primary-key prop names are constant per table — derive them once at build time\n // rather than re-running getTableConfig on every mutation request.\n const pkNames = sqlitePrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any>[] }, _context, info) => {\n try {\n const input = remapFromGraphQLArrayInput(args.values, table);\n if (!input.length) {\n throw new GraphQLError('No values were provided!');\n }\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n\n const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateInsertSingle = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n baseType: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryArgs: GraphQLFieldConfigArgumentMap = {\n values: {\n type: new GraphQLNonNull(baseType),\n },\n };\n\n // Derived once at build time — PK prop names don't change per request.\n const pkNames = sqlitePrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { values: Record<string, any> }, _context, info) => {\n try {\n const input = remapFromGraphQLSingleInput(args.values, table);\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n const result = await db.insert(table).values(input).returning(columns).onConflictDoNothing();\n\n if (!result[0]) {\n return undefined;\n }\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLSingleOutput(enriched[0], tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateUpdate = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n tables: Record<string, Table>,\n relationMap: Record<string, Record<string, TableNamedRelations>>,\n setArgs: GraphQLInputObjectType,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n typeNameMapper?: TypeNameMapper,\n): CreatedResolver => {\n const queryArgs = {\n set: {\n type: new GraphQLNonNull(setArgs),\n },\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n // Derived once at build time — PK prop names don't change per request.\n const pkNames = sqlitePrimaryKeyPropNames(table);\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table>; set: Record<string, any> }, _context, info) => {\n try {\n const { where, set } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const { columns, hasRelations, withParams } = prepareMutationRelationColumns({\n relationMap,\n tables,\n tableName,\n typeName,\n typeNameMapper,\n table,\n pkNames,\n parsedInfo,\n });\n\n const input = remapFromGraphQLSingleInput(set, table);\n if (!Object.keys(input).length) {\n throw new GraphQLError('Unable to update with no values specified!');\n }\n\n let query = db.update(table).set(input);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n const enriched = hasRelations\n ? await eagerLoadMutationRelations(db, tableName, result, pkNames, withParams)\n : result;\n\n return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nconst generateDelete = (\n db: BaseSQLiteDatabase<any, any, any, any>,\n tableName: string,\n table: SQLiteTable,\n filterArgs: GraphQLInputObjectType,\n fieldName: string,\n typeName: string,\n): CreatedResolver => {\n const queryArgs = {\n where: {\n type: filterArgs,\n },\n } as const satisfies GraphQLFieldConfigArgumentMap;\n\n return {\n name: fieldName,\n resolver: async (_source, args: { where?: Filters<Table> }, _context, info) => {\n try {\n const { where } = args;\n\n const parsedInfo = parseResolveInfo(info, {\n deep: true,\n }) as ResolveTree;\n\n const columns = extractSelectedColumnsFromTreeSQLFormat<SQLiteColumn>(\n parsedInfo.fieldsByTypeName[typeName]!,\n table,\n );\n\n let query = db.delete(table);\n if (where) {\n const filters = extractFilters(table, tableName, where);\n query = query.where(filters) as any;\n }\n\n query = query.returning(columns) as any;\n\n const result = await query;\n\n return remapToGraphQLArrayOutput(result, tableName, table);\n } catch (e) {\n throw toGraphQLError(e);\n }\n },\n args: queryArgs,\n };\n};\n\nexport const generateSchemaData = <\n TDrizzleInstance extends BaseSQLiteDatabase<any, any, any, any>,\n TSchema extends Record<string, Table | unknown>,\n>(\n db: TDrizzleInstance,\n schema: TSchema,\n relations: TablesRelationalConfig,\n relationsDepthLimit: number | undefined,\n prefixes: MakeRequired<MakeRequired<BuildSchemaConfig>['prefixes']>,\n suffixes: MakeRequired<MakeRequired<BuildSchemaConfig>['suffixes']>,\n typeNameMapper?: TypeNameMapper,\n shouldEagerLoad: (tableName: string, relationName: string) => boolean = () => true,\n): GeneratedEntities<TDrizzleInstance, TSchema> => {\n const rawSchema = schema;\n const schemaEntries = Object.entries(rawSchema);\n\n const tableEntries = schemaEntries.filter(([_key, value]) => is(value, SQLiteTable)) as [string, SQLiteTable][];\n const tables = Object.fromEntries(tableEntries) as Record<string, SQLiteTable>;\n\n if (!tableEntries.length) {\n throw new Error(\n \"Drizzle-GraphQL Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?\",\n );\n }\n\n // Build namedRelations from the drizzle-orm v1 relations config.\n const namedRelations = buildNamedRelations(relations ?? {}, tableEntries);\n // Record each relation target's (composite-aware) primary key for deterministic\n // paginated ordering. Must run before pruning / type generation (shared entry objects).\n attachTargetPrimaryKeys(namedRelations, tables, sqlitePrimaryKeyPropNames);\n // Pruned map for query/mutation resolvers' `with:`; type generation keeps the full map.\n const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);\n\n const resolverFactory: RelationResolverFactory = createRelationResolverFactory(db, tables);\n\n // Fresh cache per generateSchemaData call — prevents type name collisions\n // when buildSchema() is called multiple times.\n const cacheCtx: TypeCacheCtx = {\n genericFilterCache: new Map(),\n objectTypeCache: new Map(),\n relationFieldContainers: new Map(),\n fullyBuiltTables: new Set(),\n relationTypeCache: new Map(),\n orderTypeCache: new WeakMap(),\n filterTypeCache: new WeakMap(),\n };\n\n const queries: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const mutations: ThunkObjMap<GraphQLFieldConfig<any, any>> = {};\n const gqlSchemaTypes = Object.fromEntries(\n Object.entries(tables).map(([tableName, _table]) => [\n tableName,\n generateTableTypes(\n tableName,\n tables,\n namedRelations,\n true,\n relationsDepthLimit,\n cacheCtx,\n typeNameMapper,\n prefixes.insert,\n prefixes.update,\n resolverFactory,\n ),\n ]),\n );\n\n const inputs: Record<string, GraphQLInputObjectType> = {};\n const outputs: Record<string, GraphQLObjectType> = {};\n\n for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {\n const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;\n const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;\n\n // Compute field names using the mapper logic\n const {\n typeName,\n listFieldName,\n singleFieldName,\n createArrayFieldName,\n createSingleFieldName,\n updateFieldName,\n deleteFieldName,\n } = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);\n\n const selectArrGenerated = generateSelectArray(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n listFieldName,\n typeName,\n typeNameMapper,\n );\n const selectSingleGenerated = generateSelectSingle(\n db,\n tableName,\n tables,\n eagerRelations,\n tableOrder,\n tableFilters,\n singleFieldName,\n typeName,\n typeNameMapper,\n );\n const insertArrGenerated = generateInsertArray(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n tables,\n eagerRelations,\n insertInput,\n createArrayFieldName,\n typeName,\n typeNameMapper,\n );\n const insertSingleGenerated = generateInsertSingle(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n tables,\n eagerRelations,\n insertInput,\n createSingleFieldName,\n typeName,\n typeNameMapper,\n );\n const updateGenerated = generateUpdate(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n tables,\n eagerRelations,\n updateInput,\n tableFilters,\n updateFieldName,\n typeName,\n typeNameMapper,\n );\n const deleteGenerated = generateDelete(\n db,\n tableName,\n schema[tableName] as SQLiteTable,\n tableFilters,\n deleteFieldName,\n typeName,\n );\n\n queries[selectArrGenerated.name] = {\n type: selectArrOutput,\n args: selectArrGenerated.args,\n resolve: selectArrGenerated.resolver,\n };\n queries[selectSingleGenerated.name] = {\n type: selectSingleOutput,\n args: selectSingleGenerated.args,\n resolve: selectSingleGenerated.resolver,\n };\n mutations[insertArrGenerated.name] = {\n type: arrTableItemOutput,\n args: insertArrGenerated.args,\n resolve: insertArrGenerated.resolver,\n };\n mutations[insertSingleGenerated.name] = {\n type: singleTableItemOutput,\n args: insertSingleGenerated.args,\n resolve: insertSingleGenerated.resolver,\n };\n mutations[updateGenerated.name] = {\n type: arrTableItemOutput,\n args: updateGenerated.args,\n resolve: updateGenerated.resolver,\n };\n mutations[deleteGenerated.name] = {\n type: arrTableItemOutput,\n args: deleteGenerated.args,\n resolve: deleteGenerated.resolver,\n };\n [insertInput, updateInput, tableFilters, tableOrder].forEach((e) => {\n inputs[e.name] = e;\n });\n outputs[selectSingleOutput.name] = selectSingleOutput;\n outputs[singleTableItemOutput.name] = singleTableItemOutput;\n }\n\n const fieldResolvers: Record<string, Record<string, any>> = {};\n for (const [tableName, tableRelations] of Object.entries(namedRelations)) {\n const relResolvers: Record<string, any> = {};\n for (const [relName, relEntry] of Object.entries(tableRelations)) {\n const isOne = is((relEntry as any).relation ?? relEntry, One);\n const resolver = resolverFactory({ tableName, relationName: relName, relEntry, isOne });\n if (resolver) {\n relResolvers[relName] = resolver;\n }\n }\n if (Object.keys(relResolvers).length > 0) {\n fieldResolvers[tableName] = relResolvers;\n }\n }\n\n return { queries, mutations, inputs, types: outputs, fieldResolvers } as any;\n};\n"],"mappings":"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","names":["import_drizzle_orm","import_mysql_core","import_pg_core","import_sqlite_core","import_graphql","import_drizzle_orm","import_mysql_core","import_graphql","import_drizzle_orm","import_graphql","import_drizzle_orm","import_graphql","baseType","desc","variants","getTableConfig","result","import_drizzle_orm","import_pg_core","import_graphql","import_graphql_parse_resolve_info","generateSelectArray","generateSelectSingle","generateInsertArray","generateInsertSingle","generateUpdate","generateDelete","generateSchemaData","import_drizzle_orm","import_sqlite_core","import_graphql","import_graphql_parse_resolve_info","generateSelectArray","generateSelectSingle","generateInsertArray","generateInsertSingle","generateUpdate","generateDelete","generateSchemaData","config","generateSchemaData"]}