@cran/gql.core
Version:
Cran/GraphQL Core Utilities
55 lines (54 loc) • 2.26 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-explicit-any */
Object.defineProperty(exports, "__esModule", { value: true });
exports.composePlugins = exports.PluginPhase = void 0;
var PluginPhase;
(function (PluginPhase) {
PluginPhase[PluginPhase["PREPARE"] = 0] = "PREPARE";
PluginPhase[PluginPhase["DEFAULT"] = 1] = "DEFAULT";
PluginPhase[PluginPhase["FINALIZE"] = 2] = "FINALIZE";
})(PluginPhase = exports.PluginPhase || (exports.PluginPhase = {}));
// eslint-disable-next-line max-lines-per-function
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;
},
},
};
}
exports.composePlugins = composePlugins;