From 19d84d2ffaff91ccb473491548399c046488195a Mon Sep 17 00:00:00 2001 From: svelte-triage-bot Date: Mon, 24 Aug 2026 10:29:05 +0000 Subject: [PATCH 1/2] fix: track SvelteDate snapshots in reactions --- .changeset/calm-dates-track.md | 5 +++++ packages/svelte/src/internal/shared/clone.js | 2 ++ .../state-snapshot-svelte-date/_config.js | 19 +++++++++++++++++++ .../state-snapshot-svelte-date/main.svelte | 9 +++++++++ 4 files changed, 35 insertions(+) create mode 100644 .changeset/calm-dates-track.md create mode 100644 packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/main.svelte diff --git a/.changeset/calm-dates-track.md b/.changeset/calm-dates-track.md new file mode 100644 index 000000000000..e7275ae55677 --- /dev/null +++ b/.changeset/calm-dates-track.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: track SvelteDate snapshots in reactions diff --git a/packages/svelte/src/internal/shared/clone.js b/packages/svelte/src/internal/shared/clone.js index 1a83adf8c594..ba0c731047d6 100644 --- a/packages/svelte/src/internal/shared/clone.js +++ b/packages/svelte/src/internal/shared/clone.js @@ -105,6 +105,8 @@ function clone(value, cloned, path, paths, original = null, no_tojson = false) { } if (value instanceof Date) { + // Ensure SvelteDate snapshots are tracked + value.getTime(); return /** @type {Snapshot} */ (structuredClone(value)); } diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js new file mode 100644 index 000000000000..6e1c54de61a2 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js @@ -0,0 +1,19 @@ +import { test } from '../../test'; +import { tick } from 'svelte'; + +export default test({ + async test({ assert, target }) { + assert.htmlEqual( + target.innerHTML, + '

1970-01-01T00:00:00.000Z

' + ); + + target.querySelector('button').click(); + await tick(); + + assert.htmlEqual( + target.innerHTML, + '

1970-01-02T00:00:00.000Z

' + ); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/main.svelte b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/main.svelte new file mode 100644 index 000000000000..634a7ee3e812 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/main.svelte @@ -0,0 +1,9 @@ + + + +

{snapshot.toISOString()}

From fa9b4d12a1a212cb9f81025aad2116744c478bad Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 24 Aug 2026 14:03:23 +0200 Subject: [PATCH 2/2] format /fix --- .../samples/state-snapshot-svelte-date/_config.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js index 6e1c54de61a2..53d8e1d4fff6 100644 --- a/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js @@ -3,17 +3,11 @@ import { tick } from 'svelte'; export default test({ async test({ assert, target }) { - assert.htmlEqual( - target.innerHTML, - '

1970-01-01T00:00:00.000Z

' - ); + assert.htmlEqual(target.innerHTML, '

1970-01-01T00:00:00.000Z

'); - target.querySelector('button').click(); + target.querySelector('button')?.click(); await tick(); - assert.htmlEqual( - target.innerHTML, - '

1970-01-02T00:00:00.000Z

' - ); + assert.htmlEqual(target.innerHTML, '

1970-01-02T00:00:00.000Z

'); } });