UNPKG

@akala/core

Version:
154 lines 5.64 kB
import { AsyncTeardownManager } from "../teardown-manager.js"; /** * Wrapper class for EventEmitter to manage subscriptions. * @template T * @implements {Disposable} */ export class EventBusWrapper extends AsyncTeardownManager { emitter; constructor(emitter) { super(); this.emitter = emitter; emitter.once(Symbol.dispose, (() => this[Symbol.dispose]())); } subscriptions = []; /** * Checks if there are listeners for a given event. * @template TKey * @param {TKey} name - The name of the event. * @returns {boolean} - True if there are listeners, false otherwise. */ hasListener(name) { return this.emitter.hasListener(name); } /** * Gets the defined events. * @returns {string[]} - An array of defined event names. */ get definedEvents() { return this.emitter.definedEvents; } /** * Emits an event. * @template TEvent * @param {TEvent} event - The event to emit. * @param {...EventArgs<T[TEvent]>} args - The arguments to pass to the event listeners. * @returns {false | EventReturnType<T[TEvent]>} - The return value of the event listeners or false if the event does not exist. */ emit(event, ...args) { return this.emitter.emit(event, ...args); } /** * Adds a listener for an event. * @template TEvent * @param {TEvent} event - The event to listen to. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @param {EventOptions<AllEvents<T>[TEvent]>} [options] - The event options. * @returns {Subscription} - The subscription. */ on(event, handler, options) { const sub = this.emitter.on(event, handler, options); this.subscriptions.push(sub); return sub; } /** * Adds a one-time listener for an event. * @template TEvent * @param {TEvent} event - The event to listen to. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @param {Omit<EventOptions<AllEvents<T>[TEvent]>, "once">} [options] - The event options. * @returns {Subscription} - The subscription. */ once(event, handler, options) { const sub = this.emitter.once(event, handler, options); this.subscriptions.push(sub); return sub; } /** * Removes a listener for an event. * @template TEvent * @param {TEvent} event - The event to remove the listener from. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @returns {boolean} - True if the listener was removed, false otherwise. */ off(event, handler) { return this.emitter.off(event, handler); } } /** * Wrapper class to make a sync event bus async. * @template T * @implements {Disposable} */ export class EventBus2AsyncEventBus extends AsyncTeardownManager { emitter; constructor(emitter) { super(); this.emitter = emitter; emitter.once(Symbol.dispose, (() => this[Symbol.asyncDispose]())); } subscriptions = []; /** * Checks if there are listeners for a given event. * @template TKey * @param {TKey} name - The name of the event. * @returns {boolean} - True if there are listeners, false otherwise. */ hasListener(name) { return Promise.resolve(this.emitter.hasListener(name)); } /** * Gets the defined events. * @returns {string[]} - An array of defined event names. */ get definedEvents() { return Promise.resolve(this.emitter.definedEvents); } /** * Emits an event. * @template TEvent * @param {TEvent} event - The event to emit. * @param {...EventArgs<T[TEvent]>} args - The arguments to pass to the event listeners. * @returns {false | EventReturnType<T[TEvent]>} - The return value of the event listeners or false if the event does not exist. */ emit(event, ...args) { return Promise.resolve(this.emitter.emit(event, ...args)); } /** * Adds a listener for an event. * @template TEvent * @param {TEvent} event - The event to listen to. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @param {EventOptions<AllEvents<T>[TEvent]>} [options] - The event options. * @returns {Subscription} - The subscription. */ on(event, handler, options) { const sub = this.emitter.on(event, handler, options); this.subscriptions.push(sub); return Promise.resolve(() => Promise.resolve(sub())); } /** * Adds a one-time listener for an event. * @template TEvent * @param {TEvent} event - The event to listen to. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @param {Omit<EventOptions<AllEvents<T>[TEvent]>, "once">} [options] - The event options. * @returns {Subscription} - The subscription. */ once(event, handler, options) { const sub = this.emitter.once(event, handler, options); this.subscriptions.push(sub); return Promise.resolve(() => Promise.resolve(sub())); } /** * Removes a listener for an event. * @template TEvent * @param {TEvent} event - The event to remove the listener from. * @param {EventListener<AllEvents<T>[TEvent]>} handler - The event handler. * @returns {boolean} - True if the listener was removed, false otherwise. */ off(event, handler) { return Promise.resolve(this.emitter.off(event, handler)); } } //# sourceMappingURL=event-bus.js.map