mirror of
https://github.com/Nystik-gh/ignis.git
synced 2026-06-17 04:35:53 +00:00
107 lines
1.7 KiB
JavaScript
107 lines
1.7 KiB
JavaScript
export class EventEmitter {
|
|
constructor() {
|
|
this._events = {};
|
|
}
|
|
|
|
on(event, listener) {
|
|
if (!this._events[event]) {
|
|
this._events[event] = [];
|
|
}
|
|
|
|
this._events[event].push(listener);
|
|
|
|
return this;
|
|
}
|
|
|
|
once(event, listener) {
|
|
const wrapped = (...args) => {
|
|
this.removeListener(event, wrapped);
|
|
listener.apply(this, args);
|
|
};
|
|
|
|
wrapped._original = listener;
|
|
return this.on(event, wrapped);
|
|
}
|
|
|
|
emit(event, ...args) {
|
|
const listeners = this._events[event];
|
|
|
|
if (!listeners || listeners.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
for (const fn of [...listeners]) {
|
|
fn.apply(this, args);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
removeListener(event, listener) {
|
|
const arr = this._events[event];
|
|
if (!arr) {
|
|
return this;
|
|
}
|
|
|
|
const idx = arr.findIndex(
|
|
(fn) => fn === listener || fn._original === listener,
|
|
);
|
|
|
|
if (idx >= 0) {
|
|
arr.splice(idx, 1);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
off(event, listener) {
|
|
return this.removeListener(event, listener);
|
|
}
|
|
|
|
removeAllListeners(event) {
|
|
if (event) {
|
|
delete this._events[event];
|
|
} else {
|
|
this._events = {};
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
listeners(event) {
|
|
return (this._events[event] || []).slice();
|
|
}
|
|
|
|
listenerCount(event) {
|
|
return (this._events[event] || []).length;
|
|
}
|
|
|
|
addListener(event, listener) {
|
|
return this.on(event, listener);
|
|
}
|
|
|
|
prependListener(event, listener) {
|
|
if (!this._events[event]) {
|
|
this._events[event] = [];
|
|
}
|
|
|
|
this._events[event].unshift(listener);
|
|
|
|
return this;
|
|
}
|
|
|
|
eventNames() {
|
|
return Object.keys(this._events);
|
|
}
|
|
|
|
setMaxListeners() {
|
|
return this;
|
|
}
|
|
|
|
getMaxListeners() {
|
|
return 10;
|
|
}
|
|
}
|
|
|
|
export default EventEmitter;
|