| import { GraphQLError } from "../../error/GraphQLError.mjs"; |
| |
| /** |
| * No unused variables |
| * |
| * A GraphQL operation is only valid if all variables defined by an operation |
| * are used, either directly or within a spread fragment. |
| */ |
| export function NoUnusedVariablesRule(context) { |
| var variableDefs = []; |
| return { |
| OperationDefinition: { |
| enter: function enter() { |
| variableDefs = []; |
| }, |
| leave: function leave(operation) { |
| var variableNameUsed = Object.create(null); |
| var usages = context.getRecursiveVariableUsages(operation); |
| |
| for (var _i2 = 0; _i2 < usages.length; _i2++) { |
| var _ref2 = usages[_i2]; |
| var node = _ref2.node; |
| variableNameUsed[node.name.value] = true; |
| } |
| |
| for (var _i4 = 0, _variableDefs2 = variableDefs; _i4 < _variableDefs2.length; _i4++) { |
| var variableDef = _variableDefs2[_i4]; |
| var variableName = variableDef.variable.name.value; |
| |
| if (variableNameUsed[variableName] !== true) { |
| context.reportError(new GraphQLError(operation.name ? "Variable \"$".concat(variableName, "\" is never used in operation \"").concat(operation.name.value, "\".") : "Variable \"$".concat(variableName, "\" is never used."), variableDef)); |
| } |
| } |
| } |
| }, |
| VariableDefinition: function VariableDefinition(def) { |
| variableDefs.push(def); |
| } |
| }; |
| } |