UNPKG

@stewartmcgown/apollo-response-cache

Version:

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

47 lines (46 loc) 1.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.invalidateFQC = exports.recordNodeFQCMapping = exports.toNodeFQCKey = void 0; const enums_1 = require("./enums"); /** * Generate cache key of Node and FQC hashes array mapping * * e.g. ['Article', 18] -> 'node-fqcs:Article:18' */ exports.toNodeFQCKey = (node) => { return `${enums_1.CACHE_KEY_PREFIX_NODE_FQC}:${node.type}:${node.id}`; }; /** * Record Node:FQC mapping * */ exports.recordNodeFQCMapping = ({ nodeFQCKeys, fqcKey, ttl, redis, }) => { try { nodeFQCKeys.forEach((cacheKey) => { redis.client.sadd(cacheKey, fqcKey); redis.client.expire(cacheKey, ttl); }); } catch (error) { console.warn(error); } }; /** * Invalidate full query caches by the given related node keys */ exports.invalidateFQC = async ({ node, redis, }) => { try { const key = exports.toNodeFQCKey(node); const hashes = await redis.client.smembers(key); hashes.map(async (hash) => { await redis.client .pipeline() .del(`${enums_1.CACHE_KEY_PREFIX_FQC}${hash}`) .srem(key, hash) .exec(); }); } catch (error) { console.warn(error); } };