rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
42 lines (41 loc) • 1.82 kB
JavaScript
import { registerServerReference as baseRegisterServerReference, registerClientReference as baseRegisterClientReference, decodeReply, } from "react-server-dom-webpack/server.edge";
import { getServerModuleExport } from "../imports/worker.js";
export function registerServerReference(action, id, name) {
if (typeof action !== "function") {
return action;
}
// Note: We no longer need to register in a Map since we use virtual lookup
return baseRegisterServerReference(action, id, name);
}
export function registerClientReference(id, exportName, value) {
const wrappedValue = (value && typeof value === "function") || typeof value === "object"
? value
: () => null;
const reference = baseRegisterClientReference({}, id, exportName);
return Object.defineProperties(wrappedValue, {
...Object.getOwnPropertyDescriptors(reference),
$$async: { value: true },
$$isClientReference: { value: true },
});
}
export async function __smokeTestActionHandler(timestamp) {
await new Promise((resolve) => setTimeout(resolve, 0));
return { status: "ok", timestamp };
}
export async function rscActionHandler(req) {
const url = new URL(req.url);
const contentType = req.headers.get("content-type");
const data = contentType?.startsWith("multipart/form-data")
? await req.formData()
: await req.text();
const args = (await decodeReply(data, null));
const actionId = url.searchParams.get("__rsc_action_id");
if (import.meta.env.VITE_IS_DEV_SERVER && actionId === "__rsc_hot_update") {
return null;
}
const action = await getServerModuleExport(actionId);
if (typeof action !== "function") {
throw new Error(`Action ${actionId} is not a function`);
}
return action(...args);
}