@tanstack/react-router 1.20.0 → 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 -33
  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 -33
  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 -62
  320. package/src/searchParams.ts +0 -79
@@ -1,24 +0,0 @@
1
- import { MatchLocation } from './RouterProvider.js';
2
- import { AnyPathParams } from './route.js';
3
- export interface Segment {
4
- type: 'pathname' | 'param' | 'wildcard';
5
- value: string;
6
- }
7
- export declare function joinPaths(paths: (string | undefined)[]): string;
8
- export declare function cleanPath(path: string): string;
9
- export declare function trimPathLeft(path: string): string;
10
- export declare function trimPathRight(path: string): string;
11
- export declare function trimPath(path: string): string;
12
- export declare function resolvePath(basepath: string, base: string, to: string): string;
13
- export declare function parsePathname(pathname?: string): Segment[];
14
- interface InterpolatePathOptions {
15
- path?: string;
16
- params: any;
17
- leaveWildcards?: boolean;
18
- leaveParams?: boolean;
19
- }
20
- export declare function interpolatePath({ path, params, leaveWildcards, leaveParams, }: InterpolatePathOptions): string;
21
- export declare function matchPathname(basepath: string, currentPathname: string, matchLocation: Pick<MatchLocation, 'to' | 'fuzzy' | 'caseSensitive'>): AnyPathParams | undefined;
22
- export declare function removeBasepath(basepath: string, pathname: string): string;
23
- export declare function matchByPath(basepath: string, from: string, matchLocation: Pick<MatchLocation, 'to' | 'caseSensitive' | 'fuzzy'>): Record<string, string> | undefined;
24
- export {};
package/dist/esm/path.js DELETED
@@ -1,213 +0,0 @@
1
- import { last } from "./utils.js";
2
- function joinPaths(paths) {
3
- return cleanPath(paths.filter(Boolean).join("/"));
4
- }
5
- function cleanPath(path) {
6
- return path.replace(/\/{2,}/g, "/");
7
- }
8
- function trimPathLeft(path) {
9
- return path === "/" ? path : path.replace(/^\/{1,}/, "");
10
- }
11
- function trimPathRight(path) {
12
- return path === "/" ? path : path.replace(/\/{1,}$/, "");
13
- }
14
- function trimPath(path) {
15
- return trimPathRight(trimPathLeft(path));
16
- }
17
- function resolvePath(basepath, base, to) {
18
- base = base.replace(new RegExp(`^${basepath}`), "/");
19
- to = to.replace(new RegExp(`^${basepath}`), "/");
20
- let baseSegments = parsePathname(base);
21
- const toSegments = parsePathname(to);
22
- toSegments.forEach((toSegment, index) => {
23
- var _a;
24
- if (toSegment.value === "/") {
25
- if (!index) {
26
- baseSegments = [toSegment];
27
- } else if (index === toSegments.length - 1) {
28
- baseSegments.push(toSegment);
29
- } else
30
- ;
31
- } else if (toSegment.value === "..") {
32
- if (baseSegments.length > 1 && ((_a = last(baseSegments)) == null ? void 0 : _a.value) === "/") {
33
- baseSegments.pop();
34
- }
35
- baseSegments.pop();
36
- } else if (toSegment.value === ".") {
37
- return;
38
- } else {
39
- baseSegments.push(toSegment);
40
- }
41
- });
42
- const joined = joinPaths([basepath, ...baseSegments.map((d) => d.value)]);
43
- return cleanPath(joined);
44
- }
45
- function parsePathname(pathname) {
46
- if (!pathname) {
47
- return [];
48
- }
49
- pathname = cleanPath(pathname);
50
- const segments = [];
51
- if (pathname.slice(0, 1) === "/") {
52
- pathname = pathname.substring(1);
53
- segments.push({
54
- type: "pathname",
55
- value: "/"
56
- });
57
- }
58
- if (!pathname) {
59
- return segments;
60
- }
61
- const split = pathname.split("/").filter(Boolean);
62
- segments.push(
63
- ...split.map((part) => {
64
- if (part === "$" || part === "*") {
65
- return {
66
- type: "wildcard",
67
- value: part
68
- };
69
- }
70
- if (part.charAt(0) === "$") {
71
- return {
72
- type: "param",
73
- value: part
74
- };
75
- }
76
- return {
77
- type: "pathname",
78
- value: part
79
- };
80
- })
81
- );
82
- if (pathname.slice(-1) === "/") {
83
- pathname = pathname.substring(1);
84
- segments.push({
85
- type: "pathname",
86
- value: "/"
87
- });
88
- }
89
- return segments;
90
- }
91
- function interpolatePath({
92
- path,
93
- params,
94
- leaveWildcards,
95
- leaveParams
96
- }) {
97
- const interpolatedPathSegments = parsePathname(path);
98
- return joinPaths(
99
- interpolatedPathSegments.map((segment) => {
100
- if (segment.type === "wildcard") {
101
- const value = params._splat;
102
- if (leaveWildcards)
103
- return `${segment.value}${value ?? ""}`;
104
- return value;
105
- }
106
- if (segment.type === "param") {
107
- if (leaveParams) {
108
- const value = params[segment.value];
109
- return `${segment.value}${value ?? ""}`;
110
- }
111
- return params[segment.value.substring(1)] ?? "undefined";
112
- }
113
- return segment.value;
114
- })
115
- );
116
- }
117
- function matchPathname(basepath, currentPathname, matchLocation) {
118
- const pathParams = matchByPath(basepath, currentPathname, matchLocation);
119
- if (matchLocation.to && !pathParams) {
120
- return;
121
- }
122
- return pathParams ?? {};
123
- }
124
- function removeBasepath(basepath, pathname) {
125
- return basepath != "/" ? pathname.replace(basepath, "") : pathname;
126
- }
127
- function matchByPath(basepath, from, matchLocation) {
128
- from = removeBasepath(basepath, from);
129
- const to = removeBasepath(basepath, `${matchLocation.to ?? "$"}`);
130
- const baseSegments = parsePathname(from);
131
- const routeSegments = parsePathname(to);
132
- if (!from.startsWith("/")) {
133
- baseSegments.unshift({
134
- type: "pathname",
135
- value: "/"
136
- });
137
- }
138
- if (!to.startsWith("/")) {
139
- routeSegments.unshift({
140
- type: "pathname",
141
- value: "/"
142
- });
143
- }
144
- const params = {};
145
- let isMatch = (() => {
146
- for (let i = 0; i < Math.max(baseSegments.length, routeSegments.length); i++) {
147
- const baseSegment = baseSegments[i];
148
- const routeSegment = routeSegments[i];
149
- const isLastBaseSegment = i >= baseSegments.length - 1;
150
- const isLastRouteSegment = i >= routeSegments.length - 1;
151
- if (routeSegment) {
152
- if (routeSegment.type === "wildcard") {
153
- if (baseSegment == null ? void 0 : baseSegment.value) {
154
- const _splat = decodeURI(
155
- joinPaths(baseSegments.slice(i).map((d) => d.value))
156
- );
157
- params["*"] = _splat;
158
- params["_splat"] = _splat;
159
- return true;
160
- }
161
- return false;
162
- }
163
- if (routeSegment.type === "pathname") {
164
- if (routeSegment.value === "/" && !(baseSegment == null ? void 0 : baseSegment.value)) {
165
- return true;
166
- }
167
- if (baseSegment) {
168
- if (matchLocation.caseSensitive) {
169
- if (routeSegment.value !== baseSegment.value) {
170
- return false;
171
- }
172
- } else if (routeSegment.value.toLowerCase() !== baseSegment.value.toLowerCase()) {
173
- return false;
174
- }
175
- }
176
- }
177
- if (!baseSegment) {
178
- return false;
179
- }
180
- if (routeSegment.type === "param") {
181
- if ((baseSegment == null ? void 0 : baseSegment.value) === "/") {
182
- return false;
183
- }
184
- if (baseSegment.value.charAt(0) !== "$") {
185
- params[routeSegment.value.substring(1)] = decodeURI(
186
- baseSegment.value
187
- );
188
- }
189
- }
190
- }
191
- if (!isLastBaseSegment && isLastRouteSegment) {
192
- params["**"] = joinPaths(baseSegments.slice(i + 1).map((d) => d.value));
193
- return !!matchLocation.fuzzy && (routeSegment == null ? void 0 : routeSegment.value) !== "/";
194
- }
195
- }
196
- return true;
197
- })();
198
- return isMatch ? params : void 0;
199
- }
200
- export {
201
- cleanPath,
202
- interpolatePath,
203
- joinPaths,
204
- matchByPath,
205
- matchPathname,
206
- parsePathname,
207
- removeBasepath,
208
- resolvePath,
209
- trimPath,
210
- trimPathLeft,
211
- trimPathRight
212
- };
213
- //# sourceMappingURL=path.js.map
@@ -1 +0,0 @@
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\ninterface InterpolatePathOptions {\n path?: string\n params: any\n leaveWildcards?: boolean\n leaveParams?: boolean\n}\nexport function interpolatePath({\n path,\n params,\n leaveWildcards,\n leaveParams,\n}: InterpolatePathOptions) {\n const interpolatedPathSegments = parsePathname(path)\n\n return joinPaths(\n interpolatedPathSegments.map((segment) => {\n if (segment.type === 'wildcard') {\n const value = params._splat\n if (leaveWildcards) return `${segment.value}${value ?? ''}`\n return value\n }\n\n if (segment.type === 'param') {\n if (leaveParams) {\n const value = params[segment.value]\n return `${segment.value}${value ?? ''}`\n }\n return params![segment.value.substring(1)] ?? 'undefined'\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 removeBasepath(basepath: string, pathname: string) {\n return basepath != '/' ? pathname.replace(basepath, '') : pathname\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 = removeBasepath(basepath, from)\n // Default to to $ (wildcard)\n const to = removeBasepath(basepath, `${matchLocation.to ?? '$'}`)\n\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 const _splat = decodeURI(\n joinPaths(baseSegments.slice(i).map((d) => d.value)),\n )\n // TODO: Deprecate *\n params['*'] = _splat\n params['_splat'] = _splat\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)] = decodeURI(\n baseSegment.value,\n )\n }\n }\n }\n\n if (!isLastBaseSegment && isLastRouteSegment) {\n params['**'] = joinPaths(baseSegments.slice(i + 1).map((d) => d.value))\n return !!matchLocation.fuzzy && routeSegment?.value !== '/'\n }\n }\n\n return true\n })()\n\n return isMatch ? (params as Record<string, string>) : undefined\n}\n"],"names":[],"mappings":"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"}
package/dist/esm/qss.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function encode(obj: any, pfx?: string): string;
2
- export declare function decode(str: any, pfx?: string): {};
package/dist/esm/qss.js DELETED
@@ -1,45 +0,0 @@
1
- function encode(obj, pfx) {
2
- var k, i, tmp, str = "";
3
- for (k in obj) {
4
- if ((tmp = obj[k]) !== void 0) {
5
- if (Array.isArray(tmp)) {
6
- for (i = 0; i < tmp.length; i++) {
7
- str && (str += "&");
8
- str += encodeURIComponent(k) + "=" + encodeURIComponent(tmp[i]);
9
- }
10
- } else {
11
- str && (str += "&");
12
- str += encodeURIComponent(k) + "=" + encodeURIComponent(tmp);
13
- }
14
- }
15
- }
16
- return (pfx || "") + str;
17
- }
18
- function toValue(mix) {
19
- if (!mix)
20
- return "";
21
- var str = decodeURIComponent(mix);
22
- if (str === "false")
23
- return false;
24
- if (str === "true")
25
- return true;
26
- return +str * 0 === 0 && +str + "" === str ? +str : str;
27
- }
28
- function decode(str, pfx) {
29
- var tmp, k, out = {}, arr = (pfx ? str.substr(pfx.length) : str).split("&");
30
- while (tmp = arr.shift()) {
31
- tmp = tmp.split("=");
32
- k = tmp.shift();
33
- if (out[k] !== void 0) {
34
- out[k] = [].concat(out[k], toValue(tmp.shift()));
35
- } else {
36
- out[k] = toValue(tmp.shift());
37
- }
38
- }
39
- return out;
40
- }
41
- export {
42
- decode,
43
- encode
44
- };
45
- //# sourceMappingURL=qss.js.map
@@ -1 +0,0 @@
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, pfx?: string) {\n var tmp,\n k,\n out = {},\n arr = (pfx ? str.substr(pfx.length) : 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":[],"mappings":"AAIgB,SAAA,OAAO,KAAK,KAAc;AACpC,MAAA,GACF,GACA,KACA,MAAM;AAER,OAAK,KAAK,KAAK;AACb,SAAK,MAAM,IAAI,CAAC,OAAO,QAAQ;AACzB,UAAA,MAAM,QAAQ,GAAG,GAAG;AACtB,aAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC/B,kBAAQ,OAAO;AACf,iBAAO,mBAAmB,CAAC,IAAI,MAAM,mBAAmB,IAAI,CAAC,CAAC;AAAA,QAChE;AAAA,MAAA,OACK;AACL,gBAAQ,OAAO;AACf,eAAO,mBAAmB,CAAC,IAAI,MAAM,mBAAmB,GAAG;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,OAAO,MAAM;AACvB;AAEA,SAAS,QAAQ,KAAK;AACpB,MAAI,CAAC;AAAY,WAAA;AACb,MAAA,MAAM,mBAAmB,GAAG;AAChC,MAAI,QAAQ;AAAgB,WAAA;AAC5B,MAAI,QAAQ;AAAe,WAAA;AACpB,SAAA,CAAC,MAAM,MAAM,KAAK,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM;AACtD;AAEgB,SAAA,OAAO,KAAK,KAAc;AACxC,MAAI,KACF,GACA,MAAM,CAAA,GACN,OAAO,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,MAAM,GAAG;AAE9C,SAAA,MAAM,IAAI,SAAU;AACpB,UAAA,IAAI,MAAM,GAAG;AACnB,QAAI,IAAI;AACJ,QAAA,IAAI,CAAC,MAAM,QAAQ;AACrB,UAAI,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC;AAAA,IAAA,OAC1C;AACL,UAAI,CAAC,IAAI,QAAQ,IAAI,MAAO,CAAA;AAAA,IAC9B;AAAA,EACF;AAEO,SAAA;AACT;"}
@@ -1,18 +0,0 @@
1
- import { PickAsRequired } from '.';
2
- import { NavigateOptions } from './link.js';
3
- import { AnyRoute } from './route.js';
4
- import { RoutePaths } from './routeInfo.js';
5
- import { RegisteredRouter } from './router.js';
6
- export type AnyRedirect = Redirect<any, any, any, any, any>;
7
- export type Redirect<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''> = {
8
- /**
9
- * @deprecated Use `statusCode` instead
10
- **/
11
- href?: string;
12
- code?: number;
13
- statusCode?: number;
14
- throw?: any;
15
- } & NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>;
16
- export type ResolvedRedirect<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''> = PickAsRequired<Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>, 'code' | 'statusCode' | 'href'>;
17
- export declare function redirect<TRouteTree extends AnyRoute = RegisteredRouter['routeTree'], TFrom extends RoutePaths<TRouteTree> = '/', TTo extends string = '', TMaskFrom extends RoutePaths<TRouteTree> = TFrom, TMaskTo extends string = ''>(opts: Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>;
18
- export declare function isRedirect(obj: any): obj is AnyRedirect;
@@ -1,16 +0,0 @@
1
- function redirect(opts) {
2
- opts.isRedirect = true;
3
- opts.statusCode = opts.statusCode || opts.code || 301;
4
- if (opts.throw ?? true) {
5
- throw opts;
6
- }
7
- return opts;
8
- }
9
- function isRedirect(obj) {
10
- return !!(obj == null ? void 0 : obj.isRedirect);
11
- }
12
- export {
13
- isRedirect,
14
- redirect
15
- };
16
- //# sourceMappingURL=redirects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redirects.js","sources":["../../src/redirects.ts"],"sourcesContent":["import { PickAsRequired } from '.'\nimport { NavigateOptions } from './link'\nimport { AnyRoute } from './route'\nimport { RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\n\nexport type AnyRedirect = Redirect<any, any, 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> = {\n /**\n * @deprecated Use `statusCode` instead\n **/\n href?: string\n code?: number\n statusCode?: number\n throw?: any\n} & NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type ResolvedRedirect<\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> = PickAsRequired<\n Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n 'code' | 'statusCode' | 'href'\n>\n\nexport function 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>(\n opts: Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Redirect<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> {\n ;(opts as any).isRedirect = true\n opts.statusCode = opts.statusCode || opts.code || 301\n if (opts.throw ?? true) {\n throw opts\n }\n\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n"],"names":[],"mappings":"AAmCO,SAAS,SAOd,MACsD;AACpD,OAAa,aAAa;AAC5B,OAAK,aAAa,KAAK,cAAc,KAAK,QAAQ;AAC9C,MAAA,KAAK,SAAS,MAAM;AAChB,UAAA;AAAA,EACR;AAEO,SAAA;AACT;AAEO,SAAS,WAAW,KAA8B;AAChD,SAAA,CAAC,EAAC,2BAAK;AAChB;"}
@@ -1,33 +0,0 @@
1
- import { AnyRoute } from './route.js';
2
- import { Expand, UnionToIntersection, UnionToTuple } from './utils.js';
3
- export type ParseRoute<TRouteTree, TAcc = TRouteTree> = TRouteTree extends {
4
- types: {
5
- children: infer TChildren;
6
- };
7
- } ? TChildren extends unknown[] ? ParseRoute<TChildren[number], TAcc | TChildren[number]> : TAcc : TAcc;
8
- export type RoutesById<TRouteTree extends AnyRoute> = {
9
- [K in ParseRoute<TRouteTree> as K['id']]: K;
10
- };
11
- export type RouteById<TRouteTree extends AnyRoute, TId> = Extract<Extract<ParseRoute<TRouteTree>, {
12
- id: TId;
13
- }>, AnyRoute>;
14
- export type RouteIds<TRouteTree extends AnyRoute> = ParseRoute<TRouteTree>['id'];
15
- export type RoutesByPath<TRouteTree extends AnyRoute> = {
16
- [K in ParseRoute<TRouteTree> as K['fullPath']]: K;
17
- };
18
- export type RouteByPath<TRouteTree extends AnyRoute, TPath> = Extract<Extract<ParseRoute<TRouteTree>, {
19
- fullPath: TPath;
20
- }>, AnyRoute>;
21
- export type RoutePaths<TRouteTree extends AnyRoute> = ParseRoute<TRouteTree>['fullPath'] | '/';
22
- export type RoutePathsAutoComplete<TRouteTree extends AnyRoute, T> = T | RoutePaths<TRouteTree> | (string & {});
23
- type UnionizeCollisions<T, U> = {
24
- [P in keyof T & keyof U]: T[P] extends U[P] ? T[P] : T[P] | U[P];
25
- };
26
- type Reducer<T, U, C = UnionizeCollisions<T, U>> = C & Omit<T, keyof C> & Omit<U, keyof C>;
27
- type Reduce<T extends any[], Result = unknown> = T extends [
28
- infer First,
29
- ...infer Rest
30
- ] ? Reduce<Rest, Reducer<Result, First>> : Result;
31
- export type FullSearchSchema<TRouteTree extends AnyRoute> = Partial<Expand<Reduce<UnionToTuple<ParseRoute<TRouteTree>['types']['fullSearchSchema']>>>>;
32
- export type AllParams<TRouteTree extends AnyRoute> = Expand<UnionToIntersection<ParseRoute<TRouteTree>['types']['allParams']>>;
33
- export {};
@@ -1,7 +0,0 @@
1
- import { AnySearchSchema } from './route.js';
2
- export declare const defaultParseSearch: (searchStr: string) => AnySearchSchema;
3
- export declare const defaultStringifySearch: (search: Record<string, any>) => string;
4
- export declare function parseSearchWith(parser: (str: string) => any): (searchStr: string) => AnySearchSchema;
5
- export declare function stringifySearchWith(stringify: (search: any) => string, parser?: (str: string) => any): (search: Record<string, any>) => string;
6
- export type SearchSerializer = (searchObj: Record<string, any>) => string;
7
- export type SearchParser = (searchStr: string) => Record<string, any>;
@@ -1,63 +0,0 @@
1
- import { decode, encode } from "./qss.js";
2
- const defaultParseSearch = parseSearchWith(JSON.parse);
3
- const defaultStringifySearch = stringifySearchWith(
4
- JSON.stringify,
5
- JSON.parse
6
- );
7
- function parseSearchWith(parser) {
8
- return (searchStr) => {
9
- if (searchStr.substring(0, 1) === "?") {
10
- searchStr = searchStr.substring(1);
11
- }
12
- let query = decode(searchStr);
13
- for (let key in query) {
14
- const value = query[key];
15
- if (typeof value === "string") {
16
- try {
17
- query[key] = parser(value);
18
- } catch (err) {
19
- }
20
- }
21
- }
22
- return query;
23
- };
24
- }
25
- function stringifySearchWith(stringify, parser) {
26
- function stringifyValue(val) {
27
- if (typeof val === "object" && val !== null) {
28
- try {
29
- return stringify(val);
30
- } catch (err) {
31
- }
32
- } else if (typeof val === "string" && typeof parser === "function") {
33
- try {
34
- parser(val);
35
- return stringify(val);
36
- } catch (err) {
37
- }
38
- }
39
- return val;
40
- }
41
- return (search) => {
42
- search = { ...search };
43
- if (search) {
44
- Object.keys(search).forEach((key) => {
45
- const val = search[key];
46
- if (typeof val === "undefined" || val === void 0) {
47
- delete search[key];
48
- } else {
49
- search[key] = stringifyValue(val);
50
- }
51
- });
52
- }
53
- const searchStr = encode(search).toString();
54
- return searchStr ? `?${searchStr}` : "";
55
- };
56
- }
57
- export {
58
- defaultParseSearch,
59
- defaultStringifySearch,
60
- parseSearchWith,
61
- stringifySearchWith
62
- };
63
- //# sourceMappingURL=searchParams.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n"],"names":[],"mappings":";AAGa,MAAA,qBAAqB,gBAAgB,KAAK,KAAK;AACrD,MAAM,yBAAyB;AAAA,EACpC,KAAK;AAAA,EACL,KAAK;AACP;AAEO,SAAS,gBAAgB,QAA8B;AAC5D,SAAO,CAAC,cAAuC;AAC7C,QAAI,UAAU,UAAU,GAAG,CAAC,MAAM,KAAK;AACzB,kBAAA,UAAU,UAAU,CAAC;AAAA,IACnC;AAEI,QAAA,QAAiC,OAAO,SAAS;AAGrD,aAAS,OAAO,OAAO;AACf,YAAA,QAAQ,MAAM,GAAG;AACnB,UAAA,OAAO,UAAU,UAAU;AACzB,YAAA;AACI,gBAAA,GAAG,IAAI,OAAO,KAAK;AAAA,iBAClB,KAAK;AAAA,QAEd;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EAAA;AAEX;AAEgB,SAAA,oBACd,WACA,QACA;AACA,WAAS,eAAe,KAAU;AAChC,QAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AACvC,UAAA;AACF,eAAO,UAAU,GAAG;AAAA,eACb,KAAK;AAAA,MAEd;AAAA,eACS,OAAO,QAAQ,YAAY,OAAO,WAAW,YAAY;AAC9D,UAAA;AAGF,eAAO,GAAG;AACV,eAAO,UAAU,GAAG;AAAA,eACb,KAAK;AAAA,MAEd;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAEA,SAAO,CAAC,WAAgC;AAC7B,aAAA,EAAE,GAAG;AAEd,QAAI,QAAQ;AACV,aAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AAC7B,cAAA,MAAM,OAAO,GAAG;AACtB,YAAI,OAAO,QAAQ,eAAe,QAAQ,QAAW;AACnD,iBAAO,OAAO,GAAG;AAAA,QAAA,OACZ;AACE,iBAAA,GAAG,IAAI,eAAe,GAAG;AAAA,QAClC;AAAA,MAAA,CACD;AAAA,IACH;AAEA,UAAM,YAAY,OAAO,MAAgC,EAAE,SAAS;AAE7D,WAAA,YAAY,IAAI,SAAS,KAAK;AAAA,EAAA;AAEzC;"}
@@ -1,107 +0,0 @@
1
- import invariant from 'tiny-invariant'
2
-
3
- export const serverFnReturnTypeHeader = 'server-fn-return-type'
4
- export const serverFnPayloadTypeHeader = 'server-fn-payload-type'
5
-
6
- export interface JsonResponse<TData> extends Response {
7
- json(): Promise<TData>
8
- }
9
-
10
- export type FetcherOptionsBase = {
11
- method?: 'GET' | 'POST'
12
- }
13
-
14
- export type FetcherOptions = FetcherOptionsBase & {
15
- requestInit?: RequestInit
16
- }
17
-
18
- export type FetchFnCtx = {
19
- method: 'GET' | 'POST'
20
- request: Request
21
- }
22
-
23
- export type FetchFn<TPayload, TResponse> = {
24
- (payload: TPayload, ctx: FetchFnCtx): Promise<TResponse> | TResponse
25
- url?: string
26
- }
27
-
28
- export type CompiledFetcherFnOptions<TPayload> = {
29
- method: 'GET' | 'POST'
30
- payload: TPayload | undefined
31
- requestInit?: RequestInit
32
- }
33
-
34
- export type CompiledFetcherFn<TPayload, TResponse> = {
35
- (opts: CompiledFetcherFnOptions<TPayload>): Promise<TResponse>
36
- url: string
37
- }
38
-
39
- type IsPayloadOptional<T> = [T] extends [undefined] ? true : false
40
-
41
- export type Fetcher<TPayload, TResponse> =
42
- (IsPayloadOptional<TPayload> extends true
43
- ? {
44
- (
45
- payload?: TPayload,
46
- opts?: FetcherOptions,
47
- ): Promise<JsonResponseOrPayload<TResponse>>
48
- }
49
- : {
50
- (
51
- payload: TPayload,
52
- opts?: FetcherOptions,
53
- ): Promise<JsonResponseOrPayload<TResponse>>
54
- }) & {
55
- url: string
56
- }
57
-
58
- export type JsonResponseOrPayload<TResponse> =
59
- TResponse extends JsonResponse<infer TData> ? TData : TResponse
60
-
61
- export function createServerFn<
62
- TPayload extends any = undefined,
63
- TResponse = unknown,
64
- >(
65
- method: 'GET' | 'POST',
66
- fn: FetchFn<TPayload, TResponse>,
67
- ): Fetcher<TPayload, TResponse> {
68
- // Cast the compiled function that will be injected by vinxi
69
- const compiledFn = fn as unknown as CompiledFetcherFn<TPayload, TResponse>
70
-
71
- invariant(
72
- compiledFn.url,
73
- `createServerFn must be called with a function that is marked with the 'use server' pragma.`,
74
- )
75
-
76
- return Object.assign(
77
- async (payload: TPayload, opts?: FetcherOptions) => {
78
- return compiledFn({
79
- method,
80
- payload: payload || undefined,
81
- requestInit: opts?.requestInit,
82
- })
83
- },
84
- {
85
- url: fn.url!,
86
- },
87
- ) as Fetcher<TPayload, TResponse>
88
- }
89
-
90
- export function json<TData>(
91
- payload: TData,
92
- opts?: {
93
- status?: number
94
- statusText?: string
95
- headers?: HeadersInit
96
- },
97
- ): JsonResponse<TData> {
98
- return new Response(JSON.stringify(payload), {
99
- status: opts?.status || 200,
100
- statusText: opts?.statusText || opts?.status === 200 ? 'OK' : 'Error',
101
- headers: {
102
- 'Content-Type': 'application/json',
103
- [serverFnReturnTypeHeader]: 'json',
104
- ...opts?.headers,
105
- },
106
- })
107
- }
package/src/defer.ts DELETED
@@ -1,70 +0,0 @@
1
- import { defaultSerializeError } from './router'
2
-
3
- export type DeferredPromiseState<T> = {
4
- uid: string
5
- resolve?: () => void
6
- promise?: Promise<void>
7
- __resolvePromise?: () => void
8
- } & (
9
- | {
10
- status: 'pending'
11
- data?: T
12
- error?: unknown
13
- }
14
- | {
15
- status: 'success'
16
- data: T
17
- }
18
- | {
19
- status: 'error'
20
- data?: T
21
- error: unknown
22
- }
23
- )
24
-
25
- export type DeferredPromise<T> = Promise<T> & {
26
- __deferredState: DeferredPromiseState<T>
27
- }
28
-
29
- export function defer<T>(
30
- _promise: Promise<T>,
31
- options?: {
32
- serializeError?: typeof defaultSerializeError
33
- },
34
- ) {
35
- const promise = _promise as DeferredPromise<T>
36
-
37
- if (!promise.__deferredState) {
38
- promise.__deferredState = {
39
- uid: Math.random().toString(36).slice(2),
40
- status: 'pending',
41
- }
42
-
43
- const state = promise.__deferredState
44
-
45
- promise
46
- .then((data) => {
47
- state.status = 'success' as any
48
- state.data = data
49
- })
50
- .catch((error) => {
51
- state.status = 'error' as any
52
- state.error = {
53
- data: (options?.serializeError ?? defaultSerializeError)(error),
54
- __isServerError: true,
55
- }
56
- })
57
- }
58
-
59
- return promise
60
- }
61
-
62
- export function isDehydratedDeferred(obj: any): boolean {
63
- return (
64
- typeof obj === 'object' &&
65
- obj !== null &&
66
- !(obj instanceof Promise) &&
67
- !obj.then &&
68
- '__deferredState' in obj
69
- )
70
- }
package/src/location.ts DELETED
@@ -1,13 +0,0 @@
1
- import { HistoryState } from '@tanstack/history'
2
- import { AnySearchSchema } from './route'
3
-
4
- export interface ParsedLocation<TSearchObj extends AnySearchSchema = {}> {
5
- href: string
6
- pathname: string
7
- search: TSearchObj
8
- searchStr: string
9
- state: HistoryState
10
- hash: string
11
- maskedLocation?: ParsedLocation<TSearchObj>
12
- unmaskOnReload?: boolean
13
- }