import type { GraphQLAbstractType, GraphQLResolveInfo } from 'graphql'; import type { NexusInterfaceTypeDef } from './definitions/interfaceType'; import type { NexusObjectTypeDef } from './definitions/objectType'; declare global { interface NexusGen { } interface NexusGenCustomInputMethods { } interface NexusGenCustomOutputMethods { } interface NexusGenCustomOutputProperties { } interface NexusGenPluginSchemaConfig { } interface NexusGenPluginTypeConfig { } interface NexusGenPluginInputTypeConfig { } interface NexusGenPluginFieldConfig { } interface NexusGenPluginInputFieldConfig { } interface NexusGenPluginArgConfig { } } export declare type AllInputTypes = GetGen<'allInputTypes', string>; export declare type AllOutputTypes = GetGen<'allOutputTypes', string>; /** This type captures all output types defined in the app as well as core GraphQL spec objects. */ export declare type AllOutputTypesPossible = AllOutputTypes | 'Query' | 'Mutation' | 'Subscription'; export declare type FieldType = GetGen3<'fieldTypes', TypeName, FieldName>; export declare type MaybePromise = PromiseLike | T; /** * Because the GraphQL field execution algorithm automatically resolves promises at any level of the tree, we * use this to help signify that. */ export declare type MaybePromiseDeep = Date extends T ? MaybePromise : null extends T ? MaybePromise : boolean extends T ? MaybePromise : number extends T ? MaybePromise : string extends T ? MaybePromise : T extends Array ? MaybePromise>> : T extends ReadonlyArray ? MaybePromise>> : T extends object ? MaybePromise; }> : MaybePromise; /** * The NexusAbstractTypeResolver type can be used if you want to preserve type-safety and autocomplete on an * abstract type resolver (interface or union) outside of the Nexus configuration * * @example * const mediaType: AbstractTypeResolver<'MediaType'> = (root, ctx, info) => { * if (ctx.user.isLoggedIn()) { * return ctx.user.getItems() * } * return null * } */ export interface AbstractTypeResolver { (source: SourceValue, context: GetGen<'context'>, info: GraphQLResolveInfo, abstractType: GraphQLAbstractType): MaybePromise | null>; } /** * The FieldResolver type can be used when you want to preserve type-safety and autocomplete on a resolver * outside of the Nexus definition block * * @example * const userItems: FieldResolver<'User', 'items'> = (root, args, ctx, info) => { * if (ctx.user.isLoggedIn()) { * return ctx.user.getItems() * } * return null * } */ export declare type FieldResolver = ( /** * The [source data](https://nxs.li/guides/source-types) for the GraphQL object that this field belongs to, * unless this is a root field (any field on a [root operation * type](https://spec.graphql.org/June2018/#sec-Root-Operation-Types): Query, Mutation, Subscription), in * which case there is no source data and this will be undefined. */ source: SourceValue, /** * If you have defined arguments on this field then this parameter will contain any arguments passed by the * client. If you specified default values for any arguments and the client did not explicitly pass *any* * value (including null) for those arguments then you will see the defaults here. * * Note that thanks to [Nexus' reflection system](https://nxs.li/guides/reflection) this parameter's type * will always be type safe. */ args: ArgsValue, /** * The context data for this request. * * The context data is typically a singleton scoped to the lifecycle of the request. This means created at * the beginning of a request and then passed to all the resolvers that execute while resolving the request. * It is often used to store information like the current user making the request. Nexus is not responsible * for this however. That is typically something you'll do with e.g. [Mercurius](https://mercurius.dev) or * [Apollo Server](https://apollographql.com/docs/apollo-server/api/apollo-server). * * Note that the type here will be whatever you have specified for "contextType" in your makeSchema configuration. */ context: GetGen<'context'>, /** * The GraphQL resolve info. * * This is an advanced parameter seldom used. It includes things like the AST of the [GraphQL * document](https://spec.graphql.org/June2018/#sec-Language.Document) sent by the client. */ info: GraphQLResolveInfo) => MaybePromise> | MaybePromiseDeep>; export declare type FieldTypeName = GetGen3<'fieldTypeNames', TypeName, FieldName>; export declare type SubFieldResolver = (root: SourceValue, args: ArgsValue, context: GetGen<'context'>, info: GraphQLResolveInfo) => MaybePromise[SubFieldName]> | MaybePromiseDeep[SubFieldName]>; export declare type AbstractResolveReturn = GetGen2<'abstractTypeMembers', TypeName, any>; /** Generated type helpers: */ export declare type GenTypesShapeKeys = 'context' | 'inputTypes' | 'rootTypes' | 'inputTypeShapes' | 'argTypes' | 'fieldTypes' | 'fieldTypeNames' | 'allTypes' | 'typeInterfaces' | 'objectNames' | 'inputNames' | 'enumNames' | 'interfaceNames' | 'scalarNames' | 'unionNames' | 'allInputTypes' | 'allOutputTypes' | 'allNamedTypes' | 'abstractTypes' | 'abstractTypeMembers' | 'objectsUsingAbstractStrategyIsTypeOf' | 'abstractsUsingStrategyResolveType' | 'features'; /** Helpers for handling the generated schema */ export declare type GenTypesShape = Record; export declare type GetGen = NexusGen extends infer GenTypes ? GenTypes extends GenTypesShape ? GenTypes[K] : Fallback : Fallback; export declare type GetGen2, Fallback = any> = K2 extends keyof GetGen ? GetGen[K2] : Fallback; export declare type GetGen3, K3 extends Extract, Fallback = any> = K2 extends keyof GetGen ? K3 extends keyof GetGen[K2] ? GetGen[K2][K3] : Fallback : Fallback; export declare type HasGen = NexusGen extends infer GenTypes ? GenTypes extends GenTypesShape ? K extends keyof GenTypes ? true : false : false : false; export declare type HasGen2> = NexusGen extends infer GenTypes ? GenTypes extends GenTypesShape ? K extends keyof GenTypes ? K2 extends keyof GenTypes[K] ? true : false : false : false : false; export declare type HasGen3, K3 extends Extract> = NexusGen extends infer GenTypes ? GenTypes extends GenTypesShape ? K extends keyof GenTypes ? K2 extends keyof GenTypes[K] ? K3 extends keyof GenTypes[K][K2] ? true : false : false : false : false : false; export declare type SourceValue = GetGen2<'rootTypes', TypeName>; export declare type RootValueField = GetGen3<'rootTypes', TypeName, FieldName>; export declare type ArgsValue = HasGen3<'fieldTypes', TypeName, FieldName> extends true ? GetGen3<'argTypes', TypeName, FieldName, {}> : any; export declare type ResultValue = GetGen3<'fieldTypes', TypeName, FieldName>; export declare type NeedsResolver = HasGen3<'fieldTypes', TypeName, FieldName> extends true ? null extends GetGen3<'fieldTypes', TypeName, FieldName> ? false : HasGen3<'rootTypes', TypeName, FieldName> extends true ? null extends GetGen3<'rootTypes', TypeName, FieldName> ? true : false : true : HasGen3<'rootTypes', TypeName, FieldName> extends true ? null extends GetGen3<'rootTypes', TypeName, FieldName> ? true : false : false; export declare type IsFeatureEnabled2 = GetGen3<'features', PathPart1, PathPart2, false> extends true ? true : false; export declare type Discriminate> = Type extends { __typename: TypeName; } ? Type : Type extends { __typename?: TypeName; } ? Type : Required extends 'required' ? Type & { __typename: TypeName; } : Type & { __typename?: TypeName; }; export declare type InterfaceFieldsFor = { [K in GetGen2<'typeInterfaces', TypeName, never>]: keyof GetGen2<'fieldTypeNames', K>; }[GetGen2<'typeInterfaces', TypeName, never>]; export declare type ModificationType = TypeName extends string ? FieldName extends string ? GetGen2<'abstractTypeMembers', GetGen3<'fieldTypeNames', GetGen2<'typeInterfaces', TypeName, never>, FieldName>, never> extends infer U ? U extends string ? U | ConcreteModificationType : never : never : any : any; export declare type ConcreteModificationType = GetGen2<'objectNames', U, never> extends string ? NexusObjectTypeDef : NexusInterfaceTypeDef;