Skip to content

Commit

Permalink
events: add hasEventListener util for validate
Browse files Browse the repository at this point in the history
There was some repetitive logics that validated the existence of
eventlisteners. We now replace this with a single line of,
`hasEventListener(self, type)`.
`self` is the object(e.g. EventEmitter) to be checked whether
eventlisteners exists or not.
`type` is the type of eventlisteners, which can be `undefined`

PR-URL: #55230
Reviewed-By: Jason Zhang <xzha4350@gmail.com>
  • Loading branch information
sungpaks authored and aduh95 committed Nov 16, 2024
1 parent 787e51e commit bdb6d12
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions lib/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,12 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', {
},
});

function hasEventListener(self, type) {
if (type === undefined)
return self._events !== undefined;
return self._events !== undefined && self._events[type] !== undefined;
};

ObjectDefineProperties(EventEmitter, {
kMaxEventTargetListeners: {
__proto__: null,
Expand Down Expand Up @@ -669,13 +675,11 @@ EventEmitter.prototype.removeListener =
function removeListener(type, listener) {
checkListener(listener);

const events = this._events;
if (events === undefined)
if (!hasEventListener(this, type))
return this;

const events = this._events;
const list = events[type];
if (list === undefined)
return this;

if (list === listener || list.listener === listener) {
this._eventsCount -= 1;
Expand Down Expand Up @@ -729,9 +733,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
*/
EventEmitter.prototype.removeAllListeners =
function removeAllListeners(type) {
const events = this._events;
if (events === undefined)
if (!hasEventListener(this))
return this;
const events = this._events;

// Not listening for removeListener, no need to emit
if (events.removeListener === undefined) {
Expand Down Expand Up @@ -776,14 +780,10 @@ EventEmitter.prototype.removeAllListeners =
};

function _listeners(target, type, unwrap) {
const events = target._events;

if (events === undefined)
if (!hasEventListener(target, type))
return [];

const evlistener = events[type];
if (evlistener === undefined)
return [];
const evlistener = target._events[type];

if (typeof evlistener === 'function')
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
Expand Down

0 comments on commit bdb6d12

Please sign in to comment.