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/ImportMetaObject.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/ImportMetaObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ImportMetaObject.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ImportMetaObject.cpp b/src/bun.js/bindings/ImportMetaObject.cpp index 4160102a5..340c3319b 100644 --- a/src/bun.js/bindings/ImportMetaObject.cpp +++ b/src/bun.js/bindings/ImportMetaObject.cpp @@ -64,6 +64,12 @@ static EncodedJSValue functionRequireResolve(JSC::JSGlobalObject* globalObject, JSC::JSValue moduleName = callFrame->argument(0); auto doIt = [&](const WTF::String& fromStr) -> JSC::EncodedJSValue { + if (auto* virtualModules = jsCast<Zig::GlobalObject*>(globalObject)->onLoadPlugins.virtualModules) { + if (virtualModules->contains(fromStr)) { + return JSC::JSValue::encode(jsString(vm, fromStr)); + } + } + BunString from = Bun::toString(fromStr); auto result = Bun__resolveSyncWithSource(globalObject, JSC::JSValue::encode(moduleName), &from, false); @@ -160,6 +166,14 @@ extern "C" EncodedJSValue functionImportMeta__resolveSync(JSC::JSGlobalObject* g JSC__JSValue from; bool isESM = true; + if (auto* virtualModules = jsCast<Zig::GlobalObject*>(globalObject)->onLoadPlugins.virtualModules) { + if (moduleName.isString()) { + if (virtualModules->contains(moduleName.toWTFString(globalObject))) { + return JSC::JSValue::encode(moduleName); + } + } + } + if (callFrame->argumentCount() > 1) { if (callFrame->argumentCount() > 2) { @@ -226,6 +240,7 @@ extern "C" EncodedJSValue functionImportMeta__resolveSyncPrivate(JSC::JSGlobalOb { JSC::VM& vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); + auto* global = jsDynamicCast<Zig::GlobalObject*>(globalObject); JSC::JSValue moduleName = callFrame->argument(0); JSValue from = callFrame->argument(1); @@ -239,8 +254,15 @@ extern "C" EncodedJSValue functionImportMeta__resolveSyncPrivate(JSC::JSGlobalOb RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::JSValue {})); + if (auto* virtualModules = global->onLoadPlugins.virtualModules) { + if (moduleName.isString()) { + if (virtualModules->contains(moduleName.toWTFString(globalObject))) { + return JSC::JSValue::encode(moduleName); + } + } + } + if (!isESM) { - auto* global = jsDynamicCast<Zig::GlobalObject*>(globalObject); if (LIKELY(global)) { auto overrideHandler = global->m_nodeModuleOverriddenResolveFilename.get(); if (UNLIKELY(overrideHandler)) { @@ -289,6 +311,14 @@ JSC_DEFINE_HOST_FUNCTION(functionImportMeta__resolve, JSC__JSValue from; + if (auto* virtualModules = jsCast<Zig::GlobalObject*>(globalObject)->onLoadPlugins.virtualModules) { + if (moduleName.isString()) { + if (virtualModules->contains(moduleName.toWTFString(globalObject))) { + return JSC::JSValue::encode(moduleName); + } + } + } + if (callFrame->argumentCount() > 1 && callFrame->argument(1).isString()) { from = JSC::JSValue::encode(callFrame->argument(1)); } else { |