rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
28 lines (27 loc) • 1.06 kB
JavaScript
import { createServerReference as baseCreateServerReference } from "react-server-dom-webpack/client.edge";
import { memoizeOnId } from "../lib/memoizeOnId";
// @ts-ignore
import { useServerLookup } from "virtual:use-server-lookup.js";
export const loadServerModule = memoizeOnId(async (id) => {
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);
};