import { GetGen, InterfaceFieldsFor, FieldResolver, ModificationType, AbstractTypeResolver } from '../typegenTypeHelpers'; import { AbstractTypes, NonNullConfig, RootTypingDef } from './_types'; import { OutputDefinitionBlock, OutputDefinitionBuilder } from './definitionBlocks'; import { ArgsRecord } from './args'; export declare type Implemented = GetGen<'interfaceNames'> | NexusInterfaceTypeDef; export interface FieldModification { type?: ModificationType; /** * The description to annotate the GraphQL SDL */ description?: string | null; /** * The resolve method we should be resolving the field with */ resolve?: FieldResolver; /** * You are allowed to add non-required args when modifying a field */ args?: ArgsRecord; } export interface FieldModificationDef extends FieldModification { field: FieldName; } export declare type NexusInterfaceTypeConfig = { name: TypeName; definition(t: InterfaceDefinitionBlock): void; /** * Configures the nullability for the type, check the * documentation's "Getting Started" section to learn * more about GraphQL Nexus's assumptions and configuration * on nullability. */ nonNullDefaults?: NonNullConfig; /** * The description to annotate the GraphQL SDL */ description?: string | null; /** * Root type information for this type */ rootTyping?: RootTypingDef; } & AbstractTypes.MaybeTypeDefConfigFieldResolveType; export interface InterfaceDefinitionBuilder extends OutputDefinitionBuilder { setLegacyResolveType(fn: AbstractTypeResolver): void; addInterfaces(toAdd: Implemented[]): void; addModification(toAdd: FieldModificationDef): void; } export declare class InterfaceDefinitionBlock extends OutputDefinitionBlock { protected typeBuilder: InterfaceDefinitionBuilder; constructor(typeBuilder: InterfaceDefinitionBuilder); /** * @param interfaceName */ implements(...interfaceName: Array): void; /** * Modifies a field added via an interface */ modify, string>>(field: FieldName, modifications: FieldModification): void; protected resolveType(fn: AbstractTypeResolver): void; } export declare class NexusInterfaceTypeDef { readonly name: TypeName; protected config: NexusInterfaceTypeConfig; constructor(name: TypeName, config: NexusInterfaceTypeConfig); get value(): NexusInterfaceTypeConfig; } /** * Defines a GraphQLInterfaceType * @param config */ export declare function interfaceType(config: NexusInterfaceTypeConfig): NexusInterfaceTypeDef;