From 6b95286704433adc616b760ba983161b4ab85c99 Mon Sep 17 00:00:00 2001 From: Alex Luu Date: Tue, 20 Feb 2024 15:23:01 -0500 Subject: [PATCH] update utils --- packages/web3-utils/package.json | 1 + packages/web3-utils/src/event_emitter.ts | 94 +----------------------- 2 files changed, 4 insertions(+), 91 deletions(-) diff --git a/packages/web3-utils/package.json b/packages/web3-utils/package.json index 8d5a9296086..299fb8333c7 100644 --- a/packages/web3-utils/package.json +++ b/packages/web3-utils/package.json @@ -64,6 +64,7 @@ }, "dependencies": { "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", "web3-errors": "^1.1.4", "web3-types": "^1.4.0", "web3-validator": "^2.0.4" diff --git a/packages/web3-utils/src/event_emitter.ts b/packages/web3-utils/src/event_emitter.ts index 7d9c3ccdb2e..e5994f7187c 100644 --- a/packages/web3-utils/src/event_emitter.ts +++ b/packages/web3-utils/src/event_emitter.ts @@ -16,75 +16,16 @@ along with web3.js. If not, see . */ /* eslint-disable max-classes-per-file */ -import { EventEmitter as EventEmitterAtNode } from 'events'; +import EventEmitter3 from 'eventemitter3'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type Callback = (params: any) => void | Promise; - -type EventTargetCallback = (params: CustomEvent) => void; - -const wrapFunction = - (fn: Callback): EventTargetCallback => - (params: CustomEvent) => - fn(params.detail); /** * This class copy the behavior of Node.js EventEmitter class. * It is used to provide the same interface for the browser environment. */ -class EventEmitterAtBrowser extends EventTarget { - private _listeners: Record = {}; +export class EventEmitter extends EventEmitter3 { private maxListeners = Number.MAX_SAFE_INTEGER; - public on(eventName: string, fn: Callback) { - this.addEventListener(eventName, fn); - return this; - } - - public once(eventName: string, fn: Callback) { - const onceCallback = async (params: Callback) => { - this.off(eventName, onceCallback); - await fn(params); - }; - return this.on(eventName, onceCallback); - } - - public off(eventName: string, fn: Callback) { - this.removeEventListener(eventName, fn); - return this; - } - - public emit(eventName: string, params: unknown) { - const event = new CustomEvent(eventName, { detail: params }); - return super.dispatchEvent(event); - } - - public listenerCount(eventName: string): number { - const eventListeners = this._listeners[eventName]; - return eventListeners ? eventListeners.length : 0; - } - - public listeners(eventName: string): Callback[] { - return this._listeners[eventName].map(value => value[0]) || []; - } - - public eventNames(): string[] { - return Object.keys(this._listeners); - } - - public removeAllListeners() { - Object.keys(this._listeners).forEach(event => { - this._listeners[event].forEach( - (listener: [key: Callback, value: EventTargetCallback]) => { - super.removeEventListener(event, listener[1] as EventListener); - }, - ); - }); - - this._listeners = {}; - return this; - } - public setMaxListeners(maxListeners: number) { this.maxListeners = maxListeners; return this; @@ -94,35 +35,6 @@ class EventEmitterAtBrowser extends EventTarget { return this.maxListeners; } - public addEventListener(eventName: string, fn: Callback) { - const wrappedFn = wrapFunction(fn); - super.addEventListener(eventName, wrappedFn as EventListener); - if (!this._listeners[eventName]) { - this._listeners[eventName] = []; - } - this._listeners[eventName].push([fn, wrappedFn]); - } - - public removeEventListener(eventName: string, fn: Callback) { - const eventListeners = this._listeners[eventName]; - if (eventListeners) { - const index = eventListeners.findIndex(item => item[0] === fn); - if (index !== -1) { - super.removeEventListener(eventName, eventListeners[index][1] as EventListener); - eventListeners.splice(index, 1); - } - } - } } - // eslint-disable-next-line import/no-mutable-exports -let EventEmitterType: typeof EventEmitterAtNode; -// Check if the code is running in a Node.js environment -if (typeof window === 'undefined') { - EventEmitterType = EventEmitterAtNode; -} else { - // Fallback for the browser environment - EventEmitterType = EventEmitterAtBrowser as unknown as typeof EventEmitterAtNode; -} - -export class EventEmitter extends EventEmitterType {} \ No newline at end of file +// let EventEmitterType: typeof EventEmitter3; \ No newline at end of file