From 582c4d1e37446ea1768a8d75894aded7b08bc516 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 23 Feb 2024 13:51:53 -0500 Subject: [PATCH] teardown on pause --- .../internal/client/reactivity/computations.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/computations.js b/packages/svelte/src/internal/client/reactivity/computations.js index 7f024b07bc..4224dba1c7 100644 --- a/packages/svelte/src/internal/client/reactivity/computations.js +++ b/packages/svelte/src/internal/client/reactivity/computations.js @@ -4,6 +4,7 @@ import { current_component_context, current_consumer, current_effect, + execute_effect, flush_local_render_effects, schedule_effect } from '../runtime.js'; @@ -263,6 +264,12 @@ export function derived_safe_equal(fn) { * @param {() => void} done */ export function pause_effect(effect, done) { + if ((effect.f & INERT) !== 0) return; + + if ((effect.f & DERIVED) === 0 && typeof effect.v === 'function') { + effect.v(); + } + /** @type {import('../types.js').TransitionObject[]} */ const transitions = []; @@ -312,10 +319,6 @@ export function destroy_effect(effect) { if ((effect.f & DESTROYED) !== 0) return; effect.f |= DESTROYED; - if ((effect.f & DERIVED) === 0 && typeof effect.v === 'function') { - effect.v(); - } - // TODO detach from parent effect // TODO distinguish between 'block effects' (?) which own their own DOM @@ -336,6 +339,10 @@ export function destroy_effect(effect) { * @param {import('../types.js').BlockEffect} effect */ export function resume_effect(effect) { + if ((effect.f & DERIVED) === 0 && (effect.f & MANAGED) === 0) { + execute_effect(effect); + } + if (effect.r) { for (const child of effect.r) { resume_effect(child);