◐ Shell
clean mode source ↗

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

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

276276

},

277277

});

278278279+

function hasEventListener(self, type) {

280+

if (type === undefined)

281+

return self._events !== undefined;

282+

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

283+

};

284+279285

ObjectDefineProperties(EventEmitter, {

280286

kMaxEventTargetListeners: {

281287

__proto__: null,

@@ -669,13 +675,11 @@ EventEmitter.prototype.removeListener =

669675

function removeListener(type, listener) {

670676

checkListener(listener);

671677672-

const events = this._events;

673-

if (events === undefined)

678+

if (!hasEventListener(this, type))

674679

return this;

675680681+

const events = this._events;

676682

const list = events[type];

677-

if (list === undefined)

678-

return this;

679683680684

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

681685

this._eventsCount -= 1;

@@ -729,9 +733,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;

729733

*/

730734

EventEmitter.prototype.removeAllListeners =

731735

function removeAllListeners(type) {

732-

const events = this._events;

733-

if (events === undefined)

736+

if (!hasEventListener(this))

734737

return this;

738+

const events = this._events;

735739736740

// Not listening for removeListener, no need to emit

737741

if (events.removeListener === undefined) {

@@ -776,14 +780,10 @@ EventEmitter.prototype.removeAllListeners =

776780

};

777781778782

function _listeners(target, type, unwrap) {

779-

const events = target._events;

780-781-

if (events === undefined)

783+

if (!hasEventListener(target, type))

782784

return [];

783785784-

const evlistener = events[type];

785-

if (evlistener === undefined)

786-

return [];

786+

const evlistener = target._events[type];

787787788788

if (typeof evlistener === 'function')

789789

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