Fix searchParams.set duplicate updates#18336
Conversation
🦋 Changeset detectedLatest commit: a4f62cb The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
| */ | ||
| set(name, value) { | ||
| var previous = super.getAll(name).join(''); | ||
| var previous = super.getAll(name); |
There was a problem hiding this comment.
| var previous = super.getAll(name); | |
| var previous = super.getAll(name).join(','); |
There was a problem hiding this comment.
I think keeping the element-wise comparison avoids another collision case: new URLSearchParams('a=a&a=b') followed by set('a', 'a,b') changes the query string to a=a%2Cb, but both sides of join(',') are a,b. I added a regression test for that case in cb2d87a.
There was a problem hiding this comment.
Ah, silly me — I thought the comma would be encoded in that case
| var current = super.getAll(name); | ||
| if (previous.length !== current.length || previous.some((value, i) => value !== current[i])) { |
There was a problem hiding this comment.
| var current = super.getAll(name); | |
| if (previous.length !== current.length || previous.some((value, i) => value !== current[i])) { | |
| if (previous !== super.getAll(name).join(',')) { |
There was a problem hiding this comment.
Same concern here: the comma-joined comparison would miss the a=a&a=b -> a=a%2Cb transition. The added test covers that edge case, so I kept the element-wise comparison.
Rich-Harris
left a comment
There was a problem hiding this comment.
Thanks — I think we can fix this more simply by just joining on "," instead of the empty string?
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.56.1 ### Patch Changes - fix: error at compile time on duplicate snippet/declaration tag definitions ([#18351](#18351)) - fix: parse declaration tag contents more robustly ([#18353](#18353)) - fix: correctly transform references to earlier declarators in a declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`) ([#18348](#18348)) - fix: avoid spurious `state_referenced_locally` warnings for `$derived` declarations in declaration tags ([#18348](#18348)) - fix: tolerate whitespace before `let`/`const` in declaration tags ([#18348](#18348)) - fix: prevent infinite loop when a tag's expression ends with a trailing `/` at the end of the input ([#18350](#18350)) - fix: more robust parsing of declaration tags with regards to `type` ([#18330](#18330)) - fix: preserve newlines in spread input values when the `type` attribute is applied after `value` ([#18345](#18345)) - fix: update `SvelteURLSearchParams` when setting duplicate keys to the same joined value ([#18336](#18336)) - fix: check references for blockers on server, too ([#18352](#18352)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [svelte](https://svelte.dev) ([source](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte)) | [`5.56.0` → `5.56.1`](https://renovatebot.com/diffs/npm/svelte/5.56.0/5.56.1) |  |  | --- ### Release Notes <details> <summary>sveltejs/svelte (svelte)</summary> ### [`v5.56.1`](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5561) [Compare Source](https://github.com/sveltejs/svelte/compare/svelte@5.56.0...svelte@5.56.1) ##### Patch Changes - fix: error at compile time on duplicate snippet/declaration tag definitions ([#​18351](sveltejs/svelte#18351)) - fix: parse declaration tag contents more robustly ([#​18353](sveltejs/svelte#18353)) - fix: correctly transform references to earlier declarators in a declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`) ([#​18348](sveltejs/svelte#18348)) - fix: avoid spurious `state_referenced_locally` warnings for `$derived` declarations in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: tolerate whitespace before `let`/`const` in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: prevent infinite loop when a tag's expression ends with a trailing `/` at the end of the input ([#​18350](sveltejs/svelte#18350)) - fix: more robust parsing of declaration tags with regards to `type` ([#​18330](sveltejs/svelte#18330)) - fix: preserve newlines in spread input values when the `type` attribute is applied after `value` ([#​18345](sveltejs/svelte#18345)) - fix: update `SvelteURLSearchParams` when setting duplicate keys to the same joined value ([#​18336](sveltejs/svelte#18336)) - fix: check references for blockers on server, too ([#​18352](sveltejs/svelte#18352)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled because a matching PR was automerged previously. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: huskas-2189 <huskas-2189@noreply.codeberg.org> Reviewed-on: https://codeberg.org/huskas-2189/Bookmark/pulls/82
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [svelte](https://svelte.dev) ([source](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte)) | [`5.56.0` → `5.56.1`](https://renovatebot.com/diffs/npm/svelte/5.56.0/5.56.1) |  |  | --- ### Release Notes <details> <summary>sveltejs/svelte (svelte)</summary> ### [`v5.56.1`](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5561) [Compare Source](https://github.com/sveltejs/svelte/compare/svelte@5.56.0...svelte@5.56.1) ##### Patch Changes - fix: error at compile time on duplicate snippet/declaration tag definitions ([#​18351](sveltejs/svelte#18351)) - fix: parse declaration tag contents more robustly ([#​18353](sveltejs/svelte#18353)) - fix: correctly transform references to earlier declarators in a declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`) ([#​18348](sveltejs/svelte#18348)) - fix: avoid spurious `state_referenced_locally` warnings for `$derived` declarations in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: tolerate whitespace before `let`/`const` in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: prevent infinite loop when a tag's expression ends with a trailing `/` at the end of the input ([#​18350](sveltejs/svelte#18350)) - fix: more robust parsing of declaration tags with regards to `type` ([#​18330](sveltejs/svelte#18330)) - fix: preserve newlines in spread input values when the `type` attribute is applied after `value` ([#​18345](sveltejs/svelte#18345)) - fix: update `SvelteURLSearchParams` when setting duplicate keys to the same joined value ([#​18336](sveltejs/svelte#18336)) - fix: check references for blockers on server, too ([#​18352](sveltejs/svelte#18352)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled because a matching PR was automerged previously. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: huskas-2189 <huskas-2189@noreply.codeberg.org> Reviewed-on: https://codeberg.org/huskas-2189/Bookmark/pulls/82
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [svelte](https://svelte.dev) ([source](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte)) | [`5.56.0` → `5.56.1`](https://renovatebot.com/diffs/npm/svelte/5.56.0/5.56.1) |  |  | --- ### Release Notes <details> <summary>sveltejs/svelte (svelte)</summary> ### [`v5.56.1`](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5561) [Compare Source](https://github.com/sveltejs/svelte/compare/svelte@5.56.0...svelte@5.56.1) ##### Patch Changes - fix: error at compile time on duplicate snippet/declaration tag definitions ([#​18351](sveltejs/svelte#18351)) - fix: parse declaration tag contents more robustly ([#​18353](sveltejs/svelte#18353)) - fix: correctly transform references to earlier declarators in a declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`) ([#​18348](sveltejs/svelte#18348)) - fix: avoid spurious `state_referenced_locally` warnings for `$derived` declarations in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: tolerate whitespace before `let`/`const` in declaration tags ([#​18348](sveltejs/svelte#18348)) - fix: prevent infinite loop when a tag's expression ends with a trailing `/` at the end of the input ([#​18350](sveltejs/svelte#18350)) - fix: more robust parsing of declaration tags with regards to `type` ([#​18330](sveltejs/svelte#18330)) - fix: preserve newlines in spread input values when the `type` attribute is applied after `value` ([#​18345](sveltejs/svelte#18345)) - fix: update `SvelteURLSearchParams` when setting duplicate keys to the same joined value ([#​18336](sveltejs/svelte#18336)) - fix: check references for blockers on server, too ([#​18352](sveltejs/svelte#18352)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled because a matching PR was automerged previously. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: huskas-2189 <huskas-2189@noreply.codeberg.org> Reviewed-on: https://codeberg.org/huskas-2189/Bookmark/pulls/82
Summary
SvelteURLSearchParams#setchanges by comparing duplicate value lists instead of joined stringsSvelteURLSearchParamsandSvelteURL.searchParamssynchronizationTests