fix: wrap implicit children into `renderer_snippet`

svelte-custom-renderer
paoloricciuti 2 weeks ago
parent ee2f74ebf3
commit cd5e2ee6a5

@ -1,7 +1,7 @@
/** @import { BlockStatement, Expression, ExpressionStatement, Identifier, MemberExpression, Pattern, Property, SequenceExpression, SourceLocation, Statement } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../../types.js' */
import { dev, is_ignored } from '../../../../../state.js';
import { custom_renderer, dev, is_ignored } from '../../../../../state.js';
import { get_attribute_chunks, object } from '../../../../../utils/ast.js';
import * as b from '#compiler/builders';
import { add_svelte_meta, build_bind_this, Memoizer, validate_binding } from '../shared/utils.js';
@ -391,13 +391,16 @@ export function build_component(node, component_name, loc, context) {
!node.attributes.some((attr) => attr.type === 'LetDirective')
)
) {
let children_fn = dev
? b.call('$.wrap_snippet', b.id(context.state.analysis.name), slot_fn)
: slot_fn;
if (custom_renderer) {
children_fn = b.call('$.renderer_snippet', b.id('$renderer'), children_fn);
}
// create `children` prop...
push_prop(
b.init(
'children',
dev ? b.call('$.wrap_snippet', b.id(context.state.analysis.name), slot_fn) : slot_fn
)
);
push_prop(b.init('children', children_fn));
// and `$$slots.default: true` so that `<slot>` on the child works
serialized_slots.push(b.init(slot_name, b.true));

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

@ -0,0 +1,5 @@
import { test } from '../../test';
export default test({
html: 'test'
});

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