@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
JavaScript
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;
}
}