UNPKG

@cran/lib.gql.core

Version:

GQL Core Functionality

65 lines (64 loc) 2.5 kB
"use strict"; /* eslint-disable @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Plugin = void 0; const schema_1 = require("@graphql-tools/schema"); var Plugin; (function (Plugin) { let Phase; (function (Phase) { Phase[Phase["PREPARE"] = 0] = "PREPARE"; Phase[Phase["DEFAULT"] = 1] = "DEFAULT"; Phase[Phase["FINALIZE"] = 2] = "FINALIZE"; })(Phase = Plugin.Phase || (Plugin.Phase = {})); function apply(plugin) { let schema = (0, schema_1.makeExecutableSchema)({ typeDefs: plugin.typeDefs ?? [], resolvers: plugin.resolvers ?? {}, }); for (const phase of [Phase.PREPARE, Phase.DEFAULT, Phase.FINALIZE,]) { schema = getTransformerByPhase(plugin, phase)?.(schema) ?? schema; } return schema; } Plugin.apply = apply; function compose(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: { [Phase.PREPARE]: composeTransformerByPhase(plugins, Phase.PREPARE), [Phase.DEFAULT]: composeTransformerByPhase(plugins, Phase.DEFAULT), [Phase.FINALIZE]: composeTransformerByPhase(plugins, Phase.FINALIZE), }, }; } Plugin.compose = compose; function composeTransformerByPhase(plugins, phase) { return function wrappedTransformerPhase(schema) { let current = schema; for (const plugin of plugins) { const transformer = getTransformerByPhase(plugin, phase); if (transformer) { current = transformer(current); } } return current; }; } Plugin.composeTransformerByPhase = composeTransformerByPhase; function getTransformerByPhase(plugin, phase) { if ("object" === typeof plugin.transformer) { return plugin.transformer[phase]; } if (phase === Phase.DEFAULT && "function" === typeof plugin.transformer) { return plugin.transformer; } return undefined; } Plugin.getTransformerByPhase = getTransformerByPhase; })(Plugin || (exports.Plugin = Plugin = {}));