UNPKG

@apollo/federation

Version:
36 lines 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.externalMissingOnBase = void 0; const graphql_1 = require("graphql"); const utils_1 = require("../../utils"); const externalMissingOnBase = ({ schema }) => { const errors = []; const types = schema.getTypeMap(); for (const [typeName, namedType] of Object.entries(types)) { if (!(0, graphql_1.isObjectType)(namedType)) continue; const typeFederationMetadata = (0, utils_1.getFederationMetadata)(namedType); if (typeFederationMetadata === null || typeFederationMetadata === void 0 ? void 0 : typeFederationMetadata.externals) { for (const [serviceName, externalFieldsForService] of Object.entries(typeFederationMetadata.externals)) { for (const { field: externalField } of externalFieldsForService) { const externalFieldName = externalField.name.value; const allFields = namedType.getFields(); const matchingBaseField = allFields[externalFieldName]; if (!matchingBaseField) { errors.push((0, utils_1.errorWithCode)('EXTERNAL_MISSING_ON_BASE', (0, utils_1.logServiceAndType)(serviceName, typeName, externalFieldName) + `marked @external but ${externalFieldName} is not defined on the base service of ${typeName} (${typeFederationMetadata.serviceName})`, (0, utils_1.findDirectivesOnNode)(externalField, 'external'))); continue; } const fieldFederationMetadata = (0, utils_1.getFederationMetadata)(matchingBaseField); if (fieldFederationMetadata === null || fieldFederationMetadata === void 0 ? void 0 : fieldFederationMetadata.serviceName) { errors.push((0, utils_1.errorWithCode)('EXTERNAL_MISSING_ON_BASE', (0, utils_1.logServiceAndType)(serviceName, typeName, externalFieldName) + `marked @external but ${externalFieldName} was defined in ${fieldFederationMetadata.serviceName}, not in the service that owns ${typeName} (${typeFederationMetadata.serviceName})`, (0, utils_1.findDirectivesOnNode)(externalField, 'external'))); } } } } } return errors; }; exports.externalMissingOnBase = externalMissingOnBase; //# sourceMappingURL=externalMissingOnBase.js.map