UNPKG

@stringsync/vexml

Version:

MusicXML to Vexflow

29 lines (28 loc) 888 B
"use strict"; 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;