mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
framework api: init / work in progress (#13215)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
This commit is contained in:
82
src/kit/KitDevGlobalObject.cpp
Normal file
82
src/kit/KitDevGlobalObject.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "KitDevGlobalObject.h"
|
||||
#include "JavaScriptCore/GlobalObjectMethodTable.h"
|
||||
#include "JSNextTickQueue.h"
|
||||
#include "headers-handwritten.h"
|
||||
|
||||
namespace Kit {
|
||||
|
||||
#define INHERIT_HOOK_METHOD(name) Zig::GlobalObject::s_globalObjectMethodTable. name
|
||||
|
||||
const JSC::GlobalObjectMethodTable DevGlobalObject::s_globalObjectMethodTable = {
|
||||
INHERIT_HOOK_METHOD(supportsRichSourceInfo),
|
||||
INHERIT_HOOK_METHOD(shouldInterruptScript),
|
||||
INHERIT_HOOK_METHOD(javaScriptRuntimeFlags),
|
||||
INHERIT_HOOK_METHOD(queueMicrotaskToEventLoop),
|
||||
INHERIT_HOOK_METHOD(shouldInterruptScriptBeforeTimeout),
|
||||
INHERIT_HOOK_METHOD(moduleLoaderImportModule),
|
||||
INHERIT_HOOK_METHOD(moduleLoaderResolve),
|
||||
INHERIT_HOOK_METHOD(moduleLoaderFetch),
|
||||
INHERIT_HOOK_METHOD(moduleLoaderCreateImportMetaProperties),
|
||||
INHERIT_HOOK_METHOD(moduleLoaderEvaluate),
|
||||
INHERIT_HOOK_METHOD(promiseRejectionTracker),
|
||||
INHERIT_HOOK_METHOD(reportUncaughtExceptionAtEventLoop),
|
||||
INHERIT_HOOK_METHOD(currentScriptExecutionOwner),
|
||||
INHERIT_HOOK_METHOD(scriptExecutionStatus),
|
||||
INHERIT_HOOK_METHOD(reportViolationForUnsafeEval),
|
||||
INHERIT_HOOK_METHOD(defaultLanguage),
|
||||
INHERIT_HOOK_METHOD(compileStreaming),
|
||||
INHERIT_HOOK_METHOD(instantiateStreaming),
|
||||
INHERIT_HOOK_METHOD(deriveShadowRealmGlobalObject),
|
||||
INHERIT_HOOK_METHOD(codeForEval),
|
||||
INHERIT_HOOK_METHOD(canCompileStrings),
|
||||
};
|
||||
|
||||
DevGlobalObject* DevGlobalObject::create(JSC::VM& vm, JSC::Structure* structure, const JSC::GlobalObjectMethodTable* methodTable)
|
||||
{
|
||||
DevGlobalObject* ptr = new (NotNull, JSC::allocateCell<DevGlobalObject>(vm)) DevGlobalObject(vm, structure, methodTable);
|
||||
ptr->finishCreation(vm);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void DevGlobalObject::finishCreation(JSC::VM &vm) {
|
||||
Base::finishCreation(vm);
|
||||
ASSERT(inherits(info()));
|
||||
}
|
||||
|
||||
extern "C" BunVirtualMachine* Bun__getVM();
|
||||
|
||||
// A lot of this function is taken from 'Zig__GlobalObject__create'
|
||||
extern "C" DevGlobalObject* KitCreateDevGlobal(DevServer* owner, void* console) {
|
||||
JSC::VM& vm = JSC::VM::create(JSC::HeapType::Large).leakRef();
|
||||
vm.heap.acquireAccess();
|
||||
JSC::JSLockHolder locker(vm);
|
||||
BunVirtualMachine* bunVM = Bun__getVM();
|
||||
WebCore::JSVMClientData::create(&vm, bunVM);
|
||||
|
||||
JSC::Structure* structure = DevGlobalObject::createStructure(vm);
|
||||
DevGlobalObject* global = DevGlobalObject::create(vm, structure, &DevGlobalObject::s_globalObjectMethodTable);
|
||||
if (!global)
|
||||
BUN_PANIC("Failed to create DevGlobalObject");
|
||||
|
||||
global->m_devServer = owner;
|
||||
global->m_bunVM = bunVM;
|
||||
|
||||
JSC::gcProtect(global);
|
||||
|
||||
global->setConsole(console);
|
||||
global->setStackTraceLimit(10); // Node.js defaults to 10
|
||||
|
||||
// vm.setOnComputeErrorInfo(computeErrorInfoWrapper);
|
||||
vm.setOnEachMicrotaskTick([global](JSC::VM& vm) -> void {
|
||||
if (auto nextTickQueue = global->m_nextTickQueue.get()) {
|
||||
global->resetOnEachMicrotaskTick();
|
||||
Bun::JSNextTickQueue* queue = jsCast<Bun::JSNextTickQueue*>(nextTickQueue);
|
||||
queue->drain(vm, global);
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
return global;
|
||||
}
|
||||
|
||||
}; // namespace Kit
|
||||
Reference in New Issue
Block a user