@tanstack/react-router 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,6 +35,9 @@ function _interopNamespaceDefault(e) {
35
35
 
36
36
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
37
37
 
38
+ const useTransition = React__namespace.useTransition || (() => [false, cb => {
39
+ cb();
40
+ }]);
38
41
  exports.routerContext = /*#__PURE__*/React__namespace.createContext(null);
39
42
  if (typeof document !== 'undefined') {
40
43
  if (window.__TSR_ROUTER_CONTEXT__) {
@@ -71,7 +74,7 @@ function Transitioner() {
71
74
  const routerState = useRouterState({
72
75
  select: s => utils.pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning'])
73
76
  });
74
- const [isTransitioning, startReactTransition] = React__namespace.useTransition();
77
+ const [isTransitioning, startReactTransition] = useTransition();
75
78
  router.startReactTransition = startReactTransition;
76
79
  React__namespace.useEffect(() => {
77
80
  if (isTransitioning) {
@@ -121,7 +124,7 @@ function Transitioner() {
121
124
  };
122
125
  }, [router.history]);
123
126
  utils.useLayoutEffect(() => {
124
- if (routerState.isTransitioning && !isTransitioning && !routerState.isLoading && routerState.resolvedLocation !== routerState.location) {
127
+ if (React__namespace.useTransition ? routerState.isTransitioning && !isTransitioning : !routerState.isLoading && routerState.resolvedLocation !== routerState.location) {
125
128
  router.emit({
126
129
  type: 'onResolved',
127
130
  fromLocation: routerState.resolvedLocation,
@@ -1 +1 @@
1
- {"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import * as React from 'react'\nimport warning from 'tiny-warning'\nimport { useStore } from '@tanstack/react-store'\nimport { Matches } from './Matches'\nimport { NavigateOptions, ResolveRelativePath, ToOptions } from './link'\nimport { ParsedLocation } from './location'\nimport { AnyRoute } from './route'\nimport { RouteById, RoutePaths } from './routeInfo'\nimport {\n BuildNextOptions,\n RegisteredRouter,\n Router,\n RouterOptions,\n RouterState,\n} from './router'\nimport { NoInfer, pick, useLayoutEffect } from './utils'\nimport { MatchRouteOptions } from './Matches'\nimport { RouteMatch } from './Matches'\n\nexport interface CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n startTransition?: boolean\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n}\n\nexport type NavigateFn<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n>(\n opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Promise<void>\n\nexport type MatchRouteFn<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n>(\n location: ToOptions<TRouteTree, TFrom, TTo>,\n opts?: MatchRouteOptions,\n) => false | RouteById<TRouteTree, TResolved>['types']['allParams']\n\nexport type BuildLocationFn<TRouteTree extends AnyRoute> = (\n opts: ToOptions<TRouteTree>,\n) => ParsedLocation\n\nexport type InjectedHtmlEntry = string | (() => Promise<string> | string)\n\nexport let routerContext = React.createContext<Router<any>>(null!)\n\nif (typeof document !== 'undefined') {\n if (window.__TSR_ROUTER_CONTEXT__) {\n routerContext = window.__TSR_ROUTER_CONTEXT__\n } else {\n window.__TSR_ROUTER_CONTEXT__ = routerContext as any\n }\n}\n\nexport function RouterProvider<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest?.context,\n },\n } as any)\n\n const matches = router.options.InnerWrap ? (\n <router.options.InnerWrap>\n <Matches />\n </router.options.InnerWrap>\n ) : (\n <Matches />\n )\n\n const provider = (\n <routerContext.Provider value={router}>\n {matches}\n <Transitioner />\n </routerContext.Provider>\n )\n\n if (router.options.Wrap) {\n return <router.options.Wrap>{provider}</router.options.Wrap>\n }\n\n return provider\n}\n\nfunction Transitioner() {\n const mountLoadCount = React.useRef(0)\n const router = useRouter()\n const routerState = useRouterState({\n select: (s) =>\n pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning']),\n })\n\n const [isTransitioning, startReactTransition] = React.useTransition()\n\n router.startReactTransition = startReactTransition\n\n React.useEffect(() => {\n if (isTransitioning) {\n router.__store.setState((s) => ({\n ...s,\n isTransitioning,\n }))\n }\n }, [isTransitioning])\n\n const tryLoad = () => {\n const apply = (cb: () => void) => {\n if (!routerState.isTransitioning) {\n startReactTransition(() => cb())\n } else {\n cb()\n }\n }\n\n apply(() => {\n try {\n router.load()\n } catch (err) {\n console.error(err)\n }\n })\n }\n\n useLayoutEffect(() => {\n const unsub = router.history.subscribe(() => {\n router.latestLocation = router.parseLocation(router.latestLocation)\n if (routerState.location !== router.latestLocation) {\n tryLoad()\n }\n })\n\n const nextLocation = router.buildLocation({\n search: true,\n params: true,\n hash: true,\n state: true,\n })\n\n if (routerState.location.href !== nextLocation.href) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n return () => {\n unsub()\n }\n }, [router.history])\n\n useLayoutEffect(() => {\n if (\n routerState.isTransitioning &&\n !isTransitioning &&\n !routerState.isLoading &&\n routerState.resolvedLocation !== routerState.location\n ) {\n router.emit({\n type: 'onResolved',\n fromLocation: routerState.resolvedLocation,\n toLocation: routerState.location,\n pathChanged:\n routerState.location!.href !== routerState.resolvedLocation?.href,\n })\n\n if ((document as any).querySelector) {\n if (routerState.location.hash !== '') {\n const el = document.getElementById(\n routerState.location.hash,\n ) as HTMLElement | null\n if (el) {\n el.scrollIntoView()\n }\n }\n }\n\n router.__store.setState((s) => ({\n ...s,\n isTransitioning: false,\n resolvedLocation: s.location,\n }))\n }\n }, [\n routerState.isTransitioning,\n isTransitioning,\n routerState.isLoading,\n routerState.resolvedLocation,\n routerState.location,\n ])\n\n useLayoutEffect(() => {\n if (!window.__TSR_DEHYDRATED__ && !mountLoadCount.current) {\n mountLoadCount.current++\n tryLoad()\n }\n }, [])\n\n return null\n}\n\nexport function getRouteMatch<TRouteTree extends AnyRoute>(\n state: RouterState<TRouteTree>,\n id: string,\n): undefined | RouteMatch<TRouteTree> {\n return [\n ...state.cachedMatches,\n ...(state.pendingMatches ?? []),\n ...state.matches,\n ].find((d) => d.id === id)\n}\n\nexport function useRouterState<\n TSelected = RouterState<RegisteredRouter['routeTree']>,\n>(opts?: {\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const router = useRouter()\n return useStore(router.__store, opts?.select as any)\n}\n\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>\n}\n\nexport function useRouter<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>(): Router<TRouteTree> {\n const resolvedContext =\n typeof document !== 'undefined'\n ? window.__TSR_ROUTER_CONTEXT__ || routerContext\n : routerContext\n const value = React.useContext(resolvedContext)\n warning(value, 'useRouter must be used inside a <RouterProvider> component!')\n return value as any\n}\n"],"names":["routerContext","React","createContext","document","window","__TSR_ROUTER_CONTEXT__","RouterProvider","router","rest","update","options","context","matches","InnerWrap","createElement","Matches","provider","Provider","value","Transitioner","Wrap","mountLoadCount","useRef","useRouter","routerState","useRouterState","select","s","pick","isTransitioning","startReactTransition","useTransition","useEffect","__store","setState","tryLoad","apply","cb","load","err","console","error","useLayoutEffect","unsub","history","subscribe","latestLocation","parseLocation","location","nextLocation","buildLocation","search","params","hash","state","href","commitLocation","replace","isLoading","resolvedLocation","emit","type","fromLocation","toLocation","pathChanged","querySelector","el","getElementById","scrollIntoView","__TSR_DEHYDRATED__","current","getRouteMatch","id","cachedMatches","pendingMatches","find","d","opts","useStore","resolvedContext","useContext","warning"],"mappings":"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"}
1
+ {"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import * as React from 'react'\nimport warning from 'tiny-warning'\nimport { useStore } from '@tanstack/react-store'\nimport { Matches } from './Matches'\nimport { NavigateOptions, ResolveRelativePath, ToOptions } from './link'\nimport { ParsedLocation } from './location'\nimport { AnyRoute } from './route'\nimport { RouteById, RoutePaths } from './routeInfo'\nimport {\n BuildNextOptions,\n RegisteredRouter,\n Router,\n RouterOptions,\n RouterState,\n} from './router'\nimport { NoInfer, pick, useLayoutEffect } from './utils'\nimport { MatchRouteOptions } from './Matches'\nimport { RouteMatch } from './Matches'\n\nconst useTransition =\n React.useTransition ||\n (() => [\n false,\n (cb) => {\n cb()\n },\n ])\n\nexport interface CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n startTransition?: boolean\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n}\n\nexport type NavigateFn<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n>(\n opts: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Promise<void>\n\nexport type MatchRouteFn<TRouteTree extends AnyRoute> = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n>(\n location: ToOptions<TRouteTree, TFrom, TTo>,\n opts?: MatchRouteOptions,\n) => false | RouteById<TRouteTree, TResolved>['types']['allParams']\n\nexport type BuildLocationFn<TRouteTree extends AnyRoute> = (\n opts: ToOptions<TRouteTree>,\n) => ParsedLocation\n\nexport type InjectedHtmlEntry = string | (() => Promise<string> | string)\n\nexport let routerContext = React.createContext<Router<any>>(null!)\n\nif (typeof document !== 'undefined') {\n if (window.__TSR_ROUTER_CONTEXT__) {\n routerContext = window.__TSR_ROUTER_CONTEXT__\n } else {\n window.__TSR_ROUTER_CONTEXT__ = routerContext as any\n }\n}\n\nexport function RouterProvider<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouteTree, TDehydrated>) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest?.context,\n },\n } as any)\n\n const matches = router.options.InnerWrap ? (\n <router.options.InnerWrap>\n <Matches />\n </router.options.InnerWrap>\n ) : (\n <Matches />\n )\n\n const provider = (\n <routerContext.Provider value={router}>\n {matches}\n <Transitioner />\n </routerContext.Provider>\n )\n\n if (router.options.Wrap) {\n return <router.options.Wrap>{provider}</router.options.Wrap>\n }\n\n return provider\n}\n\nfunction Transitioner() {\n const mountLoadCount = React.useRef(0)\n const router = useRouter()\n const routerState = useRouterState({\n select: (s) =>\n pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning']),\n })\n\n const [isTransitioning, startReactTransition] = useTransition()\n\n router.startReactTransition = startReactTransition\n\n React.useEffect(() => {\n if (isTransitioning) {\n router.__store.setState((s) => ({\n ...s,\n isTransitioning,\n }))\n }\n }, [isTransitioning])\n\n const tryLoad = () => {\n const apply = (cb: () => void) => {\n if (!routerState.isTransitioning) {\n startReactTransition(() => cb())\n } else {\n cb()\n }\n }\n\n apply(() => {\n try {\n router.load()\n } catch (err) {\n console.error(err)\n }\n })\n }\n\n useLayoutEffect(() => {\n const unsub = router.history.subscribe(() => {\n router.latestLocation = router.parseLocation(router.latestLocation)\n if (routerState.location !== router.latestLocation) {\n tryLoad()\n }\n })\n\n const nextLocation = router.buildLocation({\n search: true,\n params: true,\n hash: true,\n state: true,\n })\n\n if (routerState.location.href !== nextLocation.href) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n return () => {\n unsub()\n }\n }, [router.history])\n\n useLayoutEffect(() => {\n if (\n (React.useTransition as any)\n ? routerState.isTransitioning && !isTransitioning\n : true &&\n !routerState.isLoading &&\n routerState.resolvedLocation !== routerState.location\n ) {\n router.emit({\n type: 'onResolved',\n fromLocation: routerState.resolvedLocation,\n toLocation: routerState.location,\n pathChanged:\n routerState.location!.href !== routerState.resolvedLocation?.href,\n })\n\n if ((document as any).querySelector) {\n if (routerState.location.hash !== '') {\n const el = document.getElementById(\n routerState.location.hash,\n ) as HTMLElement | null\n if (el) {\n el.scrollIntoView()\n }\n }\n }\n\n router.__store.setState((s) => ({\n ...s,\n isTransitioning: false,\n resolvedLocation: s.location,\n }))\n }\n }, [\n routerState.isTransitioning,\n isTransitioning,\n routerState.isLoading,\n routerState.resolvedLocation,\n routerState.location,\n ])\n\n useLayoutEffect(() => {\n if (!window.__TSR_DEHYDRATED__ && !mountLoadCount.current) {\n mountLoadCount.current++\n tryLoad()\n }\n }, [])\n\n return null\n}\n\nexport function getRouteMatch<TRouteTree extends AnyRoute>(\n state: RouterState<TRouteTree>,\n id: string,\n): undefined | RouteMatch<TRouteTree> {\n return [\n ...state.cachedMatches,\n ...(state.pendingMatches ?? []),\n ...state.matches,\n ].find((d) => d.id === id)\n}\n\nexport function useRouterState<\n TSelected = RouterState<RegisteredRouter['routeTree']>,\n>(opts?: {\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const router = useRouter()\n return useStore(router.__store, opts?.select as any)\n}\n\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['context']>\n}\n\nexport function useRouter<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>(): Router<TRouteTree> {\n const resolvedContext =\n typeof document !== 'undefined'\n ? window.__TSR_ROUTER_CONTEXT__ || routerContext\n : routerContext\n const value = React.useContext(resolvedContext)\n warning(value, 'useRouter must be used inside a <RouterProvider> component!')\n return value as any\n}\n"],"names":["useTransition","React","cb","routerContext","createContext","document","window","__TSR_ROUTER_CONTEXT__","RouterProvider","router","rest","update","options","context","matches","InnerWrap","createElement","Matches","provider","Provider","value","Transitioner","Wrap","mountLoadCount","useRef","useRouter","routerState","useRouterState","select","s","pick","isTransitioning","startReactTransition","useEffect","__store","setState","tryLoad","apply","load","err","console","error","useLayoutEffect","unsub","history","subscribe","latestLocation","parseLocation","location","nextLocation","buildLocation","search","params","hash","state","href","commitLocation","replace","isLoading","resolvedLocation","emit","type","fromLocation","toLocation","pathChanged","querySelector","el","getElementById","scrollIntoView","__TSR_DEHYDRATED__","current","getRouteMatch","id","cachedMatches","pendingMatches","find","d","opts","useStore","resolvedContext","useContext","warning"],"mappings":"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"}
@@ -486,6 +486,9 @@ function useLoaderData(opts) {
486
486
  });
487
487
  }
488
488
 
489
+ const useTransition = React.useTransition || (() => [false, cb => {
490
+ cb();
491
+ }]);
489
492
  let routerContext = /*#__PURE__*/React.createContext(null);
490
493
  if (typeof document !== 'undefined') {
491
494
  if (window.__TSR_ROUTER_CONTEXT__) {
@@ -522,7 +525,7 @@ function Transitioner() {
522
525
  const routerState = useRouterState({
523
526
  select: s => pick(s, ['isLoading', 'location', 'resolvedLocation', 'isTransitioning'])
524
527
  });
525
- const [isTransitioning, startReactTransition] = React.useTransition();
528
+ const [isTransitioning, startReactTransition] = useTransition();
526
529
  router.startReactTransition = startReactTransition;
527
530
  React.useEffect(() => {
528
531
  if (isTransitioning) {
@@ -572,7 +575,7 @@ function Transitioner() {
572
575
  };
573
576
  }, [router.history]);
574
577
  useLayoutEffect$1(() => {
575
- if (routerState.isTransitioning && !isTransitioning && !routerState.isLoading && routerState.resolvedLocation !== routerState.location) {
578
+ if (React.useTransition ? routerState.isTransitioning && !isTransitioning : !routerState.isLoading && routerState.resolvedLocation !== routerState.location) {
576
579
  router.emit({
577
580
  type: 'onResolved',
578
581
  fromLocation: routerState.resolvedLocation,