aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ModuleLoader.cpp
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-07-24 19:32:04 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-24 19:32:04 -0700
commit8a0152e1290658d8167609cb23a7d19817ad4285 (patch)
tree3ec808e103ed2c360a038c2a22c6b7161bd4adb7 /src/bun.js/bindings/ModuleLoader.cpp
parent1f1d0bfcfbc839cad76c9bc2d644bfa8bd299a1a (diff)
downloadbun-8a0152e1290658d8167609cb23a7d19817ad4285.tar.gz
bun-8a0152e1290658d8167609cb23a7d19817ad4285.tar.zst
bun-8a0152e1290658d8167609cb23a7d19817ad4285.zip
Merge import.meta.require and require to be the same thing (#3732)
* Merge import.meta.require and require to be the same thing * support `require` and BunPlugin (runtime plugin) * plugins * unused code * revert launch.json
Diffstat (limited to 'src/bun.js/bindings/ModuleLoader.cpp')
-rw-r--r--src/bun.js/bindings/ModuleLoader.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/bun.js/bindings/ModuleLoader.cpp b/src/bun.js/bindings/ModuleLoader.cpp
index 62d73eb75..ac5ca0b91 100644
--- a/src/bun.js/bindings/ModuleLoader.cpp
+++ b/src/bun.js/bindings/ModuleLoader.cpp
@@ -420,9 +420,32 @@ JSValue fetchCommonJSModule(
}
}
- // if (JSC::JSValue virtualModuleResult = JSValue::decode(Bun__runVirtualModule(globalObject, specifier))) {
- // return handleVirtualModuleResult<allowPromise>(globalObject, virtualModuleResult, res, specifier, referrer);
- // }
+ if (JSC::JSValue virtualModuleResult = JSValue::decode(Bun__runVirtualModule(globalObject, specifier))) {
+ JSPromise* promise = jsCast<JSPromise*>(handleVirtualModuleResult<true>(globalObject, virtualModuleResult, res, specifier, referrer));
+ switch (promise->status(vm)) {
+ case JSPromise::Status::Rejected: {
+ uint32_t promiseFlags = promise->internalField(JSPromise::Field::Flags).get().asUInt32AsAnyInt();
+ promise->internalField(JSPromise::Field::Flags).set(vm, promise, jsNumber(promiseFlags | JSPromise::isHandledFlag));
+ JSC::throwException(globalObject, scope, promise->result(vm));
+ RELEASE_AND_RETURN(scope, JSValue {});
+ }
+ case JSPromise::Status::Pending: {
+ JSC::throwTypeError(globalObject, scope, makeString("require() async module \""_s, Bun::toWTFString(*specifier), "\" is unsupported. use \"await import()\" instead."_s));
+ RELEASE_AND_RETURN(scope, JSValue {});
+ }
+ case JSPromise::Status::Fulfilled: {
+ if (!res->success) {
+ throwException(scope, res->result.err, globalObject);
+ RELEASE_AND_RETURN(scope, {});
+ }
+ auto* jsSourceCode = jsCast<JSSourceCode*>(promise->result(vm));
+ globalObject->moduleLoader()->provideFetch(globalObject, specifierValue, jsSourceCode->sourceCode());
+ RETURN_IF_EXCEPTION(scope, {});
+ RELEASE_AND_RETURN(scope, jsNumber(-1));
+ }
+ }
+ }
+
auto* loader = globalObject->moduleLoader();
JSMap* registry = jsCast<JSMap*>(loader->getDirect(vm, Identifier::fromString(vm, "registry"_s)));