@vitejs/plugin-rsc
Version:
React Server Components (RSC) support for Vite.
82 lines (80 loc) • 2.69 kB
JavaScript
import { i as tinyassert, n as memoize } from "./dist-BRSdGcl7.js";
import { a as setInternalRequire, i as removeReferenceCacheTag, n as SERVER_REFERENCE_PREFIX, r as createReferenceCacheTag, t as SERVER_DECODE_CLIENT_PREFIX } from "./shared-DEpnONZf.js";
import * as ReactServer from "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge";
//#region src/core/rsc.ts
let init = false;
let requireModule;
function setRequireModule(options) {
if (init) return;
init = true;
requireModule = (id) => {
return options.load(removeReferenceCacheTag(id));
};
globalThis.__vite_rsc_server_require__ = memoize(async (id) => {
if (id.startsWith(SERVER_DECODE_CLIENT_PREFIX)) {
id = id.slice(SERVER_DECODE_CLIENT_PREFIX.length);
id = removeReferenceCacheTag(id);
const target = {};
const getOrCreateClientReference = (name) => {
return target[name] ??= ReactServer.registerClientReference(() => {
throw new Error(`Unexpectedly client reference export '${name}' is called on server`);
}, id, name);
};
return new Proxy(target, { getOwnPropertyDescriptor(_target, name) {
if (typeof name !== "string" || name === "then") return Reflect.getOwnPropertyDescriptor(target, name);
getOrCreateClientReference(name);
return Reflect.getOwnPropertyDescriptor(target, name);
} });
}
return requireModule(id);
});
setInternalRequire();
}
async function loadServerAction(id) {
const [file, name] = id.split("#");
return (await requireModule(file))[name];
}
function createServerManifest() {
const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : "";
return new Proxy({}, { get(_target, $$id, _receiver) {
tinyassert(typeof $$id === "string");
let [id, name] = $$id.split("#");
tinyassert(id);
tinyassert(name);
return {
id: SERVER_REFERENCE_PREFIX + id + cacheTag,
name,
chunks: [],
async: true
};
} });
}
function createServerDecodeClientManifest() {
return new Proxy({}, { get(_target, id) {
return new Proxy({}, { get(_target$1, name) {
return {
id: SERVER_REFERENCE_PREFIX + SERVER_DECODE_CLIENT_PREFIX + id,
name,
chunks: [],
async: true
};
} });
} });
}
function createClientManifest() {
const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : "";
return new Proxy({}, { get(_target, $$id, _receiver) {
tinyassert(typeof $$id === "string");
let [id, name] = $$id.split("#");
tinyassert(id);
tinyassert(name);
return {
id: id + cacheTag,
name,
chunks: [],
async: true
};
} });
}
//#endregion
export { setRequireModule as a, loadServerAction as i, createServerDecodeClientManifest as n, createServerManifest as r, createClientManifest as t };