summaryrefslogtreecommitdiff
path: root/packages/renderers/renderer-solid/server.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderers/renderer-solid/server.js')
-rw-r--r--packages/renderers/renderer-solid/server.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/packages/renderers/renderer-solid/server.js b/packages/renderers/renderer-solid/server.js
new file mode 100644
index 000000000..8af4d8aab
--- /dev/null
+++ b/packages/renderers/renderer-solid/server.js
@@ -0,0 +1,26 @@
+import { createComponent } from 'solid-js';
+import { renderToStringAsync, ssr } from 'solid-js/web/dist/server.js';
+
+async function check(Component, props, children) {
+ if (typeof Component !== 'function') return false;
+
+ const { html } = await renderToStaticMarkup(Component, props, children);
+ return typeof html === 'string';
+}
+
+async function renderToStaticMarkup(Component, props, children) {
+ const html = await renderToStringAsync(() => (
+ () => createComponent(Component, {
+ ...props,
+ // In Solid SSR mode, `ssr` creates the expected structure for `children`.
+ // In Solid client mode, `ssr` is just a stub.
+ children: ssr([`<astro-fragment>${children}</astro-fragment>`]),
+ })
+ ));
+ return { html };
+}
+
+export default {
+ check,
+ renderToStaticMarkup,
+};