From 04841153f8d9d682f6714d4ba8ef077ea73d91a1 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 07:19:17 +0200 Subject: [PATCH 1/6] =?UTF-8?q?fix(core-event-emitter):=20ensure=20the=20e?= =?UTF-8?q?vent=20listener=20won=E2=80=99t=20exceed=20the=20max=20listener?= =?UTF-8?q?=20count?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unit/core-event-emitter/emitter.test.ts | 2 +- packages/core-event-emitter/package.json | 3 -- packages/core-event-emitter/src/emitter.ts | 30 +++++++++++++++++++ packages/core-event-emitter/src/index.ts | 2 +- packages/core-interfaces/package.json | 3 +- .../src/core-event-emitter/index.ts | 3 +- yarn.lock | 5 ---- 7 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 packages/core-event-emitter/src/emitter.ts diff --git a/__tests__/unit/core-event-emitter/emitter.test.ts b/__tests__/unit/core-event-emitter/emitter.test.ts index d92aa0dc90..09dee81ece 100755 --- a/__tests__/unit/core-event-emitter/emitter.test.ts +++ b/__tests__/unit/core-event-emitter/emitter.test.ts @@ -1,4 +1,4 @@ -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "events"; import { plugin } from "../../../packages/core-event-emitter/src"; const emitter = plugin.register(); diff --git a/packages/core-event-emitter/package.json b/packages/core-event-emitter/package.json index 26d835ac40..9587bba891 100644 --- a/packages/core-event-emitter/package.json +++ b/packages/core-event-emitter/package.json @@ -17,9 +17,6 @@ "build:watch": "yarn clean && yarn compile -w", "clean": "del dist" }, - "dependencies": { - "eventemitter3": "^3.1.0" - }, "publishConfig": { "access": "public" }, diff --git a/packages/core-event-emitter/src/emitter.ts b/packages/core-event-emitter/src/emitter.ts new file mode 100644 index 0000000000..6592b94b98 --- /dev/null +++ b/packages/core-event-emitter/src/emitter.ts @@ -0,0 +1,30 @@ +import { EventEmitter as NativeEmitter } from "events"; + +export class EventEmitter { + private readonly emitter: NativeEmitter = new NativeEmitter(); + + public emit(event: string | symbol, ...args: any[]): void { + this.emitter.emit(event, args); + } + + public on(event: string | symbol, listener: (...args: any[]) => void): void { + this.ensureMaxListenerCount(event); + + this.emitter.on(event, listener); + } + + public once(event: string | symbol, listener: (...args: any[]) => void): void { + this.ensureMaxListenerCount(event); + + this.emitter.once(event, listener); + } + + private ensureMaxListenerCount(event): void { + const maxListeners = this.emitter.getMaxListeners(); + const listenerCount = this.emitter.listenerCount(event); + + if (listenerCount >= maxListeners) { + this.emitter.setMaxListeners(maxListeners + 1); + } + } +} diff --git a/packages/core-event-emitter/src/index.ts b/packages/core-event-emitter/src/index.ts index ec20d8dd61..e42d7f1268 100644 --- a/packages/core-event-emitter/src/index.ts +++ b/packages/core-event-emitter/src/index.ts @@ -1,4 +1,4 @@ -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "./emitter"; export const plugin = { pkg: require("../package.json"), diff --git a/packages/core-interfaces/package.json b/packages/core-interfaces/package.json index cac8fb95bb..8d50cf58d8 100644 --- a/packages/core-interfaces/package.json +++ b/packages/core-interfaces/package.json @@ -24,8 +24,7 @@ }, "dependencies": { "@arkecosystem/crypto": "^2.3.0-next.2", - "awilix": "^4.2.1", - "eventemitter3": "^3.1.0" + "awilix": "^4.2.1" }, "publishConfig": { "access": "public" diff --git a/packages/core-interfaces/src/core-event-emitter/index.ts b/packages/core-interfaces/src/core-event-emitter/index.ts index 478f9bc498..764fc472d1 100644 --- a/packages/core-interfaces/src/core-event-emitter/index.ts +++ b/packages/core-interfaces/src/core-event-emitter/index.ts @@ -1,2 +1,3 @@ -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "events"; + export { EventEmitter }; diff --git a/yarn.lock b/yarn.lock index 4ed28c9ce1..16ddec0a47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5577,11 +5577,6 @@ event-lite@^0.1.1: resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.2.tgz#838a3e0fdddef8cc90f128006c8e55a4e4e4c11b" integrity sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g== -eventemitter3@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== - events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" From 94050dcff065eb27a1c20bc6ad64743c2b416e42 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 07:29:45 +0200 Subject: [PATCH 2/6] test(core-event-emitter): expect EventEmitter instance --- __tests__/unit/core-event-emitter/emitter.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/unit/core-event-emitter/emitter.test.ts b/__tests__/unit/core-event-emitter/emitter.test.ts index 09dee81ece..8c06e6bb4e 100755 --- a/__tests__/unit/core-event-emitter/emitter.test.ts +++ b/__tests__/unit/core-event-emitter/emitter.test.ts @@ -1,5 +1,5 @@ -import { EventEmitter } from "events"; import { plugin } from "../../../packages/core-event-emitter/src"; +import { EventEmitter } from "../../../packages/core-event-emitter/src/emitter"; const emitter = plugin.register(); From 7ee7f3f652e1f4d7fcff6b4789b2b95588109434 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 07:55:37 +0200 Subject: [PATCH 3/6] fix(core-event-emitter): don't spread args before passing them to the listener --- packages/core-event-emitter/src/emitter.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core-event-emitter/src/emitter.ts b/packages/core-event-emitter/src/emitter.ts index 6592b94b98..4641c10e22 100644 --- a/packages/core-event-emitter/src/emitter.ts +++ b/packages/core-event-emitter/src/emitter.ts @@ -3,17 +3,17 @@ import { EventEmitter as NativeEmitter } from "events"; export class EventEmitter { private readonly emitter: NativeEmitter = new NativeEmitter(); - public emit(event: string | symbol, ...args: any[]): void { + public emit(event: string | symbol, args: any[]): void { this.emitter.emit(event, args); } - public on(event: string | symbol, listener: (...args: any[]) => void): void { + public on(event: string | symbol, listener: (args: any[]) => void): void { this.ensureMaxListenerCount(event); this.emitter.on(event, listener); } - public once(event: string | symbol, listener: (...args: any[]) => void): void { + public once(event: string | symbol, listener: (args: any[]) => void): void { this.ensureMaxListenerCount(event); this.emitter.once(event, listener); From ce42b3e077d0243e4b354d39d0535024898530c4 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 07:59:04 +0200 Subject: [PATCH 4/6] fix(core-event-emitter): return emit result Signed-off-by: Brian Faust --- packages/core-event-emitter/src/emitter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-event-emitter/src/emitter.ts b/packages/core-event-emitter/src/emitter.ts index 4641c10e22..b67043bb8c 100644 --- a/packages/core-event-emitter/src/emitter.ts +++ b/packages/core-event-emitter/src/emitter.ts @@ -3,8 +3,8 @@ import { EventEmitter as NativeEmitter } from "events"; export class EventEmitter { private readonly emitter: NativeEmitter = new NativeEmitter(); - public emit(event: string | symbol, args: any[]): void { - this.emitter.emit(event, args); + public emit(event: string | symbol, args: any[]): boolean { + return this.emitter.emit(event, args); } public on(event: string | symbol, listener: (args: any[]) => void): void { From d17e66a6b963886468a7869b470df4ccd441b11d Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 08:04:10 +0200 Subject: [PATCH 5/6] fix(core-event-emitter): allow any args for emitter and listener Signed-off-by: Brian Faust --- packages/core-event-emitter/src/emitter.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core-event-emitter/src/emitter.ts b/packages/core-event-emitter/src/emitter.ts index b67043bb8c..88ee94f4fb 100644 --- a/packages/core-event-emitter/src/emitter.ts +++ b/packages/core-event-emitter/src/emitter.ts @@ -3,17 +3,17 @@ import { EventEmitter as NativeEmitter } from "events"; export class EventEmitter { private readonly emitter: NativeEmitter = new NativeEmitter(); - public emit(event: string | symbol, args: any[]): boolean { + public emit(event: string | symbol, args: any): boolean { return this.emitter.emit(event, args); } - public on(event: string | symbol, listener: (args: any[]) => void): void { + public on(event: string | symbol, listener: (args: any) => void): void { this.ensureMaxListenerCount(event); this.emitter.on(event, listener); } - public once(event: string | symbol, listener: (args: any[]) => void): void { + public once(event: string | symbol, listener: (args: any) => void): void { this.ensureMaxListenerCount(event); this.emitter.once(event, listener); From c171fe7b0213f1a682807af07d5712c0b0e63487 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 28 Mar 2019 08:12:55 +0200 Subject: [PATCH 6/6] fix(core-event-emitter): spread listener args Signed-off-by: Brian Faust --- packages/core-event-emitter/src/emitter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-event-emitter/src/emitter.ts b/packages/core-event-emitter/src/emitter.ts index 88ee94f4fb..c87aea0906 100644 --- a/packages/core-event-emitter/src/emitter.ts +++ b/packages/core-event-emitter/src/emitter.ts @@ -7,13 +7,13 @@ export class EventEmitter { return this.emitter.emit(event, args); } - public on(event: string | symbol, listener: (args: any) => void): void { + public on(event: string | symbol, listener: (...args: any) => void): void { this.ensureMaxListenerCount(event); this.emitter.on(event, listener); } - public once(event: string | symbol, listener: (args: any) => void): void { + public once(event: string | symbol, listener: (...args: any) => void): void { this.ensureMaxListenerCount(event); this.emitter.once(event, listener);