From b41c86e104347d62752749bd6055ed21fb7c5ac0 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 31 Mar 2026 16:01:08 +0300 Subject: [PATCH 1/2] `URLSearchParams`: support passing arrays to constructor --- src/browser/webapi/net/URLSearchParams.zig | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/browser/webapi/net/URLSearchParams.zig b/src/browser/webapi/net/URLSearchParams.zig index cf13b81e..a4de0f82 100644 --- a/src/browser/webapi/net/URLSearchParams.zig +++ b/src/browser/webapi/net/URLSearchParams.zig @@ -46,6 +46,10 @@ pub fn init(opts_: ?InitOpts, page: *Page) !*URLSearchParams { .query_string => |qs| break :blk try paramsFromString(arena, qs, &page.buf), .form_data => |fd| break :blk try KeyValueList.copy(arena, fd._list), .value => |js_val| { + // Order matters here; Array is also an Object. + if (js_val.isArray()) { + break :blk try paramsFromArray(arena, js_val.toArray()); + } if (js_val.isObject()) { break :blk try KeyValueList.fromJsObject(arena, js_val.toObject(), null, page); } @@ -134,6 +138,37 @@ pub fn sort(self: *URLSearchParams) void { }.cmp); } +fn paramsFromArray(allocator: Allocator, array: js.Array) !KeyValueList { + const array_len = array.len(); + if (array_len == 0) { + return .empty; + } + + var params = KeyValueList.init(); + try params.ensureTotalCapacity(allocator, array_len); + // TODO: Release `params` on error. + + var i: u32 = 0; + while (i < array_len) : (i += 1) { + const item = try array.get(i); + if (!item.isArray()) return error.InvalidArgument; + + const as_array = item.toArray(); + // Need 2 items for KV. + if (as_array.len() != 2) return error.InvalidArgument; + + const name_val = try as_array.get(0); + const value_val = try as_array.get(1); + + params._entries.appendAssumeCapacity(.{ + .name = try name_val.toSSOWithAlloc(allocator), + .value = try value_val.toSSOWithAlloc(allocator), + }); + } + + return params; +} + fn paramsFromString(allocator: Allocator, input_: []const u8, buf: []u8) !KeyValueList { if (input_.len == 0) { return .empty; From 94b003804b165f7dbabc9c469bafb615cba7bf0e Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 31 Mar 2026 16:01:21 +0300 Subject: [PATCH 2/2] `URLSearchParams`: update tests --- src/browser/tests/net/url_search_params.html | 50 +++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/browser/tests/net/url_search_params.html b/src/browser/tests/net/url_search_params.html index 74d7c03b..039fa161 100644 --- a/src/browser/tests/net/url_search_params.html +++ b/src/browser/tests/net/url_search_params.html @@ -20,8 +20,8 @@ + + + + + + + + + +