@@ -4,7 +4,11 @@ import { clearAllEffects, clearEffectSubscription } from '../reactive-primitives
44import { WrappedSignalImpl } from '../reactive-primitives/impl/wrapped-signal-impl' ;
55import type { Signal } from '../reactive-primitives/signal.public' ;
66import { SubscriptionData } from '../reactive-primitives/subscription-data' ;
7- import { EffectProperty , EffectSubscriptionProp } from '../reactive-primitives/types' ;
7+ import {
8+ EffectProperty ,
9+ EffectSubscriptionProp ,
10+ type Consumer ,
11+ } from '../reactive-primitives/types' ;
812import { isSignal } from '../reactive-primitives/utils' ;
913import { executeComponent } from '../shared/component-execution' ;
1014import { SERIALIZABLE_STATE , type OnRenderFn } from '../shared/component.public' ;
@@ -48,7 +52,7 @@ import { isPromise, retryOnPromise } from '../shared/utils/promises';
4852import { isSlotProp } from '../shared/utils/prop' ;
4953import { hasClassAttr } from '../shared/utils/scoped-styles' ;
5054import { serializeAttribute } from '../shared/utils/styles' ;
51- import { isArray , type ValueOrPromise } from '../shared/utils/types' ;
55+ import { isArray , isObject , type ValueOrPromise } from '../shared/utils/types' ;
5256import { trackSignalAndAssignHost } from '../use/use-core' ;
5357import { TaskFlags , isTask } from '../use/use-task' ;
5458import type { DomContainer } from './dom-container' ;
@@ -81,9 +85,10 @@ import {
8185} from './vnode' ;
8286import type { ElementVNode , TextVNode , VNode , VirtualVNode } from './vnode-impl' ;
8387import { getAttributeNamespace , getNewElementNamespaceData } from './vnode-namespace' ;
84- import { cleanupDestroyable , isDestroyable } from '../use/utils/destroyable' ;
88+ import { cleanupDestroyable } from '../use/utils/destroyable' ;
8589import { SignalImpl } from '../reactive-primitives/impl/signal-impl' ;
8690import { isStore } from '../reactive-primitives/impl/store' ;
91+ import { AsyncComputedSignalImpl } from '../reactive-primitives/impl/async-computed-signal-impl' ;
8792
8893export const vnode_diff = (
8994 container : ClientContainer ,
@@ -1540,19 +1545,22 @@ export function cleanup(container: ClientContainer, vNode: VNode) {
15401545 if ( seq ) {
15411546 for ( let i = 0 ; i < seq . length ; i ++ ) {
15421547 const obj = seq [ i ] ;
1543- if ( isTask ( obj ) ) {
1544- clearAllEffects ( container , obj ) ;
1545- if ( obj . $flags$ & TaskFlags . VISIBLE_TASK ) {
1546- container . $scheduler$ ( ChoreType . CLEANUP_VISIBLE , obj ) ;
1547- // don't call cleanupDestroyable yet, do it by the scheduler
1548- continue ;
1548+ if ( isObject ( obj ) ) {
1549+ const objIsTask = isTask ( obj ) ;
1550+ if ( objIsTask ) {
1551+ clearAllEffects ( container , obj ) ;
1552+ if ( obj . $flags$ & TaskFlags . VISIBLE_TASK ) {
1553+ container . $scheduler$ ( ChoreType . CLEANUP_VISIBLE , obj ) ;
1554+ // don't call cleanupDestroyable yet, do it by the scheduler
1555+ continue ;
1556+ }
1557+ } else if ( obj instanceof SignalImpl || isStore ( obj ) ) {
1558+ clearAllEffects ( container , obj as Consumer ) ;
15491559 }
1550- } else if ( obj instanceof SignalImpl || isStore ( obj ) ) {
1551- clearAllEffects ( container , obj ) ;
1552- }
15531560
1554- if ( isDestroyable ( obj ) ) {
1555- cleanupDestroyable ( obj ) ;
1561+ if ( objIsTask || obj instanceof AsyncComputedSignalImpl ) {
1562+ cleanupDestroyable ( obj ) ;
1563+ }
15561564 }
15571565 }
15581566 }
0 commit comments