diff options
author | 2023-09-29 16:34:20 -0700 | |
---|---|---|
committer | 2023-09-29 16:34:20 -0700 | |
commit | a97847a49475e774695c38cff07a71eadf608c05 (patch) | |
tree | 26867f9be2eddaa0b752189a27810ed4db6ed902 /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | eddb0078b5c9ff49bf67c0f1b1c2c623f0480b77 (diff) | |
download | bun-a97847a49475e774695c38cff07a71eadf608c05.tar.gz bun-a97847a49475e774695c38cff07a71eadf608c05.tar.zst bun-a97847a49475e774695c38cff07a71eadf608c05.zip |
Implement virtual module support in `Bun.plugin` (#6167)
* Add support for `build.module` in `Bun.plugin`
* Another test
* Update docs
* Update isBuiltinModule.cpp
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
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; |