@tanstack/react-router 0.0.1-beta.9 → 1.0.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 (229) hide show
  1. package/LICENSE +21 -0
  2. package/build/cjs/CatchBoundary.js +128 -0
  3. package/build/cjs/CatchBoundary.js.map +1 -0
  4. package/build/cjs/Matches.js +233 -0
  5. package/build/cjs/Matches.js.map +1 -0
  6. package/build/cjs/RouterProvider.js +170 -0
  7. package/build/cjs/RouterProvider.js.map +1 -0
  8. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +2 -22
  9. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  10. package/build/cjs/_virtual/with-selector.development.js +16 -0
  11. package/build/cjs/_virtual/with-selector.development.js.map +1 -0
  12. package/build/cjs/_virtual/with-selector.js +16 -0
  13. package/build/cjs/_virtual/with-selector.js.map +1 -0
  14. package/build/cjs/_virtual/with-selector.production.min.js +16 -0
  15. package/build/cjs/_virtual/with-selector.production.min.js.map +1 -0
  16. package/build/cjs/awaited.js +43 -0
  17. package/build/cjs/awaited.js.map +1 -0
  18. package/build/cjs/build/esm/index.js +79 -0
  19. package/build/cjs/build/esm/index.js.map +1 -0
  20. package/build/cjs/defer.js +37 -0
  21. package/build/cjs/defer.js.map +1 -0
  22. package/build/cjs/fileRoute.js +27 -0
  23. package/build/cjs/fileRoute.js.map +1 -0
  24. package/build/cjs/index.js +130 -0
  25. package/build/cjs/index.js.map +1 -0
  26. package/build/cjs/lazyRouteComponent.js +54 -0
  27. package/build/cjs/lazyRouteComponent.js.map +1 -0
  28. package/build/cjs/link.js +223 -0
  29. package/build/cjs/link.js.map +1 -0
  30. package/build/cjs/node_modules/.pnpm/@tanstack_react-store@0.2.1_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/modern/index.js +47 -0
  31. package/build/cjs/node_modules/.pnpm/@tanstack_react-store@0.2.1_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/modern/index.js.map +1 -0
  32. package/build/cjs/node_modules/.pnpm/@tanstack_store@0.1.3/node_modules/@tanstack/store/build/modern/index.js +70 -0
  33. package/build/cjs/node_modules/.pnpm/@tanstack_store@0.1.3/node_modules/@tanstack/store/build/modern/index.js.map +1 -0
  34. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +188 -0
  35. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -0
  36. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +39 -0
  37. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -0
  38. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/with-selector.js +26 -0
  39. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -0
  40. package/build/cjs/packages/react-router/src/CatchBoundary.js +123 -0
  41. package/build/cjs/packages/react-router/src/CatchBoundary.js.map +1 -0
  42. package/build/cjs/packages/react-router/src/Matches.js +235 -0
  43. package/build/cjs/packages/react-router/src/Matches.js.map +1 -0
  44. package/build/cjs/packages/react-router/src/RouterProvider.js +144 -0
  45. package/build/cjs/packages/react-router/src/RouterProvider.js.map +1 -0
  46. package/build/cjs/packages/react-router/src/awaited.js +43 -0
  47. package/build/cjs/packages/react-router/src/awaited.js.map +1 -0
  48. package/build/cjs/packages/react-router/src/defer.js +37 -0
  49. package/build/cjs/packages/react-router/src/defer.js.map +1 -0
  50. package/build/cjs/packages/react-router/src/fileRoute.js +27 -0
  51. package/build/cjs/packages/react-router/src/fileRoute.js.map +1 -0
  52. package/build/cjs/packages/react-router/src/index.js +61 -0
  53. package/build/cjs/packages/react-router/src/index.js.map +1 -0
  54. package/build/cjs/packages/react-router/src/lazyRouteComponent.js +54 -0
  55. package/build/cjs/packages/react-router/src/lazyRouteComponent.js.map +1 -0
  56. package/build/cjs/packages/react-router/src/link.js +148 -0
  57. package/build/cjs/packages/react-router/src/link.js.map +1 -0
  58. package/build/cjs/packages/react-router/src/path.js +209 -0
  59. package/build/cjs/packages/react-router/src/path.js.map +1 -0
  60. package/build/cjs/packages/react-router/src/qss.js +63 -0
  61. package/build/cjs/packages/react-router/src/qss.js.map +1 -0
  62. package/build/cjs/packages/react-router/src/react.js +634 -0
  63. package/build/cjs/packages/react-router/src/react.js.map +1 -0
  64. package/build/cjs/packages/react-router/src/redirects.js +25 -0
  65. package/build/cjs/packages/react-router/src/redirects.js.map +1 -0
  66. package/build/cjs/packages/react-router/src/route.js +134 -0
  67. package/build/cjs/packages/react-router/src/route.js.map +1 -0
  68. package/build/cjs/packages/react-router/src/router.js +1111 -0
  69. package/build/cjs/packages/react-router/src/router.js.map +1 -0
  70. package/build/cjs/packages/react-router/src/scroll-restoration.js +53 -0
  71. package/build/cjs/packages/react-router/src/scroll-restoration.js.map +1 -0
  72. package/build/cjs/packages/react-router/src/searchParams.js +81 -0
  73. package/build/cjs/packages/react-router/src/searchParams.js.map +1 -0
  74. package/build/cjs/packages/react-router/src/useBlocker.js +61 -0
  75. package/build/cjs/packages/react-router/src/useBlocker.js.map +1 -0
  76. package/build/cjs/packages/react-router/src/useNavigate.js +75 -0
  77. package/build/cjs/packages/react-router/src/useNavigate.js.map +1 -0
  78. package/build/cjs/packages/react-router/src/useParams.js +26 -0
  79. package/build/cjs/packages/react-router/src/useParams.js.map +1 -0
  80. package/build/cjs/packages/react-router/src/useSearch.js +25 -0
  81. package/build/cjs/packages/react-router/src/useSearch.js.map +1 -0
  82. package/build/cjs/packages/react-router/src/utils.js +239 -0
  83. package/build/cjs/packages/react-router/src/utils.js.map +1 -0
  84. package/build/cjs/path.js +214 -0
  85. package/build/cjs/path.js.map +1 -0
  86. package/build/cjs/qss.js +63 -0
  87. package/build/cjs/qss.js.map +1 -0
  88. package/build/cjs/react/CatchBoundary.js +123 -0
  89. package/build/cjs/react/CatchBoundary.js.map +1 -0
  90. package/build/cjs/react/awaited.js +43 -0
  91. package/build/cjs/react/awaited.js.map +1 -0
  92. package/build/cjs/react/defer.js +37 -0
  93. package/build/cjs/react/defer.js.map +1 -0
  94. package/build/cjs/react.js +650 -0
  95. package/build/cjs/react.js.map +1 -0
  96. package/build/cjs/redirects.js +28 -0
  97. package/build/cjs/redirects.js.map +1 -0
  98. package/build/cjs/route.js +191 -0
  99. package/build/cjs/route.js.map +1 -0
  100. package/build/cjs/router.js +1085 -0
  101. package/build/cjs/router.js.map +1 -0
  102. package/build/cjs/routerConfig.js +209 -0
  103. package/build/cjs/routerConfig.js.map +1 -0
  104. package/build/cjs/scroll-restoration.js +202 -0
  105. package/build/cjs/scroll-restoration.js.map +1 -0
  106. package/build/cjs/searchParams.js +81 -0
  107. package/build/cjs/searchParams.js.map +1 -0
  108. package/build/cjs/src/CatchBoundary.js +126 -0
  109. package/build/cjs/src/CatchBoundary.js.map +1 -0
  110. package/build/cjs/src/Matches.js +235 -0
  111. package/build/cjs/src/Matches.js.map +1 -0
  112. package/build/cjs/src/RouterProvider.js +1051 -0
  113. package/build/cjs/src/RouterProvider.js.map +1 -0
  114. package/build/cjs/src/awaited.js +45 -0
  115. package/build/cjs/src/awaited.js.map +1 -0
  116. package/build/cjs/src/defer.js +39 -0
  117. package/build/cjs/src/defer.js.map +1 -0
  118. package/build/cjs/src/fileRoute.js +29 -0
  119. package/build/cjs/src/fileRoute.js.map +1 -0
  120. package/build/cjs/src/index.js +134 -0
  121. package/build/cjs/src/index.js.map +1 -0
  122. package/build/cjs/src/lazyRouteComponent.js +57 -0
  123. package/build/cjs/src/lazyRouteComponent.js.map +1 -0
  124. package/build/cjs/src/link.js +151 -0
  125. package/build/cjs/src/link.js.map +1 -0
  126. package/build/cjs/src/path.js +211 -0
  127. package/build/cjs/src/path.js.map +1 -0
  128. package/build/cjs/src/qss.js +65 -0
  129. package/build/cjs/src/qss.js.map +1 -0
  130. package/build/cjs/src/redirects.js +27 -0
  131. package/build/cjs/src/redirects.js.map +1 -0
  132. package/build/cjs/src/route.js +139 -0
  133. package/build/cjs/src/route.js.map +1 -0
  134. package/build/cjs/src/router.js +203 -0
  135. package/build/cjs/src/router.js.map +1 -0
  136. package/build/cjs/src/scroll-restoration.js +186 -0
  137. package/build/cjs/src/scroll-restoration.js.map +1 -0
  138. package/build/cjs/src/searchParams.js +83 -0
  139. package/build/cjs/src/searchParams.js.map +1 -0
  140. package/build/cjs/src/useBlocker.js +64 -0
  141. package/build/cjs/src/useBlocker.js.map +1 -0
  142. package/build/cjs/src/useNavigate.js +78 -0
  143. package/build/cjs/src/useNavigate.js.map +1 -0
  144. package/build/cjs/src/useParams.js +28 -0
  145. package/build/cjs/src/useParams.js.map +1 -0
  146. package/build/cjs/src/useSearch.js +27 -0
  147. package/build/cjs/src/useSearch.js.map +1 -0
  148. package/build/cjs/src/utils.js +230 -0
  149. package/build/cjs/src/utils.js.map +1 -0
  150. package/build/cjs/useBlocker.js +55 -0
  151. package/build/cjs/useBlocker.js.map +1 -0
  152. package/build/cjs/useNavigate.js +86 -0
  153. package/build/cjs/useNavigate.js.map +1 -0
  154. package/build/cjs/useParams.js +26 -0
  155. package/build/cjs/useParams.js.map +1 -0
  156. package/build/cjs/useSearch.js +25 -0
  157. package/build/cjs/useSearch.js.map +1 -0
  158. package/build/cjs/useStore.js +99 -0
  159. package/build/cjs/useStore.js.map +1 -0
  160. package/build/cjs/utils.js +241 -0
  161. package/build/cjs/utils.js.map +1 -0
  162. package/build/esm/index.js +2300 -2534
  163. package/build/esm/index.js.map +1 -1
  164. package/build/stats-html.html +3498 -2694
  165. package/build/stats-react.json +1204 -44
  166. package/build/types/CatchBoundary.d.ts +36 -0
  167. package/build/types/Matches.d.ts +64 -0
  168. package/build/types/RouteMatch.d.ts +23 -0
  169. package/build/types/RouterProvider.d.ts +35 -0
  170. package/build/types/awaited.d.ts +9 -0
  171. package/build/types/defer.d.ts +19 -0
  172. package/build/types/fileRoute.d.ts +38 -0
  173. package/build/types/history.d.ts +7 -0
  174. package/build/types/index.d.ts +919 -58
  175. package/build/types/injectHtml.d.ts +0 -0
  176. package/build/types/lazyRouteComponent.d.ts +2 -0
  177. package/build/types/link.d.ts +93 -0
  178. package/build/types/location.d.ts +12 -0
  179. package/build/types/path.d.ts +17 -0
  180. package/build/types/qss.d.ts +2 -0
  181. package/build/types/react/CatchBoundary.d.ts +33 -0
  182. package/build/types/react/awaited.d.ts +9 -0
  183. package/build/types/react/defer.d.ts +19 -0
  184. package/build/types/react.d.ts +141 -0
  185. package/build/types/redirects.d.ts +11 -0
  186. package/build/types/route.d.ts +283 -0
  187. package/build/types/routeInfo.d.ts +31 -0
  188. package/build/types/router.d.ts +186 -0
  189. package/build/types/scroll-restoration.d.ts +18 -0
  190. package/build/types/searchParams.d.ts +7 -0
  191. package/build/types/useBlocker.d.ts +9 -0
  192. package/build/types/useNavigate.d.ts +19 -0
  193. package/build/types/useParams.d.ts +7 -0
  194. package/build/types/useSearch.d.ts +7 -0
  195. package/build/types/useStore.d.ts +12 -0
  196. package/build/types/utils.d.ts +69 -0
  197. package/build/umd/index.development.js +2897 -2493
  198. package/build/umd/index.development.js.map +1 -1
  199. package/build/umd/index.production.js +4 -4
  200. package/build/umd/index.production.js.map +1 -1
  201. package/package.json +12 -10
  202. package/src/CatchBoundary.tsx +101 -0
  203. package/src/Matches.tsx +423 -0
  204. package/src/RouterProvider.tsx +252 -0
  205. package/src/awaited.tsx +40 -0
  206. package/src/defer.ts +55 -0
  207. package/src/fileRoute.ts +152 -0
  208. package/src/history.ts +8 -0
  209. package/src/index.tsx +28 -619
  210. package/src/lazyRouteComponent.tsx +33 -0
  211. package/src/link.tsx +603 -0
  212. package/src/location.ts +13 -0
  213. package/src/path.ts +261 -0
  214. package/src/qss.ts +53 -0
  215. package/src/redirects.ts +39 -0
  216. package/src/route.ts +882 -0
  217. package/src/routeInfo.ts +84 -0
  218. package/src/router.ts +1671 -0
  219. package/src/scroll-restoration.tsx +230 -0
  220. package/src/searchParams.ts +79 -0
  221. package/src/useBlocker.tsx +27 -0
  222. package/src/useNavigate.tsx +111 -0
  223. package/src/useParams.tsx +25 -0
  224. package/src/useSearch.tsx +25 -0
  225. package/src/utils.ts +360 -0
  226. package/build/cjs/react-router/src/index.js +0 -458
  227. package/build/cjs/react-router/src/index.js.map +0 -1
  228. package/build/cjs/router-core/build/esm/index.js +0 -2524
  229. package/build/cjs/router-core/build/esm/index.js.map +0 -1
@@ -0,0 +1,151 @@
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 _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
16
+ var React = require('react');
17
+ var Matches = require('./Matches.js');
18
+ var RouterProvider = require('./RouterProvider.js');
19
+ var utils = require('./utils.js');
20
+
21
+ function _interopNamespace(e) {
22
+ if (e && e.__esModule) return e;
23
+ var n = Object.create(null);
24
+ if (e) {
25
+ Object.keys(e).forEach(function (k) {
26
+ if (k !== 'default') {
27
+ var d = Object.getOwnPropertyDescriptor(e, k);
28
+ Object.defineProperty(n, k, d.get ? d : {
29
+ enumerable: true,
30
+ get: function () { return e[k]; }
31
+ });
32
+ }
33
+ });
34
+ }
35
+ n["default"] = e;
36
+ return Object.freeze(n);
37
+ }
38
+
39
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
40
+
41
+ function useLinkProps(options) {
42
+ const {
43
+ buildLink
44
+ } = RouterProvider.useRouter();
45
+ const match = Matches.useMatch({
46
+ strict: false
47
+ });
48
+ const {
49
+ // custom props
50
+ type,
51
+ children,
52
+ target,
53
+ activeProps = () => ({
54
+ className: 'active'
55
+ }),
56
+ inactiveProps = () => ({}),
57
+ activeOptions,
58
+ disabled,
59
+ hash,
60
+ search,
61
+ params,
62
+ to,
63
+ state,
64
+ mask,
65
+ preload,
66
+ preloadDelay,
67
+ replace,
68
+ startTransition,
69
+ resetScroll,
70
+ // element props
71
+ style,
72
+ className,
73
+ onClick,
74
+ onFocus,
75
+ onMouseEnter,
76
+ onMouseLeave,
77
+ onTouchStart,
78
+ ...rest
79
+ } = options;
80
+ const linkInfo = buildLink({
81
+ from: options.to ? match.pathname : undefined,
82
+ ...options
83
+ });
84
+ if (linkInfo.type === 'external') {
85
+ const {
86
+ href
87
+ } = linkInfo;
88
+ return {
89
+ href
90
+ };
91
+ }
92
+ const {
93
+ handleClick,
94
+ handleFocus,
95
+ handleEnter,
96
+ handleLeave,
97
+ handleTouchStart,
98
+ isActive,
99
+ next
100
+ } = linkInfo;
101
+ const composeHandlers = handlers => e => {
102
+ if (e.persist) e.persist();
103
+ handlers.filter(Boolean).forEach(handler => {
104
+ if (e.defaultPrevented) return;
105
+ handler(e);
106
+ });
107
+ };
108
+
109
+ // Get the active props
110
+ const resolvedActiveProps = isActive ? utils.functionalUpdate(activeProps, {}) ?? {} : {};
111
+
112
+ // Get the inactive props
113
+ const resolvedInactiveProps = isActive ? {} : utils.functionalUpdate(inactiveProps, {}) ?? {};
114
+ return {
115
+ ...resolvedActiveProps,
116
+ ...resolvedInactiveProps,
117
+ ...rest,
118
+ href: disabled ? undefined : next.maskedLocation ? next.maskedLocation.href : next.href,
119
+ onClick: composeHandlers([onClick, handleClick]),
120
+ onFocus: composeHandlers([onFocus, handleFocus]),
121
+ onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),
122
+ onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),
123
+ onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),
124
+ target,
125
+ style: {
126
+ ...style,
127
+ ...resolvedActiveProps.style,
128
+ ...resolvedInactiveProps.style
129
+ },
130
+ className: [className, resolvedActiveProps.className, resolvedInactiveProps.className].filter(Boolean).join(' ') || undefined,
131
+ ...(disabled ? {
132
+ role: 'link',
133
+ 'aria-disabled': true
134
+ } : undefined),
135
+ ['data-status']: isActive ? 'active' : undefined
136
+ };
137
+ }
138
+ const Link = /*#__PURE__*/React__namespace.forwardRef((props, ref) => {
139
+ const linkProps = useLinkProps(props);
140
+ return /*#__PURE__*/React__namespace.createElement("a", _rollupPluginBabelHelpers["extends"]({
141
+ ref: ref
142
+ }, linkProps, {
143
+ children: typeof props.children === 'function' ? props.children({
144
+ isActive: linkProps['data-status'] === 'active'
145
+ }) : props.children
146
+ }));
147
+ });
148
+
149
+ exports.Link = Link;
150
+ exports.useLinkProps = useLinkProps;
151
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sources":["../../../src/link.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { useRouter } from './RouterProvider'\nimport { Trim } from './fileRoute'\nimport { LocationState, ParsedLocation } from './location'\nimport { AnyRoute, ReactNode } from './route'\nimport {\n AllParams,\n FullSearchSchema,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { MakeLinkOptions, MakeLinkPropsOptions } from './useNavigate'\nimport {\n Expand,\n NoInfer,\n NonNullableUpdater,\n PickRequired,\n UnionToIntersection,\n Updater,\n functionalUpdate,\n} from './utils'\n\nexport type LinkInfo =\n | {\n type: 'external'\n href: string\n }\n | {\n type: 'internal'\n next: ParsedLocation\n handleFocus: (e: any) => void\n handleClick: (e: any) => void\n handleEnter: (e: any) => void\n handleLeave: (e: any) => void\n handleTouchStart: (e: any) => void\n isActive: boolean\n disabled?: boolean\n }\n\nexport type CleanPath<T extends string> = T extends `${infer L}//${infer R}`\n ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`>\n : T extends `${infer L}//`\n ? `${CleanPath<L>}/`\n : T extends `//${infer L}`\n ? `/${CleanPath<L>}`\n : T\n\nexport type Split<S, TIncludeTrailingSlash = true> = S extends unknown\n ? string extends S\n ? string[]\n : S extends string\n ? CleanPath<S> extends ''\n ? []\n : TIncludeTrailingSlash extends true\n ? CleanPath<S> extends `${infer T}/`\n ? [...Split<T>, '/']\n : CleanPath<S> extends `/${infer U}`\n ? Split<U>\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : [S]\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : S extends string\n ? [S]\n : never\n : never\n : never\n\nexport type ParsePathParams<T extends string> = keyof {\n [K in Trim<Split<T>[number], '_'> as K extends `$${infer L}` ? L : never]: K\n}\n\nexport type Join<T, Delimiter extends string = '/'> = T extends []\n ? ''\n : T extends [infer L extends string]\n ? L\n : T extends [infer L extends string, ...infer Tail extends [...string[]]]\n ? CleanPath<`${L}${Delimiter}${Join<Tail>}`>\n : never\n\nexport type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never\n\nexport type RelativeToPathAutoComplete<\n AllPaths extends string,\n TFrom extends string,\n TTo extends string,\n SplitPaths extends string[] = Split<AllPaths, false>,\n> = TTo extends `..${infer _}`\n ? SplitPaths extends [\n ...Split<ResolveRelativePath<TFrom, TTo>, false>,\n ...infer TToRest,\n ]\n ? `${CleanPath<\n Join<\n [\n ...Split<TTo, false>,\n ...(\n | TToRest\n | (Split<\n ResolveRelativePath<TFrom, TTo>,\n false\n >['length'] extends 1\n ? never\n : ['../'])\n ),\n ]\n >\n >}`\n : never\n : TTo extends `./${infer RestTTo}`\n ? SplitPaths extends [\n ...Split<TFrom, false>,\n ...Split<RestTTo, false>,\n ...infer RestPath,\n ]\n ? `${TTo}${Join<RestPath>}`\n : never\n :\n | (TFrom extends `/`\n ? never\n : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath]\n ? Join<RestPath> extends { length: 0 }\n ? never\n : './'\n : never)\n | (TFrom extends `/` ? never : '../')\n | AllPaths\n\nexport type NavigateOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.\n replace?: boolean\n resetScroll?: boolean\n // If set to `true`, the link's underlying navigate() call will be wrapped in a `React.startTransition` call. Defaults to `true`.\n startTransition?: boolean\n}\n\nexport type ToOptions<\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> = ToSubOptions<TRouteTree, TFrom, TTo> & {\n mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>\n}\n\nexport type ToMaskOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {\n unmaskOnReload?: boolean\n}\n\nexport type ToSubOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n> = {\n to?: ToPathOption<TRouteTree, TFrom, TTo>\n // The new has string or a function to update it\n hash?: true | Updater<string>\n // State to pass to the history stack\n state?: true | NonNullableUpdater<LocationState>\n // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required\n from?: TFrom\n // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path\n // fromCurrent?: boolean\n} & CheckPath<TRouteTree, NoInfer<TResolved>, {}> &\n SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> &\n PathParamOptions<TRouteTree, TFrom, TResolved>\n\nexport type SearchParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo,\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n TFromSearchEnsured = '/' extends TFrom\n ? FullSearchSchema<TRouteTree>\n : Expand<\n UnionToIntersection<\n PickRequired<\n RouteByPath<TRouteTree, TFrom>['types']['fullSearchSchema']\n >\n >\n >,\n TFromSearchOptional = Omit<AllParams<TRouteTree>, keyof TFromSearchEnsured>,\n TFromSearch = Expand<TFromSearchEnsured & TFromSearchOptional>,\n TToSearch = '' extends TTo\n ? FullSearchSchema<TRouteTree>\n : Expand<RouteByPath<TRouteTree, TResolved>['types']['fullSearchSchema']>,\n> = keyof PickRequired<TToSearch> extends never\n ? {\n search?: true | SearchReducer<TFromSearch, TToSearch>\n }\n : {\n search: TFromSearchEnsured extends PickRequired<TToSearch>\n ? true | SearchReducer<TFromSearch, TToSearch>\n : SearchReducer<TFromSearch, TToSearch>\n }\n\ntype SearchReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\nexport type PathParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo,\n TFromParamsEnsured = Expand<\n UnionToIntersection<\n PickRequired<RouteByPath<TRouteTree, TFrom>['types']['allParams']>\n >\n >,\n TFromParamsOptional = Omit<AllParams<TRouteTree>, keyof TFromParamsEnsured>,\n TFromParams = Expand<TFromParamsOptional & TFromParamsEnsured>,\n TToParams = Expand<RouteByPath<TRouteTree, TTo>['types']['allParams']>,\n> = keyof PickRequired<TToParams> extends never\n ? {\n params?: true | ParamsReducer<TFromParams, TToParams>\n }\n : {\n params: TFromParamsEnsured extends PickRequired<TToParams>\n ? true | ParamsReducer<TFromParams, TToParams>\n : ParamsReducer<TFromParams, TToParams>\n }\n\ntype ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\nexport type ToPathOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RoutePaths<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport type ToIdOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RouteIds<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport interface ActiveOptions {\n exact?: boolean\n includeHash?: boolean\n includeSearch?: boolean\n}\n\nexport type LinkOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // The standard anchor tag target attribute\n target?: HTMLAnchorElement['target']\n // Defaults to `{ exact: false, includeHash: false }`\n activeOptions?: ActiveOptions\n // If set, will preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.\n preload?: false | 'intent'\n // Delay intent preloading by this many milliseconds. If the intent exits before this delay, the preload will be cancelled.\n preloadDelay?: number\n // If true, will render the link without the href attribute\n disabled?: boolean\n}\n\nexport type CheckRelativePath<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo,\n> = TTo extends string\n ? TFrom extends string\n ? ResolveRelativePath<TFrom, TTo> extends RoutePaths<TRouteTree>\n ? {}\n : {\n Error: `${TFrom} + ${TTo} resolves to ${ResolveRelativePath<\n TFrom,\n TTo\n >}, which is not a valid route path.`\n 'Valid Route Paths': RoutePaths<TRouteTree>\n }\n : {}\n : {}\n\nexport type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RoutePaths<TRouteTree>\n> extends never\n ? TPass\n : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>\n\nexport type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {\n to: RoutePaths<TRouteTree>\n}\n\nexport type CheckId<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RouteIds<TRouteTree>\n> extends never\n ? TPass\n : CheckIdError<TRouteTree, Exclude<TPath, RouteIds<TRouteTree>>>\n\nexport type CheckIdError<TRouteTree extends AnyRoute, TInvalids> = {\n Error: `${TInvalids extends string\n ? TInvalids\n : never} is not a valid route ID.`\n 'Valid Route IDs': RouteIds<TRouteTree>\n}\n\nexport type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string\n ? TTo extends string\n ? TTo extends '.'\n ? TFrom\n : TTo extends `./`\n ? Join<[TFrom, '/']>\n : TTo extends `./${infer TRest}`\n ? ResolveRelativePath<TFrom, TRest>\n : TTo extends `/${infer TRest}`\n ? TTo\n : Split<TTo> extends ['..', ...infer ToRest]\n ? Split<TFrom> extends [...infer FromRest, infer FromTail]\n ? ToRest extends ['/']\n ? Join<[...FromRest, '/']>\n : ResolveRelativePath<Join<FromRest>, Join<ToRest>>\n : never\n : Split<TTo> extends ['.', ...infer ToRest]\n ? ToRest extends ['/']\n ? Join<[TFrom, '/']>\n : ResolveRelativePath<TFrom, Join<ToRest>>\n : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>\n : never\n : never\n\nexport function useLinkProps<\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 options: MakeLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const { buildLink } = useRouter()\n const match = useMatch({\n strict: false,\n })\n\n const {\n // custom props\n type,\n children,\n target,\n activeProps = () => ({ className: 'active' }),\n inactiveProps = () => ({}),\n activeOptions,\n disabled,\n hash,\n search,\n params,\n to,\n state,\n mask,\n preload,\n preloadDelay,\n replace,\n startTransition,\n resetScroll,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n const linkInfo = buildLink({\n from: options.to ? match.pathname : undefined,\n ...options,\n } as any)\n\n if (linkInfo.type === 'external') {\n const { href } = linkInfo\n return { href }\n }\n\n const {\n handleClick,\n handleFocus,\n handleEnter,\n handleLeave,\n handleTouchStart,\n isActive,\n next,\n } = linkInfo\n\n const composeHandlers =\n (handlers: (undefined | ((e: any) => void))[]) =>\n (e: React.SyntheticEvent) => {\n if (e.persist) e.persist()\n handlers.filter(Boolean).forEach((handler) => {\n if (e.defaultPrevented) return\n handler!(e)\n })\n }\n\n // Get the active props\n const resolvedActiveProps: React.HTMLAttributes<HTMLAnchorElement> = isActive\n ? functionalUpdate(activeProps as any, {}) ?? {}\n : {}\n\n // Get the inactive props\n const resolvedInactiveProps: React.HTMLAttributes<HTMLAnchorElement> =\n isActive ? {} : functionalUpdate(inactiveProps, {}) ?? {}\n\n return {\n ...resolvedActiveProps,\n ...resolvedInactiveProps,\n ...rest,\n href: disabled\n ? undefined\n : next.maskedLocation\n ? next.maskedLocation.href\n : next.href,\n onClick: composeHandlers([onClick, handleClick]),\n onFocus: composeHandlers([onFocus, handleFocus]),\n onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),\n onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n target,\n style: {\n ...style,\n ...resolvedActiveProps.style,\n ...resolvedInactiveProps.style,\n },\n className:\n [\n className,\n resolvedActiveProps.className,\n resolvedInactiveProps.className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ...(disabled\n ? {\n role: 'link',\n 'aria-disabled': true,\n }\n : undefined),\n ['data-status']: isActive ? 'active' : undefined,\n }\n}\n\nexport interface LinkComponent<TProps extends Record<string, any> = {}> {\n <\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: MakeLinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n TProps &\n React.RefAttributes<HTMLAnchorElement>,\n ): ReactNode\n}\n\nexport const Link: LinkComponent = React.forwardRef((props: any, ref) => {\n const linkProps = useLinkProps(props)\n\n return (\n <a\n {...{\n ref: ref as any,\n ...linkProps,\n children:\n typeof props.children === 'function'\n ? props.children({\n isActive: (linkProps as any)['data-status'] === 'active',\n })\n : props.children,\n }}\n />\n )\n}) as any\n"],"names":["useLinkProps","options","buildLink","useRouter","match","useMatch","strict","type","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","state","mask","preload","preloadDelay","replace","startTransition","resetScroll","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","linkInfo","from","pathname","undefined","href","handleClick","handleFocus","handleEnter","handleLeave","handleTouchStart","isActive","next","composeHandlers","handlers","e","persist","filter","Boolean","forEach","handler","defaultPrevented","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","React","forwardRef","props","ref","linkProps","createElement","_extends"],"mappings":"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"}
@@ -0,0 +1,211 @@
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 utils = require('./utils.js');
16
+
17
+ function joinPaths(paths) {
18
+ return cleanPath(paths.filter(Boolean).join('/'));
19
+ }
20
+ function cleanPath(path) {
21
+ // remove double slashes
22
+ return path.replace(/\/{2,}/g, '/');
23
+ }
24
+ function trimPathLeft(path) {
25
+ return path === '/' ? path : path.replace(/^\/{1,}/, '');
26
+ }
27
+ function trimPathRight(path) {
28
+ return path === '/' ? path : path.replace(/\/{1,}$/, '');
29
+ }
30
+ function trimPath(path) {
31
+ return trimPathRight(trimPathLeft(path));
32
+ }
33
+ function resolvePath(basepath, base, to) {
34
+ base = base.replace(new RegExp(`^${basepath}`), '/');
35
+ to = to.replace(new RegExp(`^${basepath}`), '/');
36
+ let baseSegments = parsePathname(base);
37
+ const toSegments = parsePathname(to);
38
+ toSegments.forEach((toSegment, index) => {
39
+ if (toSegment.value === '/') {
40
+ if (!index) {
41
+ // Leading slash
42
+ baseSegments = [toSegment];
43
+ } else if (index === toSegments.length - 1) {
44
+ // Trailing Slash
45
+ baseSegments.push(toSegment);
46
+ } else ;
47
+ } else if (toSegment.value === '..') {
48
+ // Extra trailing slash? pop it off
49
+ if (baseSegments.length > 1 && utils.last(baseSegments)?.value === '/') {
50
+ baseSegments.pop();
51
+ }
52
+ baseSegments.pop();
53
+ } else if (toSegment.value === '.') {
54
+ return;
55
+ } else {
56
+ baseSegments.push(toSegment);
57
+ }
58
+ });
59
+ const joined = joinPaths([basepath, ...baseSegments.map(d => d.value)]);
60
+ return cleanPath(joined);
61
+ }
62
+ function parsePathname(pathname) {
63
+ if (!pathname) {
64
+ return [];
65
+ }
66
+ pathname = cleanPath(pathname);
67
+ const segments = [];
68
+ if (pathname.slice(0, 1) === '/') {
69
+ pathname = pathname.substring(1);
70
+ segments.push({
71
+ type: 'pathname',
72
+ value: '/'
73
+ });
74
+ }
75
+ if (!pathname) {
76
+ return segments;
77
+ }
78
+
79
+ // Remove empty segments and '.' segments
80
+ const split = pathname.split('/').filter(Boolean);
81
+ segments.push(...split.map(part => {
82
+ if (part === '$' || part === '*') {
83
+ return {
84
+ type: 'wildcard',
85
+ value: part
86
+ };
87
+ }
88
+ if (part.charAt(0) === '$') {
89
+ return {
90
+ type: 'param',
91
+ value: part
92
+ };
93
+ }
94
+ return {
95
+ type: 'pathname',
96
+ value: part
97
+ };
98
+ }));
99
+ if (pathname.slice(-1) === '/') {
100
+ pathname = pathname.substring(1);
101
+ segments.push({
102
+ type: 'pathname',
103
+ value: '/'
104
+ });
105
+ }
106
+ return segments;
107
+ }
108
+ function interpolatePath(path, params, leaveWildcards = false) {
109
+ const interpolatedPathSegments = parsePathname(path);
110
+ return joinPaths(interpolatedPathSegments.map(segment => {
111
+ if (segment.type === 'wildcard') {
112
+ const value = params[segment.value];
113
+ if (leaveWildcards) return `${segment.value}${value ?? ''}`;
114
+ return value;
115
+ }
116
+ if (segment.type === 'param') {
117
+ return params[segment.value.substring(1)] ?? '';
118
+ }
119
+ return segment.value;
120
+ }));
121
+ }
122
+ function matchPathname(basepath, currentPathname, matchLocation) {
123
+ const pathParams = matchByPath(basepath, currentPathname, matchLocation);
124
+ // const searchMatched = matchBySearch(location.search, matchLocation)
125
+
126
+ if (matchLocation.to && !pathParams) {
127
+ return;
128
+ }
129
+ return pathParams ?? {};
130
+ }
131
+ function matchByPath(basepath, from, matchLocation) {
132
+ // Remove the base path from the pathname
133
+ from = basepath != '/' ? from.substring(basepath.length) : from;
134
+ // Default to to $ (wildcard)
135
+ const to = `${matchLocation.to ?? '$'}`;
136
+ // Parse the from and to
137
+ const baseSegments = parsePathname(from);
138
+ const routeSegments = parsePathname(to);
139
+ if (!from.startsWith('/')) {
140
+ baseSegments.unshift({
141
+ type: 'pathname',
142
+ value: '/'
143
+ });
144
+ }
145
+ if (!to.startsWith('/')) {
146
+ routeSegments.unshift({
147
+ type: 'pathname',
148
+ value: '/'
149
+ });
150
+ }
151
+ const params = {};
152
+ let isMatch = (() => {
153
+ for (let i = 0; i < Math.max(baseSegments.length, routeSegments.length); i++) {
154
+ const baseSegment = baseSegments[i];
155
+ const routeSegment = routeSegments[i];
156
+ const isLastBaseSegment = i >= baseSegments.length - 1;
157
+ const isLastRouteSegment = i >= routeSegments.length - 1;
158
+ if (routeSegment) {
159
+ if (routeSegment.type === 'wildcard') {
160
+ if (baseSegment?.value) {
161
+ params['*'] = joinPaths(baseSegments.slice(i).map(d => d.value));
162
+ return true;
163
+ }
164
+ return false;
165
+ }
166
+ if (routeSegment.type === 'pathname') {
167
+ if (routeSegment.value === '/' && !baseSegment?.value) {
168
+ return true;
169
+ }
170
+ if (baseSegment) {
171
+ if (matchLocation.caseSensitive) {
172
+ if (routeSegment.value !== baseSegment.value) {
173
+ return false;
174
+ }
175
+ } else if (routeSegment.value.toLowerCase() !== baseSegment.value.toLowerCase()) {
176
+ return false;
177
+ }
178
+ }
179
+ }
180
+ if (!baseSegment) {
181
+ return false;
182
+ }
183
+ if (routeSegment.type === 'param') {
184
+ if (baseSegment?.value === '/') {
185
+ return false;
186
+ }
187
+ if (baseSegment.value.charAt(0) !== '$') {
188
+ params[routeSegment.value.substring(1)] = baseSegment.value;
189
+ }
190
+ }
191
+ }
192
+ if (!isLastBaseSegment && isLastRouteSegment) {
193
+ return !!matchLocation.fuzzy;
194
+ }
195
+ }
196
+ return true;
197
+ })();
198
+ return isMatch ? params : undefined;
199
+ }
200
+
201
+ exports.cleanPath = cleanPath;
202
+ exports.interpolatePath = interpolatePath;
203
+ exports.joinPaths = joinPaths;
204
+ exports.matchByPath = matchByPath;
205
+ exports.matchPathname = matchPathname;
206
+ exports.parsePathname = parsePathname;
207
+ exports.resolvePath = resolvePath;
208
+ exports.trimPath = trimPath;
209
+ exports.trimPathLeft = trimPathLeft;
210
+ exports.trimPathRight = trimPathRight;
211
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sources":["../../../src/path.ts"],"sourcesContent":["import { MatchLocation } from './RouterProvider'\nimport { AnyPathParams } from './route'\nimport { last } from './utils'\n\nexport interface Segment {\n type: 'pathname' | 'param' | 'wildcard'\n value: string\n}\n\nexport function joinPaths(paths: (string | undefined)[]) {\n return cleanPath(paths.filter(Boolean).join('/'))\n}\n\nexport function cleanPath(path: string) {\n // remove double slashes\n return path.replace(/\\/{2,}/g, '/')\n}\n\nexport function trimPathLeft(path: string) {\n return path === '/' ? path : path.replace(/^\\/{1,}/, '')\n}\n\nexport function trimPathRight(path: string) {\n return path === '/' ? path : path.replace(/\\/{1,}$/, '')\n}\n\nexport function trimPath(path: string) {\n return trimPathRight(trimPathLeft(path))\n}\n\nexport function resolvePath(basepath: string, base: string, to: string) {\n base = base.replace(new RegExp(`^${basepath}`), '/')\n to = to.replace(new RegExp(`^${basepath}`), '/')\n\n let baseSegments = parsePathname(base)\n const toSegments = parsePathname(to)\n\n toSegments.forEach((toSegment, index) => {\n if (toSegment.value === '/') {\n if (!index) {\n // Leading slash\n baseSegments = [toSegment]\n } else if (index === toSegments.length - 1) {\n // Trailing Slash\n baseSegments.push(toSegment)\n } else {\n // ignore inter-slashes\n }\n } else if (toSegment.value === '..') {\n // Extra trailing slash? pop it off\n if (baseSegments.length > 1 && last(baseSegments)?.value === '/') {\n baseSegments.pop()\n }\n baseSegments.pop()\n } else if (toSegment.value === '.') {\n return\n } else {\n baseSegments.push(toSegment)\n }\n })\n\n const joined = joinPaths([basepath, ...baseSegments.map((d) => d.value)])\n\n return cleanPath(joined)\n}\n\nexport function parsePathname(pathname?: string): Segment[] {\n if (!pathname) {\n return []\n }\n\n pathname = cleanPath(pathname)\n\n const segments: Segment[] = []\n\n if (pathname.slice(0, 1) === '/') {\n pathname = pathname.substring(1)\n segments.push({\n type: 'pathname',\n value: '/',\n })\n }\n\n if (!pathname) {\n return segments\n }\n\n // Remove empty segments and '.' segments\n const split = pathname.split('/').filter(Boolean)\n\n segments.push(\n ...split.map((part): Segment => {\n if (part === '$' || part === '*') {\n return {\n type: 'wildcard',\n value: part,\n }\n }\n\n if (part.charAt(0) === '$') {\n return {\n type: 'param',\n value: part,\n }\n }\n\n return {\n type: 'pathname',\n value: part,\n }\n }),\n )\n\n if (pathname.slice(-1) === '/') {\n pathname = pathname.substring(1)\n segments.push({\n type: 'pathname',\n value: '/',\n })\n }\n\n return segments\n}\n\nexport function interpolatePath(\n path: string | undefined,\n params: any,\n leaveWildcards: boolean = false,\n) {\n const interpolatedPathSegments = parsePathname(path)\n\n return joinPaths(\n interpolatedPathSegments.map((segment) => {\n if (segment.type === 'wildcard') {\n const value = params[segment.value]\n if (leaveWildcards) return `${segment.value}${value ?? ''}`\n return value\n }\n\n if (segment.type === 'param') {\n return params![segment.value.substring(1)] ?? ''\n }\n\n return segment.value\n }),\n )\n}\n\nexport function matchPathname(\n basepath: string,\n currentPathname: string,\n matchLocation: Pick<MatchLocation, 'to' | 'fuzzy' | 'caseSensitive'>,\n): AnyPathParams | undefined {\n const pathParams = matchByPath(basepath, currentPathname, matchLocation)\n // const searchMatched = matchBySearch(location.search, matchLocation)\n\n if (matchLocation.to && !pathParams) {\n return\n }\n\n return pathParams ?? {}\n}\n\nexport function matchByPath(\n basepath: string,\n from: string,\n matchLocation: Pick<MatchLocation, 'to' | 'caseSensitive' | 'fuzzy'>,\n): Record<string, string> | undefined {\n // Remove the base path from the pathname\n from = basepath != '/' ? from.substring(basepath.length) : from\n // Default to to $ (wildcard)\n const to = `${matchLocation.to ?? '$'}`\n // Parse the from and to\n const baseSegments = parsePathname(from)\n const routeSegments = parsePathname(to)\n\n if (!from.startsWith('/')) {\n baseSegments.unshift({\n type: 'pathname',\n value: '/',\n })\n }\n\n if (!to.startsWith('/')) {\n routeSegments.unshift({\n type: 'pathname',\n value: '/',\n })\n }\n\n const params: Record<string, string> = {}\n\n let isMatch = (() => {\n for (\n let i = 0;\n i < Math.max(baseSegments.length, routeSegments.length);\n i++\n ) {\n const baseSegment = baseSegments[i]\n const routeSegment = routeSegments[i]\n\n const isLastBaseSegment = i >= baseSegments.length - 1\n const isLastRouteSegment = i >= routeSegments.length - 1\n\n if (routeSegment) {\n if (routeSegment.type === 'wildcard') {\n if (baseSegment?.value) {\n params['*'] = joinPaths(baseSegments.slice(i).map((d) => d.value))\n return true\n }\n return false\n }\n\n if (routeSegment.type === 'pathname') {\n if (routeSegment.value === '/' && !baseSegment?.value) {\n return true\n }\n\n if (baseSegment) {\n if (matchLocation.caseSensitive) {\n if (routeSegment.value !== baseSegment.value) {\n return false\n }\n } else if (\n routeSegment.value.toLowerCase() !==\n baseSegment.value.toLowerCase()\n ) {\n return false\n }\n }\n }\n\n if (!baseSegment) {\n return false\n }\n\n if (routeSegment.type === 'param') {\n if (baseSegment?.value === '/') {\n return false\n }\n if (baseSegment.value.charAt(0) !== '$') {\n params[routeSegment.value.substring(1)] = baseSegment.value\n }\n }\n }\n\n if (!isLastBaseSegment && isLastRouteSegment) {\n return !!matchLocation.fuzzy\n }\n }\n\n return true\n })()\n\n return isMatch ? (params as Record<string, string>) : undefined\n}\n"],"names":["joinPaths","paths","cleanPath","filter","Boolean","join","path","replace","trimPathLeft","trimPathRight","trimPath","resolvePath","basepath","base","to","RegExp","baseSegments","parsePathname","toSegments","forEach","toSegment","index","value","length","push","last","pop","joined","map","d","pathname","segments","slice","substring","type","split","part","charAt","interpolatePath","params","leaveWildcards","interpolatedPathSegments","segment","matchPathname","currentPathname","matchLocation","pathParams","matchByPath","from","routeSegments","startsWith","unshift","isMatch","i","Math","max","baseSegment","routeSegment","isLastBaseSegment","isLastRouteSegment","caseSensitive","toLowerCase","fuzzy","undefined"],"mappings":"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"}
@@ -0,0 +1,65 @@
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
+ // @ts-nocheck
16
+
17
+ // qss has been slightly modified and inlined here for our use cases (and compression's sake). We've included it as a hard dependency for MIT license attribution.
18
+
19
+ function encode(obj, pfx) {
20
+ var k,
21
+ i,
22
+ tmp,
23
+ str = '';
24
+ for (k in obj) {
25
+ if ((tmp = obj[k]) !== void 0) {
26
+ if (Array.isArray(tmp)) {
27
+ for (i = 0; i < tmp.length; i++) {
28
+ str && (str += '&');
29
+ str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp[i]);
30
+ }
31
+ } else {
32
+ str && (str += '&');
33
+ str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp);
34
+ }
35
+ }
36
+ }
37
+ return (pfx || '') + str;
38
+ }
39
+ function toValue(mix) {
40
+ if (!mix) return '';
41
+ var str = decodeURIComponent(mix);
42
+ if (str === 'false') return false;
43
+ if (str === 'true') return true;
44
+ return +str * 0 === 0 && +str + '' === str ? +str : str;
45
+ }
46
+ function decode(str) {
47
+ var tmp,
48
+ k,
49
+ out = {},
50
+ arr = str.split('&');
51
+ while (tmp = arr.shift()) {
52
+ tmp = tmp.split('=');
53
+ k = tmp.shift();
54
+ if (out[k] !== void 0) {
55
+ out[k] = [].concat(out[k], toValue(tmp.shift()));
56
+ } else {
57
+ out[k] = toValue(tmp.shift());
58
+ }
59
+ }
60
+ return out;
61
+ }
62
+
63
+ exports.decode = decode;
64
+ exports.encode = encode;
65
+ //# sourceMappingURL=qss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qss.js","sources":["../../../src/qss.ts"],"sourcesContent":["// @ts-nocheck\n\n// qss has been slightly modified and inlined here for our use cases (and compression's sake). We've included it as a hard dependency for MIT license attribution.\n\nexport function encode(obj, pfx?: string) {\n var k,\n i,\n tmp,\n str = ''\n\n for (k in obj) {\n if ((tmp = obj[k]) !== void 0) {\n if (Array.isArray(tmp)) {\n for (i = 0; i < tmp.length; i++) {\n str && (str += '&')\n str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp[i])\n }\n } else {\n str && (str += '&')\n str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp)\n }\n }\n }\n\n return (pfx || '') + str\n}\n\nfunction toValue(mix) {\n if (!mix) return ''\n var str = decodeURIComponent(mix)\n if (str === 'false') return false\n if (str === 'true') return true\n return +str * 0 === 0 && +str + '' === str ? +str : str\n}\n\nexport function decode(str) {\n var tmp,\n k,\n out = {},\n arr = str.split('&')\n\n while ((tmp = arr.shift())) {\n tmp = tmp.split('=')\n k = tmp.shift()\n if (out[k] !== void 0) {\n out[k] = [].concat(out[k], toValue(tmp.shift()))\n } else {\n out[k] = toValue(tmp.shift())\n }\n }\n\n return out\n}\n"],"names":["encode","obj","pfx","k","i","tmp","str","Array","isArray","length","encodeURIComponent","toValue","mix","decodeURIComponent","decode","out","arr","split","shift","concat"],"mappings":";;;;;;;;;;;;;;AAAA;;AAEA;;AAEO,SAASA,MAAMA,CAACC,GAAG,EAAEC,GAAY,EAAE;AACxC,EAAA,IAAIC,CAAC;IACHC,CAAC;IACDC,GAAG;AACHC,IAAAA,GAAG,GAAG,EAAE,CAAA;EAEV,KAAKH,CAAC,IAAIF,GAAG,EAAE;IACb,IAAI,CAACI,GAAG,GAAGJ,GAAG,CAACE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,MAAA,IAAII,KAAK,CAACC,OAAO,CAACH,GAAG,CAAC,EAAE;AACtB,QAAA,KAAKD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,GAAG,CAACI,MAAM,EAAEL,CAAC,EAAE,EAAE;AAC/BE,UAAAA,GAAG,KAAKA,GAAG,IAAI,GAAG,CAAC,CAAA;AACnBA,UAAAA,GAAG,IAAII,kBAAkB,CAACP,CAAC,CAAC,GAAG,GAAG,GAAGO,kBAAkB,CAACL,GAAG,CAACD,CAAC,CAAC,CAAC,CAAA;AACjE,SAAA;AACF,OAAC,MAAM;AACLE,QAAAA,GAAG,KAAKA,GAAG,IAAI,GAAG,CAAC,CAAA;QACnBA,GAAG,IAAII,kBAAkB,CAACP,CAAC,CAAC,GAAG,GAAG,GAAGO,kBAAkB,CAACL,GAAG,CAAC,CAAA;AAC9D,OAAA;AACF,KAAA;AACF,GAAA;AAEA,EAAA,OAAO,CAACH,GAAG,IAAI,EAAE,IAAII,GAAG,CAAA;AAC1B,CAAA;AAEA,SAASK,OAAOA,CAACC,GAAG,EAAE;AACpB,EAAA,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE,CAAA;AACnB,EAAA,IAAIN,GAAG,GAAGO,kBAAkB,CAACD,GAAG,CAAC,CAAA;AACjC,EAAA,IAAIN,GAAG,KAAK,OAAO,EAAE,OAAO,KAAK,CAAA;AACjC,EAAA,IAAIA,GAAG,KAAK,MAAM,EAAE,OAAO,IAAI,CAAA;AAC/B,EAAA,OAAO,CAACA,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAACA,GAAG,GAAG,EAAE,KAAKA,GAAG,GAAG,CAACA,GAAG,GAAGA,GAAG,CAAA;AACzD,CAAA;AAEO,SAASQ,MAAMA,CAACR,GAAG,EAAE;AAC1B,EAAA,IAAID,GAAG;IACLF,CAAC;IACDY,GAAG,GAAG,EAAE;AACRC,IAAAA,GAAG,GAAGV,GAAG,CAACW,KAAK,CAAC,GAAG,CAAC,CAAA;AAEtB,EAAA,OAAQZ,GAAG,GAAGW,GAAG,CAACE,KAAK,EAAE,EAAG;AAC1Bb,IAAAA,GAAG,GAAGA,GAAG,CAACY,KAAK,CAAC,GAAG,CAAC,CAAA;AACpBd,IAAAA,CAAC,GAAGE,GAAG,CAACa,KAAK,EAAE,CAAA;AACf,IAAA,IAAIH,GAAG,CAACZ,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;MACrBY,GAAG,CAACZ,CAAC,CAAC,GAAG,EAAE,CAACgB,MAAM,CAACJ,GAAG,CAACZ,CAAC,CAAC,EAAEQ,OAAO,CAACN,GAAG,CAACa,KAAK,EAAE,CAAC,CAAC,CAAA;AAClD,KAAC,MAAM;MACLH,GAAG,CAACZ,CAAC,CAAC,GAAGQ,OAAO,CAACN,GAAG,CAACa,KAAK,EAAE,CAAC,CAAA;AAC/B,KAAA;AACF,GAAA;AAEA,EAAA,OAAOH,GAAG,CAAA;AACZ;;;;;"}
@@ -0,0 +1,27 @@
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
+ // Detect if we're in the DOM
16
+
17
+ function redirect(opts) {
18
+ opts.isRedirect = true;
19
+ return opts;
20
+ }
21
+ function isRedirect(obj) {
22
+ return !!obj?.isRedirect;
23
+ }
24
+
25
+ exports.isRedirect = isRedirect;
26
+ exports.redirect = redirect;
27
+ //# sourceMappingURL=redirects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects.js","sources":["../../../src/redirects.ts"],"sourcesContent":["import { NavigateOptions } from './link'\nimport { AnyRoute } from './route'\nimport { RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\n\n// Detect if we're in the DOM\n\nexport type AnyRedirect = Redirect<any, any, any>\n\nexport type Redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n code?: number\n}\n\nexport function redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n>(opts: Redirect<TRouteTree, TFrom, TTo>): Redirect<TRouteTree, TFrom, TTo> {\n ;(opts as any).isRedirect = true\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n"],"names":["redirect","opts","isRedirect","obj"],"mappings":";;;;;;;;;;;;;;AAKA;;AAcO,SAASA,QAAQA,CAItBC,IAAsC,EAAoC;EACxEA,IAAI,CAASC,UAAU,GAAG,IAAI,CAAA;AAChC,EAAA,OAAOD,IAAI,CAAA;AACb,CAAA;AAEO,SAASC,UAAUA,CAACC,GAAQ,EAAsB;AACvD,EAAA,OAAO,CAAC,CAACA,GAAG,EAAED,UAAU,CAAA;AAC1B;;;;;"}