@apollo/query-graphs
Version:
Apollo Federation library to work with 'query graphs'
29 lines • 1.63 kB
JavaScript
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
;