You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A computation that disposed its own owner while running no longer leaves graph edges for the signals it read afterward.
resource.refetch() on a disposed resource starts no fetch, and a Suspense boundary is released even when the flush after a resource settles (or after mutate()) throws.
The updater of resource.mutate(), the equals of useSelector, the function behind cache() and the subscribe function of useExternalStore run untracked.
useExternalStore unsubscribes when its first getSnapshot() after subscribing throws, useReaction's track() does nothing once its owner is disposed, and a throwing cleanup of a createRoot no longer replaces the error its body threw (both are thrown in an AggregateError).
A store no longer keeps one tracking signal per key it ever read in a tracked context: once an object has collected a few hundred of them, the ones nothing observes are dropped, and a key read again gets a fresh one that reflects the current value (store.byId[id] with churning ids no longer grows without bound).
Transitions started while a Suspense hold is engaged share one promise instead of adding a waiter each, and the list of suspended memos and effects lists a node once and drops the disposed ones.
The equals of a memo and of a signal runs untracked, so what it reads is not a dependency of the reader that pulled the memo or of the computation that writes.
DUPLICATE_CORE is raised now: in development builds createRoot lists its copy of core in a registry at globalThis[Symbol.for("shadow-js.core.instances")] (at most 8 copies, each with its number of live roots, removed with its last root) and warns once when a root is created while another copy of the same build (client or server) has live roots. Copies that never overlap, such as separate test files, do not warn.