UNPKG

@cch137/emitter

Version:

`@cch137/emitter` is a versatile event emitter package designed to work seamlessly in both browser and Node.js environments. It provides a simple yet powerful interface for managing event-driven architecture in your applications.

32 lines (31 loc) 957 B
import { Collection, WeakCollection } from "./group.js"; export default class Emitter { listeners = new Collection(); onces = new WeakCollection(); on(eventName, listener) { this.listeners.group(eventName).push(listener); return this; } once(eventName, listener) { const l = this.listeners.group(eventName); this.onces.group((l.push(listener), l)).push(listener); return this; } off(eventName, listener) { this.listeners.get(eventName)?.deleteOne(listener); this.listeners.trim(); return this; } emit(eventName, ...args) { const l = this.listeners.get(eventName); l?.forEach(async (i) => i(...args)); if (l) this.onces.once(l)?.forEach((i) => l.deleteOne(i)); this.listeners.trim(); return true; } clear(eventName, ...args) { this.listeners.delete(eventName); return this; } }