@tanstack/react-router 1.20.1 → 1.20.3-alpha.1

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 (320) hide show
  1. package/README.md +31 -0
  2. package/dist/cjs/Asset.cjs +41 -0
  3. package/dist/cjs/Asset.cjs.map +1 -0
  4. package/dist/cjs/Asset.d.cts +2 -0
  5. package/dist/cjs/CatchBoundary.cjs +16 -12
  6. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  7. package/dist/cjs/CatchBoundary.d.cts +8 -32
  8. package/dist/cjs/ClientOnly.cjs +20 -0
  9. package/dist/cjs/ClientOnly.cjs.map +1 -0
  10. package/dist/cjs/ClientOnly.d.cts +29 -0
  11. package/dist/cjs/HeadContent.cjs +155 -0
  12. package/dist/cjs/HeadContent.cjs.map +1 -0
  13. package/dist/cjs/HeadContent.d.cts +7 -0
  14. package/dist/cjs/Match.cjs +252 -0
  15. package/dist/cjs/Match.cjs.map +1 -0
  16. package/dist/cjs/Match.d.cts +8 -0
  17. package/dist/cjs/Matches.cjs +39 -287
  18. package/dist/cjs/Matches.cjs.map +1 -1
  19. package/dist/cjs/Matches.d.cts +23 -83
  20. package/dist/cjs/RouterProvider.cjs +17 -140
  21. package/dist/cjs/RouterProvider.cjs.map +1 -1
  22. package/dist/cjs/RouterProvider.d.cts +8 -27
  23. package/dist/cjs/SafeFragment.cjs +8 -0
  24. package/dist/cjs/SafeFragment.cjs.map +1 -0
  25. package/dist/cjs/SafeFragment.d.cts +1 -0
  26. package/dist/cjs/ScriptOnce.cjs +28 -0
  27. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  28. package/dist/cjs/ScriptOnce.d.cts +5 -0
  29. package/dist/cjs/Scripts.cjs +51 -0
  30. package/dist/cjs/Scripts.cjs.map +1 -0
  31. package/dist/cjs/Scripts.d.cts +1 -0
  32. package/dist/cjs/ScrollRestoration.cjs +39 -0
  33. package/dist/cjs/ScrollRestoration.cjs.map +1 -0
  34. package/dist/cjs/ScrollRestoration.d.cts +14 -0
  35. package/dist/cjs/Transitioner.cjs +115 -0
  36. package/dist/cjs/Transitioner.cjs.map +1 -0
  37. package/dist/cjs/Transitioner.d.cts +1 -0
  38. package/dist/cjs/awaited.cjs +12 -65
  39. package/dist/cjs/awaited.cjs.map +1 -1
  40. package/dist/cjs/awaited.d.cts +4 -4
  41. package/dist/cjs/fileRoute.cjs +41 -15
  42. package/dist/cjs/fileRoute.cjs.map +1 -1
  43. package/dist/cjs/fileRoute.d.cts +33 -108
  44. package/dist/cjs/history.d.cts +1 -0
  45. package/dist/cjs/index.cjs +216 -73
  46. package/dist/cjs/index.cjs.map +1 -1
  47. package/dist/cjs/index.d.cts +52 -29
  48. package/dist/cjs/lazyRouteComponent.cjs +40 -29
  49. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  50. package/dist/cjs/lazyRouteComponent.d.cts +1 -1
  51. package/dist/cjs/link.cjs +212 -106
  52. package/dist/cjs/link.cjs.map +1 -1
  53. package/dist/cjs/link.d.cts +41 -86
  54. package/dist/cjs/matchContext.cjs +27 -0
  55. package/dist/cjs/matchContext.cjs.map +1 -0
  56. package/dist/cjs/matchContext.d.cts +3 -0
  57. package/dist/cjs/not-found.cjs +9 -15
  58. package/dist/cjs/not-found.cjs.map +1 -1
  59. package/dist/cjs/not-found.d.cts +5 -22
  60. package/dist/cjs/renderRouteNotFound.cjs +22 -0
  61. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  62. package/dist/cjs/renderRouteNotFound.d.cts +2 -0
  63. package/dist/cjs/route.cjs +110 -79
  64. package/dist/cjs/route.cjs.map +1 -1
  65. package/dist/cjs/route.d.cts +64 -361
  66. package/dist/cjs/router.cjs +12 -1237
  67. package/dist/cjs/router.cjs.map +1 -1
  68. package/dist/cjs/router.d.cts +69 -237
  69. package/dist/cjs/routerContext.cjs +1 -1
  70. package/dist/cjs/routerContext.cjs.map +1 -1
  71. package/dist/cjs/routerContext.d.cts +7 -2
  72. package/dist/cjs/scroll-restoration.cjs +16 -177
  73. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  74. package/dist/cjs/scroll-restoration.d.cts +1 -18
  75. package/dist/cjs/serializer.d.cts +6 -0
  76. package/dist/cjs/structuralSharing.d.cts +8 -0
  77. package/dist/cjs/typePrimitives.d.cts +16 -0
  78. package/dist/cjs/useBlocker.cjs +138 -9
  79. package/dist/cjs/useBlocker.cjs.map +1 -1
  80. package/dist/cjs/useBlocker.d.cts +64 -7
  81. package/dist/cjs/useCanGoBack.cjs +8 -0
  82. package/dist/cjs/useCanGoBack.cjs.map +1 -0
  83. package/dist/cjs/useCanGoBack.d.cts +1 -0
  84. package/dist/cjs/useLoaderData.cjs +15 -0
  85. package/dist/cjs/useLoaderData.cjs.map +1 -0
  86. package/dist/cjs/useLoaderData.d.cts +8 -0
  87. package/dist/cjs/useLoaderDeps.cjs +14 -0
  88. package/dist/cjs/useLoaderDeps.cjs.map +1 -0
  89. package/dist/cjs/useLoaderDeps.d.cts +8 -0
  90. package/dist/cjs/useLocation.cjs +10 -0
  91. package/dist/cjs/useLocation.cjs.map +1 -0
  92. package/dist/cjs/useLocation.d.cts +7 -0
  93. package/dist/cjs/useMatch.cjs +47 -0
  94. package/dist/cjs/useMatch.cjs.map +1 -0
  95. package/dist/cjs/useMatch.d.cts +10 -0
  96. package/dist/cjs/useNavigate.cjs +18 -19
  97. package/dist/cjs/useNavigate.cjs.map +1 -1
  98. package/dist/cjs/useNavigate.d.cts +4 -8
  99. package/dist/cjs/useParams.cjs +8 -8
  100. package/dist/cjs/useParams.cjs.map +1 -1
  101. package/dist/cjs/useParams.d.cts +9 -8
  102. package/dist/cjs/useRouteContext.cjs +3 -3
  103. package/dist/cjs/useRouteContext.cjs.map +1 -1
  104. package/dist/cjs/useRouteContext.d.cts +3 -7
  105. package/dist/cjs/useRouter.cjs.map +1 -1
  106. package/dist/cjs/useRouter.d.cts +3 -4
  107. package/dist/cjs/useRouterState.cjs +18 -1
  108. package/dist/cjs/useRouterState.cjs.map +1 -1
  109. package/dist/cjs/useRouterState.d.cts +8 -6
  110. package/dist/cjs/useSearch.cjs +7 -4
  111. package/dist/cjs/useSearch.cjs.map +1 -1
  112. package/dist/cjs/useSearch.d.cts +9 -7
  113. package/dist/cjs/utils.cjs +40 -122
  114. package/dist/cjs/utils.cjs.map +1 -1
  115. package/dist/cjs/utils.d.cts +46 -50
  116. package/dist/esm/Asset.d.ts +2 -0
  117. package/dist/esm/Asset.js +41 -0
  118. package/dist/esm/Asset.js.map +1 -0
  119. package/dist/esm/CatchBoundary.d.ts +8 -32
  120. package/dist/esm/CatchBoundary.js +16 -12
  121. package/dist/esm/CatchBoundary.js.map +1 -1
  122. package/dist/esm/ClientOnly.d.ts +29 -0
  123. package/dist/esm/ClientOnly.js +20 -0
  124. package/dist/esm/ClientOnly.js.map +1 -0
  125. package/dist/esm/HeadContent.d.ts +7 -0
  126. package/dist/esm/HeadContent.js +139 -0
  127. package/dist/esm/HeadContent.js.map +1 -0
  128. package/dist/esm/Match.d.ts +8 -0
  129. package/dist/esm/Match.js +235 -0
  130. package/dist/esm/Match.js.map +1 -0
  131. package/dist/esm/Matches.d.ts +23 -83
  132. package/dist/esm/Matches.js +36 -284
  133. package/dist/esm/Matches.js.map +1 -1
  134. package/dist/esm/RouterProvider.d.ts +8 -27
  135. package/dist/esm/RouterProvider.js +20 -126
  136. package/dist/esm/RouterProvider.js.map +1 -1
  137. package/dist/esm/SafeFragment.d.ts +1 -0
  138. package/dist/esm/SafeFragment.js +8 -0
  139. package/dist/esm/SafeFragment.js.map +1 -0
  140. package/dist/esm/ScriptOnce.d.ts +5 -0
  141. package/dist/esm/ScriptOnce.js +28 -0
  142. package/dist/esm/ScriptOnce.js.map +1 -0
  143. package/dist/esm/Scripts.d.ts +1 -0
  144. package/dist/esm/Scripts.js +51 -0
  145. package/dist/esm/Scripts.js.map +1 -0
  146. package/dist/esm/ScrollRestoration.d.ts +14 -0
  147. package/dist/esm/ScrollRestoration.js +39 -0
  148. package/dist/esm/ScrollRestoration.js.map +1 -0
  149. package/dist/esm/Transitioner.d.ts +1 -0
  150. package/dist/esm/Transitioner.js +98 -0
  151. package/dist/esm/Transitioner.js.map +1 -0
  152. package/dist/esm/awaited.d.ts +4 -4
  153. package/dist/esm/awaited.js +12 -65
  154. package/dist/esm/awaited.js.map +1 -1
  155. package/dist/esm/fileRoute.d.ts +33 -108
  156. package/dist/esm/fileRoute.js +38 -12
  157. package/dist/esm/fileRoute.js.map +1 -1
  158. package/dist/esm/history.d.ts +1 -0
  159. package/dist/esm/index.d.ts +52 -29
  160. package/dist/esm/index.js +41 -29
  161. package/dist/esm/index.js.map +1 -1
  162. package/dist/esm/lazyRouteComponent.d.ts +1 -1
  163. package/dist/esm/lazyRouteComponent.js +40 -29
  164. package/dist/esm/lazyRouteComponent.js.map +1 -1
  165. package/dist/esm/link.d.ts +41 -86
  166. package/dist/esm/link.js +212 -106
  167. package/dist/esm/link.js.map +1 -1
  168. package/dist/esm/matchContext.d.ts +3 -0
  169. package/dist/esm/matchContext.js +10 -0
  170. package/dist/esm/matchContext.js.map +1 -0
  171. package/dist/esm/not-found.d.ts +5 -22
  172. package/dist/esm/not-found.js +9 -15
  173. package/dist/esm/not-found.js.map +1 -1
  174. package/dist/esm/renderRouteNotFound.d.ts +2 -0
  175. package/dist/esm/renderRouteNotFound.js +22 -0
  176. package/dist/esm/renderRouteNotFound.js.map +1 -0
  177. package/dist/esm/route.d.ts +64 -361
  178. package/dist/esm/route.js +103 -72
  179. package/dist/esm/route.js.map +1 -1
  180. package/dist/esm/router.d.ts +69 -237
  181. package/dist/esm/router.js +13 -1238
  182. package/dist/esm/router.js.map +1 -1
  183. package/dist/esm/routerContext.d.ts +7 -2
  184. package/dist/esm/routerContext.js +1 -1
  185. package/dist/esm/routerContext.js.map +1 -1
  186. package/dist/esm/scroll-restoration.d.ts +1 -18
  187. package/dist/esm/scroll-restoration.js +17 -161
  188. package/dist/esm/scroll-restoration.js.map +1 -1
  189. package/dist/esm/serializer.d.ts +6 -0
  190. package/dist/esm/structuralSharing.d.ts +8 -0
  191. package/dist/esm/typePrimitives.d.ts +16 -0
  192. package/dist/esm/useBlocker.d.ts +64 -7
  193. package/dist/esm/useBlocker.js +138 -9
  194. package/dist/esm/useBlocker.js.map +1 -1
  195. package/dist/esm/useCanGoBack.d.ts +1 -0
  196. package/dist/esm/useCanGoBack.js +8 -0
  197. package/dist/esm/useCanGoBack.js.map +1 -0
  198. package/dist/esm/useLoaderData.d.ts +8 -0
  199. package/dist/esm/useLoaderData.js +15 -0
  200. package/dist/esm/useLoaderData.js.map +1 -0
  201. package/dist/esm/useLoaderDeps.d.ts +8 -0
  202. package/dist/esm/useLoaderDeps.js +14 -0
  203. package/dist/esm/useLoaderDeps.js.map +1 -0
  204. package/dist/esm/useLocation.d.ts +7 -0
  205. package/dist/esm/useLocation.js +10 -0
  206. package/dist/esm/useLocation.js.map +1 -0
  207. package/dist/esm/useMatch.d.ts +10 -0
  208. package/dist/esm/useMatch.js +30 -0
  209. package/dist/esm/useMatch.js.map +1 -0
  210. package/dist/esm/useNavigate.d.ts +4 -8
  211. package/dist/esm/useNavigate.js +18 -19
  212. package/dist/esm/useNavigate.js.map +1 -1
  213. package/dist/esm/useParams.d.ts +9 -8
  214. package/dist/esm/useParams.js +8 -8
  215. package/dist/esm/useParams.js.map +1 -1
  216. package/dist/esm/useRouteContext.d.ts +3 -7
  217. package/dist/esm/useRouteContext.js +2 -2
  218. package/dist/esm/useRouteContext.js.map +1 -1
  219. package/dist/esm/useRouter.d.ts +3 -4
  220. package/dist/esm/useRouter.js.map +1 -1
  221. package/dist/esm/useRouterState.d.ts +8 -6
  222. package/dist/esm/useRouterState.js +18 -1
  223. package/dist/esm/useRouterState.js.map +1 -1
  224. package/dist/esm/useSearch.d.ts +9 -7
  225. package/dist/esm/useSearch.js +6 -3
  226. package/dist/esm/useSearch.js.map +1 -1
  227. package/dist/esm/utils.d.ts +46 -50
  228. package/dist/esm/utils.js +41 -123
  229. package/dist/esm/utils.js.map +1 -1
  230. package/package.json +30 -31
  231. package/src/Asset.tsx +40 -0
  232. package/src/CatchBoundary.tsx +35 -19
  233. package/src/ClientOnly.tsx +68 -0
  234. package/src/HeadContent.tsx +174 -0
  235. package/src/Match.tsx +330 -0
  236. package/src/Matches.tsx +149 -558
  237. package/src/RouterProvider.tsx +58 -212
  238. package/src/SafeFragment.tsx +5 -0
  239. package/src/ScriptOnce.tsx +32 -0
  240. package/src/Scripts.tsx +65 -0
  241. package/src/ScrollRestoration.tsx +69 -0
  242. package/src/Transitioner.tsx +130 -0
  243. package/src/awaited.tsx +16 -87
  244. package/src/fileRoute.ts +145 -248
  245. package/src/history.ts +2 -1
  246. package/src/index.tsx +368 -30
  247. package/src/lazyRouteComponent.tsx +68 -54
  248. package/src/link.tsx +397 -522
  249. package/src/matchContext.tsx +8 -0
  250. package/src/not-found.tsx +13 -34
  251. package/src/renderRouteNotFound.tsx +27 -0
  252. package/src/route.tsx +572 -0
  253. package/src/router.ts +99 -2067
  254. package/src/routerContext.tsx +8 -2
  255. package/src/scroll-restoration.tsx +23 -224
  256. package/src/serializer.ts +7 -0
  257. package/src/structuralSharing.ts +47 -0
  258. package/src/typePrimitives.ts +84 -0
  259. package/src/useBlocker.tsx +297 -15
  260. package/src/useCanGoBack.ts +5 -0
  261. package/src/useLoaderData.tsx +80 -0
  262. package/src/useLoaderDeps.tsx +58 -0
  263. package/src/useLocation.tsx +41 -0
  264. package/src/useMatch.tsx +119 -0
  265. package/src/useNavigate.tsx +41 -61
  266. package/src/useParams.tsx +88 -23
  267. package/src/useRouteContext.ts +24 -18
  268. package/src/useRouter.tsx +4 -5
  269. package/src/useRouterState.tsx +52 -10
  270. package/src/useSearch.tsx +87 -24
  271. package/src/utils.ts +97 -312
  272. package/dist/cjs/createServerFn.cjs +0 -40
  273. package/dist/cjs/createServerFn.cjs.map +0 -1
  274. package/dist/cjs/createServerFn.d.cts +0 -44
  275. package/dist/cjs/defer.cjs +0 -30
  276. package/dist/cjs/defer.cjs.map +0 -1
  277. package/dist/cjs/defer.d.cts +0 -25
  278. package/dist/cjs/location.d.cts +0 -12
  279. package/dist/cjs/path.cjs +0 -213
  280. package/dist/cjs/path.cjs.map +0 -1
  281. package/dist/cjs/path.d.cts +0 -24
  282. package/dist/cjs/qss.cjs +0 -45
  283. package/dist/cjs/qss.cjs.map +0 -1
  284. package/dist/cjs/qss.d.cts +0 -2
  285. package/dist/cjs/redirects.cjs +0 -16
  286. package/dist/cjs/redirects.cjs.map +0 -1
  287. package/dist/cjs/redirects.d.cts +0 -18
  288. package/dist/cjs/routeInfo.d.cts +0 -31
  289. package/dist/cjs/searchParams.cjs +0 -63
  290. package/dist/cjs/searchParams.cjs.map +0 -1
  291. package/dist/cjs/searchParams.d.cts +0 -7
  292. package/dist/esm/createServerFn.d.ts +0 -44
  293. package/dist/esm/createServerFn.js +0 -40
  294. package/dist/esm/createServerFn.js.map +0 -1
  295. package/dist/esm/defer.d.ts +0 -25
  296. package/dist/esm/defer.js +0 -30
  297. package/dist/esm/defer.js.map +0 -1
  298. package/dist/esm/location.d.ts +0 -12
  299. package/dist/esm/path.d.ts +0 -24
  300. package/dist/esm/path.js +0 -213
  301. package/dist/esm/path.js.map +0 -1
  302. package/dist/esm/qss.d.ts +0 -2
  303. package/dist/esm/qss.js +0 -45
  304. package/dist/esm/qss.js.map +0 -1
  305. package/dist/esm/redirects.d.ts +0 -18
  306. package/dist/esm/redirects.js +0 -16
  307. package/dist/esm/redirects.js.map +0 -1
  308. package/dist/esm/routeInfo.d.ts +0 -31
  309. package/dist/esm/searchParams.d.ts +0 -7
  310. package/dist/esm/searchParams.js +0 -63
  311. package/dist/esm/searchParams.js.map +0 -1
  312. package/src/createServerFn.ts +0 -107
  313. package/src/defer.ts +0 -70
  314. package/src/location.ts +0 -13
  315. package/src/path.ts +0 -280
  316. package/src/qss.ts +0 -53
  317. package/src/redirects.ts +0 -56
  318. package/src/route.ts +0 -1356
  319. package/src/routeInfo.ts +0 -63
  320. package/src/searchParams.ts +0 -79
package/src/path.ts DELETED
@@ -1,280 +0,0 @@
1
- import { MatchLocation } from './RouterProvider'
2
- import { AnyPathParams } from './route'
3
- import { last } from './utils'
4
-
5
- export interface Segment {
6
- type: 'pathname' | 'param' | 'wildcard'
7
- value: string
8
- }
9
-
10
- export function joinPaths(paths: (string | undefined)[]) {
11
- return cleanPath(paths.filter(Boolean).join('/'))
12
- }
13
-
14
- export function cleanPath(path: string) {
15
- // remove double slashes
16
- return path.replace(/\/{2,}/g, '/')
17
- }
18
-
19
- export function trimPathLeft(path: string) {
20
- return path === '/' ? path : path.replace(/^\/{1,}/, '')
21
- }
22
-
23
- export function trimPathRight(path: string) {
24
- return path === '/' ? path : path.replace(/\/{1,}$/, '')
25
- }
26
-
27
- export function trimPath(path: string) {
28
- return trimPathRight(trimPathLeft(path))
29
- }
30
-
31
- export function resolvePath(basepath: string, base: string, to: string) {
32
- base = base.replace(new RegExp(`^${basepath}`), '/')
33
- to = to.replace(new RegExp(`^${basepath}`), '/')
34
-
35
- let baseSegments = parsePathname(base)
36
- const toSegments = parsePathname(to)
37
-
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
- // ignore inter-slashes
48
- }
49
- } else if (toSegment.value === '..') {
50
- // Extra trailing slash? pop it off
51
- if (baseSegments.length > 1 && last(baseSegments)?.value === '/') {
52
- baseSegments.pop()
53
- }
54
- baseSegments.pop()
55
- } else if (toSegment.value === '.') {
56
- return
57
- } else {
58
- baseSegments.push(toSegment)
59
- }
60
- })
61
-
62
- const joined = joinPaths([basepath, ...baseSegments.map((d) => d.value)])
63
-
64
- return cleanPath(joined)
65
- }
66
-
67
- export function parsePathname(pathname?: string): Segment[] {
68
- if (!pathname) {
69
- return []
70
- }
71
-
72
- pathname = cleanPath(pathname)
73
-
74
- const segments: Segment[] = []
75
-
76
- if (pathname.slice(0, 1) === '/') {
77
- pathname = pathname.substring(1)
78
- segments.push({
79
- type: 'pathname',
80
- value: '/',
81
- })
82
- }
83
-
84
- if (!pathname) {
85
- return segments
86
- }
87
-
88
- // Remove empty segments and '.' segments
89
- const split = pathname.split('/').filter(Boolean)
90
-
91
- segments.push(
92
- ...split.map((part): Segment => {
93
- if (part === '$' || part === '*') {
94
- return {
95
- type: 'wildcard',
96
- value: part,
97
- }
98
- }
99
-
100
- if (part.charAt(0) === '$') {
101
- return {
102
- type: 'param',
103
- value: part,
104
- }
105
- }
106
-
107
- return {
108
- type: 'pathname',
109
- value: part,
110
- }
111
- }),
112
- )
113
-
114
- if (pathname.slice(-1) === '/') {
115
- pathname = pathname.substring(1)
116
- segments.push({
117
- type: 'pathname',
118
- value: '/',
119
- })
120
- }
121
-
122
- return segments
123
- }
124
-
125
- interface InterpolatePathOptions {
126
- path?: string
127
- params: any
128
- leaveWildcards?: boolean
129
- leaveParams?: boolean
130
- }
131
- export function interpolatePath({
132
- path,
133
- params,
134
- leaveWildcards,
135
- leaveParams,
136
- }: InterpolatePathOptions) {
137
- const interpolatedPathSegments = parsePathname(path)
138
-
139
- return joinPaths(
140
- interpolatedPathSegments.map((segment) => {
141
- if (segment.type === 'wildcard') {
142
- const value = params._splat
143
- if (leaveWildcards) return `${segment.value}${value ?? ''}`
144
- return value
145
- }
146
-
147
- if (segment.type === 'param') {
148
- if (leaveParams) {
149
- const value = params[segment.value]
150
- return `${segment.value}${value ?? ''}`
151
- }
152
- return params![segment.value.substring(1)] ?? 'undefined'
153
- }
154
-
155
- return segment.value
156
- }),
157
- )
158
- }
159
-
160
- export function matchPathname(
161
- basepath: string,
162
- currentPathname: string,
163
- matchLocation: Pick<MatchLocation, 'to' | 'fuzzy' | 'caseSensitive'>,
164
- ): AnyPathParams | undefined {
165
- const pathParams = matchByPath(basepath, currentPathname, matchLocation)
166
- // const searchMatched = matchBySearch(location.search, matchLocation)
167
-
168
- if (matchLocation.to && !pathParams) {
169
- return
170
- }
171
-
172
- return pathParams ?? {}
173
- }
174
-
175
- export function removeBasepath(basepath: string, pathname: string) {
176
- return basepath != '/' ? pathname.replace(basepath, '') : pathname
177
- }
178
-
179
- export function matchByPath(
180
- basepath: string,
181
- from: string,
182
- matchLocation: Pick<MatchLocation, 'to' | 'caseSensitive' | 'fuzzy'>,
183
- ): Record<string, string> | undefined {
184
- // Remove the base path from the pathname
185
- from = removeBasepath(basepath, from)
186
- // Default to to $ (wildcard)
187
- const to = removeBasepath(basepath, `${matchLocation.to ?? '$'}`)
188
-
189
- // Parse the from and to
190
- const baseSegments = parsePathname(from)
191
- const routeSegments = parsePathname(to)
192
-
193
- if (!from.startsWith('/')) {
194
- baseSegments.unshift({
195
- type: 'pathname',
196
- value: '/',
197
- })
198
- }
199
-
200
- if (!to.startsWith('/')) {
201
- routeSegments.unshift({
202
- type: 'pathname',
203
- value: '/',
204
- })
205
- }
206
-
207
- const params: Record<string, string> = {}
208
-
209
- let isMatch = (() => {
210
- for (
211
- let i = 0;
212
- i < Math.max(baseSegments.length, routeSegments.length);
213
- i++
214
- ) {
215
- const baseSegment = baseSegments[i]
216
- const routeSegment = routeSegments[i]
217
-
218
- const isLastBaseSegment = i >= baseSegments.length - 1
219
- const isLastRouteSegment = i >= routeSegments.length - 1
220
-
221
- if (routeSegment) {
222
- if (routeSegment.type === 'wildcard') {
223
- if (baseSegment?.value) {
224
- const _splat = decodeURI(
225
- joinPaths(baseSegments.slice(i).map((d) => d.value)),
226
- )
227
- // TODO: Deprecate *
228
- params['*'] = _splat
229
- params['_splat'] = _splat
230
- return true
231
- }
232
- return false
233
- }
234
-
235
- if (routeSegment.type === 'pathname') {
236
- if (routeSegment.value === '/' && !baseSegment?.value) {
237
- return true
238
- }
239
-
240
- if (baseSegment) {
241
- if (matchLocation.caseSensitive) {
242
- if (routeSegment.value !== baseSegment.value) {
243
- return false
244
- }
245
- } else if (
246
- routeSegment.value.toLowerCase() !==
247
- baseSegment.value.toLowerCase()
248
- ) {
249
- return false
250
- }
251
- }
252
- }
253
-
254
- if (!baseSegment) {
255
- return false
256
- }
257
-
258
- if (routeSegment.type === 'param') {
259
- if (baseSegment?.value === '/') {
260
- return false
261
- }
262
- if (baseSegment.value.charAt(0) !== '$') {
263
- params[routeSegment.value.substring(1)] = decodeURI(
264
- baseSegment.value,
265
- )
266
- }
267
- }
268
- }
269
-
270
- if (!isLastBaseSegment && isLastRouteSegment) {
271
- params['**'] = joinPaths(baseSegments.slice(i + 1).map((d) => d.value))
272
- return !!matchLocation.fuzzy && routeSegment?.value !== '/'
273
- }
274
- }
275
-
276
- return true
277
- })()
278
-
279
- return isMatch ? (params as Record<string, string>) : undefined
280
- }
package/src/qss.ts DELETED
@@ -1,53 +0,0 @@
1
- // @ts-nocheck
2
-
3
- // 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.
4
-
5
- export function encode(obj, pfx?: string) {
6
- var k,
7
- i,
8
- tmp,
9
- str = ''
10
-
11
- for (k in obj) {
12
- if ((tmp = obj[k]) !== void 0) {
13
- if (Array.isArray(tmp)) {
14
- for (i = 0; i < tmp.length; i++) {
15
- str && (str += '&')
16
- str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp[i])
17
- }
18
- } else {
19
- str && (str += '&')
20
- str += encodeURIComponent(k) + '=' + encodeURIComponent(tmp)
21
- }
22
- }
23
- }
24
-
25
- return (pfx || '') + str
26
- }
27
-
28
- function toValue(mix) {
29
- if (!mix) return ''
30
- var str = decodeURIComponent(mix)
31
- if (str === 'false') return false
32
- if (str === 'true') return true
33
- return +str * 0 === 0 && +str + '' === str ? +str : str
34
- }
35
-
36
- export function decode(str, pfx?: string) {
37
- var tmp,
38
- k,
39
- out = {},
40
- arr = (pfx ? str.substr(pfx.length) : str).split('&')
41
-
42
- while ((tmp = arr.shift())) {
43
- tmp = tmp.split('=')
44
- k = tmp.shift()
45
- if (out[k] !== void 0) {
46
- out[k] = [].concat(out[k], toValue(tmp.shift()))
47
- } else {
48
- out[k] = toValue(tmp.shift())
49
- }
50
- }
51
-
52
- return out
53
- }
package/src/redirects.ts DELETED
@@ -1,56 +0,0 @@
1
- import { PickAsRequired } from '.'
2
- import { NavigateOptions } from './link'
3
- import { AnyRoute } from './route'
4
- import { RoutePaths } from './routeInfo'
5
- import { RegisteredRouter } from './router'
6
-
7
- export type AnyRedirect = Redirect<any, any, any, any, any>
8
-
9
- export type Redirect<
10
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
11
- TFrom extends RoutePaths<TRouteTree> = '/',
12
- TTo extends string = '',
13
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
14
- TMaskTo extends string = '',
15
- > = {
16
- /**
17
- * @deprecated Use `statusCode` instead
18
- **/
19
- href?: string
20
- code?: number
21
- statusCode?: number
22
- throw?: any
23
- } & NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>
24
-
25
- export type ResolvedRedirect<
26
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
27
- TFrom extends RoutePaths<TRouteTree> = '/',
28
- TTo extends string = '',
29
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
30
- TMaskTo extends string = '',
31
- > = PickAsRequired<
32
- Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
33
- 'code' | 'statusCode' | 'href'
34
- >
35
-
36
- export function redirect<
37
- TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
38
- TFrom extends RoutePaths<TRouteTree> = '/',
39
- TTo extends string = '',
40
- TMaskFrom extends RoutePaths<TRouteTree> = TFrom,
41
- TMaskTo extends string = '',
42
- >(
43
- opts: Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
44
- ): Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> {
45
- ;(opts as any).isRedirect = true
46
- opts.statusCode = opts.statusCode || opts.code || 301
47
- if (opts.throw ?? true) {
48
- throw opts
49
- }
50
-
51
- return opts
52
- }
53
-
54
- export function isRedirect(obj: any): obj is AnyRedirect {
55
- return !!obj?.isRedirect
56
- }