@vantreeseba/drizzle-graphql 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +3 -3
- package/package.json +3 -3
package/dist/index.cjs.map
CHANGED
|
@@ -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/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 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 ?? '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","config","generateSchemaData"]}
|