diff options
author | 2022-09-03 21:48:06 -0700 | |
---|---|---|
committer | 2022-09-03 21:48:06 -0700 | |
commit | 04cc1968dbe7947b63b93d800ecc1747dc11eb5f (patch) | |
tree | 136f3d7f45c5df03befdf0caa4b311fc0bcf6ea1 /src/bun.js/bindings/ImportMetaObject.cpp | |
parent | 4891be8d0d551fb4ee12510f63fed592f8bd8fc2 (diff) | |
download | bun-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.cpp | 19 |
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); |