{"version":3,"file":"UniqueFragmentNamesRule.js","sourceRoot":"","sources":["../../../src/validation/rules/UniqueFragmentNamesRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,qCAAoC;AA2C3D,MAAM,UAAU,uBAAuB,CACrC,OAA6B;IAE7B,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvD,OAAO;QACL,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK;QAChC,kBAAkB,CAAC,IAAI;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACrC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/D,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBAC9B,OAAO,CAAC,WAAW,CACjB,IAAI,YAAY,CACd,yCAAyC,YAAY,IAAI,EACzD,EAAE,KAAK,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1C,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,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 fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-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 { UniqueFragmentNamesRule } from 'graphql/validation';\n *\n * const schema = buildSchema(`\n *   type Query {\n *     name: String\n *   }\n * `);\n *\n * const invalidDocument = parse(`\n *   fragment A on Query { name } fragment A on Query { name } query { ...A }\n * `);\n * const invalidErrors = validate(schema, invalidDocument, [\n *   UniqueFragmentNamesRule,\n * ]);\n *\n * invalidErrors.length; // => 1\n *\n * const validDocument = parse(`\n *   fragment A on Query { name } query { ...A }\n * `);\n * const validErrors = validate(schema, validDocument, [UniqueFragmentNamesRule]);\n *\n * validErrors; // => []\n * ```\n */\nexport function UniqueFragmentNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor {\n  const knownFragmentNames = new Map<string, NameNode>();\n  return {\n    OperationDefinition: () => false,\n    FragmentDefinition(node) {\n      const fragmentName = node.name.value;\n      const knownFragmentName = knownFragmentNames.get(fragmentName);\n      if (knownFragmentName != null) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one fragment named \"${fragmentName}\".`,\n            { nodes: [knownFragmentName, node.name] },\n          ),\n        );\n      } else {\n        knownFragmentNames.set(fragmentName, node.name);\n      }\n      return false;\n    },\n  };\n}\n"]}