summaryrefslogtreecommitdiff
path: root/ext/node/polyfills
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills')
-rw-r--r--ext/node/polyfills/worker_threads.ts24
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] = () => {