summaryrefslogtreecommitdiff
path: root/packages/renderers/renderer-preact
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderers/renderer-preact')
-rw-r--r--packages/renderers/renderer-preact/index.js11
-rw-r--r--packages/renderers/renderer-preact/package.json3
-rw-r--r--packages/renderers/renderer-preact/server.js10
3 files changed, 21 insertions, 3 deletions
diff --git a/packages/renderers/renderer-preact/index.js b/packages/renderers/renderer-preact/index.js
index 84d2021d1..5819ab0f2 100644
--- a/packages/renderers/renderer-preact/index.js
+++ b/packages/renderers/renderer-preact/index.js
@@ -2,5 +2,14 @@ export default {
name: '@astrojs/renderer-preact',
client: './client',
server: './server',
- knownEntrypoints: ['preact', 'preact-render-to-string'],
+ knownEntrypoints: ['preact', 'preact/jsx-runtime', 'preact-render-to-string'],
+ jsxImportSource: 'preact',
+ jsxTransformOptions: async () => {
+ const { default: { default: jsx }} = await import('@babel/plugin-transform-react-jsx');
+ return {
+ plugins: [
+ jsx({}, { runtime: 'automatic', importSource: 'preact' })
+ ]
+ }
+ }
};
diff --git a/packages/renderers/renderer-preact/package.json b/packages/renderers/renderer-preact/package.json
index f22560afb..a81097011 100644
--- a/packages/renderers/renderer-preact/package.json
+++ b/packages/renderers/renderer-preact/package.json
@@ -10,7 +10,8 @@
},
"dependencies": {
"preact": "^10.5.13",
- "preact-render-to-string": "^5.1.18"
+ "preact-render-to-string": "^5.1.18",
+ "@babel/plugin-transform-react-jsx": "^7.14.5"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
diff --git a/packages/renderers/renderer-preact/server.js b/packages/renderers/renderer-preact/server.js
index ac8661a49..441ce8ef0 100644
--- a/packages/renderers/renderer-preact/server.js
+++ b/packages/renderers/renderer-preact/server.js
@@ -10,7 +10,15 @@ function check(Component, props, children) {
}
const { html } = renderToStaticMarkup(Component, props, children);
- return typeof html === 'string';
+
+ if (typeof html !== 'string') {
+ return false;
+ }
+
+ // There are edge cases (SolidJS) where Preact *might* render a string,
+ // but components would be <undefined></undefined>
+
+ return !/\<undefined\>/.test(html);
}
function renderToStaticMarkup(Component, props, children) {