123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true,
- });
- exports.NoUnusedVariablesRule = NoUnusedVariablesRule;
- var _GraphQLError = require('../../error/GraphQLError.js');
- /**
- * 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.
- *
- * See https://spec.graphql.org/draft/#sec-All-Variables-Used
- */
- function NoUnusedVariablesRule(context) {
- let variableDefs = [];
- return {
- OperationDefinition: {
- enter() {
- variableDefs = [];
- },
- leave(operation) {
- const variableNameUsed = Object.create(null);
- const usages = context.getRecursiveVariableUsages(operation);
- for (const { node } of usages) {
- variableNameUsed[node.name.value] = true;
- }
- for (const variableDef of variableDefs) {
- const variableName = variableDef.variable.name.value;
- if (variableNameUsed[variableName] !== true) {
- context.reportError(
- new _GraphQLError.GraphQLError(
- operation.name
- ? `Variable "$${variableName}" is never used in operation "${operation.name.value}".`
- : `Variable "$${variableName}" is never used.`,
- {
- nodes: variableDef,
- },
- ),
- );
- }
- }
- },
- },
- VariableDefinition(def) {
- variableDefs.push(def);
- },
- };
- }
|