import { type ArgumentRef, type FieldKind, type FieldMap, type FieldNullability, type FieldOptionsFromKind, type InferredFieldOptionKeys, type InferredFieldOptionsByKind, type InputFieldMap, type InputFieldsFromShape, type InputShapeFromFields, type InterfaceParam, type ListResolveValue, type MaybePromise, type Merge, type Normalize, type ObjectRef, type OutputShape, type OutputType, type SchemaTypes, type ShapeFromTypeParam, type ShapeWithNullability, type TypeParam, typeBrandKey } from '@pothos/core'; import type { FieldNode, GraphQLResolveInfo } from 'graphql'; import type { PrismaInterfaceRef, PrismaRef } from './interface-ref'; import type { PrismaObjectFieldBuilder } from './prisma-field-builder'; export interface PrismaDelegate { findUniqueOrThrow?: (...args: any[]) => Promise; findUnique: (...args: any[]) => Promise; } export declare const prismaModelName: unique symbol; export interface PrismaClient { $connect: () => Promise; } export interface PrismaModelTypes { Name: string; Shape: {}; Include: unknown; Select: unknown; OrderBy: unknown; Where: {}; WhereUnique: {}; Create: {}; Update: {}; ListRelations: string; RelationName: string; Relations: Record; } type ExtractModel = ParentShape extends { [prismaModelName]?: infer Name; } ? Types['PrismaTypes'][Name & keyof Types['PrismaTypes']] extends infer Model ? Model extends PrismaModelTypes ? Model : never : never : never; export type PrismaObjectFieldOptions, Nullable extends FieldNullability, Args extends InputFieldMap, Select, ResolveReturnShape, Shape = unknown extends Select ? ParentShape : ParentShape & ShapeFromSelection, { select: Select extends (...args: any[]) => infer S ? S : Select; }>> = PothosSchemaTypes.ObjectFieldOptions & InferredFieldOptionsByKind & { select?: Select & (ExtractModel['Select'] | ((args: InputShapeFromFields, ctx: Types['Context'], nestedSelection: (selection?: Selection, path?: string[], type?: string) => Selection) => ExtractModel['Select'])); }; type PrismaObjectFieldsShape = Model['Select'] extends Select ? (t: PrismaObjectFieldBuilder) => FieldMap : (t: PrismaSelectionFieldBuilder) => FieldMap; type PrismaSelectionFieldBuilder = PrismaObjectFieldBuilder; interface BaseSelection { include?: unknown; select?: unknown; } export type SelectedKeys = { [K in keyof T]: T[K] extends false ? never : K; }[keyof T]; export type ShapeFromSelection = Normalize : Pick> & RelationShapeFromInclude & ('_count' extends keyof Selection['select'] ? ShapeFromCount : {}) : Model['Shape']>; export type ShapeFromCount = Selection extends true ? { _count: number; } : Selection extends { select: infer Counts; } ? { _count: { [K in keyof Counts]: number; }; } : never; export type TypesForRelation = Model['Relations'][Relation]['Name'] extends infer Name ? Name extends keyof Types['PrismaTypes'] ? PrismaModelTypes & Types['PrismaTypes'][Name] : never : never; type RelationShapeFromInclude = Normalize<{ [K in SelectedKeys as K extends Model['RelationName'] ? K : never]: K extends keyof Model['Relations'] ? Model['Relations'][K]['Shape'] extends unknown[] ? ShapeFromSelection, Include[K]>[] : Model['Relations'][K]['Nullable'] extends true ? ShapeFromSelection, Include[K]> | null : ShapeFromSelection, Include[K]> : unknown; }>; export type PrismaObjectRefOptions = NameOrVariant & ({ include?: Include & Model['Include']; select?: never; findUnique?: ((parent: Shape, context: Types['Context']) => Model['WhereUnique']) | null; } | { select: Model['Select'] & Select; include?: never; findUnique?: (parent: Shape, context: Types['Context']) => Model['WhereUnique']; }); export type PrismaObjectImplementationOptions[], Select, Shape extends object> = Omit | PothosSchemaTypes.ObjectTypeWithInterfaceOptions, 'description' | 'fields'> & { description?: string | false; fields?: PrismaObjectFieldsShape; }; export type PrismaObjectTypeOptions[], Include, Select, Shape extends object> = PrismaObjectImplementationOptions & PrismaObjectRefOptions; export type PrismaInterfaceRefOptions = NameOrVariant & ({ include?: Include & Model['Include']; select?: never; findUnique?: ((parent: Shape, context: Types['Context']) => Model['WhereUnique']) | null; } | { select: Model['Select'] & Select; include?: never; findUnique?: (parent: Shape, context: Types['Context']) => Model['WhereUnique']; }); export type PrismaInterfaceImplementationOptions[], Select, Shape extends object> = Omit, 'description' | 'fields'> & { description?: string | false; fields?: PrismaObjectFieldsShape; }; export type PrismaInterfaceTypeOptions[], Include, Select, Shape extends object> = PrismaInterfaceImplementationOptions & PrismaInterfaceRefOptions; type NameOrVariant = { name?: never; variant?: string; } | { name?: string; variant?: never; }; export type PrismaNodeOptions[], Include, Select, Shape extends object, UniqueField> = NameOrVariant & Omit | PothosSchemaTypes.ObjectTypeWithInterfaceOptions, 'fields' | 'isTypeOf'> & (UniqueField extends string ? { findUnique?: (id: string, context: Types['Context']) => Model['WhereUnique']; } : { findUnique: (id: string, context: Types['Context']) => Model['WhereUnique']; }) & { id: Omit, MaybePromise>>, 'args' | 'nullable' | 'type' | InferredFieldOptionKeys> & ({ field?: never; resolve: (parent: Shape, context: Types['Context']) => MaybePromise>; } | { resolve?: never; field: UniqueField extends UniqueFieldsFromWhereUnique ? UniqueField : UniqueFieldsFromWhereUnique; }); fields?: PrismaObjectFieldsShape; } & { nullable?: boolean; } & ({ include?: Include & Model['Include']; select?: never; } | { select: Model['Select'] & Select; include?: never; }); type QueryForField = Include extends { where?: unknown; } ? Omit | ((args: InputShapeFromFields, ctx: Types['Context']) => Omit) : never; type QueryFromRelation = Model['Include'][Field] extends infer Include ? Include extends { include?: infer I; select?: infer S; } ? { include?: NonNullable; select?: NonNullable; } : never : never; type CursorFromRelation = Field extends keyof Model['Include'] ? Model['Include'][Field] extends infer Include ? Include extends { cursor?: infer T; } ? UniqueFieldsFromWhereUnique : never : never : never; type RefForRelation = Model['Relations'][Field] extends unknown[] ? [ObjectRef] : ObjectRef; export type RelatedFieldOptions = Omit, Nullable, Args, ResolveReturnShape>, 'description' | 'type' | InferredFieldOptionKeys> & { resolve?: (query: QueryFromRelation, parent: Shape, args: InputShapeFromFields, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise>; description?: string | false; type?: PrismaRef>; query?: QueryForField; onNull?: 'error' | ((parent: Shape, args: InputShapeFromFields, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise>); } & ({ field: boolean extends Nullable ? Types['DefaultFieldNullability'] : Nullable; relation: Model['Relations'][Field]['Nullable']; } extends { field: false; relation: true; } ? { onNull: {}; } : {}); export type VariantFieldOptions, Args extends InputFieldMap, isNull, Shape> = Omit, InferredFieldOptionKeys | 'type'> & { isNull?: isNull & ((parent: Shape, args: InputShapeFromFields, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise); }; export type RelationCountOptions = Omit, 'type' | InferredFieldOptionKeys> & { resolve?: (parent: Shape, args: InputShapeFromFields, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise; where?: Where | ((args: InputShapeFromFields, context: Types['Context']) => Where); }; export type PrismaFieldOptions | keyof Types['PrismaTypes'] | [keyof Types['PrismaTypes']] | [PrismaRef], Model extends PrismaModelTypes, Param extends TypeParam, Args extends InputFieldMap, Nullable extends FieldNullability, ResolveShape, ResolveReturnShape, Kind extends FieldKind = FieldKind> = FieldOptionsFromKind extends infer FieldOptions ? Omit & { type: Type; resolve: FieldOptions extends { resolve?: (parent: infer Parent, ...args: any[]) => unknown; } ? PrismaFieldResolver : PrismaFieldResolver; } : never; export type PrismaFieldWithInputOptions | keyof Types['PrismaTypes'] | [keyof Types['PrismaTypes']] | [PrismaRef], Model extends PrismaModelTypes, Param extends TypeParam, Nullable extends FieldNullability, InputName extends string, ResolveShape, ResolveReturnShape, ArgRequired extends boolean> = Omit | (true extends ArgRequired ? never : null | undefined)>; }, Nullable, ResolveShape, ResolveReturnShape, Kind>, 'args'> & PothosSchemaTypes.FieldWithInputBaseOptions | (true extends ArgRequired ? never : null | undefined)>; }, Fields, InputName, ArgRequired>; export type PrismaFieldResolver, Args extends InputFieldMap, Nullable extends FieldNullability, ResolveReturnShape> = (query: { include?: Model['Include']; select?: Model['Select']; }, parent: Parent, args: InputShapeFromFields, context: Types['Context'], info: GraphQLResolveInfo) => ShapeFromTypeParam extends infer Shape ? [Shape] extends [[readonly (infer Item)[] | null | undefined]] ? ListResolveValue : MaybePromise : never; export type PrismaConnectionFieldOptions | PrismaRef | keyof Types['PrismaTypes'], Model extends PrismaModelTypes, Param extends OutputType, Nullable extends boolean, Args extends InputFieldMap, ResolveReturnShape, Kind extends FieldKind> = Omit & (InputFieldMap extends Args ? {} : Args), Kind, ParentShape, ResolveReturnShape>, 'args' | InferredFieldOptionKeys | 'type'> & Omit, InferredFieldOptionKeys | 'type'> & (InputShapeFromFields & PothosSchemaTypes.DefaultConnectionArguments extends infer ConnectionArgs ? { type: Type; cursor: UniqueFieldsFromWhereUnique; defaultSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number); maxSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number); resolve: (query: { include?: Model['Include']; cursor?: Model['WhereUnique']; take: number; skip: number; }, parent: ParentShape, args: ConnectionArgs, context: Types['Context'], info: GraphQLResolveInfo) => ShapeFromTypeParam extends infer Shape ? [Shape] extends [[readonly (infer Item)[] | null | undefined]] ? ListResolveValue : MaybePromise : never; totalCount?: (parent: ParentShape, args: ConnectionArgs, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise; } : never); export type RelatedConnectionOptions = Omit, Nullable, InputFieldsFromShape & (InputFieldMap extends Args ? {} : Args), unknown>, 'args' | 'description' | InferredFieldOptionKeys | 'type'> & Omit, false, false, Nullable, Args, unknown>, InferredFieldOptionKeys | 'type'> & (InputShapeFromFields & PothosSchemaTypes.DefaultConnectionArguments extends infer ConnectionArgs ? { resolve?: (query: { include?: Model['Include']; cursor?: Model['WhereUnique']; take: number; skip: number; }, parent: Model['Shape'], args: ConnectionArgs, context: Types['Context'], info: GraphQLResolveInfo) => MaybePromise ], Nullable>>; } & { description?: string | false; query?: QueryForField; type?: Type & PrismaRef>; cursor: CursorFromRelation; defaultSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number); maxSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number); totalCount?: boolean; } : never); export type WithBrand = T & { [typeBrandKey]: string; }; export type IncludeMap = Record; export interface SelectionMap { select?: Record; include?: Record; where?: object; } export type FieldSelection = Record | ((args: object, context: object, mergeNestedSelection: (selection: SelectionMap | boolean | ((args: object, context: object) => SelectionMap), path?: IndirectInclude | string[], type?: string) => SelectionMap | boolean, resolveSelection: (path: string[]) => FieldNode | null) => SelectionMap); export type LoaderMappings = Record; export interface IndirectInclude { getType: () => string; path?: { type?: string; name: string; }[]; paths?: { type?: string; name: string; }[][]; } export type ShapeFromConnection = T extends { shape: unknown; } ? T['shape'] : never; export type PrismaConnectionShape = Merge> extends infer Shape ? Shape & { parent: Parent; args: InputShapeFromFields & PothosSchemaTypes.DefaultConnectionArguments; } : never> extends infer C ? [C] extends [ { edges: infer Edges; } ] ? Merge & { edges: Edges extends Iterable | null | undefined> ? Merge[] : never; }> : C : never; export type UniqueFieldsExtendedWhereUnique = NonNullable; export type UniqueFieldsFromWhereUnique = string & (UniqueFieldsExtendedWhereUnique extends infer K ? [K] extends [never] ? keyof T : K : never); type Simplify = { [K in keyof T]: T[K]; } & {}; type InferField = T extends { [K in N]?: infer U | null; } ? U : never; type IsNullable = null extends T ? true : undefined extends T ? true : false; type CapitalizeFirst = S extends `${infer F}${infer R}` ? `${Uppercase}${R}` : S; type InferModelShape = Simplify & InferComposites>>; type InferRelations = { [K in keyof Model]: { Shape: Model[K] extends any[] ? InferModelShape[] : InferModelShape; Name: InferField, 'name'>; Nullable: IsNullable; }; }; type InferRelationList = { [K in keyof Model as Model[K] extends any[] ? K : never]: K; }; type MakeNullable = IsNullable extends true ? T | null : T; type InferItemOfArray = T extends Array ? U : T; type InferComposites = { [K in keyof Model]: Model[K] extends any[] ? Simplify & InferComposites>>[] : 'composites' extends keyof Exclude ? MakeNullable & InferComposites>>, IsNullable> : InferField; }; type ExtractModelKeys = { [K in keyof T]: K extends `$${string}` ? never : K; }[keyof T]; type PrismaArgs = T extends { [K: symbol]: { types: { operations: { [K in F]: { args: unknown; }; }; }; }; } ? T[symbol]['types']['operations'][F]['args'] : unknown; type PrismaPayload = T extends { [K: symbol]: { types: { payload: unknown; }; }; } ? T[symbol]['types']['payload'] : unknown; /** * Infer PrismaTypes from a PrismaClient * @example * `type PrismaTypes = PrismaTypesFromClient` **/ export type PrismaTypesFromClient = { [K in ExtractModelKeys as CapitalizeFirst]: PrismaModelTypes & { Name: CapitalizeFirst; Shape: InferModelShape>; Include: InferField, 'include'>; Select: InferField, 'select'>; OrderBy: InferItemOfArray, 'orderBy'>>; WhereUnique: InferField, 'where'>; Where: InferField, 'where'>; ListRelations: keyof InferRelationList, 'objects'>>; RelationName: keyof InferField, 'objects'>; Relations: InferRelations, 'objects'>>; Create: PrismaUtils extends true ? InferField, 'data'> : {}; Update: PrismaUtils extends true ? InferField, 'data'> : {}; }; }; interface DMMFField { type: string; kind: string; name: string; isRequired: boolean; isList: boolean; hasDefaultValue: boolean; isUnique: boolean; isId: boolean; documentation?: string; relationName?: string; relationFromFields?: readonly string[]; isUpdatedAt?: boolean; } export interface PothosPrismaDatamodel { datamodel: { models: Record; }; } export {}; //# sourceMappingURL=types.d.ts.map