From 7808d12de2fee23ddcfb43cf29ff5fa268a2046c Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Thu, 23 Oct 2025 13:30:39 +0300 Subject: [PATCH 1/2] add `URL.canParse` static method --- src/browser/url/url.zig | 12 ++++++++++++ vendor/ada/root.zig | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/src/browser/url/url.zig b/src/browser/url/url.zig index 9229a23d..ee36b25c 100644 --- a/src/browser/url/url.zig +++ b/src/browser/url/url.zig @@ -132,6 +132,18 @@ pub const URL = struct { return ada.clearHash(self.internal); } + /// Returns a boolean indicating whether or not an absolute URL, + /// or a relative URL combined with a base URL, are parsable and valid. + pub fn static_canParse(url: ConstructorArg, maybe_base: ?ConstructorArg, page: *Page) !bool { + const url_str = try url.toString(page); + + if (maybe_base) |base| { + return ada.canParseWithBase(url_str, try base.toString(page)); + } + + return ada.canParse(url_str); + } + /// Alias to get_href. pub fn _toString(self: *const URL, page: *Page) ![]const u8 { return self.get_href(page); diff --git a/vendor/ada/root.zig b/vendor/ada/root.zig index da281068..1d43373d 100644 --- a/vendor/ada/root.zig +++ b/vendor/ada/root.zig @@ -33,6 +33,14 @@ pub fn parseWithBase(input: []const u8, base: []const u8) ParseError!URL { return url; } +pub inline fn canParse(input: []const u8) bool { + return c.ada_can_parse(input.ptr, input.len); +} + +pub inline fn canParseWithBase(input: []const u8, base: []const u8) bool { + return c.ada_can_parse_with_base(input.ptr, input.len, base.ptr, base.len); +} + pub inline fn getComponents(url: URL) *const URLComponents { return c.ada_get_components(url); } From 2e6ec1e23b4274810aae260309274ae3b2d4f688 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Thu, 23 Oct 2025 13:31:01 +0300 Subject: [PATCH 2/2] add `URL.canParse` test --- src/tests/url/url.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/tests/url/url.html b/src/tests/url/url.html index 9083bdd1..ef770e46 100644 --- a/src/tests/url/url.html +++ b/src/tests/url/url.html @@ -99,3 +99,11 @@ _ = new URL("://foo.bar/path?query#fragment"); }); + +