diff options
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index d54800ca6..b9f2e4e46 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -4036,12 +4036,24 @@ extern "C" void JSC__JSGlobalObject__queueMicrotaskCallback(Zig::GlobalObject* g globalObject->queueMicrotask(function, JSValue(bitwise_cast<double>(reinterpret_cast<uintptr_t>(ptr))), JSValue(bitwise_cast<double>(reinterpret_cast<uintptr_t>(callback))), jsUndefined(), jsUndefined()); } -JSC::Identifier GlobalObject::moduleLoaderResolve(JSGlobalObject* globalObject, +JSC::Identifier GlobalObject::moduleLoaderResolve(JSGlobalObject* jsGlobalObject, JSModuleLoader* loader, JSValue key, JSValue referrer, JSValue origin) { + Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(jsGlobalObject); + ErrorableString res; res.success = false; + + if (key.isString()) { + if (auto* virtualModules = globalObject->onLoadPlugins.virtualModules) { + auto keyString = key.toWTFString(globalObject); + if (virtualModules->contains(keyString)) { + return JSC::Identifier::fromString(globalObject->vm(), keyString); + } + } + } + BunString keyZ; if (key.isString()) { auto moduleName = jsCast<JSString*>(key)->value(globalObject); @@ -4077,18 +4089,32 @@ JSC::Identifier GlobalObject::moduleLoaderResolve(JSGlobalObject* globalObject, } } -JSC::JSInternalPromise* GlobalObject::moduleLoaderImportModule(JSGlobalObject* globalObject, +JSC::JSInternalPromise* GlobalObject::moduleLoaderImportModule(JSGlobalObject* jsGlobalObject, JSModuleLoader*, JSString* moduleNameValue, JSValue parameters, const SourceOrigin& sourceOrigin) { + auto* globalObject = reinterpret_cast<Zig::GlobalObject*>(jsGlobalObject); JSC::VM& vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); auto* promise = JSC::JSInternalPromise::create(vm, globalObject->internalPromiseStructure()); RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope)); + if (auto* virtualModules = globalObject->onLoadPlugins.virtualModules) { + auto keyString = moduleNameValue->value(globalObject); + if (virtualModules->contains(keyString)) { + auto resolvedIdentifier = JSC::Identifier::fromString(vm, keyString); + + auto result = JSC::importModule(globalObject, resolvedIdentifier, + JSC::jsUndefined(), parameters, JSC::jsUndefined()); + + RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope)); + return result; + } + } + auto sourceURL = sourceOrigin.url(); ErrorableString resolved; BunString moduleNameZ; |