diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 46 | ||||
-rw-r--r-- | src/bun.js/bindings/exports.zig | 1 | ||||
-rw-r--r-- | src/bun.js/javascript.zig | 15 | ||||
-rw-r--r-- | src/bun.js/modules/ProcessModule.h | 39 | ||||
-rw-r--r-- | src/bun.js/process.exports.js | 13 |
5 files changed, 93 insertions, 21 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 5141ef866..fbbe39498 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -153,6 +153,7 @@ using JSBuffer = WebCore::JSBuffer; #include <JavaScriptCore/DFGAbstractHeap.h> #include "../modules/BufferModule.h" +#include "../modules/ProcessModule.h" // #include <iostream> static bool has_loaded_jsc = false; @@ -2527,7 +2528,8 @@ static JSC_DEFINE_HOST_FUNCTION(functionFulfillModuleSync, return JSValue::encode(JSC::jsUndefined()); } - if (res.result.value.tag == SyntheticModuleType::Buffer) { + switch (res.result.value.tag) { + case SyntheticModuleType::Buffer: { auto source = JSC::SourceCode( JSC::SyntheticSourceProvider::create( generateBufferSourceCode, @@ -2537,11 +2539,23 @@ static JSC_DEFINE_HOST_FUNCTION(functionFulfillModuleSync, RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); RELEASE_AND_RETURN(scope, JSValue::encode(JSC::jsUndefined())); } + case SyntheticModuleType::Process: { + auto source = JSC::SourceCode( + JSC::SyntheticSourceProvider::create( + generateProcessSourceCode, + JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath("node:process"_s)), WTFMove(moduleKey))); - auto provider = Zig::SourceProvider::create(res.result.value); - globalObject->moduleLoader()->provideFetch(globalObject, key, JSC::SourceCode(provider)); - RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); - RELEASE_AND_RETURN(scope, JSValue::encode(JSC::jsUndefined())); + globalObject->moduleLoader()->provideFetch(globalObject, key, WTFMove(source)); + RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); + RELEASE_AND_RETURN(scope, JSValue::encode(JSC::jsUndefined())); + } + default: { + auto provider = Zig::SourceProvider::create(res.result.value); + globalObject->moduleLoader()->provideFetch(globalObject, key, JSC::SourceCode(provider)); + RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); + RELEASE_AND_RETURN(scope, JSValue::encode(JSC::jsUndefined())); + } + } } JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalObject, @@ -2579,7 +2593,8 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalOb RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope)); } - if (res.result.value.tag == 1) { + switch (res.result.value.tag) { + case 1: { auto buffer = Vector<uint8_t>(res.result.value.source_code.ptr, res.result.value.source_code.len); auto source = JSC::SourceCode( JSC::WebAssemblySourceProvider::create(WTFMove(buffer), @@ -2594,7 +2609,8 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalOb globalObject->vm().drainMicrotasks(); return promise; - } else if (res.result.value.tag == SyntheticModuleType::Buffer) { + } + case SyntheticModuleType::Buffer: { auto source = JSC::SourceCode( JSC::SyntheticSourceProvider::create(generateBufferSourceCode, JSC::SourceOrigin(), WTFMove(moduleKey))); @@ -2605,11 +2621,25 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalOb promise->resolve(globalObject, sourceCode); scope.release(); return promise; - } else { + } + case SyntheticModuleType::Process: { + auto source = JSC::SourceCode( + JSC::SyntheticSourceProvider::create(generateProcessSourceCode, + JSC::SourceOrigin(), WTFMove(moduleKey))); + + auto sourceCode = JSSourceCode::create(vm, WTFMove(source)); + RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope)); + + promise->resolve(globalObject, sourceCode); + scope.release(); + return promise; + } + default: { auto provider = Zig::SourceProvider::create(res.result.value); auto jsSourceCode = JSC::JSSourceCode::create(vm, JSC::SourceCode(provider)); promise->resolve(globalObject, jsSourceCode); } + } // if (provider.ptr()->isBytecodeCacheEnabled()) { // provider.ptr()->readOrGenerateByteCodeCache(vm, jsSourceCode->sourceCode()); diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig index 5ff264f01..a362af743 100644 --- a/src/bun.js/bindings/exports.zig +++ b/src/bun.js/bindings/exports.zig @@ -245,6 +245,7 @@ pub const ResolvedSource = extern struct { wasm = 1, @"node:buffer" = 1024, + @"node:process" = 1025, }; }; diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 75220d58a..b52ba562f 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -832,6 +832,16 @@ pub const VirtualMachine = struct { .hash = 0, }; }, + .@"node:process" => { + return ResolvedSource{ + .allocator = null, + .source_code = ZigString.init(""), + .specifier = ZigString.init("node:process"), + .source_url = ZigString.init("node:process"), + .hash = 0, + .tag = ResolvedSource.Tag.@"node:process", + }; + }, .@"bun:ffi" => { return ResolvedSource{ .allocator = null, @@ -2745,6 +2755,7 @@ pub const HardcodedModule = enum { @"node:module", @"node:path", @"node:perf_hooks", + @"node:process", @"node:streams/consumer", @"node:streams/web", @"node:timers", @@ -2776,12 +2787,14 @@ pub const HardcodedModule = enum { .{ "node:path/posix", HardcodedModule.@"node:path" }, .{ "node:path/win32", HardcodedModule.@"node:path" }, .{ "node:perf_hooks", HardcodedModule.@"node:perf_hooks" }, + .{ "node:process", HardcodedModule.@"node:process" }, .{ "node:streams/consumer", HardcodedModule.@"node:streams/consumer" }, .{ "node:streams/web", HardcodedModule.@"node:streams/web" }, .{ "node:timers", HardcodedModule.@"node:timers" }, .{ "node:timers/promises", HardcodedModule.@"node:timers/promises" }, .{ "node:url", HardcodedModule.@"node:url" }, .{ "path", HardcodedModule.@"node:path" }, + .{ "process", HardcodedModule.@"node:process" }, .{ "undici", HardcodedModule.@"undici" }, .{ "ws", HardcodedModule.@"ws" }, }, @@ -2813,6 +2826,7 @@ pub const HardcodedModule = enum { .{ "node:path/posix", "node:path" }, .{ "node:path/win32", "node:path" }, .{ "node:perf_hooks", "node:perf_hooks" }, + .{ "node:process", "node:process" }, .{ "node:streams/consumer", "node:streams/consumer" }, .{ "node:streams/web", "node:streams/web" }, .{ "node:timers", "node:timers" }, @@ -2822,6 +2836,7 @@ pub const HardcodedModule = enum { .{ "path/posix", "node:path" }, .{ "path/win32", "node:path" }, .{ "perf_hooks", "node:perf_hooks" }, + .{ "process", "node:process" }, .{ "streams/consumer", "node:streams/consumer" }, .{ "streams/web", "node:streams/web" }, .{ "timers", "node:timers" }, diff --git a/src/bun.js/modules/ProcessModule.h b/src/bun.js/modules/ProcessModule.h new file mode 100644 index 000000000..2c82d6b3d --- /dev/null +++ b/src/bun.js/modules/ProcessModule.h @@ -0,0 +1,39 @@ +#include "../bindings/ZigGlobalObject.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); +} + +} diff --git a/src/bun.js/process.exports.js b/src/bun.js/process.exports.js deleted file mode 100644 index c3a789f23..000000000 --- a/src/bun.js/process.exports.js +++ /dev/null @@ -1,13 +0,0 @@ -export const chdir = process.chdir.bind(process); -export const cwd = process.cwd.bind(process); -export const nextTick = process.nextTick.bind(process); -export const browser = false; -export var exitCode = process.exitCode; -export const exit = process.exit.bind(process); -export const pid = process.pid; -export const ppid = process.ppid; -export const release = process.release; -export const version = process.version; -export const versions = process.versions; -export const arch = process.arch; -export const platform = process.platform; |