Skip to content

Commit

Permalink
some fixes at InBrowserEventEmitter
Browse files Browse the repository at this point in the history
  • Loading branch information
Muhammad-Altabba committed Sep 4, 2023
1 parent 4fb927f commit 0e9ce5d
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions packages/web3-utils/src/event_emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,39 @@ along with web3.js. If not, see <http://www.gnu.org/licenses/>.

import { EventEmitter as NodeEventEmitter } from 'events';

// eslint-disable-next-line @typescript-eslint/no-explicit-any
type Callback = (params: any) => void | Promise<void>;

type EventTargetCallback = (params: CustomEvent) => void;

const wrapFunction =
(fn: Callback): EventTargetCallback =>
(params: CustomEvent) =>
fn(params.detail);

Check warning on line 28 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L27-L28

Added lines #L27 - L28 were not covered by tests

/**
* This class copy the behavior of Node.js EventEmitter class.
* It is used to provide the same interface for the browser environment.
*/
export class InBrowserEventEmitter extends EventTarget {
private _listeners: Record<string, Callback[]> = {};
private _listeners: Record<string, [key: Callback, value: EventTargetCallback][]> = {};
private maxListeners = Number.MAX_SAFE_INTEGER;

Check warning on line 36 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L35-L36

Added lines #L35 - L36 were not covered by tests

public on(eventName: string, fn: Callback) {
super.addEventListener(eventName, fn as EventListener);
this._addToListeners(eventName, fn);
this.addEventListener(eventName, fn);
return this;

Check warning on line 40 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L38-L40

Added lines #L38 - L40 were not covered by tests
}

public once(eventName: string, fn: Callback) {
const onceCallback = async (params: unknown) => {
const onceCallback = async (params: Callback) => {
await fn(params);
this.off(eventName, onceCallback);

Check warning on line 46 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L43-L46

Added lines #L43 - L46 were not covered by tests
};
return this.on(eventName, onceCallback);

Check warning on line 48 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L48

Added line #L48 was not covered by tests
}

public off(eventName: string, fn: Callback) {
super.removeEventListener(eventName, fn as EventListener);
this._removeFromListeners(eventName, fn);
this.removeEventListener(eventName, fn);
return this;

Check warning on line 53 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L51-L53

Added lines #L51 - L53 were not covered by tests
}

Expand All @@ -54,7 +64,7 @@ export class InBrowserEventEmitter extends EventTarget {
}

public listeners(eventName: string): Callback[] {
return this._listeners[eventName] || [];
return this._listeners[eventName].map(value => value[0]) || [];

Check warning on line 67 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L66-L67

Added lines #L66 - L67 were not covered by tests
}

public eventNames(): string[] {
Expand All @@ -75,18 +85,21 @@ export class InBrowserEventEmitter extends EventTarget {
return this.maxListeners;

Check warning on line 85 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L84-L85

Added lines #L84 - L85 were not covered by tests
}

private _addToListeners(eventName: string, fn: Callback) {
public addEventListener(eventName: string, fn: Callback) {
const wrappedFn = wrapFunction(fn);
super.addEventListener(eventName, wrappedFn as EventListener);
if (!this._listeners[eventName]) {
this._listeners[eventName] = [];

Check warning on line 92 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L88-L92

Added lines #L88 - L92 were not covered by tests
}
this._listeners[eventName].push(fn);
this._listeners[eventName].push([fn, wrappedFn]);

Check warning on line 94 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L94

Added line #L94 was not covered by tests
}

private _removeFromListeners(eventName: string, fn: Callback) {
public removeEventListener(eventName: string, fn: Callback) {
const eventListeners = this._listeners[eventName];
if (eventListeners) {
const index = eventListeners.indexOf(fn);
const index = eventListeners.findIndex(item => item[0] === fn);
if (index !== -1) {
super.removeEventListener(eventName, eventListeners[index][1] as EventListener);
eventListeners.splice(index, 1);

Check warning on line 103 in packages/web3-utils/src/event_emitter.ts

View check run for this annotation

Codecov / codecov/patch

packages/web3-utils/src/event_emitter.ts#L97-L103

Added lines #L97 - L103 were not covered by tests
}
}
Expand Down

0 comments on commit 0e9ce5d

Please sign in to comment.