From 7bf3cf999f32b0a61177f11dc8192129a23b3dba Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 21 Jul 2025 15:46:23 +0800 Subject: [PATCH] Allow scheme-only URLs new URL('sveltekit-internal://') is valid. Used by amazon. --- src/browser/url/url.zig | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/browser/url/url.zig b/src/browser/url/url.zig index 1b6e2c86..d935c3fb 100644 --- a/src/browser/url/url.zig +++ b/src/browser/url/url.zig @@ -89,7 +89,17 @@ pub const URL = struct { raw = if (url == .url) url_str else try arena.dupe(u8, url_str); } - const uri = std.Uri.parse(raw.?) catch return error.TypeError; + const uri = std.Uri.parse(raw.?) catch blk: { + if (!std.mem.endsWith(u8, raw.?, "://")) { + return error.TypeError; + } + // schema only is valid! + break :blk std.Uri{ + .scheme = raw.?[0..raw.?.len - 3], + .host = .{.percent_encoded = ""}, + }; + }; + return init(arena, uri); } @@ -558,6 +568,14 @@ test "Browser.URL" { .{ "var url = new URL('over?9000', 'https://lightpanda.io')", null }, .{ "url.href", "https://lightpanda.io/over?9000" }, }, .{}); + + try runner.testCases(&.{ + .{ "let sk = new URL('sveltekit-internal://')", null }, + .{ "sk.protocol", "sveltekit-internal:"}, + .{ "sk.host", ""}, + .{ "sk.hostname", ""}, + .{ "sk.href", "sveltekit-internal://"} + }, .{}); } test "Browser.URLSearchParams" {