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+279285ObjectDefineProperties(EventEmitter, {
280286kMaxEventTargetListeners: {
281287__proto__: null,
@@ -669,13 +675,11 @@ EventEmitter.prototype.removeListener =
669675function removeListener(type, listener) {
670676checkListener(listener);
671677672-const events = this._events;
673-if (events === undefined)
678+if (!hasEventListener(this, type))
674679return this;
675680681+const events = this._events;
676682const list = events[type];
677-if (list === undefined)
678-return this;
679683680684if (list === listener || list.listener === listener) {
681685this._eventsCount -= 1;
@@ -729,9 +733,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
729733 */
730734EventEmitter.prototype.removeAllListeners =
731735function removeAllListeners(type) {
732-const events = this._events;
733-if (events === undefined)
736+if (!hasEventListener(this))
734737return this;
738+const events = this._events;
735739736740// Not listening for removeListener, no need to emit
737741if (events.removeListener === undefined) {
@@ -776,14 +780,10 @@ EventEmitter.prototype.removeAllListeners =
776780};
777781778782function _listeners(target, type, unwrap) {
779-const events = target._events;
780-781-if (events === undefined)
783+if (!hasEventListener(target, type))
782784return [];
783785784-const evlistener = events[type];
785-if (evlistener === undefined)
786-return [];
786+const evlistener = target._events[type];
787787788788if (typeof evlistener === 'function')
789789return unwrap ? [evlistener.listener || evlistener] : [evlistener];