Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion integration/helpers/rsc-parcel-framework/app/entry.browser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ setServerCallback(
);

createFromReadableStream(getRSCStream()).then((payload: RSCPayload) => {
React.startTransition(() => {
// @ts-expect-error - on 18 types, requires 19.
React.startTransition(async () => {
const formState =
payload.type === "render" ? await payload.formState : undefined;

hydrateRoot(
document,
React.createElement(
Expand All @@ -36,6 +40,10 @@ createFromReadableStream(getRSCStream()).then((payload: RSCPayload) => {
payload,
}),
),
{
// @ts-expect-error - no types for this yet
formState,
},
);
});
});
2 changes: 2 additions & 0 deletions integration/helpers/rsc-parcel-framework/app/entry.rsc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import {
createTemporaryReferenceSet,
decodeAction,
decodeFormState,
decodeReply,
loadServerAction,
renderToReadableStream,
Expand All @@ -18,6 +19,7 @@ export function fetchServer(request: Request) {
return matchRSCServerRequest({
createTemporaryReferenceSet,
decodeAction,
decodeFormState,
decodeReply,
loadServerAction,
request,
Expand Down
5 changes: 5 additions & 0 deletions integration/helpers/rsc-parcel-framework/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ export const requestHandler = async (request: Request) => {
fetchServer,
createFromReadableStream,
async renderHTML(getPayload) {
const payload = await getPayload();
const formState =
payload.type === "render" ? await payload.formState : undefined;

return await renderToReadableStream(
React.createElement(unstable_RSCStaticRouter, { getPayload }),
{
bootstrapScriptContent: (
fetchServer as unknown as { bootstrapScript: string }
).bootstrapScript,
formState,
},
);
},
Expand Down
10 changes: 9 additions & 1 deletion integration/helpers/rsc-vite/src/entry.browser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ setServerCallback(
);

createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
startTransition(() => {
// @ts-expect-error - on 18 types, requires 19.
startTransition(async () => {
const formState =
payload.type === "render" ? await payload.formState : undefined;

hydrateRoot(
document,
<StrictMode>
Expand All @@ -33,6 +37,10 @@ createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
getContext={getContext}
/>
</StrictMode>,
{
// @ts-expect-error - no types for this yet
formState,
},
);
});
});
2 changes: 2 additions & 0 deletions integration/helpers/rsc-vite/src/entry.rsc.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
createTemporaryReferenceSet,
decodeAction,
decodeFormState,
decodeReply,
loadServerAction,
renderToReadableStream,
Expand All @@ -16,6 +17,7 @@ export async function fetchServer(request: Request) {
createTemporaryReferenceSet,
decodeReply,
decodeAction,
decodeFormState,
loadServerAction,
request,
requestContext,
Expand Down
7 changes: 6 additions & 1 deletion integration/helpers/rsc-vite/src/entry.ssr.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ export default async function handler(
request,
fetchServer,
createFromReadableStream,
renderHTML(getPayload) {
async renderHTML(getPayload) {
const payload = await getPayload();
const formState =
payload.type === "render" ? await payload.formState : undefined;

return ReactDomServer.renderToReadableStream(
<RSCStaticRouter getPayload={getPayload} />,
{
bootstrapScriptContent,
signal: request.signal,
formState,
},
);
},
Expand Down
27 changes: 26 additions & 1 deletion integration/rsc/rsc-nojs-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ implementations.forEach((implementation) => {
redirect("/?redirected=true", { headers: { "x-test": "test" } });
return "redirected";
}

export async function incrementAction(prev) {
return prev + 1;
}
`,
"src/routes/home.client.tsx": js`
"use client";
Expand All @@ -47,7 +51,7 @@ implementations.forEach((implementation) => {
"src/routes/home.tsx": js`
"use client";
import {useActionState} from "react";
import { redirectAction } from "./home.actions";
import { redirectAction, incrementAction } from "./home.actions";
import { Counter } from "./home.client";

export default function HomeRoute(props) {
Expand All @@ -61,15 +65,36 @@ implementations.forEach((implementation) => {
</form>
{state && <div data-testid="state">{state}</div>}
<Counter />
<TestActionState />
</div>
);
}

function TestActionState() {
const [state, action] = useActionState(incrementAction, 0);
return (
<form action={action}>
<button type="submit" data-action-state-increment-submit>
action-state-increment
</button>
<div data-action-state-increment-result>{state}</div>
</form>
);
}
`,
},
});

await page.goto(`http://localhost:${port}/`);

await expect(
page.locator("[data-action-state-increment-result]"),
).toHaveText("0");
await page.click("[data-action-state-increment-submit]");
await expect(
page.locator("[data-action-state-increment-result]"),
).toHaveText("1");

const responseHeadersPromise = new Promise<Record<string, string>>(
(resolve) => {
page.addListener("response", (response) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ setServerCallback(
);

createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
startTransition(() => {
// @ts-expect-error - on 18 types, requires 19.
startTransition(async () => {
const formState =
payload.type === "render" ? await payload.formState : undefined;

hydrateRoot(
document,
<StrictMode>
Expand All @@ -33,6 +37,10 @@ createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
createFromReadableStream={createFromReadableStream}
/>
</StrictMode>,
{
// @ts-expect-error - no types for this yet
formState,
},
);
});
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
createTemporaryReferenceSet,
decodeAction,
decodeFormState,
decodeReply,
loadServerAction,
renderToReadableStream,
Expand All @@ -14,6 +15,7 @@ export async function fetchServer(request: Request) {
createTemporaryReferenceSet,
decodeReply,
decodeAction,
decodeFormState,
loadServerAction,
request,
routes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ export default async function handler(
request,
fetchServer,
createFromReadableStream,
renderHTML(getPayload) {
async renderHTML(getPayload) {
const payload = await getPayload();
const formState =
payload.type === "render" ? await payload.formState : undefined;

return ReactDomServer.renderToReadableStream(
<RSCStaticRouter getPayload={getPayload} />,
{
bootstrapScriptContent,
signal: request.signal,
formState,
},
);
},
Expand Down
12 changes: 10 additions & 2 deletions playground/rsc-parcel/src/entry.browser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@ setServerCallback(

createFromReadableStream(getRSCStream(), { assets: "manifest" }).then(
(payload: RSCPayload) => {
React.startTransition(() => {
// @ts-expect-error - on 18 types, requires 19.
React.startTransition(async () => {
const formState =
payload.type === "render" ? await payload.formState : undefined;

hydrateRoot(
document,
<React.StrictMode>
Expand All @@ -35,7 +39,11 @@ createFromReadableStream(getRSCStream(), { assets: "manifest" }).then(
routeDiscovery="eager"
createFromReadableStream={createFromReadableStream}
/>
</React.StrictMode>
</React.StrictMode>,
{
// @ts-expect-error - no types for this yet
formState
}
);
});
}
Expand Down
2 changes: 2 additions & 0 deletions playground/rsc-parcel/src/entry.rsc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
createTemporaryReferenceSet,
decodeAction,
decodeReply,
decodeFormState,
loadServerAction,
renderToReadableStream,
// @ts-expect-error
Expand All @@ -19,6 +20,7 @@ export function fetchServer(request: Request) {
createTemporaryReferenceSet,
decodeReply,
decodeAction,
decodeFormState,
loadServerAction,
request,
routes,
Expand Down
5 changes: 5 additions & 0 deletions playground/rsc-parcel/src/entry.ssr.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,17 @@ app.use(
fetchServer,
createFromReadableStream,
async renderHTML(getPayload) {
const payload = await getPayload();
const formState =
payload.type === "render" ? await payload.formState : undefined;

return await renderHTMLToReadableStream(
<RSCStaticRouter getPayload={getPayload} />,
{
bootstrapScriptContent: (
fetchServer as unknown as { bootstrapScript: string }
).bootstrapScript,
formState,
}
);
},
Expand Down
12 changes: 10 additions & 2 deletions playground/rsc-vite/src/entry.browser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,23 @@ setServerCallback(
);

createFromReadableStream<RSCPayload>(getRSCStream()).then((payload) => {
startTransition(() => {
// @ts-expect-error - on 18 types, requires 19.
startTransition(async () => {
const formState =
payload.type === "render" ? await payload.formState : undefined;

hydrateRoot(
document,
<StrictMode>
<RSCHydratedRouter
payload={payload}
createFromReadableStream={createFromReadableStream}
/>
</StrictMode>
</StrictMode>,
{
// @ts-expect-error - no types for this yet
formState
}
);
});
});
2 changes: 2 additions & 0 deletions playground/rsc-vite/src/entry.rsc.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
createTemporaryReferenceSet,
decodeAction,
decodeReply,
decodeFormState,
loadServerAction,
renderToReadableStream,
} from "@vitejs/plugin-rsc/rsc";
Expand All @@ -14,6 +15,7 @@ export async function fetchServer(request: Request) {
createTemporaryReferenceSet,
decodeReply,
decodeAction,
decodeFormState,
loadServerAction,
request,
// @ts-expect-error
Expand Down
7 changes: 6 additions & 1 deletion playground/rsc-vite/src/entry.ssr.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,17 @@ export default async function handler(
request,
fetchServer,
createFromReadableStream,
renderHTML(getPayload) {
async renderHTML(getPayload) {
const payload = await getPayload();
const formState =
payload.type === "render" ? await payload.formState : undefined;

return ReactDomServer.renderToReadableStream(
<RSCStaticRouter getPayload={getPayload} />,
{
bootstrapScriptContent,
signal: request.signal,
formState,
}
);
},
Expand Down
Loading