@tanstack/react-router 1.0.7 → 1.0.8

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.
@@ -18,7 +18,7 @@ export interface MatchLocation {
18
18
  caseSensitive?: boolean;
19
19
  from?: string;
20
20
  }
21
- export type NavigateFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''>(opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
21
+ export type NavigateFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined>(opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
22
22
  export type MatchRouteFn<TRouteTree extends AnyRoute> = <TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>>(location: ToOptions<TRouteTree, TFrom, TTo>, opts?: MatchRouteOptions) => false | RouteById<TRouteTree, TResolved>['types']['allParams'];
23
23
  export type BuildLocationFn<TRouteTree extends AnyRoute> = (opts: ToOptions<TRouteTree>) => ParsedLocation;
24
24
  export type InjectedHtmlEntry = string | (() => Promise<string> | string);
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { Trim } from './fileRoute';
3
3
  import { AnyRoute, ReactNode } from './route';
4
- import { AllParams, FullSearchSchema, RouteByPath, RouteIds, RoutePaths } from './routeInfo';
4
+ import { RouteByPath, RouteIds, RoutePaths } from './routeInfo';
5
5
  import { RegisteredRouter } from './router';
6
6
  import { LinkProps, UseLinkPropsOptions } from './useNavigate';
7
- import { Expand, NoInfer, NonNullableUpdater, PickRequired, UnionToIntersection, Updater } from './utils';
7
+ import { Expand, NoInfer, NonNullableUpdater, PickRequired, Updater, WithoutEmpty } from './utils';
8
8
  import { HistoryState } from '@tanstack/history';
9
9
  export type CleanPath<T extends string> = T extends `${infer L}//${infer R}` ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`> : T extends `${infer L}//` ? `${CleanPath<L>}/` : T extends `//${infer L}` ? `/${CleanPath<L>}` : T;
10
10
  export type Split<S, TIncludeTrailingSlash = true> = S extends unknown ? string extends S ? string[] : S extends string ? CleanPath<S> extends '' ? [] : TIncludeTrailingSlash extends true ? CleanPath<S> extends `${infer T}/` ? [...Split<T>, '/'] : CleanPath<S> extends `/${infer U}` ? Split<U> : CleanPath<S> extends `${infer T}/${infer U}` ? [...Split<T>, ...Split<U>] : [S] : CleanPath<S> extends `${infer T}/${infer U}` ? [...Split<T>, ...Split<U>] : S extends string ? [S] : never : never : never;
@@ -26,45 +26,42 @@ export type RelativeToPathAutoComplete<AllPaths extends string, TFrom extends st
26
26
  ] ? `${TTo}${Join<RestPath>}` : never : (TFrom extends `/` ? never : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath] ? Join<RestPath> extends {
27
27
  length: 0;
28
28
  } ? never : './' : never) | (TFrom extends `/` ? never : '../') | AllPaths;
29
- export type NavigateOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
29
+ export type NavigateOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
30
30
  replace?: boolean;
31
31
  resetScroll?: boolean;
32
32
  startTransition?: boolean;
33
33
  };
34
- export type ToOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ToSubOptions<TRouteTree, TFrom, TTo> & {
34
+ export type ToOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = ToSubOptions<TRouteTree, TFrom, TTo> & {
35
35
  mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>;
36
36
  };
37
- export type ToMaskOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {
37
+ export type ToMaskOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TMaskFrom extends RoutePaths<TRouteTree> | string = string, TMaskTo extends string | undefined = undefined> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {
38
38
  unmaskOnReload?: boolean;
39
39
  };
40
- export type ToSubOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>> = {
40
+ export type ToSubOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>> = {
41
41
  to?: ToPathOption<TRouteTree, TFrom, TTo>;
42
42
  hash?: true | Updater<string>;
43
43
  state?: true | NonNullableUpdater<HistoryState>;
44
44
  from?: TFrom;
45
- } & CheckPath<TRouteTree, NoInfer<TResolved>, {}> & SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> & PathParamOptions<TRouteTree, TFrom, TResolved>;
46
- export type SearchParamOptions<TRouteTree extends AnyRoute, TFrom, TTo, TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>, TFromSearchEnsured = '/' extends TFrom ? FullSearchSchema<TRouteTree> : Expand<PickRequired<RouteByPath<TRouteTree, TFrom>['types']['fullSearchSchema']>>, TFromSearchOptional = Omit<FullSearchSchema<TRouteTree>, keyof TFromSearchEnsured>, TFromSearch = Expand<TFromSearchEnsured & TFromSearchOptional>, TToSearch = '' extends TTo ? FullSearchSchema<TRouteTree> : Expand<RouteByPath<TRouteTree, TResolved>['types']['fullSearchSchema']>> = keyof PickRequired<TToSearch> extends never ? {
47
- search?: true | SearchReducer<TFromSearch, TToSearch>;
48
- } : {
49
- search: TFromSearchEnsured extends PickRequired<TToSearch> ? true | SearchReducer<TFromSearch, TToSearch> : SearchReducer<TFromSearch, TToSearch>;
45
+ } & CheckPath<TRouteTree, NoInfer<TResolved>, {}> & SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> & PathParamOptions<TRouteTree, TFrom, TTo, TResolved>;
46
+ type ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo);
47
+ export type ParamOptions<TRouteTree extends AnyRoute, TFrom, TTo, TResolved, TParamVariant extends 'allParams' | 'fullSearchSchema', TFromParams = Expand<RouteByPath<TRouteTree, TFrom>['types'][TParamVariant]>, TToParams = TTo extends undefined ? TFromParams : never extends TResolved ? Expand<RouteByPath<TRouteTree, TTo>['types'][TParamVariant]> : Expand<RouteByPath<TRouteTree, TResolved>['types'][TParamVariant]>, TReducer = ParamsReducer<TFromParams, TToParams>> = Expand<WithoutEmpty<PickRequired<TToParams>>> extends never ? Partial<MakeParamOption<TParamVariant, true | TReducer>> : TFromParams extends Expand<WithoutEmpty<PickRequired<TToParams>>> ? MakeParamOption<TParamVariant, true | TReducer> : MakeParamOption<TParamVariant, TReducer>;
48
+ type MakeParamOption<TParamVariant extends 'allParams' | 'fullSearchSchema', T> = TParamVariant extends 'allParams' ? MakePathParamOptions<T> : MakeSearchParamOptions<T>;
49
+ type MakeSearchParamOptions<T> = {
50
+ search: T;
50
51
  };
51
- type SearchReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo);
52
- export type PathParamOptions<TRouteTree extends AnyRoute, TFrom, TTo, TFromParamsEnsured = Expand<UnionToIntersection<PickRequired<RouteByPath<TRouteTree, TFrom>['types']['allParams']>>>, TFromParamsOptional = Omit<AllParams<TRouteTree>, keyof TFromParamsEnsured>, TFromParams = Expand<TFromParamsOptional & TFromParamsEnsured>, TToParams = Expand<RouteByPath<TRouteTree, TTo>['types']['allParams']>> = never extends TToParams ? {
53
- params?: true | ParamsReducer<Partial<TFromParams>, Partial<TFromParams>>;
54
- } : keyof PickRequired<TToParams> extends never ? {
55
- params?: true | ParamsReducer<TFromParams, TToParams>;
56
- } : {
57
- params: TFromParamsEnsured extends PickRequired<TToParams> ? true | ParamsReducer<TFromParams, TToParams> : ParamsReducer<TFromParams, TToParams>;
52
+ type MakePathParamOptions<T> = {
53
+ params: T;
58
54
  };
59
- type ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo);
60
- export type ToPathOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = ''> = TTo | RelativeToPathAutoComplete<RoutePaths<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
61
- export type ToIdOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = ''> = TTo | RelativeToPathAutoComplete<RouteIds<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
55
+ export type SearchParamOptions<TRouteTree extends AnyRoute, TFrom, TTo, TResolved> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'fullSearchSchema'>;
56
+ export type PathParamOptions<TRouteTree extends AnyRoute, TFrom, TTo, TResolved> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'allParams'>;
57
+ export type ToPathOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined> = TTo | RelativeToPathAutoComplete<RoutePaths<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
58
+ export type ToIdOption<TRouteTree extends AnyRoute = AnyRoute, TFrom extends RoutePaths<TRouteTree> | undefined = undefined, TTo extends string | undefined = undefined> = TTo | RelativeToPathAutoComplete<RouteIds<TRouteTree>, NoInfer<TFrom> extends string ? NoInfer<TFrom> : '', NoInfer<TTo> & string>;
62
59
  export interface ActiveOptions {
63
60
  exact?: boolean;
64
61
  includeHash?: boolean;
65
62
  includeSearch?: boolean;
66
63
  }
67
- export type LinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
64
+ export type LinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
68
65
  target?: HTMLAnchorElement['target'];
69
66
  activeOptions?: ActiveOptions;
70
67
  preload?: false | 'intent';
@@ -85,9 +82,9 @@ export type CheckIdError<TRouteTree extends AnyRoute, TInvalids> = {
85
82
  'Valid Route IDs': RouteIds<TRouteTree>;
86
83
  };
87
84
  export type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string ? TTo extends string ? TTo extends '.' ? TFrom : TTo extends `./` ? Join<[TFrom, '/']> : TTo extends `./${infer TRest}` ? ResolveRelativePath<TFrom, TRest> : TTo extends `/${infer TRest}` ? TTo : Split<TTo> extends ['..', ...infer ToRest] ? Split<TFrom> extends [...infer FromRest, infer FromTail] ? ToRest extends ['/'] ? Join<[...FromRest, '/']> : ResolveRelativePath<Join<FromRest>, Join<ToRest>> : never : Split<TTo> extends ['.', ...infer ToRest] ? ToRest extends ['/'] ? Join<[TFrom, '/']> : ResolveRelativePath<TFrom, Join<ToRest>> : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>> : never : never;
88
- export declare function useLinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>({ from, ...options }: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): React.AnchorHTMLAttributes<HTMLAnchorElement>;
85
+ export declare function useLinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined>(options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): React.AnchorHTMLAttributes<HTMLAnchorElement>;
89
86
  export interface LinkComponent<TProps extends Record<string, any> = {}> {
90
- <TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & TProps & React.RefAttributes<HTMLAnchorElement>): ReactNode;
87
+ <TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined>(props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & TProps & React.RefAttributes<HTMLAnchorElement>): ReactNode;
91
88
  }
92
89
  export declare const Link: LinkComponent;
93
90
  export {};
@@ -3,17 +3,17 @@ import { LinkOptions, NavigateOptions } from './link';
3
3
  import { AnyRoute } from './route';
4
4
  import { RoutePaths } from './routeInfo';
5
5
  import { RegisteredRouter } from './router';
6
- export declare function useNavigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDefaultFrom extends RoutePaths<TRouteTree> = '/'>(_defaultOpts?: {
6
+ export declare function useNavigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TDefaultFrom extends RoutePaths<TRouteTree> | string = string>(_defaultOpts?: {
7
7
  from?: TDefaultFrom;
8
- }): <TFrom extends RoutePaths<TRouteTree> = TDefaultFrom, TTo extends string = "", TMaskFrom extends RoutePaths<TRouteTree> = "/", TMaskTo extends string = "">({ from, ...rest }: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
9
- export declare function Navigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null;
10
- export type UseLinkPropsOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & React.AnchorHTMLAttributes<HTMLAnchorElement>;
11
- export type LinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {
8
+ }): <TFrom extends string | import("./routeInfo").ParseRoute<TRouteTree>["fullPath"] = TDefaultFrom, TTo extends string | undefined = undefined, TMaskFrom extends string | import("./routeInfo").ParseRoute<TRouteTree>["fullPath"] = TFrom, TMaskTo extends string | undefined = undefined>({ from, ...rest }: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
9
+ export declare function Navigate<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null;
10
+ export type UseLinkPropsOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & React.AnchorHTMLAttributes<HTMLAnchorElement>;
11
+ export type LinkProps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = ActiveLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {
12
12
  children?: React.ReactNode | ((state: {
13
13
  isActive: boolean;
14
14
  }) => React.ReactNode);
15
15
  };
16
- export type ActiveLinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = '/', TMaskTo extends string = ''> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
16
+ export type ActiveLinkOptions<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string | undefined = undefined> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {
17
17
  activeProps?: React.AnchorHTMLAttributes<HTMLAnchorElement> | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>);
18
18
  inactiveProps?: React.AnchorHTMLAttributes<HTMLAnchorElement> | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>);
19
19
  };
@@ -15,6 +15,7 @@ export type PickExtra<T, K> = {
15
15
  export type PickRequired<T> = {
16
16
  [K in keyof T as undefined extends T[K] ? never : K]: T[K];
17
17
  };
18
+ export type WithoutEmpty<T> = T extends T ? ({} extends T ? never : T) : never;
18
19
  export type Expand<T> = T extends object ? T extends infer O ? {
19
20
  [K in keyof O]: O[K];
20
21
  } : never : T;
@@ -716,6 +716,8 @@
716
716
  }, error.message ? /*#__PURE__*/React__namespace.createElement("code", null, error.message) : null)) : null);
717
717
  }
718
718
 
719
+ // from https://stackoverflow.com/a/76458160
720
+
719
721
  // export type Expand<T> = T
720
722
 
721
723
  // type Compute<T> = { [K in keyof T]: T[K] } | never
@@ -1690,10 +1692,7 @@
1690
1692
  }
1691
1693
 
1692
1694
  const preloadWarning = 'Error preloading route! ☝️';
1693
- function useLinkProps({
1694
- from,
1695
- ...options
1696
- }) {
1695
+ function useLinkProps(options) {
1697
1696
  const router = useRouter();
1698
1697
  const matchPathname = useMatch({
1699
1698
  strict: false,