{"version":3,"file":"ValuesOfCorrectTypeRule.js","sourceRoot":"","sources":["../../../src/validation/rules/ValuesOfCorrectTypeRule.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,+CAA8C;AAyC7E,MAAM,UAAU,uBAAuB,CACrC,OAA0B;IAE1B,OAAO;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAClB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAGlB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/D,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAClB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACzD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3E,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACnB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAMzD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACzD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CACrB,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC;AAQD,SAAS,gBAAgB,CACvB,OAA0B,EAC1B,IAAe,EACf,SAAkC;IAElC,IAAI,SAAS,EAAE,CAAC;QACd,oBAAoB,CAClB,IAAI,EACJ,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,EACD,SAAS,EACT,SAAS,EACT,OAAO,CAAC,eAAe,CACxB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/** @category Validation Rules */\n\nimport type { Maybe } from '../../jsutils/Maybe.ts';\n\nimport type { ValueNode } from '../../language/ast.ts';\nimport type { ASTVisitor } from '../../language/visitor.ts';\n\nimport type { GraphQLInputType } from '../../type/index.ts';\n\nimport { validateInputLiteral } from '../../utilities/validateInputValue.ts';\n\nimport type { ValidationContext } from '../ValidationContext.ts';\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n * @param context - The validation context used while checking the document.\n * @returns A visitor that reports validation errors for this rule.\n * @example\n * ```ts\n * import { buildSchema, parse, validate } from 'graphql';\n * import { ValuesOfCorrectTypeRule } from 'graphql/validation';\n *\n * const schema = buildSchema(`\n *   type Query {\n *     count(limit: Int): Int\n *   }\n * `);\n *\n * const invalidDocument = parse(`\n *   { count(limit: \"many\") }\n * `);\n * const invalidErrors = validate(schema, invalidDocument, [\n *   ValuesOfCorrectTypeRule,\n * ]);\n *\n * invalidErrors.length; // => 1\n *\n * const validDocument = parse(`\n *   { count(limit: 1) }\n * `);\n * const validErrors = validate(schema, validDocument, [ValuesOfCorrectTypeRule]);\n *\n * validErrors; // => []\n * ```\n */\nexport function ValuesOfCorrectTypeRule(\n  context: ValidationContext,\n): ASTVisitor {\n  return {\n    NullValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n    ListValue: (node) =>\n      // Note: TypeInfo will traverse into a list's item type, so look to the\n      // parent input type to check if it is a list.\n      isValidValueNode(context, node, context.getParentInputType()),\n    ObjectValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n    EnumValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n    IntValue: (node) => isValidValueNode(context, node, context.getInputType()),\n    FloatValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n    // Descriptions are string values that would not validate according\n    // to the below logic, but since (per the specification) descriptions must\n    // not affect validation, they are ignored entirely when visiting the AST\n    // and do not require special handling.\n    // See https://spec.graphql.org/draft/#sec-Descriptions\n    StringValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n    BooleanValue: (node) =>\n      isValidValueNode(context, node, context.getInputType()),\n  };\n}\n\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n *\n * @internal\n */\nfunction isValidValueNode(\n  context: ValidationContext,\n  node: ValueNode,\n  inputType: Maybe<GraphQLInputType>,\n): false {\n  if (inputType) {\n    validateInputLiteral(\n      node,\n      inputType,\n      (error) => {\n        context.reportError(error);\n      },\n      undefined,\n      undefined,\n      context.hideSuggestions,\n    );\n  }\n  return false;\n}\n"]}