@cran/gql.core
Version:
Cran/GraphQL Core Utilities
41 lines (40 loc) • 1.42 kB
JavaScript
import { PluginPhase } from "../plugins/Plugin";
import { makeExecutableSchema } from "@graphql-tools/schema";
// eslint-disable-next-line max-lines-per-function
export function composeExecutableSchema(definition) {
const plugins = definition.plugins || [];
let schema = makeExecutableSchema({
...definition,
typeDefs: [
definition.typeDefs,
...plugins.map(function mapTypeDefs(plugin) {
return plugin.typeDefs;
}).filter(Boolean),
],
resolvers: ([
...(Array.isArray(definition.resolvers)
? definition.resolvers : [definition.resolvers,]),
...plugins.map(function mapResolvers(plugin) {
return plugin.resolvers;
}),
].filter(Boolean)),
});
for (const phase of [
PluginPhase.PREPARE, PluginPhase.DEFAULT, PluginPhase.FINALIZE,
]) {
for (const plugin of plugins) {
if (!plugin.transformer) {
continue;
}
if (plugin.transformer instanceof Function) {
if (phase === PluginPhase.DEFAULT) {
schema = plugin.transformer(schema);
}
}
else if (plugin.transformer[phase] instanceof Function) {
schema = plugin.transformer[phase](schema);
}
}
}
return schema;
}