From 780f06338510329baea026b7f6ac30723a1d184a Mon Sep 17 00:00:00 2001 From: "George T. Gougoudis" Date: Mon, 25 Jun 2018 18:21:38 +0300 Subject: [PATCH 1/2] Enforce event names and cache EventEmitter instaces --- src/index.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index daefb5c..2efc58e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,13 +18,20 @@ export interface IEvent { subscribe(callback: EventCallback): IDisposable } +const eventsCache: { [k:string]: EventEmitter} = {}; + export class Event implements IEvent { private _name: string - private _eventObject: EventEmitter = new EventEmitter() + private _eventObject: EventEmitter - constructor(name?: string) { - this._name = name || "default_event" + constructor(name: string) { + if (!(name in eventsCache)) { + eventsCache[name] = new EventEmitter(); + eventsCache[name].setMaxListeners(100); + } + this._eventObject = eventsCache[name]; + this._name = name; } public subscribe(callback: EventCallback): IDisposable { From 6da49e4d259fe6da23eaa3952561efc860b510ae Mon Sep 17 00:00:00 2001 From: "George T. Gougoudis" Date: Mon, 25 Jun 2018 21:25:25 +0300 Subject: [PATCH 2/2] Change to map and follow original code style --- src/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index 2efc58e..791b568 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,7 +18,7 @@ export interface IEvent { subscribe(callback: EventCallback): IDisposable } -const eventsCache: { [k:string]: EventEmitter} = {}; +const eventsCache = new Map() export class Event implements IEvent { @@ -26,17 +26,18 @@ export class Event implements IEvent { private _eventObject: EventEmitter constructor(name: string) { - if (!(name in eventsCache)) { - eventsCache[name] = new EventEmitter(); - eventsCache[name].setMaxListeners(100); + this._name = name + if (!eventsCache.has(name)) { + let emitter = new EventEmitter() + emitter.setMaxListeners(100) + eventsCache.set(name, emitter) } - this._eventObject = eventsCache[name]; - this._name = name; + this._eventObject = eventsCache.get(name)! } public subscribe(callback: EventCallback): IDisposable { this._eventObject.addListener(this._name, callback) - + const dispose = () => { this._eventObject.removeListener(this._name, callback) }