@@ -24,4 +24,77 @@ export interface ServerConsumerManifest {
2424 }
2525}
2626
27- export type CallServerCallback = ( id : string , args : unknown [ ] ) => unknown
27+ export type CallServerCallback = (
28+ id : string ,
29+ args : unknown [ ] ,
30+ ) => Promise < unknown >
31+
32+ // Best-effort latest RSC API types
33+ // https://github.com/wakujs/waku/blob/2ce74ee2381f6c0593b8246f33043434706889fe/packages/waku/src/lib/react-types.d.ts
34+
35+ // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/server/ReactFlightDOMServerEdge.js#L64-L73
36+ export interface RenderToReadableStreamOptions {
37+ debugChannel ?: DebugChannel
38+ environmentName ?: string | ( ( ) => string )
39+ filterStackFrame ?: ( url : string , functionName : string ) => boolean
40+ identifierPrefix ?: string
41+ signal ?: AbortSignal
42+ startTime ?: number
43+ temporaryReferences ?: ServerTemporaryReferenceSet
44+ onError ?: ( error : unknown ) => void
45+ }
46+
47+ // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/client/ReactFlightDOMClientBrowser.js#L47-L57
48+ export interface CreateFromReadableStreamBrowserOptions {
49+ callServer ?: CallServerCallback
50+ debugChannel ?: DebugChannel
51+ endTime ?: number
52+ environmentName ?: string
53+ replayConsoleLogs ?: boolean
54+ startTime ?: number
55+ temporaryReferences ?: ClientTemporaryReferenceSet
56+ }
57+
58+ // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/client/ReactFlightDOMClientEdge.js#L74-L87
59+ export interface CreateFromReadableStreamEdgeOptions {
60+ debugChannel ?: DebugChannel
61+ endTime ?: number
62+ environmentName ?: string
63+ nonce ?: string
64+ replayConsoleLogs ?: boolean
65+ startTime ?: number
66+ temporaryReferences ?: ClientTemporaryReferenceSet
67+ }
68+
69+ // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/server/ReactFlightDOMServerEdge.js#L247-L253
70+ export interface DecodeReplyOptions {
71+ temporaryReferences ?: ServerTemporaryReferenceSet
72+ arraySizeLimit ?: number
73+ }
74+
75+ // https://github.com/facebook/react/blob/8b2e903a7447d370eb77bb117bc4c0ae240ce831/packages/react-server-dom-webpack/src/client/ReactFlightDOMClientBrowser.js#L261-L263
76+ export interface EncodeReplyOptions {
77+ temporaryReferences ?: ClientTemporaryReferenceSet
78+ signal ?: AbortSignal
79+ }
80+
81+ // TODO: technically encode/decodeReply can serialize non-array values
82+ export type EncodeReplyFunction = (
83+ value : unknown [ ] ,
84+ options ?: EncodeReplyOptions ,
85+ ) => Promise < string | FormData >
86+ export type DecodeReplyFunction = (
87+ body : string | FormData ,
88+ options ?: DecodeReplyOptions ,
89+ ) => Promise < unknown [ ] >
90+
91+ type DebugChannel = {
92+ readable ?: ReadableStream < Uint8Array >
93+ writable ?: WritableStream < Uint8Array >
94+ }
95+
96+ // TODO: for now keep them unknown
97+ // export type ServerTemporaryReferenceSet = WeakMap<object, string>
98+ // export type ClientTemporaryReferenceSet = Map<unknown, unknown>
99+ export type ServerTemporaryReferenceSet = unknown
100+ export type ClientTemporaryReferenceSet = unknown
0 commit comments