diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js index 216bf08b5c..c9c90a8e9e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js @@ -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 `` on the child works serialized_slots.push(b.init(slot_name, b.true)); diff --git a/packages/svelte/tests/custom-renderers/samples/single-node/Component.svelte b/packages/svelte/tests/custom-renderers/samples/single-node/Component.svelte new file mode 100644 index 0000000000..28b982ee94 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/single-node/Component.svelte @@ -0,0 +1,5 @@ + + +{@render children?.()} \ No newline at end of file diff --git a/packages/svelte/tests/custom-renderers/samples/single-node/_config.js b/packages/svelte/tests/custom-renderers/samples/single-node/_config.js new file mode 100644 index 0000000000..6c49c11430 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/single-node/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: 'test' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/single-node/main.svelte b/packages/svelte/tests/custom-renderers/samples/single-node/main.svelte new file mode 100644 index 0000000000..b63b46834c --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/single-node/main.svelte @@ -0,0 +1,5 @@ + + +test