diff options
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index a7d2bb7e5..d54800ca6 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -4042,10 +4042,27 @@ JSC::Identifier GlobalObject::moduleLoaderResolve(JSGlobalObject* globalObject, { ErrorableString res; res.success = false; - BunString keyZ = Bun::toString(globalObject, key); - BunString referrerZ = referrer && !referrer.isUndefinedOrNull() && referrer.isString() ? Bun::toString(globalObject, referrer) : BunStringEmpty; + BunString keyZ; + if (key.isString()) { + auto moduleName = jsCast<JSString*>(key)->value(globalObject); + if (moduleName.startsWith("file://"_s)) { + auto url = WTF::URL(moduleName); + if (url.isValid() && !url.isEmpty()) { + keyZ = Bun::toStringRef(url.fileSystemPath()); + } else { + keyZ = Bun::toStringRef(moduleName); + } + } else { + keyZ = Bun::toStringRef(moduleName); + } + } else { + keyZ = Bun::toStringRef(globalObject, key); + } + BunString referrerZ = referrer && !referrer.isUndefinedOrNull() && referrer.isString() ? Bun::toStringRef(globalObject, referrer) : BunStringEmpty; ZigString queryString = { 0, 0 }; Zig__GlobalObject__resolve(&res, globalObject, &keyZ, &referrerZ, &queryString); + keyZ.deref(); + referrerZ.deref(); if (res.success) { if (queryString.len > 0) { @@ -4074,11 +4091,32 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderImportModule(JSGlobalObject* g auto sourceURL = sourceOrigin.url(); ErrorableString resolved; - auto moduleNameZ = Bun::toString(globalObject, moduleNameValue); - auto sourceOriginZ = sourceURL.isEmpty() ? BunStringCwd : Bun::toString(sourceURL.fileSystemPath()); + BunString moduleNameZ; + + auto moduleName = moduleNameValue->value(globalObject); +#if BUN_DEBUG + auto startRefCount = moduleName.impl()->refCount(); +#endif + if (moduleName.startsWith("file://"_s)) { + auto url = WTF::URL(moduleName); + if (url.isValid() && !url.isEmpty()) { + moduleNameZ = Bun::toStringRef(url.fileSystemPath()); + } else { + moduleNameZ = Bun::toStringRef(moduleName); + } + } else { + moduleNameZ = Bun::toStringRef(moduleName); + } + auto sourceOriginZ = sourceURL.isEmpty() ? BunStringCwd : Bun::toStringRef(sourceURL.fileSystemPath()); ZigString queryString = { 0, 0 }; resolved.success = false; Zig__GlobalObject__resolve(&resolved, globalObject, &moduleNameZ, &sourceOriginZ, &queryString); + moduleNameZ.deref(); + sourceOriginZ.deref(); +#if BUN_DEBUG + // TODO: ASSERT doesnt work right now + RELEASE_ASSERT(startRefCount == moduleName.impl()->refCount()); +#endif if (!resolved.success) { throwException(scope, resolved.result.err, globalObject); return promise->rejectWithCaughtException(globalObject, scope); |