Skip to content

Commit 023bfc6

Browse files
committed
events: deprecate EventEmitter.defaultMaxListeners getter/setter
In preparation for upcoming ESM interop and to remain consistent with other getters/setters being removed
1 parent 9757906 commit 023bfc6

8 files changed

+67
-24
lines changed

doc/api/deprecations.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,13 @@ deprecated if the assigned value is not a string, boolean, or number. In the
950950
future, such assignment may result in a thrown error. Please convert the
951951
property to a string before assigning it to `process.env`.
952952
953+
<a id="DEP00XX"></a>
954+
### DEP00XX: EventEmitter.defaultMaxListeners
955+
956+
Type: Documentation-only (supports [`--pending-deprecation`][])
957+
958+
The [`EventEmitter.defaultMaxListeners`][] property is deprecated.
959+
953960
[`--pending-deprecation`]: cli.html#cli_pending_deprecation
954961
[`Buffer.allocUnsafeSlow(size)`]: buffer.html#buffer_class_method_buffer_allocunsafeslow_size
955962
[`Buffer.from(array)`]: buffer.html#buffer_class_method_buffer_from_array
@@ -958,6 +965,7 @@ property to a string before assigning it to `process.env`.
958965
[`assert`]: assert.html
959966
[`clearInterval()`]: timers.html#timers_clearinterval_timeout
960967
[`clearTimeout()`]: timers.html#timers_cleartimeout_timeout
968+
[`EventEmitter.defaultMaxListeners`]: events.html#events_eventemitter_defaultmaxlisteners
961969
[`EventEmitter.listenerCount(emitter, eventName)`]: events.html#events_eventemitter_listenercount_emitter_eventname
962970
[`Server.connections`]: net.html#net_server_connections
963971
[`Server.getConnections()`]: net.html#net_server_getconnections_callback

doc/api/events.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ console.log(EventEmitter.listenerCount(myEmitter, 'event'));
246246
### EventEmitter.defaultMaxListeners
247247
<!-- YAML
248248
added: v0.11.2
249+
deprecated: REPLACEME
249250
-->
250251

251252
By default, a maximum of `10` listeners can be registered for any single
@@ -283,6 +284,25 @@ the event emitter instance, the event’s name and the number of attached
283284
listeners, respectively.
284285
Its `name` property is set to `'MaxListenersExceededWarning'`.
285286

287+
This property is deprecated. Please use `EventEmitter.getDefaultMaxListeners()`
288+
and `EventEmitter.setDefaultMaxListeners()` instead.
289+
290+
### EventEmitter.getDefaultMaxListeners()
291+
<!-- YAML
292+
added: REPLACEME
293+
-->
294+
295+
Returns the default max listener count.
296+
297+
### EventEmitter.setDefaultMaxListeners(count)
298+
<!--YAML
299+
added: REPLACEME
300+
-->
301+
302+
- `count` {number}
303+
304+
Sets the default max listener count to `count`.
305+
286306
### emitter.addListener(eventName, listener)
287307
<!-- YAML
288308
added: v0.1.26

lib/events.js

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121

2222
'use strict';
2323

24+
const { deprecate } = require('internal/util');
25+
const { pendingDeprecation } = process.binding('config');
26+
2427
var spliceOne;
2528

2629
function EventEmitter() {
@@ -48,20 +51,33 @@ function lazyErrors() {
4851
return errors;
4952
}
5053

54+
EventEmitter.getDefaultMaxListeners = function() {
55+
return defaultMaxListeners;
56+
};
57+
58+
EventEmitter.setDefaultMaxListeners = function(count) {
59+
// check whether the input is a positive number (whose value is zero or
60+
// greater and not a NaN).
61+
if (typeof count !== 'number' || count < 0 || Number.isNaN(count)) {
62+
const errors = lazyErrors();
63+
throw new errors.ERR_OUT_OF_RANGE('count', 'a non-negative number', count);
64+
}
65+
defaultMaxListeners = count;
66+
};
67+
68+
5169
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
5270
enumerable: true,
53-
get: function() {
54-
return defaultMaxListeners;
55-
},
56-
set: function(arg) {
57-
if (typeof arg !== 'number' || arg < 0 || Number.isNaN(arg)) {
58-
const errors = lazyErrors();
59-
throw new errors.ERR_OUT_OF_RANGE('defaultMaxListeners',
60-
'a non-negative number',
61-
arg);
62-
}
63-
defaultMaxListeners = arg;
64-
}
71+
get: pendingDeprecation ?
72+
deprecate(EventEmitter.getDefaultMaxListeners,
73+
'EventEmitter.defaultMaxListeners is deprecated.',
74+
'DEP00XX') :
75+
EventEmitter.getDefaultMaxListeners,
76+
set: pendingDeprecation ?
77+
deprecate(EventEmitter.setDefaultMaxListeners,
78+
'EventEmitter.defaultMaxListeners is deprecated.',
79+
'DEP00XX') :
80+
EventEmitter.setDefaultMaxListeners,
6581
});
6682

6783
EventEmitter.init = function() {
@@ -88,7 +104,7 @@ EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
88104

89105
function $getMaxListeners(that) {
90106
if (that._maxListeners === undefined)
91-
return EventEmitter.defaultMaxListeners;
107+
return EventEmitter.getDefaultMaxListeners();
92108
return that._maxListeners;
93109
}
94110

test/parallel/test-console-log-stdio-broken-dest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const myConsole = new Console(stream, stream);
1818
process.on('warning', common.mustNotCall);
1919

2020
stream.cork();
21-
for (let i = 0; i < EventEmitter.defaultMaxListeners + 1; i++) {
21+
for (let i = 0; i < EventEmitter.getDefaultMaxListeners() + 1; i++) {
2222
myConsole.log('a message');
2323
}
2424
stream.uncork();

test/parallel/test-event-emitter-check-listener-leaks.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const events = require('events');
7070

7171
// process-wide
7272
{
73-
events.EventEmitter.defaultMaxListeners = 42;
73+
events.EventEmitter.setDefaultMaxListeners(42);
7474
const e = new events.EventEmitter();
7575

7676
for (let i = 0; i < 42; ++i) {
@@ -81,7 +81,7 @@ const events = require('events');
8181
assert.ok(e._events.fortytwo.hasOwnProperty('warned'));
8282
delete e._events.fortytwo.warned;
8383

84-
events.EventEmitter.defaultMaxListeners = 44;
84+
events.EventEmitter.setDefaultMaxListeners(44);
8585
e.on('fortytwo', common.mustNotCall());
8686
assert.ok(!e._events.fortytwo.hasOwnProperty('warned'));
8787
e.on('fortytwo', common.mustNotCall());
@@ -90,7 +90,7 @@ const events = require('events');
9090

9191
// but _maxListeners still has precedence over defaultMaxListeners
9292
{
93-
events.EventEmitter.defaultMaxListeners = 42;
93+
events.EventEmitter.setDefaultMaxListeners(42);
9494
const e = new events.EventEmitter();
9595
e.setMaxListeners(1);
9696
e.on('uno', common.mustNotCall());

test/parallel/test-event-emitter-get-max-listeners.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ const EventEmitter = require('events');
55

66
const emitter = new EventEmitter();
77

8-
assert.strictEqual(emitter.getMaxListeners(), EventEmitter.defaultMaxListeners);
8+
assert.strictEqual(emitter.getMaxListeners(),
9+
EventEmitter.getDefaultMaxListeners());
910

1011
emitter.setMaxListeners(0);
1112
assert.strictEqual(emitter.getMaxListeners(), 0);

test/parallel/test-event-emitter-max-listeners.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,10 @@ for (const obj of throwsObjs) {
4343
);
4444

4545
common.expectsError(
46-
() => events.defaultMaxListeners = obj,
46+
() => events.setDefaultMaxListeners(obj),
4747
{
4848
code: 'ERR_OUT_OF_RANGE',
4949
type: RangeError,
50-
message: 'The value of "defaultMaxListeners" is out of range. ' +
51-
`It must be a non-negative number. Received ${obj}`
5250
}
5351
);
5452
}

test/parallel/test-global-console-exists.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ process.on('warning', () => {
1818
// invoke the monkeypatched process.stderr.write
1919
// below.
2020
assert.strictEqual(writeTimes, 1);
21-
EventEmitter.defaultMaxListeners = oldDefault;
21+
EventEmitter.setDefaultMaxListeners(oldDefault);
2222
warningTimes++;
2323
});
2424

@@ -35,8 +35,8 @@ process.stderr.write = (data) => {
3535
writeTimes++;
3636
};
3737

38-
const oldDefault = EventEmitter.defaultMaxListeners;
39-
EventEmitter.defaultMaxListeners = 1;
38+
const oldDefault = EventEmitter.getDefaultMaxListeners();
39+
EventEmitter.setDefaultMaxListeners(1);
4040

4141
const e = new EventEmitter();
4242
e.on('hello', () => {});

0 commit comments

Comments
 (0)