diff --git a/.changeset/calm-dates-track.md b/.changeset/calm-dates-track.md new file mode 100644 index 0000000000..e7275ae556 --- /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 1a83adf8c5..ba0c731047 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 0000000000..53d8e1d4ff --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/_config.js @@ -0,0 +1,13 @@ +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 0000000000..634a7ee3e8 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-svelte-date/main.svelte @@ -0,0 +1,9 @@ + + + +

{snapshot.toISOString()}