fix: skip single node optimization in custom renderer

paoloricciuti 1 month ago
parent 0c226fcf4e
commit 40d89b2ba6

@ -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' ||

@ -0,0 +1,5 @@
<script lang="ts">
let { children } = $props();
</script>
{@render children?.()}

@ -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'
}
}
});

@ -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();
}

@ -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();
}

@ -0,0 +1,5 @@
<script>
import Component from "./Component.svelte";
</script>
<Component />
Loading…
Cancel
Save