/** @category Types */ import type { Maybe } from "../jsutils/Maybe.js"; import type { ObjMap } from "../jsutils/ObjMap.js"; import type { Path } from "../jsutils/Path.js"; import type { PromiseOrValue } from "../jsutils/PromiseOrValue.js"; import type { ConstValueNode, EnumTypeDefinitionNode, EnumTypeExtensionNode, EnumValueDefinitionNode, FieldDefinitionNode, FieldNode, FragmentDefinitionNode, InputObjectTypeDefinitionNode, InputObjectTypeExtensionNode, InputValueDefinitionNode, InterfaceTypeDefinitionNode, InterfaceTypeExtensionNode, ObjectTypeDefinitionNode, ObjectTypeExtensionNode, OperationDefinitionNode, ScalarTypeDefinitionNode, ScalarTypeExtensionNode, UnionTypeDefinitionNode, UnionTypeExtensionNode, ValueNode } from "../language/ast.js"; import type { GraphQLVariableSignature } from "../execution/getVariableSignature.js"; import type { VariableValues } from "../execution/values.js"; import type { GraphQLDirective } from "./directives.js"; import type { GraphQLSchema } from "./schema.js"; /** These are all of the possible kinds of types. */ export type GraphQLType = GraphQLNamedType | GraphQLWrappingType; /** * Returns true when the value is any GraphQL type. * @param type - The GraphQL type to inspect. * @returns True when the value is any GraphQL type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { GraphQLList, GraphQLString, isType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * name: String * } * `); * * isType(GraphQLString); // => true * isType(new GraphQLList(GraphQLString)); // => true * isType(schema.getType('Query')); // => true * isType('String'); // => false * ``` */ export declare function isType(type: unknown): type is GraphQLType; /** * Returns the value as a GraphQL type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * name: String * } * `); * * const queryType = assertType(schema.getType('Query')); * * queryType.toString(); // => 'Query' * assertType('Query'); // throws an error * ``` */ export declare function assertType(type: unknown): GraphQLType; /** * There are predicates for each kind of GraphQL type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLScalarType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isScalarType } from 'graphql/type'; * * const schema = buildSchema(` * scalar DateTime * * type Query { * createdAt: DateTime * } * `); * * isScalarType(schema.getType('DateTime')); // => true * isScalarType(schema.getType('Query')); // => false * ``` */ export declare function isScalarType(type: unknown): type is GraphQLScalarType; /** * Returns the value as a GraphQLScalarType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLScalarType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertScalarType } from 'graphql/type'; * * const schema = buildSchema(` * scalar DateTime * * type Query { * createdAt: DateTime * } * `); * * const dateTimeType = assertScalarType(schema.getType('DateTime')); * * dateTimeType.name; // => 'DateTime' * assertScalarType(schema.getType('Query')); // throws an error * ``` */ export declare function assertScalarType(type: unknown): GraphQLScalarType; /** * Returns true when the value is a GraphQLObjectType. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLObjectType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type User { * name: String * } * * type Query { * user: User * } * `); * * isObjectType(schema.getType('User')); // => true * isObjectType(schema.getType('ReviewInput')); // => false * ``` */ export declare function isObjectType(type: unknown): type is GraphQLObjectType; /** * Returns the value as a GraphQLObjectType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLObjectType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type User { * name: String * } * * type Query { * user: User * } * `); * * const userType = assertObjectType(schema.getType('User')); * * Object.keys(userType.getFields()); // => ['name'] * assertObjectType(schema.getType('ReviewInput')); // throws an error * ``` */ export declare function assertObjectType(type: unknown): GraphQLObjectType; /** * Returns true when the value is a resolved GraphQL field definition. * @param field - Value to inspect. * @returns True when the value is a GraphQLField. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isField } from 'graphql/type'; * * const schema = buildSchema('type Query { greeting: String }'); * const field = schema.getQueryType().getFields().greeting; * * isField(field); // => true * isField(schema.getQueryType()); // => false * ``` */ export declare function isField(field: unknown): field is GraphQLField; /** * Returns the value as a GraphQLField, or throws if it is not one. * @param field - Value to inspect. * @returns The value typed as a GraphQLField. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertField } from 'graphql/type'; * * const schema = buildSchema('type Query { greeting: String }'); * const field = assertField(schema.getQueryType().getFields().greeting); * * field.name; // => 'greeting' * assertField(schema.getQueryType()); // throws an error * ``` */ export declare function assertField(field: unknown): GraphQLField; /** * Returns true when the value is a resolved GraphQL argument definition. * @param arg - Value to inspect. * @returns True when the value is a GraphQLArgument. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isArgument } from 'graphql/type'; * * const schema = buildSchema('type Query { greeting(name: String): String }'); * const arg = schema.getQueryType().getFields().greeting.args[0]; * * isArgument(arg); // => true * isArgument(schema.getQueryType()); // => false * ``` */ export declare function isArgument(arg: unknown): arg is GraphQLArgument; /** * Returns the value as a GraphQLArgument, or throws if it is not one. * @param arg - Value to inspect. * @returns The value typed as a GraphQLArgument. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertArgument } from 'graphql/type'; * * const schema = buildSchema('type Query { greeting(name: String): String }'); * const arg = assertArgument(schema.getQueryType().getFields().greeting.args[0]); * * arg.name; // => 'name' * assertArgument(schema.getQueryType()); // throws an error * ``` */ export declare function assertArgument(arg: unknown): GraphQLArgument; /** * Returns true when the value is a GraphQLInterfaceType. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLInterfaceType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isInterfaceType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * isInterfaceType(schema.getType('Node')); // => true * isInterfaceType(schema.getType('User')); // => false * ``` */ export declare function isInterfaceType(type: unknown): type is GraphQLInterfaceType; /** * Returns the value as a GraphQLInterfaceType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLInterfaceType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInterfaceType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * const nodeType = assertInterfaceType(schema.getType('Node')); * * nodeType.name; // => 'Node' * assertInterfaceType(schema.getType('User')); // throws an error * ``` */ export declare function assertInterfaceType(type: unknown): GraphQLInterfaceType; /** * Returns true when the value is a GraphQLUnionType. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLUnionType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isUnionType } from 'graphql/type'; * * const schema = buildSchema(` * type Photo { * url: String! * } * * type Video { * url: String! * } * * union Media = Photo | Video * * type Query { * media: [Media] * } * `); * * isUnionType(schema.getType('Media')); // => true * isUnionType(schema.getType('Photo')); // => false * ``` */ export declare function isUnionType(type: unknown): type is GraphQLUnionType; /** * Returns the value as a GraphQLUnionType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLUnionType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertUnionType } from 'graphql/type'; * * const schema = buildSchema(` * type Photo { * url: String! * } * * type Video { * url: String! * } * * union Media = Photo | Video * * type Query { * media: [Media] * } * `); * * const mediaType = assertUnionType(schema.getType('Media')); * * mediaType.getTypes().map((type) => type.name); // => ['Photo', 'Video'] * assertUnionType(schema.getType('Photo')); // throws an error * ``` */ export declare function assertUnionType(type: unknown): GraphQLUnionType; /** * Returns true when the value is a GraphQLEnumType. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLEnumType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isEnumType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * EMPIRE * } * * type Query { * favoriteEpisode: Episode * } * `); * * isEnumType(schema.getType('Episode')); // => true * isEnumType(schema.getType('Query')); // => false * ``` */ export declare function isEnumType(type: unknown): type is GraphQLEnumType; /** * Returns the value as a GraphQLEnumType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLEnumType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * EMPIRE * } * * type Query { * favoriteEpisode: Episode * } * `); * * const episodeType = assertEnumType(schema.getType('Episode')); * * episodeType.getValues().map((value) => value.name); // => ['NEW_HOPE', 'EMPIRE'] * assertEnumType(schema.getType('Query')); // throws an error * ``` */ export declare function assertEnumType(type: unknown): GraphQLEnumType; /** * Returns true when the value is a resolved GraphQL enum value definition. * @param value - Value to inspect. * @returns True when the value is a GraphQLEnumValue. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType, isEnumValue } from 'graphql/type'; * * const schema = buildSchema( * 'enum Episode { NEW_HOPE } type Query { episode: Episode }', * ); * const enumValue = assertEnumType(schema.getType('Episode')).getValues()[0]; * * isEnumValue(enumValue); // => true * isEnumValue(schema.getType('Episode')); // => false * ``` */ export declare function isEnumValue(value: unknown): value is GraphQLEnumValue; /** * Returns the value as a GraphQLEnumValue, or throws if it is not one. * @param value - Value to inspect. * @returns The value typed as a GraphQLEnumValue. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType, assertEnumValue } from 'graphql/type'; * * const schema = buildSchema( * 'enum Episode { NEW_HOPE } type Query { episode: Episode }', * ); * const enumValue = assertEnumValue( * assertEnumType(schema.getType('Episode')).getValues()[0], * ); * * enumValue.name; // => 'NEW_HOPE' * assertEnumValue(schema.getType('Episode')); // throws an error * ``` */ export declare function assertEnumValue(value: unknown): GraphQLEnumValue; /** * Returns true when the value is a GraphQLInputObjectType. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLInputObjectType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isInputObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * isInputObjectType(schema.getType('ReviewInput')); // => true * isInputObjectType(schema.getType('Review')); // => false * ``` */ export declare function isInputObjectType(type: unknown): type is GraphQLInputObjectType; /** * Returns the value as a GraphQLInputObjectType, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLInputObjectType. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * const inputType = assertInputObjectType(schema.getType('ReviewInput')); * * Object.keys(inputType.getFields()); // => ['stars'] * assertInputObjectType(schema.getType('Review')); // throws an error * ``` */ export declare function assertInputObjectType(type: unknown): GraphQLInputObjectType; /** * Returns true when the value is a resolved GraphQL input field definition. * @param field - Value to inspect. * @returns True when the value is a GraphQLInputField. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputObjectType, isInputField } from 'graphql/type'; * * const schema = buildSchema( * 'input ReviewInput { stars: Int } type Query { ok: Boolean }', * ); * const inputField = assertInputObjectType( * schema.getType('ReviewInput'), * ).getFields().stars; * * isInputField(inputField); // => true * isInputField(schema.getQueryType()); // => false * ``` */ export declare function isInputField(field: unknown): field is GraphQLInputField; /** * Returns the value as a GraphQLInputField, or throws if it is not one. * @param field - Value to inspect. * @returns The value typed as a GraphQLInputField. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputField, assertInputObjectType } from 'graphql/type'; * * const schema = buildSchema( * 'input ReviewInput { stars: Int } type Query { ok: Boolean }', * ); * const inputField = assertInputField( * assertInputObjectType(schema.getType('ReviewInput')).getFields().stars, * ); * * inputField.name; // => 'stars' * assertInputField(schema.getQueryType()); // throws an error * ``` */ export declare function assertInputField(field: unknown): GraphQLInputField; /** * Returns true when the value is a GraphQLList. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLList. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { GraphQLList, GraphQLString, isListType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * tags: [String!]! * } * `); * * const tagsField = schema.getQueryType()?.getFields().tags; * * isListType(new GraphQLList(GraphQLString)); // => true * isListType(GraphQLString); // => false * isListType(tagsField?.type); // => false * ``` */ export declare function isListType(type: GraphQLInputType): type is GraphQLList; /** * Returns true when the output type is a GraphQLList. * @param type - The GraphQL output type to inspect. * @returns True when the output type is a list type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { getNullableType, isListType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * tags: [String!]! * } * `); * * const tagsField = schema.getQueryType()?.getFields().tags; * const nullableTagsType = getNullableType(tagsField?.type); * * isListType(nullableTagsType); // => true * ``` */ export declare function isListType(type: GraphQLOutputType): type is GraphQLList; /** * Returns true when the value is a GraphQLList. * @param type - The value to inspect. * @returns True when the value is a list type. * @example * ```ts * import { isListType } from 'graphql/type'; * * isListType('[String]'); // => false * isListType(null); // => false * ``` */ export declare function isListType(type: unknown): type is GraphQLList; /** * Returns the value as a GraphQLList, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLList. * @example * ```ts * import { GraphQLList, GraphQLString, assertListType } from 'graphql/type'; * * const listType = assertListType(new GraphQLList(GraphQLString)); * * listType.ofType; // => GraphQLString * assertListType(GraphQLString); // throws an error * ``` */ export declare function assertListType(type: unknown): GraphQLList; /** * Returns true when the value is a GraphQLNonNull. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQLNonNull. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { GraphQLNonNull, GraphQLString, isNonNullType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * name: String! * nickname: String * } * `); * * const fields = schema.getQueryType()?.getFields(); * * isNonNullType(new GraphQLNonNull(GraphQLString)); // => true * isNonNullType(fields?.name.type); // => true * isNonNullType(fields?.nickname.type); // => false * ``` */ export declare function isNonNullType(type: GraphQLInputType): type is GraphQLNonNull; /** * Returns true when the output type is a GraphQLNonNull. * @param type - The GraphQL output type to inspect. * @returns True when the output type is a non-null type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isNonNullType } from 'graphql/type'; * * const schema = buildSchema(` * type Query { * name: String! * nickname: String * } * `); * * const fields = schema.getQueryType()?.getFields(); * * isNonNullType(fields?.name.type); // => true * isNonNullType(fields?.nickname.type); // => false * ``` */ export declare function isNonNullType(type: GraphQLOutputType): type is GraphQLNonNull; /** * Returns true when the value is a GraphQLNonNull. * @param type - The value to inspect. * @returns True when the value is a non-null type. * @example * ```ts * import { isNonNullType } from 'graphql/type'; * * isNonNullType('String!'); // => false * isNonNullType(null); // => false * ``` */ export declare function isNonNullType(type: unknown): type is GraphQLNonNull; /** * Returns the value as a GraphQLNonNull, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQLNonNull. * @example * ```ts * import { GraphQLNonNull, GraphQLString, assertNonNullType } from 'graphql/type'; * * const nonNullType = assertNonNullType(new GraphQLNonNull(GraphQLString)); * * nonNullType.ofType; // => GraphQLString * assertNonNullType(GraphQLString); // throws an error * ``` */ export declare function assertNonNullType(type: unknown): GraphQLNonNull; /** These types may be used as input types for arguments and directives. */ export type GraphQLNullableInputType = GraphQLNamedInputType | GraphQLList; /** These types may be used as input types for arguments and directives. */ export type GraphQLInputType = GraphQLNullableInputType | GraphQLNonNull; /** * Returns true when the value can be used as a GraphQL input type. * @param type - The GraphQL type to inspect. * @returns True when the value can be used as a GraphQL input type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isInputType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * isInputType(schema.getType('ReviewInput')); // => true * isInputType(schema.getType('Review')); // => false * ``` */ export declare function isInputType(type: unknown): type is GraphQLInputType; /** * Returns the value as a GraphQL input type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL input type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * const inputType = assertInputType(schema.getType('ReviewInput')); * * inputType.toString(); // => 'ReviewInput' * assertInputType(schema.getType('Review')); // throws an error * ``` */ export declare function assertInputType(type: unknown): GraphQLInputType; /** These types may be used as output types as the result of fields. */ export type GraphQLNullableOutputType = GraphQLNamedOutputType | GraphQLList; /** These types may be used as output types as the result of fields. */ export type GraphQLOutputType = GraphQLNullableOutputType | GraphQLNonNull; /** * Returns true when the value can be used as a GraphQL output type. * @param type - The GraphQL type to inspect. * @returns True when the value can be used as a GraphQL output type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isOutputType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * isOutputType(schema.getType('Review')); // => true * isOutputType(schema.getType('ReviewInput')); // => false * ``` */ export declare function isOutputType(type: unknown): type is GraphQLOutputType; /** * Returns the value as a GraphQL output type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL output type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertOutputType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Review { * stars: Int! * } * * type Query { * review(input: ReviewInput): Review * } * `); * * const outputType = assertOutputType(schema.getType('Review')); * * outputType.toString(); // => 'Review' * assertOutputType(schema.getType('ReviewInput')); // throws an error * ``` */ export declare function assertOutputType(type: unknown): GraphQLOutputType; /** These types may describe types which may be leaf values. */ export type GraphQLLeafType = GraphQLScalarType | GraphQLEnumType; /** * Returns true when the value is a GraphQL scalar or enum type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL scalar or enum type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isLeafType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * } * * type Review { * stars: Int! * } * * type Query { * episode: Episode * review: Review * } * `); * * isLeafType(schema.getType('Episode')); // => true * isLeafType(schema.getType('String')); // => true * isLeafType(schema.getType('Review')); // => false * ``` */ export declare function isLeafType(type: unknown): type is GraphQLLeafType; /** * Returns the value as a GraphQL leaf type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL leaf type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertLeafType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * } * * type Review { * stars: Int! * } * * type Query { * episode: Episode * review: Review * } * `); * * const episodeType = assertLeafType(schema.getType('Episode')); * * episodeType.toString(); // => 'Episode' * assertLeafType(schema.getType('Review')); // throws an error * ``` */ export declare function assertLeafType(type: unknown): GraphQLLeafType; /** These types may describe the parent context of a selection set. */ export type GraphQLCompositeType = GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType; /** * Returns true when the value is a GraphQL object, interface, or union type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL object, interface, or union type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isCompositeType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * union SearchResult = User * * type Query { * node: Node * search: [SearchResult] * } * `); * * isCompositeType(schema.getType('User')); // => true * isCompositeType(schema.getType('Node')); // => true * isCompositeType(schema.getType('SearchResult')); // => true * isCompositeType(schema.getType('String')); // => false * ``` */ export declare function isCompositeType(type: unknown): type is GraphQLCompositeType; /** * Returns the value as a GraphQL composite type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL composite type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertCompositeType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * const userType = assertCompositeType(schema.getType('User')); * * userType.toString(); // => 'User' * assertCompositeType(schema.getType('String')); // throws an error * ``` */ export declare function assertCompositeType(type: unknown): GraphQLCompositeType; /** These types may describe the parent context of a selection set. */ export type GraphQLAbstractType = GraphQLInterfaceType | GraphQLUnionType; /** * Returns true when the value is a GraphQL interface or union type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL interface or union type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { isAbstractType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * union SearchResult = User * * type Query { * node: Node * search: [SearchResult] * } * `); * * isAbstractType(schema.getType('Node')); // => true * isAbstractType(schema.getType('SearchResult')); // => true * isAbstractType(schema.getType('User')); // => false * ``` */ export declare function isAbstractType(type: unknown): type is GraphQLAbstractType; /** * Returns the value as a GraphQL abstract type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL abstract type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertAbstractType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * const nodeType = assertAbstractType(schema.getType('Node')); * * nodeType.toString(); // => 'Node' * assertAbstractType(schema.getType('User')); // throws an error * ``` */ export declare function assertAbstractType(type: unknown): GraphQLAbstractType; /** * List Type Wrapper * * A list is a wrapping type which points to another type. * Lists are often created within the context of defining the fields of * an object type. * @typeParam T - The GraphQL type wrapped by this list type. * @example * ```ts * const PersonType = new GraphQLObjectType({ * name: 'Person', * fields: () => ({ * parents: { type: new GraphQLList(PersonType) }, * children: { type: new GraphQLList(PersonType) }, * }), * }); * ``` */ export declare class GraphQLList implements GraphQLSchemaElement { /** The type wrapped by this list or non-null type. */ readonly ofType: T; private readonly __GraphQLListTypeBrand; /** * Creates a GraphQLList instance. * @param ofType - The type to wrap. * @example * ```ts * import { GraphQLList, GraphQLString } from 'graphql/type'; * * const stringList = new GraphQLList(GraphQLString); * * stringList.ofType; // => GraphQLString * String(stringList); // => '[String]' * ``` */ constructor(ofType: T); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns this wrapping type as a GraphQL type-reference string. * @returns The GraphQL type-reference string. * @example * ```ts * import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type'; * * const stringList = new GraphQLList(GraphQLString); * const requiredStringList = new GraphQLList(new GraphQLNonNull(GraphQLString)); * * stringList.toString(); // => '[String]' * requiredStringList.toString(); // => '[String!]' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLList, GraphQLString } from 'graphql/type'; * * const stringList = new GraphQLList(GraphQLString); * * stringList.toJSON(); // => '[String]' * JSON.stringify({ type: stringList }); // => '{"type":"[String]"}' * ``` */ toJSON(): string; } /** * Non-Null Type Wrapper * * A non-null is a wrapping type which points to another type. * Non-null types enforce that their values are never null and can ensure * an error is raised if this ever occurs during a request. It is useful for * fields which you can make a strong guarantee on non-nullability, for example * usually the id field of a database row will never be null. * @typeParam T - The nullable GraphQL type wrapped by this non-null type. * @example * ```ts * const RowType = new GraphQLObjectType({ * name: 'Row', * fields: () => ({ * id: { type: new GraphQLNonNull(GraphQLString) }, * }), * }); * ``` * * Note: the enforcement of non-nullability occurs within the executor. */ export declare class GraphQLNonNull implements GraphQLSchemaElement { /** The type wrapped by this list or non-null type. */ readonly ofType: T; private readonly __GraphQLNonNullTypeBrand; /** * Creates a GraphQLNonNull instance. * @param ofType - The type to wrap. * @example * ```ts * import { GraphQLNonNull, GraphQLString } from 'graphql/type'; * * const requiredString = new GraphQLNonNull(GraphQLString); * * requiredString.ofType; // => GraphQLString * String(requiredString); // => 'String!' * ``` */ constructor(ofType: T); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns this wrapping type as a GraphQL type-reference string. * @returns The GraphQL type-reference string. * @example * ```ts * import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type'; * * const requiredString = new GraphQLNonNull(GraphQLString); * const requiredStringList = new GraphQLNonNull(new GraphQLList(GraphQLString)); * * requiredString.toString(); // => 'String!' * requiredStringList.toString(); // => '[String]!' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLNonNull, GraphQLString } from 'graphql/type'; * * const requiredString = new GraphQLNonNull(GraphQLString); * * requiredString.toJSON(); // => 'String!' * JSON.stringify({ type: requiredString }); // => '{"type":"String!"}' * ``` */ toJSON(): string; } /** These types wrap and modify other types */ export type GraphQLWrappingType = GraphQLList | GraphQLNonNull; /** * Returns true when the value is a GraphQL list or non-null wrapper type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL list or non-null wrapper type. * @example * ```ts * import { * GraphQLList, * GraphQLNonNull, * GraphQLString, * isWrappingType, * } from 'graphql/type'; * * isWrappingType(new GraphQLList(GraphQLString)); // => true * isWrappingType(new GraphQLNonNull(GraphQLString)); // => true * isWrappingType(GraphQLString); // => false * ``` */ export declare function isWrappingType(type: unknown): type is GraphQLWrappingType; /** * Returns the value as a GraphQL wrapping type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL wrapping type. * @example * ```ts * import { GraphQLList, GraphQLString, assertWrappingType } from 'graphql/type'; * * const wrappingType = assertWrappingType(new GraphQLList(GraphQLString)); * * wrappingType.toString(); // => '[String]' * assertWrappingType(GraphQLString); // throws an error * ``` */ export declare function assertWrappingType(type: unknown): GraphQLWrappingType; /** These types can all accept null as a value. */ export type GraphQLNullableType = GraphQLNamedType | GraphQLList; /** * Returns true when the value is a GraphQL type that can accept null. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL type that can accept null. * @example * ```ts * import { GraphQLNonNull, GraphQLString, isNullableType } from 'graphql/type'; * * isNullableType(GraphQLString); // => true * isNullableType(new GraphQLNonNull(GraphQLString)); // => false * isNullableType(null); // => false * ``` */ export declare function isNullableType(type: unknown): type is GraphQLNullableType; /** * Returns the value as a nullable GraphQL type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a nullable GraphQL type. * @example * ```ts * import { * GraphQLNonNull, * GraphQLString, * assertNullableType, * } from 'graphql/type'; * * const nullableType = assertNullableType(GraphQLString); * * nullableType; // => GraphQLString * assertNullableType(new GraphQLNonNull(GraphQLString)); // throws an error * ``` */ export declare function assertNullableType(type: unknown): GraphQLNullableType; /** * Returns the nullable type. * @param type - The GraphQL type to inspect. * @returns The nullable type after removing one non-null wrapper, if present. * @example * ```ts * import { getNullableType } from 'graphql/type'; * * getNullableType(null); // => undefined * getNullableType(undefined); // => undefined * ``` */ export declare function getNullableType(type: undefined | null): void; /** * Returns the nullable type after removing one non-null wrapper. * @param type - A nullable type or non-null wrapper. * @returns The nullable type after removing one non-null wrapper, if present. * @typeParam T - The nullable GraphQL type returned after removing one non-null wrapper. * @example * ```ts * import { * GraphQLList, * GraphQLNonNull, * GraphQLString, * getNullableType, * } from 'graphql/type'; * * const requiredString = new GraphQLNonNull(GraphQLString); * const stringList = new GraphQLList(GraphQLString); * * getNullableType(requiredString); // => GraphQLString * getNullableType(stringList); // => stringList * ``` */ export declare function getNullableType(type: T | GraphQLNonNull): T; /** * Returns the nullable type after removing one non-null wrapper. * @param type - The GraphQL type to inspect. * @returns The nullable type after removing one non-null wrapper, if present. * @example * ```ts * import { * GraphQLList, * GraphQLNonNull, * GraphQLString, * getNullableType, * } from 'graphql/type'; * * const requiredStringList = new GraphQLNonNull(new GraphQLList(GraphQLString)); * * getNullableType(requiredStringList).toString(); // => '[String]' * getNullableType(GraphQLString); // => GraphQLString * ``` */ export declare function getNullableType(type: Maybe): GraphQLNullableType | undefined; /** These named types do not include modifiers like List or NonNull. */ export type GraphQLNamedType = GraphQLNamedInputType | GraphQLNamedOutputType; /** A named GraphQL type that can be used as an input type. */ export type GraphQLNamedInputType = GraphQLScalarType | GraphQLEnumType | GraphQLInputObjectType; /** A named GraphQL type that can be used as an output type. */ export type GraphQLNamedOutputType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | GraphQLEnumType; /** * Returns true when the value is a GraphQL named type. * @param type - The GraphQL type to inspect. * @returns True when the value is a GraphQL named type. * @example * ```ts * import { GraphQLList, GraphQLString, isNamedType } from 'graphql/type'; * * isNamedType(GraphQLString); // => true * isNamedType(new GraphQLList(GraphQLString)); // => false * isNamedType(null); // => false * ``` */ export declare function isNamedType(type: unknown): type is GraphQLNamedType; /** * Returns the value as a GraphQL named type, or throws if it is not one. * @param type - The GraphQL type to inspect. * @returns The value typed as a GraphQL named type. * @example * ```ts * import { GraphQLList, GraphQLString, assertNamedType } from 'graphql/type'; * * const namedType = assertNamedType(GraphQLString); * * namedType.name; // => 'String' * assertNamedType(new GraphQLList(GraphQLString)); // throws an error * ``` */ export declare function assertNamedType(type: unknown): GraphQLNamedType; /** * Returns the named type. * @param type - The GraphQL type to inspect. * @returns The named type after unwrapping all list and non-null wrappers. * @example * ```ts * import { getNamedType } from 'graphql/type'; * * getNamedType(null); // => undefined * getNamedType(undefined); // => undefined * ``` */ export declare function getNamedType(type: undefined | null): void; /** * Returns the named input type after unwrapping all list and non-null wrappers. * @param type - The GraphQL input type to inspect. * @returns The named input type after unwrapping all wrappers. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { getNamedType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Query { * review(input: [ReviewInput!]!): Boolean * } * `); * * const inputArg = schema.getQueryType()?.getFields().review.args[0]; * * getNamedType(inputArg?.type).toString(); // => 'ReviewInput' * ``` */ export declare function getNamedType(type: GraphQLInputType): GraphQLNamedInputType; /** * Returns the named output type after unwrapping all list and non-null wrappers. * @param type - The GraphQL output type to inspect. * @returns The named output type after unwrapping all wrappers. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { getNamedType } from 'graphql/type'; * * const schema = buildSchema(` * type User { * name: String * } * * type Query { * users: [User!]! * } * `); * * const usersField = schema.getQueryType()?.getFields().users; * * getNamedType(usersField?.type).toString(); // => 'User' * ``` */ export declare function getNamedType(type: GraphQLOutputType): GraphQLNamedOutputType; /** * Returns the named type after unwrapping all list and non-null wrappers. * @param type - The GraphQL type to inspect. * @returns The named type after unwrapping all wrappers. * @example * ```ts * import { * GraphQLList, * GraphQLNonNull, * GraphQLString, * getNamedType, * } from 'graphql/type'; * * const nestedType = new GraphQLNonNull( * new GraphQLList(new GraphQLNonNull(GraphQLString)), * ); * * getNamedType(nestedType); // => GraphQLString * ``` */ export declare function getNamedType(type: GraphQLType): GraphQLNamedType; /** * Returns the named type after unwrapping all list and non-null wrappers. * @param type - The GraphQL type to inspect. * @returns The named type after unwrapping all wrappers, or undefined for nullish input. * @example * ```ts * import { GraphQLList, GraphQLString, getNamedType } from 'graphql/type'; * * getNamedType(new GraphQLList(GraphQLString)); // => GraphQLString * getNamedType(undefined); // => undefined * ``` */ export declare function getNamedType(type: Maybe): GraphQLNamedType | undefined; /** * An interface for all Schema Elements. * * @internal */ export interface GraphQLSchemaElement { toString: () => string; toJSON: () => string; } /** * Used while defining GraphQL types to allow for circular references in * otherwise immutable type definitions. * @typeParam T - The element type returned by the thunk or array. */ export type ThunkReadonlyArray = (() => ReadonlyArray) | ReadonlyArray; /** * A thunk that resolves to an object map. * @typeParam T - Value type stored in the object map. */ export type ThunkObjMap = (() => ObjMap) | ObjMap; /** * Resolves a thunked readonly array. * @param thunk - The thunk or value to resolve. * @returns The resolved readonly array. * @typeParam T - The element type resolved from the thunk or array. * @example * ```ts * import { GraphQLString, resolveReadonlyArrayThunk } from 'graphql/type'; * * const lazyFields = resolveReadonlyArrayThunk(() => [GraphQLString]); * const fields = resolveReadonlyArrayThunk([GraphQLString]); * * lazyFields; // => [GraphQLString] * fields; // => [GraphQLString] * ``` */ export declare function resolveReadonlyArrayThunk(thunk: ThunkReadonlyArray): ReadonlyArray; /** * Resolves a thunked object map. * @param thunk - The thunk or value to resolve. * @returns The resolved object map. * @typeParam T - The object-map value type resolved from the thunk or map. * @example * ```ts * import { GraphQLString, resolveObjMapThunk } from 'graphql/type'; * * const lazyFields = resolveObjMapThunk(() => ({ name: GraphQLString })); * const fields = resolveObjMapThunk({ name: GraphQLString }); * * lazyFields.name; // => GraphQLString * fields.name; // => GraphQLString * ``` */ export declare function resolveObjMapThunk(thunk: ThunkObjMap): ObjMap; /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLScalarTypeExtensions { [attributeName: string | symbol]: unknown; } /** * Scalar Type Definition * * Scalar types define the leaf values of a GraphQL response and the input * values accepted by arguments and input object fields. A scalar type has a * name and coercion functions that validate and convert runtime values and * GraphQL literals. * * If a type's coerceOutputValue function returns `null` or does not return a * value (i.e. it returns `undefined`) then an error will be raised and a * `null` value will be returned in the response. Prefer validating inputs * before execution so clients receive input diagnostics before result coercion * fails. * Custom scalar behavior is defined via the following functions: * * - coerceOutputValue(value): Implements "Result Coercion". Given an internal value, * produces an external value valid for this type. Returns undefined or * throws an error to indicate invalid values. * * - coerceInputValue(value): Implements "Input Coercion" for values. Given an * external value (for example, variable values), produces an internal value * valid for this type. Returns undefined or throws an error to indicate * invalid values. * * - coerceInputLiteral(ast): Implements "Input Coercion" for constant literals. * Given a GraphQL literal (AST) (for example, an argument value), produces * an internal value valid for this type. Returns undefined or throws an * error to indicate invalid values. * * - valueToLiteral(value): Converts an external value to a GraphQL * literal (AST). Returns undefined or throws an error to indicate * invalid values. * * Deprecated, to be removed in v18: * * - serialize(value): Implements "Result Coercion". Renamed to * `coerceOutputValue()`. * * - parseValue(value): Implements "Input Coercion" for values. Renamed to * `coerceInputValue()`. * * - parseLiteral(ast): Implements "Input Coercion" for literals including * non-specified replacement of variables embedded within complex scalars. * Replaced by the combination of the `replaceVariables()` utility and the * `coerceInputLiteral()` method. * @typeParam TInternal - Internal runtime representation for this scalar. * @typeParam TExternal - External representation accepted from or returned to callers. * @example * ```ts * import { GraphQLScalarType, Kind } from 'graphql'; * * const ensureOdd = (value) => { * if (!Number.isFinite(value)) { * throw new Error( * `Scalar "Odd" cannot represent "${value}" since it is not a finite number.`, * ); * } * * if (value % 2 === 0) { * throw new Error( * `Scalar "Odd" cannot represent "${value}" since it is even.`, * ); * } * * return value; * }; * * const OddType = new GraphQLScalarType({ * name: 'Odd', * coerceOutputValue: (value) => { * return ensureOdd(value); * }, * coerceInputValue: (value) => { * return ensureOdd(value); * }, * valueToLiteral: (value) => { * return { kind: Kind.INT, value: String(ensureOdd(value)) }; * }, * }); * ``` */ export declare class GraphQLScalarType implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** URL identifying the behavior specified for this custom scalar. */ specifiedByURL: Maybe; /** * Deprecated legacy serializer used to convert internal values for response * output. Use `coerceOutputValue()` instead. * @deprecated use `coerceOutputValue()` instead, `serialize()` will be removed in v18 */ serialize: GraphQLScalarSerializer; /** * Deprecated legacy parser used to convert externally provided input values. * Use `coerceInputValue()` instead. * @deprecated use `coerceInputValue()` instead, `parseValue()` will be removed in v18 */ parseValue: GraphQLScalarValueParser; /** * Deprecated legacy parser used to convert externally provided input * literals. Use `replaceVariables()` and `coerceInputLiteral()` instead. * @deprecated use `replaceVariables()` and `coerceInputLiteral()` instead, `parseLiteral()` will be removed in v18 */ parseLiteral: GraphQLScalarLiteralParser; /** Coercer used to convert internal scalar values for response output. */ coerceOutputValue: GraphQLScalarOutputValueCoercer; /** Coercer used to convert externally provided scalar input values. */ coerceInputValue: GraphQLScalarInputValueCoercer; /** Coercer used to convert GraphQL scalar input literals. */ coerceInputLiteral: GraphQLScalarInputLiteralCoercer | undefined; /** Converter used to produce GraphQL literals from runtime input values. */ valueToLiteral: GraphQLScalarValueToLiteral | undefined; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; /** * Creates a GraphQLScalarType instance. * @param config - Configuration describing this object. * @example * ```ts * import { Kind, parse } from 'graphql/language'; * import { GraphQLScalarType } from 'graphql/type'; * * const document = parse(` * "Odd integer values." * scalar Odd @specifiedBy(url: "https://example.com/odd") * * extend scalar Odd @specifiedBy(url: "https://example.com/odd-v2") * `); * * const Odd = new GraphQLScalarType({ * name: 'Odd', * description: 'Odd integer values.', * specifiedByURL: 'https://example.com/odd', * coerceOutputValue: (value) => { * if (typeof value !== 'number' || value % 2 === 0) { * throw new TypeError('Odd can only produce odd numbers.'); * } * return value; * }, * coerceInputValue: (value) => { * if (typeof value !== 'number' || value % 2 === 0) { * throw new TypeError('Odd can only accept odd numbers.'); * } * return value; * }, * coerceInputLiteral: (ast) => { * if (ast.kind !== Kind.INT) { * throw new TypeError('Odd can only accept integer literals.'); * } * const value = Number(ast.value); * if (value % 2 === 0) { * throw new TypeError('Odd can only accept odd integer literals.'); * } * return value; * }, * valueToLiteral: (value) => { * return { kind: Kind.INT, value: String(ensureOdd(value)) }; * }, * extensions: { numeric: true }, * astNode: document.definitions[0], * extensionASTNodes: [document.definitions[1]], * }); * * Odd.description; // => 'Odd integer values.' * Odd.specifiedByURL; // => 'https://example.com/odd' * Odd.coerceOutputValue(3); // => 3 * Odd.coerceInputValue(5); // => 5 * Odd.extensions; // => { numeric: true } * ``` */ constructor(config: Readonly>); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { GraphQLScalarType } from 'graphql/type'; * * const Url = new GraphQLScalarType({ * name: 'Url', * description: 'An absolute URL string.', * specifiedByURL: 'https://url.spec.whatwg.org/', * }); * * const config = Url.toConfig(); * const UrlCopy = new GraphQLScalarType(config); * * config.name; // => 'Url' * config.specifiedByURL; // => 'https://url.spec.whatwg.org/' * UrlCopy.name; // => Url.name * ``` */ toConfig(): GraphQLScalarTypeNormalizedConfig; /** * Returns the schema coordinate identifying this scalar type. * @returns The schema coordinate for this scalar type. * @example * ```ts * import { GraphQLScalarType } from 'graphql/type'; * * const DateTime = new GraphQLScalarType({ name: 'DateTime' }); * * DateTime.toString(); // => 'DateTime' * String(DateTime); // => 'DateTime' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLScalarType } from 'graphql/type'; * * const DateTime = new GraphQLScalarType({ name: 'DateTime' }); * * DateTime.toJSON(); // => 'DateTime' * JSON.stringify({ type: DateTime }); // => '{"type":"DateTime"}' * ``` */ toJSON(): string; } /** * Deprecated function type that serializes a runtime value as a scalar output * value. Use `GraphQLScalarOutputValueCoercer` instead. * @typeParam TExternal - External representation accepted from or returned to callers. * @deprecated Use GraphQLScalarOutputValueCoercer instead. Will be removed in v18. */ export type GraphQLScalarSerializer = (outputValue: unknown) => TExternal; /** * Function used to coerce internal scalar values for response output. * @typeParam TExternal - External representation accepted from or returned to callers. */ export type GraphQLScalarOutputValueCoercer = (outputValue: unknown) => TExternal; /** * Deprecated function type that parses a runtime input value as a scalar input * value. Use `GraphQLScalarInputValueCoercer` instead. * @typeParam TInternal - Internal runtime representation for this scalar. * @deprecated Use GraphQLScalarInputValueCoercer instead. Will be removed in v18. */ export type GraphQLScalarValueParser = (inputValue: unknown) => TInternal; /** * Function used to coerce externally provided scalar input values. * @typeParam TInternal - Internal runtime representation for this scalar. */ export type GraphQLScalarInputValueCoercer = (inputValue: unknown) => TInternal; /** * Deprecated function type that parses a GraphQL value literal as a scalar * input value. Use `GraphQLScalarInputLiteralCoercer` instead. * @typeParam TInternal - Internal runtime representation for this scalar. * @deprecated Use GraphQLScalarInputLiteralCoercer instead. Will be removed in v18. */ export type GraphQLScalarLiteralParser = (valueNode: ValueNode, variables: Maybe>) => Maybe; /** * Function used to coerce GraphQL scalar input literals. * @typeParam TInternal - Internal runtime representation for this scalar. */ export type GraphQLScalarInputLiteralCoercer = (valueNode: ConstValueNode) => Maybe; /** @internal */ export type GraphQLScalarValueToLiteral = (inputValue: unknown) => ConstValueNode | undefined; /** * Configuration used to construct a GraphQLScalarType. * @typeParam TInternal - Internal runtime representation for this scalar. * @typeParam TExternal - External representation accepted from or returned to callers. */ export interface GraphQLScalarTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** URL identifying the behavior specified for this custom scalar. */ specifiedByURL?: Maybe; /** * Deprecated legacy serializer used to convert internal values for response * output. Use `coerceOutputValue()` instead. * @deprecated use `coerceOutputValue()` instead, `serialize()` will be removed in v18 */ serialize?: GraphQLScalarSerializer | undefined; /** * Deprecated legacy parser used to convert externally provided input values. * Use `coerceInputValue()` instead. * @deprecated use `coerceInputValue()` instead, `parseValue()` will be removed in v18 */ parseValue?: GraphQLScalarValueParser | undefined; /** * Deprecated legacy parser used to convert externally provided input * literals. Use `replaceVariables()` and `coerceInputLiteral()` instead. * @deprecated use `replaceVariables()` and `coerceInputLiteral()` instead, `parseLiteral()` will be removed in v18 */ parseLiteral?: GraphQLScalarLiteralParser | undefined; /** Coerces an internal value to include in a response. */ coerceOutputValue?: GraphQLScalarOutputValueCoercer | undefined; /** Coerces an externally provided value to use as an input. */ coerceInputValue?: GraphQLScalarInputValueCoercer | undefined; /** Coerces an externally provided const literal value to use as an input. */ coerceInputLiteral?: GraphQLScalarInputLiteralCoercer | undefined; /** Translates an externally provided value to a literal (AST). */ valueToLiteral?: GraphQLScalarValueToLiteral | undefined; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; } /** @internal */ export interface GraphQLScalarTypeNormalizedConfig extends GraphQLScalarTypeConfig { serialize: GraphQLScalarSerializer; parseValue: GraphQLScalarValueParser; parseLiteral: GraphQLScalarLiteralParser; coerceOutputValue: GraphQLScalarOutputValueCoercer; coerceInputValue: GraphQLScalarInputValueCoercer; coerceInputLiteral: GraphQLScalarInputLiteralCoercer | undefined; extensions: Readonly; extensionASTNodes: ReadonlyArray; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. * We've provided these template arguments because this is an open type and * you may find them useful. * @typeParam _TSource - Reserved source type parameter for extension typing. * @typeParam _TContext - Reserved context type parameter for extension typing. */ export interface GraphQLObjectTypeExtensions<_TSource = any, _TContext = any> { [attributeName: string | symbol]: unknown; } /** * Object Type Definition * * Almost all of the GraphQL types you define will be object types. Object types * have a name, but most importantly describe their fields. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @typeParam TAbstract - Runtime value type used for abstract type resolution. * @example * ```ts * const AddressType = new GraphQLObjectType({ * name: 'Address', * fields: { * street: { type: GraphQLString }, * number: { type: GraphQLInt }, * formatted: { * type: GraphQLString, * resolve: (obj) => { * return obj.number + ' ' + obj.street; * }, * }, * }, * }); * ``` * @example * When two types need to refer to each other, or a type needs to refer to * itself in a field, you can use a function expression (aka a closure or a * thunk) to supply the fields lazily. * * ```ts * const PersonType = new GraphQLObjectType({ * name: 'Person', * fields: () => ({ * name: { type: GraphQLString }, * bestFriend: { type: PersonType }, * }), * }); * ``` */ export declare class GraphQLObjectType implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Predicate used to determine whether a runtime value belongs to this object type. */ isTypeOf: Maybe>; /** Custom extension fields reserved for users. */ extensions: Readonly>; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; private _fields; private _interfaces; /** * Creates a GraphQLObjectType instance. * @param config - Configuration describing this object. * @example * ```ts * // Configure an object type with interfaces, fields, arguments, and metadata. * import { parse } from 'graphql/language'; * import { * GraphQLID, * GraphQLInterfaceType, * GraphQLNonNull, * GraphQLObjectType, * GraphQLString, * } from 'graphql/type'; * * const document = parse(` * type User implements Node { * id: ID! * name(format: String = "short"): String * } * * extend type User { * displayName: String * } * `); * const definition = document.definitions[0]; * const nameField = definition.fields[1]; * const formatArg = nameField.arguments[0]; * * const Node = new GraphQLInterfaceType({ * name: 'Node', * fields: { * id: { type: new GraphQLNonNull(GraphQLID) }, * }, * }); * * const User = new GraphQLObjectType({ * name: 'User', * description: 'A registered user.', * interfaces: [Node], * fields: { * id: { type: new GraphQLNonNull(GraphQLID) }, * name: { * description: 'The formatted user name.', * type: GraphQLString, * args: { * format: { * description: 'Controls the name format.', * type: GraphQLString, * default: { value: 'short' }, * deprecationReason: 'Use locale instead.', * extensions: { public: true }, * astNode: formatArg, * }, * }, * resolve: (user, { format }) => { * return format === 'long' ? user.fullName : user.name; * }, * deprecationReason: 'Use displayName.', * extensions: { cacheSeconds: 60 }, * astNode: nameField, * }, * }, * isTypeOf: (value) => { * return typeof value === 'object' && value != null && 'id' in value; * }, * extensions: { entity: 'User' }, * astNode: definition, * extensionASTNodes: [document.definitions[1]], * }); * * User.name; // => 'User' * User.getInterfaces(); // => [Node] * Object.keys(User.getFields()); // => ['id', 'name'] * User.getFields().name.args[0].default.value; // => 'short' * User.extensions; // => { entity: 'User' } * ``` * @example * ```ts * // This variant configures a subscription field with subscribe and resolve functions. * import { GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const Subscription = new GraphQLObjectType({ * name: 'Subscription', * fields: { * greeting: { * type: GraphQLString, * subscribe: async function* () { * yield { greeting: 'Hello!' }; * }, * resolve: (event) => { * return event.greeting; * }, * }, * }, * }); * * typeof Subscription.getFields().greeting.subscribe; // => 'function' * ``` */ constructor(config: Readonly>); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns the fields defined by this type. * @returns The fields keyed by field name. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertObjectType } from 'graphql/type'; * * const schema = buildSchema(` * type User { * id: ID! * name: String * } * * type Query { * viewer: User * } * `); * * const User = assertObjectType(schema.getType('User')); * const fields = User.getFields(); * * Object.keys(fields); // => ['id', 'name'] * String(fields.id.type); // => 'ID!' * ``` */ getFields(): GraphQLFieldMap; /** * Returns the interfaces implemented by this type. * @returns The implemented interfaces. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertObjectType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * viewer: User * } * `); * * const User = assertObjectType(schema.getType('User')); * * User.getInterfaces().map((type) => type.name); // => ['Node'] * ``` */ getInterfaces(): ReadonlyArray; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const User = new GraphQLObjectType({ * name: 'User', * fields: { * name: { type: GraphQLString }, * }, * }); * * const config = User.toConfig(); * const UserCopy = new GraphQLObjectType(config); * * config.fields.name.type; // => GraphQLString * UserCopy.getFields().name.type; // => GraphQLString * ``` */ toConfig(): GraphQLObjectTypeNormalizedConfig; /** * Returns the schema coordinate identifying this object type. * @returns The schema coordinate for this object type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertObjectType } from 'graphql/type'; * * const schema = buildSchema(` * type User { * name: String * } * * type Query { * viewer: User * } * `); * * const User = assertObjectType(schema.getType('User')); * * User.toString(); // => 'User' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const User = new GraphQLObjectType({ * name: 'User', * fields: { name: { type: GraphQLString } }, * }); * * User.toJSON(); // => 'User' * JSON.stringify({ type: User }); // => '{"type":"User"}' * ``` */ toJSON(): string; } /** * Configuration used to construct a GraphQLObjectType. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @typeParam TAbstract - Runtime value type used for abstract type resolution. */ export interface GraphQLObjectTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Interfaces implemented by this object or interface type. */ interfaces?: ThunkReadonlyArray | undefined; /** Fields declared by this object, interface, input object, or literal. */ fields: ThunkObjMap>; /** Predicate used to determine whether a runtime value belongs to this object type. */ isTypeOf?: Maybe>; /** Custom extension fields reserved for users. */ extensions?: Maybe>>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; } /** @internal */ export interface GraphQLObjectTypeNormalizedConfig extends GraphQLObjectTypeConfig { interfaces: ReadonlyArray; fields: GraphQLFieldNormalizedConfigMap; extensions: Readonly>; extensionASTNodes: ReadonlyArray; } /** * Resolves the concrete object type for an abstract GraphQL type. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. */ export type GraphQLTypeResolver = (value: TSource, context: TContext, info: GraphQLResolveInfo, abstractType: GraphQLAbstractType) => PromiseOrValue; /** * Checks whether a runtime value belongs to a GraphQL object type. * @typeParam TAbstract - Runtime value type used for abstract type resolution. * @typeParam TContext - Context object type passed to resolvers. */ export type GraphQLIsTypeOfFn = (value: TAbstract, context: TContext, info: GraphQLResolveInfo) => PromiseOrValue; /** * Resolves the runtime value for a GraphQL field. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @typeParam TArgs - Argument object type passed to resolvers. * @typeParam TResult - Result value type. */ export type GraphQLFieldResolver = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo) => TResult; /** Utilities available from resolver info for tracking asynchronous work. */ export interface GraphQLResolveInfoHelpers { /** * Promise.all wrapper that allows rejected branches to be tracked * as execution async work. * * Intended use: return or await this promise from resolver work. * Un-awaited async side effects are an anti-pattern: * * const { promiseAll } = info.getAsyncHelpers(); * promiseAll([someAsyncWork(), someOtherAsyncWork()]).catch(() => undefined); * * In that anti-pattern, tracking starts only after rejection (on a * later microtask), so this work is not guaranteed to delay * `hooks.asyncWorkFinished`. * * Use `track(...)` for un-awaited async side effects: * * const { track } = info.getAsyncHelpers(); * track([ * someAsyncWork().catch(() => undefined), * someOtherAsyncWork().catch(() => undefined) * ]); */ readonly promiseAll: (values: ReadonlyArray | T>) => Promise>; /** Tracks asynchronous work that should delay execution completion hooks. */ readonly track: (maybePromises: ReadonlyArray) => void; } /** Information about the currently executing GraphQL field. */ export interface GraphQLResolveInfo { /** The field name referenced by this schema coordinate. */ readonly fieldName: string; /** AST field nodes that contributed to the current field execution. */ readonly fieldNodes: ReadonlyArray; /** GraphQL output type declared for the current field. */ readonly returnType: GraphQLOutputType; /** Object type that owns the current field. */ readonly parentType: GraphQLObjectType; /** Response path where this error occurred during execution. */ readonly path: Path; /** The schema used for validation or execution. */ readonly schema: GraphQLSchema; /** Fragment definitions in the operation document keyed by fragment name. */ readonly fragments: ObjMap; /** Initial root value passed to the operation. */ readonly rootValue: unknown; /** The operation selected for execution. */ readonly operation: OperationDefinitionNode; /** * Coerced variable values and source metadata for this operation. Resolver * code that needs runtime variable values should read `variableValues.coerced`. */ readonly variableValues: VariableValues; /** Returns the AbortSignal supplied for this execution, if any. */ readonly getAbortSignal: () => AbortSignal | undefined; /** Returns helper functions for tracking asynchronous resolver work. */ readonly getAsyncHelpers: () => GraphQLResolveInfoHelpers; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. * We've provided these template arguments because this is an open type and * you may find them useful. * @typeParam _TSource - Reserved source type parameter for extension typing. * @typeParam _TContext - Reserved context type parameter for extension typing. * @typeParam _TArgs - Reserved argument type parameter for extension typing. */ export interface GraphQLFieldExtensions<_TSource, _TContext, _TArgs = any> { [attributeName: string | symbol]: unknown; } /** * Configuration used to define a GraphQL field. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @typeParam TArgs - Argument object type passed to resolvers. */ export interface GraphQLFieldConfig { /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLOutputType; /** Arguments accepted by this field or directive. */ args?: GraphQLFieldConfigArgumentMap | undefined; /** Resolver function used to produce this field value. */ resolve?: GraphQLFieldResolver | undefined; /** Resolver function used to create a subscription event stream for this field. */ subscribe?: GraphQLFieldResolver | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason?: Maybe; /** Custom extension fields reserved for users. */ extensions?: Maybe>>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; } /** @internal */ export interface GraphQLFieldNormalizedConfig extends GraphQLFieldConfig { args: GraphQLFieldNormalizedConfigArgumentMap; extensions: Readonly>; } /** A map of argument names to argument configuration objects. */ export type GraphQLFieldConfigArgumentMap = ObjMap; /** @internal */ export type GraphQLFieldNormalizedConfigArgumentMap = ObjMap; /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLArgumentExtensions { [attributeName: string | symbol]: unknown; } /** Configuration used to define a GraphQL argument. */ export interface GraphQLArgumentConfig { /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLInputType; /** * Deprecated legacy default value for this argument. Use `default` instead. * @deprecated use `default` instead, `defaultValue` will be removed in v18 */ defaultValue?: unknown; /** Default value represented as either a runtime value or a GraphQL literal. */ default?: GraphQLDefaultInput | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason?: Maybe; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; } /** @internal */ export interface GraphQLArgumentNormalizedConfig extends GraphQLArgumentConfig { default: GraphQLDefaultInput | undefined; extensions: Readonly; } /** * A map of field names to field configuration objects. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. */ export type GraphQLFieldConfigMap = ObjMap>; /** @internal */ export type GraphQLFieldNormalizedConfigMap = ObjMap>; /** * A resolved GraphQL field definition. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @typeParam TArgs - Argument object type passed to resolvers. */ export declare class GraphQLField implements GraphQLSchemaElement { /** Object or interface type that owns this field, if known. */ parentType: GraphQLObjectType | GraphQLInterfaceType | undefined; /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLOutputType; /** Arguments accepted by this field or directive. */ args: ReadonlyArray; /** Resolver function used to produce this field value. */ resolve?: GraphQLFieldResolver | undefined; /** Resolver function used to create a subscription event stream for this field. */ subscribe?: GraphQLFieldResolver | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly>; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** * Creates a resolved GraphQL field definition. * @param parentType - Object or interface type that owns this field, if known. * @param name - Field name. * @param config - Field configuration. * @example * ```ts * import { parse } from 'graphql/language'; * import { GraphQLField, GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const document = parse('type Query { greeting: String }'); * const fieldNode = document.definitions[0].fields[0]; * const field = new GraphQLField(Query, 'greeting', { * description: 'Greeting text.', * type: GraphQLString, * args: { * name: { type: GraphQLString, default: { value: 'world' } }, * }, * resolve: (_source, { name }) => `Hello, ${name}!`, * subscribe: async function* () { * yield { greeting: 'Hello!' }; * }, * deprecationReason: 'Use hello.', * extensions: { cacheSeconds: 60 }, * astNode: fieldNode, * }); * * field.parentType; // => Query * field.name; // => 'greeting' * field.args[0].default.value; // => 'world' * typeof field.subscribe; // => 'function' * field.deprecationReason; // => 'Use hello.' * field.astNode; // => fieldNode * ``` */ constructor(parentType: GraphQLObjectType | GraphQLInterfaceType | undefined, name: string, config: GraphQLFieldConfig); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns a normalized configuration object for this field. * @returns A configuration object that can be used to recreate this field. * @example * ```ts * import { GraphQLField, GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { * type: GraphQLString, * extensions: { cacheSeconds: 60 }, * }); * * field.toConfig().type; // => GraphQLString * field.toConfig().extensions; // => { cacheSeconds: 60 } * ``` */ toConfig(): GraphQLFieldNormalizedConfig; /** * Returns this field as a schema coordinate string. * @returns The field coordinate. * @example * ```ts * import { GraphQLField, GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * * field.toString(); // => 'Query.greeting' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The field coordinate. * @example * ```ts * import { GraphQLField, GraphQLObjectType, GraphQLString } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * * JSON.stringify(field); // => '"Query.greeting"' * ``` */ toJSON(): string; } /** A resolved GraphQL argument definition. */ export declare class GraphQLArgument implements GraphQLSchemaElement { /** Field or directive that owns this argument. */ parent: GraphQLField | GraphQLDirective; /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLInputType; /** * Deprecated legacy default value used when no explicit value is supplied. * Use `default` instead. * @deprecated use `default` instead, `defaultValue` will be removed in v18 */ defaultValue: unknown; /** Default value represented as either a runtime value or a GraphQL literal. */ default: GraphQLDefaultInput | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** * Creates a resolved GraphQL argument definition. * @param parent - Field or directive that owns this argument. * @param name - Argument name. * @param config - Argument configuration. * @example * ```ts * import { * GraphQLArgument, * GraphQLField, * GraphQLObjectType, * GraphQLString, * } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * const arg = new GraphQLArgument(field, 'name', { * type: GraphQLString, * default: { value: 'world' }, * }); * * arg.parent; // => field * arg.name; // => 'name' * arg.default.value; // => 'world' * ``` */ constructor(parent: GraphQLField | GraphQLDirective, name: string, config: GraphQLArgumentConfig); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns a normalized configuration object for this argument. * @returns A configuration object that can be used to recreate this argument. * @example * ```ts * import { * GraphQLArgument, * GraphQLField, * GraphQLObjectType, * GraphQLString, * } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * const arg = new GraphQLArgument(field, 'name', { * type: GraphQLString, * default: { value: 'world' }, * }); * * arg.toConfig().default.value; // => 'world' * ``` */ toConfig(): GraphQLArgumentNormalizedConfig; /** * Returns this argument as a schema coordinate string. * @returns The argument coordinate. * @example * ```ts * import { * GraphQLArgument, * GraphQLField, * GraphQLObjectType, * GraphQLString, * } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * const arg = new GraphQLArgument(field, 'name', { type: GraphQLString }); * * arg.toString(); // => 'Query.greeting(name:)' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The argument coordinate. * @example * ```ts * import { * GraphQLArgument, * GraphQLField, * GraphQLObjectType, * GraphQLString, * } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'greeting', { type: GraphQLString }); * const arg = new GraphQLArgument(field, 'name', { type: GraphQLString }); * * JSON.stringify(arg); // => '"Query.greeting(name:)"' * ``` */ toJSON(): string; } /** * Returns true when the argument is non-null and has no default value. * @param arg - The argument definition to inspect. * @returns True when the argument is non-null and has no default value. * @example * ```ts * import { * GraphQLArgument, * GraphQLField, * GraphQLInt, * GraphQLNonNull, * GraphQLObjectType, * GraphQLString, * isRequiredArgument, * } from 'graphql/type'; * * const Query = new GraphQLObjectType({ name: 'Query', fields: {} }); * const field = new GraphQLField(Query, 'reviews', { type: GraphQLString }); * const requiredArgument = new GraphQLArgument(field, 'id', { * type: new GraphQLNonNull(GraphQLInt), * }); * const optionalArgument = new GraphQLArgument(field, 'name', { * type: GraphQLString, * }); * const argumentWithDefault = new GraphQLArgument(field, 'limit', { * type: new GraphQLNonNull(GraphQLInt), * default: { value: 10 }, * }); * * isRequiredArgument(requiredArgument); // => true * isRequiredArgument(optionalArgument); // => false * isRequiredArgument(argumentWithDefault); // => false * ``` */ export declare function isRequiredArgument(arg: GraphQLArgument | GraphQLVariableSignature): boolean; /** * A map of field names to resolved field definitions. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. */ export type GraphQLFieldMap = ObjMap>; /** Default input represented as either a runtime value or a GraphQL literal. */ export type GraphQLDefaultInput = { /** Runtime default value. */ value: unknown; /** GraphQL literal default value is not provided in this variant. */ literal?: never; } | { /** GraphQL literal default value. */ literal: ConstValueNode; /** Runtime default value is not provided in this variant. */ value?: never; }; /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLInterfaceTypeExtensions { [attributeName: string | symbol]: unknown; } /** * Interface Type Definition * * When a field can return one of a heterogeneous set of types, a Interface type * is used to describe what types are possible, what fields are in common across * all types, as well as a function to determine which type is actually used * when the field is resolved. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @example * ```ts * const EntityType = new GraphQLInterfaceType({ * name: 'Entity', * fields: { * name: { type: GraphQLString }, * }, * }); * ``` */ export declare class GraphQLInterfaceType implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Function that resolves the concrete object type for this abstract type. */ resolveType: Maybe>; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; private _fields; private _interfaces; /** * Creates a GraphQLInterfaceType instance. * @param config - Configuration describing this object. * @example * ```ts * import { parse } from 'graphql/language'; * import { GraphQLID, GraphQLInterfaceType, GraphQLNonNull } from 'graphql/type'; * * const document = parse(` * interface Node { * id: ID! * } * * interface Resource implements Node { * id: ID! * } * * extend interface Resource { * url: String * } * `); * * const Node = new GraphQLInterfaceType({ * name: 'Node', * fields: { * id: { type: new GraphQLNonNull(GraphQLID) }, * }, * }); * * const Resource = new GraphQLInterfaceType({ * name: 'Resource', * description: 'An addressable resource.', * interfaces: [Node], * fields: { * id: { type: new GraphQLNonNull(GraphQLID) }, * }, * resolveType: (value) => { * return typeof value === 'object' && value != null && 'url' in value * ? 'WebPage' * : null; * }, * extensions: { abstract: true }, * astNode: document.definitions[1], * extensionASTNodes: [document.definitions[2]], * }); * * Resource.name; // => 'Resource' * Resource.getInterfaces(); // => [Node] * Object.keys(Resource.getFields()); // => ['id'] * Resource.extensions; // => { abstract: true } * ``` */ constructor(config: Readonly>); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns the fields defined by this type. * @returns The fields keyed by field name. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInterfaceType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * const Node = assertInterfaceType(schema.getType('Node')); * const fields = Node.getFields(); * * Object.keys(fields); // => ['id'] * String(fields.id.type); // => 'ID!' * ``` */ getFields(): GraphQLFieldMap; /** * Returns the interfaces implemented by this type. * @returns The implemented interfaces. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInterfaceType } from 'graphql/type'; * * const schema = buildSchema(` * interface Resource { * url: String! * } * * interface Image implements Resource { * url: String! * width: Int * } * * type Photo implements Resource & Image { * url: String! * width: Int * } * * type Query { * image: Image * } * `); * * const Image = assertInterfaceType(schema.getType('Image')); * * Image.getInterfaces().map((type) => type.name); // => ['Resource'] * ``` */ getInterfaces(): ReadonlyArray; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { GraphQLID, GraphQLInterfaceType, GraphQLNonNull } from 'graphql/type'; * * const Node = new GraphQLInterfaceType({ * name: 'Node', * fields: { * id: { type: new GraphQLNonNull(GraphQLID) }, * }, * }); * * const config = Node.toConfig(); * const NodeCopy = new GraphQLInterfaceType(config); * * String(config.fields.id.type); // => 'ID!' * String(NodeCopy.getFields().id.type); // => 'ID!' * ``` */ toConfig(): GraphQLInterfaceTypeNormalizedConfig; /** * Returns the schema coordinate identifying this interface type. * @returns The schema coordinate for this interface type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInterfaceType } from 'graphql/type'; * * const schema = buildSchema(` * interface Node { * id: ID! * } * * type User implements Node { * id: ID! * } * * type Query { * node: Node * } * `); * * const Node = assertInterfaceType(schema.getType('Node')); * * Node.toString(); // => 'Node' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLInterfaceType, GraphQLString } from 'graphql/type'; * * const Named = new GraphQLInterfaceType({ * name: 'Named', * fields: { name: { type: GraphQLString } }, * }); * * Named.toJSON(); // => 'Named' * JSON.stringify({ type: Named }); // => '{"type":"Named"}' * ``` */ toJSON(): string; } /** * Configuration used to construct a GraphQLInterfaceType. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. */ export interface GraphQLInterfaceTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Interfaces implemented by this object or interface type. */ interfaces?: ThunkReadonlyArray | undefined; /** Fields declared by this object, interface, input object, or literal. */ fields: ThunkObjMap>; /** * Optionally provide a custom type resolver function. If one is not provided, * the default implementation will call `isTypeOf` on each implementing * Object type. */ resolveType?: Maybe>; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; } /** @internal */ export interface GraphQLInterfaceTypeNormalizedConfig extends GraphQLInterfaceTypeConfig { interfaces: ReadonlyArray; fields: GraphQLFieldNormalizedConfigMap; extensions: Readonly; extensionASTNodes: ReadonlyArray; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLUnionTypeExtensions { [attributeName: string | symbol]: unknown; } /** * Union Type Definition * * When a field can return one of a heterogeneous set of types, a Union type * is used to describe what types are possible as well as providing a function * to determine which type is actually used when the field is resolved. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. * @example * ```ts * const PetType = new GraphQLUnionType({ * name: 'Pet', * types: [DogType, CatType], * resolveType: (value) => { * if (value instanceof Dog) { * return DogType; * } * if (value instanceof Cat) { * return CatType; * } * }, * }); * ``` */ export declare class GraphQLUnionType implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Function that resolves the concrete object type for this abstract type. */ resolveType: Maybe>; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; private _types; /** * Creates a GraphQLUnionType instance. * @param config - Configuration describing this object. * @example * ```ts * import { parse } from 'graphql/language'; * import { * GraphQLObjectType, * GraphQLString, * GraphQLUnionType, * } from 'graphql/type'; * * const document = parse(` * union Media = Photo | Video * * extend union Media = Audio * `); * * const Photo = new GraphQLObjectType({ * name: 'Photo', * fields: { url: { type: GraphQLString } }, * }); * const Video = new GraphQLObjectType({ * name: 'Video', * fields: { url: { type: GraphQLString } }, * }); * * const Media = new GraphQLUnionType({ * name: 'Media', * description: 'Media that can appear in a search result.', * types: [Photo, Video], * resolveType: (value) => { * return typeof value === 'object' && value != null && 'duration' in value * ? 'Video' * : 'Photo'; * }, * extensions: { searchable: true }, * astNode: document.definitions[0], * extensionASTNodes: [document.definitions[1]], * }); * * Media.description; // => 'Media that can appear in a search result.' * Media.getTypes().map((type) => type.name); // => ['Photo', 'Video'] * Media.extensions; // => { searchable: true } * ``` */ constructor(config: Readonly>); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns the object types included in this union. * @returns The union member object types. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertUnionType } from 'graphql/type'; * * const schema = buildSchema(` * type Photo { * url: String! * } * * type Video { * url: String! * } * * union Media = Photo | Video * * type Query { * media: [Media] * } * `); * * const Media = assertUnionType(schema.getType('Media')); * * Media.getTypes().map((type) => type.name); // => ['Photo', 'Video'] * ``` */ getTypes(): ReadonlyArray; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { * GraphQLObjectType, * GraphQLString, * GraphQLUnionType, * } from 'graphql/type'; * * const Photo = new GraphQLObjectType({ * name: 'Photo', * fields: { url: { type: GraphQLString } }, * }); * const Video = new GraphQLObjectType({ * name: 'Video', * fields: { url: { type: GraphQLString } }, * }); * const Media = new GraphQLUnionType({ * name: 'Media', * types: [Photo, Video], * }); * * const config = Media.toConfig(); * const MediaCopy = new GraphQLUnionType(config); * * MediaCopy.getTypes().map((type) => type.name); // => ['Photo', 'Video'] * ``` */ toConfig(): GraphQLUnionTypeNormalizedConfig; /** * Returns the schema coordinate identifying this union type. * @returns The schema coordinate for this union type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertUnionType } from 'graphql/type'; * * const schema = buildSchema(` * type Photo { * url: String! * } * * union SearchResult = Photo * * type Query { * search: [SearchResult] * } * `); * * const SearchResult = assertUnionType(schema.getType('SearchResult')); * * SearchResult.toString(); // => 'SearchResult' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { * GraphQLObjectType, * GraphQLString, * GraphQLUnionType, * } from 'graphql/type'; * * const Photo = new GraphQLObjectType({ * name: 'Photo', * fields: { url: { type: GraphQLString } }, * }); * const SearchResult = new GraphQLUnionType({ * name: 'SearchResult', * types: [Photo], * }); * * SearchResult.toJSON(); // => 'SearchResult' * JSON.stringify({ type: SearchResult }); // => '{"type":"SearchResult"}' * ``` */ toJSON(): string; } /** * Configuration used to construct a GraphQLUnionType. * @typeParam TSource - Source object type passed to resolvers. * @typeParam TContext - Context object type passed to resolvers. */ export interface GraphQLUnionTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Object types that belong to this union type. */ types: ThunkReadonlyArray; /** * Optionally provide a custom type resolver function. If one is not provided, * the default implementation will call `isTypeOf` on each implementing * Object type. */ resolveType?: Maybe>; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; } /** @internal */ export interface GraphQLUnionTypeNormalizedConfig extends GraphQLUnionTypeConfig { types: ReadonlyArray; extensions: Readonly; extensionASTNodes: ReadonlyArray; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLEnumTypeExtensions { [attributeName: string | symbol]: unknown; } /** * Enum Type Definition * * Enum types define leaf values whose serialized form is one of a fixed set * of GraphQL enum names. Internally, enum values can map to any runtime value, * often integers. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGBType = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGBType.getValue('GREEN')?.value; // => 1 * ``` * * Note: If a value is not provided in a definition, the name of the enum value * will be used as its internal value. */ export declare class GraphQLEnumType/* */ implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; private _values; private _valueLookup; private _nameLookup; /** * Creates a GraphQLEnumType instance. * @param config - Configuration describing this object. * @example * ```ts * import { parse } from 'graphql/language'; * import { GraphQLEnumType } from 'graphql/type'; * * const document = parse(` * enum Episode { * NEW_HOPE * EMPIRE * JEDI * } * * extend enum Episode { * FORCE_AWAKENS * } * `); * const definition = document.definitions[0]; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * description: 'A Star Wars film episode.', * values: { * NEW_HOPE: { * value: 4, * description: 'Released in 1977.', * extensions: { trilogy: 'original' }, * astNode: definition.values[0], * }, * EMPIRE: { value: 5, astNode: definition.values[1] }, * JEDI: { * value: 6, * deprecationReason: 'Use RETURN_OF_THE_JEDI.', * astNode: definition.values[2], * }, * }, * extensions: { catalog: 'films' }, * astNode: definition, * extensionASTNodes: [document.definitions[1]], * }); * * Episode.description; // => 'A Star Wars film episode.' * Episode.coerceOutputValue(5); // => 'EMPIRE' * Episode.coerceInputValue('JEDI'); // => 6 * Episode.getValue('JEDI').deprecationReason; // => 'Use RETURN_OF_THE_JEDI.' * Episode.extensions; // => { catalog: 'films' } * ``` */ constructor(config: Readonly); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns the values defined by this enum type. * @returns Enum value definitions in schema order. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * EMPIRE * JEDI * } * * type Query { * episode: Episode * } * `); * * const Episode = assertEnumType(schema.getType('Episode')); * * Episode.getValues().map((value) => value.name); // => ['NEW_HOPE', 'EMPIRE', 'JEDI'] * ``` */ getValues(): ReadonlyArray; /** * Returns the enum value definition for a value name. * @param name - The GraphQL name to look up. * @returns The matching enum value definition, if it exists. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * EMPIRE * } * * type Query { * episode: Episode * } * `); * * const Episode = assertEnumType(schema.getType('Episode')); * * Episode.getValue('EMPIRE')?.name; // => 'EMPIRE' * Episode.getValue('JEDI'); // => undefined * ``` */ getValue(name: string): Maybe; /** * Serializes a runtime enum value as a GraphQL enum name. * @param outputValue - Runtime enum value to serialize. * @returns The GraphQL enum name for the runtime value. * * This deprecated method delegates to `coerceOutputValue()`; call * `coerceOutputValue()` directly instead. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.serialize(1); // => 'GREEN' * RGB.serialize(3); // throws an error * ``` * @deprecated use `coerceOutputValue()` instead, `serialize()` will be removed in v18 */ serialize(outputValue: unknown): Maybe; /** * Coerces a runtime enum value to a GraphQL enum name. * @param outputValue - Runtime enum value to coerce. * @returns The GraphQL enum name for the runtime value. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.coerceOutputValue(1); // => 'GREEN' * RGB.coerceOutputValue(3); // throws an error * ``` */ coerceOutputValue(outputValue: unknown): Maybe; /** * Deprecated legacy enum parser for externally provided input values. Use * `coerceInputValue()` instead. * @param inputValue - External enum name to parse. * @param hideSuggestions - Whether suggestion text should be omitted from errors. * @returns The internal runtime value for the enum name. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.parseValue('BLUE'); // => 2 * RGB.parseValue('PURPLE', true); // throws an error * ``` * @deprecated use `coerceInputValue()` instead, `parseValue()` will be removed in v18 */ parseValue(inputValue: unknown, hideSuggestions?: Maybe): Maybe; /** * Coerces an external enum name to its internal runtime value. * @param inputValue - External enum name to coerce. * @param hideSuggestions - Whether suggestion text should be omitted from errors. * @returns The internal runtime value for the enum name. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.coerceInputValue('BLUE'); // => 2 * RGB.coerceInputValue('PURPLE'); // throws an error * RGB.coerceInputValue(2); // throws an error * ``` */ coerceInputValue(inputValue: unknown, hideSuggestions?: Maybe): Maybe; /** * Deprecated legacy enum parser for externally provided input literals. Use * `coerceInputLiteral()` instead. * @param valueNode - Enum value AST node to parse. * @param _variables - Deprecated variable values parameter that is no longer used. * @param hideSuggestions - Whether suggestion text should be omitted from errors. * @returns The internal runtime value for the enum literal. * @example * ```ts * import { parseValue } from 'graphql/language'; * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.parseLiteral(parseValue('RED')); // => 0 * RGB.parseLiteral(parseValue('"RED"')); // throws an error * ``` * @deprecated use `coerceInputLiteral()` instead, `parseLiteral()` will be removed in v18 */ parseLiteral(valueNode: ValueNode, _variables: Maybe>, hideSuggestions?: Maybe): Maybe; /** * Coerces an enum value AST node to its internal runtime value. * @param valueNode - Enum value AST node to coerce. * @param hideSuggestions - Whether suggestion text should be omitted from errors. * @returns The internal runtime value for the enum literal. * @example * ```ts * import { parseConstValue } from 'graphql/language'; * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * RGB.coerceInputLiteral(parseConstValue('RED')); // => 0 * RGB.coerceInputLiteral(parseConstValue('"RED"'), true); // throws an error * ``` */ coerceInputLiteral(valueNode: ConstValueNode, hideSuggestions?: Maybe): Maybe; /** * Converts a runtime enum value to a GraphQL enum value AST node. * @param value - Runtime enum value to convert. * @returns Enum value AST node, or undefined if the value is invalid. * @example * ```ts * import { print } from 'graphql/language'; * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * print(RGB.valueToLiteral(2)); // => 'BLUE' * RGB.valueToLiteral(3); // => undefined * ``` */ valueToLiteral(value: unknown): ConstValueNode | undefined; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const RGB = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 }, * }, * }); * * const config = RGB.toConfig(); * const RGBCopy = new GraphQLEnumType(config); * * config.values.GREEN.value; // => 1 * RGBCopy.coerceOutputValue(2); // => 'BLUE' * ``` */ toConfig(): GraphQLEnumTypeNormalizedConfig; /** * Returns the schema coordinate identifying this enum type. * @returns The schema coordinate for this enum type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertEnumType } from 'graphql/type'; * * const schema = buildSchema(` * enum Episode { * NEW_HOPE * } * * type Query { * episode: Episode * } * `); * * const Episode = assertEnumType(schema.getType('Episode')); * * Episode.toString(); // => 'Episode' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLEnumType } from 'graphql/type'; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * values: { * NEW_HOPE: {}, * }, * }); * * Episode.toJSON(); // => 'Episode' * JSON.stringify({ type: Episode }); // => '{"type":"Episode"}' * ``` */ toJSON(): string; } /** Configuration used to construct a GraphQLEnumType. */ export interface GraphQLEnumTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Values contained in this enum, list, or input-object definition. */ values: ThunkObjMap; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; } /** @internal */ export interface GraphQLEnumTypeNormalizedConfig extends GraphQLEnumTypeConfig { values: GraphQLEnumValueNormalizedConfigMap; extensions: Readonly; extensionASTNodes: ReadonlyArray; } /** A map of enum value names to enum value configuration objects. */ export type GraphQLEnumValueConfigMap = ObjMap; /** @internal */ export type GraphQLEnumValueNormalizedConfigMap = ObjMap; /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLEnumValueExtensions { [attributeName: string | symbol]: unknown; } /** Configuration used to define a GraphQL enum value. */ export interface GraphQLEnumValueConfig { /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Parsed value represented by this node. */ value?: any; /** Reason this element is deprecated, if one was provided. */ deprecationReason?: Maybe; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; } /** @internal */ export interface GraphQLEnumValueNormalizedConfig extends GraphQLEnumValueConfig { extensions: Readonly; } /** A resolved GraphQL enum value definition. */ export declare class GraphQLEnumValue implements GraphQLSchemaElement { /** Enum type that owns this enum value. */ parentEnum: GraphQLEnumType; /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Parsed value represented by this node. */ value: any; /** Reason this element is deprecated, if one was provided. */ deprecationReason: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** * Creates a resolved GraphQL enum value definition. * @param parentEnum - Enum type that owns this enum value. * @param name - Enum value name. * @param config - Enum value configuration. * @example * ```ts * import { GraphQLEnumType, GraphQLEnumValue } from 'graphql/type'; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * values: { NEW_HOPE: { value: 4 } }, * }); * const enumValue = new GraphQLEnumValue(Episode, 'EMPIRE', { * value: 5, * description: 'Released in 1980.', * }); * * enumValue.parentEnum; // => Episode * enumValue.name; // => 'EMPIRE' * enumValue.value; // => 5 * ``` */ constructor(parentEnum: GraphQLEnumType, name: string, config: GraphQLEnumValueConfig); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns a normalized configuration object for this enum value. * @returns A configuration object that can be used to recreate this enum value. * @example * ```ts * import { GraphQLEnumType, GraphQLEnumValue } from 'graphql/type'; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * values: { NEW_HOPE: { value: 4 } }, * }); * const enumValue = new GraphQLEnumValue(Episode, 'EMPIRE', { * value: 5, * extensions: { trilogy: 'original' }, * }); * * enumValue.toConfig(); // => { description: undefined, value: 5, deprecationReason: undefined, extensions: { trilogy: 'original' }, astNode: undefined } * ``` */ toConfig(): GraphQLEnumValueNormalizedConfig; /** * Returns this enum value as a schema coordinate string. * @returns Enum value coordinate. * @example * ```ts * import { GraphQLEnumType, GraphQLEnumValue } from 'graphql/type'; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * values: { NEW_HOPE: { value: 4 } }, * }); * const enumValue = new GraphQLEnumValue(Episode, 'EMPIRE', { value: 5 }); * * enumValue.toString(); // => 'Episode.EMPIRE' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns Enum value coordinate. * @example * ```ts * import { GraphQLEnumType, GraphQLEnumValue } from 'graphql/type'; * * const Episode = new GraphQLEnumType({ * name: 'Episode', * values: { NEW_HOPE: { value: 4 } }, * }); * const enumValue = new GraphQLEnumValue(Episode, 'EMPIRE', { value: 5 }); * * JSON.stringify(enumValue); // => '"Episode.EMPIRE"' * ``` */ toJSON(): string; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLInputObjectTypeExtensions { [attributeName: string | symbol]: unknown; } /** * Input Object Type Definition * * An input object defines a structured collection of fields which may be * supplied to a field argument. * * Using `NonNull` will ensure that a value must be provided by the query * @example * ```ts * const GeoPoint = new GraphQLInputObjectType({ * name: 'GeoPoint', * fields: { * lat: { type: new GraphQLNonNull(GraphQLFloat) }, * lon: { type: new GraphQLNonNull(GraphQLFloat) }, * alt: { type: GraphQLFloat, default: { value: 0 } }, * }, * }); * ``` */ export declare class GraphQLInputObjectType implements GraphQLSchemaElement { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes: ReadonlyArray; /** Whether this input object uses the experimental OneOf input object semantics. */ isOneOf: boolean; private _fields; /** * Creates a GraphQLInputObjectType instance. * @param config - Configuration describing this object. * @example * ```ts * import { parse } from 'graphql/language'; * import { * GraphQLID, * GraphQLInputObjectType, * GraphQLInt, * GraphQLNonNull, * GraphQLString, * } from 'graphql/type'; * * const document = parse(` * input ReviewInput { * stars: Int! * commentary: String * } * * extend input ReviewInput { * body: String * } * `); * const definition = document.definitions[0]; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * description: 'Input collected when reviewing a product.', * fields: { * stars: { * description: 'Star rating from one to five.', * type: new GraphQLNonNull(GraphQLInt), * extensions: { min: 1, max: 5 }, * astNode: definition.fields[0], * }, * commentary: { * type: GraphQLString, * default: { value: '' }, * deprecationReason: 'Use body.', * astNode: definition.fields[1], * }, * }, * extensions: { form: 'review' }, * astNode: definition, * extensionASTNodes: [document.definitions[1]], * isOneOf: false, * }); * const SearchBy = new GraphQLInputObjectType({ * name: 'SearchBy', * fields: { * id: { type: GraphQLID }, * slug: { type: GraphQLString }, * }, * isOneOf: true, * }); * * const fields = ReviewInput.getFields(); * * ReviewInput.description; // => 'Input collected when reviewing a product.' * String(fields.stars.type); // => 'Int!' * fields.stars.extensions; // => { min: 1, max: 5 } * fields.commentary.default.value; // => '' * fields.commentary.deprecationReason; // => 'Use body.' * ReviewInput.isOneOf; // => false * SearchBy.isOneOf; // => true * ``` */ constructor(config: Readonly); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns the fields defined by this type. * @returns The fields keyed by field name. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * commentary: String = "" * } * * type Query { * reviews(filter: ReviewInput): [String] * } * `); * * const ReviewInput = assertInputObjectType(schema.getType('ReviewInput')); * const fields = ReviewInput.getFields(); * * Object.keys(fields); // => ['stars', 'commentary'] * fields.commentary.default; // => { literal: { kind: 'StringValue', value: '' } } * ``` */ getFields(): GraphQLInputFieldMap; /** * Returns a normalized configuration object for this object. * @returns A configuration object that can be used to recreate this object. * @example * ```ts * import { * GraphQLInputObjectType, * GraphQLInt, * GraphQLNonNull, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: { * stars: { type: new GraphQLNonNull(GraphQLInt) }, * }, * }); * * const config = ReviewInput.toConfig(); * const ReviewInputCopy = new GraphQLInputObjectType(config); * * String(config.fields.stars.type); // => 'Int!' * String(ReviewInputCopy.getFields().stars.type); // => 'Int!' * ``` */ toConfig(): GraphQLInputObjectTypeNormalizedConfig; /** * Returns the schema coordinate identifying this input object type. * @returns The schema coordinate for this input object type. * @example * ```ts * import { buildSchema } from 'graphql/utilities'; * import { assertInputObjectType } from 'graphql/type'; * * const schema = buildSchema(` * input ReviewInput { * stars: Int! * } * * type Query { * reviews(filter: ReviewInput): [String] * } * `); * * const ReviewInput = assertInputObjectType(schema.getType('ReviewInput')); * * ReviewInput.toString(); // => 'ReviewInput' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The JSON-serializable representation. * @example * ```ts * import { GraphQLInputObjectType, GraphQLString } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: { * commentary: { type: GraphQLString }, * }, * }); * * ReviewInput.toJSON(); // => 'ReviewInput' * JSON.stringify({ type: ReviewInput }); // => '{"type":"ReviewInput"}' * ``` */ toJSON(): string; } /** Configuration used to construct a GraphQLInputObjectType. */ export interface GraphQLInputObjectTypeConfig { /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** Fields declared by this object, interface, input object, or literal. */ fields: ThunkObjMap; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; /** AST extension nodes applied to this schema element. */ extensionASTNodes?: Maybe>; /** Whether this input object uses the experimental OneOf input object semantics. */ isOneOf?: boolean; } /** @internal */ export interface GraphQLInputObjectTypeNormalizedConfig extends GraphQLInputObjectTypeConfig { fields: GraphQLInputFieldNormalizedConfigMap; extensions: Readonly; extensionASTNodes: ReadonlyArray; } /** * Custom extensions * @remarks * Use a unique identifier name for your extension, for example the name of * your library or project. Do not use a shortened identifier as this increases * the risk of conflicts. We recommend you add at most one extension field, * an object which can contain all the values you need. */ export interface GraphQLInputFieldExtensions { [attributeName: string | symbol]: unknown; } /** Configuration used to define a GraphQL input field. */ export interface GraphQLInputFieldConfig { /** Human-readable description for this schema element, if provided. */ description?: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLInputType; /** * Deprecated legacy default value for this input field. Use `default` * instead. * @deprecated use `default` instead, `defaultValue` will be removed in v18 */ defaultValue?: unknown; /** Default value represented as either a runtime value or a GraphQL literal. */ default?: GraphQLDefaultInput | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason?: Maybe; /** Custom extension fields reserved for users. */ extensions?: Maybe>; /** AST node from which this schema element was built, if available. */ astNode?: Maybe; } /** A map of input field names to input field configuration objects. */ export type GraphQLInputFieldConfigMap = ObjMap; /** @internal */ export interface GraphQLInputFieldNormalizedConfig extends GraphQLInputFieldConfig { default: GraphQLDefaultInput | undefined; extensions: Readonly; } /** @internal */ export type GraphQLInputFieldNormalizedConfigMap = ObjMap; /** A resolved GraphQL input field definition. */ export declare class GraphQLInputField implements GraphQLSchemaElement { /** Input object type that owns this input field. */ parentType: GraphQLInputObjectType; /** The GraphQL name for this schema element. */ name: string; /** Human-readable description for this schema element, if provided. */ description: Maybe; /** The GraphQL type reference or runtime type for this element. */ type: GraphQLInputType; /** * Deprecated legacy default value used when no explicit value is supplied. * Use `default` instead. * @deprecated use `default` instead, `defaultValue` will be removed in v18 */ defaultValue: unknown; /** Default value represented as either a runtime value or a GraphQL literal. */ default: GraphQLDefaultInput | undefined; /** Reason this element is deprecated, if one was provided. */ deprecationReason: Maybe; /** Custom extension fields reserved for users. */ extensions: Readonly; /** AST node from which this schema element was built, if available. */ astNode: Maybe; /** * Creates a resolved GraphQL input field definition. * @param parentType - Input object type that owns this field. * @param name - Input field name. * @param config - Input field configuration. * @example * ```ts * import { * GraphQLInputField, * GraphQLInputObjectType, * GraphQLString, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: {}, * }); * const field = new GraphQLInputField(ReviewInput, 'commentary', { * type: GraphQLString, * default: { value: '' }, * }); * * field.parentType; // => ReviewInput * field.name; // => 'commentary' * field.default.value; // => '' * ``` */ constructor(parentType: GraphQLInputObjectType, name: string, config: GraphQLInputFieldConfig); /** * Returns the value used by `Object.prototype.toString`. * @returns The built-in string tag for this object. */ get [Symbol.toStringTag](): string; /** * Returns a normalized configuration object for this input field. * @returns A configuration object that can be used to recreate this input field. * @example * ```ts * import { * GraphQLInputField, * GraphQLInputObjectType, * GraphQLString, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: {}, * }); * const field = new GraphQLInputField(ReviewInput, 'commentary', { * type: GraphQLString, * extensions: { form: 'review' }, * }); * * field.toConfig().extensions; // => { form: 'review' } * ``` */ toConfig(): GraphQLInputFieldNormalizedConfig; /** * Returns this input field as a schema coordinate string. * @returns The input field coordinate. * @example * ```ts * import { * GraphQLInputField, * GraphQLInputObjectType, * GraphQLString, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: {}, * }); * const field = new GraphQLInputField(ReviewInput, 'commentary', { * type: GraphQLString, * }); * * field.toString(); // => 'ReviewInput.commentary' * ``` */ toString(): string; /** * Returns the JSON representation used when this object is serialized. * @returns The input field coordinate. * @example * ```ts * import { * GraphQLInputField, * GraphQLInputObjectType, * GraphQLString, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: {}, * }); * const field = new GraphQLInputField(ReviewInput, 'commentary', { * type: GraphQLString, * }); * * JSON.stringify(field); // => '"ReviewInput.commentary"' * ``` */ toJSON(): string; } /** * Returns true when the input field is non-null and has no default value. * @param field - The input field definition to inspect. * @returns True when the input field is non-null and has no default value. * @example * ```ts * import { * GraphQLInputField, * GraphQLInputObjectType, * GraphQLInt, * GraphQLNonNull, * GraphQLString, * isRequiredInputField, * } from 'graphql/type'; * * const ReviewInput = new GraphQLInputObjectType({ * name: 'ReviewInput', * fields: {}, * }); * const requiredField = new GraphQLInputField(ReviewInput, 'id', { * type: new GraphQLNonNull(GraphQLInt), * }); * const optionalField = new GraphQLInputField(ReviewInput, 'name', { * type: GraphQLString, * }); * const fieldWithDefault = new GraphQLInputField(ReviewInput, 'limit', { * type: new GraphQLNonNull(GraphQLInt), * default: { value: 10 }, * }); * * isRequiredInputField(requiredField); // => true * isRequiredInputField(optionalField); // => false * isRequiredInputField(fieldWithDefault); // => false * ``` */ export declare function isRequiredInputField(field: GraphQLInputField): boolean; /** A map of input field names to resolved input field definitions. */ export type GraphQLInputFieldMap = ObjMap; export {};