Skip to content

Commit 061fb20

Browse files
KhafraDevdanielleadams
authored andcommitted
events: add getMaxListeners method
PR-URL: #47039 Reviewed-By: Debadree Chatterjee <debadree333@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent be34777 commit 061fb20

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

doc/api/events.md

+52
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

+18
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ module.exports = EventEmitter;
216216
module.exports.once = once;
217217
module.exports.on = on;
218218
module.exports.getEventListeners = getEventListeners;
219+
module.exports.getMaxListeners = getMaxListeners;
219220
// Backwards-compat with node 0.10.x
220221
EventEmitter.EventEmitter = EventEmitter;
221222

@@ -933,6 +934,23 @@ function getEventListeners(emitterOrTarget, type) {
933934
emitterOrTarget);
934935
}
935936

937+
/**
938+
* Returns the max listeners set.
939+
* @param {EventEmitter | EventTarget} emitterOrTarget
940+
* @returns {number}
941+
*/
942+
function getMaxListeners(emitterOrTarget) {
943+
if (typeof emitterOrTarget?.getMaxListeners === 'function') {
944+
return _getMaxListeners(emitterOrTarget);
945+
} else if (emitterOrTarget?.[kMaxEventTargetListeners]) {
946+
return emitterOrTarget[kMaxEventTargetListeners];
947+
}
948+
949+
throw new ERR_INVALID_ARG_TYPE('emitter',
950+
['EventEmitter', 'EventTarget'],
951+
emitterOrTarget);
952+
}
953+
936954
/**
937955
* Creates a `Promise` that is fulfilled when the emitter
938956
* emits the given event.
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)