vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
114 lines • 4.31 kB
TypeScript
import type { CreateHandlerOptions, AutoDiscoveredFiles, ResolvedUserOptions } from "../types.js";
import type { Logger, ConfigEnv, ResolvedConfig } from "vite";
/**
* Common parameters for both server and client createHandlerOptions functions.
*
* The main difference is in the `loader` parameter:
* - Server: Can use `server.ssrLoadModule` to load server modules directly
* - Client: Usually empty since client can't load server modules
*/
export interface CreateHandlerOptionsParams {
mode?: "production" | "development" | "test";
logger?: Logger;
defaults?: Partial<{
pageExportName: string;
propsExportName: string;
rootExportName: string;
htmlExportName: string;
cssFiles: Map<string, any>;
globalCss: Map<string, any>;
manifest: Record<string, any>;
css: any;
loader?: any;
}>;
config?: ResolvedConfig;
configEnv?: ConfigEnv;
envId?: string;
userOptions?: ResolvedUserOptions;
autoDiscoveredFiles?: AutoDiscoveredFiles;
id?: string;
children?: any;
condition?: string;
}
/**
* Server-specific handler options creation function.
*
* WHAT IT DOES:
* - Resolves file paths for server-side components (page.tsx, props.ts, etc.)
* - Sets up handler options for RSC (React Server Components) stream creation
* - Configures the environment for direct server module loading
* - Sets HtmlComponent: undefined (server loads components at runtime)
* - Uses server-specific paths and configurations
* - Caches options by unique ID for performance
*
* WHAT IT DOESN'T DO:
* - Does NOT load or instantiate React components (that happens in createHandler)
* - Does NOT create streams (that's handled by createHandler)
* - Does NOT handle HTML generation (that's the client's job)
* - Does NOT provide component placeholders
*
* USAGE:
* ```typescript
* // In react-server environment (development server, SSR)
* const handlerOptions = await createHandlerOptionsServer("/about", {
* defaults: { loader: server.ssrLoadModule }
* });
* // Result: Ready for RSC stream creation via createHandler
* ```
*
* @param route - The route path (e.g., "/", "/about")
* @param options - Configuration options
* @returns Promise<CreateHandlerOptions> - Handler options for RSC stream creation
*/
export type CreateHandlerOptionsServerFn = (route: string, options?: CreateHandlerOptionsParams) => Promise<CreateHandlerOptions & {
url: string;
}>;
/**
* Client-specific handler options creation function.
*
* WHAT IT DOES:
* - Resolves file paths for client-side components and assets
* - Sets up handler options for HTML stream creation
* - Configures the environment for client-side rendering
* - Provides component placeholders (HtmlComponent: undefined, PageComponent: undefined, etc.)
* - Sets up pageProps with URL for client-side hydration
* - Uses client-specific paths and configurations
* - Caches options by unique ID for performance
*
* WHAT IT DOESN'T DO:
* - Does NOT load or instantiate React components (that happens in workers)
* - Does NOT create streams (that's handled by createHandler)
* - Does NOT handle RSC generation (that's the server's job)
* - Does NOT provide actual component implementations
*
* USAGE:
* ```typescript
* // In react-client environment (build-time, static generation)
* const handlerOptions = await createHandlerOptionsClient("/about", {
* defaults: { loader: () => Promise.resolve({}) }
* });
* // Result: Ready for HTML stream creation via createHandler
* ```
*
* @param route - The route path (e.g., "/", "/about")
* @param options - Configuration options
* @returns Promise<CreateHandlerOptions> - Handler options for HTML stream creation
*/
export type CreateHandlerOptionsClientFn = (route: string, options?: CreateHandlerOptionsParams) => Promise<CreateHandlerOptions & {
url: string;
}>;
/**
* Resolved defaults for handler options creation.
*/
export interface ResolvedDefaults {
pageExportName: string;
propsExportName: string;
rootExportName: string;
htmlExportName: string;
cssFiles: Map<string, any>;
globalCss: Map<string, any>;
manifest: Record<string, any>;
css: any;
loader?: any;
}
//# sourceMappingURL=createHandlerOptions.types.d.ts.map