fix: transform `$bindable` after `await` expressions (#17066)

Fixes #17064
pull/17076/head
Simon H 3 weeks ago committed by GitHub
parent 70d020bd91
commit 9477f18b77
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: transform `$bindable` after `await` expressions

@ -55,7 +55,7 @@ export function transform_body(instance_body, runner, transform) {
if (visited.declarations.length === 1) {
return b.thunk(
b.assignment('=', s.node.id, visited.declarations[0].init ?? b.void0),
b.assignment('=', visited.declarations[0].id, visited.declarations[0].init ?? b.void0),
s.has_await
);
}

@ -0,0 +1,8 @@
<script>
await Promise.resolve();
let { value = $bindable("test") } = $props();
</script>
<button onclick={() => value = 'updated'}>update</button>
{value}

@ -0,0 +1,35 @@
import { tick } from 'svelte';
import { test } from '../../test';
export default test({
mode: ['async-server', 'client', 'hydrate'],
ssrHtml: `
<button>update</button> initial <p>initial</p>
`,
async test({ assert, target }) {
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>update</button>
initial
<p>initial</p>
`
);
const button = target.querySelector('button');
button?.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>update</button>
updated
<p>updated</p>
`
);
}
});

@ -0,0 +1,9 @@
<script>
import Child from './Child.svelte';
let value = $state('initial');
</script>
<Child bind:value />
<p>{value}</p>
Loading…
Cancel
Save