aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/bindings/BunString.cpp11
-rw-r--r--src/bun.js/bindings/bindings.zig9
2 files changed, 20 insertions, 0 deletions
diff --git a/src/bun.js/bindings/BunString.cpp b/src/bun.js/bindings/BunString.cpp
index 8c5a1e66b..416d5d334 100644
--- a/src/bun.js/bindings/BunString.cpp
+++ b/src/bun.js/bindings/BunString.cpp
@@ -381,6 +381,17 @@ extern "C" BunString URL__getHref(BunString* input)
return Bun::toStringRef(url.string());
}
+extern "C" BunString URL__getHrefJoin(BunString* baseStr, BunString *relativeStr)
+{
+ auto base = Bun::toWTFString(*baseStr);
+ auto relative = Bun::toWTFString(*relativeStr);
+ auto url = WTF::URL(WTF::URL(base), relative);
+ if (!url.isValid() || url.isEmpty())
+ return { BunStringTag::Dead };
+
+ return Bun::toStringRef(url.string());
+}
+
extern "C" WTF::URL* URL__fromString(BunString* input)
{
auto&& str = Bun::toWTFString(*input);
diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig
index 870b78738..6729ab9ab 100644
--- a/src/bun.js/bindings/bindings.zig
+++ b/src/bun.js/bindings/bindings.zig
@@ -5480,12 +5480,21 @@ pub const URL = opaque {
extern fn URL__getHrefFromJS(JSValue, *JSC.JSGlobalObject) String;
extern fn URL__getHref(*String) String;
extern fn URL__getFileURLString(*String) String;
+ extern fn URL__getHrefJoin(*String, *String) String;
+
pub fn hrefFromString(str: bun.String) String {
JSC.markBinding(@src());
var input = str;
return URL__getHref(&input);
}
+ pub fn join(base: bun.String, relative: bun.String) String {
+ JSC.markBinding(@src());
+ var base_str = base;
+ var relative_str = relative;
+ return URL__getHrefJoin(&base_str, &relative_str);
+ }
+
pub fn fileURLFromString(str: bun.String) String {
JSC.markBinding(@src());
var input = str;