@siren-js/client
Version:
Siren API client library
31 lines (30 loc) • 949 B
JavaScript
/**
* Composes multiple {@linkcode SirenElementVisitor}s (from left to right) into a single Visitor.
*/
export class CompositeVisitor {
visitors;
constructor(visitors) {
this.visitors = visitors;
}
async visitAction(action) {
await this.apply((visitor) => visitor.visitAction(action));
}
async visitEmbeddedEntity(entity) {
await this.apply((visitor) => visitor.visitEmbeddedEntity(entity));
}
async visitEmbeddedLink(link) {
await this.apply((visitor) => visitor.visitEmbeddedLink(link));
}
async visitEntity(entity) {
await this.apply((visitor) => visitor.visitEntity(entity));
}
async visitField(field) {
await this.apply((visitor) => visitor.visitField(field));
}
async visitLink(link) {
await this.apply((visitor) => visitor.visitLink(link));
}
async apply(fn) {
return Promise.all(this.visitors.map(fn));
}
}