aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/modules/ProcessModule.h
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-06 07:22:25 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-06 07:22:25 -0700
commitf5129dbd1a0d801dcf2d457917d64d4e0de43f52 (patch)
treea085bc07171b3936be09a525922d9229c2738c1e /src/bun.js/modules/ProcessModule.h
parent07cbc0193a7f7cb5bef3cfff49b0221719190ea6 (diff)
downloadbun-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.h99
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