UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

40 lines (39 loc) 1.62 kB
import { getSolidRenderOptions } from "./renderOptions.js"; import * as Solid from "solid-js/web"; import { memo } from "solid-js/web"; import { createSsrStreamResponse, getSsrStatus, transformReadableStreamWithRouter, waitForRequest } from "@tanstack/router-core/ssr/server"; import { isbot } from "isbot"; //#region src/ssr/renderRouterToStream.tsx var renderRouterToStream = async ({ request, router, responseHeaders, children }) => { const signal = request.signal; if (signal.aborted) { router.serverSsr?.cleanup(); throw signal.reason; } try { const docType = Solid.ssr("<!DOCTYPE html>"); const stream = Solid.renderToStream(() => [docType, memo(children)], getSolidRenderOptions(router)); const { readable, writable } = new TransformStream(); const rendererAbort = isbot(request.headers.get("User-Agent")) ? new AbortController() : void 0; const responseStream = transformReadableStreamWithRouter(router, readable, { rendererSafePoint: "record-end", signal, onAbort: rendererAbort ? (reason) => rendererAbort.abort(reason) : void 0 }); if (rendererAbort) await waitForRequest(stream, rendererAbort.signal); Promise.resolve(stream.pipeTo(writable)).catch((error) => { console.error("Error in Solid render stream:", error); writable.abort(error).catch(() => {}); }); return createSsrStreamResponse(router, new Response(responseStream, { status: getSsrStatus(router), headers: responseHeaders })); } catch (error) { router.serverSsr?.cleanup(); throw error; } }; //#endregion export { renderRouterToStream }; //# sourceMappingURL=renderRouterToStream.js.map