@tanstack/react-router 1.78.3 → 1.81.0

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.
Files changed (123) hide show
  1. package/dist/cjs/Match.cjs +10 -11
  2. package/dist/cjs/Match.cjs.map +1 -1
  3. package/dist/cjs/Matches.cjs +8 -4
  4. package/dist/cjs/Matches.cjs.map +1 -1
  5. package/dist/cjs/Matches.d.cts +8 -9
  6. package/dist/cjs/RouterProvider.cjs.map +1 -1
  7. package/dist/cjs/RouterProvider.d.cts +3 -3
  8. package/dist/cjs/Transitioner.cjs +9 -8
  9. package/dist/cjs/Transitioner.cjs.map +1 -1
  10. package/dist/cjs/fileRoute.cjs +15 -3
  11. package/dist/cjs/fileRoute.cjs.map +1 -1
  12. package/dist/cjs/fileRoute.d.cts +12 -19
  13. package/dist/cjs/link.cjs +4 -1
  14. package/dist/cjs/link.cjs.map +1 -1
  15. package/dist/cjs/link.d.cts +1 -1
  16. package/dist/cjs/path.cjs +12 -2
  17. package/dist/cjs/path.cjs.map +1 -1
  18. package/dist/cjs/path.d.cts +2 -1
  19. package/dist/cjs/route.cjs +33 -9
  20. package/dist/cjs/route.cjs.map +1 -1
  21. package/dist/cjs/route.d.cts +20 -38
  22. package/dist/cjs/router.cjs +15 -4
  23. package/dist/cjs/router.cjs.map +1 -1
  24. package/dist/cjs/router.d.cts +25 -11
  25. package/dist/cjs/routerContext.cjs.map +1 -1
  26. package/dist/cjs/routerContext.d.cts +1 -1
  27. package/dist/cjs/structuralSharing.d.cts +12 -0
  28. package/dist/cjs/useLoaderData.cjs +4 -2
  29. package/dist/cjs/useLoaderData.cjs.map +1 -1
  30. package/dist/cjs/useLoaderData.d.cts +12 -9
  31. package/dist/cjs/useLoaderDeps.cjs +3 -2
  32. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  33. package/dist/cjs/useLoaderDeps.d.cts +12 -8
  34. package/dist/cjs/useLocation.cjs.map +1 -1
  35. package/dist/cjs/useLocation.d.cts +6 -3
  36. package/dist/cjs/useMatch.cjs +2 -1
  37. package/dist/cjs/useMatch.cjs.map +1 -1
  38. package/dist/cjs/useMatch.d.cts +10 -8
  39. package/dist/cjs/useParams.cjs +3 -1
  40. package/dist/cjs/useParams.cjs.map +1 -1
  41. package/dist/cjs/useParams.d.cts +12 -8
  42. package/dist/cjs/useRouteContext.cjs.map +1 -1
  43. package/dist/cjs/useRouteContext.d.cts +11 -8
  44. package/dist/cjs/useRouterState.cjs +18 -1
  45. package/dist/cjs/useRouterState.cjs.map +1 -1
  46. package/dist/cjs/useRouterState.d.cts +6 -3
  47. package/dist/cjs/useSearch.cjs +3 -1
  48. package/dist/cjs/useSearch.cjs.map +1 -1
  49. package/dist/cjs/useSearch.d.cts +12 -8
  50. package/dist/cjs/utils.cjs.map +1 -1
  51. package/dist/cjs/utils.d.cts +10 -4
  52. package/dist/esm/Match.js +10 -11
  53. package/dist/esm/Match.js.map +1 -1
  54. package/dist/esm/Matches.d.ts +8 -9
  55. package/dist/esm/Matches.js +8 -4
  56. package/dist/esm/Matches.js.map +1 -1
  57. package/dist/esm/RouterProvider.d.ts +3 -3
  58. package/dist/esm/RouterProvider.js.map +1 -1
  59. package/dist/esm/Transitioner.js +10 -9
  60. package/dist/esm/Transitioner.js.map +1 -1
  61. package/dist/esm/fileRoute.d.ts +12 -19
  62. package/dist/esm/fileRoute.js +15 -3
  63. package/dist/esm/fileRoute.js.map +1 -1
  64. package/dist/esm/link.d.ts +1 -1
  65. package/dist/esm/link.js +4 -1
  66. package/dist/esm/link.js.map +1 -1
  67. package/dist/esm/path.d.ts +2 -1
  68. package/dist/esm/path.js +12 -2
  69. package/dist/esm/path.js.map +1 -1
  70. package/dist/esm/route.d.ts +20 -38
  71. package/dist/esm/route.js +33 -9
  72. package/dist/esm/route.js.map +1 -1
  73. package/dist/esm/router.d.ts +25 -11
  74. package/dist/esm/router.js +15 -4
  75. package/dist/esm/router.js.map +1 -1
  76. package/dist/esm/routerContext.d.ts +1 -1
  77. package/dist/esm/routerContext.js.map +1 -1
  78. package/dist/esm/structuralSharing.d.ts +12 -0
  79. package/dist/esm/useLoaderData.d.ts +12 -9
  80. package/dist/esm/useLoaderData.js +4 -2
  81. package/dist/esm/useLoaderData.js.map +1 -1
  82. package/dist/esm/useLoaderDeps.d.ts +12 -8
  83. package/dist/esm/useLoaderDeps.js +3 -2
  84. package/dist/esm/useLoaderDeps.js.map +1 -1
  85. package/dist/esm/useLocation.d.ts +6 -3
  86. package/dist/esm/useLocation.js.map +1 -1
  87. package/dist/esm/useMatch.d.ts +10 -8
  88. package/dist/esm/useMatch.js +2 -1
  89. package/dist/esm/useMatch.js.map +1 -1
  90. package/dist/esm/useParams.d.ts +12 -8
  91. package/dist/esm/useParams.js +3 -1
  92. package/dist/esm/useParams.js.map +1 -1
  93. package/dist/esm/useRouteContext.d.ts +11 -8
  94. package/dist/esm/useRouteContext.js.map +1 -1
  95. package/dist/esm/useRouterState.d.ts +6 -3
  96. package/dist/esm/useRouterState.js +18 -1
  97. package/dist/esm/useRouterState.js.map +1 -1
  98. package/dist/esm/useSearch.d.ts +12 -8
  99. package/dist/esm/useSearch.js +3 -1
  100. package/dist/esm/useSearch.js.map +1 -1
  101. package/dist/esm/utils.d.ts +10 -4
  102. package/dist/esm/utils.js.map +1 -1
  103. package/package.json +3 -3
  104. package/src/Match.tsx +6 -7
  105. package/src/Matches.tsx +52 -24
  106. package/src/RouterProvider.tsx +4 -1
  107. package/src/Transitioner.tsx +9 -10
  108. package/src/fileRoute.ts +29 -29
  109. package/src/link.tsx +6 -3
  110. package/src/path.ts +16 -1
  111. package/src/route.ts +57 -101
  112. package/src/router.ts +60 -4
  113. package/src/routerContext.tsx +1 -1
  114. package/src/structuralSharing.ts +49 -0
  115. package/src/useLoaderData.tsx +76 -28
  116. package/src/useLoaderDeps.tsx +55 -20
  117. package/src/useLocation.tsx +30 -8
  118. package/src/useMatch.tsx +71 -21
  119. package/src/useParams.tsx +70 -21
  120. package/src/useRouteContext.ts +45 -23
  121. package/src/useRouterState.tsx +45 -6
  122. package/src/useSearch.tsx +69 -20
  123. package/src/utils.ts +16 -3
@@ -28,12 +28,12 @@ declare global {
28
28
  cleanScripts: () => void;
29
29
  dehydrated?: any;
30
30
  };
31
- __TSR_ROUTER_CONTEXT__?: React.Context<Router<any, any>>;
31
+ __TSR_ROUTER_CONTEXT__?: React.Context<Router<any, any, any>>;
32
32
  }
33
33
  }
34
34
  export interface Register {
35
35
  }
36
- export type AnyRouter = Router<any, any, any, any>;
36
+ export type AnyRouter = Router<any, any, any, any, any>;
37
37
  export type AnyRouterWithContext<TContext> = Router<AnyRouteWithContext<TContext>, any, any, any>;
38
38
  export type RegisteredRouter = Register extends {
39
39
  router: infer TRouter extends AnyRouter;
@@ -61,7 +61,7 @@ export type RouterContextOptions<TRouteTree extends AnyRoute> = AnyContext exten
61
61
  context: InferRouterContext<TRouteTree>;
62
62
  };
63
63
  export type TrailingSlashOption = 'always' | 'never' | 'preserve';
64
- export interface RouterOptions<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDehydrated extends Record<string, any> = Record<string, any>, TSerializedError extends Record<string, any> = Record<string, any>> {
64
+ export interface RouterOptions<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDefaultStructuralSharingOption extends boolean = false, TDehydrated extends Record<string, any> = Record<string, any>, TSerializedError extends Record<string, any> = Record<string, any>> {
65
65
  /**
66
66
  * The history object that will be used to manage the browser history.
67
67
  *
@@ -352,6 +352,19 @@ export interface RouterOptions<TRouteTree extends AnyRoute, TTrailingSlashOption
352
352
  */
353
353
  strict?: boolean;
354
354
  };
355
+ /**
356
+ * Configures whether structural sharing is enabled by default for fine-grained selectors.
357
+ *
358
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#defaultstructuralsharing-property)
359
+ */
360
+ defaultStructuralSharing?: TDefaultStructuralSharingOption;
361
+ /**
362
+ * Configures which URI characters are allowed in path params that would ordinarily be escaped by encodeURIComponent.
363
+ *
364
+ * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#pathparamsallowedcharacters-property)
365
+ * @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/path-params#allowed-characters)
366
+ */
367
+ pathParamsAllowedCharacters?: Array<';' | ':' | '@' | '&' | '=' | '+' | '$' | ','>;
355
368
  }
356
369
  export interface RouterErrorSerializer<TSerializedError> {
357
370
  serialize: (err: unknown) => TSerializedError;
@@ -400,7 +413,7 @@ export interface DehydratedRouter {
400
413
  state: DehydratedRouterState;
401
414
  manifest?: Manifest;
402
415
  }
403
- export type RouterConstructorOptions<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDehydrated extends Record<string, any>, TSerializedError extends Record<string, any>> = Omit<RouterOptions<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>, 'context'> & RouterContextOptions<TRouteTree>;
416
+ export type RouterConstructorOptions<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDefaultStructuralSharingOption extends boolean, TDehydrated extends Record<string, any>, TSerializedError extends Record<string, any>> = Omit<RouterOptions<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>, 'context'> & RouterContextOptions<TRouteTree>;
404
417
  export declare const componentTypes: readonly ["component", "errorComponent", "pendingComponent", "notFoundComponent"];
405
418
  export type RouterEvents = {
406
419
  onBeforeNavigate: {
@@ -439,14 +452,14 @@ export type RouterListener<TRouterEvent extends RouterEvent> = {
439
452
  eventType: TRouterEvent['type'];
440
453
  fn: ListenerFn<TRouterEvent>;
441
454
  };
442
- export declare function createRouter<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDehydrated extends Record<string, any> = Record<string, any>, TSerializedError extends Record<string, any> = Record<string, any>>(options: undefined extends number ? 'strictNullChecks must be enabled in tsconfig.json' : RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>): Router<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>;
455
+ export declare function createRouter<TRouteTree extends AnyRoute, TTrailingSlashOption extends TrailingSlashOption, TDefaultStructuralSharingOption extends boolean, TDehydrated extends Record<string, any> = Record<string, any>, TSerializedError extends Record<string, any> = Record<string, any>>(options: undefined extends number ? 'strictNullChecks must be enabled in tsconfig.json' : RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>): Router<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>;
443
456
  type MatchRoutesOpts = {
444
457
  preload?: boolean;
445
458
  throwOnError?: boolean;
446
459
  _buildLocation?: boolean;
447
460
  dest?: BuildNextOptions;
448
461
  };
449
- export declare class Router<in out TRouteTree extends AnyRoute, in out TTrailingSlashOption extends TrailingSlashOption, in out TDehydrated extends Record<string, any> = Record<string, any>, in out TSerializedError extends Record<string, any> = Record<string, any>> {
462
+ export declare class Router<in out TRouteTree extends AnyRoute, in out TTrailingSlashOption extends TrailingSlashOption, in out TDefaultStructuralSharingOption extends boolean, in out TDehydrated extends Record<string, any> = Record<string, any>, in out TSerializedError extends Record<string, any> = Record<string, any>> {
450
463
  tempLocationKey: string | undefined;
451
464
  resetNextScroll: boolean;
452
465
  shouldViewTransition?: boolean;
@@ -464,7 +477,7 @@ export declare class Router<in out TRouteTree extends AnyRoute, in out TTrailing
464
477
  }) => any;
465
478
  serializer?: (data: any) => string;
466
479
  __store: Store<RouterState<TRouteTree>>;
467
- options: PickAsRequired<Omit<RouterOptions<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>, 'transformer'> & {
480
+ options: PickAsRequired<Omit<RouterOptions<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>, 'transformer'> & {
468
481
  transformer: RouterTransformer;
469
482
  }, 'stringifySearch' | 'parseSearch' | 'context'>;
470
483
  history: RouterHistory;
@@ -475,12 +488,13 @@ export declare class Router<in out TRouteTree extends AnyRoute, in out TTrailing
475
488
  routesByPath: RoutesByPath<TRouteTree>;
476
489
  flatRoutes: Array<AnyRoute>;
477
490
  isServer: boolean;
491
+ pathParamsDecodeCharMap?: Map<string, string>;
478
492
  /**
479
493
  * @deprecated Use the `createRouter` function instead
480
494
  */
481
- constructor(options: RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>);
495
+ constructor(options: RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>);
482
496
  startReactTransition: (fn: () => void) => void;
483
- update: (newOptions: RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>) => void;
497
+ update: (newOptions: RouterConstructorOptions<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>) => void;
484
498
  get state(): RouterState<TRouteTree, MakeRouteMatch<TRouteTree>>;
485
499
  buildRouteTree: () => void;
486
500
  subscribe: <TType extends keyof RouterEvents>(eventType: TType, fn: ListenerFn<RouterEvents[TType]>) => () => void;
@@ -533,8 +547,8 @@ export declare class Router<in out TRouteTree extends AnyRoute, in out TTrailing
533
547
  filter?: (d: MakeRouteMatchUnion<TRouter>) => boolean;
534
548
  }) => void;
535
549
  clearExpiredCache: () => void;
536
- preloadRoute: <TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string = "">(opts: NavigateOptions<Router<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<Array<AnyRouteMatch> | undefined>;
537
- matchRoute: <TFrom extends RoutePaths<TRouteTree> = "/", TTo extends string | undefined = undefined, TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>>(location: ToOptions<Router<TRouteTree, TTrailingSlashOption, TDehydrated, TSerializedError>, TFrom, TTo>, opts?: MatchRouteOptions) => false | RouteById<TRouteTree, TResolved>["types"]["allParams"];
550
+ preloadRoute: <TFrom extends RoutePaths<TRouteTree> | string = string, TTo extends string | undefined = undefined, TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom, TMaskTo extends string = "">(opts: NavigateOptions<Router<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<Array<AnyRouteMatch> | undefined>;
551
+ matchRoute: <TFrom extends RoutePaths<TRouteTree> = "/", TTo extends string | undefined = undefined, TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>>(location: ToOptions<Router<TRouteTree, TTrailingSlashOption, TDefaultStructuralSharingOption, TDehydrated, TSerializedError>, TFrom, TTo>, opts?: MatchRouteOptions) => false | RouteById<TRouteTree, TResolved>["types"]["allParams"];
538
552
  dehydrate: () => DehydratedRouter;
539
553
  hydrate: () => void;
540
554
  injectedHtml: Array<() => string>;
@@ -1 +1 @@
1
- {"version":3,"file":"routerContext.cjs","sources":["../../src/routerContext.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { Router } from './router'\n\nconst routerContext = React.createContext<Router<any, any>>(null!)\n\nexport function getRouterContext() {\n if (typeof document === 'undefined') {\n return routerContext\n }\n\n if (window.__TSR_ROUTER_CONTEXT__) {\n return window.__TSR_ROUTER_CONTEXT__\n }\n\n window.__TSR_ROUTER_CONTEXT__ = routerContext as any\n\n return routerContext\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,gBAAgBA,iBAAM,cAAgC,IAAK;AAE1D,SAAS,mBAAmB;AAC7B,MAAA,OAAO,aAAa,aAAa;AAC5B,WAAA;AAAA,EAAA;AAGT,MAAI,OAAO,wBAAwB;AACjC,WAAO,OAAO;AAAA,EAAA;AAGhB,SAAO,yBAAyB;AAEzB,SAAA;AACT;;"}
1
+ {"version":3,"file":"routerContext.cjs","sources":["../../src/routerContext.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { Router } from './router'\n\nconst routerContext = React.createContext<Router<any, any, any>>(null!)\n\nexport function getRouterContext() {\n if (typeof document === 'undefined') {\n return routerContext\n }\n\n if (window.__TSR_ROUTER_CONTEXT__) {\n return window.__TSR_ROUTER_CONTEXT__\n }\n\n window.__TSR_ROUTER_CONTEXT__ = routerContext as any\n\n return routerContext\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,gBAAgBA,iBAAM,cAAqC,IAAK;AAE/D,SAAS,mBAAmB;AAC7B,MAAA,OAAO,aAAa,aAAa;AAC5B,WAAA;AAAA,EAAA;AAGT,MAAI,OAAO,wBAAwB;AACjC,WAAO,OAAO;AAAA,EAAA;AAGhB,SAAO,yBAAyB;AAEzB,SAAA;AACT;;"}
@@ -1,3 +1,3 @@
1
1
  import { Router } from './router.cjs';
2
2
  import * as React from 'react';
3
- export declare function getRouterContext(): React.Context<Router<any, any, Record<string, any>, Record<string, any>>>;
3
+ export declare function getRouterContext(): React.Context<Router<any, any, any, Record<string, any>, Record<string, any>>>;
@@ -0,0 +1,12 @@
1
+ import { Constrain, ValidateJSON } from './utils.cjs';
2
+ import { AnyRouter } from './router.cjs';
3
+ export type DefaultStructuralSharingEnabled<TRouter extends AnyRouter> = boolean extends TRouter['options']['defaultStructuralSharing'] ? false : NonNullable<TRouter['options']['defaultStructuralSharing']>;
4
+ export interface OptionalStructuralSharing<TStructuralSharing, TConstraint> {
5
+ readonly structuralSharing?: Constrain<TStructuralSharing, TConstraint> | undefined;
6
+ }
7
+ export interface RequiredStructuralSharing<TStructuralSharing, TConstraint> {
8
+ readonly structuralSharing: Constrain<TStructuralSharing, TConstraint>;
9
+ }
10
+ export type StructuralSharingOption<TRouter extends AnyRouter, TSelected, TStructuralSharing> = unknown extends TSelected ? OptionalStructuralSharing<TStructuralSharing, boolean> : unknown extends TRouter['routeTree'] ? OptionalStructuralSharing<TStructuralSharing, boolean> : TSelected extends ValidateJSON<TSelected> ? OptionalStructuralSharing<TStructuralSharing, boolean> : DefaultStructuralSharingEnabled<TRouter> extends true ? RequiredStructuralSharing<TStructuralSharing, false> : OptionalStructuralSharing<TStructuralSharing, false>;
11
+ export type StructuralSharingEnabled<TRouter extends AnyRouter, TStructuralSharing> = boolean extends TStructuralSharing ? DefaultStructuralSharingEnabled<TRouter> : TStructuralSharing;
12
+ export type ValidateSelected<TRouter extends AnyRouter, TSelected, TStructuralSharing> = StructuralSharingEnabled<TRouter, TStructuralSharing> extends true ? ValidateJSON<TSelected> : TSelected;
@@ -3,9 +3,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useMatch = require("./useMatch.cjs");
4
4
  function useLoaderData(opts) {
5
5
  return useMatch.useMatch({
6
- ...opts,
6
+ from: opts.from,
7
+ strict: opts.strict,
8
+ structuralSharing: opts.structuralSharing,
7
9
  select: (s) => {
8
- return typeof opts.select === "function" ? opts.select(s.loaderData) : s.loaderData;
10
+ return opts.select ? opts.select(s.loaderData) : s.loaderData;
9
11
  }
10
12
  });
11
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useLoaderData.cjs","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { RegisteredRouter } from './router'\nimport type { AnyRoute } from './route'\nimport type { MakeRouteMatch } from './Matches'\nimport type { RouteIds } from './routeInfo'\nimport type { Constrain, StrictOrFrom } from './utils'\n\nexport type UseLoaderDataOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TStrict extends boolean,\n TRouteMatch extends MakeRouteMatch<TRouteTree, TFrom, TStrict>,\n TSelected,\n> = StrictOrFrom<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict> & {\n select?: (match: Required<TRouteMatch>['loaderData']) => TSelected\n}\n\nexport function useLoaderData<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TRouteMatch extends MakeRouteMatch<\n TRouteTree,\n TFrom,\n TStrict\n > = MakeRouteMatch<TRouteTree, TFrom, TStrict>,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: UseLoaderDataOptions<\n TRouteTree,\n TFrom,\n TStrict,\n TRouteMatch,\n TSelected\n >,\n): TSelected {\n return useMatch<TRouteTree, TFrom, TStrict, TRouteMatch, TSelected>({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s.loaderData)\n : (s.loaderData as TSelected)\n },\n })\n}\n"],"names":["useMatch"],"mappings":";;;AAiBO,SAAS,cAWd,MAOW;AACX,SAAOA,kBAA6D;AAAA,IAClE,GAAG;AAAA,IACH,QAAQ,CAAC,MAAM;AACN,aAAA,OAAO,KAAK,WAAW,aAC1B,KAAK,OAAO,EAAE,UAAU,IACvB,EAAE;AAAA,IAAA;AAAA,EACT,CACD;AACH;;"}
1
+ {"version":3,"file":"useLoaderData.cjs","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { AllLoaderData, RouteById } from './routeInfo'\nimport type { Expand, StrictOrFrom } from './utils'\n\nexport interface UseLoaderDataBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n match: ResolveLoaderData<TRouter, TFrom, TStrict>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseLoaderDataOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseLoaderDataBaseOptions<\n TRouter,\n TFrom,\n TStrict,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type ResolveLoaderData<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n> = TStrict extends false\n ? AllLoaderData<TRouter['routeTree']>\n : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderData']>\n\nexport type UseLoaderDataResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? ResolveLoaderData<TRouter, TFrom, TStrict>\n : TSelected\n\nexport type UseLoaderDataRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseLoaderDataBaseOptions<\n TRouter,\n TId,\n true,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n) => UseLoaderDataResult<TRouter, TId, true, TSelected>\n\nexport function useLoaderData<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts: UseLoaderDataOptions<\n TRouter,\n TFrom,\n TStrict,\n TSelected,\n TStructuralSharing\n >,\n): UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n structuralSharing: opts.structuralSharing,\n select: (s: any) => {\n return opts.select ? opts.select(s.loaderData) : s.loaderData\n },\n } as any) as UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>\n}\n"],"names":["useMatch"],"mappings":";;;AAqEO,SAAS,cAOd,MAOyD;AACzD,SAAOA,kBAAS;AAAA,IACd,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK;AAAA,IACxB,QAAQ,CAAC,MAAW;AAClB,aAAO,KAAK,SAAS,KAAK,OAAO,EAAE,UAAU,IAAI,EAAE;AAAA,IAAA;AAAA,EACrD,CACM;AACV;;"}
@@ -1,9 +1,12 @@
1
- import { RegisteredRouter } from './router.cjs';
2
- import { AnyRoute } from './route.cjs';
3
- import { MakeRouteMatch } from './Matches.cjs';
4
- import { RouteIds } from './routeInfo.cjs';
5
- import { Constrain, StrictOrFrom } from './utils.cjs';
6
- export type UseLoaderDataOptions<TRouteTree extends AnyRoute, TFrom, TStrict extends boolean, TRouteMatch extends MakeRouteMatch<TRouteTree, TFrom, TStrict>, TSelected> = StrictOrFrom<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict> & {
7
- select?: (match: Required<TRouteMatch>['loaderData']) => TSelected;
8
- };
9
- export declare function useLoaderData<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TStrict extends boolean = true, TRouteMatch extends MakeRouteMatch<TRouteTree, TFrom, TStrict> = MakeRouteMatch<TRouteTree, TFrom, TStrict>, TSelected = Required<TRouteMatch>['loaderData']>(opts: UseLoaderDataOptions<TRouteTree, TFrom, TStrict, TRouteMatch, TSelected>): TSelected;
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
2
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
3
+ import { AllLoaderData, RouteById } from './routeInfo.cjs';
4
+ import { Expand, StrictOrFrom } from './utils.cjs';
5
+ export interface UseLoaderDataBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, TStructuralSharing> {
6
+ select?: (match: ResolveLoaderData<TRouter, TFrom, TStrict>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
7
+ }
8
+ export type UseLoaderDataOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected, TStructuralSharing> = StrictOrFrom<TRouter, TFrom, TStrict> & UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
9
+ export type ResolveLoaderData<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllLoaderData<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderData']>;
10
+ export type UseLoaderDataResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveLoaderData<TRouter, TFrom, TStrict> : TSelected;
11
+ export type UseLoaderDataRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>) => UseLoaderDataResult<TRouter, TId, true, TSelected>;
12
+ export declare function useLoaderData<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing>): UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>;
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useMatch = require("./useMatch.cjs");
4
4
  function useLoaderDeps(opts) {
5
+ const { select, ...rest } = opts;
5
6
  return useMatch.useMatch({
6
- ...opts,
7
+ ...rest,
7
8
  select: (s) => {
8
- return typeof opts.select === "function" ? opts.select(s.loaderDeps) : s.loaderDeps;
9
+ return select ? select(s.loaderDeps) : s.loaderDeps;
9
10
  }
10
11
  });
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useLoaderDeps.cjs","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { RegisteredRouter } from './router'\nimport type { AnyRoute } from './route'\nimport type { MakeRouteMatch } from './Matches'\nimport type { RouteIds } from './routeInfo'\nimport type { Constrain, StrictOrFrom } from './utils'\n\nexport function useLoaderDeps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TRouteMatch extends MakeRouteMatch<TRouteTree, TFrom> = MakeRouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: StrictOrFrom<Constrain<TFrom, RouteIds<TRouteTree>>> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s.loaderDeps)\n : s.loaderDeps\n },\n })\n}\n"],"names":["useMatch"],"mappings":";;;AAOO,SAAS,cASd,MAGW;AACX,SAAOA,kBAAS;AAAA,IACd,GAAG;AAAA,IACH,QAAQ,CAAC,MAAM;AACN,aAAA,OAAO,KAAK,WAAW,aAC1B,KAAK,OAAO,EAAE,UAAU,IACxB,EAAE;AAAA,IAAA;AAAA,EACR,CACD;AACH;;"}
1
+ {"version":3,"file":"useLoaderDeps.cjs","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { RouteById } from './routeInfo'\nimport type { Expand, StrictOrFrom } from './utils'\n\nexport interface UseLoaderDepsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n deps: ResolveLoaderDeps<TRouter, TFrom>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseLoaderDepsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TSelected,\n TStructuralSharing,\n> = StrictOrFrom<TRouter, TFrom> &\n UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type ResolveLoaderDeps<TRouter extends AnyRouter, TFrom> = Expand<\n RouteById<TRouter['routeTree'], TFrom>['types']['loaderDeps']\n>\n\nexport type UseLoaderDepsResult<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n> = unknown extends TSelected ? ResolveLoaderDeps<TRouter, TFrom> : TSelected\n\nexport type UseLoaderDepsRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, false>,\n) => UseLoaderDepsResult<TRouter, TId, TSelected>\n\nexport function useLoaderDeps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected, TStructuralSharing>,\n): UseLoaderDepsResult<TRouter, TFrom, TSelected> {\n const { select, ...rest } = opts\n return useMatch({\n ...rest,\n select: (s) => {\n return select ? select(s.loaderDeps) : s.loaderDeps\n },\n }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>\n}\n"],"names":["useMatch"],"mappings":";;;AAgDO,SAAS,cAMd,MACgD;AAChD,QAAM,EAAE,QAAQ,GAAG,KAAA,IAAS;AAC5B,SAAOA,kBAAS;AAAA,IACd,GAAG;AAAA,IACH,QAAQ,CAAC,MAAM;AACb,aAAO,SAAS,OAAO,EAAE,UAAU,IAAI,EAAE;AAAA,IAAA;AAAA,EAC3C,CACD;AACH;;"}
@@ -1,8 +1,12 @@
1
- import { RegisteredRouter } from './router.cjs';
2
- import { AnyRoute } from './route.cjs';
3
- import { MakeRouteMatch } from './Matches.cjs';
4
- import { RouteIds } from './routeInfo.cjs';
5
- import { Constrain, StrictOrFrom } from './utils.cjs';
6
- export declare function useLoaderDeps<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TRouteMatch extends MakeRouteMatch<TRouteTree, TFrom> = MakeRouteMatch<TRouteTree, TFrom>, TSelected = Required<TRouteMatch>['loaderDeps']>(opts: StrictOrFrom<Constrain<TFrom, RouteIds<TRouteTree>>> & {
7
- select?: (match: TRouteMatch) => TSelected;
8
- }): TSelected;
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
2
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
3
+ import { RouteById } from './routeInfo.cjs';
4
+ import { Expand, StrictOrFrom } from './utils.cjs';
5
+ export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected, TStructuralSharing> {
6
+ select?: (deps: ResolveLoaderDeps<TRouter, TFrom>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
7
+ }
8
+ export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected, TStructuralSharing> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
9
+ export type ResolveLoaderDeps<TRouter extends AnyRouter, TFrom> = Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderDeps']>;
10
+ export type UseLoaderDepsResult<TRouter extends AnyRouter, TFrom, TSelected> = unknown extends TSelected ? ResolveLoaderDeps<TRouter, TFrom> : TSelected;
11
+ export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, false>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
12
+ export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected, TStructuralSharing>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
@@ -1 +1 @@
1
- {"version":3,"file":"useLocation.cjs","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\nimport type { AnyRouter, RegisteredRouter, RouterState } from './router'\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TLocationState = RouterState<TRouter['routeTree']>['location'],\n TSelected = TLocationState,\n>(opts?: { select?: (state: TLocationState) => TSelected }): TSelected {\n return useRouterState({\n select: (state) =>\n opts?.select\n ? opts.select(state.location as TLocationState)\n : (state.location as TSelected),\n })\n}\n"],"names":["useRouterState"],"mappings":";;;AAGO,SAAS,YAId,MAAqE;AACrE,SAAOA,8BAAe;AAAA,IACpB,QAAQ,CAAC,WACP,6BAAM,UACF,KAAK,OAAO,MAAM,QAA0B,IAC3C,MAAM;AAAA,EAAA,CACd;AACH;;"}
1
+ {"version":3,"file":"useLocation.cjs","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AnyRouter, RegisteredRouter, RouterState } from './router'\n\nexport interface UseLocationBaseOptions<\n TRouter extends AnyRouter,\n TSelected,\n TStructuralSharing extends boolean = boolean,\n> {\n select?: (\n state: RouterState<TRouter['routeTree']>['location'],\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n): UseLocationResult<TRouter, TSelected> {\n return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as UseLocationResult<TRouter, TSelected>\n}\n"],"names":["useRouterState"],"mappings":";;;AAwBO,SAAS,YAKd,MAEuC;AACvC,SAAOA,8BAAe;AAAA,IACpB,QAAQ,CAAC,WACP,6BAAM,UAAS,KAAK,OAAO,MAAM,QAAQ,IAAI,MAAM;AAAA,EAAA,CAC/C;AACV;;"}
@@ -1,4 +1,7 @@
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
1
2
  import { AnyRouter, RegisteredRouter, RouterState } from './router.cjs';
2
- export declare function useLocation<TRouter extends AnyRouter = RegisteredRouter, TLocationState = RouterState<TRouter['routeTree']>['location'], TSelected = TLocationState>(opts?: {
3
- select?: (state: TLocationState) => TSelected;
4
- }): TSelected;
3
+ export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected, TStructuralSharing extends boolean = boolean> {
4
+ select?: (state: RouterState<TRouter['routeTree']>['location']) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
5
+ }
6
+ export type UseLocationResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']>['location'] : TSelected;
7
+ export declare function useLocation<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseLocationBaseOptions<TRouter, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>): UseLocationResult<TRouter, TSelected>;
@@ -36,7 +36,8 @@ function useMatch(opts) {
36
36
  return void 0;
37
37
  }
38
38
  return opts.select ? opts.select(match) : match;
39
- }
39
+ },
40
+ structuralSharing: opts.structuralSharing
40
41
  });
41
42
  return matchSelection;
42
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { matchContext } from './matchContext'\nimport type { RegisteredRouter } from './router'\nimport type { AnyRoute } from './route'\nimport type { MakeRouteMatch } from './Matches'\nimport type { RouteIds } from './routeInfo'\nimport type { Constrain, StrictOrFrom } from './utils'\n\nexport type UseMatchOptions<\n TFrom,\n TStrict extends boolean,\n TRouteMatch,\n TSelected,\n TThrow extends boolean,\n> = StrictOrFrom<TFrom, TStrict> & {\n select?: (match: TRouteMatch) => TSelected\n shouldThrow?: TThrow\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TRouteMatch = MakeRouteMatch<TRouteTree, TFrom, TStrict>,\n TSelected = TRouteMatch,\n TThrow extends boolean = true,\n>(\n opts: UseMatchOptions<\n Constrain<TFrom, RouteIds<TRouteTree>>,\n TStrict,\n TRouteMatch,\n TSelected,\n TThrow\n >,\n): TThrow extends true ? TSelected : TSelected | undefined {\n const nearestMatchId = React.useContext(matchContext)\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = state.matches.find((d) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId,\n )\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as TSelected\n}\n"],"names":["React","matchContext","useRouterState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqBO,SAAS,SAQd,MAOyD;AACnD,QAAA,iBAAiBA,iBAAM,WAAWC,yBAAY;AAEpD,QAAM,iBAAiBC,eAAAA,eAAe;AAAA,IACpC,QAAQ,CAAC,UAAU;AACX,YAAA,QAAQ,MAAM,QAAQ;AAAA,QAAK,CAAC,MAChC,KAAK,OAAO,KAAK,SAAS,EAAE,UAAU,EAAE,OAAO;AAAA,MACjD;AACA;AAAA,QACE,GAAG,KAAK,eAAe,SAAS,CAAC;AAAA,QACjC,kBAAkB,KAAK,OAAO,yBAAyB,KAAK,IAAI,MAAM,kBAAkB;AAAA,MAC1F;AAEA,UAAI,UAAU,QAAW;AAChB,eAAA;AAAA,MAAA;AAGT,aAAO,KAAK,SAAS,KAAK,OAAO,KAAY,IAAI;AAAA,IAAA;AAAA,EACnD,CACD;AAEM,SAAA;AACT;;"}
1
+ {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { matchContext } from './matchContext'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { MakeRouteMatch } from './Matches'\nimport type { StrictOrFrom, ThrowOrOptional } from './utils'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow,\n TSelected,\n TStructuralSharing extends boolean,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseMatchBaseOptions<\n TRouter,\n TFrom,\n true,\n true,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n) => UseMatchResult<TRouter, TFrom, true, TSelected>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n TThrow extends boolean,\n TStructuralSharing extends boolean,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<\n TRouter,\n TFrom,\n TStrict,\n TThrow,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n TSelected,\n TThrow,\n TStructuralSharing\n >,\n): ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow> {\n const nearestMatchId = React.useContext(matchContext)\n\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId,\n )\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match) : match\n },\n structuralSharing: opts.structuralSharing,\n } as any)\n\n return matchSelection as any\n}\n"],"names":["React","matchContext","useRouterState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqEO,SAAS,SAQd,MAQ6E;AACvE,QAAA,iBAAiBA,iBAAM,WAAWC,yBAAY;AAEpD,QAAM,iBAAiBC,eAAAA,eAAe;AAAA,IACpC,QAAQ,CAAC,UAAe;AAChB,YAAA,QAAQ,MAAM,QAAQ;AAAA,QAAK,CAAC,MAChC,KAAK,OAAO,KAAK,SAAS,EAAE,UAAU,EAAE,OAAO;AAAA,MACjD;AACA;AAAA,QACE,GAAG,KAAK,eAAe,SAAS,CAAC;AAAA,QACjC,kBAAkB,KAAK,OAAO,yBAAyB,KAAK,IAAI,MAAM,kBAAkB;AAAA,MAC1F;AAEA,UAAI,UAAU,QAAW;AAChB,eAAA;AAAA,MAAA;AAGT,aAAO,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AAAA,IAC5C;AAAA,IACA,mBAAmB,KAAK;AAAA,EAAA,CAClB;AAED,SAAA;AACT;;"}
@@ -1,10 +1,12 @@
1
- import { RegisteredRouter } from './router.cjs';
2
- import { AnyRoute } from './route.cjs';
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
2
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
3
3
  import { MakeRouteMatch } from './Matches.cjs';
4
- import { RouteIds } from './routeInfo.cjs';
5
- import { Constrain, StrictOrFrom } from './utils.cjs';
6
- export type UseMatchOptions<TFrom, TStrict extends boolean, TRouteMatch, TSelected, TThrow extends boolean> = StrictOrFrom<TFrom, TStrict> & {
7
- select?: (match: TRouteMatch) => TSelected;
4
+ import { StrictOrFrom, ThrowOrOptional } from './utils.cjs';
5
+ export interface UseMatchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow, TSelected, TStructuralSharing extends boolean> {
6
+ select?: (match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
8
7
  shouldThrow?: TThrow;
9
- };
10
- export declare function useMatch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TStrict extends boolean = true, TRouteMatch = MakeRouteMatch<TRouteTree, TFrom, TStrict>, TSelected = TRouteMatch, TThrow extends boolean = true>(opts: UseMatchOptions<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict, TRouteMatch, TSelected, TThrow>): TThrow extends true ? TSelected : TSelected | undefined;
8
+ }
9
+ export type UseMatchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>) => UseMatchResult<TRouter, TFrom, true, TSelected>;
10
+ export type UseMatchOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected, TThrow extends boolean, TStructuralSharing extends boolean> = StrictOrFrom<TRouter, TFrom, TStrict> & UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
11
+ export type UseMatchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict> : TSelected;
12
+ export declare function useMatch<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts: UseMatchOptions<TRouter, TFrom, TStrict, TSelected, TThrow, TStructuralSharing>): ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>;
@@ -3,7 +3,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useMatch = require("./useMatch.cjs");
4
4
  function useParams(opts) {
5
5
  return useMatch.useMatch({
6
- ...opts,
6
+ from: opts.from,
7
+ strict: opts.strict,
8
+ structuralSharing: opts.structuralSharing,
7
9
  select: (match) => {
8
10
  return opts.select ? opts.select(match.params) : match.params;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useParams.cjs","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { AnyRoute } from './route'\nimport type { AllParams, RouteById, RouteIds } from './routeInfo'\nimport type { RegisteredRouter } from './router'\nimport type { Constrain, StrictOrFrom } from './utils'\n\nexport type UseParamsOptions<\n TFrom,\n TStrict extends boolean,\n TParams,\n TSelected,\n> = StrictOrFrom<TFrom, TStrict> & {\n select?: (params: TParams) => TSelected\n}\n\nexport function useParams<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TParams = TStrict extends false\n ? AllParams<TRouteTree>\n : RouteById<TRouteTree, TFrom>['types']['allParams'],\n TSelected = TParams,\n>(\n opts: UseParamsOptions<\n Constrain<TFrom, RouteIds<TRouteTree>>,\n TStrict,\n TParams,\n TSelected\n >,\n): TSelected {\n return useMatch({\n ...opts,\n select: (match) => {\n return opts.select ? opts.select(match.params as TParams) : match.params\n },\n }) as TSelected\n}\n"],"names":["useMatch"],"mappings":";;;AAeO,SAAS,UASd,MAMW;AACX,SAAOA,kBAAS;AAAA,IACd,GAAG;AAAA,IACH,QAAQ,CAAC,UAAU;AACjB,aAAO,KAAK,SAAS,KAAK,OAAO,MAAM,MAAiB,IAAI,MAAM;AAAA,IAAA;AAAA,EACpE,CACD;AACH;;"}
1
+ {"version":3,"file":"useParams.cjs","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AllParams, RouteById } from './routeInfo'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { Expand, StrictOrFrom } from './utils'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n params: ResolveParams<TRouter, TFrom, TStrict>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type ResolveParams<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n> = TStrict extends false\n ? AllParams<TRouter['routeTree']>\n : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allParams']>\n\nexport type UseParamsResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? ResolveParams<TRouter, TFrom, TStrict>\n : TSelected\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n true,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n) => UseParamsResult<TRouter, TFrom, true, TSelected>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n TSelected,\n TStructuralSharing\n >,\n): UseParamsResult<TRouter, TFrom, TStrict, TSelected> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n structuralSharing: opts.structuralSharing,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as UseParamsResult<TRouter, TFrom, TStrict, TSelected>\n}\n"],"names":["useMatch"],"mappings":";;;AA+DO,SAAS,UAOd,MAOqD;AACrD,SAAOA,kBAAS;AAAA,IACd,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK;AAAA,IACxB,QAAQ,CAAC,UAAe;AACtB,aAAO,KAAK,SAAS,KAAK,OAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IAAA;AAAA,EACzD,CACM;AACV;;"}
@@ -1,8 +1,12 @@
1
- import { AnyRoute } from './route.cjs';
2
- import { AllParams, RouteById, RouteIds } from './routeInfo.cjs';
3
- import { RegisteredRouter } from './router.cjs';
4
- import { Constrain, StrictOrFrom } from './utils.cjs';
5
- export type UseParamsOptions<TFrom, TStrict extends boolean, TParams, TSelected> = StrictOrFrom<TFrom, TStrict> & {
6
- select?: (params: TParams) => TSelected;
7
- };
8
- export declare function useParams<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TStrict extends boolean = true, TParams = TStrict extends false ? AllParams<TRouteTree> : RouteById<TRouteTree, TFrom>['types']['allParams'], TSelected = TParams>(opts: UseParamsOptions<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict, TParams, TSelected>): TSelected;
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
2
+ import { AllParams, RouteById } from './routeInfo.cjs';
3
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
4
+ import { Expand, StrictOrFrom } from './utils.cjs';
5
+ export interface UseParamsBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, TStructuralSharing> {
6
+ select?: (params: ResolveParams<TRouter, TFrom, TStrict>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
7
+ }
8
+ export type UseParamsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected, TStructuralSharing> = StrictOrFrom<TRouter, TFrom, TStrict> & UseParamsBaseOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
9
+ export type ResolveParams<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllParams<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allParams']>;
10
+ export type UseParamsResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveParams<TRouter, TFrom, TStrict> : TSelected;
11
+ export type UseParamsRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseParamsBaseOptions<TRouter, TFrom, true, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>) => UseParamsResult<TRouter, TFrom, true, TSelected>;
12
+ export declare function useParams<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts: UseParamsOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing>): UseParamsResult<TRouter, TFrom, TStrict, TSelected>;
@@ -1 +1 @@
1
- {"version":3,"file":"useRouteContext.cjs","sources":["../../src/useRouteContext.ts"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { MakeRouteMatch } from './Matches'\nimport type { AnyRoute } from './route'\nimport type { AllContext, RouteById, RouteIds } from './routeInfo'\nimport type { RegisteredRouter } from './router'\nimport type { Constrain, Expand, StrictOrFrom } from './utils'\n\nexport type UseRouteContextOptions<\n TFrom,\n TStrict extends boolean,\n TRouteContext,\n TSelected,\n> = StrictOrFrom<TFrom, TStrict> & {\n select?: (search: TRouteContext) => TSelected\n}\n\nexport function useRouteContext<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TRouteContext = TStrict extends false\n ? AllContext<TRouteTree>\n : Expand<RouteById<TRouteTree, TFrom>['types']['allContext']>,\n TSelected = TRouteContext,\n>(\n opts: UseRouteContextOptions<\n Constrain<TFrom, RouteIds<TRouteTree>>,\n TStrict,\n TRouteContext,\n TSelected\n >,\n): TSelected {\n return useMatch({\n ...(opts as any),\n select: (match: MakeRouteMatch<TRouteTree, TFrom>) =>\n opts.select ? opts.select(match.context) : match.context,\n })\n}\n"],"names":["useMatch"],"mappings":";;;AAgBO,SAAS,gBASd,MAMW;AACX,SAAOA,kBAAS;AAAA,IACd,GAAI;AAAA,IACJ,QAAQ,CAAC,UACP,KAAK,SAAS,KAAK,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,EAAA,CACpD;AACH;;"}
1
+ {"version":3,"file":"useRouteContext.cjs","sources":["../../src/useRouteContext.ts"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { AllContext, RouteById } from './routeInfo'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { Expand, StrictOrFrom } from './utils'\n\nexport interface UseRouteContextBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> {\n select?: (search: ResolveRouteContext<TRouter, TFrom, TStrict>) => TSelected\n}\n\nexport type UseRouteContextOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseRouteContextBaseOptions<TRouter, TFrom, TStrict, TSelected>\n\nexport type ResolveRouteContext<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n> = TStrict extends false\n ? AllContext<TRouter['routeTree']>\n : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allContext']>\n\nexport type UseRouteContextResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? ResolveRouteContext<TRouter, TFrom, TStrict>\n : TSelected\n\nexport type UseRouteContextRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,\n) => UseRouteContextResult<TRouter, TFrom, true, TSelected>\n\nexport function useRouteContext<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,\n): UseRouteContextResult<TRouter, TFrom, TStrict, TSelected> {\n return useMatch({\n ...(opts as any),\n select: (match) =>\n opts.select ? opts.select(match.context) : match.context,\n }) as UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>\n}\n"],"names":["useMatch"],"mappings":";;;AA8CO,SAAS,gBAMd,MAC2D;AAC3D,SAAOA,kBAAS;AAAA,IACd,GAAI;AAAA,IACJ,QAAQ,CAAC,UACP,KAAK,SAAS,KAAK,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,EAAA,CACpD;AACH;;"}
@@ -1,8 +1,11 @@
1
- import { AnyRoute } from './route.cjs';
2
- import { AllContext, RouteById, RouteIds } from './routeInfo.cjs';
3
- import { RegisteredRouter } from './router.cjs';
4
- import { Constrain, Expand, StrictOrFrom } from './utils.cjs';
5
- export type UseRouteContextOptions<TFrom, TStrict extends boolean, TRouteContext, TSelected> = StrictOrFrom<TFrom, TStrict> & {
6
- select?: (search: TRouteContext) => TSelected;
7
- };
8
- export declare function useRouteContext<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TStrict extends boolean = true, TRouteContext = TStrict extends false ? AllContext<TRouteTree> : Expand<RouteById<TRouteTree, TFrom>['types']['allContext']>, TSelected = TRouteContext>(opts: UseRouteContextOptions<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict, TRouteContext, TSelected>): TSelected;
1
+ import { AllContext, RouteById } from './routeInfo.cjs';
2
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
3
+ import { Expand, StrictOrFrom } from './utils.cjs';
4
+ export interface UseRouteContextBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
5
+ select?: (search: ResolveRouteContext<TRouter, TFrom, TStrict>) => TSelected;
6
+ }
7
+ export type UseRouteContextOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseRouteContextBaseOptions<TRouter, TFrom, TStrict, TSelected>;
8
+ export type ResolveRouteContext<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllContext<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allContext']>;
9
+ export type UseRouteContextResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveRouteContext<TRouter, TFrom, TStrict> : TSelected;
10
+ export type UseRouteContextRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>) => UseRouteContextResult<TRouter, TFrom, true, TSelected>;
11
+ export declare function useRouteContext<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>): UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>;
@@ -1,12 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const reactStore = require("@tanstack/react-store");
4
+ const React = require("react");
4
5
  const useRouter = require("./useRouter.cjs");
6
+ const utils = require("./utils.cjs");
5
7
  function useRouterState(opts) {
6
8
  const contextRouter = useRouter.useRouter({
7
9
  warn: (opts == null ? void 0 : opts.router) === void 0
8
10
  });
9
- return reactStore.useStore(((opts == null ? void 0 : opts.router) || contextRouter).__store, opts == null ? void 0 : opts.select);
11
+ const router = (opts == null ? void 0 : opts.router) || contextRouter;
12
+ const previousResult = React.useRef();
13
+ return reactStore.useStore(router.__store, (state) => {
14
+ if (opts == null ? void 0 : opts.select) {
15
+ if (opts.structuralSharing ?? router.options.defaultStructuralSharing) {
16
+ const newSlice = utils.replaceEqualDeep(
17
+ previousResult.current,
18
+ opts.select(state)
19
+ );
20
+ previousResult.current = newSlice;
21
+ return newSlice;
22
+ }
23
+ return opts.select(state);
24
+ }
25
+ return state;
26
+ });
10
27
  }
11
28
  exports.useRouterState = useRouterState;
12
29
  //# sourceMappingURL=useRouterState.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { useRouter } from './useRouter'\nimport type { AnyRouter, RegisteredRouter, RouterState } from './router'\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = RouterState<TRouter['routeTree']>,\n>(opts?: {\n router?: TRouter\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n return useStore((opts?.router || contextRouter).__store, opts?.select as any)\n}\n"],"names":["useRouter","useStore"],"mappings":";;;;AAIO,SAAS,eAGd,MAGY;AACZ,QAAM,gBAAgBA,UAAAA,UAAmB;AAAA,IACvC,OAAM,6BAAM,YAAW;AAAA,EAAA,CACxB;AACD,SAAOC,WAAAA,WAAU,6BAAM,WAAU,eAAe,SAAS,6BAAM,MAAa;AAC9E;;"}
1
+ {"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { useRef } from 'react'\nimport { useRouter } from './useRouter'\nimport { replaceEqualDeep } from './utils'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { AnyRouter, RegisteredRouter, RouterState } from './router'\n\nexport type UseRouterStateOptions<\n TRouter extends AnyRouter,\n TSelected,\n TStructuralSharing,\n> = {\n router?: TRouter\n select?: (\n state: RouterState<TRouter['routeTree']>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n} & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected, TStructuralSharing>,\n): UseRouterStateResult<TRouter, TSelected> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n const previousResult =\n useRef<ValidateSelected<TRouter, TSelected, TStructuralSharing>>()\n\n return useStore(router.__store, (state) => {\n if (opts?.select) {\n if (opts.structuralSharing ?? router.options.defaultStructuralSharing) {\n const newSlice = replaceEqualDeep(\n previousResult.current,\n opts.select(state),\n )\n previousResult.current = newSlice\n return newSlice\n }\n return opts.select(state)\n }\n return state\n }) as UseRouterStateResult<TRouter, TSelected>\n}\n"],"names":["useRouter","useRef","useStore","replaceEqualDeep"],"mappings":";;;;;;AA0BO,SAAS,eAKd,MAC0C;AAC1C,QAAM,gBAAgBA,UAAAA,UAAmB;AAAA,IACvC,OAAM,6BAAM,YAAW;AAAA,EAAA,CACxB;AACK,QAAA,UAAS,6BAAM,WAAU;AAC/B,QAAM,iBACJC,MAAAA,OAAiE;AAEnE,SAAOC,oBAAS,OAAO,SAAS,CAAC,UAAU;AACzC,QAAI,6BAAM,QAAQ;AAChB,UAAI,KAAK,qBAAqB,OAAO,QAAQ,0BAA0B;AACrE,cAAM,WAAWC,MAAA;AAAA,UACf,eAAe;AAAA,UACf,KAAK,OAAO,KAAK;AAAA,QACnB;AACA,uBAAe,UAAU;AAClB,eAAA;AAAA,MAAA;AAEF,aAAA,KAAK,OAAO,KAAK;AAAA,IAAA;AAEnB,WAAA;AAAA,EAAA,CACR;AACH;;"}
@@ -1,5 +1,8 @@
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
1
2
  import { AnyRouter, RegisteredRouter, RouterState } from './router.cjs';
2
- export declare function useRouterState<TRouter extends AnyRouter = RegisteredRouter, TSelected = RouterState<TRouter['routeTree']>>(opts?: {
3
+ export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected, TStructuralSharing> = {
3
4
  router?: TRouter;
4
- select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected;
5
- }): TSelected;
5
+ select?: (state: RouterState<TRouter['routeTree']>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
6
+ } & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
7
+ export type UseRouterStateResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected;
8
+ export declare function useRouterState<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseRouterStateOptions<TRouter, TSelected, TStructuralSharing>): UseRouterStateResult<TRouter, TSelected>;
@@ -3,7 +3,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useMatch = require("./useMatch.cjs");
4
4
  function useSearch(opts) {
5
5
  return useMatch.useMatch({
6
- ...opts,
6
+ from: opts.from,
7
+ strict: opts.strict,
8
+ structuralSharing: opts.structuralSharing,
7
9
  select: (match) => {
8
10
  return opts.select ? opts.select(match.search) : match.search;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useSearch.cjs","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { AnyRoute } from './route'\nimport type { FullSearchSchema, RouteById, RouteIds } from './routeInfo'\nimport type { RegisteredRouter } from './router'\nimport type { Constrain, Expand, StrictOrFrom } from './utils'\n\nexport type UseSearchOptions<\n TFrom,\n TStrict extends boolean,\n TSearch,\n TSelected,\n> = StrictOrFrom<TFrom, TStrict> & {\n select?: (search: TSearch) => TSelected\n}\n\nexport function useSearch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSearch = TStrict extends false\n ? FullSearchSchema<TRouteTree>\n : Expand<RouteById<TRouteTree, TFrom>['types']['fullSearchSchema']>,\n TSelected = TSearch,\n>(\n opts: UseSearchOptions<\n Constrain<TFrom, RouteIds<TRouteTree>>,\n TStrict,\n TSearch,\n TSelected\n >,\n): TSelected {\n return useMatch({\n ...opts,\n select: (match) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n })\n}\n"],"names":["useMatch"],"mappings":";;;AAeO,SAAS,UASd,MAMW;AACX,SAAOA,kBAAS;AAAA,IACd,GAAG;AAAA,IACH,QAAQ,CAAC,UAAU;AACjB,aAAO,KAAK,SAAS,KAAK,OAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IAAA;AAAA,EACzD,CACD;AACH;;"}
1
+ {"version":3,"file":"useSearch.cjs","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n StructuralSharingOption,\n ValidateSelected,\n} from './structuralSharing'\nimport type { FullSearchSchema, RouteById } from './routeInfo'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { Expand, StrictOrFrom } from './utils'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> {\n select?: (\n state: ResolveSearch<TRouter, TFrom, TStrict>,\n ) => ValidateSelected<TRouter, TSelected, TStructuralSharing>\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n TStructuralSharing,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing> &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>\n\nexport type UseSearchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? ResolveSearch<TRouter, TFrom, TStrict>\n : TSelected\n\nexport type ResolveSearch<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n> = TStrict extends false\n ? FullSearchSchema<TRouter['routeTree']>\n : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['fullSearchSchema']>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n true,\n TSelected,\n TStructuralSharing\n > &\n StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,\n) => UseSearchResult<TRouter, TFrom, true, TSelected>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n TStructuralSharing extends boolean = boolean,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n TSelected,\n TStructuralSharing\n >,\n): UseSearchResult<TRouter, TFrom, TStrict, TSelected> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n structuralSharing: opts.structuralSharing,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as UseSearchResult<TRouter, TFrom, TStrict, TSelected>\n}\n"],"names":["useMatch"],"mappings":";;;AA+DO,SAAS,UAOd,MAOqD;AACrD,SAAOA,kBAAS;AAAA,IACd,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK;AAAA,IACxB,QAAQ,CAAC,UAAe;AACtB,aAAO,KAAK,SAAS,KAAK,OAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IAAA;AAAA,EACzD,CACD;AACH;;"}
@@ -1,8 +1,12 @@
1
- import { AnyRoute } from './route.cjs';
2
- import { FullSearchSchema, RouteById, RouteIds } from './routeInfo.cjs';
3
- import { RegisteredRouter } from './router.cjs';
4
- import { Constrain, Expand, StrictOrFrom } from './utils.cjs';
5
- export type UseSearchOptions<TFrom, TStrict extends boolean, TSearch, TSelected> = StrictOrFrom<TFrom, TStrict> & {
6
- select?: (search: TSearch) => TSelected;
7
- };
8
- export declare function useSearch<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSearch = TStrict extends false ? FullSearchSchema<TRouteTree> : Expand<RouteById<TRouteTree, TFrom>['types']['fullSearchSchema']>, TSelected = TSearch>(opts: UseSearchOptions<Constrain<TFrom, RouteIds<TRouteTree>>, TStrict, TSearch, TSelected>): TSelected;
1
+ import { StructuralSharingOption, ValidateSelected } from './structuralSharing.cjs';
2
+ import { FullSearchSchema, RouteById } from './routeInfo.cjs';
3
+ import { AnyRouter, RegisteredRouter } from './router.cjs';
4
+ import { Expand, StrictOrFrom } from './utils.cjs';
5
+ export interface UseSearchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, TStructuralSharing> {
6
+ select?: (state: ResolveSearch<TRouter, TFrom, TStrict>) => ValidateSelected<TRouter, TSelected, TStructuralSharing>;
7
+ }
8
+ export type UseSearchOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected, TStructuralSharing> = StrictOrFrom<TRouter, TFrom, TStrict> & UseSearchBaseOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>;
9
+ export type UseSearchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveSearch<TRouter, TFrom, TStrict> : TSelected;
10
+ export type ResolveSearch<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? FullSearchSchema<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['fullSearchSchema']>;
11
+ export type UseSearchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts?: UseSearchBaseOptions<TRouter, TFrom, true, TSelected, TStructuralSharing> & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>) => UseSearchResult<TRouter, TFrom, true, TSelected>;
12
+ export declare function useSearch<TRouter extends AnyRouter = RegisteredRouter, TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown, TStructuralSharing extends boolean = boolean>(opts: UseSearchOptions<TRouter, TFrom, TStrict, TSelected, TStructuralSharing>): UseSearchResult<TRouter, TFrom, TStrict, TSelected>;