import { Maybe } from '../jsutils/Maybe'; import { Visitor } from '../language/visitor'; import { ASTNode, ASTKindToNode, FieldNode } from '../language/ast'; import { GraphQLSchema } from '../type/schema'; import { GraphQLDirective } from '../type/directives'; import { GraphQLType, GraphQLInputType, GraphQLOutputType, GraphQLCompositeType, GraphQLField, GraphQLArgument, GraphQLEnumValue, } from '../type/definition'; /** * TypeInfo is a utility class which, given a GraphQL schema, can keep track * of the current field and type definitions at any point in a GraphQL document * AST during a recursive descent by calling `enter(node)` and `leave(node)`. */ export class TypeInfo { constructor( schema: GraphQLSchema, // NOTE: this experimental optional second parameter is only needed in order // to support non-spec-compliant code bases. You should never need to use it. // It may disappear in the future. getFieldDefFn?: getFieldDef, // Initial type may be provided in rare cases to facilitate traversals // beginning somewhere other than documents. initialType?: GraphQLType, ); getType(): Maybe; getParentType(): Maybe; getInputType(): Maybe; getParentInputType(): Maybe; getFieldDef(): GraphQLField>; getDefaultValue(): Maybe; getDirective(): Maybe; getArgument(): Maybe; getEnumValue(): Maybe; enter(node: ASTNode): any; leave(node: ASTNode): any; } type getFieldDef = ( schema: GraphQLSchema, parentType: GraphQLType, fieldNode: FieldNode, ) => Maybe>; /** * Creates a new visitor instance which maintains a provided TypeInfo instance * along with visiting visitor. */ export function visitWithTypeInfo( typeInfo: TypeInfo, visitor: Visitor, ): Visitor;