fix: add a warning when the misuse of reset in an error:boundary causes an error to be thrown when flushing the boundary content#16171
Conversation
610b455 to
7490fbe
Compare
🦋 Changeset detectedLatest commit: 8891015 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
…s an error to be thrown when flushing the boundary content
… are fired during template effects flush
7490fbe to
28b0310
Compare
|
Thank you. The behaviour of boundaries seems just wrong here — an error that occurs during reset should not escape the current boundary; that's deeply unhelpful. Surprised that never surfaced until now. Working on it locally, will push to this PR. Checking that |
| try { | ||
| set_active_reaction(null); | ||
| calling_on_error = true; | ||
| onerror?.(error, reset); |
There was a problem hiding this comment.
@Rich-Harris People might want to auto-fix the state of the application inside the onerror for instance they might decide to show an error snackbar and reset a form without any confirmation from the user
There was a problem hiding this comment.
It won't work — the update is still in progress and everything gets torn. The svelte_boundary_reset_onerror message has an example of fixing it by waiting for a tick() before calling reset()
Add warning message when situations like #16134 happen.
The user reporting the issue is misusing
resetby calling it before the problematic template is rendered,reset"pauses" the error boundary and this allows the error to bubble up.This adds a warning message when this happens instructing the user to fix the problematic app state before calling
resetor to useresetwhen the user clicks a button in the fallback UI.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