UNPKG

@tanstack/router-core

Version:

Modern and scalable routing for React applications

45 lines (44 loc) 1.77 kB
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; }