UNPKG

@cran/gql.core

Version:

Cran/GraphQL Core Utilities

41 lines (40 loc) 1.42 kB
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; }