UNPKG

rwsdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

42 lines (41 loc) 1.82 kB
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); }