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