aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ImportMetaObject.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-03 21:48:06 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-03 21:48:06 -0700
commit04cc1968dbe7947b63b93d800ecc1747dc11eb5f (patch)
tree136f3d7f45c5df03befdf0caa4b311fc0bcf6ea1 /src/bun.js/bindings/ImportMetaObject.cpp
parent4891be8d0d551fb4ee12510f63fed592f8bd8fc2 (diff)
downloadbun-04cc1968dbe7947b63b93d800ecc1747dc11eb5f.tar.gz
bun-04cc1968dbe7947b63b93d800ecc1747dc11eb5f.tar.zst
bun-04cc1968dbe7947b63b93d800ecc1747dc11eb5f.zip
Fix `createRequire()` in `node:module`
Fixes https://github.com/oven-sh/bun/issues/831 Fixes https://github.com/oven-sh/bun/issues/453
Diffstat (limited to 'src/bun.js/bindings/ImportMetaObject.cpp')
-rw-r--r--src/bun.js/bindings/ImportMetaObject.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ImportMetaObject.cpp b/src/bun.js/bindings/ImportMetaObject.cpp
index 67ca4acc6..ba1617aa4 100644
--- a/src/bun.js/bindings/ImportMetaObject.cpp
+++ b/src/bun.js/bindings/ImportMetaObject.cpp
@@ -35,6 +35,7 @@
#include "JSBufferConstructorBuiltins.h"
#include "JavaScriptCore/JSBase.h"
+#include "JSDOMURL.h"
#include "JavaScriptCore/JSNativeStdFunction.h"
namespace Zig {
@@ -133,6 +134,24 @@ JSC_DEFINE_CUSTOM_GETTER(functionRequireResolveLazyGetter,
return JSValue::encode(JSValue(resolverFunction));
}
+Zig::ImportMetaObject* Zig::ImportMetaObject::create(JSC::JSGlobalObject* globalObject, JSValue key)
+{
+ if (WebCore::DOMURL* domURL = WebCoreCast<WebCore::JSDOMURL, WebCore__DOMURL>(JSValue::encode(key))) {
+ return create(globalObject, JSC::jsString(globalObject->vm(), domURL->href().fileSystemPath()));
+ }
+
+ auto* keyString = key.toStringOrNull(globalObject);
+ if (UNLIKELY(!keyString)) {
+ return nullptr;
+ }
+
+ if (keyString->value(globalObject).startsWith("file://"_s)) {
+ return create(globalObject, JSC::jsString(globalObject->vm(), WTF::URL(keyString->value(globalObject)).fileSystemPath()));
+ }
+
+ return create(globalObject, keyString);
+}
+
JSObject* Zig::ImportMetaObject::createRequireFunction(VM& vm, JSGlobalObject* globalObject, WTF::String& pathString)
{
JSFunction* requireFunction = JSFunction::create(vm, importMetaObjectRequireCodeGenerator(vm), globalObject);