rsbuild-plugin-react-router
Version:
React Router plugin for Rsbuild
32 lines (31 loc) • 1.94 kB
JavaScript
import * as __WEBPACK_EXTERNAL_MODULE_node_stream_444d1c2b__ from "node:stream";
import * as __WEBPACK_EXTERNAL_MODULE__react_router_node_fff52f02__ from "@react-router/node";
import * as __WEBPACK_EXTERNAL_MODULE_isbot__ from "isbot";
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
import * as __WEBPACK_EXTERNAL_MODULE_react_dom_server_98c38d5c__ from "react-dom/server";
import * as __WEBPACK_EXTERNAL_MODULE_react_router_65608a1a__ from "react-router";
function handleRequest(request, responseStatusCode, responseHeaders, routerContext) {
return new Promise((resolve, reject)=>{
let shellRendered = !1, statusCode = responseStatusCode, userAgent = request.headers.get('user-agent'), readyOption = userAgent && (0, __WEBPACK_EXTERNAL_MODULE_isbot__.isbot)(userAgent) || routerContext.isSpaMode ? 'onAllReady' : 'onShellReady', { pipe, abort } = (0, __WEBPACK_EXTERNAL_MODULE_react_dom_server_98c38d5c__.renderToPipeableStream)(__WEBPACK_EXTERNAL_MODULE_react__.createElement(__WEBPACK_EXTERNAL_MODULE_react_router_65608a1a__.ServerRouter, {
context: routerContext,
url: request.url
}), {
[readyOption] () {
shellRendered = !0;
let body = new __WEBPACK_EXTERNAL_MODULE_node_stream_444d1c2b__.PassThrough(), stream = (0, __WEBPACK_EXTERNAL_MODULE__react_router_node_fff52f02__.createReadableStreamFromReadable)(body);
responseHeaders.set('Content-Type', 'text/html'), resolve(new Response(stream, {
headers: responseHeaders,
status: statusCode
})), pipe(body);
},
onShellError (error) {
reject(error);
},
onError (error) {
statusCode = 500, shellRendered && console.error(error);
}
});
setTimeout(abort, 5000);
});
}
export { handleRequest as default };