@apollo/federation
Version:
Apollo Federation Utilities
33 lines • 1.85 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.executableDirectivesInAllServices = void 0;
const graphql_1 = require("graphql");
const utils_1 = require("../../utils");
const directives_1 = require("@apollo/subgraph/dist/directives");
const executableDirectivesInAllServices = ({ schema, serviceList, }) => {
const errors = [];
const customExecutableDirectives = schema
.getDirectives()
.filter(x => !(0, directives_1.isKnownSubgraphDirective)(x) && !(0, graphql_1.isSpecifiedDirective)(x));
customExecutableDirectives.forEach(directive => {
var _a;
const directiveFederationMetadata = (0, utils_1.getFederationMetadata)(directive);
if (!directiveFederationMetadata)
return;
const allServiceNames = serviceList.map(({ name }) => name);
const serviceNamesWithDirective = Object.keys(directiveFederationMetadata.directiveDefinitions);
const serviceNamesWithoutDirective = allServiceNames.reduce((without, serviceName) => {
if (!serviceNamesWithDirective.includes(serviceName)) {
without.push(serviceName);
}
return without;
}, []);
if (serviceNamesWithoutDirective.length > 0) {
errors.push((0, utils_1.errorWithCode)('EXECUTABLE_DIRECTIVES_IN_ALL_SERVICES', (0, utils_1.logDirective)(directive.name) +
`Custom directives must be implemented in every service. The following services do not implement the @${directive.name} directive: ${serviceNamesWithoutDirective.join(', ')}.`, (_a = directive.astNode) !== null && _a !== void 0 ? _a : undefined));
}
});
return errors;
};
exports.executableDirectivesInAllServices = executableDirectivesInAllServices;
//# sourceMappingURL=executableDirectivesInAllServices.js.map
;