@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
65 lines (64 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Edge = exports.assertFieldEdge = exports.isFieldEdge = exports.assertAbstractEdge = exports.isAbstractEdge = exports.assertEntityEdge = exports.isEntityEdge = void 0;
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;
}
exports.isEntityEdge = isEntityEdge;
function assertEntityEdge(edge) {
if (!isEntityEdge(edge)) {
throw new Error(`Expected edge to be Edge<EntityMove>, but got ${edge}`);
}
}
exports.assertEntityEdge = assertEntityEdge;
function isAbstractEdge(edge) {
return edge.move instanceof moves_js_1.AbstractMove;
}
exports.isAbstractEdge = isAbstractEdge;
function assertAbstractEdge(edge) {
if (!isAbstractEdge(edge)) {
throw new Error(`Expected edge to be Edge<AbstractMove>, but got ${edge}`);
}
}
exports.assertAbstractEdge = assertAbstractEdge;
function isFieldEdge(edge) {
return edge.move instanceof moves_js_1.FieldMove;
}
exports.isFieldEdge = isFieldEdge;
function assertFieldEdge(edge) {
if (!isFieldEdge(edge)) {
throw new Error(`Expected edge to be Edge<FieldMove>, but got ${edge}`);
}
}
exports.assertFieldEdge = assertFieldEdge;
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 => 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;