apollo-schema-extend
Version:
Extends your Apollo Server Express based graphql server with an external graphql source
32 lines (31 loc) • 1.68 kB
JavaScript
;
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;