fix: allow async {@const} in more places

#16643

Closing issue

Pull request

Open
D
dummdidumm
Aug 18, 2025, 10:03 PM

Implemented by reusing the async_body function inside Fragment.js. Also removes the ability to reference a {@const ...} of an implicit child inside a boundary pending/failed snippet:

  • existing duplication of consts can have unintended side effects, e.g. async consts would unexpectedly called multiple times
  • what if a const is the reason for the failure of a boundary, but is then referenced in the failed snippet?
  • what if an async const is referenced in a pending snippet? deadlock
  • inconsistent with how it behaves for components where this already does not work

Implemented via / only taking effect with the experimental flag so the behavior change only applies there as this is a breaking change strictly speaking. Also added a compiler error for this.

closes #16462

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • Prefix your PR title with feat:, fix:, chore:, or docs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.
  • If this PR changes code within packages/svelte/src, add a changeset (npx changeset).

Tests and linting

  • Run the tests with pnpm test and lint the project with pnpm lint

Info

Assignees None
Reviewers None
Labels None
Milestone None