Skip to content

Commit 0afb8d4

Browse files
authored
fix: improve state store mutation compiler output (#10561)
1 parent 5698fb7 commit 0afb8d4

File tree

5 files changed

+43
-1
lines changed

5 files changed

+43
-1
lines changed

.changeset/witty-years-crash.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: improve state store mutation compiler output

packages/svelte/src/compiler/phases/3-transform/client/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ export function serialize_set_binding(node, context, fallback, options) {
431431
return {
432432
...node,
433433
object: visit_node(/** @type {import("estree").Expression} */ (node.object)),
434-
property: /** @type {import("estree").Expression} */ (visit(node.property))
434+
property: /** @type {import("estree").MemberExpression} */ (visit(node)).property
435435
};
436436
}
437437
if (node.type === 'Identifier') {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script>
2+
import { writable } from 'svelte/store';
3+
4+
let { data } = $props();
5+
let form = writable(data.form);
6+
7+
function addTag() {
8+
$form.data.tags['third'] = 3;
9+
}
10+
</script>
11+
12+
<pre>{JSON.stringify($form, null, 2)}</pre>
13+
14+
<button on:click={addTag}>add</button>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { flushSync } from '../../../../src/main/main-client';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
async test({ assert, target }) {
6+
const btn = target.querySelector('button');
7+
8+
flushSync(() => {
9+
btn?.click();
10+
});
11+
12+
assert.htmlEqual(
13+
target.innerHTML,
14+
`<pre>{\n"data": { "tags": { "first": 1, "second": 2, "third": 3 } } }</pre><button>add</button>`
15+
);
16+
}
17+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
import Page from './Component.svelte';
3+
4+
let data = $state({ form: { data: { tags: { first: 1, second: 2 }}}});
5+
</script>
6+
<Page {data} />

0 commit comments

Comments
 (0)