diff --git a/.changeset/sharp-tires-work.md b/.changeset/sharp-tires-work.md new file mode 100644 index 000000000000..4e5124f78c18 --- /dev/null +++ b/.changeset/sharp-tires-work.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: support for `URLSearchParams.has(name, value)` overload diff --git a/packages/kit/src/utils/url.js b/packages/kit/src/utils/url.js index 7ea2c9d100f1..43713a4f99fa 100644 --- a/packages/kit/src/utils/url.js +++ b/packages/kit/src/utils/url.js @@ -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); }; } diff --git a/packages/kit/src/utils/url.spec.js b/packages/kit/src/utils/url.spec.js index 55865c413468..4ad5244833f2 100644 --- a/packages/kit/src/utils/url.spec.js +++ b/packages/kit/src/utils/url.spec.js @@ -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) => {