UNPKG

@tanstack/router-core

Version:

Modern and scalable routing for React applications

53 lines (52 loc) 2.25 kB
//#region src/redirect.ts /** * Create a redirect Response understood by TanStack Router. * * Use from route `loader`/`beforeLoad` or server functions to trigger a * navigation. If `throw: true` is set, the redirect is thrown instead of * returned. When an absolute `href` is supplied and `reloadDocument` is not * set, a full-document navigation is inferred. * * @param opts Options for the redirect. Common fields: * - `href`: absolute URL for external redirects; infers `reloadDocument`. * - `statusCode`: HTTP status code to use (defaults to 307). * - `headers`: additional headers to include on the Response. * - Standard navigation options like `to`, `params`, `search`, `replace`, * and `reloadDocument` for internal redirects. * @returns A Response augmented with router navigation options. * @link https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction */ function redirect(opts) { opts.statusCode = opts.statusCode || opts.code || 307; if (!opts._builtLocation && !opts.reloadDocument && typeof opts.href === "string") try { new URL(opts.href); opts.reloadDocument = true; } catch {} const headers = new Headers(opts.headers); if (opts.href && headers.get("Location") === null) headers.set("Location", opts.href); const response = new Response(null, { status: opts.statusCode, headers }); response.options = opts; if (opts.throw) throw response; return response; } /** Check whether a value is a TanStack Router redirect Response. */ /** Check whether a value is a TanStack Router redirect Response. */ function isRedirect(obj) { return obj instanceof Response && !!obj.options; } /** True if value is a redirect with a resolved `href` location. */ /** True if value is a redirect with a resolved `href` location. */ function isResolvedRedirect(obj) { return isRedirect(obj) && !!obj.options.href; } /** Parse a serialized redirect object back into a redirect Response. */ /** Parse a serialized redirect object back into a redirect Response. */ function parseRedirect(obj) { if (obj !== null && typeof obj === "object" && obj.isSerializedRedirect) return redirect(obj); } //#endregion export { isRedirect, isResolvedRedirect, parseRedirect, redirect }; //# sourceMappingURL=redirect.js.map