Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/chilled-seas-jog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"svelte": patch
---

fix: increment and decrement edge case
4 changes: 2 additions & 2 deletions packages/svelte/src/internal/client/runtime.js
Original file line number Diff line number Diff line change
Expand Up @@ -1011,7 +1011,7 @@ function get_parent_context(component_context) {
* @returns {number}
*/
export function update(signal, d = 1) {
const value = get(signal);
const value = +get(signal);
set(signal, value + d);
return value;
}
Expand All @@ -1022,7 +1022,7 @@ export function update(signal, d = 1) {
* @returns {number}
*/
export function update_pre(signal, d = 1) {
const value = get(signal) + d;
let value = +get(signal) + d;
set(signal, value);
return value;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { flushSync } from 'svelte';
import { test } from '../../test';

export default test({
html: `
<button>update</button>
<p>0, 0, 0, 0</p>
`,

test({ target, assert, logs }) {
const btn = target.querySelector('button');
flushSync(() => btn?.click());

assert.htmlEqual(
target.innerHTML,
`
<button>update</button>
<p>1, -1, 1, -1</p>
`
);

assert.deepEqual(logs, [0, 0, 1, -1]);
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script>
let a = $state("0");
let b = $state("0");
let c = $state("0");
let d = $state("0");

function update() {
// @ts-expect-error
console.log(a++);
// @ts-expect-error
console.log(b--);
// @ts-expect-error
console.log(++c);
// @ts-expect-error
console.log(--d);
}
</script>

<button onclick={update}>update</button>
<p>{a}, {b}, {c}, {d}</p>