From 12a412a3cee8ad4205705894d5d5c54bb39a5856 Mon Sep 17 00:00:00 2001 From: Marin Petrunic Date: Mon, 30 Jan 2023 18:13:36 +0100 Subject: [PATCH] feat: remove async library --- package-lock.json | 2 - packages/util/package.json | 1 - packages/util/src/asyncEventEmitter.ts | 55 +++++++++++++++----------- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55f680ca5d..fa3be89ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18275,7 +18275,6 @@ "dependencies": { "@chainsafe/ssz": "^0.10.0", "@ethereumjs/rlp": "^4.0.0", - "async": "^3.2.4", "ethereum-cryptography": "^1.1.2" }, "devDependencies": { @@ -19880,7 +19879,6 @@ "@ethereumjs/rlp": "^4.0.0", "@types/bn.js": "^5.1.0", "@types/secp256k1": "^4.0.1", - "async": "^3.2.4", "ethereum-cryptography": "^1.1.2" } }, diff --git a/packages/util/package.json b/packages/util/package.json index 8bae0f9b18..83404eca89 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -85,7 +85,6 @@ "dependencies": { "@chainsafe/ssz": "^0.10.0", "@ethereumjs/rlp": "^4.0.0", - "async": "^3.2.4", "ethereum-cryptography": "^1.1.2" }, "devDependencies": { diff --git a/packages/util/src/asyncEventEmitter.ts b/packages/util/src/asyncEventEmitter.ts index 71db01b1f0..7085b0a672 100644 --- a/packages/util/src/asyncEventEmitter.ts +++ b/packages/util/src/asyncEventEmitter.ts @@ -7,7 +7,6 @@ * https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/async-eventemitter */ -import { eachSeries } from 'async' import { EventEmitter } from 'events' type AsyncListener = | ((data: T, callback?: (result?: R) => void) => Promise) @@ -16,6 +15,37 @@ export interface EventMap { [event: string]: AsyncListener } +async function runInSeries( + context: any, + tasks: Array<(data: unknown, callback?: (error?: Error) => void) => void>, + data: unknown +): Promise { + let error: Error | undefined + for await (const task of tasks) { + try { + if (task.length < 2) { + //sync + task.call(context, data) + } else { + await new Promise((resolve, reject) => { + task.call(context, data, (error) => { + if (error) { + reject(error) + } else { + resolve() + } + }) + }) + } + } catch (e: unknown) { + error = e as Error + } + } + if (error) { + throw error + } +} + export class AsyncEventEmitter extends EventEmitter { emit(event: E & string, ...args: Parameters) { let [data, callback] = args @@ -41,28 +71,7 @@ export class AsyncEventEmitter extends EventEmitter { // A single listener is just a function not an array... listeners = Array.isArray(listeners) ? listeners : [listeners] - - eachSeries( - listeners.slice(), - function (fn: any, next) { - let err - - // Support synchronous functions - if (fn.length < 2) { - try { - fn.call(self, data) - } catch (e: any) { - err = e - } - - return next(err) - } - - // Async - fn.call(self, data, next) - }, - callback - ) + runInSeries(self, listeners.slice(), data).then(callback).catch(callback) return self.listenerCount(event) > 0 }