From 0cf6d56ffe8b68591805defecc75f3451a295a0c Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Tue, 7 May 2024 23:20:44 +0200 Subject: [PATCH] fix: increment and decrement edge case (#11506) * fix: increment and decrement edge case * fix/simplify test * simplify * Apply suggestions from code review * golf --------- Co-authored-by: Rich Harris Co-authored-by: Rich Harris --- .changeset/chilled-seas-jog.md | 5 ++++ .../svelte/src/internal/client/runtime.js | 6 ++--- .../_config.js | 24 +++++++++++++++++++ .../main.svelte | 20 ++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 .changeset/chilled-seas-jog.md create mode 100644 packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/main.svelte diff --git a/.changeset/chilled-seas-jog.md b/.changeset/chilled-seas-jog.md new file mode 100644 index 000000000000..7862a5e2cded --- /dev/null +++ b/.changeset/chilled-seas-jog.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: coerce incremented/decremented sources diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index a9dee752e19b..0311102f1e6e 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1011,7 +1011,7 @@ function get_parent_context(component_context) { * @returns {number} */ export function update(signal, d = 1) { - const value = get(signal); + var value = +get(signal); set(signal, value + d); return value; } @@ -1022,9 +1022,7 @@ export function update(signal, d = 1) { * @returns {number} */ export function update_pre(signal, d = 1) { - const value = get(signal) + d; - set(signal, value); - return value; + return set(signal, +get(signal) + d); } /** diff --git a/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/_config.js b/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/_config.js new file mode 100644 index 000000000000..9e8999e0a173 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/_config.js @@ -0,0 +1,24 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + html: ` + +

0, 0, 0, 0

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

1, -1, 1, -1

+ ` + ); + + assert.deepEqual(logs, [0, 0, 1, -1]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/main.svelte b/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/main.svelte new file mode 100644 index 000000000000..9d8c67885831 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/increment-and-decrement-strings/main.svelte @@ -0,0 +1,20 @@ + + + +

{a}, {b}, {c}, {d}