diff --git a/packages/svelte/src/compiler/phases/3-transform/utils.js b/packages/svelte/src/compiler/phases/3-transform/utils.js index c7fce61ff9..11c7bcf615 100644 --- a/packages/svelte/src/compiler/phases/3-transform/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/utils.js @@ -12,6 +12,7 @@ import { extract_identifiers } from '../../utils/ast.js'; import check_graph_for_cycles from '../2-analyze/utils/check_graph_for_cycles.js'; import is_reference from 'is-reference'; import { set_scope } from '../scope.js'; +import { custom_renderer } from '../../state.js'; /** * Match Svelte 4 behaviour by sorting ConstTag nodes in topological order @@ -290,7 +291,8 @@ export function clean_nodes( !first.metadata.dynamic && !first.attributes.some( (attribute) => attribute.type === 'Attribute' && attribute.name.startsWith('--') - ))), + ))) && + custom_renderer == undefined, /** if a component/snippet/each block starts with text, we need to add an anchor comment so that its text node doesn't get fused with its surroundings */ is_text_first: (parent.type === 'Fragment' || diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte new file mode 100644 index 0000000000..28b982ee94 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/Component.svelte @@ -0,0 +1,5 @@ + + +{@render children?.()} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js new file mode 100644 index 0000000000..135918fc82 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_config.js @@ -0,0 +1,13 @@ +import { test } from '../../test'; + +export default test({ + compileOptions: { + experimental: { + // The actual renderer module is irrelevant for this snapshot — we only + // care that the server output is a no-op while the client output still + // imports/uses the custom renderer. Using a fixed path keeps the + // snapshot stable across machines. + customRenderer: 'my-custom-renderer' + } + } +}); diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js new file mode 100644 index 0000000000..5571be6d8d --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/Component.svelte.js @@ -0,0 +1,13 @@ +import $renderer from 'my-custom-renderer'; +import 'svelte/internal/disclose-version'; +import * as $ from 'svelte/internal/client'; + +export default function Component($$anchor, $$props) { + var $$pop_renderer = $.push_renderer($renderer); + var fragment = $.comment(); + var node = $.first_child(fragment); + + $.snippet(node, () => $.validate_snippet_renderer($renderer, $$props.children) ?? $.noop); + $.append($$anchor, fragment); + $$pop_renderer(); +} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js new file mode 100644 index 0000000000..ff224836bc --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/client/main.svelte.js @@ -0,0 +1,15 @@ +import $renderer from 'my-custom-renderer'; +import 'svelte/internal/disclose-version'; +import 'svelte/internal/flags/legacy'; +import * as $ from 'svelte/internal/client'; +import Component from "./Component.svelte"; + +export default function Main($$anchor) { + var $$pop_renderer = $.push_renderer($renderer); + var fragment = $.comment(); + var node = $.first_child(fragment); + + Component(node, {}); + $.append($$anchor, fragment); + $$pop_renderer(); +} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js new file mode 100644 index 0000000000..e280e2d21d --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/Component.svelte.js @@ -0,0 +1 @@ +export default function Component() {} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js new file mode 100644 index 0000000000..2b19de8d86 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/_expected/server/main.svelte.js @@ -0,0 +1 @@ +export default function Main() {} \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte new file mode 100644 index 0000000000..ccf0870c03 --- /dev/null +++ b/packages/svelte/tests/snapshot/samples/custom-renderer-single-node/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file