Skip to content

Commit be75cf1

Browse files
committed
remove hack for resolve alias
1 parent 398e1e6 commit be75cf1

2 files changed

Lines changed: 69 additions & 5 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { PassThrough } from "node:stream";
2+
3+
import { createReadableStreamFromReadable } from "@react-router/node";
4+
import { ServerRouter } from "react-router";
5+
import { isbot } from "isbot";
6+
import { createElement } from "react";
7+
8+
import { renderToPipeableStream } from "react-dom/server.node";
9+
10+
export const streamTimeout = 5_000;
11+
12+
export default function handleRequest(
13+
request,
14+
responseStatusCode,
15+
responseHeaders,
16+
routerContext,
17+
loadContext
18+
) {
19+
return new Promise((resolve, reject) => {
20+
let shellRendered = false;
21+
let userAgent = request.headers.get("user-agent");
22+
23+
// Ensure requests from bots and SPA Mode renders wait for all content to load before responding
24+
// https://react.dev/reference/react-dom/server/renderToPipeableStream#waiting-for-all-content-to-load-for-crawlers-and-static-generation
25+
let readyOption =
26+
(userAgent && isbot(userAgent)) || routerContext.isSpaMode
27+
? "onAllReady"
28+
: "onShellReady";
29+
30+
const { pipe, abort } = renderToPipeableStream(
31+
createElement(ServerRouter, { context: routerContext, url: request.url }),
32+
{
33+
[readyOption]() {
34+
shellRendered = true;
35+
const body = new PassThrough();
36+
const stream = createReadableStreamFromReadable(body);
37+
38+
responseHeaders.set("Content-Type", "text/html");
39+
40+
resolve(
41+
new Response(stream, {
42+
headers: responseHeaders,
43+
status: responseStatusCode,
44+
})
45+
);
46+
47+
pipe(body);
48+
},
49+
onShellError(error) {
50+
reject(error);
51+
},
52+
onError(error) {
53+
responseStatusCode = 500;
54+
// Log streaming rendering errors from inside the shell. Don't log
55+
// errors encountered during initial shell rendering since they'll
56+
// reject and get logged in handleDocumentRequest.
57+
if (shellRendered) {
58+
console.error(error);
59+
}
60+
},
61+
}
62+
);
63+
64+
// Abort the rendering stream after the `streamTimeout` so it has time to
65+
// flush down the rejected boundaries
66+
setTimeout(abort, streamTimeout + 1000);
67+
});
68+
}

reflex/.templates/web/vite.config.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ export default defineConfig((config) => ({
3030
find: "@",
3131
replacement: fileURLToPath(new URL("./public", import.meta.url)),
3232
},
33-
].concat(
34-
config.command === "build"
35-
? [{ find: "react-dom/server", replacement: "react-dom/server.node" }]
36-
: [],
37-
),
33+
],
3834
},
3935
}));

0 commit comments

Comments
 (0)