Skip to content

MessagePort: implement NodeEventTarget on the native listener list - #35811

Open
robobun wants to merge 13 commits into
mainfrom
farm/44e114fa/messageport-node-event-target
Open

MessagePort: implement NodeEventTarget on the native listener list#35811
robobun wants to merge 13 commits into
mainfrom
farm/44e114fa/messageport-node-event-target

lint + review nits: Array.from over spread, once() purges byType, nam…

d2869b4
Select commit
Loading
Failed to load commit list.
Claude / Claude Code Review completed Jul 25, 2026 in 28m 39s

Code review found 1 potential issue

Found 1 candidates, confirmed 1. See review comments for details.

Details

Severity Count
🔴 Important 0
🟡 Nit 1
🟣 Pre-existing 0
Severity File:Line Issue
🟡 Nit src/js/node/worker_threads.ts:641-659 fakeParentPort once() wrapper breaks same-fn dedup; track() overwrites unconditionally

Annotations

Check warning on line 659 in src/js/node/worker_threads.ts

See this annotation in the file changed.

@claude claude / Claude Code Review

fakeParentPort once() wrapper breaks same-fn dedup; track() overwrites unconditionally

`fakeParentPort()`'s `once()` (from d2869b4) creates a fresh `wrapper` closure per call, so native EventTarget dedup (keyed on callback identity) no longer applies: `parentPort.once('message', fn); parentPort.once('message', fn)` registers two listeners and `fn` fires twice. `track()` also does `set.set(listener, registered)` unconditionally, so the second call overwrites `fn→wrapper1` with `fn→wrapper2` and `off(fn)` can no longer remove `wrapper1`; same for `on(fn)` followed by `once(fn)`. The