@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
39 lines (38 loc) • 1.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultValueUsesInaccessibleRule = DefaultValueUsesInaccessibleRule;
const graphql_1 = require("graphql");
function DefaultValueUsesInaccessibleRule(context, supergraph) {
return {
InputObjectTypeField(inputObjectState, fieldState) {
if (typeof fieldState.defaultValue !== 'string' ||
fieldState.inaccessible) {
return;
}
detectInaccessibleDefaultValue(context, () => `${inputObjectState.name}.${fieldState.name}`, fieldState.type, fieldState.defaultValue, supergraph.enumTypes);
},
ObjectTypeFieldArg(objectState, fieldState, argState) {
if (typeof argState.defaultValue !== 'string') {
return;
}
if (argState.inaccessible) {
return;
}
detectInaccessibleDefaultValue(context, () => `${objectState.name}.${fieldState.name}(${argState.name}:)`, argState.type, argState.defaultValue, supergraph.enumTypes);
},
};
}
function detectInaccessibleDefaultValue(context, schemaCoordinate, outputType, defaultValue, enumTypes) {
const outputTypeName = outputType.replace(/[\[\]\!]+/g, '');
const enumType = enumTypes.get(outputTypeName);
if (!enumType) {
return;
}
if (enumType.inaccessible === true || enumType.values.get(defaultValue)?.inaccessible === true) {
context.reportError(new graphql_1.GraphQLError(`Enum value "${outputTypeName}.${defaultValue}" is @inaccessible but is used in the default value of "${schemaCoordinate()}", which is in the API schema.`, {
extensions: {
code: 'DEFAULT_VALUE_USES_INACCESSIBLE',
},
}));
}
}
;