@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
32 lines (31 loc) • 1.66 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.NoInaccessibleOnImplementedInterfaceFieldsRule = NoInaccessibleOnImplementedInterfaceFieldsRule;
const graphql_1 = require("graphql");
function NoInaccessibleOnImplementedInterfaceFieldsRule(context, supergraphState) {
return {
ObjectTypeField(objectTypeState, fieldState) {
if (fieldState.inaccessible && objectTypeState.interfaces.size) {
for (const interfaceName of objectTypeState.interfaces) {
const interfaceType = supergraphState.interfaceTypes.get(interfaceName);
if (!interfaceType) {
continue;
}
const interfaceField = interfaceType.fields.get(fieldState.name);
if (!interfaceField) {
continue;
}
if (interfaceField.inaccessible === false) {
const objectTypeFieldSchemaCoordinate = objectTypeState.name + '.' + fieldState.name;
const interfaceFieldSchemaCoordinate = interfaceName + '.' + fieldState.name;
context.reportError(new graphql_1.GraphQLError(`Field "${objectTypeFieldSchemaCoordinate}" is @inaccessible but implements the interface field "${interfaceFieldSchemaCoordinate}", which is in the API schema.`, {
extensions: {
code: 'IMPLEMENTED_BY_INACCESSIBLE',
},
}));
}
}
}
},
};
}
;