graphql
Version:
A Query Language and Runtime which can target any service.
1 lines • 3 kB
Source Map (JSON)
{"version":3,"file":"UniqueOperationNamesRule.js","sourceRoot":"","sources":["../../../src/validation/rules/UniqueOperationNamesRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,qCAAoC;AA2C3D,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxD,OAAO;QACL,mBAAmB,CAAC,IAAI;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;YAChC,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACxE,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC;oBAC/B,OAAO,CAAC,WAAW,CACjB,IAAI,YAAY,CACd,0CAA0C,aAAa,CAAC,KAAK,IAAI,EACjE,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAAE,CAC/C,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAK;KAChC,CAAC;AACJ,CAAC","sourcesContent":["/** @category Validation Rules */\n\nimport { GraphQLError } from '../../error/GraphQLError.ts';\n\nimport type { NameNode } from '../../language/ast.ts';\nimport type { ASTVisitor } from '../../language/visitor.ts';\n\nimport type { ASTValidationContext } from '../ValidationContext.ts';\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\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 { UniqueOperationNamesRule } from 'graphql/validation';\n *\n * const schema = buildSchema(`\n * type Query {\n * name: String\n * }\n * `);\n *\n * const invalidDocument = parse(`\n * query Same { name } query Same { name }\n * `);\n * const invalidErrors = validate(schema, invalidDocument, [\n * UniqueOperationNamesRule,\n * ]);\n *\n * invalidErrors.length; // => 1\n *\n * const validDocument = parse(`\n * query One { name } query Two { name }\n * `);\n * const validErrors = validate(schema, validDocument, [UniqueOperationNamesRule]);\n *\n * validErrors; // => []\n * ```\n */\nexport function UniqueOperationNamesRule(\n context: ASTValidationContext,\n): ASTVisitor {\n const knownOperationNames = new Map<string, NameNode>();\n return {\n OperationDefinition(node) {\n const operationName = node.name;\n if (operationName != null) {\n const knownOperationName = knownOperationNames.get(operationName.value);\n if (knownOperationName != null) {\n context.reportError(\n new GraphQLError(\n `There can be only one operation named \"${operationName.value}\".`,\n { nodes: [knownOperationName, operationName] },\n ),\n );\n } else {\n knownOperationNames.set(operationName.value, operationName);\n }\n }\n return false;\n },\n FragmentDefinition: () => false,\n };\n}\n"]}