Skip to content

Commit

Permalink
Merge pull request #347 from preactjs/jsx-template-frag-detection
Browse files Browse the repository at this point in the history
fix: precompile template empty HTML
  • Loading branch information
marvinhagemeister committed Apr 9, 2024
2 parents 720c9b7 + 7bc77a3 commit e9a53aa
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/nine-buckets-pull.md
Original file line number Diff line number Diff line change
@@ -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
5 changes: 4 additions & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = () =>
Expand Down
13 changes: 13 additions & 0 deletions test/render.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -1686,5 +1686,18 @@ describe('render', () => {
'<div>foo<span>bar</span><p>foo</p><p>bar</p></div>'
);
});

it('should bypass top level fragment detection', () => {
function Foo(props) {
return props.children;
}
let vnode = (
<Foo>
<Fragment tpl={['<div>foo', '</div>']} exprs={[<span>bar</span>]} />
</Foo>
);
let rendered = render(vnode);
expect(rendered).to.equal('<div>foo<span>bar</span></div>');
});
});
});

0 comments on commit e9a53aa

Please sign in to comment.