Skip to content

Commit 8a0853c

Browse files
test(rsc): provide custom rsc-parcel-framework entries (#13913)
1 parent a250960 commit 8a0853c

File tree

3 files changed

+101
-2
lines changed

3 files changed

+101
-2
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use client-entry";
2+
3+
import * as React from "react";
4+
import { hydrateRoot } from "react-dom/client";
5+
import {
6+
type unstable_RSCPayload as RSCPayload,
7+
unstable_createCallServer as createCallServer,
8+
unstable_getRSCStream as getRSCStream,
9+
unstable_RSCHydratedRouter as RSCHydratedRouter,
10+
} from "react-router";
11+
import {
12+
createFromReadableStream,
13+
createTemporaryReferenceSet,
14+
encodeReply,
15+
setServerCallback,
16+
// @ts-expect-error
17+
} from "react-server-dom-parcel/client";
18+
19+
setServerCallback(
20+
createCallServer({
21+
createFromReadableStream,
22+
createTemporaryReferenceSet,
23+
encodeReply,
24+
})
25+
);
26+
27+
createFromReadableStream(getRSCStream()).then((payload: RSCPayload) => {
28+
React.startTransition(() => {
29+
hydrateRoot(
30+
document,
31+
React.createElement(
32+
React.StrictMode,
33+
null,
34+
React.createElement(RSCHydratedRouter, {
35+
createFromReadableStream,
36+
payload,
37+
})
38+
)
39+
);
40+
});
41+
});
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"use server-entry";
2+
3+
import {
4+
createTemporaryReferenceSet,
5+
decodeAction,
6+
decodeReply,
7+
loadServerAction,
8+
renderToReadableStream,
9+
// @ts-expect-error
10+
} from "react-server-dom-parcel/server.edge";
11+
import { unstable_matchRSCServerRequest as matchRSCServerRequest } from "react-router";
12+
13+
import routes from "virtual:react-router/routes";
14+
15+
import "./entry.browser.tsx";
16+
17+
export function fetchServer(request: Request) {
18+
return matchRSCServerRequest({
19+
createTemporaryReferenceSet,
20+
decodeAction,
21+
decodeReply,
22+
loadServerAction,
23+
request,
24+
routes,
25+
generateResponse(match) {
26+
return new Response(renderToReadableStream(match.payload), {
27+
status: match.statusCode,
28+
headers: match.headers,
29+
});
30+
},
31+
});
32+
}
Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1-
import requestHandler from "virtual:react-router/request-handler";
1+
import * as React from "react";
2+
// @ts-expect-error - no types
3+
import { renderToReadableStream } from "react-dom/server.edge" assert { env: "react-client" };
4+
import {
5+
unstable_routeRSCServerRequest,
6+
unstable_RSCStaticRouter,
7+
} from "react-router" assert { env: "react-client" };
8+
// @ts-expect-error
9+
import { createFromReadableStream } from "react-server-dom-parcel/client.edge" assert { env: "react-client" };
210

3-
export { requestHandler };
11+
import { fetchServer } from "./entry.rsc" assert { env: "react-server" };
12+
13+
export const requestHandler = async (request: Request) => {
14+
return unstable_routeRSCServerRequest({
15+
request,
16+
fetchServer,
17+
createFromReadableStream,
18+
async renderHTML(getPayload) {
19+
return await renderToReadableStream(
20+
React.createElement(unstable_RSCStaticRouter, { getPayload }),
21+
{
22+
bootstrapScriptContent: (
23+
fetchServer as unknown as { bootstrapScript: string }
24+
).bootstrapScript,
25+
}
26+
);
27+
},
28+
});
29+
};

0 commit comments

Comments
 (0)