diff --git a/packages/svelte/src/internal/client/custom-renderer/index.js b/packages/svelte/src/internal/client/custom-renderer/index.js index 8e5ee011d8..8fc51d1f77 100644 --- a/packages/svelte/src/internal/client/custom-renderer/index.js +++ b/packages/svelte/src/internal/client/custom-renderer/index.js @@ -25,7 +25,8 @@ export function createRenderer(renderer) { * @param {{} extends Props ? { target: TFragment | TElement | TTextNode | TComment, props?: Props, context?: Map } : { target: TFragment | TElement | TTextNode | TComment, props: Props, context?: Map }} options */ render(Component, { target, props, context }) { - var cleanup = push_renderer(compound_renderer); + var pop_renderer = push_renderer(compound_renderer); + try { /** @type {Exports} */ // @ts-expect-error will be defined because the render effect runs synchronously @@ -51,7 +52,7 @@ export function createRenderer(renderer) { }); return { component, unmount }; } finally { - cleanup(); + pop_renderer(); } } }; diff --git a/packages/svelte/src/internal/client/custom-renderer/state.js b/packages/svelte/src/internal/client/custom-renderer/state.js index 202885ab79..7b46e21b2e 100644 --- a/packages/svelte/src/internal/client/custom-renderer/state.js +++ b/packages/svelte/src/internal/client/custom-renderer/state.js @@ -1,6 +1,4 @@ -/** - * @import { Renderer } from "./types.js"; - */ +/** @import { Renderer } from './types.js'; */ /** * @type {Renderer | null} @@ -19,10 +17,11 @@ export function set_renderer(value) { * @param {Renderer | null} value */ export function push_renderer(value) { - let old_renderer = current_renderer; + var previous_renderer = current_renderer; current_renderer = value; + return () => { - current_renderer = old_renderer; + current_renderer = previous_renderer; }; } @@ -32,9 +31,13 @@ export function push_renderer(value) { * @returns {T} */ export function without_renderer(fn) { - if (current_renderer === null) return fn(); - let previous_renderer = current_renderer; + if (current_renderer === null) { + return fn(); + } + + var previous_renderer = current_renderer; current_renderer = null; + try { return fn(); } finally {