UNPKG

@pyramation/postgraphile

Version:

A GraphQL schema created by reflection over a PostgreSQL schema 🐘 (previously known as PostGraphQL)

99 lines 6.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginHookFromOptions = exports.makePluginHook = void 0; const package_json_1 = require("../../package.json"); const graphql = require("graphql"); const identityHook = (input) => input; const identityPluginHook = (_hookName, input, _options) => input; function contextIsSame(context1, context2) { // Shortcut if obvious if (context1 === context2) { return true; } // Blacklist approach from now on const keys1 = Object.keys(context1); const keys2 = Object.keys(context2); if (keys1.length !== keys2.length) { return false; } // tslint:disable-next-line one-variable-per-declaration for (let i = 0, l = keys1.length; i < l; i++) { const key = keys1[i]; if (context1[key] !== context2[key]) { return false; } if (!keys2.includes(key)) { return false; } } return true; } // Caches the last value of the hook, in case it's called with exactly the same // arguments again. function memoizeHook(hook) { let lastCall = null; return (argument, context) => { if (lastCall && lastCall.argument === argument && contextIsSame(lastCall.context, context)) { return lastCall.result; } else { const result = hook(argument, context); lastCall = { argument, context, result, }; return result; } }; } function shouldMemoizeHook(hookName) { return hookName === 'withPostGraphileContext'; } function makeHook(plugins, hookName) { const combinedHook = plugins.reduce((previousHook, plugin) => { if (typeof plugin[hookName] === 'function') { return (argument, context) => { return plugin[hookName](previousHook(argument, context), context); }; } else { return previousHook; } }, identityHook); if (combinedHook === identityHook) { return identityHook; } else if (shouldMemoizeHook(hookName)) { return memoizeHook(combinedHook); } else { return combinedHook; } } function makePluginHook(plugins) { const hooks = {}; const emptyObject = {}; // caching this makes memoization faster when no context is needed function rawPluginHook(hookName, argument, context = emptyObject) { if (!hooks[hookName]) { hooks[hookName] = makeHook(plugins, hookName); } return hooks[hookName](argument, context); } const pluginHook = rawPluginHook('pluginHook', rawPluginHook, {}); // Use this hook to check your hook is compatible with this version of // PostGraphile, also to get a reference to shared graphql instance. pluginHook('init', null, { version: package_json_1.version, graphql }); return pluginHook; } exports.makePluginHook = makePluginHook; function pluginHookFromOptions(options) { if (typeof options.pluginHook === 'function') { return options.pluginHook; } else { return identityPluginHook; } } exports.pluginHookFromOptions = pluginHookFromOptions; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3N0Z3JhcGhpbGUvcGx1Z2luSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBNkM7QUFDN0MsbUNBQW1DO0FBeURuQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQVEsRUFBSyxFQUFFLENBQUMsS0FBSyxDQUFDO0FBQy9DLE1BQU0sa0JBQWtCLEdBQWlCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUUvRSxTQUFTLGFBQWEsQ0FBQyxRQUE2QixFQUFFLFFBQTZCO0lBQ2pGLHNCQUFzQjtJQUN0QixJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELGlDQUFpQztJQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELHdEQUF3RDtJQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hC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