api-core
Version:
Model-based dynamic multi-level APIs for any provider, plus multiple consumption channels
58 lines (49 loc) • 1.98 kB
text/typescript
import {LazyApiEdge} from "./LazyApiEdge";
import {Api} from "../Api";
import {ApiResolver} from "./ApiResolver";
export class LocalApiResolver implements ApiResolver {
private readonly api: Api;
constructor(api: Api) {
this.api = api
}
resolveEdgeLazy(name: string, plural: boolean) {
return this.api.edges.find(plural
? edge => edge.pluralName == name
: edge => edge.name == name
) || new LazyApiEdge(this.api, name, plural, () => this.resolveEdge(name, plural))
}
async resolveEdge(name: string, plural: boolean) {
const edge = this.api.edges.find(plural
? edge => edge.pluralName == name
: edge => edge.name == name
);
if(edge && !(await edge.resolve())) return undefined;
return edge
}
async resolveRelation(name: string) {
const relation = this.api.relations.find(relation => relation.name === name);
if(relation && !(await relation.resolve())) return undefined;
return relation
}
async resolveRelationOfEdge(edge: string, name: string) {
const relation = this.api.relations.find(relation =>
relation.name === name && (relation.from.name === edge || relation.to.name === edge)
);
if(relation && !(await relation.resolve())) return undefined;
return relation
}
async resolveRelationFrom(edge: string, name: string) {
const relation = this.api.relations.find(relation =>
relation.name === name && relation.from.name === edge
);
if(relation && !(await relation.resolve())) return undefined;
return relation
}
async resolveRelationTo(edge: string, name: string) {
const relation = this.api.relations.find(relation =>
relation.name === name && relation.to.name === edge
);
if(relation && !(await relation.resolve())) return undefined;
return relation
}
}