diff --git a/src/js/node/worker_threads.ts b/src/js/node/worker_threads.ts index c6d0633dde..bd34946c4b 100644 --- a/src/js/node/worker_threads.ts +++ b/src/js/node/worker_threads.ts @@ -121,7 +121,7 @@ let workerData = _workerData; let threadId = _threadId; function receiveMessageOnPort(port: MessagePort) { let res = _receiveMessageOnPort(port); - if (!res) return undefined; + if (res === undefined) return undefined; return { message: res, }; diff --git a/test/regression/issue/26501.test.ts b/test/regression/issue/26501.test.ts new file mode 100644 index 0000000000..a640bdc3dd --- /dev/null +++ b/test/regression/issue/26501.test.ts @@ -0,0 +1,24 @@ +import { expect, test } from "bun:test"; +import { MessageChannel, receiveMessageOnPort } from "node:worker_threads"; + +test("receiveMessageOnPort handles falsy values correctly", () => { + const { port1, port2 } = new MessageChannel(); + + const values = [0, 1, false, true, "", "hello world", null]; + for (const value of values) { + port1.postMessage(value); + } + + const received: unknown[] = []; + for (let i = 0; i < values.length; i++) { + const result = receiveMessageOnPort(port2); + if (result !== undefined) { + received.push(result.message); + } + } + + expect(received).toEqual(values); + + // Extra call should return undefined (no more messages) + expect(receiveMessageOnPort(port2)).toBeUndefined(); +});