Skip to content

Commit d73c5b8

Browse files
authored
fix: ensure $state.snapshot correctly clones Date objects (#12564)
1 parent 7b2279d commit d73c5b8

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

.changeset/dirty-pianos-eat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: ensure $state.snapshot correctly clones Date objects

packages/svelte/src/internal/shared/clone.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ function clone(value, cloned, path, paths) {
7979
return copy;
8080
}
8181

82+
if (value instanceof Date) {
83+
return /** @type {Snapshot<T>} */ (structuredClone(value));
84+
}
85+
8286
if (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function') {
8387
return clone(
8488
/** @type {T & { toJSON(): any } } */ (value).toJSON(),
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `true\ntrue\ntrue\ntrue`
5+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script>
2+
let test = $state({
3+
a: new Date()
4+
});
5+
let test2 = $state.snapshot(test);
6+
7+
let test3 = {
8+
a: new Date()
9+
}
10+
let test4 = structuredClone(test3);
11+
</script>
12+
13+
{test.a instanceof Date}
14+
{test2.a instanceof Date}
15+
{test3.a instanceof Date}
16+
{test4.a instanceof Date}

0 commit comments

Comments
 (0)