@apollo/query-graphs
Version:
Apollo Federation library to work with 'query graphs'
54 lines • 2.66 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.simpleValidationConditionResolver = void 0;
const graphPath_1 = require("./graphPath");
const conditionsCaching_1 = require("./conditionsCaching");
class ConditionValidationState {
constructor(selection, subgraphOptions) {
this.selection = selection;
this.subgraphOptions = subgraphOptions;
}
advance(supergraph) {
const newOptions = [];
for (const paths of this.subgraphOptions) {
const pathsOptions = (0, graphPath_1.advanceSimultaneousPathsWithOperation)(supergraph, paths, this.selection.element, new Map());
if (!pathsOptions) {
continue;
}
newOptions.push(...pathsOptions);
}
if (newOptions.length === 0) {
return null;
}
return this.selection.selectionSet ? this.selection.selectionSet.selections().map(s => new ConditionValidationState(s, newOptions)) : [];
}
toString() {
return `${this.selection} <=> ${(0, graphPath_1.advanceOptionsToString)(this.subgraphOptions)}`;
}
}
function simpleValidationConditionResolver({ supergraph, queryGraph, withCaching, }) {
const resolver = (edge, context, excludedDestinations, excludedConditions, extraConditions) => {
const conditions = (extraConditions !== null && extraConditions !== void 0 ? extraConditions : edge.conditions);
excludedConditions = (0, graphPath_1.addConditionExclusion)(excludedConditions, conditions);
const initialPath = graphPath_1.GraphPath.create(queryGraph, edge.head);
const initialOptions = [
new graphPath_1.SimultaneousPathsWithLazyIndirectPaths([initialPath], context, simpleValidationConditionResolver({ supergraph, queryGraph, withCaching }), excludedDestinations, excludedConditions, new Map())
];
const stack = [];
for (const selection of conditions.selections()) {
stack.push(new ConditionValidationState(selection, initialOptions));
}
while (stack.length > 0) {
const state = stack.pop();
const newStates = state.advance(supergraph);
if (newStates === null) {
return graphPath_1.unsatisfiedConditionsResolution;
}
newStates.forEach(s => stack.push(s));
}
return { satisfied: true, cost: 1 };
};
return withCaching ? (0, conditionsCaching_1.cachingConditionResolver)(resolver) : resolver;
}
exports.simpleValidationConditionResolver = simpleValidationConditionResolver;
//# sourceMappingURL=conditionsValidation.js.map
;