From e86da84c799d3c6d37dcabc513612015dff55e4b Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Mon, 30 Mar 2026 11:24:52 +0200 Subject: [PATCH] fix: handle compiled `nodeValue`/`textContent` --- .../client/visitors/RegularElement.js | 22 ++++++++++++++++--- .../client/visitors/shared/fragment.js | 7 +++++- .../_config.js | 5 +++++ .../main.svelte | 5 +++++ .../text-expression-standalone/_config.js | 5 +++++ .../text-expression-standalone/main.svelte | 5 +++++ 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 packages/svelte/tests/custom-renderers/samples/text-expression-standalone-element/_config.js create mode 100644 packages/svelte/tests/custom-renderers/samples/text-expression-standalone-element/main.svelte create mode 100644 packages/svelte/tests/custom-renderers/samples/text-expression-standalone/_config.js create mode 100644 packages/svelte/tests/custom-renderers/samples/text-expression-standalone/main.svelte diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js index ec74c3ed27..0746c5f867 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js @@ -346,9 +346,25 @@ export function RegularElement(node, context) { const empty_string = value.type === 'Literal' && value.value === ''; if (!empty_string) { - child_state.init.push( - b.stmt(b.assignment('=', b.member(context.state.node, 'textContent'), value)) - ); + if (context.state.options.customRenderer) { + // custom renderers need to use the method to invoke the renderer + context.state.template.push_text([ + { + type: 'Text', + data: '', + raw: '', + start: -1, + end: -1 + } + ]); + const text = context.state.scope.generate('text'); + context.state.init.push(b.var(text, b.call('$.child', node_id))); + context.state.init.push(b.stmt(b.call('$.set_text', b.id(text), value))); + } else { + child_state.init.push( + b.stmt(b.assignment('=', b.member(context.state.node, 'textContent'), value)) + ); + } } } else if (is_customizable_select_element(node)) { // For , or