@graphql-mesh/fusion-composition
Version:
Basic composition utility for Fusion spec
46 lines (45 loc) • 2.39 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTypeReplaceTransform = createTypeReplaceTransform;
exports.createExtendTransform = createExtendTransform;
const tslib_1 = require("tslib");
const graphql_1 = require("graphql");
const utils_1 = require("@graphql-tools/utils");
const utils_js_1 = require("./transforms/utils.js");
function createTypeReplaceTransform(replacerFn) {
return function typeReplaceTransform(schema) {
return (0, utils_1.mapSchema)(schema, {
[utils_1.MapperKind.FIELD]: (fieldConfig, fieldName, typeName) => {
const newTypeName = replacerFn(typeName, fieldName, fieldConfig.type);
if (typeof newTypeName === 'string' && newTypeName !== fieldConfig.type.toString()) {
const newType = (0, graphql_1.typeFromAST)(schema, (0, graphql_1.parseType)(newTypeName));
if (!newType) {
throw new utils_js_1.TransformValidationError(`No type found for ${newTypeName} in the schema, use a type instance instead such as GraphQLString from 'graphql'`);
}
return [fieldName, { ...fieldConfig, type: newType }];
}
if ((0, graphql_1.isOutputType)(newTypeName)) {
return [fieldName, { ...fieldConfig, type: newTypeName }];
}
return undefined;
},
});
};
}
function createExtendTransform(typeDefs) {
const typeDefsDoc = typeof typeDefs === 'string' ? (0, graphql_1.parse)(typeDefs, { noLocation: true }) : typeDefs;
return function extendTransform(schema) {
return (0, graphql_1.extendSchema)(schema, typeDefsDoc, {
assumeValid: true,
assumeValidSDL: true,
});
};
}
tslib_1.__exportStar(require("./transforms/filter-schema.js"), exports);
tslib_1.__exportStar(require("./transforms/naming-convention.js"), exports);
tslib_1.__exportStar(require("./transforms/prefix.js"), exports);
tslib_1.__exportStar(require("./transforms/rename.js"), exports);
tslib_1.__exportStar(require("./transforms/encapsulate.js"), exports);
tslib_1.__exportStar(require("./transforms/prune.js"), exports);
tslib_1.__exportStar(require("./transforms/hoist-field.js"), exports);
tslib_1.__exportStar(require("./transforms/federation.js"), exports);
;