{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/type/validate.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Validation */\n\nimport { AccumulatorMap } from '../jsutils/AccumulatorMap.ts';\nimport { capitalize } from '../jsutils/capitalize.ts';\nimport { andList } from '../jsutils/formatList.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { invariant } from '../jsutils/invariant.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyMap } from '../jsutils/keyMap.ts';\nimport { mapValue } from '../jsutils/mapValue.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport { printPathArray } from '../jsutils/printPathArray.ts';\n\nimport { GraphQLError } from '../error/GraphQLError.ts';\n\nimport type {\n  ASTNode,\n  ConstValueNode,\n  DirectiveNode,\n  InterfaceTypeDefinitionNode,\n  InterfaceTypeExtensionNode,\n  NamedTypeNode,\n  ObjectTypeDefinitionNode,\n  ObjectTypeExtensionNode,\n  UnionTypeDefinitionNode,\n  UnionTypeExtensionNode,\n} from '../language/ast.ts';\nimport { OperationTypeNode } from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\n\nimport { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators.ts';\nimport {\n  validateInputLiteral,\n  validateInputValue,\n} from '../utilities/validateInputValue.ts';\n\nimport type {\n  GraphQLArgument,\n  GraphQLDefaultInput,\n  GraphQLEnumType,\n  GraphQLInputField,\n  GraphQLInputObjectType,\n  GraphQLInputType,\n  GraphQLInterfaceType,\n  GraphQLObjectType,\n  GraphQLUnionType,\n} from './definition.ts';\nimport {\n  assertLeafType,\n  getNamedType,\n  isEnumType,\n  isInputObjectType,\n  isInputType,\n  isInterfaceType,\n  isListType,\n  isNamedType,\n  isNonNullType,\n  isObjectType,\n  isOutputType,\n  isRequiredArgument,\n  isRequiredInputField,\n  isUnionType,\n} from './definition.ts';\nimport { GraphQLDeprecatedDirective, isDirective } from './directives.ts';\nimport { isIntrospectionType } from './introspection.ts';\nimport type { GraphQLSchema } from './schema.ts';\nimport { assertSchema } from './schema.ts';\n\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n * @param schema - GraphQL schema to use.\n * @returns Schema validation errors, or an empty array when the schema is valid.\n * @example\n * ```ts\n * import { validateSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n *   type Query {\n *     name: String\n *   }\n * `);\n * const errors = validateSchema(schema);\n *\n * errors; // => []\n * ```\n */\nexport function validateSchema(\n  schema: GraphQLSchema,\n): ReadonlyArray<GraphQLError> {\n  // First check to ensure the provided value is in fact a GraphQLSchema.\n  assertSchema(schema);\n\n  // If this Schema has already been validated, return the previous results.\n  if (schema.__validationErrors) {\n    return schema.__validationErrors;\n  }\n\n  // Validate the schema, producing a list of errors.\n  const context = new SchemaValidationContext(schema);\n  validateRootTypes(context);\n  validateDirectives(context);\n  validateTypes(context);\n\n  // Persist the results of validation before returning to ensure validation\n  // does not run multiple times for this schema.\n  const errors = context.getErrors();\n  schema.__validationErrors = errors;\n  return errors;\n}\n\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n * @param schema - GraphQL schema to use.\n * @example\n * ```ts\n * import { assertValidSchema } from 'graphql/type';\n * import { buildSchema } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n *   type Query {\n *     name: String\n *   }\n * `);\n *\n * assertValidSchema(schema); // does not throw\n * ```\n */\nexport function assertValidSchema(schema: GraphQLSchema): void {\n  const errors = validateSchema(schema);\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n\nclass SchemaValidationContext {\n  readonly _errors: Array<GraphQLError>;\n  readonly schema: GraphQLSchema;\n\n  constructor(schema: GraphQLSchema) {\n    this._errors = [];\n    this.schema = schema;\n  }\n\n  reportError(\n    message: string,\n    nodes?: ReadonlyArray<Maybe<ASTNode>> | Maybe<ASTNode>,\n  ): void {\n    const _nodes = Array.isArray(nodes)\n      ? (nodes.filter(Boolean) as ReadonlyArray<ASTNode>)\n      : (nodes as Maybe<ASTNode>);\n    this._errors.push(new GraphQLError(message, { nodes: _nodes }));\n  }\n\n  getErrors(): ReadonlyArray<GraphQLError> {\n    return this._errors;\n  }\n}\n\nfunction validateRootTypes(context: SchemaValidationContext): void {\n  const schema = context.schema;\n\n  if (schema.getQueryType() == null) {\n    context.reportError('Query root type must be provided.', schema.astNode);\n  }\n\n  const rootTypesMap = new AccumulatorMap<\n    GraphQLObjectType,\n    OperationTypeNode\n  >();\n  for (const operationType of Object.values(OperationTypeNode)) {\n    const rootType = schema.getRootType(operationType);\n\n    if (rootType != null) {\n      if (!isObjectType(rootType)) {\n        const operationTypeStr = capitalize(operationType);\n        const rootTypeStr = inspect(rootType);\n        context.reportError(\n          operationType === OperationTypeNode.QUERY\n            ? `${operationTypeStr} root type must be Object type, it cannot be ${rootTypeStr}.`\n            : `${operationTypeStr} root type must be Object type if provided, it cannot be ${rootTypeStr}.`,\n          getOperationTypeNode(schema, operationType) ??\n            (rootType as any).astNode,\n        );\n      } else {\n        rootTypesMap.add(rootType, operationType);\n      }\n    }\n  }\n\n  for (const [rootType, operationTypes] of rootTypesMap) {\n    if (operationTypes.length > 1) {\n      const operationList = andList(operationTypes);\n      context.reportError(\n        `All root types must be different, \"${rootType}\" type is used as ${operationList} root types.`,\n        operationTypes.map((operationType) =>\n          getOperationTypeNode(schema, operationType),\n        ),\n      );\n    }\n  }\n}\n\nfunction getOperationTypeNode(\n  schema: GraphQLSchema,\n  operation: OperationTypeNode,\n): Maybe<ASTNode> {\n  return [schema.astNode, ...schema.extensionASTNodes]\n    .flatMap((schemaNode) => schemaNode?.operationTypes ?? [])\n    .find((operationNode) => operationNode.operation === operation)?.type;\n}\n\nfunction validateDirectives(context: SchemaValidationContext): void {\n  for (const directive of context.schema.getDirectives()) {\n    // Ensure all directives are in fact GraphQL directives.\n    if (!isDirective(directive)) {\n      context.reportError(\n        `Expected directive but got: ${inspect(directive)}.`,\n        (directive as any)?.astNode,\n      );\n      continue;\n    }\n\n    // Ensure they are named correctly.\n    validateName(context, directive);\n\n    if (directive.locations.length === 0) {\n      context.reportError(\n        `Directive ${directive} must include 1 or more locations.`,\n        directive.astNode,\n      );\n    }\n\n    // Ensure the arguments are valid.\n    for (const arg of directive.args) {\n      // Ensure they are named correctly.\n      validateName(context, arg);\n\n      // Ensure the type is an input type.\n      if (!isInputType(arg.type)) {\n        context.reportError(\n          `The type of ${arg} must be Input Type ` +\n            `but got: ${inspect(arg.type)}.`,\n          arg.astNode,\n        );\n      }\n\n      if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n        context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n          getDeprecatedDirectiveNode(arg.astNode),\n          arg.astNode?.type,\n        ]);\n      }\n\n      validateDefaultValue(context, arg);\n    }\n  }\n}\n\nfunction validateDefaultValue(\n  context: SchemaValidationContext,\n  inputValue: GraphQLArgument | GraphQLInputField,\n): void {\n  const defaultInput = inputValue.default;\n\n  if (!defaultInput) {\n    return;\n  }\n\n  const errors: Array<[GraphQLError, ReadonlyArray<string | number>]> = [];\n  validateDefaultInput(defaultInput, inputValue.type, (error, path) => {\n    errors.push([error, path]);\n  });\n\n  if (errors.length === 0) {\n    return;\n  }\n\n  if (!defaultInput.literal) {\n    // If there were validation errors, check to see if it can be \"uncoerced\"\n    // and then correctly validated. If so, report a clear error with a path\n    // to resolution.\n    try {\n      const uncoercedValue = uncoerceDefaultValue(\n        defaultInput.value,\n        inputValue.type,\n      );\n\n      const uncoercedErrors = [];\n      validateInputValue(uncoercedValue, inputValue.type, (error, path) => {\n        uncoercedErrors.push([error, path]);\n      });\n\n      if (uncoercedErrors.length === 0) {\n        context.reportError(\n          `${inputValue} has invalid default value: ${inspect(\n            defaultInput.value,\n          )}. Did you mean: ${inspect(uncoercedValue)}?`,\n          inputValue.astNode?.defaultValue,\n        );\n        return;\n      }\n    } catch (_error) {\n      // ignore\n    }\n  }\n\n  // Otherwise report the original set of errors.\n  for (const [error, path] of errors) {\n    context.reportError(\n      `${inputValue} has invalid default value${printPathArray(path)}: ${\n        error.message\n      }`,\n      error.nodes ?? inputValue.astNode?.defaultValue,\n    );\n  }\n}\n\n/** @internal */\nexport function validateDefaultInput(\n  defaultInput: GraphQLDefaultInput,\n  inputType: GraphQLInputType,\n  onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n  hideSuggestions?: Maybe<boolean>,\n): void {\n  if (defaultInput.literal) {\n    validateInputLiteral(\n      defaultInput.literal,\n      inputType,\n      onError,\n      undefined,\n      undefined,\n      hideSuggestions,\n    );\n    return;\n  }\n  validateInputValue(defaultInput.value, inputType, onError, hideSuggestions);\n}\n\n/**\n * Historically GraphQL.js allowed default values to be provided as\n * assumed-coerced \"internal\" values, however default values should be provided\n * as \"external\" pre-coerced values. `uncoerceDefaultValue()` will convert such\n * \"internal\" values to \"external\" values to display as part of validation.\n *\n * This performs the \"opposite\" of `coerceInputValue()`. Given an \"internal\"\n * coerced value, reverse the process to provide an \"external\" uncoerced value.\n *\n * @internal\n */\nfunction uncoerceDefaultValue(value: unknown, type: GraphQLInputType): unknown {\n  if (isNonNullType(type)) {\n    return uncoerceDefaultValue(value, type.ofType);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (isListType(type)) {\n    if (isIterableObject(value)) {\n      return Array.from(value, (itemValue) =>\n        uncoerceDefaultValue(itemValue, type.ofType),\n      );\n    }\n    return [uncoerceDefaultValue(value, type.ofType)];\n  }\n\n  if (isInputObjectType(type)) {\n    invariant(isObjectLike(value));\n    const fieldDefs = type.getFields();\n    return mapValue(value, (fieldValue, fieldName) => {\n      invariant(fieldName in fieldDefs);\n      return uncoerceDefaultValue(fieldValue, fieldDefs[fieldName].type);\n    });\n  }\n\n  assertLeafType(type);\n\n  // For most leaf types (Scalars, Enums), output value coercion (\"serialize\") is\n  // the inverse of input coercion (\"parseValue\") and will produce an\n  // \"external\" value. Historically, this method was also used as part of the\n  // now-deprecated \"astFromValue\" to perform the same behavior.\n  return type.coerceOutputValue(value);\n}\n\nfunction validateName(\n  context: SchemaValidationContext,\n  node: { readonly name: string; readonly astNode: Maybe<ASTNode> },\n): void {\n  // Ensure names are valid, however introspection types opt out.\n  if (node.name.startsWith('__')) {\n    context.reportError(\n      `Name \"${node.name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n      node.astNode,\n    );\n  }\n}\n\nfunction validateTypes(context: SchemaValidationContext): void {\n  const validateInputObjectDefaultValueCircularRefs =\n    createInputObjectDefaultValueCircularRefsValidator(context);\n  const typeMap = context.schema.getTypeMap();\n  const finiteValueStates = new Map<\n    GraphQLInputObjectType,\n    InputObjectFiniteValueState\n  >();\n\n  for (const type of Object.values(typeMap)) {\n    // Ensure all provided types are in fact GraphQL type.\n    if (!isNamedType(type)) {\n      context.reportError(\n        `Expected GraphQL named type but got: ${inspect(type)}.`,\n        (type as any).astNode,\n      );\n      continue;\n    }\n\n    // Ensure it is named correctly (excluding introspection types).\n    if (!isIntrospectionType(type)) {\n      validateName(context, type);\n    }\n\n    if (isObjectType(type)) {\n      // Ensure fields are valid\n      validateFields(context, type);\n\n      // Ensure objects implement the interfaces they claim to.\n      validateInterfaces(context, type);\n    } else if (isInterfaceType(type)) {\n      // Ensure fields are valid.\n      validateFields(context, type);\n\n      // Ensure interfaces implement the interfaces they claim to.\n      validateInterfaces(context, type);\n    } else if (isUnionType(type)) {\n      // Ensure Unions include valid member types.\n      validateUnionMembers(context, type);\n    } else if (isEnumType(type)) {\n      // Ensure Enums have valid values.\n      validateEnumValues(context, type);\n    } else if (isInputObjectType(type)) {\n      // Ensure Input Object fields are valid.\n      validateInputFields(context, type);\n\n      initializeInputObjectFiniteValueState(type);\n\n      // Ensure Input Objects do not contain invalid default value circular references.\n      validateInputObjectDefaultValueCircularRefs(type);\n    }\n  }\n\n  detectInputObjectNonFiniteValues(context, finiteValueStates);\n\n  function initializeInputObjectFiniteValueState(\n    inputObj: GraphQLInputObjectType,\n  ): void {\n    finiteValueStates.set(inputObj, {\n      inputObj,\n      targets: [],\n      dependents: [],\n      unresolvedTargetCount: 0,\n      hasFiniteValue: false,\n    });\n  }\n}\n\nfunction validateFields(\n  context: SchemaValidationContext,\n  type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n  const fields = Object.values(type.getFields());\n\n  // Objects and Interfaces both must define one or more fields.\n  if (fields.length === 0) {\n    context.reportError(`Type ${type} must define one or more fields.`, [\n      type.astNode,\n      ...type.extensionASTNodes,\n    ]);\n  }\n\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field);\n\n    // Ensure the type is an output type\n    if (!isOutputType(field.type)) {\n      context.reportError(\n        `The type of ${field} must be Output Type ` +\n          `but got: ${inspect(field.type)}.`,\n        field.astNode?.type,\n      );\n    }\n\n    // Ensure the arguments are valid\n    for (const arg of field.args) {\n      // Ensure they are named correctly.\n      validateName(context, arg);\n\n      // Ensure the type is an input type\n      if (!isInputType(arg.type)) {\n        context.reportError(\n          `The type of ${arg} must be Input Type but got: ${inspect(arg.type)}.`,\n          arg.astNode?.type,\n        );\n      }\n\n      if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n        context.reportError(`Required argument ${arg} cannot be deprecated.`, [\n          getDeprecatedDirectiveNode(arg.astNode),\n          arg.astNode?.type,\n        ]);\n      }\n\n      validateDefaultValue(context, arg);\n    }\n  }\n}\n\nfunction validateInterfaces(\n  context: SchemaValidationContext,\n  type: GraphQLObjectType | GraphQLInterfaceType,\n): void {\n  const ifaceTypeNames = new Set<string>();\n  for (const iface of type.getInterfaces()) {\n    if (!isInterfaceType(iface)) {\n      context.reportError(\n        `Type ${type} must only implement Interface types, ` +\n          `it cannot implement ${inspect(iface)}.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (type === iface) {\n      context.reportError(\n        `Type ${type} cannot implement itself because it would create a circular reference.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (ifaceTypeNames.has(iface.name)) {\n      context.reportError(\n        `Type ${type} can only implement ${iface} once.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    ifaceTypeNames.add(iface.name);\n\n    validateTypeImplementsAncestors(context, type, iface);\n    validateTypeImplementsInterface(context, type, iface);\n  }\n}\n\nfunction validateTypeImplementsInterface(\n  context: SchemaValidationContext,\n  type: GraphQLObjectType | GraphQLInterfaceType,\n  iface: GraphQLInterfaceType,\n): void {\n  const typeFieldMap = type.getFields();\n\n  // Assert each interface field is implemented.\n  for (const ifaceField of Object.values(iface.getFields())) {\n    const typeField = typeFieldMap[ifaceField.name];\n\n    // Assert interface field exists on type.\n    if (typeField == null) {\n      context.reportError(\n        `Interface field ${ifaceField} expected but ${type} does not provide it.`,\n        [ifaceField.astNode, type.astNode, ...type.extensionASTNodes],\n      );\n      continue;\n    }\n\n    // Assert interface field type is satisfied by type field type, by being\n    // a valid subtype. (covariant)\n    if (!isTypeSubTypeOf(context.schema, typeField.type, ifaceField.type)) {\n      context.reportError(\n        `Interface field ${ifaceField} expects type ${ifaceField.type} ` +\n          `but ${typeField} is type ${typeField.type}.`,\n        [ifaceField.astNode?.type, typeField.astNode?.type],\n      );\n    }\n\n    // Assert each interface field arg is implemented.\n    for (const ifaceArg of ifaceField.args) {\n      const typeArg = typeField.args.find((arg) => arg.name === ifaceArg.name);\n\n      // Assert interface field arg exists on object field.\n      if (!typeArg) {\n        context.reportError(\n          `Interface field argument ${ifaceArg} expected but ${typeField} does not provide it.`,\n          [ifaceArg.astNode, typeField.astNode],\n        );\n        continue;\n      }\n\n      // Assert interface field arg type matches object field arg type.\n      // (invariant)\n      // TODO: change to contravariant?\n      if (!isEqualType(ifaceArg.type, typeArg.type)) {\n        context.reportError(\n          `Interface field argument ${ifaceArg} expects type ${ifaceArg.type} ` +\n            `but ${typeArg} is type ${typeArg.type}.`,\n          [ifaceArg.astNode?.type, typeArg.astNode?.type],\n        );\n      }\n    }\n\n    // Assert additional arguments must not be required.\n    for (const typeArg of typeField.args) {\n      if (isRequiredArgument(typeArg)) {\n        const ifaceArg = ifaceField.args.find(\n          (arg) => arg.name === typeArg.name,\n        );\n        if (!ifaceArg) {\n          context.reportError(\n            `Argument \"${typeArg}\" must not be required type \"${typeArg.type}\" ` +\n              `if not provided by the Interface field \"${ifaceField}\".`,\n            [typeArg.astNode, ifaceField.astNode],\n          );\n        }\n      }\n    }\n\n    // Asserts that field is not deprecated unless interface field is\n    if (\n      typeField.deprecationReason != null &&\n      ifaceField.deprecationReason == null\n    ) {\n      context.reportError(\n        `Interface field ${iface.name}.${ifaceField.name} is not deprecated, so ` +\n          `implementation field ${type.name}.${typeField.name} must not be deprecated.`,\n        [\n          getDeprecatedDirectiveNode(typeField.astNode),\n          typeField.astNode?.type,\n        ],\n      );\n    }\n  }\n}\n\nfunction validateTypeImplementsAncestors(\n  context: SchemaValidationContext,\n  type: GraphQLObjectType | GraphQLInterfaceType,\n  iface: GraphQLInterfaceType,\n): void {\n  const ifaceInterfaces = type.getInterfaces();\n  for (const transitive of iface.getInterfaces()) {\n    if (!ifaceInterfaces.includes(transitive)) {\n      context.reportError(\n        transitive === type\n          ? `Type ${type} cannot implement ${iface} because it would create a circular reference.`\n          : `Type ${type} must implement ${transitive} because it is implemented by ${iface}.`,\n        [\n          ...getAllImplementsInterfaceNodes(iface, transitive),\n          ...getAllImplementsInterfaceNodes(type, iface),\n        ],\n      );\n    }\n  }\n}\n\nfunction validateUnionMembers(\n  context: SchemaValidationContext,\n  union: GraphQLUnionType,\n): void {\n  const memberTypes = union.getTypes();\n\n  if (memberTypes.length === 0) {\n    context.reportError(\n      `Union type ${union} must define one or more member types.`,\n      [union.astNode, ...union.extensionASTNodes],\n    );\n  }\n\n  const includedTypeNames = new Set<string>();\n  for (const memberType of memberTypes) {\n    if (includedTypeNames.has(memberType.name)) {\n      context.reportError(\n        `Union type ${union} can only include type ${memberType} once.`,\n        getUnionMemberTypeNodes(union, memberType.name),\n      );\n      continue;\n    }\n    includedTypeNames.add(memberType.name);\n    if (!isObjectType(memberType)) {\n      context.reportError(\n        `Union type ${union} can only include Object types, ` +\n          `it cannot include ${inspect(memberType)}.`,\n        getUnionMemberTypeNodes(union, String(memberType)),\n      );\n    }\n  }\n}\n\nfunction validateEnumValues(\n  context: SchemaValidationContext,\n  enumType: GraphQLEnumType,\n): void {\n  const enumValues = enumType.getValues();\n\n  if (enumValues.length === 0) {\n    context.reportError(\n      `Enum type ${enumType} must define one or more values.`,\n      [enumType.astNode, ...enumType.extensionASTNodes],\n    );\n  }\n\n  for (const enumValue of enumValues) {\n    // Ensure valid name.\n    validateName(context, enumValue);\n  }\n}\n\nfunction validateInputFields(\n  context: SchemaValidationContext,\n  inputObj: GraphQLInputObjectType,\n): void {\n  const fields = Object.values(inputObj.getFields());\n\n  if (fields.length === 0) {\n    context.reportError(\n      `Input Object type ${inputObj} must define one or more fields.`,\n      [inputObj.astNode, ...inputObj.extensionASTNodes],\n    );\n  }\n\n  // Ensure the input fields are valid\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field);\n\n    // Ensure the type is an input type\n    if (!isInputType(field.type)) {\n      context.reportError(\n        `The type of ${field} must be Input Type ` +\n          `but got: ${inspect(field.type)}.`,\n        field.astNode?.type,\n      );\n    }\n\n    if (isRequiredInputField(field) && field.deprecationReason != null) {\n      context.reportError(\n        `Required input field ${field} cannot be deprecated.`,\n        [getDeprecatedDirectiveNode(field.astNode), field.astNode?.type],\n      );\n    }\n\n    validateDefaultValue(context, field);\n\n    if (inputObj.isOneOf) {\n      validateOneOfInputObjectField(inputObj, field, context);\n    }\n  }\n}\n\nfunction validateOneOfInputObjectField(\n  type: GraphQLInputObjectType,\n  field: GraphQLInputField,\n  context: SchemaValidationContext,\n): void {\n  if (isNonNullType(field.type)) {\n    context.reportError(\n      `OneOf input field ${type}.${field.name} must be nullable.`,\n      field.astNode?.type,\n    );\n  }\n\n  if (field.default !== undefined || field.defaultValue !== undefined) {\n    context.reportError(\n      `OneOf input field ${type}.${field.name} cannot have a default value.`,\n      field.astNode,\n    );\n  }\n}\n\ninterface InputObjectFiniteValueTarget {\n  field: GraphQLInputField;\n  target: GraphQLInputObjectType;\n}\n\ninterface InputObjectFiniteValueState {\n  inputObj: GraphQLInputObjectType;\n  targets: Array<InputObjectFiniteValueTarget>;\n  dependents: Array<InputObjectFiniteValueState>;\n  unresolvedTargetCount: number;\n  hasFiniteValue: boolean;\n}\n\n// Implements the spec's InputObjectHasUnbreakableCycle algorithm for all Input\n// Objects in one pass by propagating known breakable types through reverse edges.\nfunction detectInputObjectNonFiniteValues(\n  context: SchemaValidationContext,\n  finiteValueStates: ReadonlyMap<\n    GraphQLInputObjectType,\n    InputObjectFiniteValueState\n  >,\n): void {\n  const inputObjectsWithFiniteValues: Array<InputObjectFiniteValueState> = [];\n\n  for (const state of finiteValueStates.values()) {\n    const inputObj = state.inputObj;\n    const fields = Object.values(inputObj.getFields());\n\n    for (const field of fields) {\n      const target = getFiniteValueTarget(inputObj, field.type);\n      if (target === undefined) {\n        continue;\n      }\n\n      state.targets.push({ field, target });\n      const targetState = finiteValueStates.get(target);\n      if (targetState !== undefined) {\n        targetState.dependents.push(state);\n      }\n    }\n\n    if (inputObj.isOneOf) {\n      // OneOf Input Objects have an unbreakable cycle if every field leads to an unbreakable cycle.\n      if (fields.length === 0 || state.targets.length < fields.length) {\n        markInputObjectHasFiniteValue(state);\n      }\n    } else {\n      // Non-OneOf Input Objects have an unbreakable cycle if any non-null field has one.\n      state.unresolvedTargetCount = state.targets.length;\n      if (state.targets.length === 0) {\n        markInputObjectHasFiniteValue(state);\n      }\n    }\n  }\n\n  let nextFiniteValueState: InputObjectFiniteValueState | undefined;\n  while (\n    (nextFiniteValueState = inputObjectsWithFiniteValues.pop()) !== undefined\n  ) {\n    for (const dependentState of nextFiniteValueState.dependents) {\n      if (dependentState.hasFiniteValue) {\n        continue;\n      }\n\n      if (dependentState.inputObj.isOneOf) {\n        markInputObjectHasFiniteValue(dependentState);\n        continue;\n      }\n\n      --dependentState.unresolvedTargetCount;\n      if (dependentState.unresolvedTargetCount === 0) {\n        markInputObjectHasFiniteValue(dependentState);\n      }\n    }\n  }\n\n  // Tracks already visited types to ensure that cycles are not redundantly\n  // reported.\n  const visitedTypes = new Set<GraphQLInputObjectType>();\n\n  // Array of fields used to produce meaningful errors.\n  const fieldPath: Array<{ fieldStr: string; astNode: Maybe<ASTNode> }> = [];\n\n  // Position in the field path.\n  const fieldPathIndexByType = new Map<GraphQLInputObjectType, number>();\n\n  for (const state of finiteValueStates.values()) {\n    if (!state.hasFiniteValue) {\n      reportCycleRecursive(state);\n    }\n  }\n\n  function markInputObjectHasFiniteValue(\n    finiteValueState: InputObjectFiniteValueState,\n  ): void {\n    if (!finiteValueState.hasFiniteValue) {\n      finiteValueState.hasFiniteValue = true;\n      inputObjectsWithFiniteValues.push(finiteValueState);\n    }\n  }\n\n  function reportCycleRecursive(state: InputObjectFiniteValueState): void {\n    const inputObj = state.inputObj;\n    if (visitedTypes.has(inputObj)) {\n      return;\n    }\n\n    visitedTypes.add(inputObj);\n    fieldPathIndexByType.set(inputObj, fieldPath.length);\n\n    for (const { field, target } of state.targets) {\n      const targetState = finiteValueStates.get(target);\n      if (targetState?.hasFiniteValue !== false) {\n        continue;\n      }\n\n      const cycleIndex = fieldPathIndexByType.get(target);\n      fieldPath.push({\n        fieldStr: `${inputObj}.${field.name}`,\n        astNode: field.astNode,\n      });\n\n      if (cycleIndex === undefined) {\n        reportCycleRecursive(targetState);\n      } else {\n        const cyclePath = fieldPath.slice(cycleIndex);\n        const pathStr = cyclePath.map((p) => p.fieldStr).join(', ');\n        context.reportError(\n          `Input Object ${target} cannot be provided a finite value because it references itself through fields: ${pathStr}.`,\n          cyclePath.map((p) => p.astNode),\n        );\n      }\n\n      fieldPath.pop();\n    }\n\n    fieldPathIndexByType.delete(inputObj);\n  }\n}\n\nfunction getFiniteValueTarget(\n  inputObj: GraphQLInputObjectType,\n  fieldType: GraphQLInputType,\n): GraphQLInputObjectType | undefined {\n  if (inputObj.isOneOf) {\n    if (isInputObjectType(fieldType)) {\n      return fieldType;\n    }\n    return;\n  }\n\n  if (isNonNullType(fieldType) && isInputObjectType(fieldType.ofType)) {\n    return fieldType.ofType;\n  }\n}\n\nfunction createInputObjectDefaultValueCircularRefsValidator(\n  context: SchemaValidationContext,\n): (inputObj: GraphQLInputObjectType) => void {\n  // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n  // Tracks already visited types to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  const visitedFields = Object.create(null);\n\n  // Array of keys for fields and default values used to produce meaningful errors.\n  const fieldPath: Array<\n    [fieldStr: string, defaultValue: ConstValueNode | undefined]\n  > = [];\n\n  // Position in the path\n  const fieldPathIndex: ObjMap<number | undefined> = Object.create(null);\n\n  // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n  return function validateInputObjectDefaultValueCircularRefs(\n    inputObj: GraphQLInputObjectType,\n  ): void {\n    // Start with an empty object as a way to visit every field in this input\n    // object type and apply every default value.\n    return detectValueDefaultValueCycle(inputObj, Object.create(null));\n  };\n\n  function detectValueDefaultValueCycle(\n    inputObj: GraphQLInputObjectType,\n    defaultValue: unknown,\n  ): void {\n    // If the value is a List, recursively check each entry for a cycle.\n    // Otherwise, only object values can contain a cycle.\n    if (isIterableObject(defaultValue)) {\n      for (const itemValue of defaultValue) {\n        detectValueDefaultValueCycle(inputObj, itemValue);\n      }\n      return;\n    } else if (!isObjectLike(defaultValue)) {\n      return;\n    }\n\n    // Check each defined field for a cycle.\n    for (const field of Object.values(inputObj.getFields())) {\n      const namedFieldType = getNamedType(field.type);\n\n      // Only input object type fields can result in a cycle.\n      if (!isInputObjectType(namedFieldType)) {\n        continue;\n      }\n\n      if (Object.hasOwn(defaultValue, field.name)) {\n        // If the provided value has this field defined, recursively check it\n        // for cycles.\n        detectValueDefaultValueCycle(namedFieldType, defaultValue[field.name]);\n      } else {\n        // Otherwise check this field's default value for cycles.\n        detectFieldDefaultValueCycle(\n          field,\n          namedFieldType,\n          `${inputObj}.${field.name}`,\n        );\n      }\n    }\n  }\n\n  function detectLiteralDefaultValueCycle(\n    inputObj: GraphQLInputObjectType,\n    defaultValue: ConstValueNode,\n  ): void {\n    // If the value is a List, recursively check each entry for a cycle.\n    // Otherwise, only object values can contain a cycle.\n    if (defaultValue.kind === Kind.LIST) {\n      for (const itemLiteral of defaultValue.values) {\n        detectLiteralDefaultValueCycle(inputObj, itemLiteral);\n      }\n      return;\n    } else if (defaultValue.kind !== Kind.OBJECT) {\n      return;\n    }\n\n    // Check each defined field for a cycle.\n    const fieldNodes = keyMap(defaultValue.fields, (field) => field.name.value);\n    for (const field of Object.values(inputObj.getFields())) {\n      const namedFieldType = getNamedType(field.type);\n\n      // Only input object type fields can result in a cycle.\n      if (!isInputObjectType(namedFieldType)) {\n        continue;\n      }\n\n      if (Object.hasOwn(fieldNodes, field.name)) {\n        // If the provided value has this field defined, recursively check it\n        // for cycles.\n        detectLiteralDefaultValueCycle(\n          namedFieldType,\n          fieldNodes[field.name].value,\n        );\n      } else {\n        // Otherwise check this field's default value for cycles.\n        detectFieldDefaultValueCycle(\n          field,\n          namedFieldType,\n          `${inputObj}.${field.name}`,\n        );\n      }\n    }\n  }\n\n  function detectFieldDefaultValueCycle(\n    field: GraphQLInputField,\n    fieldType: GraphQLInputObjectType,\n    fieldStr: string,\n  ): void {\n    // Only a field with a default value can result in a cycle.\n    const defaultInput = field.default;\n    if (defaultInput === undefined) {\n      return;\n    }\n\n    // Check to see if there is cycle.\n    const cycleIndex = fieldPathIndex[fieldStr];\n    if (cycleIndex !== undefined) {\n      context.reportError(\n        `Invalid circular reference. The default value of Input Object field ${fieldStr} references itself${\n          cycleIndex < fieldPath.length\n            ? ` via the default values of: ${fieldPath\n                .slice(cycleIndex)\n                .map(([stringForMessage]) => stringForMessage)\n                .join(', ')}`\n            : ''\n        }.`,\n        fieldPath.slice(cycleIndex - 1).map(([, node]) => node),\n      );\n      return;\n    }\n\n    // Recurse into this field's default value once, tracking the path.\n    if (visitedFields[fieldStr] === undefined) {\n      visitedFields[fieldStr] = true;\n      fieldPathIndex[fieldStr] = fieldPath.push([\n        fieldStr,\n        field.astNode?.defaultValue,\n      ]);\n      if (defaultInput.literal) {\n        detectLiteralDefaultValueCycle(fieldType, defaultInput.literal);\n      } else {\n        detectValueDefaultValueCycle(fieldType, defaultInput.value);\n      }\n      fieldPath.pop();\n      fieldPathIndex[fieldStr] = undefined;\n    }\n  }\n}\n\nfunction getAllImplementsInterfaceNodes(\n  type: GraphQLObjectType | GraphQLInterfaceType,\n  iface: GraphQLInterfaceType,\n): ReadonlyArray<NamedTypeNode> {\n  const { astNode, extensionASTNodes } = type;\n  const nodes: ReadonlyArray<\n    | ObjectTypeDefinitionNode\n    | ObjectTypeExtensionNode\n    | InterfaceTypeDefinitionNode\n    | InterfaceTypeExtensionNode\n  > = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n  return nodes\n    .flatMap((typeNode) => typeNode.interfaces ?? [])\n    .filter((ifaceNode) => ifaceNode.name.value === iface.name);\n}\n\nfunction getUnionMemberTypeNodes(\n  union: GraphQLUnionType,\n  typeName: string,\n): ReadonlyArray<NamedTypeNode> {\n  const { astNode, extensionASTNodes } = union;\n  const nodes: ReadonlyArray<UnionTypeDefinitionNode | UnionTypeExtensionNode> =\n    astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes;\n\n  return nodes\n    .flatMap((unionNode) => unionNode.types ?? [])\n    .filter((typeNode) => typeNode.name.value === typeName);\n}\n\nfunction getDeprecatedDirectiveNode(\n  definitionNode: Maybe<{\n    readonly directives?: ReadonlyArray<DirectiveNode> | undefined;\n  }>,\n): Maybe<DirectiveNode> {\n  return definitionNode?.directives?.find(\n    (node) => node.name.value === GraphQLDeprecatedDirective.name,\n  );\n}\n"]}