UNPKG

graphql-yoga

Version:

<div align="center"><img src="./website/public/cover.png" width="720" /></div>

60 lines (59 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useParserAndValidationCache = void 0; const create_lru_cache_js_1 = require("../utils/create-lru-cache.js"); function useParserAndValidationCache({ documentCache = (0, create_lru_cache_js_1.createLRUCache)(), errorCache = (0, create_lru_cache_js_1.createLRUCache)(), validationCache = true, }) { const validationCacheByRules = (0, create_lru_cache_js_1.createLRUCache)(); return { onParse({ params, setParsedDocument }) { const strDocument = params.source.toString(); const document = documentCache.get(strDocument); if (document) { setParsedDocument(document); return; } const parserError = errorCache.get(strDocument); if (parserError) { throw parserError; } return ({ result }) => { if (result != null) { if (result instanceof Error) { errorCache.set(strDocument, result); } else { documentCache.set(strDocument, result); } } }; }, onValidate({ params: { schema, documentAST, rules }, setResult, // eslint-disable-next-line @typescript-eslint/ban-types }) { if (validationCache !== false) { const rulesKey = rules?.map((rule) => rule.name).join(',') || ''; let validationCacheBySchema = validationCacheByRules.get(rulesKey); if (!validationCacheBySchema) { validationCacheBySchema = new WeakMap(); validationCacheByRules.set(rulesKey, validationCacheBySchema); } let validationCacheByDocument = validationCacheBySchema.get(schema); if (!validationCacheByDocument) { validationCacheByDocument = new WeakMap(); validationCacheBySchema.set(schema, validationCacheByDocument); } const cachedResult = validationCacheByDocument.get(documentAST); if (cachedResult) { setResult(cachedResult); return; } return ({ result }) => { if (result != null) { validationCacheByDocument?.set(documentAST, result); } }; } }, }; } exports.useParserAndValidationCache = useParserAndValidationCache;