WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 31ac74f

Browse files
authored
fix: skip static optimisation for stateless deriveds after await (#17389)
1 parent acd7525 commit 31ac74f

File tree

5 files changed

+24
-2
lines changed

5 files changed

+24
-2
lines changed

.changeset/deep-pears-juggle.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: skip static optimisation for stateless deriveds after `await`

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,9 @@ export function RegularElement(node, context) {
336336
trimmed.every(
337337
(node) =>
338338
node.type === 'Text' ||
339-
(!node.metadata.expression.has_state && !node.metadata.expression.has_await)
339+
(!node.metadata.expression.has_state &&
340+
!node.metadata.expression.has_await &&
341+
!node.metadata.expression.has_blockers())
340342
) &&
341343
trimmed.some((node) => node.type === 'ExpressionTag');
342344

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export function build_template_chunk(
134134

135135
const evaluated = state.scope.evaluate(value);
136136

137-
has_await ||= node.metadata.expression.has_await;
137+
has_await ||= node.metadata.expression.has_await || node.metadata.expression.has_blockers();
138138
has_state ||= has_await || (node.metadata.expression.has_state && !evaluated.is_known);
139139

140140
if (values.length === 1) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { tick } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
async test({ assert, target }) {
6+
await tick();
7+
assert.htmlEqual(target.innerHTML, `<p>hello</p>`);
8+
}
9+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
await 0;
3+
let message = $derived('hello');
4+
</script>
5+
6+
<p>{message}</p>

0 commit comments

Comments
 (0)