@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
41 lines (40 loc) • 1.9 kB
JavaScript
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
const require_renderOptions = require("./renderOptions.cjs");
let solid_js_web = require("solid-js/web");
solid_js_web = require_runtime.__toESM(solid_js_web, 1);
let _tanstack_router_core_ssr_server = require("@tanstack/router-core/ssr/server");
let isbot = require("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_js_web.ssr("<!DOCTYPE html>");
const stream = solid_js_web.renderToStream(() => [docType, (0, solid_js_web.memo)(children)], require_renderOptions.getSolidRenderOptions(router));
const { readable, writable } = new TransformStream();
const rendererAbort = (0, isbot.isbot)(request.headers.get("User-Agent")) ? new AbortController() : void 0;
const responseStream = (0, _tanstack_router_core_ssr_server.transformReadableStreamWithRouter)(router, readable, {
rendererSafePoint: "record-end",
signal,
onAbort: rendererAbort ? (reason) => rendererAbort.abort(reason) : void 0
});
if (rendererAbort) await (0, _tanstack_router_core_ssr_server.waitForRequest)(stream, rendererAbort.signal);
Promise.resolve(stream.pipeTo(writable)).catch((error) => {
console.error("Error in Solid render stream:", error);
writable.abort(error).catch(() => {});
});
return (0, _tanstack_router_core_ssr_server.createSsrStreamResponse)(router, new Response(responseStream, {
status: (0, _tanstack_router_core_ssr_server.getSsrStatus)(router),
headers: responseHeaders
}));
} catch (error) {
router.serverSsr?.cleanup();
throw error;
}
};
//#endregion
exports.renderRouterToStream = renderRouterToStream;
//# sourceMappingURL=renderRouterToStream.cjs.map