From ed2d42ec74102a1c7527bf80fe419d20f8ca1d1a Mon Sep 17 00:00:00 2001 From: daishi Date: Sun, 12 Jul 2026 08:08:45 +0900 Subject: [PATCH] fix(plugin-rsc): expose encodeFormAction option type and re-export encodeReply from ssr --- packages/plugin-rsc/src/react/ssr.ts | 7 ++++++- packages/plugin-rsc/src/types/index.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) 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[],