diff --git a/preact-iso/src/prerender.d.ts b/preact-iso/src/prerender.d.ts index 4e96733..2475644 100644 --- a/preact-iso/src/prerender.d.ts +++ b/preact-iso/src/prerender.d.ts @@ -1,13 +1,12 @@ -import { VNode } from 'preact'; +import { VNode } from "preact"; export interface PrerenderOptions { - maxDepth?: number; props?: Record; } export interface PrerenderResult { html: string; - links?: Set + links?: Set; } export default function prerender( diff --git a/preact-iso/src/prerender.js b/preact-iso/src/prerender.js index a202acd..f36318b 100644 --- a/preact-iso/src/prerender.js +++ b/preact-iso/src/prerender.js @@ -12,15 +12,12 @@ options.vnode = (vnode) => { /** * @param {ReturnType} vnode The root JSX element to render (eg: ``) * @param {object} [options] - * @param {number} [options.maxDepth = 10] The maximum number of nested asynchronous operations to wait for before flushing * @param {object} [options.props] Additional props to merge into the root JSX element */ export default async function prerender(vnode, options) { options = options || {}; - const maxDepth = options.maxDepth || 10; const props = options.props; - let tries = 0; if (typeof vnode === "function") { vnode = h(vnode, props); @@ -28,16 +25,6 @@ export default async function prerender(vnode, options) { vnode = cloneElement(vnode, props); } - const render = () => { - if (++tries > maxDepth) return; - try { - return renderToStringAsync(vnode); - } catch (e) { - if (e && e.then) return e.then(render); - throw e; - } - }; - let links = new Set(); vnodeHook = ({ type, props }) => { if ( @@ -51,8 +38,9 @@ export default async function prerender(vnode, options) { }; try { - let html = await render(); - html += ``; + const html = `${await renderToStringAsync( + vnode + )}`; return { html, links }; } finally { vnodeHook = null;