Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork4.6k
fix: more informative error when effects run in an infinite loop#16405
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
changeset-botbot commentedJul 16, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
🦋 Changeset detectedLatest commit:90ff2dc 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 |
|
a67b586
intomainUh oh!
There was an error while loading.Please reload this page.
Supersedes#16247,closes#16092.
Today, if you have an effect that runs in an infinite loop, you get this somewhat unhelpful log:
Expanding the array usually reveals 10 copies of the same compiled function:
While youcan click through to the
[[FunctionLocation]]
......even that doesn't necessarily tell you where the offending state change occurred.
We can do better. In this PR, we track the site of updates to state that occur inside an effect, then if wedo encounter an infinite loop we can pinpoint those sites:
This works for things like array mutations, and even works for effects that ping-pong (as opposed to the probably-more-common case in which an effect invalidates itself):
Better yet, this is actuallysimpler than what we currently have — the implementation of
infinite_loop_guard
can be much leaner, andlog_effect_stack
anddev_effect_stack
are no more.This PR also adds an explanation of the error. For things like this I prefer progressive disclosure (i.e. link to the docs when it becomes relevant) rather than adding stuff that you have to read upfront, so I view this as an alternative to#16247.
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 test
and lint the project withpnpm lint