{"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/language/predicates.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category AST Predicates */\n\nimport type {\n  ASTNode,\n  ConstValueNode,\n  DefinitionNode,\n  ExecutableDefinitionNode,\n  OperationDefinitionNode,\n  SchemaCoordinateNode,\n  SelectionNode,\n  SubscriptionOperationDefinitionNode,\n  TypeDefinitionNode,\n  TypeExtensionNode,\n  TypeNode,\n  TypeSystemDefinitionNode,\n  TypeSystemExtensionNode,\n  ValueNode,\n} from './ast.ts';\nimport { OperationTypeNode } from './ast.ts';\nimport { Kind } from './kinds.ts';\n\n/**\n * Returns true when the AST node is a definition node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a definition node.\n * @example\n * ```ts\n * import { parse, isDefinitionNode } from 'graphql/language';\n *\n * const document = parse('{ hello }');\n *\n * isDefinitionNode(document.definitions[0]); // => true\n * isDefinitionNode(document); // => false\n * ```\n */\nexport function isDefinitionNode(node: ASTNode): node is DefinitionNode {\n  return (\n    isExecutableDefinitionNode(node) ||\n    isTypeSystemDefinitionNode(node) ||\n    isTypeSystemExtensionNode(node)\n  );\n}\n\n/**\n * Returns true when the AST node is an executable definition node.\n * @param node - The AST node to test.\n * @returns True when the AST node is an executable definition node.\n * @example\n * ```ts\n * import { parse, isExecutableDefinitionNode } from 'graphql/language';\n *\n * const query = parse('{ hello }');\n * const schema = parse('type Query { hello: String }');\n *\n * isExecutableDefinitionNode(query.definitions[0]); // => true\n * isExecutableDefinitionNode(schema.definitions[0]); // => false\n * ```\n */\nexport function isExecutableDefinitionNode(\n  node: ASTNode,\n): node is ExecutableDefinitionNode {\n  return (\n    node.kind === Kind.OPERATION_DEFINITION ||\n    node.kind === Kind.FRAGMENT_DEFINITION\n  );\n}\n\n/**\n * A type predicate for SubscriptionOperationDefinitionNode.\n * Useful anywhere that must distinguish subscription operations from\n * queries and mutations, such as the subscription execution pipeline\n * which routes events through a different code path.\n * @param node - Operation definition node to test.\n * @returns True when the operation definition is a subscription.\n * @example\n * ```ts\n * import { parse, isSubscriptionOperationDefinitionNode } from 'graphql/language';\n *\n * const subscription = parse('subscription { greeting }').definitions[0];\n * const query = parse('{ greeting }').definitions[0];\n *\n * isSubscriptionOperationDefinitionNode(subscription); // => true\n * isSubscriptionOperationDefinitionNode(query); // => false\n * ```\n */\nexport function isSubscriptionOperationDefinitionNode(\n  node: OperationDefinitionNode,\n): node is SubscriptionOperationDefinitionNode {\n  return node.operation === OperationTypeNode.SUBSCRIPTION;\n}\n\n/**\n * Returns true when the AST node is a selection node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a selection node.\n * @example\n * ```ts\n * import { Kind, isSelectionNode } from 'graphql/language';\n *\n * const field = { kind: Kind.FIELD, name: { kind: Kind.NAME, value: 'hello' } };\n * const document = { kind: Kind.DOCUMENT, definitions: [] };\n *\n * isSelectionNode(field); // => true\n * isSelectionNode(document); // => false\n * ```\n */\nexport function isSelectionNode(node: ASTNode): node is SelectionNode {\n  return (\n    node.kind === Kind.FIELD ||\n    node.kind === Kind.FRAGMENT_SPREAD ||\n    node.kind === Kind.INLINE_FRAGMENT\n  );\n}\n\n/**\n * Returns true when the AST node is a value node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a value node.\n * @example\n * ```ts\n * import { parseType, parseValue, isValueNode } from 'graphql/language';\n *\n * const value = parseValue('[42]');\n * const type = parseType('[String!]');\n *\n * isValueNode(value); // => true\n * isValueNode(type); // => false\n * ```\n */\nexport function isValueNode(node: ASTNode): node is ValueNode {\n  return (\n    node.kind === Kind.VARIABLE ||\n    node.kind === Kind.INT ||\n    node.kind === Kind.FLOAT ||\n    node.kind === Kind.STRING ||\n    node.kind === Kind.BOOLEAN ||\n    node.kind === Kind.NULL ||\n    node.kind === Kind.ENUM ||\n    node.kind === Kind.LIST ||\n    node.kind === Kind.OBJECT\n  );\n}\n\n/**\n * Returns true when the AST node is a constant value node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a constant value node.\n * @example\n * ```ts\n * import {\n *   parseConstValue,\n *   parseValue,\n *   isConstValueNode,\n * } from 'graphql/language';\n *\n * const value = parseConstValue('[42]');\n * const variable = parseValue('$id');\n *\n * isConstValueNode(value); // => true\n * isConstValueNode(variable); // => false\n * ```\n */\nexport function isConstValueNode(node: ASTNode): node is ConstValueNode {\n  return (\n    isValueNode(node) &&\n    (node.kind === Kind.LIST\n      ? node.values.some(isConstValueNode)\n      : node.kind === Kind.OBJECT\n        ? node.fields.some((field) => isConstValueNode(field.value))\n        : node.kind !== Kind.VARIABLE)\n  );\n}\n\n/**\n * Returns true when the AST node is a type node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a type node.\n * @example\n * ```ts\n * import { parseType, parseValue, isTypeNode } from 'graphql/language';\n *\n * const type = parseType('[String!]');\n * const value = parseValue('[42]');\n *\n * isTypeNode(type); // => true\n * isTypeNode(value); // => false\n * ```\n */\nexport function isTypeNode(node: ASTNode): node is TypeNode {\n  return (\n    node.kind === Kind.NAMED_TYPE ||\n    node.kind === Kind.LIST_TYPE ||\n    node.kind === Kind.NON_NULL_TYPE\n  );\n}\n\n/**\n * Returns true when the AST node is a type system definition node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a type system definition node.\n * @example\n * ```ts\n * import { parse, isTypeSystemDefinitionNode } from 'graphql/language';\n *\n * const schema = parse('type Query { hello: String }');\n * const query = parse('{ hello }');\n *\n * isTypeSystemDefinitionNode(schema.definitions[0]); // => true\n * isTypeSystemDefinitionNode(query.definitions[0]); // => false\n * ```\n */\nexport function isTypeSystemDefinitionNode(\n  node: ASTNode,\n): node is TypeSystemDefinitionNode {\n  return (\n    node.kind === Kind.SCHEMA_DEFINITION ||\n    isTypeDefinitionNode(node) ||\n    node.kind === Kind.DIRECTIVE_DEFINITION\n  );\n}\n\n/**\n * Returns true when the AST node is a type definition node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a type definition node.\n * @example\n * ```ts\n * import { parse, isTypeDefinitionNode } from 'graphql/language';\n *\n * const typeDefinition = parse('type Query { hello: String }');\n * const directiveDefinition = parse('directive @cache on FIELD');\n *\n * isTypeDefinitionNode(typeDefinition.definitions[0]); // => true\n * isTypeDefinitionNode(directiveDefinition.definitions[0]); // => false\n * ```\n */\nexport function isTypeDefinitionNode(\n  node: ASTNode,\n): node is TypeDefinitionNode {\n  return (\n    node.kind === Kind.SCALAR_TYPE_DEFINITION ||\n    node.kind === Kind.OBJECT_TYPE_DEFINITION ||\n    node.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n    node.kind === Kind.UNION_TYPE_DEFINITION ||\n    node.kind === Kind.ENUM_TYPE_DEFINITION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n  );\n}\n\n/**\n * Returns true when the AST node is a type system extension node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a type system extension node.\n * @example\n * ```ts\n * import { parse, isTypeSystemExtensionNode } from 'graphql/language';\n *\n * const extension = parse('extend type Query { hello: String }');\n * const definition = parse('type Query { hello: String }');\n *\n * isTypeSystemExtensionNode(extension.definitions[0]); // => true\n * isTypeSystemExtensionNode(definition.definitions[0]); // => false\n * ```\n */\nexport function isTypeSystemExtensionNode(\n  node: ASTNode,\n): node is TypeSystemExtensionNode {\n  return (\n    node.kind === Kind.SCHEMA_EXTENSION ||\n    node.kind === Kind.DIRECTIVE_EXTENSION ||\n    isTypeExtensionNode(node)\n  );\n}\n\n/**\n * Returns true when the AST node is a type extension node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a type extension node.\n * @example\n * ```ts\n * import { parse, isTypeExtensionNode } from 'graphql/language';\n *\n * const extension = parse('extend type Query { hello: String }');\n * const schemaExtension = parse('extend schema { query: Query }');\n *\n * isTypeExtensionNode(extension.definitions[0]); // => true\n * isTypeExtensionNode(schemaExtension.definitions[0]); // => false\n * ```\n */\nexport function isTypeExtensionNode(node: ASTNode): node is TypeExtensionNode {\n  return (\n    node.kind === Kind.SCALAR_TYPE_EXTENSION ||\n    node.kind === Kind.OBJECT_TYPE_EXTENSION ||\n    node.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n    node.kind === Kind.UNION_TYPE_EXTENSION ||\n    node.kind === Kind.ENUM_TYPE_EXTENSION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n  );\n}\n\n/**\n * Returns true when the AST node is a schema coordinate node.\n * @param node - The AST node to test.\n * @returns True when the AST node is a schema coordinate node.\n * @example\n * ```ts\n * import {\n *   parse,\n *   parseSchemaCoordinate,\n *   isSchemaCoordinateNode,\n * } from 'graphql/language';\n *\n * const coordinate = parseSchemaCoordinate('Query.hero');\n * const document = parse('{ hero }');\n *\n * isSchemaCoordinateNode(coordinate); // => true\n * isSchemaCoordinateNode(document); // => false\n * ```\n */\nexport function isSchemaCoordinateNode(\n  node: ASTNode,\n): node is SchemaCoordinateNode {\n  return (\n    node.kind === Kind.TYPE_COORDINATE ||\n    node.kind === Kind.MEMBER_COORDINATE ||\n    node.kind === Kind.ARGUMENT_COORDINATE ||\n    node.kind === Kind.DIRECTIVE_COORDINATE ||\n    node.kind === Kind.DIRECTIVE_ARGUMENT_COORDINATE\n  );\n}\n"]}