UNPKG

@stringsync/vexml

Version:

MusicXML to Vexflow

25 lines (24 loc) 771 B
/** Class that tracks pubsub subscribers. */ export 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 = []; } }