From 4accea6377102c5f4cf3f6fad20dc5b8796eb6b1 Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Mon, 8 Jun 2026 08:44:58 +0200 Subject: [PATCH] fix: make sure pop renderer is always before `return` --- .../phases/3-transform/client/transform-client.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 8bfc38f127..92360f1a3b 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -588,13 +588,23 @@ export function client_component(analysis, options) { if (custom_renderer !== undefined) { // when the custom renderer feature is enabled every component pushes a renderer: components // with a renderer module push `$renderer`, DOM components push `null` + const pop_renderer = b.stmt(b.call('$$pop_renderer')); + let pop_renderer_index = component_block.body.length; + + if (should_inject_context) { + pop_renderer_index -= 1; + if (needs_store_cleanup) pop_renderer_index -= 1; + if (needs_store_cleanup && component_returned_object.length > 0) pop_renderer_index -= 1; + } + component_block.body.unshift( b.var( '$$pop_renderer', b.call('$.push_renderer', custom_renderer ? b.id('$renderer') : b.literal(null)) ) ); - component_block.body.push(b.stmt(b.call('$$pop_renderer'))); + + component_block.body.splice(pop_renderer_index + 1, 0, pop_renderer); } if (state.events.size > 0) {