From d73c5b8434b054022b36d2634b7dfdd161f4f9c2 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 23 Jul 2024 14:49:26 +0100 Subject: [PATCH] fix: ensure $state.snapshot correctly clones Date objects (#12564) --- .changeset/dirty-pianos-eat.md | 5 +++++ packages/svelte/src/internal/shared/clone.js | 4 ++++ .../samples/state-snapshot-date/_config.js | 5 +++++ .../samples/state-snapshot-date/main.svelte | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 .changeset/dirty-pianos-eat.md create mode 100644 packages/svelte/tests/runtime-runes/samples/state-snapshot-date/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/state-snapshot-date/main.svelte diff --git a/.changeset/dirty-pianos-eat.md b/.changeset/dirty-pianos-eat.md new file mode 100644 index 0000000000..4bc34bd440 --- /dev/null +++ b/.changeset/dirty-pianos-eat.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure $state.snapshot correctly clones Date objects diff --git a/packages/svelte/src/internal/shared/clone.js b/packages/svelte/src/internal/shared/clone.js index 2d4455714e..9983ef619a 100644 --- a/packages/svelte/src/internal/shared/clone.js +++ b/packages/svelte/src/internal/shared/clone.js @@ -79,6 +79,10 @@ function clone(value, cloned, path, paths) { return copy; } + if (value instanceof Date) { + return /** @type {Snapshot} */ (structuredClone(value)); + } + if (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function') { return clone( /** @type {T & { toJSON(): any } } */ (value).toJSON(), diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/_config.js b/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/_config.js new file mode 100644 index 0000000000..c81d77a9e1 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: `true\ntrue\ntrue\ntrue` +}); diff --git a/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/main.svelte b/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/main.svelte new file mode 100644 index 0000000000..341ec9b110 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/state-snapshot-date/main.svelte @@ -0,0 +1,16 @@ + + +{test.a instanceof Date} +{test2.a instanceof Date} +{test3.a instanceof Date} +{test4.a instanceof Date}