Skip to content

Commit f1fd29a

Browse files
authored
fix(ext/node): fix getEventListeners in node:events (#29480)
1 parent e56dc01 commit f1fd29a

File tree

4 files changed

+12
-20
lines changed

4 files changed

+12
-20
lines changed

ext/node/polyfills/_events.mjs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import {
4646
} from "ext:deno_node/internal/validators.mjs";
4747
import { spliceOne } from "ext:deno_node/_utils.ts";
4848
import { nextTick } from "ext:deno_node/_process/process.ts";
49+
import { eventTargetData } from "ext:deno_web/02_event.js";
4950

5051
export { addAbortListener } from "./internal/events/abort_listener.mjs";
5152

@@ -805,18 +806,7 @@ export function getEventListeners(emitterOrTarget, type) {
805806
return emitterOrTarget.listeners(type);
806807
}
807808
if (emitterOrTarget instanceof EventTarget) {
808-
// TODO: kEvents is not defined
809-
const root = emitterOrTarget[kEvents].get(type);
810-
const listeners = [];
811-
let handler = root?.next;
812-
while (handler?.listener !== undefined) {
813-
const listener = handler.listener?.deref
814-
? handler.listener.deref()
815-
: handler.listener;
816-
listeners.push(listener);
817-
handler = handler.next;
818-
}
819-
return listeners;
809+
return emitterOrTarget[eventTargetData]?.listeners?.[type] || [];
820810
}
821811
throw new ERR_INVALID_ARG_TYPE(
822812
"emitter",

ext/web/02_event.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ function retarget(a, b) {
845845

846846
// Accessors for non-public data
847847

848-
const eventTargetData = Symbol();
848+
export const eventTargetData = Symbol();
849849

850850
function setEventTargetData(target) {
851851
target[eventTargetData] = getDefaultTargetData();

tests/node_compat/config.jsonc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
// TODO(bartlomieju): this test was flaky on macOS CI
3939
// "test-child-process-exec-timeout-kill.js",
4040
"test-child-process-exec-timeout-not-expired.js",
41-
"test-child-process-execfile.js",
4241
"test-child-process-execsync-maxbuf.js",
4342
// TODO(littledivy): windows ipc streams not yet implemented
4443
"test-child-process-fork-ref.js",

tests/node_compat/test/parallel/test-child-process-execfile.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// deno-lint-ignore-file
33

44
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
5-
// Taken from Node 20.11.1
5+
// Taken from Node 23.9.0
66
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
77

88
'use strict';
@@ -17,7 +17,7 @@ const os = require('os');
1717

1818
const fixture = fixtures.path('exit.js');
1919
const echoFixture = fixtures.path('echo.js');
20-
const execOpts = { encoding: 'utf8', shell: true };
20+
const execOpts = { encoding: 'utf8', shell: true, env: { ...process.env, NODE: process.execPath, FIXTURE: fixture } };
2121

2222
{
2323
execFile(
@@ -53,7 +53,12 @@ const execOpts = { encoding: 'utf8', shell: true };
5353

5454
{
5555
// Verify the shell option works properly
56-
execFile(process.execPath, [fixture, 0], execOpts, common.mustSucceed());
56+
execFile(
57+
`"${common.isWindows ? execOpts.env.NODE : '$NODE'}"`,
58+
[`"${common.isWindows ? execOpts.env.FIXTURE : '$FIXTURE'}"`, 0],
59+
execOpts,
60+
common.mustSucceed(),
61+
);
5762
}
5863

5964
{
@@ -102,9 +107,7 @@ const execOpts = { encoding: 'utf8', shell: true };
102107
const { signal } = ac;
103108

104109
const callback = common.mustCall((err) => {
105-
// TODO(cjihrig): The assertion on the next line currently fails because
106-
// kEvents is not defined. See TODO comment in _events.mjs.
107-
// assert.strictEqual(getEventListeners(ac.signal).length, 0);
110+
assert.strictEqual(getEventListeners(ac.signal).length, 0);
108111
assert.strictEqual(err, null);
109112
});
110113
execFile(process.execPath, [fixture, 0], { signal }, callback);

0 commit comments

Comments
 (0)