UNPKG

@envelop/validation-cache

Version:

This plugins adds simple LRU caching to your `validate`, to improve performance by caching the validation result.

43 lines (42 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useValidationCache = void 0; const tslib_1 = require("tslib"); const graphql_1 = require("graphql"); const lru_cache_1 = tslib_1.__importDefault(require("lru-cache")); const DEFAULT_MAX = 1000; const DEFAULT_TTL = 3600000; const rawDocumentSymbol = Symbol('rawDocument'); const useValidationCache = (pluginOptions = {}) => { const resultCache = typeof pluginOptions.cache !== 'undefined' ? pluginOptions.cache : new lru_cache_1.default({ max: DEFAULT_MAX, maxAge: DEFAULT_TTL, }); return { onSchemaChange() { if (resultCache.reset) { resultCache.reset?.(); } else if ('clear' in resultCache) { resultCache.clear?.(); } }, onParse({ params, extendContext }) { extendContext({ [rawDocumentSymbol]: params.source.toString() }); }, onValidate({ params, context, setResult }) { const key = context[rawDocumentSymbol] ?? (0, graphql_1.print)(params.documentAST); const cachedResult = resultCache.get(key); if (cachedResult !== undefined) { setResult(cachedResult); } return ({ result }) => { // @ts-expect-error TODO: not sure how we will make it dev friendly resultCache.set(key, result); }; }, }; }; exports.useValidationCache = useValidationCache;