@graphql-mesh/fusion-runtime
Version:
Runtime for GraphQL Mesh Fusion Supergraph
39 lines (38 loc) • 1.26 kB
JavaScript
import { isNamedType } from 'graphql';
import { getDirectiveExtensions, MapperKind, mapSchema, } from '@graphql-tools/utils';
function isHidden(directableObj) {
const directiveExtensions = getDirectiveExtensions(directableObj);
const hiddenDirectives = directiveExtensions?.hidden;
return hiddenDirectives?.length;
}
export function filterHiddenPartsInSchema(schema) {
return mapSchema(schema, {
[MapperKind.TYPE](type) {
if (isNamedType(type) && isHidden(type)) {
return null;
}
},
[MapperKind.ROOT_OBJECT](type) {
const fields = Object.values(type.getFields());
const availableFields = fields.filter(field => !isHidden(field));
if (!availableFields.length) {
return null;
}
},
[MapperKind.ROOT_FIELD](fieldConfig) {
if (isHidden(fieldConfig)) {
return null;
}
},
[MapperKind.FIELD](fieldConfig) {
if (isHidden(fieldConfig)) {
return null;
}
},
[MapperKind.ARGUMENT](argConfig) {
if (isHidden(argConfig)) {
return null;
}
},
});
}