diff --git a/ext/node/polyfills/worker_threads.ts b/ext/node/polyfills/worker_threads.ts index f61e7e3e33..96aa02fe11 100644 --- a/ext/node/polyfills/worker_threads.ts +++ b/ext/node/polyfills/worker_threads.ts @@ -27,6 +27,7 @@ import * as webidl from "ext:deno_webidl/00_webidl.js"; import { notImplemented } from "ext:deno_node/_utils.ts"; import { EventEmitter } from "node:events"; import { BroadcastChannel } from "ext:deno_broadcast_channel/01_broadcast_channel.js"; +import process from "node:process"; const { ObjectPrototypeIsPrototypeOf } = primordials; const { @@ -128,6 +129,7 @@ class NodeWorker extends EventEmitter { const serializedWorkerMetadata = serializeJsMessageData({ workerData: options?.workerData, environmentData: environmentData, + env: options?.env, }, options?.transferList ?? []); const id = op_create_worker( { @@ -348,6 +350,10 @@ internals.__initWorkerThreads = ( const { 0: metadata, 1: _ } = maybeWorkerMetadata; workerData = metadata.workerData; environmentData = metadata.environmentData; + const env = metadata.env; + if (env) { + process.env = env; + } } defaultExport.workerData = workerData; defaultExport.parentPort = parentPort; diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts index 21bbca194a..a96896ce57 100644 --- a/tests/unit_node/worker_threads_test.ts +++ b/tests/unit_node/worker_threads_test.ts @@ -460,3 +460,29 @@ Deno.test("[node/worker_threads] receiveMessageOnPort works if there's pending r port5.close(); port6.close(); }); + +Deno.test({ + name: "[node/worker_threads] Worker env", + async fn() { + const deferred = Promise.withResolvers(); + const worker = new workerThreads.Worker( + ` + import { parentPort } from "node:worker_threads"; + import process from "node:process"; + parentPort.postMessage(process.env.TEST_ENV); + `, + { + eval: true, + env: { TEST_ENV: "test" }, + }, + ); + + worker.on("message", (data) => { + assertEquals(data, "test"); + deferred.resolve(); + }); + + await deferred.promise; + await worker.terminate(); + }, +});