From 04cc1968dbe7947b63b93d800ecc1747dc11eb5f Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Sat, 3 Sep 2022 21:48:06 -0700 Subject: Fix `createRequire()` in `node:module` Fixes https://github.com/oven-sh/bun/issues/831 Fixes https://github.com/oven-sh/bun/issues/453 --- src/bun.js/bindings/ImportMetaObject.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/bun.js/bindings/ImportMetaObject.cpp') 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(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); -- cgit v1.2.3