@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
67 lines (66 loc) • 2.08 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Edge = void 0;
exports.isEntityEdge = isEntityEdge;
exports.assertEntityEdge = assertEntityEdge;
exports.isAbstractEdge = isAbstractEdge;
exports.assertAbstractEdge = assertAbstractEdge;
exports.isFieldEdge = isFieldEdge;
exports.assertFieldEdge = assertFieldEdge;
const helpers_js_1 = require("./helpers.js");
const moves_js_1 = require("./moves.js");
function isEntityEdge(edge) {
return edge.move instanceof moves_js_1.EntityMove;
}
function assertEntityEdge(edge) {
if (!isEntityEdge(edge)) {
throw new Error(`Expected edge to be Edge<EntityMove>, but got ${edge}`);
}
}
function isAbstractEdge(edge) {
return edge.move instanceof moves_js_1.AbstractMove;
}
function assertAbstractEdge(edge) {
if (!isAbstractEdge(edge)) {
throw new Error(`Expected edge to be Edge<AbstractMove>, but got ${edge}`);
}
}
function isFieldEdge(edge) {
return edge.move instanceof moves_js_1.FieldMove;
}
function assertFieldEdge(edge) {
if (!isFieldEdge(edge)) {
throw new Error(`Expected edge to be Edge<FieldMove>, but got ${edge}`);
}
}
class Edge {
head;
move;
tail;
resolvable = [];
_toString = (0, helpers_js_1.lazy)(() => `${this.head} -(${this.move})-> ${this.tail}`);
constructor(head, move, tail) {
this.head = head;
this.move = move;
this.tail = tail;
}
isCrossGraphEdge() {
return this.head.graphId !== this.tail.graphId;
}
toString() {
return this._toString.get();
}
getResolvability(graphNames) {
return this.resolvable.find(([checkedGraphNames]) => {
return checkedGraphNames.every(name => {
return graphNames.includes(name);
});
})?.[1];
}
setResolvable(success, graphNames, error) {
const result = success ? { success, error: undefined } : { success, error: error };
this.resolvable.push([graphNames, result]);
return result;
}
}
exports.Edge = Edge;
;