UNPKG

@apollo/query-graphs

Version:

Apollo Federation library to work with 'query graphs'

29 lines 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cachingConditionResolver = void 0; const federation_internals_1 = require("@apollo/federation-internals"); const graphPath_1 = require("./graphPath"); const querygraph_1 = require("./querygraph"); function cachingConditionResolver(resolver) { const cache = new querygraph_1.QueryGraphState(); return (edge, context, excludedDestinations, excludedConditions, extraConditions) => { (0, federation_internals_1.assert)(edge.conditions || extraConditions, 'Should not have been called for edge without conditions'); if (!context.isEmpty() || excludedConditions.length > 0 || extraConditions) { return resolver(edge, context, excludedDestinations, excludedConditions, extraConditions); } const cachedResolutionAndExcludedEdges = cache.getEdgeState(edge); if (cachedResolutionAndExcludedEdges) { const [cachedResolution, forExcludedEdges] = cachedResolutionAndExcludedEdges; return (0, graphPath_1.sameExcludedDestinations)(forExcludedEdges, excludedDestinations) ? cachedResolution : resolver(edge, context, excludedDestinations, excludedConditions, extraConditions); } else { const resolution = resolver(edge, context, excludedDestinations, excludedConditions, extraConditions); cache.setEdgeState(edge, [resolution, excludedDestinations]); return resolution; } }; } exports.cachingConditionResolver = cachingConditionResolver; //# sourceMappingURL=conditionsCaching.js.map