Skip to content

Commit e9a53aa

Browse files
Merge pull request #347 from preactjs/jsx-template-frag-detection
fix: precompile template empty HTML
2 parents 720c9b7 + 7bc77a3 commit e9a53aa

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

.changeset/nine-buckets-pull.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'preact-render-to-string': patch
3+
---
4+
5+
Fix JSX template being detected as a top level Fragment when Deno's jsx `precompile` option is used

src/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,10 @@ function _renderToString(
435435
// When a component returns a Fragment node we flatten it in core, so we
436436
// need to mirror that logic here too
437437
let isTopLevelFragment =
438-
rendered != null && rendered.type === Fragment && rendered.key == null;
438+
rendered != null &&
439+
rendered.type === Fragment &&
440+
rendered.key == null &&
441+
rendered.props.tpl == null;
439442
rendered = isTopLevelFragment ? rendered.props.children : rendered;
440443

441444
const renderChildren = () =>

test/render.test.jsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,5 +1686,18 @@ describe('render', () => {
16861686
'<div>foo<span>bar</span><p>foo</p><p>bar</p></div>'
16871687
);
16881688
});
1689+
1690+
it('should bypass top level fragment detection', () => {
1691+
function Foo(props) {
1692+
return props.children;
1693+
}
1694+
let vnode = (
1695+
<Foo>
1696+
<Fragment tpl={['<div>foo', '</div>']} exprs={[<span>bar</span>]} />
1697+
</Foo>
1698+
);
1699+
let rendered = render(vnode);
1700+
expect(rendered).to.equal('<div>foo<span>bar</span></div>');
1701+
});
16891702
});
16901703
});

0 commit comments

Comments
 (0)