export type RelationDef = { entity: string; type: 'one' | 'many'; required?: boolean; }; export type EntityDef = { fields: Record; relations: Record; filters?: Record; insertInput?: Record; updateInput?: Record; orderBy?: Record; }; export type AnyEntityDefs = Record; /** Opaque wrapper that prevents TS from expanding entity defs during serialization */ export interface EntityDefsRef { readonly __defs: TDefs; } export type EntityDescriptor = { queryName: string; queryListName: string; countName: string; insertName: string; insertSingleName: string; updateName: string; deleteName: string; fields: readonly string[]; relations: Record; }; export type SchemaDescriptor = Record; export type SelectInput = { [K in keyof TEntity['fields'] | keyof TEntity['relations']]?: K extends keyof TEntity['relations'] ? TEntity['relations'][K] extends RelationDef ? TEntity['relations'][K]['entity'] extends keyof TDefs ? SelectInput : never : never : K extends keyof TEntity['fields'] ? true : never; }; type Simplify = { [K in keyof T]: T[K]; } & {}; export type InferResult = Simplify & InferRelations>; type InferScalars = Pick; type InferRelations = { [K in keyof TSelect & keyof TEntity['relations'] as TSelect[K] extends Record ? K : never]: TEntity['relations'][K] extends RelationDef ? TEntity['relations'][K]['entity'] extends keyof TDefs ? TEntity['relations'][K]['type'] extends 'many' ? InferResult[] : InferResult | null : never : never; }; export type ClientConfig = { url: string | (() => string); schema: TSchema; headers?: HeadersInit | (() => HeadersInit | Promise); }; export {};