UNPKG

apollo-schema-extend

Version:

Extends your Apollo Server Express based graphql server with an external graphql source

32 lines (31 loc) 1.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanVariables = exports.getArgumentVariables = void 0; const graphql_1 = require("graphql"); const ramda_1 = require("ramda"); const typeGuards_1 = require("./typeGuards"); const isNotNull = (value) => Boolean(value); const getVariableName = (argumentNode) => argumentNode.value.kind === graphql_1.Kind.VARIABLE ? argumentNode.value.name.value : null; const getArgumentVariables = (node) => { const variables = (0, typeGuards_1.hasArguments)(node) ? node.arguments.map(getVariableName).filter(isNotNull) : []; if ((0, typeGuards_1.hasDirectives)(node)) { variables.push(...node.directives.flatMap(exports.getArgumentVariables).filter(arg => !variables.includes(arg))); } if ((0, typeGuards_1.hasSelectionSet)(node)) { variables.push(...node.selectionSet.selections.flatMap(exports.getArgumentVariables).filter(arg => !variables.includes(arg))); } return variables; }; exports.getArgumentVariables = getArgumentVariables; /** * Returns a shallow copy of the operation containing only variables that are used in the operation */ const cleanVariables = (operation, fragments) => { if (operation && operation.variableDefinitions) { const definitions = [operation, ...fragments]; const usedVariables = definitions.flatMap(exports.getArgumentVariables); return Object.assign(Object.assign({}, operation), { variableDefinitions: operation.variableDefinitions.filter(definition => (0, ramda_1.includes)(definition.variable.name.value, usedVariables)) }); } return operation; }; exports.cleanVariables = cleanVariables;