@graphql-mesh/transform-resolvers-composition
Version:
36 lines (32 loc) • 1.49 kB
JavaScript
;
const schema = require('@graphql-tools/schema');
const resolversComposition = require('@graphql-tools/resolvers-composition');
const utils = require('@graphql-mesh/utils');
class ResolversCompositionTransform {
constructor({ baseDir, config, importFn }) {
this.noWrap = config.mode ? config.mode !== 'wrap' : false; // use config.mode value or default to false
this.compositions = Array.isArray(config) ? config : config.compositions;
this.baseDir = baseDir;
this.importFn = importFn;
}
transformSchema(schema$1) {
const resolversComposition$1 = {};
for (const { resolver, composer } of this.compositions) {
const composerFn$ = utils.loadFromModuleExportExpression(composer, {
cwd: this.baseDir,
defaultExportName: 'default',
importFn: this.importFn,
});
resolversComposition$1[resolver] =
next => (...args) => composerFn$.then(composerFn => (composerFn ? composerFn(next) : next)).then(next => next(...args));
}
const resolvers = utils.extractResolvers(schema$1);
const composedResolvers = resolversComposition.composeResolvers(resolvers, resolversComposition$1);
return schema.addResolversToSchema({
schema: schema$1,
resolvers: composedResolvers,
updateResolversInPlace: true,
});
}
}
module.exports = ResolversCompositionTransform;