diff options
author | 2023-09-07 04:58:44 -0700 | |
---|---|---|
committer | 2023-09-07 04:58:44 -0700 | |
commit | 57a06745a48093c25d0f4729ccea41a918d6427d (patch) | |
tree | ac2568d5c98918d6364d2a9667c164cd3f3b3867 /src/bun.js/bindings/Process.cpp | |
parent | 4360ec83b4146e15344b304573795f084f86a7c2 (diff) | |
download | bun-57a06745a48093c25d0f4729ccea41a918d6427d.tar.gz bun-57a06745a48093c25d0f4729ccea41a918d6427d.tar.zst bun-57a06745a48093c25d0f4729ccea41a918d6427d.zip |
Progress for Next.js (#4468)
* L
* ipc
* asdfghjkl
* dfghjk
* it works!
* types
* patches for next.js
* sdfghj
* wsdfgn,./
* this
* yolo
* okay loser
* asdfghjk
* add some more APIs
* MESS
* sdfghjkl
* remove native events from streams
* stuff
* remove lazy(primordials) test
* debugging
* okay
* less fake extensions object
* fix `Buffer.toString()` args logic
* fix deserialize
* make tests work
* add test for `Buffer.toString` args
* Update server.zig
* remove test
* update test
* Update spawn-streaming-stdin.test.ts
* fix linux build
* Update fs.test.ts
* cli message improvements
* dfshaj
* Fix fs.watch bug maybe?
* remove
---------
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Diffstat (limited to 'src/bun.js/bindings/Process.cpp')
-rw-r--r-- | src/bun.js/bindings/Process.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/bun.js/bindings/Process.cpp b/src/bun.js/bindings/Process.cpp index 252d00075..282cf6460 100644 --- a/src/bun.js/bindings/Process.cpp +++ b/src/bun.js/bindings/Process.cpp @@ -76,7 +76,10 @@ extern "C" uint8_t Bun__getExitCode(void*); extern "C" uint8_t Bun__setExitCode(void*, uint8_t); extern "C" void* Bun__getVM(); extern "C" Zig::GlobalObject* Bun__getDefaultGlobal(); +extern "C" bool Bun__GlobalObject__hasIPC(JSGlobalObject*); extern "C" const char* Bun__githubURL; +extern "C" JSC_DECLARE_HOST_FUNCTION(Bun__Process__send); +extern "C" JSC_DECLARE_HOST_FUNCTION(Bun__Process__disconnect); static void dispatchExitInternal(JSC::JSGlobalObject* globalObject, Process* process, int exitCode) { @@ -525,6 +528,21 @@ static void loadSignalNumberMap() static void onDidChangeListeners(EventEmitter& eventEmitter, const Identifier& eventName, bool isAdded) { + if (eventName.string() == "message"_s) { + if (isAdded) { + if (Bun__GlobalObject__hasIPC(eventEmitter.scriptExecutionContext()->jsGlobalObject()) + && eventEmitter.listenerCount(eventName) == 1) { + eventEmitter.scriptExecutionContext()->refEventLoop(); + eventEmitter.m_hasIPCRef = true; + } + } else { + if (eventEmitter.listenerCount(eventName) == 0 && eventEmitter.m_hasIPCRef) { + eventEmitter.scriptExecutionContext()->unrefEventLoop(); + } + } + return; + } + loadSignalNumberMap(); static std::once_flag signalNumberToNameMapOnceFlag; @@ -739,6 +757,20 @@ JSC_DEFINE_CUSTOM_SETTER(setProcessExitCode, (JSC::JSGlobalObject * lexicalGloba return true; } +JSC_DEFINE_CUSTOM_GETTER(processConnected, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName name)) +{ + Process* process = jsDynamicCast<Process*>(JSValue::decode(thisValue)); + if (!process) { + return JSValue::encode(jsUndefined()); + } + + return JSValue::encode(jsBoolean(Bun__GlobalObject__hasIPC(process->globalObject()))); +} +JSC_DEFINE_CUSTOM_SETTER(setProcessConnected, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::EncodedJSValue value, JSC::PropertyName)) +{ + return false; +} + static JSValue constructVersions(VM& vm, JSObject* processObject) { auto* globalObject = processObject->globalObject(); @@ -912,6 +944,26 @@ static JSValue constructStdin(VM& vm, JSObject* processObject) RELEASE_AND_RETURN(scope, result); } +static JSValue constructProcessSend(VM& vm, JSObject* processObject) +{ + auto* globalObject = processObject->globalObject(); + if (Bun__GlobalObject__hasIPC(globalObject)) { + return JSC::JSFunction::create(vm, globalObject, 1, String("send"_s), Bun__Process__send, ImplementationVisibility::Public); + } else { + return jsNumber(4); + } +} + +static JSValue constructProcessDisconnect(VM& vm, JSObject* processObject) +{ + auto* globalObject = processObject->globalObject(); + if (Bun__GlobalObject__hasIPC(globalObject)) { + return JSC::JSFunction::create(vm, globalObject, 1, String("disconnect"_s), Bun__Process__disconnect, ImplementationVisibility::Public); + } else { + return jsUndefined(); + } +} + static JSValue constructPid(VM& vm, JSObject* processObject) { return jsNumber(getpid()); @@ -1687,6 +1739,29 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionKill, return JSValue::encode(jsUndefined()); } +extern "C" void Process__emitMessageEvent(Zig::GlobalObject* global, EncodedJSValue value) +{ + auto* process = static_cast<Process*>(global->processObject()); + auto& vm = global->vm(); + auto ident = Identifier::fromString(vm, "message"_s); + if (process->wrapped().hasEventListeners(ident)) { + JSC::MarkedArgumentBuffer args; + args.append(JSValue::decode(value)); + process->wrapped().emit(ident, args); + } +} + +extern "C" void Process__emitDisconnectEvent(Zig::GlobalObject* global) +{ + auto* process = static_cast<Process*>(global->processObject()); + auto& vm = global->vm(); + auto ident = Identifier::fromString(vm, "disconnect"_s); + if (process->wrapped().hasEventListeners(ident)) { + JSC::MarkedArgumentBuffer args; + process->wrapped().emit(ident, args); + } +} + /* Source for Process.lut.h @begin processObjectTable abort Process_functionAbort Function 1 @@ -1699,9 +1774,11 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionKill, browser constructBrowser PropertyCallback chdir Process_functionChdir Function 1 config constructProcessConfigObject PropertyCallback + connected processConnected CustomAccessor cpuUsage Process_functionCpuUsage Function 1 cwd Process_functionCwd Function 1 debugPort processDebugPort CustomAccessor + disconnect constructProcessDisconnect PropertyCallback dlopen Process_functionDlopen Function 1 emitWarning Process_emitWarning Function 1 env constructEnv PropertyCallback @@ -1731,6 +1808,7 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionKill, release constructProcessReleaseObject PropertyCallback revision constructRevision PropertyCallback setSourceMapsEnabled Process_stubEmptyFunction Function 1 + send constructProcessSend PropertyCallback stderr constructStderr PropertyCallback stdin constructStdin PropertyCallback stdout constructStdout PropertyCallback |