fix: skip static optimisation for stateless deriveds after await (#17389)

pull/17388/head
Rich Harris 4 months ago committed by GitHub
parent acd752524b
commit 31ac74fac7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: skip static optimisation for stateless deriveds after `await`

@ -336,7 +336,9 @@ export function RegularElement(node, context) {
trimmed.every(
(node) =>
node.type === 'Text' ||
(!node.metadata.expression.has_state && !node.metadata.expression.has_await)
(!node.metadata.expression.has_state &&
!node.metadata.expression.has_await &&
!node.metadata.expression.has_blockers())
) &&
trimmed.some((node) => node.type === 'ExpressionTag');

@ -134,7 +134,7 @@ export function build_template_chunk(
const evaluated = state.scope.evaluate(value);
has_await ||= node.metadata.expression.has_await;
has_await ||= node.metadata.expression.has_await || node.metadata.expression.has_blockers();
has_state ||= has_await || (node.metadata.expression.has_state && !evaluated.is_known);
if (values.length === 1) {

@ -0,0 +1,9 @@
import { tick } from 'svelte';
import { test } from '../../test';
export default test({
async test({ assert, target }) {
await tick();
assert.htmlEqual(target.innerHTML, `<p>hello</p>`);
}
});

@ -0,0 +1,6 @@
<script>
await 0;
let message = $derived('hello');
</script>
<p>{message}</p>
Loading…
Cancel
Save