From 5c63cc04b2af8e132f38fb8a7cc26d6f7a14ddd7 Mon Sep 17 00:00:00 2001 From: Marvin Hagemeister Date: Mon, 8 Apr 2024 22:32:48 +0200 Subject: [PATCH 1/2] fix: top level fragment detection with jsx precompile --- src/index.js | 5 ++++- test/render.test.jsx | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 6be1784..903216c 100644 --- a/src/index.js +++ b/src/index.js @@ -435,7 +435,10 @@ function _renderToString( // When a component returns a Fragment node we flatten it in core, so we // need to mirror that logic here too let isTopLevelFragment = - rendered != null && rendered.type === Fragment && rendered.key == null; + rendered != null && + rendered.type === Fragment && + rendered.key == null && + rendered.props.tpl == null; rendered = isTopLevelFragment ? rendered.props.children : rendered; const renderChildren = () => diff --git a/test/render.test.jsx b/test/render.test.jsx index 8d099b7..588c86f 100644 --- a/test/render.test.jsx +++ b/test/render.test.jsx @@ -1686,5 +1686,18 @@ describe('render', () => { '
foobar

foo

bar

' ); }); + + it('should bypass top level fragment detection', () => { + function Foo(props) { + return props.children; + } + let vnode = ( + + foo', '']} exprs={[bar]} /> + + ); + let rendered = render(vnode); + expect(rendered).to.equal('
foobar
'); + }); }); }); From 7bc77a3cb859069cddf0befc9bd247b2a137f10a Mon Sep 17 00:00:00 2001 From: Marvin Hagemeister Date: Mon, 8 Apr 2024 22:34:00 +0200 Subject: [PATCH 2/2] chore: add changeset --- .changeset/nine-buckets-pull.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nine-buckets-pull.md diff --git a/.changeset/nine-buckets-pull.md b/.changeset/nine-buckets-pull.md new file mode 100644 index 0000000..0b47385 --- /dev/null +++ b/.changeset/nine-buckets-pull.md @@ -0,0 +1,5 @@ +--- +'preact-render-to-string': patch +--- + +Fix JSX template being detected as a top level Fragment when Deno's jsx `precompile` option is used