@stringsync/vexml
Version:
MusicXML to Vexflow
29 lines (28 loc) • 888 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Topic = void 0;
/** Class that tracks pubsub subscribers. */
class Topic {
id = 0;
subscriptions = new Array();
hasSubscribers(name) {
return this.subscriptions.some((s) => s.name === name);
}
publish(name, payload) {
this.subscriptions.filter((s) => s.name === name).forEach((s) => s.listener(payload));
}
subscribe(name, listener) {
const id = this.id++;
this.subscriptions.push({ id, name, listener: listener });
return id;
}
unsubscribe(id) {
const subscription = this.subscriptions.find((s) => s.id === id) ?? null;
this.subscriptions = this.subscriptions.filter((s) => s.id !== id);
return subscription;
}
unsubscribeAll() {
this.subscriptions = [];
}
}
exports.Topic = Topic;