aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ZigGlobalObject.cpp
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-08-07 23:58:38 -0700
committerGravatar GitHub <noreply@github.com> 2023-08-07 23:58:38 -0700
commit5497accbdb14da9e361175ad1cd074731b7f8eeb (patch)
tree994424356f9059b1171f410a9689f2d00bf89f6b /src/bun.js/bindings/ZigGlobalObject.cpp
parent182e600eb79655e85b3f0371bc46fc4de8e70094 (diff)
downloadbun-5497accbdb14da9e361175ad1cd074731b7f8eeb.tar.gz
bun-5497accbdb14da9e361175ad1cd074731b7f8eeb.tar.zst
bun-5497accbdb14da9e361175ad1cd074731b7f8eeb.zip
Add `env` option for `node:worker_threads` (#4052)
* almost works * env stuff * test fixes * wtfmove * ok * ok * ref by default * it now does the ref stuff by default * cool
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 3f4a8d044..3de7d3daa 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -429,7 +429,7 @@ static String computeErrorInfo(JSC::VM& vm, Vector<StackFrame>& stackTrace, unsi
}
extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(JSClassRef* globalObjectClass, int count,
- void* console_client, int32_t executionContextId, bool miniMode)
+ void* console_client, int32_t executionContextId, bool miniMode, void* worker_ptr)
{
auto heapSize = miniMode ? JSC::HeapType::Small : JSC::HeapType::Large;
@@ -448,6 +448,20 @@ extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(JSClassRef* globalObje
vm,
Zig::GlobalObject::createStructure(vm, JSC::JSGlobalObject::create(vm, JSC::JSGlobalObject::createStructure(vm, JSC::jsNull())), JSC::jsNull()),
static_cast<ScriptExecutionContextIdentifier>(executionContextId));
+
+ if (auto* worker = static_cast<WebCore::Worker*>(worker_ptr)) {
+ auto& options = worker->options();
+ if (options.bun.env) {
+ auto map = *options.bun.env;
+ auto size = map.size();
+ auto env = JSC::constructEmptyObject(globalObject, globalObject->objectPrototype(), size > 63 ? 63 : size);
+ for (auto k : map) {
+ env->putDirect(vm, JSC::Identifier::fromString(vm, WTFMove(k.key)), JSC::jsString(vm, WTFMove(k.value)));
+ }
+ map.clear();
+ globalObject->m_processEnvObject.set(vm, globalObject, env);
+ }
+ }
} else {
globalObject = Zig::GlobalObject::create(
vm,