UNPKG

@cran/gql.core

Version:

Cran/GraphQL Core Utilities

51 lines (50 loc) 2.07 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ export var PluginPhase; (function (PluginPhase) { PluginPhase[PluginPhase["PREPARE"] = 0] = "PREPARE"; PluginPhase[PluginPhase["DEFAULT"] = 1] = "DEFAULT"; PluginPhase[PluginPhase["FINALIZE"] = 2] = "FINALIZE"; })(PluginPhase || (PluginPhase = {})); // eslint-disable-next-line max-lines-per-function export function composePlugins(plugins) { return { typeDefs: plugins.map(function mapTypeDefs(plugin) { return plugin.typeDefs; }), resolvers: plugins.reduce(function reduceResolvers(acc, plugin) { return Object.assign(acc, plugin.resolvers); }, {}), transformer: { [PluginPhase.PREPARE](schema) { for (const plugin of plugins) { if ("object" === typeof plugin.transformer && PluginPhase.PREPARE in plugin.transformer) { schema = plugin.transformer[PluginPhase.PREPARE](schema); } } return schema; }, [PluginPhase.DEFAULT](schema) { for (const plugin of plugins) { if ("function" === typeof plugin.transformer) { schema = plugin.transformer(schema); } else if ("object" === typeof plugin.transformer && PluginPhase.DEFAULT in plugin.transformer) { schema = plugin.transformer[PluginPhase.DEFAULT](schema); } } return schema; }, [PluginPhase.FINALIZE](schema) { for (const plugin of plugins) { if ("object" === typeof plugin.transformer && PluginPhase.FINALIZE in plugin.transformer) { schema = plugin.transformer[PluginPhase.FINALIZE](schema); } } return schema; }, }, }; }