summaryrefslogtreecommitdiff
path: root/packages/integrations/react
diff options
context:
space:
mode:
authorGravatar Florian Lefebvre <contact@florian-lefebvre.dev> 2025-04-29 13:28:52 +0200
committerGravatar GitHub <noreply@github.com> 2025-04-29 13:28:52 +0200
commite1cd1ae52199c927ad5300a2eaed3996c6af5a64 (patch)
treec82196caebbe6cef1df84e4269e61001759932c7 /packages/integrations/react
parent210399155a6004e8e975f9024ae6d7e9945ae9a9 (diff)
downloadastro-e1cd1ae52199c927ad5300a2eaed3996c6af5a64.tar.gz
astro-e1cd1ae52199c927ad5300a2eaed3996c6af5a64.tar.zst
astro-e1cd1ae52199c927ad5300a2eaed3996c6af5a64.zip
fix: renderers types (#13720)
Diffstat (limited to 'packages/integrations/react')
-rw-r--r--packages/integrations/react/src/server-v17.ts14
-rw-r--r--packages/integrations/react/src/server.ts18
2 files changed, 18 insertions, 14 deletions
diff --git a/packages/integrations/react/src/server-v17.ts b/packages/integrations/react/src/server-v17.ts
index a91b6e6d5..92fe21943 100644
--- a/packages/integrations/react/src/server-v17.ts
+++ b/packages/integrations/react/src/server-v17.ts
@@ -1,4 +1,4 @@
-import type { AstroComponentMetadata } from 'astro';
+import type { AstroComponentMetadata, NamedSSRLoadedRendererValue } from 'astro';
import React from 'react';
import ReactDOM from 'react-dom/server';
import StaticHtml from './static-html.js';
@@ -36,11 +36,11 @@ function check(Component: any, props: Record<string, any>, children: any) {
return isReactComponent;
}
-function renderToStaticMarkup(
+async function renderToStaticMarkup(
Component: any,
props: Record<string, any>,
{ default: children, ...slotted }: Record<string, any>,
- metadata: AstroComponentMetadata,
+ metadata?: AstroComponentMetadata,
) {
delete props['class'];
const slots: Record<string, any> = {};
@@ -57,12 +57,12 @@ function renderToStaticMarkup(
if (newChildren != null) {
newProps.children = React.createElement(StaticHtml, {
// Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
- hydrate: metadata.astroStaticSlot ? !!metadata.hydrate : true,
+ hydrate: metadata?.astroStaticSlot ? !!metadata.hydrate : true,
value: newChildren,
});
}
const vnode = React.createElement(Component, newProps);
- let html;
+ let html: string;
if (metadata?.hydrate) {
html = ReactDOM.renderToString(vnode);
} else {
@@ -71,9 +71,11 @@ function renderToStaticMarkup(
return { html };
}
-export default {
+const renderer: NamedSSRLoadedRendererValue = {
name: '@astrojs/react',
check,
renderToStaticMarkup,
supportsAstroStaticSlot: true,
};
+
+export default renderer;
diff --git a/packages/integrations/react/src/server.ts b/packages/integrations/react/src/server.ts
index 5581a95db..f7e273e6b 100644
--- a/packages/integrations/react/src/server.ts
+++ b/packages/integrations/react/src/server.ts
@@ -1,5 +1,5 @@
import opts from 'astro:react:opts';
-import type { AstroComponentMetadata } from 'astro';
+import type { AstroComponentMetadata, NamedSSRLoadedRendererValue } from 'astro';
import React from 'react';
import ReactDOM from 'react-dom/server';
import { incrementId } from './context.js';
@@ -47,7 +47,7 @@ async function check(
return React.createElement('div');
}
- await renderToStaticMarkup.call(this, Tester, props, children, {} as any);
+ await renderToStaticMarkup.call(this, Tester, props, children);
return isReactComponent;
}
@@ -58,9 +58,9 @@ async function getNodeWritable(): Promise<typeof import('node:stream').Writable>
return Writable;
}
-function needsHydration(metadata: AstroComponentMetadata) {
+function needsHydration(metadata?: AstroComponentMetadata) {
// Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
- return metadata.astroStaticSlot ? !!metadata.hydrate : true;
+ return metadata?.astroStaticSlot ? !!metadata.hydrate : true;
}
async function renderToStaticMarkup(
@@ -68,7 +68,7 @@ async function renderToStaticMarkup(
Component: any,
props: Record<string, any>,
{ default: children, ...slotted }: Record<string, any>,
- metadata: AstroComponentMetadata,
+ metadata?: AstroComponentMetadata,
) {
let prefix;
if (this && this.result) {
@@ -113,7 +113,7 @@ async function renderToStaticMarkup(
identifierPrefix: prefix,
formState,
};
- let html;
+ let html: string;
if (opts.experimentalDisableStreaming) {
html = ReactDOM.renderToString(vnode);
} else if ('renderToReadableStream' in ReactDOM) {
@@ -156,7 +156,7 @@ async function getFormState({
async function renderToPipeableStreamAsync(vnode: any, options: Record<string, any>) {
const Writable = await getNodeWritable();
let html = '';
- return new Promise((resolve, reject) => {
+ return new Promise<string>((resolve, reject) => {
let error = undefined;
let stream = ReactDOM.renderToPipeableStream(vnode, {
...options,
@@ -219,9 +219,11 @@ function isFormRequest(contentType: string | null) {
return formContentTypes.some((t) => type === t);
}
-export default {
+const renderer: NamedSSRLoadedRendererValue = {
name: '@astrojs/react',
check,
renderToStaticMarkup,
supportsAstroStaticSlot: true,
};
+
+export default renderer;