Fix issue with process esm node export

This commit is contained in:
Jarred Sumner
2022-09-06 07:22:25 -07:00
parent 07cbc0193a
commit f5129dbd1a

View File

@@ -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_DEFINE_HOST_FUNCTION(jsFunctionProcessModuleCommonJS,
(JSGlobalObject * globalObject,
CallFrame *callFrame)) {
VM &vm = globalObject->vm();
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);
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