remix-utils-rt
Version:
This package contains simple utility functions to use with [React Router](https://reactrouter.com/home).
41 lines (40 loc) • 1.83 kB
TypeScript
export interface RespondToHandlers {
default(): Response | Promise<Response>;
[key: string]: () => Response | Promise<Response>;
}
/**
* Based on the request's Accept header, respond with the appropriate handler.
* Fallback to a default handler if no match is found.
*
* **Note**: This doesn't return a Remix's TypedResponse for json, it's always
* typed as a Response object, this is mostly useful for responding to external
* requests, not to fetchers or any other function you call in your code.
*
* @param request The request or request.headers to respond to
* @param handlers The handlers to respond with
* @returns The response from the handler
* @example
* export async function loader({ request }: LoaderFunctionArgs) {
* // do any work independent of the response type before respondTo
* let data = await getData(request);
* return respondTo(request, {
* // The handler can be a subtype handler, in text/html html is the subtype
* html() {
* let result = ReactDOMServer.renderToString(<UI {...data} />)
* return html(result)
* },
* // It can also be a highly specific type, also an async function if needed
* async "application/rss+xml"() {
* let rss = await generateRSSFeed(data);
* let headers = new Headers({ "content-type": "application/rss+xml" })
* return new Response(rss, { headers })
* },
* // The default will be used if the accept header doesn't match any of the other handlers
* default() {
* return new Response("Not Acceptable", { status: 406 })
* }
* })
* }
*/
export declare function respondTo(request: Request, handlers: RespondToHandlers): Promise<Response> | Response;
export declare function respondTo(headers: Headers, handlers: RespondToHandlers): Promise<Response> | Response;