UNPKG

@stewartmcgown/apollo-response-cache

Version:

Caching and invalidation mechanisms (plugins, directives) of Apollo GraphQL

41 lines (40 loc) 1.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LogCacheDirective = void 0; const graphql_1 = require("graphql"); const graphql_tools_1 = require("graphql-tools"); const lodash_1 = require("lodash"); const utils_1 = require("../utils"); exports.LogCacheDirective = ({ typeResolver, idResolver, }) => { class BaseLogCacheDirective extends graphql_tools_1.SchemaDirectiveVisitor { visitFieldDefinition(field) { const { resolve = graphql_1.defaultFieldResolver } = field; field.resolve = async (...args) => { const { type, identifier } = this.args; const [root, _, { __nodeFQCKeySet, __redis }] = args; const result = await resolve.apply(this, args); if (!__redis || !__nodeFQCKeySet) { return result; } const nodes = Array.isArray(result) ? result : [result]; nodes.forEach((node) => { const nodeType = typeResolver ? typeResolver(type, node) : type; const nodeId = idResolver ? idResolver(type, node) : lodash_1.get(node, identifier) || lodash_1.get(node, 'id') || lodash_1.get(node, '_id'); if (!nodeType || !nodeId) { return; } try { __nodeFQCKeySet.add(utils_1.toNodeFQCKey({ type: nodeType, id: nodeId })); } catch (error) { console.warn(error); } }); return result; }; } } return BaseLogCacheDirective; };