UNPKG

rwsdk

Version:

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

27 lines (26 loc) 1.04 kB
import memoize from "lodash/memoize"; import { createServerReference as baseCreateServerReference } from "react-server-dom-webpack/client.edge"; export const loadServerModule = memoize(async (id) => { const { useServerLookup } = await import("virtual:use-server-lookup.js"); const moduleFn = useServerLookup[id]; if (!moduleFn) { throw new Error(`(worker) No module found for '${id}' in module lookup for "use server" directive`); } return await moduleFn(); }); export const getServerModuleExport = async (id) => { const [file, name] = id.split("#"); const module = await loadServerModule(file); return module[name]; }; const ssrCallServer = async (id, args) => { const action = await getServerModuleExport(id); if (typeof action !== "function") { throw new Error(`Server function ${id} is not a function`); } return action(...args); }; export const createServerReference = (id, name) => { id = id + "#" + name; return baseCreateServerReference(id, ssrCallServer); };