Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit eee522a

Browse filesBrowse files
addaleaxnodejs-github-bot
authored andcommitted
lib: add EventTarget-related browser globals
Add - Event - EventTarget - MessagePort - MessageChannel - MessageEvent to the set of global objects, since they are available now and behave like they do in the browser. Fixes: #35495 PR-URL: #35496 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Khaidi Chu <i@2333.moe>
1 parent 705d888 commit eee522a
Copy full SHA for eee522a

File tree

Expand file treeCollapse file tree

11 files changed

+128
-18
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

11 files changed

+128
-18
lines changed
Open diff view settings
Collapse file

‎.eslintrc.js‎

Copy file name to clipboardExpand all lines: .eslintrc.js
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,11 @@ module.exports = {
287287
BigInt: 'readable',
288288
BigInt64Array: 'readable',
289289
BigUint64Array: 'readable',
290+
Event: 'readable',
291+
EventTarget: 'readable',
292+
MessageChannel: 'readable',
293+
MessageEvent: 'readable',
294+
MessagePort: 'readable',
290295
TextEncoder: 'readable',
291296
TextDecoder: 'readable',
292297
queueMicrotask: 'readable',
Collapse file

‎doc/api/events.md‎

Copy file name to clipboardExpand all lines: doc/api/events.md
+18-3Lines changed: 18 additions & 3 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -1069,9 +1069,15 @@ const ac = new AbortController();
10691069
process.nextTick(() => ac.abort());
10701070
```
10711071

1072+
<a id="event-target-and-event-api"></a>
10721073
## `EventTarget` and `Event` API
10731074
<!-- YAML
10741075
added: v14.5.0
1076+
changes:
1077+
- version: REPLACEME
1078+
pr-url: https://github.com/nodejs/node/pull/35496
1079+
description:
1080+
The `EventTarget` and `Event` classes are now available as globals.
10751081
-->
10761082

10771083
> Stability: 1 - Experimental
@@ -1082,7 +1088,7 @@ Neither the `EventTarget` nor `Event` classes are available for end
10821088
user code to create.
10831089

10841090
```js
1085-
const target = getEventTargetSomehow();
1091+
const target = new EventTarget();
10861092

10871093
target.addEventListener('foo', (event) => {
10881094
console.log('foo event happened!');
@@ -1168,7 +1174,7 @@ const handler4 = {
11681174
}
11691175
};
11701176

1171-
const target = getEventTargetSomehow();
1177+
const target = new EventTarget();
11721178

11731179
target.addEventListener('foo', handler1);
11741180
target.addEventListener('foo', handler2);
@@ -1189,6 +1195,10 @@ The `EventTarget` does not implement any special default handling for
11891195
### Class: `Event`
11901196
<!-- YAML
11911197
added: v14.5.0
1198+
changes:
1199+
- version: REPLACEME
1200+
pr-url: https://github.com/nodejs/node/pull/35496
1201+
description: The `Event` class is now available through the global object.
11921202
-->
11931203

11941204
The `Event` object is an adaptation of the [`Event` Web API][]. Instances
@@ -1341,6 +1351,11 @@ The event type identifier.
13411351
### Class: `EventTarget`
13421352
<!-- YAML
13431353
added: v14.5.0
1354+
changes:
1355+
- version: REPLACEME
1356+
pr-url: https://github.com/nodejs/node/pull/35496
1357+
description:
1358+
The `EventTarget` class is now available through the global object.
13441359
-->
13451360

13461361
#### `eventTarget.addEventListener(type, listener[, options])`
@@ -1374,7 +1389,7 @@ a `listener`. Any individual `listener` may be added once with
13741389
```js
13751390
function handler(event) {}
13761391

1377-
const target = getEventTargetSomehow();
1392+
const target = new EventTarget();
13781393
target.addEventListener('foo', handler, { capture: true }); // first
13791394
target.addEventListener('foo', handler, { capture: false }); // second
13801395

Collapse file

‎doc/api/globals.md‎

Copy file name to clipboardExpand all lines: doc/api/globals.md
+55Lines changed: 55 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,30 @@ added: v0.1.100
169169

170170
Used to print to stdout and stderr. See the [`console`][] section.
171171

172+
## `Event`
173+
<!-- YAML
174+
added: REPLACEME
175+
-->
176+
177+
<!-- type=global -->
178+
179+
> Stability: 1 - Experimental
180+
181+
A browser-compatible implementation of the `Event` class. See
182+
[`EventTarget` and `Event` API][] for more details.
183+
184+
## `EventTarget`
185+
<!-- YAML
186+
added: REPLACEME
187+
-->
188+
189+
<!-- type=global -->
190+
191+
> Stability: 1 - Experimental
192+
193+
A browser-compatible implementation of the `EventTarget` class. See
194+
[`EventTarget` and `Event` API][] for more details.
195+
172196
## `exports`
173197

174198
This variable may appear to be global but is not. See [`exports`][].
@@ -187,6 +211,33 @@ within the browser `var something` will define a new global variable. In
187211
Node.js this is different. The top-level scope is not the global scope;
188212
`var something` inside a Node.js module will be local to that module.
189213

214+
## `MessageChannel`
215+
<!-- YAML
216+
added: REPLACEME
217+
-->
218+
219+
<!-- type=global -->
220+
221+
The `MessageChannel` class. See [`MessageChannel`][] for more details.
222+
223+
## `MessageEvent`
224+
<!-- YAML
225+
added: REPLACEME
226+
-->
227+
228+
<!-- type=global -->
229+
230+
The `MessageEvent` class. See [`MessageEvent`][] for more details.
231+
232+
## `MessagePort`
233+
<!-- YAML
234+
added: REPLACEME
235+
-->
236+
237+
<!-- type=global -->
238+
239+
The `MessagePort` class. See [`MessagePort`][] for more details.
240+
190241
## `module`
191242

192243
This variable may appear to be global but is not. See [`module`][].
@@ -322,6 +373,10 @@ The object that acts as the namespace for all W3C
322373
[Mozilla Developer Network][webassembly-mdn] for usage and compatibility.
323374

324375
[`AbortController`]: https://developer.mozilla.org/en-US/docs/Web/API/AbortController
376+
[`EventTarget` and `Event` API]: events.md#event-target-and-event-api
377+
[`MessageChannel`]: worker_threads.md#worker_threads_class_messagechannel
378+
[`MessageEvent`]: https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent/MessageEvent
379+
[`MessagePort`]: worker_threads.md#worker_threads_class_messageport
325380
[`TextDecoder`]: util.md#util_class_util_textdecoder
326381
[`TextEncoder`]: util.md#util_class_util_textencoder
327382
[`URLSearchParams`]: url.md#url_class_urlsearchparams
Collapse file

‎lib/internal/bootstrap/node.js‎

Copy file name to clipboardExpand all lines: lib/internal/bootstrap/node.js
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,21 @@ if (!config.noBrowserGlobals) {
140140
exposeInterface(global, 'AbortController', AbortController);
141141
exposeInterface(global, 'AbortSignal', AbortSignal);
142142

143+
const {
144+
EventTarget,
145+
Event,
146+
} = require('internal/event_target');
147+
exposeInterface(global, 'EventTarget', EventTarget);
148+
exposeInterface(global, 'Event', Event);
149+
const {
150+
MessageChannel,
151+
MessagePort,
152+
MessageEvent,
153+
} = require('internal/worker/io');
154+
exposeInterface(global, 'MessageChannel', MessageChannel);
155+
exposeInterface(global, 'MessagePort', MessagePort);
156+
exposeInterface(global, 'MessageEvent', MessageEvent);
157+
143158
// https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope
144159
const timers = require('timers');
145160
defineOperation(global, 'clearInterval', timers.clearInterval);
Collapse file

‎src/node_external_reference.h‎

Copy file name to clipboardExpand all lines: src/node_external_reference.h
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ class ExternalReferenceRegistry {
6464
V(string_decoder) \
6565
V(trace_events) \
6666
V(timers) \
67-
V(types)
67+
V(types) \
68+
V(worker)
6869

6970
#if NODE_HAVE_I18N_SUPPORT
7071
#define EXTERNAL_REFERENCE_BINDING_LIST_I18N(V) V(icu)
Collapse file

‎src/node_worker.cc‎

Copy file name to clipboardExpand all lines: src/node_worker.cc
+13-1Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "debug_utils-inl.h"
33
#include "memory_tracker-inl.h"
44
#include "node_errors.h"
5+
#include "node_external_reference.h"
56
#include "node_buffer.h"
67
#include "node_options-inl.h"
78
#include "node_perf.h"
@@ -860,9 +861,20 @@ void InitWorker(Local<Object> target,
860861
NODE_DEFINE_CONSTANT(target, kTotalResourceLimitCount);
861862
}
862863

863-
} // anonymous namespace
864+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
865+
registry->Register(GetEnvMessagePort);
866+
registry->Register(Worker::New);
867+
registry->Register(Worker::StartThread);
868+
registry->Register(Worker::StopThread);
869+
registry->Register(Worker::Ref);
870+
registry->Register(Worker::Unref);
871+
registry->Register(Worker::GetResourceLimits);
872+
registry->Register(Worker::TakeHeapSnapshot);
873+
}
864874

875+
} // anonymous namespace
865876
} // namespace worker
866877
} // namespace node
867878

868879
NODE_MODULE_CONTEXT_AWARE_INTERNAL(worker, node::worker::InitWorker)
880+
NODE_MODULE_EXTERNAL_REFERENCE(worker, node::worker::RegisterExternalReferences)
Collapse file

‎test/parallel/test-bootstrap-modules.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-bootstrap-modules.js
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const expectedModules = new Set([
3131
'Internal Binding types',
3232
'Internal Binding url',
3333
'Internal Binding util',
34+
'Internal Binding worker',
3435
'NativeModule buffer',
3536
'NativeModule events',
3637
'NativeModule fs',
@@ -76,6 +77,17 @@ const expectedModules = new Set([
7677
'NativeModule internal/process/warning',
7778
'NativeModule internal/querystring',
7879
'NativeModule internal/source_map/source_map_cache',
80+
'NativeModule internal/streams/buffer_list',
81+
'NativeModule internal/streams/destroy',
82+
'NativeModule internal/streams/duplex',
83+
'NativeModule internal/streams/end-of-stream',
84+
'NativeModule internal/streams/legacy',
85+
'NativeModule internal/streams/passthrough',
86+
'NativeModule internal/streams/pipeline',
87+
'NativeModule internal/streams/readable',
88+
'NativeModule internal/streams/state',
89+
'NativeModule internal/streams/transform',
90+
'NativeModule internal/streams/writable',
7991
'NativeModule internal/timers',
8092
'NativeModule internal/url',
8193
'NativeModule internal/util',
@@ -84,8 +96,10 @@ const expectedModules = new Set([
8496
'NativeModule internal/util/types',
8597
'NativeModule internal/validators',
8698
'NativeModule internal/vm/module',
99+
'NativeModule internal/worker/io',
87100
'NativeModule internal/worker/js_transferable',
88101
'NativeModule path',
102+
'NativeModule stream',
89103
'NativeModule timers',
90104
'NativeModule url',
91105
'NativeModule util',
Collapse file

‎test/parallel/test-event-on-async-iterator.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-event-on-async-iterator.js
+1-3Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ const common = require('../common');
55
const assert = require('assert');
66
const { on, EventEmitter } = require('events');
77
const {
8-
EventTarget,
9-
NodeEventTarget,
10-
Event
8+
NodeEventTarget
119
} = require('internal/event_target');
1210

1311
async function basic() {
Collapse file

‎test/parallel/test-events-once.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-events-once.js
+1-2Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2-
// Flags: --expose-internals --no-warnings
2+
// Flags: --no-warnings
33

44
const common = require('../common');
55
const { once, EventEmitter } = require('events');
@@ -9,7 +9,6 @@ const {
99
fail,
1010
rejects,
1111
} = require('assert');
12-
const { EventTarget, Event } = require('internal/event_target');
1312

1413
async function onceAnEvent() {
1514
const ee = new EventEmitter();
Collapse file

‎test/parallel/test-eventtarget-whatwg-passive.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-eventtarget-whatwg-passive.js
-6Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
1-
// Flags: --expose-internals
21
'use strict';
32

43
const common = require('../common');
54

6-
const {
7-
Event,
8-
EventTarget,
9-
} = require('internal/event_target');
10-
115
const {
126
fail,
137
ok,

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.