diff --git a/packages/plugin-rsc/src/react/ssr.ts b/packages/plugin-rsc/src/react/ssr.ts index 906ed3aac..b5184d854 100644 --- a/packages/plugin-rsc/src/react/ssr.ts +++ b/packages/plugin-rsc/src/react/ssr.ts @@ -1,7 +1,10 @@ // @ts-ignore import * as ReactClient from '@vitejs/plugin-rsc/vendor/react-server-dom/client.edge' import { createServerConsumerManifest } from '../core/ssr' -import type { CreateFromReadableStreamEdgeOptions } from '../types' +import type { + CreateFromReadableStreamEdgeOptions, + EncodeReplyFunction, +} from '../types' export { setRequireModule } from '../core/ssr' @@ -19,5 +22,7 @@ export function createServerReference(id: string): unknown { return ReactClient.createServerReference(id) } +export const encodeReply: EncodeReplyFunction = ReactClient.encodeReply + export const callServer = null export const findSourceMapURL = null diff --git a/packages/plugin-rsc/src/types/index.ts b/packages/plugin-rsc/src/types/index.ts index bb827a7b4..62488e3b2 100644 --- a/packages/plugin-rsc/src/types/index.ts +++ b/packages/plugin-rsc/src/types/index.ts @@ -48,6 +48,7 @@ export interface RenderToReadableStreamOptions { export interface CreateFromReadableStreamBrowserOptions { callServer?: CallServerCallback debugChannel?: DebugChannel + encodeFormAction?: EncodeFormActionCallback endTime?: number environmentName?: string replayConsoleLogs?: boolean @@ -58,6 +59,7 @@ export interface CreateFromReadableStreamBrowserOptions { // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/client/ReactFlightDOMClientEdge.js#L74-L87 export interface CreateFromReadableStreamEdgeOptions { debugChannel?: DebugChannel + encodeFormAction?: EncodeFormActionCallback endTime?: number environmentName?: string nonce?: string @@ -78,6 +80,22 @@ export interface EncodeReplyOptions { signal?: AbortSignal } +// https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-client/src/ReactFlightReplyClient.js#L59-L62 +export type EncodeFormActionCallback = ( + id: string, + args: Promise, +) => ReactCustomFormAction + +// https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/shared/ReactTypes.js#L153-L160 +export type ReactCustomFormAction = { + name?: string + action?: string + encType?: string + method?: string + target?: string + data?: FormData | null +} + // TODO: technically encode/decodeReply can serialize non-array values export type EncodeReplyFunction = ( value: unknown[],