fix: avoid erroneous async derived expressions for blocks #17604
+166
−53
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fixes #17595
When an if/key/etc block has an expression that depends on an async blocker (e.g., is inside a component with top level
await), the compiler incorrectly treats the expression as async - even when the expression itself contains noawait.This causes the expression to be added to
$.async'sexpressionsarray, which wraps it in anasync_derived. This is not only unnecessary but also buggy: it breaks the direct reactive connection between the source and its dependent effects, causing inconsistent effect executions.The fix is to only add expressions to
$.async'sexpressionsarray when they actually contain anawait....however, you'll notice that for now this will fail one test. This is due to an unrelated bug which is fixed by #17605 (separate PR merging into this one for easier review).
Before submitting the PR, please make sure you do the following
feat:,fix:,chore:, ordocs:.packages/svelte/src, add a changeset (npx changeset).Tests and linting
pnpm testand lint the project withpnpm lint