@tanstack/react-router 0.0.1-beta.21 → 0.0.1-beta.210

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 (102) hide show
  1. package/LICENSE +21 -0
  2. package/build/cjs/CatchBoundary.js +125 -0
  3. package/build/cjs/CatchBoundary.js.map +1 -0
  4. package/build/cjs/Matches.js +223 -0
  5. package/build/cjs/Matches.js.map +1 -0
  6. package/build/cjs/RouterProvider.js +1021 -0
  7. package/build/cjs/RouterProvider.js.map +1 -0
  8. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -19
  9. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  10. package/build/cjs/fileRoute.js +29 -0
  11. package/build/cjs/fileRoute.js.map +1 -0
  12. package/build/cjs/index.js +124 -0
  13. package/build/cjs/index.js.map +1 -0
  14. package/build/cjs/lazyRouteComponent.js +57 -0
  15. package/build/cjs/lazyRouteComponent.js.map +1 -0
  16. package/build/cjs/link.js +150 -0
  17. package/build/cjs/link.js.map +1 -0
  18. package/build/cjs/path.js +211 -0
  19. package/build/cjs/path.js.map +1 -0
  20. package/build/cjs/qss.js +65 -0
  21. package/build/cjs/qss.js.map +1 -0
  22. package/build/cjs/redirects.js +27 -0
  23. package/build/cjs/redirects.js.map +1 -0
  24. package/build/cjs/route.js +133 -0
  25. package/build/cjs/route.js.map +1 -0
  26. package/build/cjs/router.js +203 -0
  27. package/build/cjs/router.js.map +1 -0
  28. package/build/cjs/searchParams.js +83 -0
  29. package/build/cjs/searchParams.js.map +1 -0
  30. package/build/cjs/useBlocker.js +64 -0
  31. package/build/cjs/useBlocker.js.map +1 -0
  32. package/build/cjs/useNavigate.js +78 -0
  33. package/build/cjs/useNavigate.js.map +1 -0
  34. package/build/cjs/useParams.js +28 -0
  35. package/build/cjs/useParams.js.map +1 -0
  36. package/build/cjs/useSearch.js +27 -0
  37. package/build/cjs/useSearch.js.map +1 -0
  38. package/build/cjs/utils.js +225 -0
  39. package/build/cjs/utils.js.map +1 -0
  40. package/build/esm/index.js +1895 -2565
  41. package/build/esm/index.js.map +1 -1
  42. package/build/stats-html.html +59 -49
  43. package/build/stats-react.json +815 -43
  44. package/build/types/CatchBoundary.d.ts +33 -0
  45. package/build/types/Matches.d.ts +31 -0
  46. package/build/types/RouterProvider.d.ts +78 -0
  47. package/build/types/awaited.d.ts +0 -0
  48. package/build/types/defer.d.ts +0 -0
  49. package/build/types/fileRoute.d.ts +32 -0
  50. package/build/types/history.d.ts +7 -0
  51. package/build/types/index.d.ts +24 -104
  52. package/build/types/injectHtml.d.ts +0 -0
  53. package/build/types/lazyRouteComponent.d.ts +2 -0
  54. package/build/types/link.d.ts +105 -0
  55. package/build/types/location.d.ts +14 -0
  56. package/build/types/path.d.ts +16 -0
  57. package/build/types/qss.d.ts +2 -0
  58. package/build/types/redirects.d.ts +10 -0
  59. package/build/types/route.d.ts +261 -0
  60. package/build/types/routeInfo.d.ts +22 -0
  61. package/build/types/router.d.ts +117 -0
  62. package/build/types/scroll-restoration.d.ts +0 -0
  63. package/build/types/searchParams.d.ts +7 -0
  64. package/build/types/useBlocker.d.ts +8 -0
  65. package/build/types/useNavigate.d.ts +20 -0
  66. package/build/types/useParams.d.ts +7 -0
  67. package/build/types/useSearch.d.ts +7 -0
  68. package/build/types/utils.d.ts +65 -0
  69. package/build/umd/index.development.js +2132 -2469
  70. package/build/umd/index.development.js.map +1 -1
  71. package/build/umd/index.production.js +4 -4
  72. package/build/umd/index.production.js.map +1 -1
  73. package/package.json +9 -10
  74. package/src/CatchBoundary.tsx +97 -0
  75. package/src/Matches.tsx +315 -0
  76. package/src/RouterProvider.tsx +1457 -0
  77. package/src/awaited.tsx +40 -0
  78. package/src/defer.ts +55 -0
  79. package/src/fileRoute.ts +145 -0
  80. package/src/history.ts +8 -0
  81. package/src/index.tsx +28 -693
  82. package/src/injectHtml.ts +28 -0
  83. package/src/lazyRouteComponent.tsx +33 -0
  84. package/src/link.tsx +507 -0
  85. package/src/location.ts +15 -0
  86. package/src/path.ts +256 -0
  87. package/src/qss.ts +53 -0
  88. package/src/redirects.ts +31 -0
  89. package/src/route.ts +786 -0
  90. package/src/routeInfo.ts +68 -0
  91. package/src/router.ts +374 -0
  92. package/src/scroll-restoration.tsx +205 -0
  93. package/src/searchParams.ts +79 -0
  94. package/src/useBlocker.tsx +34 -0
  95. package/src/useNavigate.tsx +109 -0
  96. package/src/useParams.tsx +25 -0
  97. package/src/useSearch.tsx +25 -0
  98. package/src/utils.ts +337 -0
  99. package/build/cjs/react-router/src/index.js +0 -466
  100. package/build/cjs/react-router/src/index.js.map +0 -1
  101. package/build/cjs/router-core/build/esm/index.js +0 -2523
  102. package/build/cjs/router-core/build/esm/index.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Tanner Linsley
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @tanstack/react-router/src/index.tsx
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ var React = require('react');
16
+
17
+ function _interopNamespace(e) {
18
+ if (e && e.__esModule) return e;
19
+ var n = Object.create(null);
20
+ if (e) {
21
+ Object.keys(e).forEach(function (k) {
22
+ if (k !== 'default') {
23
+ var d = Object.getOwnPropertyDescriptor(e, k);
24
+ Object.defineProperty(n, k, d.get ? d : {
25
+ enumerable: true,
26
+ get: function () { return e[k]; }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ n["default"] = e;
32
+ return Object.freeze(n);
33
+ }
34
+
35
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
36
+
37
+ function CatchBoundary(props) {
38
+ const errorComponent = props.errorComponent ?? ErrorComponent;
39
+ return /*#__PURE__*/React__namespace.createElement(CatchBoundaryImpl, {
40
+ resetKey: props.resetKey,
41
+ onCatch: props.onCatch,
42
+ children: ({
43
+ error
44
+ }) => {
45
+ if (error) {
46
+ return /*#__PURE__*/React__namespace.createElement(errorComponent, {
47
+ error
48
+ });
49
+ }
50
+ return props.children;
51
+ }
52
+ });
53
+ }
54
+ class CatchBoundaryImpl extends React__namespace.Component {
55
+ state = {
56
+ error: null
57
+ };
58
+ static getDerivedStateFromError(error) {
59
+ return {
60
+ error
61
+ };
62
+ }
63
+ componentDidUpdate(prevProps, prevState) {
64
+ if (prevState.error && prevProps.resetKey !== this.props.resetKey) {
65
+ this.setState({
66
+ error: null
67
+ });
68
+ }
69
+ }
70
+ componentDidCatch(error) {
71
+ this.props.onCatch?.(error);
72
+ }
73
+ render() {
74
+ return this.props.children(this.state);
75
+ }
76
+ }
77
+ function ErrorComponent({
78
+ error
79
+ }) {
80
+ const [show, setShow] = React__namespace.useState(process.env.NODE_ENV !== 'production');
81
+ return /*#__PURE__*/React__namespace.createElement("div", {
82
+ style: {
83
+ padding: '.5rem',
84
+ maxWidth: '100%'
85
+ }
86
+ }, /*#__PURE__*/React__namespace.createElement("div", {
87
+ style: {
88
+ display: 'flex',
89
+ alignItems: 'center',
90
+ gap: '.5rem'
91
+ }
92
+ }, /*#__PURE__*/React__namespace.createElement("strong", {
93
+ style: {
94
+ fontSize: '1rem'
95
+ }
96
+ }, "Something went wrong!"), /*#__PURE__*/React__namespace.createElement("button", {
97
+ style: {
98
+ appearance: 'none',
99
+ fontSize: '.6em',
100
+ border: '1px solid currentColor',
101
+ padding: '.1rem .2rem',
102
+ fontWeight: 'bold',
103
+ borderRadius: '.25rem'
104
+ },
105
+ onClick: () => setShow(d => !d)
106
+ }, show ? 'Hide Error' : 'Show Error')), /*#__PURE__*/React__namespace.createElement("div", {
107
+ style: {
108
+ height: '.25rem'
109
+ }
110
+ }), show ? /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement("pre", {
111
+ style: {
112
+ fontSize: '.7em',
113
+ border: '1px solid red',
114
+ borderRadius: '.25rem',
115
+ padding: '.3rem',
116
+ color: 'red',
117
+ overflow: 'auto'
118
+ }
119
+ }, error.message ? /*#__PURE__*/React__namespace.createElement("code", null, error.message) : null)) : null);
120
+ }
121
+
122
+ exports.CatchBoundary = CatchBoundary;
123
+ exports.CatchBoundaryImpl = CatchBoundaryImpl;
124
+ exports.ErrorComponent = ErrorComponent;
125
+ //# sourceMappingURL=CatchBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CatchBoundary.js","sources":["../../src/CatchBoundary.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport function CatchBoundary(props: {\n resetKey: string\n children: any\n errorComponent?: any\n onCatch: (error: any) => void\n}) {\n const errorComponent = props.errorComponent ?? ErrorComponent\n\n return (\n <CatchBoundaryImpl\n resetKey={props.resetKey}\n onCatch={props.onCatch}\n children={({ error }) => {\n if (error) {\n return React.createElement(errorComponent, {\n error,\n })\n }\n\n return props.children\n }}\n />\n )\n}\n\nexport class CatchBoundaryImpl extends React.Component<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: (error: any) => void\n}> {\n state = { error: null } as any\n static getDerivedStateFromError(error: any) {\n return { error }\n }\n componentDidUpdate(\n prevProps: Readonly<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: ((error: any, info: any) => void) | undefined\n }>,\n prevState: any,\n ): void {\n if (prevState.error && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null })\n }\n }\n componentDidCatch(error: any) {\n this.props.onCatch?.(error)\n }\n render() {\n return this.props.children(this.state)\n }\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')\n\n return (\n <div style={{ padding: '.5rem', maxWidth: '100%' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>\n <strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n fontSize: '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show ? (\n <div>\n <pre\n style={{\n fontSize: '.7em',\n border: '1px solid red',\n borderRadius: '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["CatchBoundary","props","errorComponent","ErrorComponent","React","createElement","CatchBoundaryImpl","resetKey","onCatch","children","error","Component","state","getDerivedStateFromError","componentDidUpdate","prevProps","prevState","setState","componentDidCatch","render","show","setShow","useState","process","env","NODE_ENV","style","padding","maxWidth","display","alignItems","gap","fontSize","appearance","border","fontWeight","borderRadius","onClick","d","height","color","overflow","message"],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * @tanstack/react-router/src/index.tsx
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ var React = require('react');
16
+ var invariant = require('tiny-invariant');
17
+ var warning = require('tiny-warning');
18
+ var CatchBoundary = require('./CatchBoundary.js');
19
+ var RouterProvider = require('./RouterProvider.js');
20
+ var route = require('./route.js');
21
+
22
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
+
24
+ function _interopNamespace(e) {
25
+ if (e && e.__esModule) return e;
26
+ var n = Object.create(null);
27
+ if (e) {
28
+ Object.keys(e).forEach(function (k) {
29
+ if (k !== 'default') {
30
+ var d = Object.getOwnPropertyDescriptor(e, k);
31
+ Object.defineProperty(n, k, d.get ? d : {
32
+ enumerable: true,
33
+ get: function () { return e[k]; }
34
+ });
35
+ }
36
+ });
37
+ }
38
+ n["default"] = e;
39
+ return Object.freeze(n);
40
+ }
41
+
42
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
43
+ var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant);
44
+ var warning__default = /*#__PURE__*/_interopDefaultLegacy(warning);
45
+
46
+ function Matches() {
47
+ const {
48
+ routesById,
49
+ state
50
+ } = RouterProvider.useRouter();
51
+ const {
52
+ matches
53
+ } = state;
54
+ const locationKey = RouterProvider.useRouterState().location.state.key;
55
+ const route$1 = routesById[route.rootRouteId];
56
+ const errorComponent = React__namespace.useCallback(props => {
57
+ return /*#__PURE__*/React__namespace.createElement(CatchBoundary.ErrorComponent, {
58
+ ...props,
59
+ useMatch: route$1.useMatch,
60
+ useRouteContext: route$1.useRouteContext,
61
+ useSearch: route$1.useSearch,
62
+ useParams: route$1.useParams
63
+ });
64
+ }, [route$1]);
65
+ return /*#__PURE__*/React__namespace.createElement(matchesContext.Provider, {
66
+ value: matches
67
+ }, /*#__PURE__*/React__namespace.createElement(CatchBoundary.CatchBoundary, {
68
+ resetKey: locationKey,
69
+ errorComponent: errorComponent,
70
+ onCatch: () => {
71
+ warning__default["default"](false, `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`);
72
+ }
73
+ }, matches.length ? /*#__PURE__*/React__namespace.createElement(Match, {
74
+ matches: matches
75
+ }) : null));
76
+ }
77
+ const defaultPending = () => null;
78
+ function Match({
79
+ matches
80
+ }) {
81
+ const {
82
+ options,
83
+ routesById
84
+ } = RouterProvider.useRouter();
85
+ const match = matches[0];
86
+ const routeId = match?.routeId;
87
+ const route = routesById[routeId];
88
+ const locationKey = RouterProvider.useRouterState().location.state?.key;
89
+ const PendingComponent = route.options.pendingComponent ?? options.defaultPendingComponent ?? defaultPending;
90
+ const routeErrorComponent = route.options.errorComponent ?? options.defaultErrorComponent ?? CatchBoundary.ErrorComponent;
91
+ const ResolvedSuspenseBoundary = route.options.wrapInSuspense ?? React__namespace.Suspense;
92
+ // const ResolvedSuspenseBoundary = SafeFragment
93
+
94
+ const errorComponent = React__namespace.useCallback(props => {
95
+ return /*#__PURE__*/React__namespace.createElement(routeErrorComponent, {
96
+ ...props,
97
+ useMatch: route.useMatch,
98
+ useRouteContext: route.useRouteContext,
99
+ useSearch: route.useSearch,
100
+ useParams: route.useParams
101
+ });
102
+ }, [route]);
103
+ return /*#__PURE__*/React__namespace.createElement(matchesContext.Provider, {
104
+ value: matches
105
+ }, /*#__PURE__*/React__namespace.createElement(ResolvedSuspenseBoundary, {
106
+ fallback: /*#__PURE__*/React__namespace.createElement(PendingComponent, {
107
+ useMatch: route.useMatch,
108
+ useRouteContext: route.useRouteContext,
109
+ useSearch: route.useSearch,
110
+ useParams: route.useParams
111
+ })
112
+ }, /*#__PURE__*/React__namespace.createElement(CatchBoundary.CatchBoundary, {
113
+ resetKey: locationKey,
114
+ errorComponent: errorComponent,
115
+ onCatch: () => {
116
+ warning__default["default"](false, `Error in route match: ${match.id}`);
117
+ }
118
+ }, /*#__PURE__*/React__namespace.createElement(MatchInner, {
119
+ match: match
120
+ }))));
121
+ }
122
+ function MatchInner({
123
+ match
124
+ }) {
125
+ const {
126
+ options,
127
+ routesById
128
+ } = RouterProvider.useRouter();
129
+ const route = routesById[match.routeId];
130
+ if (match.status === 'error') {
131
+ throw match.error;
132
+ }
133
+ if (match.status === 'pending') {
134
+ throw match.loadPromise;
135
+ }
136
+ if (match.status === 'success') {
137
+ let comp = route.options.component ?? options.defaultComponent;
138
+ if (comp) {
139
+ return /*#__PURE__*/React__namespace.createElement(comp, {
140
+ useMatch: route.useMatch,
141
+ useRouteContext: route.useRouteContext,
142
+ useSearch: route.useSearch,
143
+ useParams: route.useParams
144
+ });
145
+ }
146
+ return /*#__PURE__*/React__namespace.createElement(Outlet, null);
147
+ }
148
+ invariant__default["default"](false, 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!');
149
+ }
150
+ function Outlet() {
151
+ const matches = React__namespace.useContext(matchesContext).slice(1);
152
+ if (!matches[0]) {
153
+ return null;
154
+ }
155
+ return /*#__PURE__*/React__namespace.createElement(Match, {
156
+ matches: matches
157
+ });
158
+ }
159
+ function useMatchRoute() {
160
+ const {
161
+ matchRoute
162
+ } = RouterProvider.useRouter();
163
+ return React__namespace.useCallback(opts => {
164
+ const {
165
+ pending,
166
+ caseSensitive,
167
+ ...rest
168
+ } = opts;
169
+ return matchRoute(rest, {
170
+ pending,
171
+ caseSensitive
172
+ });
173
+ }, []);
174
+ }
175
+ function MatchRoute(props) {
176
+ const matchRoute = useMatchRoute();
177
+ const params = matchRoute(props);
178
+ if (typeof props.children === 'function') {
179
+ return props.children(params);
180
+ }
181
+ return !!params ? props.children : null;
182
+ }
183
+ function useMatch(opts) {
184
+ const nearestMatch = React__namespace.useContext(matchesContext)[0];
185
+ const nearestMatchRouteId = nearestMatch?.routeId;
186
+ const matchRouteId = RouterProvider.useRouterState({
187
+ select: state => {
188
+ const match = opts?.from ? state.matches.find(d => d.routeId === opts?.from) : state.matches.find(d => d.id === nearestMatch.id);
189
+ return match.routeId;
190
+ }
191
+ });
192
+ if (opts?.strict ?? true) {
193
+ invariant__default["default"](nearestMatchRouteId == matchRouteId, `useMatch("${matchRouteId}") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch("${matchRouteId}", { strict: false })' or 'useRoute("${matchRouteId}")' instead?`);
194
+ }
195
+ const matchSelection = RouterProvider.useRouterState({
196
+ select: state => {
197
+ const match = opts?.from ? state.matches.find(d => d.routeId === opts?.from) : state.matches.find(d => d.id === nearestMatch.id);
198
+ invariant__default["default"](match, `Could not find ${opts?.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
199
+ return opts?.select ? opts.select(match) : match;
200
+ }
201
+ });
202
+ return matchSelection;
203
+ }
204
+ const matchesContext = /*#__PURE__*/React__namespace.createContext(null);
205
+ function useMatches(opts) {
206
+ const contextMatches = React__namespace.useContext(matchesContext);
207
+ return RouterProvider.useRouterState({
208
+ select: state => {
209
+ const matches = state.matches.slice(state.matches.findIndex(d => d.id === contextMatches[0]?.id));
210
+ return opts?.select ? opts.select(matches) : matches;
211
+ }
212
+ });
213
+ }
214
+
215
+ exports.Match = Match;
216
+ exports.MatchRoute = MatchRoute;
217
+ exports.Matches = Matches;
218
+ exports.Outlet = Outlet;
219
+ exports.matchesContext = matchesContext;
220
+ exports.useMatch = useMatch;
221
+ exports.useMatchRoute = useMatchRoute;
222
+ exports.useMatches = useMatches;
223
+ //# sourceMappingURL=Matches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { RouteMatch } from './RouterProvider'\nimport { useRouter, useRouterState } from './RouterProvider'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode, rootRouteId } from './route'\nimport { RouteById, RouteByPath, RouteIds, RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { NoInfer, StrictOrFrom } from './utils'\n\nexport function Matches() {\n const { routesById, state } = useRouter()\n const { matches } = state\n\n const locationKey = useRouterState().location.state.key\n\n const route = routesById[rootRouteId]\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(ErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteContext: route.useRouteContext,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <CatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matches.length ? <Match matches={matches} /> : null}\n </CatchBoundary>\n </matchesContext.Provider>\n )\n}\n\nconst defaultPending = () => null\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\nexport function Match({ matches }: { matches: RouteMatch[] }) {\n const { options, routesById } = useRouter()\n const match = matches[0]!\n const routeId = match?.routeId\n const route = routesById[routeId]\n const locationKey = useRouterState().location.state?.key\n\n const PendingComponent = (route.options.pendingComponent ??\n options.defaultPendingComponent ??\n defaultPending) as any\n\n const routeErrorComponent =\n route.options.errorComponent ??\n options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ?? React.Suspense\n // const ResolvedSuspenseBoundary = SafeFragment\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(routeErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteContext: route.useRouteContext,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <ResolvedSuspenseBoundary\n fallback={React.createElement(PendingComponent, {\n useMatch: route.useMatch,\n useRouteContext: route.useRouteContext,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })}\n >\n <CatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${match.id}`)\n }}\n >\n <MatchInner match={match} />\n </CatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchesContext.Provider>\n )\n}\nfunction MatchInner({ match }: { match: RouteMatch }): any {\n const { options, routesById } = useRouter()\n const route = routesById[match.routeId]\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let comp = route.options.component ?? options.defaultComponent\n\n if (comp) {\n return React.createElement(comp, {\n useMatch: route.useMatch,\n useRouteContext: route.useRouteContext as any,\n useSearch: route.useSearch,\n useParams: route.useParams as any,\n } as any)\n }\n\n return <Outlet />\n }\n\n invariant(\n false,\n 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!',\n )\n}\n\nexport function Outlet() {\n const matches = React.useContext(matchesContext).slice(1)\n\n if (!matches[0]) {\n return null\n }\n\n return <Match matches={matches} />\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type MakeUseMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<AnyRoute, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n const { matchRoute } = useRouter()\n\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n opts: MakeUseMatchRouteOptions<\n TRouteTree,\n TFrom,\n TTo,\n TMaskFrom,\n TMaskTo\n >,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, ...rest } = opts\n\n return matchRoute(rest as any, {\n pending,\n caseSensitive,\n })\n },\n [],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n MatchRouteOptions & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouteTree,\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => ReactNode)\n | React.ReactNode\n }\n\nexport function MatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n>(\n props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return !!params ? props.children : null\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TStrict extends true ? TRouteMatchState : TRouteMatchState | undefined {\n const nearestMatch = React.useContext(matchesContext)[0]!\n const nearestMatchRouteId = nearestMatch?.routeId\n\n const matchRouteId = useRouterState({\n select: (state) => {\n const match = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\n\n return match!.routeId\n },\n })\n\n if (opts?.strict ?? true) {\n invariant(\n nearestMatchRouteId == matchRouteId,\n `useMatch(\"${\n matchRouteId as string\n }\") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch(\"${\n matchRouteId as string\n }\", { strict: false })' or 'useRoute(\"${\n matchRouteId as string\n }\")' instead?`,\n )\n }\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\n\n invariant(\n match,\n `Could not find ${\n opts?.from\n ? `an active match from \"${opts.from}\"`\n : 'a nearest match!'\n }`,\n )\n\n return opts?.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as any\n}\n\nexport const matchesContext = React.createContext<RouteMatch[]>(null!)\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatches = React.useContext(matchesContext)\n\n return useRouterState({\n select: (state) => {\n const matches = state.matches.slice(\n state.matches.findIndex((d) => d.id === contextMatches[0]?.id),\n )\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n"],"names":["Matches","routesById","state","useRouter","matches","locationKey","useRouterState","location","key","route","rootRouteId","errorComponent","React","useCallback","props","createElement","ErrorComponent","useMatch","useRouteContext","useSearch","useParams","matchesContext","Provider","value","CatchBoundary","resetKey","onCatch","warning","length","Match","defaultPending","options","match","routeId","PendingComponent","pendingComponent","defaultPendingComponent","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","Suspense","fallback","id","MatchInner","status","error","loadPromise","comp","component","defaultComponent","Outlet","invariant","useContext","slice","useMatchRoute","matchRoute","opts","pending","caseSensitive","rest","MatchRoute","params","children","nearestMatch","nearestMatchRouteId","matchRouteId","select","from","find","d","strict","matchSelection","createContext","useMatches","contextMatches","findIndex"],"mappings":"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"}