From 51a3d1e4bd19b35de861dce11fd70487c48860f9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Jan 2025 18:15:31 -0500 Subject: [PATCH] fix --- .../src/internal/client/dom/blocks/if.js | 55 ++++++++++--------- packages/svelte/src/internal/client/fork.js | 4 ++ 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/blocks/if.js b/packages/svelte/src/internal/client/dom/blocks/if.js index db68d19dda..96c71c2f05 100644 --- a/packages/svelte/src/internal/client/dom/blocks/if.js +++ b/packages/svelte/src/internal/client/dom/blocks/if.js @@ -70,42 +70,45 @@ export function if_block(node, fn, elseif = false) { active_fork.f ^= FORK_ROOT; const fragment = document.createDocumentFragment(); - const offscreen_condition = condition; const offscreen_anchor = document.createComment(''); fragment.append(offscreen_anchor); - const offscreen_effect = fn && branch(() => fn(offscreen_anchor)); + try { + const offscreen_effect = fn && branch(() => fn(offscreen_anchor)); - active_fork.branches.push(() => { - anchor.before(fragment); + active_fork.branches.push(() => { + anchor.before(fragment); - if (condition) { - if (consequent_effect) { - resume_effect(consequent_effect); - } else { - consequent_effect = offscreen_effect; - - if (alternate_effect) { - pause_effect(alternate_effect, () => { - alternate_effect = null; - }); + if (condition) { + if (consequent_effect) { + resume_effect(consequent_effect); + } else { + consequent_effect = offscreen_effect; + + if (alternate_effect) { + pause_effect(alternate_effect, () => { + alternate_effect = null; + }); + } } - } - } else { - if (alternate_effect) { - resume_effect(alternate_effect); } else { - alternate_effect = offscreen_effect; - - if (consequent_effect) { - pause_effect(consequent_effect, () => { - consequent_effect = null; - }); + if (alternate_effect) { + resume_effect(alternate_effect); + } else { + alternate_effect = offscreen_effect; + + if (consequent_effect) { + pause_effect(consequent_effect, () => { + consequent_effect = null; + }); + } } } - } - }); + }); + } finally { + active_fork.f |= FORK_ROOT; + } return; } diff --git a/packages/svelte/src/internal/client/fork.js b/packages/svelte/src/internal/client/fork.js index d416959f67..3b391582cf 100644 --- a/packages/svelte/src/internal/client/fork.js +++ b/packages/svelte/src/internal/client/fork.js @@ -145,6 +145,10 @@ export function fork(fn) { flush_sync(); revert(active_fork); + + if (f.pending === 0) { + f.callback(); + } }); } finally { active_fork = null;