diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index 323920b3a3..7691897e3d 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -431,9 +431,12 @@ export class Boundary { if (this.#offscreen_fragment) { var pop_renderer = push_renderer(this.#effect.r, this.#effect.pr); - insert_before(this.#anchor, this.#offscreen_fragment); - this.#offscreen_fragment = null; - pop_renderer?.(); + try { + insert_before(this.#anchor, this.#offscreen_fragment); + this.#offscreen_fragment = null; + } finally { + pop_renderer?.(); + } } } } diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 2efb22d399..d98589cd1c 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -523,59 +523,61 @@ export function destroy_effect(effect, remove_dom = true) { var pop_renderer = push_renderer(effect.r, effect.pr); - if ( - (remove_dom || (effect.f & HEAD_EFFECT) !== 0) && - effect.nodes !== null && - effect.nodes.end !== null - ) { - remove_effect_nodes(effect); - removed = true; - } + try { + if ( + (remove_dom || (effect.f & HEAD_EFFECT) !== 0) && + effect.nodes !== null && + effect.nodes.end !== null + ) { + remove_effect_nodes(effect); + removed = true; + } - effect.f |= DESTROYING; - destroy_effect_children(effect, remove_dom && !removed); - remove_reactions(effect, 0); + effect.f |= DESTROYING; + destroy_effect_children(effect, remove_dom && !removed); + remove_reactions(effect, 0); - var transitions = effect.nodes && effect.nodes.t; + var transitions = effect.nodes && effect.nodes.t; - if (transitions !== null) { - for (const transition of transitions) { - transition.stop(); + if (transitions !== null) { + for (const transition of transitions) { + transition.stop(); + } } - } - execute_effect_teardown(effect); + execute_effect_teardown(effect); - effect.f ^= DESTROYING; - effect.f |= DESTROYED; + effect.f ^= DESTROYING; + effect.f |= DESTROYED; - var parent = effect.parent; + var parent = effect.parent; - // If the parent doesn't have any children, then skip this work altogether - if (parent !== null && parent.first !== null) { - unlink_effect(effect); - } + // If the parent doesn't have any children, then skip this work altogether + if (parent !== null && parent.first !== null) { + unlink_effect(effect); + } - if (DEV) { - effect.component_function = null; - } + if (DEV) { + effect.component_function = null; + } - // `first` and `child` are nulled out in destroy_effect_children - // we don't null out `parent` so that error propagation can work correctly - effect.next = - effect.prev = - effect.teardown = - effect.ctx = - effect.deps = - effect.fn = - effect.nodes = - effect.ac = - effect.b = - effect.r = - effect.pr = - null; - - pop_renderer?.(); + // `first` and `child` are nulled out in destroy_effect_children + // we don't null out `parent` so that error propagation can work correctly + effect.next = + effect.prev = + effect.teardown = + effect.ctx = + effect.deps = + effect.fn = + effect.nodes = + effect.ac = + effect.b = + effect.r = + effect.pr = + null; + } finally { + pop_renderer?.(); + } } /**