UNPKG

@hyper-fetch/core

Version:

Cache, Queue and Persist your requests no matter if you are online or offline!

53 lines (41 loc) 1.62 kB
import Emitter from "events"; const getListenName = (event: string | symbol) => `listen_${String(event)}`; export class EventEmitter extends Emitter { emitCallbacks: Array<(event: string, data: any, isTriggeredExternally?: true) => void> = []; // eslint-disable-next-line @typescript-eslint/no-useless-constructor constructor(options?: ConstructorParameters<typeof Emitter>[0]) { super(options); } emit(type: string, data: any, isTriggeredExternally: boolean) { const params: [string, any, true?] = [type, data]; if (isTriggeredExternally) { params.push(isTriggeredExternally); } this.emitCallbacks?.forEach((callback) => callback(...params)); return super.emit(...params); } onEmit = (callback: (event: string, data: any, isTriggeredExternally?: true) => void) => { this.emitCallbacks?.push(callback); return () => { this.emitCallbacks = this.emitCallbacks?.filter((cb) => cb !== callback); }; }; onListener = (event: string, listener: (count: number) => void) => { super.on(getListenName(event), listener); return () => { super.off(getListenName(event), listener); }; }; on = (event: string | symbol, listener: (...args: any[]) => void) => { super.on(event, listener); super.emit(getListenName(event), super.listeners(event).length); return this; }; off = (event: string | symbol, listener: (...args: any[]) => void) => { super.off(event, listener); super.emit(getListenName(event), super.listeners(event).length); return this; }; addListener = this.on; removeListener = this.off; }