vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
44 lines (40 loc) • 1.52 kB
text/typescript
import type { ResolveStreamElementsOptions } from "./resolveStreamElements.types.js";
import { React } from "../vendor/vendor.server.js";
import { createElementWithReact } from "./createElementWithReact.js";
import { createHandlerOptions } from "../config/createHandlerOptions.server.js";
import {
clearStashedUserOptions,
getEnvironmentId,
} from "../config/stashedOptionsState.js";
import { getCondition } from "../config/getCondition.js";
/**
* Server version of resolveStreamElements.
*
* Strategy: Resolve components and create React elements.
* This involves:
* 1. Getting handler options (which already resolves components)
* 2. Creating React elements that can be passed to ReactDOMServer.renderToPipeableStream
* 3. Returning the React elements for server-side rendering
*/
export async function resolveStreamElements(
options: ResolveStreamElementsOptions
) {
const shouldClearStashed = false;
const envId = getEnvironmentId(getCondition(), process.env.NODE_ENV ?? "production");
try {
// Get proper handler options using the existing infrastructure
// This already resolves components internally
const handlerOptions = await createHandlerOptions(options.route, {
logger: options.logger,
});
return {
type: "server" as const,
elements: createElementWithReact(React, handlerOptions),
};
} finally {
// Clean up temporarily stashed options if we stashed them
if (shouldClearStashed) {
clearStashedUserOptions(envId);
}
}
}