◐ Shell
clean mode source ↗

events: add hasEventListener util for validate · nodejs/node@e87db6c

@@ -287,6 +287,12 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', {

287287

},

288288

});

289289290+

function hasEventListener(self, type) {

291+

if (type === undefined)

292+

return self._events !== undefined;

293+

return self._events !== undefined && self._events[type] !== undefined;

294+

}

295+290296

ObjectDefineProperties(EventEmitter, {

291297

kMaxEventTargetListeners: {

292298

__proto__: null,

@@ -680,13 +686,11 @@ EventEmitter.prototype.removeListener =

680686

function removeListener(type, listener) {

681687

checkListener(listener);

682688683-

const events = this._events;

684-

if (events === undefined)

689+

if (!hasEventListener(this, type))

685690

return this;

686691692+

const events = this._events;

687693

const list = events[type];

688-

if (list === undefined)

689-

return this;

690694691695

if (list === listener || list.listener === listener) {

692696

this._eventsCount -= 1;

@@ -742,9 +746,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;

742746

*/

743747

EventEmitter.prototype.removeAllListeners =

744748

function removeAllListeners(type) {

745-

const events = this._events;

746-

if (events === undefined)

749+

if (!hasEventListener(this))

747750

return this;

751+

const events = this._events;

748752749753

// Not listening for removeListener, no need to emit

750754

if (events.removeListener === undefined) {

@@ -789,14 +793,10 @@ EventEmitter.prototype.removeAllListeners =

789793

};

790794791795

function _listeners(target, type, unwrap) {

792-

const events = target._events;

793-794-

if (events === undefined)

796+

if (!hasEventListener(target, type))

795797

return [];

796798797-

const evlistener = events[type];

798-

if (evlistener === undefined)

799-

return [];

799+

const evlistener = target._events[type];

800800801801

if (typeof evlistener === 'function')

802802

return unwrap ? [evlistener.listener || evlistener] : [evlistener];