{"version":3,"file":"UniqueVariableNamesRule.js","sourceRoot":"","sources":["../../../src/validation/rules/UniqueVariableNamesRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,kCAAiC;AAEnD,OAAO,EAAE,YAAY,EAAE,qCAAoC;AAwC3D,MAAM,UAAU,uBAAuB,CACrC,OAA6B;IAE7B,OAAO;QACL,mBAAmB,CAAC,aAAa;YAC/B,MAAM,mBAAmB,GAAG,aAAa,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAEpE,MAAM,uBAAuB,GAAG,OAAO,CACrC,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CACnC,CAAC;YAEF,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,uBAAuB,EAAE,CAAC;gBACpE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,WAAW,CACjB,IAAI,YAAY,CACd,0CAA0C,YAAY,IAAI,EAC1D,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAC3D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/** @category Validation Rules */\n\nimport { groupBy } from '../../jsutils/groupBy.ts';\n\nimport { GraphQLError } from '../../error/GraphQLError.ts';\n\nimport type { ASTVisitor } from '../../language/visitor.ts';\n\nimport type { ASTValidationContext } from '../ValidationContext.ts';\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\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 { UniqueVariableNamesRule } from 'graphql/validation';\n *\n * const schema = buildSchema(`\n *   type Query {\n *     field(arg: ID): String\n *   }\n * `);\n *\n * const invalidDocument = parse(`\n *   query ($id: ID, $id: ID) { field(arg: $id) }\n * `);\n * const invalidErrors = validate(schema, invalidDocument, [\n *   UniqueVariableNamesRule,\n * ]);\n *\n * invalidErrors.length; // => 1\n *\n * const validDocument = parse(`\n *   query ($id: ID) { field(arg: $id) }\n * `);\n * const validErrors = validate(schema, validDocument, [UniqueVariableNamesRule]);\n *\n * validErrors; // => []\n * ```\n */\nexport function UniqueVariableNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor {\n  return {\n    OperationDefinition(operationNode) {\n      const variableDefinitions = operationNode.variableDefinitions ?? [];\n\n      const seenVariableDefinitions = groupBy(\n        variableDefinitions,\n        (node) => node.variable.name.value,\n      );\n\n      for (const [variableName, variableNodes] of seenVariableDefinitions) {\n        if (variableNodes.length > 1) {\n          context.reportError(\n            new GraphQLError(\n              `There can be only one variable named \"$${variableName}\".`,\n              { nodes: variableNodes.map((node) => node.variable.name) },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n"]}