@graphql-mesh/transform-resolvers-composition
Version:
34 lines (31 loc) • 1.47 kB
JavaScript
import { addResolversToSchema } from '@graphql-tools/schema';
import { composeResolvers } from '@graphql-tools/resolvers-composition';
import { loadFromModuleExportExpression, extractResolvers } from '@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) {
const resolversComposition = {};
for (const { resolver, composer } of this.compositions) {
const composerFn$ = loadFromModuleExportExpression(composer, {
cwd: this.baseDir,
defaultExportName: 'default',
importFn: this.importFn,
});
resolversComposition[resolver] =
next => (...args) => composerFn$.then(composerFn => (composerFn ? composerFn(next) : next)).then(next => next(...args));
}
const resolvers = extractResolvers(schema);
const composedResolvers = composeResolvers(resolvers, resolversComposition);
return addResolversToSchema({
schema,
resolvers: composedResolvers,
updateResolversInPlace: true,
});
}
}
export default ResolversCompositionTransform;