@tanstack/router-core 1.114.3 → 1.114.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,8 @@ const router = require("./router.cjs");
10
10
  const searchMiddleware = require("./searchMiddleware.cjs");
11
11
  const searchParams = require("./searchParams.cjs");
12
12
  const utils = require("./utils.cjs");
13
+ const redirect = require("./redirect.cjs");
14
+ const notFound = require("./not-found.cjs");
13
15
  exports.TSR_DEFERRED_PROMISE = defer.TSR_DEFERRED_PROMISE;
14
16
  exports.defer = defer.defer;
15
17
  exports.preloadWarning = link.preloadWarning;
@@ -48,4 +50,9 @@ exports.last = utils.last;
48
50
  exports.pick = utils.pick;
49
51
  exports.replaceEqualDeep = utils.replaceEqualDeep;
50
52
  exports.shallow = utils.shallow;
53
+ exports.isRedirect = redirect.isRedirect;
54
+ exports.isResolvedRedirect = redirect.isResolvedRedirect;
55
+ exports.redirect = redirect.redirect;
56
+ exports.isNotFound = notFound.isNotFound;
57
+ exports.notFound = notFound.notFound;
51
58
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -32,3 +32,6 @@ export type { UseNavigateResult } from './useNavigate.cjs';
32
32
  export type { UseLoaderDepsResult, ResolveUseLoaderDeps } from './useLoaderDeps.cjs';
33
33
  export type { UseLoaderDataResult, ResolveUseLoaderData } from './useLoaderData.cjs';
34
34
  export type { Redirect, ResolvedRedirect, AnyRedirect } from './redirect.cjs';
35
+ export { redirect, isRedirect, isResolvedRedirect } from './redirect.cjs';
36
+ export type { NotFoundError } from './not-found.cjs';
37
+ export { isNotFound, notFound } from './not-found.cjs';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function notFound(options = {}) {
4
+ options.isNotFound = true;
5
+ if (options.throw) throw options;
6
+ return options;
7
+ }
8
+ function isNotFound(obj) {
9
+ return !!(obj == null ? void 0 : obj.isNotFound);
10
+ }
11
+ exports.isNotFound = isNotFound;
12
+ exports.notFound = notFound;
13
+ //# sourceMappingURL=not-found.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found.cjs","sources":["../../src/not-found.ts"],"sourcesContent":["import type { RouteIds } from './routeInfo'\nimport type { RegisteredRouter } from './router'\n\nexport type NotFoundError = {\n /**\n @deprecated\n Use `routeId: rootRouteId` instead\n */\n global?: boolean\n /**\n @private\n Do not use this. It's used internally to indicate a path matching error\n */\n _global?: boolean\n data?: any\n throw?: boolean\n routeId?: RouteIds<RegisteredRouter['routeTree']>\n headers?: HeadersInit\n}\n\nexport function notFound(options: NotFoundError = {}) {\n ;(options as any).isNotFound = true\n if (options.throw) throw options\n return options\n}\n\nexport function isNotFound(obj: any): obj is NotFoundError {\n return !!obj?.isNotFound\n}\n"],"names":[],"mappings":";;AAoBgB,SAAA,SAAS,UAAyB,IAAI;AAClD,UAAgB,aAAa;AAC3B,MAAA,QAAQ,MAAa,OAAA;AAClB,SAAA;AACT;AAEO,SAAS,WAAW,KAAgC;AAClD,SAAA,CAAC,EAAC,2BAAK;AAChB;;;"}
@@ -0,0 +1,20 @@
1
+ import { RouteIds } from './routeInfo.cjs';
2
+ import { RegisteredRouter } from './router.cjs';
3
+ export type NotFoundError = {
4
+ /**
5
+ @deprecated
6
+ Use `routeId: rootRouteId` instead
7
+ */
8
+ global?: boolean;
9
+ /**
10
+ @private
11
+ Do not use this. It's used internally to indicate a path matching error
12
+ */
13
+ _global?: boolean;
14
+ data?: any;
15
+ throw?: boolean;
16
+ routeId?: RouteIds<RegisteredRouter['routeTree']>;
17
+ headers?: HeadersInit;
18
+ };
19
+ export declare function notFound(options?: NotFoundError): NotFoundError;
20
+ export declare function isNotFound(obj: any): obj is NotFoundError;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function redirect(opts) {
4
+ opts.isRedirect = true;
5
+ opts.statusCode = opts.statusCode || opts.code || 307;
6
+ opts.headers = opts.headers || {};
7
+ if (!opts.reloadDocument) {
8
+ opts.reloadDocument = false;
9
+ try {
10
+ new URL(`${opts.href}`);
11
+ opts.reloadDocument = true;
12
+ } catch {
13
+ }
14
+ }
15
+ if (opts.throw) {
16
+ throw opts;
17
+ }
18
+ return opts;
19
+ }
20
+ function isRedirect(obj) {
21
+ return !!(obj == null ? void 0 : obj.isRedirect);
22
+ }
23
+ function isResolvedRedirect(obj) {
24
+ return !!(obj == null ? void 0 : obj.isRedirect) && obj.href;
25
+ }
26
+ exports.isRedirect = isRedirect;
27
+ exports.isResolvedRedirect = isResolvedRedirect;
28
+ exports.redirect = redirect;
29
+ //# sourceMappingURL=redirect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.cjs","sources":["../../src/redirect.ts"],"sourcesContent":["import type { NavigateOptions } from './link'\nimport type { RoutePaths } from './routeInfo'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { PickAsRequired } from './utils'\n\nexport type AnyRedirect = Redirect<any, any, any, any, any>\n\nexport type Redirect<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = '/',\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = {\n href?: string\n /**\n * @deprecated Use `statusCode` instead\n **/\n code?: number\n statusCode?: number\n throw?: any\n headers?: HeadersInit\n} & NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type ResolvedRedirect<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,\n TMaskTo extends string = '',\n> = PickAsRequired<\n Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n 'code' | 'statusCode' | 'headers'\n> & {\n href: string\n}\n\nexport function redirect<\n TRouter extends RegisteredRouter,\n const TTo extends string | undefined,\n const TFrom extends string = string,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {\n ;(opts as any).isRedirect = true\n opts.statusCode = opts.statusCode || opts.code || 307\n opts.headers = opts.headers || {}\n if (!opts.reloadDocument) {\n opts.reloadDocument = false\n try {\n new URL(`${opts.href}`)\n opts.reloadDocument = true\n } catch {}\n }\n\n if (opts.throw) {\n throw opts\n }\n\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n\nexport function isResolvedRedirect(obj: any): obj is ResolvedRedirect {\n return !!obj?.isRedirect && obj.href\n}\n"],"names":[],"mappings":";;AAqCO,SAAS,SAOd,MACmD;AACjD,OAAa,aAAa;AAC5B,OAAK,aAAa,KAAK,cAAc,KAAK,QAAQ;AAC7C,OAAA,UAAU,KAAK,WAAW,CAAC;AAC5B,MAAA,CAAC,KAAK,gBAAgB;AACxB,SAAK,iBAAiB;AAClB,QAAA;AACF,UAAI,IAAI,GAAG,KAAK,IAAI,EAAE;AACtB,WAAK,iBAAiB;AAAA,IAAA,QAChB;AAAA,IAAA;AAAA,EAAC;AAGX,MAAI,KAAK,OAAO;AACR,UAAA;AAAA,EAAA;AAGD,SAAA;AACT;AAEO,SAAS,WAAW,KAA8B;AAChD,SAAA,CAAC,EAAC,2BAAK;AAChB;AAEO,SAAS,mBAAmB,KAAmC;AACpE,SAAO,CAAC,EAAC,2BAAK,eAAc,IAAI;AAClC;;;;"}
@@ -16,3 +16,6 @@ export type Redirect<TRouter extends AnyRouter = RegisteredRouter, TFrom extends
16
16
  export type ResolvedRedirect<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom, TMaskTo extends string = ''> = PickAsRequired<Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>, 'code' | 'statusCode' | 'headers'> & {
17
17
  href: string;
18
18
  };
19
+ export declare function redirect<TRouter extends RegisteredRouter, const TTo extends string | undefined, const TFrom extends string = string, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>;
20
+ export declare function isRedirect(obj: any): obj is AnyRedirect;
21
+ export declare function isResolvedRedirect(obj: any): obj is ResolvedRedirect;
@@ -32,3 +32,6 @@ export type { UseNavigateResult } from './useNavigate.js';
32
32
  export type { UseLoaderDepsResult, ResolveUseLoaderDeps } from './useLoaderDeps.js';
33
33
  export type { UseLoaderDataResult, ResolveUseLoaderData } from './useLoaderData.js';
34
34
  export type { Redirect, ResolvedRedirect, AnyRedirect } from './redirect.js';
35
+ export { redirect, isRedirect, isResolvedRedirect } from './redirect.js';
36
+ export type { NotFoundError } from './not-found.js';
37
+ export { isNotFound, notFound } from './not-found.js';
package/dist/esm/index.js CHANGED
@@ -8,6 +8,8 @@ import { defaultSerializeError, getLocationChangeInfo } from "./router.js";
8
8
  import { retainSearchParams, stripSearchParams } from "./searchMiddleware.js";
9
9
  import { defaultParseSearch, defaultStringifySearch, parseSearchWith, stringifySearchWith } from "./searchParams.js";
10
10
  import { createControlledPromise, deepEqual, escapeJSON, functionalUpdate, isPlainArray, isPlainObject, last, pick, replaceEqualDeep, shallow } from "./utils.js";
11
+ import { isRedirect, isResolvedRedirect, redirect } from "./redirect.js";
12
+ import { isNotFound, notFound } from "./not-found.js";
11
13
  export {
12
14
  TSR_DEFERRED_PROMISE,
13
15
  cleanPath,
@@ -25,16 +27,21 @@ export {
25
27
  getLocationChangeInfo,
26
28
  interpolatePath,
27
29
  isMatch,
30
+ isNotFound,
28
31
  isPlainArray,
29
32
  isPlainObject,
33
+ isRedirect,
34
+ isResolvedRedirect,
30
35
  joinPaths,
31
36
  last,
32
37
  matchByPath,
33
38
  matchPathname,
39
+ notFound,
34
40
  parsePathname,
35
41
  parseSearchWith,
36
42
  pick,
37
43
  preloadWarning,
44
+ redirect,
38
45
  removeBasepath,
39
46
  removeTrailingSlash,
40
47
  replaceEqualDeep,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ import { RouteIds } from './routeInfo.js';
2
+ import { RegisteredRouter } from './router.js';
3
+ export type NotFoundError = {
4
+ /**
5
+ @deprecated
6
+ Use `routeId: rootRouteId` instead
7
+ */
8
+ global?: boolean;
9
+ /**
10
+ @private
11
+ Do not use this. It's used internally to indicate a path matching error
12
+ */
13
+ _global?: boolean;
14
+ data?: any;
15
+ throw?: boolean;
16
+ routeId?: RouteIds<RegisteredRouter['routeTree']>;
17
+ headers?: HeadersInit;
18
+ };
19
+ export declare function notFound(options?: NotFoundError): NotFoundError;
20
+ export declare function isNotFound(obj: any): obj is NotFoundError;
@@ -0,0 +1,13 @@
1
+ function notFound(options = {}) {
2
+ options.isNotFound = true;
3
+ if (options.throw) throw options;
4
+ return options;
5
+ }
6
+ function isNotFound(obj) {
7
+ return !!(obj == null ? void 0 : obj.isNotFound);
8
+ }
9
+ export {
10
+ isNotFound,
11
+ notFound
12
+ };
13
+ //# sourceMappingURL=not-found.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found.js","sources":["../../src/not-found.ts"],"sourcesContent":["import type { RouteIds } from './routeInfo'\nimport type { RegisteredRouter } from './router'\n\nexport type NotFoundError = {\n /**\n @deprecated\n Use `routeId: rootRouteId` instead\n */\n global?: boolean\n /**\n @private\n Do not use this. It's used internally to indicate a path matching error\n */\n _global?: boolean\n data?: any\n throw?: boolean\n routeId?: RouteIds<RegisteredRouter['routeTree']>\n headers?: HeadersInit\n}\n\nexport function notFound(options: NotFoundError = {}) {\n ;(options as any).isNotFound = true\n if (options.throw) throw options\n return options\n}\n\nexport function isNotFound(obj: any): obj is NotFoundError {\n return !!obj?.isNotFound\n}\n"],"names":[],"mappings":"AAoBgB,SAAA,SAAS,UAAyB,IAAI;AAClD,UAAgB,aAAa;AAC3B,MAAA,QAAQ,MAAa,OAAA;AAClB,SAAA;AACT;AAEO,SAAS,WAAW,KAAgC;AAClD,SAAA,CAAC,EAAC,2BAAK;AAChB;"}
@@ -16,3 +16,6 @@ export type Redirect<TRouter extends AnyRouter = RegisteredRouter, TFrom extends
16
16
  export type ResolvedRedirect<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom, TMaskTo extends string = ''> = PickAsRequired<Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>, 'code' | 'statusCode' | 'headers'> & {
17
17
  href: string;
18
18
  };
19
+ export declare function redirect<TRouter extends RegisteredRouter, const TTo extends string | undefined, const TFrom extends string = string, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>;
20
+ export declare function isRedirect(obj: any): obj is AnyRedirect;
21
+ export declare function isResolvedRedirect(obj: any): obj is ResolvedRedirect;
@@ -0,0 +1,29 @@
1
+ function redirect(opts) {
2
+ opts.isRedirect = true;
3
+ opts.statusCode = opts.statusCode || opts.code || 307;
4
+ opts.headers = opts.headers || {};
5
+ if (!opts.reloadDocument) {
6
+ opts.reloadDocument = false;
7
+ try {
8
+ new URL(`${opts.href}`);
9
+ opts.reloadDocument = true;
10
+ } catch {
11
+ }
12
+ }
13
+ if (opts.throw) {
14
+ throw opts;
15
+ }
16
+ return opts;
17
+ }
18
+ function isRedirect(obj) {
19
+ return !!(obj == null ? void 0 : obj.isRedirect);
20
+ }
21
+ function isResolvedRedirect(obj) {
22
+ return !!(obj == null ? void 0 : obj.isRedirect) && obj.href;
23
+ }
24
+ export {
25
+ isRedirect,
26
+ isResolvedRedirect,
27
+ redirect
28
+ };
29
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sources":["../../src/redirect.ts"],"sourcesContent":["import type { NavigateOptions } from './link'\nimport type { RoutePaths } from './routeInfo'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { PickAsRequired } from './utils'\n\nexport type AnyRedirect = Redirect<any, any, any, any, any>\n\nexport type Redirect<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = '/',\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = {\n href?: string\n /**\n * @deprecated Use `statusCode` instead\n **/\n code?: number\n statusCode?: number\n throw?: any\n headers?: HeadersInit\n} & NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type ResolvedRedirect<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> = TFrom,\n TMaskTo extends string = '',\n> = PickAsRequired<\n Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n 'code' | 'statusCode' | 'headers'\n> & {\n href: string\n}\n\nexport function redirect<\n TRouter extends RegisteredRouter,\n const TTo extends string | undefined,\n const TFrom extends string = string,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {\n ;(opts as any).isRedirect = true\n opts.statusCode = opts.statusCode || opts.code || 307\n opts.headers = opts.headers || {}\n if (!opts.reloadDocument) {\n opts.reloadDocument = false\n try {\n new URL(`${opts.href}`)\n opts.reloadDocument = true\n } catch {}\n }\n\n if (opts.throw) {\n throw opts\n }\n\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n\nexport function isResolvedRedirect(obj: any): obj is ResolvedRedirect {\n return !!obj?.isRedirect && obj.href\n}\n"],"names":[],"mappings":"AAqCO,SAAS,SAOd,MACmD;AACjD,OAAa,aAAa;AAC5B,OAAK,aAAa,KAAK,cAAc,KAAK,QAAQ;AAC7C,OAAA,UAAU,KAAK,WAAW,CAAC;AAC5B,MAAA,CAAC,KAAK,gBAAgB;AACxB,SAAK,iBAAiB;AAClB,QAAA;AACF,UAAI,IAAI,GAAG,KAAK,IAAI,EAAE;AACtB,WAAK,iBAAiB;AAAA,IAAA,QAChB;AAAA,IAAA;AAAA,EAAC;AAGX,MAAI,KAAK,OAAO;AACR,UAAA;AAAA,EAAA;AAGD,SAAA;AACT;AAEO,SAAS,WAAW,KAA8B;AAChD,SAAA,CAAC,EAAC,2BAAK;AAChB;AAEO,SAAS,mBAAmB,KAAmC;AACpE,SAAO,CAAC,EAAC,2BAAK,eAAc,IAAI;AAClC;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/router-core",
3
- "version": "1.114.3",
3
+ "version": "1.114.7",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@tanstack/store": "^0.7.0",
48
- "@tanstack/history": "1.114.3"
48
+ "@tanstack/history": "1.114.6"
49
49
  },
50
50
  "scripts": {}
51
51
  }
package/src/index.ts CHANGED
@@ -357,3 +357,8 @@ export type { UseLoaderDepsResult, ResolveUseLoaderDeps } from './useLoaderDeps'
357
357
  export type { UseLoaderDataResult, ResolveUseLoaderData } from './useLoaderData'
358
358
 
359
359
  export type { Redirect, ResolvedRedirect, AnyRedirect } from './redirect'
360
+
361
+ export { redirect, isRedirect, isResolvedRedirect } from './redirect'
362
+
363
+ export type { NotFoundError } from './not-found'
364
+ export { isNotFound, notFound } from './not-found'
@@ -0,0 +1,29 @@
1
+ import type { RouteIds } from './routeInfo'
2
+ import type { RegisteredRouter } from './router'
3
+
4
+ export type NotFoundError = {
5
+ /**
6
+ @deprecated
7
+ Use `routeId: rootRouteId` instead
8
+ */
9
+ global?: boolean
10
+ /**
11
+ @private
12
+ Do not use this. It's used internally to indicate a path matching error
13
+ */
14
+ _global?: boolean
15
+ data?: any
16
+ throw?: boolean
17
+ routeId?: RouteIds<RegisteredRouter['routeTree']>
18
+ headers?: HeadersInit
19
+ }
20
+
21
+ export function notFound(options: NotFoundError = {}) {
22
+ ;(options as any).isNotFound = true
23
+ if (options.throw) throw options
24
+ return options
25
+ }
26
+
27
+ export function isNotFound(obj: any): obj is NotFoundError {
28
+ return !!obj?.isNotFound
29
+ }
package/src/redirect.ts CHANGED
@@ -34,3 +34,38 @@ export type ResolvedRedirect<
34
34
  > & {
35
35
  href: string
36
36
  }
37
+
38
+ export function redirect<
39
+ TRouter extends RegisteredRouter,
40
+ const TTo extends string | undefined,
41
+ const TFrom extends string = string,
42
+ const TMaskFrom extends string = TFrom,
43
+ const TMaskTo extends string = '',
44
+ >(
45
+ opts: Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
46
+ ): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {
47
+ ;(opts as any).isRedirect = true
48
+ opts.statusCode = opts.statusCode || opts.code || 307
49
+ opts.headers = opts.headers || {}
50
+ if (!opts.reloadDocument) {
51
+ opts.reloadDocument = false
52
+ try {
53
+ new URL(`${opts.href}`)
54
+ opts.reloadDocument = true
55
+ } catch {}
56
+ }
57
+
58
+ if (opts.throw) {
59
+ throw opts
60
+ }
61
+
62
+ return opts
63
+ }
64
+
65
+ export function isRedirect(obj: any): obj is AnyRedirect {
66
+ return !!obj?.isRedirect
67
+ }
68
+
69
+ export function isResolvedRedirect(obj: any): obj is ResolvedRedirect {
70
+ return !!obj?.isRedirect && obj.href
71
+ }