diff options
author | 2023-07-24 19:32:04 -0700 | |
---|---|---|
committer | 2023-07-24 19:32:04 -0700 | |
commit | 8a0152e1290658d8167609cb23a7d19817ad4285 (patch) | |
tree | 3ec808e103ed2c360a038c2a22c6b7161bd4adb7 /src/bun.js/bindings/ModuleLoader.cpp | |
parent | 1f1d0bfcfbc839cad76c9bc2d644bfa8bd299a1a (diff) | |
download | bun-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.cpp | 29 |
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))); |