@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
37 lines (36 loc) • 1.23 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.UniqueInputFieldNamesRule = UniqueInputFieldNamesRule;
const graphql_1 = require("graphql");
function UniqueInputFieldNamesRule(context) {
const knownNameStack = [];
let knownNames = new Set();
return {
ObjectValue: {
enter() {
knownNameStack.push(knownNames);
knownNames = new Set();
},
leave() {
const prevKnownNames = knownNameStack.pop();
if (!prevKnownNames) {
throw new Error('Assertion failed: nothing else in the stack');
}
knownNames = prevKnownNames;
},
},
ObjectField(node) {
const fieldName = node.name.value;
if (knownNames.has(fieldName)) {
context.reportError(new graphql_1.GraphQLError(`There can be only one input field named "${fieldName}".`, {
extensions: {
code: 'INVALID_GRAPHQL',
},
}));
}
else {
knownNames.add(fieldName);
}
},
};
}
;