Skip to content

Commit 3904ef8

Browse files
authored
events: add getMaxListeners method
PR-URL: nodejs#47039 Reviewed-By: Debadree Chatterjee <debadree333@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent 0fd14e4 commit 3904ef8

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

doc/api/events.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,58 @@ const { getEventListeners, EventEmitter } = require('node:events');
12661266
}
12671267
```
12681268

1269+
## `events.getMaxListeners(emitterOrTarget)`
1270+
1271+
<!-- YAML
1272+
added: REPLACEME
1273+
-->
1274+
1275+
* `emitterOrTarget` {EventEmitter|EventTarget}
1276+
* Returns: {number}
1277+
1278+
Returns the currently set max amount of listeners.
1279+
1280+
For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
1281+
the emitter.
1282+
1283+
For `EventTarget`s this is the only way to get the max event listeners for the
1284+
event target. If the number of event handlers on a single EventTarget exceeds
1285+
the max set, the EventTarget will print a warning.
1286+
1287+
```mjs
1288+
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
1289+
1290+
{
1291+
const ee = new EventEmitter();
1292+
console.log(getMaxListeners(ee)); // 10
1293+
setMaxListeners(11, ee);
1294+
console.log(getMaxListeners(ee)); // 11
1295+
}
1296+
{
1297+
const et = new EventTarget();
1298+
console.log(getMaxListeners(et)); // 10
1299+
setMaxListeners(11, et);
1300+
console.log(getMaxListeners(et)); // 11
1301+
}
1302+
```
1303+
1304+
```cjs
1305+
const { getMaxListeners, setMaxListeners, EventEmitter } = require('node:events');
1306+
1307+
{
1308+
const ee = new EventEmitter();
1309+
console.log(getMaxListeners(ee)); // 10
1310+
setMaxListeners(11, ee);
1311+
console.log(getMaxListeners(ee)); // 11
1312+
}
1313+
{
1314+
const et = new EventTarget();
1315+
console.log(getMaxListeners(et)); // 10
1316+
setMaxListeners(11, et);
1317+
console.log(getMaxListeners(et)); // 11
1318+
}
1319+
```
1320+
12691321
## `events.once(emitter, name[, options])`
12701322

12711323
<!-- YAML

lib/events.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ module.exports = EventEmitter;
220220
module.exports.once = once;
221221
module.exports.on = on;
222222
module.exports.getEventListeners = getEventListeners;
223+
module.exports.getMaxListeners = getMaxListeners;
223224
// Backwards-compat with node 0.10.x
224225
EventEmitter.EventEmitter = EventEmitter;
225226

@@ -930,6 +931,23 @@ function getEventListeners(emitterOrTarget, type) {
930931
emitterOrTarget);
931932
}
932933

934+
/**
935+
* Returns the max listeners set.
936+
* @param {EventEmitter | EventTarget} emitterOrTarget
937+
* @returns {number}
938+
*/
939+
function getMaxListeners(emitterOrTarget) {
940+
if (typeof emitterOrTarget?.getMaxListeners === 'function') {
941+
return _getMaxListeners(emitterOrTarget);
942+
} else if (emitterOrTarget?.[kMaxEventTargetListeners]) {
943+
return emitterOrTarget[kMaxEventTargetListeners];
944+
}
945+
946+
throw new ERR_INVALID_ARG_TYPE('emitter',
947+
['EventEmitter', 'EventTarget'],
948+
emitterOrTarget);
949+
}
950+
933951
/**
934952
* Creates a `Promise` that is fulfilled when the emitter
935953
* emits the given event.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use strict';
2+
3+
require('../common');
4+
const assert = require('node:assert');
5+
const { getMaxListeners, EventEmitter, defaultMaxListeners, setMaxListeners } = require('node:events');
6+
7+
{
8+
const ee = new EventEmitter();
9+
assert.strictEqual(getMaxListeners(ee), defaultMaxListeners);
10+
setMaxListeners(101, ee);
11+
assert.strictEqual(getMaxListeners(ee), 101);
12+
}
13+
14+
{
15+
const et = new EventTarget();
16+
assert.strictEqual(getMaxListeners(et), defaultMaxListeners);
17+
setMaxListeners(101, et);
18+
assert.strictEqual(getMaxListeners(et), 101);
19+
}

0 commit comments

Comments
 (0)