diff options
author | 2022-09-06 07:22:25 -0700 | |
---|---|---|
committer | 2022-09-06 07:22:25 -0700 | |
commit | f5129dbd1a0d801dcf2d457917d64d4e0de43f52 (patch) | |
tree | a085bc07171b3936be09a525922d9229c2738c1e /src/bun.js/modules/ProcessModule.h | |
parent | 07cbc0193a7f7cb5bef3cfff49b0221719190ea6 (diff) | |
download | bun-f5129dbd1a0d801dcf2d457917d64d4e0de43f52.tar.gz bun-f5129dbd1a0d801dcf2d457917d64d4e0de43f52.tar.zst bun-f5129dbd1a0d801dcf2d457917d64d4e0de43f52.zip |
Fix issue with `process` esm node export
Diffstat (limited to 'src/bun.js/modules/ProcessModule.h')
-rw-r--r-- | src/bun.js/modules/ProcessModule.h | 99 |
1 files changed, 68 insertions, 31 deletions
diff --git a/src/bun.js/modules/ProcessModule.h b/src/bun.js/modules/ProcessModule.h index 2c82d6b3d..3c9c3261f 100644 --- a/src/bun.js/modules/ProcessModule.h +++ b/src/bun.js/modules/ProcessModule.h @@ -1,39 +1,76 @@ #include "../bindings/ZigGlobalObject.h" +#include "JavaScriptCore/CustomGetterSetter.h" #include "JavaScriptCore/JSGlobalObject.h" namespace Zig { -inline void generateProcessSourceCode(JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) { - JSC::VM& vm = lexicalGlobalObject->vm(); - GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(lexicalGlobalObject); - - JSC::JSObject* process = globalObject->processObject(); - - auto exportFromProcess = [&] (const String& string) { - auto identifier = JSC::Identifier::fromString(vm, string); - exportNames.append(identifier); - exportValues.append(process->getDirect(vm, identifier)); - }; - - exportFromProcess("arch"_s); - exportFromProcess("argv"_s); - exportFromProcess("browser"_s); - exportFromProcess("chdir"_s); - exportFromProcess("cwd"_s); - exportFromProcess("dlopen"_s); - exportFromProcess("exitCode"_s); - exportFromProcess("exit"_s); - exportFromProcess("hrtime"_s); - exportFromProcess("pid"_s); - exportFromProcess("ppid"_s); - exportFromProcess("nextTick"_s); - exportFromProcess("revision"_s); - exportFromProcess("title"_s); - exportFromProcess("version"_s); - exportFromProcess("versions"_s); - exportFromProcess("platform"_s); - - exportFromProcess("isBun"_s); +JSC_DEFINE_HOST_FUNCTION(jsFunctionProcessModuleCommonJS, + (JSGlobalObject * globalObject, + CallFrame *callFrame)) { + VM &vm = globalObject->vm(); + + return JSValue::encode( + reinterpret_cast<Zig::GlobalObject *>(globalObject)->processObject()); +} + +JSC_DEFINE_CUSTOM_GETTER(jsFunctionProcessModuleCommonJSGetter, + (JSGlobalObject * globalObject, + EncodedJSValue thisValue, + PropertyName propertyName)) { + VM &vm = globalObject->vm(); + + return JSValue::encode(reinterpret_cast<Zig::GlobalObject *>(globalObject) + ->processObject() + ->get(globalObject, propertyName)); +} + +JSC_DEFINE_CUSTOM_SETTER(jsFunctionProcessModuleCommonJSSetter, + (JSGlobalObject * globalObject, + EncodedJSValue thisValue, EncodedJSValue encodedValue, + PropertyName propertyName)) { + VM &vm = globalObject->vm(); + + return reinterpret_cast<Zig::GlobalObject *>(globalObject) + ->processObject() + ->putDirect(vm, propertyName, JSValue::decode(encodedValue), 0); } +inline void generateProcessSourceCode(JSC::JSGlobalObject *lexicalGlobalObject, + JSC::Identifier moduleKey, + Vector<JSC::Identifier, 4> &exportNames, + JSC::MarkedArgumentBuffer &exportValues) { + JSC::VM &vm = lexicalGlobalObject->vm(); + GlobalObject *globalObject = + reinterpret_cast<GlobalObject *>(lexicalGlobalObject); + + JSC::JSObject *process = globalObject->processObject(); + + PropertyNameArray properties(vm, PropertyNameMode::Strings, + PrivateSymbolMode::Exclude); + process->getPropertyNames(globalObject, properties, + DontEnumPropertiesMode::Exclude); + + exportNames.append(JSC::Identifier::fromString(vm, "default"_s)); + JSFunction *processModuleCommonJS = JSFunction::create( + vm, globalObject, 0, "process"_s, jsFunctionProcessModuleCommonJS, + ImplementationVisibility::Public); + processModuleCommonJS->putDirect( + vm, + PropertyName( + Identifier::fromUid(vm.symbolRegistry().symbolForKey("CommonJS"_s))), + jsBoolean(true), 0); + exportValues.append(processModuleCommonJS); + + for (auto &entry : properties) { + exportNames.append(entry); + exportValues.append(process->get(globalObject, entry)); + processModuleCommonJS->putDirectCustomAccessor( + vm, entry, + JSC::CustomGetterSetter::create(vm, + jsFunctionProcessModuleCommonJSGetter, + jsFunctionProcessModuleCommonJSSetter), + 0); + } } + +} // namespace Zig |