Skip to content

Commit c5cd6b7

Browse files
KhafraDevRafaelGSS
authored andcommitted
events: add getMaxListeners method
PR-URL: #47039 Reviewed-By: Debadree Chatterjee <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]>
1 parent 10569de commit c5cd6b7

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
@@ -215,6 +215,7 @@ module.exports = EventEmitter;
215215
module.exports.once = once;
216216
module.exports.on = on;
217217
module.exports.getEventListeners = getEventListeners;
218+
module.exports.getMaxListeners = getMaxListeners;
218219
// Backwards-compat with node 0.10.x
219220
EventEmitter.EventEmitter = EventEmitter;
220221

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

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