diff options
author | Satya Rohith <me@satyarohith.com> | 2024-04-29 14:23:54 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-29 08:53:54 +0000 |
commit | 455cf1743f70cb12025e36b3c4eb9a213fe77199 (patch) | |
tree | 7a8532218ad1b572d55444195315b0b53994ad1a /ext/node/polyfills/worker_threads.ts | |
parent | 021a0dc9b1063bff67dc295c61d9f4bf787c18fb (diff) |
fix(ext/node): add support for MessagePort.removeListener/off (#23598)
Closes https://github.com/denoland/deno/issues/23564
Diffstat (limited to 'ext/node/polyfills/worker_threads.ts')
-rw-r--r-- | ext/node/polyfills/worker_threads.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/ext/node/polyfills/worker_threads.ts b/ext/node/polyfills/worker_threads.ts index 8f531368a..e88e6368b 100644 --- a/ext/node/polyfills/worker_threads.ts +++ b/ext/node/polyfills/worker_threads.ts @@ -473,6 +473,12 @@ class NodeMessageChannel { } } +const listeners = new SafeWeakMap< + // deno-lint-ignore no-explicit-any + (...args: any[]) => void, + // deno-lint-ignore no-explicit-any + (ev: any) => any +>(); function webMessagePortToNodeMessagePort(port: MessagePort) { port.on = port.addListener = function (this: MessagePort, name, listener) { // deno-lint-ignore no-explicit-any @@ -486,6 +492,24 @@ function webMessagePortToNodeMessagePort(port: MessagePort) { } else { throw new Error(`Unknown event: "${name}"`); } + listeners.set(listener, _listener); + return this; + }; + port.off = port.removeListener = function ( + this: MessagePort, + name, + listener, + ) { + if (name == "message") { + port.removeEventListener("message", listeners.get(listener)!); + } else if (name == "messageerror") { + port.removeEventListener("messageerror", listeners.get(listener)!); + } else if (name == "close") { + port.removeEventListener("close", listeners.get(listener)!); + } else { + throw new Error(`Unknown event: "${name}"`); + } + listeners.delete(listener); return this; }; port[nodeWorkerThreadCloseCb] = () => { |