fix: add `has(name, value)` overload for URLSearchParams (#15076)
authorRory Duncan <RoryDuncan@users.noreply.github.com>
Tue, 6 Jan 2026 03:13:33 +0000 (19:13 -0800)
committerGitHub <noreply@github.com>
Tue, 6 Jan 2026 03:13:33 +0000 (11:13 +0800)
* Add support for SearchParams.has(name, value) overload

* generate changeset

* Update .changeset/sharp-tires-work.md

---------

Co-authored-by: Elliott Johnson <hello@ell.iott.dev>
Co-authored-by: Elliott Johnson <elliott.johnson@vercel.com>
.changeset/sharp-tires-work.md [new file with mode: 0644]
packages/kit/src/utils/url.js
packages/kit/src/utils/url.spec.js

diff --git a/.changeset/sharp-tires-work.md b/.changeset/sharp-tires-work.md
new file mode 100644 (file)
index 0000000..4e5124f
--- /dev/null
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+fix: support for `URLSearchParams.has(name, value)` overload
index 7ea2c9d100f10b8427459d8da03c560dd3647259..43713a4f99fa1820796fbbb0af7309b10d6e5987 100644 (file)
@@ -98,9 +98,9 @@ export function make_trackable(url, callback, search_params_callback, allow_hash
                value: new Proxy(tracked.searchParams, {
                        get(obj, key) {
                                if (key === 'get' || key === 'getAll' || key === 'has') {
-                                       return (/**@type {string}*/ param) => {
+                                       return (/** @type {string} */ param, /** @type {string[]} */ ...rest) => {
                                                search_params_callback(param);
-                                               return obj[key](param);
+                                               return obj[key](param, ...rest);
                                        };
                                }
 
index 55865c413468ebb2cd4702908754c6f15ca60785..4ad5244833f2802b277c26bc91ab2318a381440b 100644 (file)
@@ -172,6 +172,29 @@ describe('make_trackable', (test) => {
                url.searchParams.entries();
                assert.ok(tracked);
        });
+
+       test('tracks search params when using has(name, value) overload', () => {
+               let tracked = false;
+               const tracked_search_params = new Set();
+               const url = make_trackable(
+                       new URL('https://svelte.dev/docs/kit?foo=1&foo=2'),
+                       () => {
+                               tracked = true;
+                       },
+                       (search_param) => {
+                               tracked_search_params.add(search_param);
+                       }
+               );
+
+               // has(name, value) should track the param and return correct result
+               assert.equal(url.searchParams.has('foo', '1'), true);
+               assert.ok(!tracked);
+               assert.ok(tracked_search_params.has('foo'));
+
+               // value argument should be forwarded correctly (not just checking name existence)
+               assert.equal(url.searchParams.has('foo', '3'), false);
+               assert.ok(!tracked);
+       });
 });
 
 describe('disable_search', (test) => {