diff options
author | 2023-08-07 23:58:38 -0700 | |
---|---|---|
committer | 2023-08-07 23:58:38 -0700 | |
commit | 5497accbdb14da9e361175ad1cd074731b7f8eeb (patch) | |
tree | 994424356f9059b1171f410a9689f2d00bf89f6b /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | 182e600eb79655e85b3f0371bc46fc4de8e70094 (diff) | |
download | bun-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.cpp | 16 |
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, |