@tanstack/router-core
Version:
Modern and scalable routing for React applications
45 lines (44 loc) • 1.77 kB
TypeScript
import { PluginInfo, SerovalNode } from 'seroval';
export type RawStreamHint = 'binary' | 'text';
export interface RawStreamOptions {
/**
* Encoding hint for JSON and SSR serialization.
* - 'binary' (default): Always use base64 encoding
* - 'text': Try UTF-8 first, fallback to base64 for invalid UTF-8 chunks
*/
hint?: RawStreamHint;
}
/**
* Marker class for ReadableStream<Uint8Array> that should be serialized
* with base64/text encoding (JSON and SSR) or binary framing
* (server-function responses).
*
* Wrap your binary streams with this to get efficient serialization:
* ```ts
* // For binary data (files, images, etc.)
* return { data: new RawStream(file.stream()) }
*
* // For text-heavy data (RSC payloads, etc.)
* return { data: new RawStream(rscStream, { hint: 'text' }) }
* ```
*
* RawStreams returned from one server function share one ordered response.
* Arbitrary or sequential consumption can require potentially unbounded client
* buffering for unread data. Cancelling one RawStream discards it locally;
* abort the whole server-function call to cancel the response and server work.
* Consume streams concurrently, cancel unused streams promptly, or use separate
* calls when independent backpressure is required.
*/
export declare class RawStream {
readonly stream: ReadableStream<Uint8Array>;
readonly hint: RawStreamHint;
constructor(stream: ReadableStream<Uint8Array>, options?: RawStreamOptions);
}
export type OnRawStreamCallback = (streamId: number, stream: ReadableStream<Uint8Array>) => void;
export interface RawStreamJSONNode extends PluginInfo {
text: SerovalNode;
stream: SerovalNode;
}
export interface RawStreamRPCNode extends PluginInfo {
streamId: SerovalNode;
}