- Spec files
npm-tanstack--react-start
Describes: pkg:npm/@tanstack/react-start@1.132.x
- Description
- Modern full-stack React framework with SSR, streaming, server functions, and API routes powered by TanStack Router and Vite.
- Author
- tessl
- Last updated
How to use
npx @tessl/cli registry install tessl/npm-tanstack--react-start@1.132.0
server-utilities.md docs/
1# Server Utilities23Server-side utilities for handling requests, creating handlers, and managing server operations within TanStack Start applications.45## Capabilities67### Request Handler Creation89Create and configure request handlers for server-side operations.1011```typescript { .api }12/**13* Creates a start handler for server-side request processing14* @param options - Configuration options for the handler15* @returns Request handler function16*/17function createStartHandler(18options?: { streamHandler?: StreamHandler }19): RequestHandler<Register>;2021/**22* Handle server actions and provide proper error handling23* @param action - The server action to handle24* @returns Promise resolving to action result25*/26function handleServerAction<T>(action: T): Promise<T>;2728/**29* Create a request handler with custom logic30* @param handler - Function to handle the request31* @returns Request handler with proper typing32*/33function requestHandler<TRegister>(34handler: (request: Request) => Response | Promise<Response>35): RequestHandler<TRegister>;36```3738**Usage Examples:**3940```typescript41import { createStartHandler, requestHandler } from "@tanstack/react-start/server";4243// Basic start handler44const handler = createStartHandler();4546// Custom request handler47const apiHandler = requestHandler(async (request) => {48if (request.url.includes("/api/")) {49return new Response(JSON.stringify({ message: "API endpoint" }), {50headers: { "Content-Type": "application/json" }51});52}53return new Response("Not found", { status: 404 });54});5556// Handler with custom stream handler57const streamHandler = createStartHandler({58streamHandler: (readable) => {59// Custom streaming logic60return readable;61}62});63```6465### Request Context Access6667Access request information and context within server functions.6869```typescript { .api }70/**71* Get the current request object72* @returns Current HTTP request73*/74function getRequest(): Request;7576/**77* Get all request headers as an object78* @returns Object containing all request headers79*/80function getRequestHeaders(): Record<string, string>;8182/**83* Get a specific request header by name84* @param name - Header name to retrieve85* @returns Header value or undefined86*/87function getRequestHeader(name: string): string | undefined;8889/**90* Get the client IP address from the request91* @param options - Options for IP detection92* @returns Client IP address or undefined93*/94function getRequestIP(options?: { ipHeader?: string }): string | undefined;95```9697**Usage Examples:**9899```typescript100import {101getRequest,102getRequestHeaders,103getRequestHeader,104getRequestIP105} from "@tanstack/react-start";106107// Access request information in a server function108const getUserInfo = createServerFn()109.handler(async () => {110const request = getRequest();111const headers = getRequestHeaders();112const userAgent = getRequestHeader("user-agent");113const clientIP = getRequestIP();114115return {116method: request.method,117url: request.url,118userAgent,119clientIP,120headers121};122});123```124125### Response Utilities126127Utilities for creating and manipulating HTTP responses.128129```typescript { .api }130/**131* Create a JSON response with proper headers132* @param data - Data to serialize as JSON133* @param options - Response options134* @returns JSON response object135*/136function json<T>(137data: T,138options?: { status?: number; headers?: HeadersInit }139): JsonResponse;140141/**142* Merge multiple header objects into one143* @param headers - Header objects to merge144* @returns Merged headers object145*/146function mergeHeaders(...headers: HeadersInit[]): Headers;147```148149**Usage Examples:**150151```typescript152import { json, mergeHeaders } from "@tanstack/react-start";153154// Create JSON responses155const getUsers = createServerFn()156.handler(async () => {157const users = await db.user.findMany();158159return json(users, {160status: 200,161headers: { "Cache-Control": "max-age=300" }162});163});164165// Merge headers from multiple sources166const createUser = createServerFn()167.handler(async (userData) => {168const user = await db.user.create({ data: userData });169170const responseHeaders = mergeHeaders(171{ "Content-Type": "application/json" },172{ "X-User-ID": user.id },173{ "Cache-Control": "no-cache" }174);175176return json(user, { headers: responseHeaders });177});178```179180### Router Server-Side Utilities181182Server-side utilities specific to TanStack Router integration.183184```typescript { .api }185/**186* Attach router server-side SSR utilities187* @param router - Router instance to enhance188* @returns Enhanced router with SSR utilities189*/190function attachRouterServerSsrUtils<T>(router: T): T;191192/**193* Transform readable stream with router context194* @param stream - Readable stream to transform195* @param router - Router instance196* @returns Transformed stream197*/198function transformReadableStreamWithRouter<T>(199stream: ReadableStream<T>,200router: any201): ReadableStream<T>;202203/**204* Transform pipeable stream with router context205* @param stream - Pipeable stream to transform206* @param router - Router instance207* @returns Transformed stream208*/209function transformPipeableStreamWithRouter<T>(210stream: T,211router: any212): T;213```214215### Server Context Management216217Functions for managing server execution context.218219```typescript { .api }220/**221* Get the global Start context222* @returns Global Start context object223*/224function getGlobalStartContext(): StartContext;225226/**227* Get the current router instance228* @returns Router instance229*/230function getRouterInstance(): AnyRouter;231```232233## Types234235```typescript { .api }236// Request handler types237interface RequestHandler<TRegister> {238(request: Request): Promise<Response> | Response;239}240241interface RequestOptions {242onError?: (error: Error) => Response | Promise<Response>;243onRequest?: (request: Request) => Request | Promise<Request>;244onResponse?: (response: Response) => Response | Promise<Response>;245}246247// Stream handler types248interface StreamHandler {249(readable: ReadableStream): ReadableStream;250}251252// JSON response type253interface JsonResponse {254json(): any;255status: number;256headers: Headers;257ok: boolean;258statusText: string;259}260261// Start context type262interface StartContext {263request: Request;264response?: Response;265[key: string]: any;266}267268// Router types269interface AnyRouter {270// Router implementation from TanStack Router271}272273// Registration interface274interface Register {275// Extend this for custom type registration276}277```278279## Constants280281```typescript { .api }282// HTTP headers constants283const HEADERS: {284readonly CONTENT_TYPE: string;285readonly CACHE_CONTROL: string;286readonly X_TSS_SERIALIZED: string;287};288```