UNPKG

@busy-hour/blaze

Version:

<h1 align='center'>🔥 Blaze</h1> <div align='center'> An event driven framework for 🔥 Hono.js </div>

83 lines (82 loc) • 2.18 kB
// src/internal/event-emitter/index.ts import { BlazeMap } from "../map/index.js"; var BlazeEventEmitter = class { $maxListeners; $emitter; constructor(options = {}) { this.$maxListeners = options?.maxListener ?? 100; this.$emitter = options.useMap ? /* @__PURE__ */ new Map() : new BlazeMap(); } listenerCount(eventName) { return this.$emitter.get(eventName)?.size ?? 0; } get maxListeners() { return this.$maxListeners; } set maxListeners(value) { this.$maxListeners = value; } emit(eventName, ...values) { if (!this.$emitter.has(eventName)) { return false; } this.$emitter.get(eventName)?.forEach?.((listener) => { listener(...values); }); return true; } // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-shadow async emitAsync(eventName, ...values) { if (!this.$emitter.has(eventName)) { return []; } return await Promise.all( [...this.$emitter.get(eventName) ?? []].map( (listener) => listener(...values) ) ); } on(eventName, listener) { const listenerCount = this.listenerCount(eventName); if (!this.$emitter.has(eventName)) { this.$emitter.set(eventName, /* @__PURE__ */ new Set()); } if (listenerCount >= this.$maxListeners) return; this.$emitter.get(eventName)?.add(listener); } off(eventName, listener) { if (!this.$emitter.has(eventName)) return; this.$emitter.get(eventName)?.delete(listener); } offAll(eventName) { if (eventName) { this.$emitter.delete(eventName); return; } this.$emitter.clear(); } eventNames() { return [...this.$emitter.keys()]; } listeners(eventName) { return [...this.$emitter.get(eventName) ?? []]; } rawListeners(eventName) { const listenerSet = /* @__PURE__ */ new Set(); if (this.$emitter.has(eventName)) { this.$emitter.get(eventName)?.forEach((listener) => { listenerSet.add(listener); }); } return listenerSet; } // Aliases addListener = this.on; removeListener = this.off; removeAllListeners = this.offAll; }; export { BlazeEventEmitter };