@cedarjs/router 0.0.4

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 (275) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/ActivePageContext.d.ts +15 -0
  4. package/dist/ActivePageContext.d.ts.map +1 -0
  5. package/dist/ActivePageContext.js +17 -0
  6. package/dist/AuthenticatedRoute.d.ts +11 -0
  7. package/dist/AuthenticatedRoute.d.ts.map +1 -0
  8. package/dist/AuthenticatedRoute.js +49 -0
  9. package/dist/PageLoadingContext.d.ts +14 -0
  10. package/dist/PageLoadingContext.d.ts.map +1 -0
  11. package/dist/PageLoadingContext.js +29 -0
  12. package/dist/Route.d.ts +32 -0
  13. package/dist/Route.d.ts.map +1 -0
  14. package/dist/Route.js +7 -0
  15. package/dist/Set.d.ts +58 -0
  16. package/dist/Set.d.ts.map +1 -0
  17. package/dist/Set.js +28 -0
  18. package/dist/a11yUtils.d.ts +14 -0
  19. package/dist/a11yUtils.d.ts.map +1 -0
  20. package/dist/a11yUtils.js +35 -0
  21. package/dist/active-route-loader.d.ts +12 -0
  22. package/dist/active-route-loader.d.ts.map +1 -0
  23. package/dist/active-route-loader.js +82 -0
  24. package/dist/analyzeRoutes.d.ts +44 -0
  25. package/dist/analyzeRoutes.d.ts.map +1 -0
  26. package/dist/analyzeRoutes.js +128 -0
  27. package/dist/cjs/ActivePageContext.d.ts +15 -0
  28. package/dist/cjs/ActivePageContext.d.ts.map +1 -0
  29. package/dist/cjs/ActivePageContext.js +42 -0
  30. package/dist/cjs/AuthenticatedRoute.d.ts +11 -0
  31. package/dist/cjs/AuthenticatedRoute.d.ts.map +1 -0
  32. package/dist/cjs/AuthenticatedRoute.js +83 -0
  33. package/dist/cjs/PageLoadingContext.d.ts +14 -0
  34. package/dist/cjs/PageLoadingContext.d.ts.map +1 -0
  35. package/dist/cjs/PageLoadingContext.js +64 -0
  36. package/dist/cjs/Route.d.ts +32 -0
  37. package/dist/cjs/Route.d.ts.map +1 -0
  38. package/dist/cjs/Route.js +41 -0
  39. package/dist/cjs/Set.d.ts +58 -0
  40. package/dist/cjs/Set.d.ts.map +1 -0
  41. package/dist/cjs/Set.js +67 -0
  42. package/dist/cjs/a11yUtils.d.ts +14 -0
  43. package/dist/cjs/a11yUtils.d.ts.map +1 -0
  44. package/dist/cjs/a11yUtils.js +61 -0
  45. package/dist/cjs/active-route-loader.d.ts +12 -0
  46. package/dist/cjs/active-route-loader.d.ts.map +1 -0
  47. package/dist/cjs/active-route-loader.js +116 -0
  48. package/dist/cjs/analyzeRoutes.d.ts +44 -0
  49. package/dist/cjs/analyzeRoutes.d.ts.map +1 -0
  50. package/dist/cjs/analyzeRoutes.js +143 -0
  51. package/dist/cjs/createNamedContext.d.ts +3 -0
  52. package/dist/cjs/createNamedContext.d.ts.map +1 -0
  53. package/dist/cjs/createNamedContext.js +33 -0
  54. package/dist/cjs/dummyComponent.d.ts +3 -0
  55. package/dist/cjs/dummyComponent.d.ts.map +1 -0
  56. package/dist/cjs/dummyComponent.js +24 -0
  57. package/dist/cjs/history.d.ts +24 -0
  58. package/dist/cjs/history.d.ts.map +1 -0
  59. package/dist/cjs/history.js +146 -0
  60. package/dist/cjs/index.d.ts +35 -0
  61. package/dist/cjs/index.d.ts.map +1 -0
  62. package/dist/cjs/index.js +110 -0
  63. package/dist/cjs/link.d.ts +9 -0
  64. package/dist/cjs/link.d.ts.map +1 -0
  65. package/dist/cjs/link.js +62 -0
  66. package/dist/cjs/location.d.ts +28 -0
  67. package/dist/cjs/location.d.ts.map +1 -0
  68. package/dist/cjs/location.js +110 -0
  69. package/dist/cjs/namedRoutes.d.ts +3 -0
  70. package/dist/cjs/namedRoutes.d.ts.map +1 -0
  71. package/dist/cjs/namedRoutes.js +28 -0
  72. package/dist/cjs/navLink.d.ts +11 -0
  73. package/dist/cjs/navLink.d.ts.map +1 -0
  74. package/dist/cjs/navLink.js +70 -0
  75. package/dist/cjs/package.json +1 -0
  76. package/dist/cjs/page.d.ts +28 -0
  77. package/dist/cjs/page.d.ts.map +1 -0
  78. package/dist/cjs/page.js +42 -0
  79. package/dist/cjs/params.d.ts +13 -0
  80. package/dist/cjs/params.d.ts.map +1 -0
  81. package/dist/cjs/params.js +64 -0
  82. package/dist/cjs/react-util.d.ts +3 -0
  83. package/dist/cjs/react-util.d.ts.map +1 -0
  84. package/dist/cjs/react-util.js +37 -0
  85. package/dist/cjs/redirect.d.ts +12 -0
  86. package/dist/cjs/redirect.d.ts.map +1 -0
  87. package/dist/cjs/redirect.js +35 -0
  88. package/dist/cjs/route-announcement.d.ts +13 -0
  89. package/dist/cjs/route-announcement.d.ts.map +1 -0
  90. package/dist/cjs/route-announcement.js +61 -0
  91. package/dist/cjs/route-focus.d.ts +12 -0
  92. package/dist/cjs/route-focus.d.ts.map +1 -0
  93. package/dist/cjs/route-focus.js +36 -0
  94. package/dist/cjs/route-validators.d.ts +21 -0
  95. package/dist/cjs/route-validators.d.ts.map +1 -0
  96. package/dist/cjs/route-validators.js +71 -0
  97. package/dist/cjs/routeParamsTypes.d.ts +49 -0
  98. package/dist/cjs/routeParamsTypes.d.ts.map +1 -0
  99. package/dist/cjs/routeParamsTypes.js +16 -0
  100. package/dist/cjs/router-context.d.ts +21 -0
  101. package/dist/cjs/router-context.d.ts.map +1 -0
  102. package/dist/cjs/router-context.js +69 -0
  103. package/dist/cjs/router.d.ts +11 -0
  104. package/dist/cjs/router.d.ts.map +1 -0
  105. package/dist/cjs/router.js +207 -0
  106. package/dist/cjs/rsc/ClientRouter.d.ts +4 -0
  107. package/dist/cjs/rsc/ClientRouter.d.ts.map +1 -0
  108. package/dist/cjs/rsc/ClientRouter.js +90 -0
  109. package/dist/cjs/rsc/RscCache.d.ts +23 -0
  110. package/dist/cjs/rsc/RscCache.d.ts.map +1 -0
  111. package/dist/cjs/rsc/RscCache.js +110 -0
  112. package/dist/cjs/rsc/RscRoutes.d.ts +7 -0
  113. package/dist/cjs/rsc/RscRoutes.d.ts.map +1 -0
  114. package/dist/cjs/rsc/RscRoutes.js +124 -0
  115. package/dist/cjs/rsc/ServerRouteLoader.d.ts +12 -0
  116. package/dist/cjs/rsc/ServerRouteLoader.d.ts.map +1 -0
  117. package/dist/cjs/rsc/ServerRouteLoader.js +65 -0
  118. package/dist/cjs/rsc/ServerRouter.d.ts +11 -0
  119. package/dist/cjs/rsc/ServerRouter.d.ts.map +1 -0
  120. package/dist/cjs/rsc/ServerRouter.js +170 -0
  121. package/dist/cjs/rsc/SsrRouter.d.ts +4 -0
  122. package/dist/cjs/rsc/SsrRouter.d.ts.map +1 -0
  123. package/dist/cjs/rsc/SsrRouter.js +56 -0
  124. package/dist/cjs/rsc/clientSsr.d.ts +2 -0
  125. package/dist/cjs/rsc/clientSsr.d.ts.map +1 -0
  126. package/dist/cjs/rsc/clientSsr.js +114 -0
  127. package/dist/cjs/rsc/rscCss.d.ts +2 -0
  128. package/dist/cjs/rsc/rscCss.d.ts.map +1 -0
  129. package/dist/cjs/rsc/rscCss.js +94 -0
  130. package/dist/cjs/rsc/ssrModuleMap.d.ts +14 -0
  131. package/dist/cjs/rsc/ssrModuleMap.d.ts.map +1 -0
  132. package/dist/cjs/rsc/ssrModuleMap.js +49 -0
  133. package/dist/cjs/rsc/utils.d.ts +20 -0
  134. package/dist/cjs/rsc/utils.d.ts.map +1 -0
  135. package/dist/cjs/rsc/utils.js +68 -0
  136. package/dist/cjs/rsc-link.d.ts +6 -0
  137. package/dist/cjs/rsc-link.d.ts.map +1 -0
  138. package/dist/cjs/rsc-link.js +41 -0
  139. package/dist/cjs/skipNav.d.ts +81 -0
  140. package/dist/cjs/skipNav.d.ts.map +1 -0
  141. package/dist/cjs/skipNav.js +69 -0
  142. package/dist/cjs/splash-page.d.ts +12 -0
  143. package/dist/cjs/splash-page.d.ts.map +1 -0
  144. package/dist/cjs/splash-page.js +515 -0
  145. package/dist/cjs/useBlocker.d.ts +11 -0
  146. package/dist/cjs/useBlocker.d.ts.map +1 -0
  147. package/dist/cjs/useBlocker.js +65 -0
  148. package/dist/cjs/useIsMounted.d.ts +2 -0
  149. package/dist/cjs/useIsMounted.d.ts.map +1 -0
  150. package/dist/cjs/useIsMounted.js +37 -0
  151. package/dist/cjs/useMatch.d.ts +43 -0
  152. package/dist/cjs/useMatch.d.ts.map +1 -0
  153. package/dist/cjs/useMatch.js +72 -0
  154. package/dist/cjs/useRouteName.d.ts +3 -0
  155. package/dist/cjs/useRouteName.d.ts.map +1 -0
  156. package/dist/cjs/useRouteName.js +40 -0
  157. package/dist/cjs/useRoutePaths.d.ts +4 -0
  158. package/dist/cjs/useRoutePaths.d.ts.map +1 -0
  159. package/dist/cjs/useRoutePaths.js +50 -0
  160. package/dist/cjs/util.d.ts +121 -0
  161. package/dist/cjs/util.d.ts.map +1 -0
  162. package/dist/cjs/util.js +214 -0
  163. package/dist/createNamedContext.d.ts +3 -0
  164. package/dist/createNamedContext.d.ts.map +1 -0
  165. package/dist/createNamedContext.js +9 -0
  166. package/dist/dummyComponent.d.ts +3 -0
  167. package/dist/dummyComponent.d.ts.map +1 -0
  168. package/dist/dummyComponent.js +4 -0
  169. package/dist/history.d.ts +24 -0
  170. package/dist/history.d.ts.map +1 -0
  171. package/dist/history.js +118 -0
  172. package/dist/index.d.ts +35 -0
  173. package/dist/index.d.ts.map +1 -0
  174. package/dist/index.js +49 -0
  175. package/dist/link.d.ts +9 -0
  176. package/dist/link.d.ts.map +1 -0
  177. package/dist/link.js +28 -0
  178. package/dist/location.d.ts +28 -0
  179. package/dist/location.d.ts.map +1 -0
  180. package/dist/location.js +74 -0
  181. package/dist/namedRoutes.d.ts +3 -0
  182. package/dist/namedRoutes.d.ts.map +1 -0
  183. package/dist/namedRoutes.js +4 -0
  184. package/dist/navLink.d.ts +11 -0
  185. package/dist/navLink.d.ts.map +1 -0
  186. package/dist/navLink.js +36 -0
  187. package/dist/page.d.ts +28 -0
  188. package/dist/page.d.ts.map +1 -0
  189. package/dist/page.js +17 -0
  190. package/dist/params.d.ts +13 -0
  191. package/dist/params.d.ts.map +1 -0
  192. package/dist/params.js +28 -0
  193. package/dist/react-util.d.ts +3 -0
  194. package/dist/react-util.d.ts.map +1 -0
  195. package/dist/react-util.js +13 -0
  196. package/dist/redirect.d.ts +12 -0
  197. package/dist/redirect.d.ts.map +1 -0
  198. package/dist/redirect.js +11 -0
  199. package/dist/route-announcement.d.ts +13 -0
  200. package/dist/route-announcement.d.ts.map +1 -0
  201. package/dist/route-announcement.js +31 -0
  202. package/dist/route-focus.d.ts +12 -0
  203. package/dist/route-focus.d.ts.map +1 -0
  204. package/dist/route-focus.js +6 -0
  205. package/dist/route-validators.d.ts +21 -0
  206. package/dist/route-validators.d.ts.map +1 -0
  207. package/dist/route-validators.js +44 -0
  208. package/dist/routeParamsTypes.d.ts +49 -0
  209. package/dist/routeParamsTypes.d.ts.map +1 -0
  210. package/dist/routeParamsTypes.js +0 -0
  211. package/dist/router-context.d.ts +21 -0
  212. package/dist/router-context.d.ts.map +1 -0
  213. package/dist/router-context.js +34 -0
  214. package/dist/router.d.ts +11 -0
  215. package/dist/router.d.ts.map +1 -0
  216. package/dist/router.js +173 -0
  217. package/dist/rsc/ClientRouter.d.ts +4 -0
  218. package/dist/rsc/ClientRouter.d.ts.map +1 -0
  219. package/dist/rsc/ClientRouter.js +56 -0
  220. package/dist/rsc/RscCache.d.ts +23 -0
  221. package/dist/rsc/RscCache.d.ts.map +1 -0
  222. package/dist/rsc/RscCache.js +86 -0
  223. package/dist/rsc/RscRoutes.d.ts +7 -0
  224. package/dist/rsc/RscRoutes.d.ts.map +1 -0
  225. package/dist/rsc/RscRoutes.js +100 -0
  226. package/dist/rsc/ServerRouteLoader.d.ts +12 -0
  227. package/dist/rsc/ServerRouteLoader.d.ts.map +1 -0
  228. package/dist/rsc/ServerRouteLoader.js +31 -0
  229. package/dist/rsc/ServerRouter.d.ts +11 -0
  230. package/dist/rsc/ServerRouter.d.ts.map +1 -0
  231. package/dist/rsc/ServerRouter.js +136 -0
  232. package/dist/rsc/SsrRouter.d.ts +4 -0
  233. package/dist/rsc/SsrRouter.d.ts.map +1 -0
  234. package/dist/rsc/SsrRouter.js +22 -0
  235. package/dist/rsc/clientSsr.d.ts +2 -0
  236. package/dist/rsc/clientSsr.d.ts.map +1 -0
  237. package/dist/rsc/clientSsr.js +80 -0
  238. package/dist/rsc/rscCss.d.ts +2 -0
  239. package/dist/rsc/rscCss.d.ts.map +1 -0
  240. package/dist/rsc/rscCss.js +60 -0
  241. package/dist/rsc/ssrModuleMap.d.ts +14 -0
  242. package/dist/rsc/ssrModuleMap.d.ts.map +1 -0
  243. package/dist/rsc/ssrModuleMap.js +25 -0
  244. package/dist/rsc/utils.d.ts +20 -0
  245. package/dist/rsc/utils.d.ts.map +1 -0
  246. package/dist/rsc/utils.js +31 -0
  247. package/dist/rsc-link.d.ts +6 -0
  248. package/dist/rsc-link.d.ts.map +1 -0
  249. package/dist/rsc-link.js +7 -0
  250. package/dist/skipNav.d.ts +81 -0
  251. package/dist/skipNav.d.ts.map +1 -0
  252. package/dist/skipNav.js +34 -0
  253. package/dist/splash-page.d.ts +12 -0
  254. package/dist/splash-page.d.ts.map +1 -0
  255. package/dist/splash-page.js +481 -0
  256. package/dist/useBlocker.d.ts +11 -0
  257. package/dist/useBlocker.d.ts.map +1 -0
  258. package/dist/useBlocker.js +41 -0
  259. package/dist/useIsMounted.d.ts +2 -0
  260. package/dist/useIsMounted.d.ts.map +1 -0
  261. package/dist/useIsMounted.js +13 -0
  262. package/dist/useMatch.d.ts +43 -0
  263. package/dist/useMatch.d.ts.map +1 -0
  264. package/dist/useMatch.js +48 -0
  265. package/dist/useRouteName.d.ts +3 -0
  266. package/dist/useRouteName.d.ts.map +1 -0
  267. package/dist/useRouteName.js +16 -0
  268. package/dist/useRoutePaths.d.ts +4 -0
  269. package/dist/useRoutePaths.d.ts.map +1 -0
  270. package/dist/useRoutePaths.js +25 -0
  271. package/dist/util.d.ts +121 -0
  272. package/dist/util.d.ts.map +1 -0
  273. package/dist/util.js +183 -0
  274. package/package.json +127 -0
  275. package/skip-nav.css +31 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Cedar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Redwood Router
2
+
3
+ This is the built-in router for Redwood apps. It takes inspiration from Ruby on Rails, React Router, and Reach Router, but is very opinionated in its own way.
4
+
5
+ Redwood Router (RR) is designed to list all routes in a single file, with limited nesting. We prefer this design, as it makes it very easy to track which routes map to which pages.
6
+
7
+ ## Package Leads
8
+
9
+ - [@mojombo](https://github.com/mojombo)
10
+ - [@tobbe](https://github.com/tobbe)
11
+ - [@jtoar](https://github.com/jtoar)
12
+
13
+ ## Docs (and Features)
14
+
15
+ For the complete documentation, see:
16
+
17
+ - [RR Doc](https://deploy-preview-848--redwoodjs.netlify.app/docs/redwood-router)
18
+
19
+ Features include:
20
+
21
+ - Private routes
22
+ - Prerendered routes
23
+ - Sets of routes
24
+ - Navigation and History
25
+ - [Accessibility](https://redwoodjs.com/docs/accessibility)
26
+ - and more...
27
+
28
+ ## Contributing
29
+
30
+ Want to make RR even better? Contributions are welcome!
31
+
32
+ A great way to get started is looking through these open issues:
33
+
34
+ - [Current RR GitHub Issues](https://github.com/redwoodjs/redwood/issues?q=is%3Aopen+is%3Aissue+label%3Atopic%2Frouter)
35
+
36
+ If you have questions, you can reach out to the package leads or ask for help in the "Contributors" channels on either [Redwood Discord](https://discord.gg/redwoodjs) or [Redwood Forums](https://community.redwoodjs.com/).
@@ -0,0 +1,15 @@
1
+ import type { LocationContextType } from './location.js';
2
+ export type LoadingState = 'PRE_SHOW' | 'SHOW_LOADING' | 'DONE';
3
+ export type LoadingStateRecord = Record<string, {
4
+ specName: string;
5
+ state: LoadingState;
6
+ page: React.ComponentType<unknown>;
7
+ location: LocationContextType;
8
+ } | undefined>;
9
+ interface ActivePageState {
10
+ loadingState: LoadingStateRecord;
11
+ }
12
+ export declare const ActivePageContextProvider: import("react").Provider<ActivePageState | undefined>;
13
+ export declare const useActivePageContext: () => ActivePageState;
14
+ export {};
15
+ //# sourceMappingURL=ActivePageContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivePageContext.d.ts","sourceRoot":"","sources":["../src/ActivePageContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAExD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,MAAM,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC,MAAM,EACJ;IACE,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,YAAY,CAAA;IACnB,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,mBAAmB,CAAA;CAC9B,GACD,SAAS,CACZ,CAAA;AAED,UAAU,eAAe;IACvB,YAAY,EAAE,kBAAkB,CAAA;CACjC;AAID,eAAO,MAAM,yBAAyB,uDAA6B,CAAA;AAEnE,eAAO,MAAM,oBAAoB,uBAUhC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { useContext } from "react";
2
+ import { createNamedContext } from "./createNamedContext.js";
3
+ const ActivePageContext = createNamedContext("ActivePage");
4
+ const ActivePageContextProvider = ActivePageContext.Provider;
5
+ const useActivePageContext = () => {
6
+ const activePageContext = useContext(ActivePageContext);
7
+ if (!activePageContext) {
8
+ throw new Error(
9
+ "useActivePageContext must be used within a ActivePageContext provider"
10
+ );
11
+ }
12
+ return activePageContext;
13
+ };
14
+ export {
15
+ ActivePageContextProvider,
16
+ useActivePageContext
17
+ };
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { GeneratedRoutesMap } from './analyzeRoutes.js';
3
+ interface AuthenticatedRouteProps {
4
+ children: React.ReactNode | Thenable<React.ReactNode>;
5
+ roles?: string | string[];
6
+ unauthenticated: keyof GeneratedRoutesMap;
7
+ whileLoadingAuth?: () => React.ReactElement | null;
8
+ }
9
+ export declare const AuthenticatedRoute: React.FC<AuthenticatedRouteProps>;
10
+ export {};
11
+ //# sourceMappingURL=AuthenticatedRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticatedRoute.d.ts","sourceRoot":"","sources":["../src/AuthenticatedRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAK5D,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,eAAe,EAAE,MAAM,kBAAkB,CAAA;IACzC,gBAAgB,CAAC,EAAE,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAA;CACnD;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA6DhE,CAAA"}
@@ -0,0 +1,49 @@
1
+ import React, { useCallback } from "react";
2
+ import { namedRoutes } from "./namedRoutes.js";
3
+ import { Redirect } from "./redirect.js";
4
+ import { useRouterState } from "./router-context.js";
5
+ const AuthenticatedRoute = ({
6
+ unauthenticated,
7
+ roles,
8
+ whileLoadingAuth,
9
+ children
10
+ }) => {
11
+ const routerState = useRouterState();
12
+ const {
13
+ loading: authLoading,
14
+ isAuthenticated,
15
+ hasRole
16
+ } = routerState.useAuth();
17
+ const unauthorized = useCallback(() => {
18
+ return !(isAuthenticated && (!roles || hasRole(roles)));
19
+ }, [isAuthenticated, roles, hasRole]);
20
+ if (unauthorized()) {
21
+ if (authLoading) {
22
+ return whileLoadingAuth?.() || null;
23
+ } else {
24
+ const currentLocation = globalThis.location.pathname + encodeURIComponent(globalThis.location.search);
25
+ const generatedRoutesMap = namedRoutes;
26
+ if (!generatedRoutesMap[unauthenticated]) {
27
+ throw new Error(`We could not find a route named ${unauthenticated}`);
28
+ }
29
+ let unauthenticatedPath;
30
+ try {
31
+ unauthenticatedPath = generatedRoutesMap[unauthenticated]();
32
+ } catch (e) {
33
+ if (e instanceof Error && /Missing parameter .* for route/.test(e.message)) {
34
+ throw new Error(
35
+ `Redirecting to route "${unauthenticated}" would require route parameters, which currently is not supported. Please choose a different route`
36
+ );
37
+ }
38
+ throw new Error(
39
+ `Could not redirect to the route named ${unauthenticated}`
40
+ );
41
+ }
42
+ return /* @__PURE__ */ React.createElement(Redirect, { to: `${unauthenticatedPath}?redirectTo=${currentLocation}` });
43
+ }
44
+ }
45
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, children);
46
+ };
47
+ export {
48
+ AuthenticatedRoute
49
+ };
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface PageLoadingContextInterface {
3
+ loading: boolean;
4
+ setPageLoadingContext: (loading: boolean) => void;
5
+ delay?: number;
6
+ }
7
+ interface Props {
8
+ children: React.ReactNode;
9
+ delay?: number;
10
+ }
11
+ export declare const PageLoadingContextProvider: React.FC<Props>;
12
+ export declare const usePageLoadingContext: () => PageLoadingContextInterface;
13
+ export {};
14
+ //# sourceMappingURL=PageLoadingContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLoadingContext.d.ts","sourceRoot":"","sources":["../src/PageLoadingContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAInD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAKD,UAAU,KAAK;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAatD,CAAA;AAED,eAAO,MAAM,qBAAqB,mCAUjC,CAAA"}
@@ -0,0 +1,29 @@
1
+ import React, { useContext, useState } from "react";
2
+ import { createNamedContext } from "./createNamedContext.js";
3
+ const PageLoadingContext = createNamedContext("PageLoading");
4
+ const PageLoadingContextProvider = ({
5
+ children,
6
+ delay = 1e3
7
+ }) => {
8
+ const [loading, setPageLoadingContext] = useState(false);
9
+ return /* @__PURE__ */ React.createElement(
10
+ PageLoadingContext.Provider,
11
+ {
12
+ value: { loading, setPageLoadingContext, delay }
13
+ },
14
+ children
15
+ );
16
+ };
17
+ const usePageLoadingContext = () => {
18
+ const pageLoadingContext = useContext(PageLoadingContext);
19
+ if (!pageLoadingContext) {
20
+ throw new Error(
21
+ "usePageLoadingContext must be used within a PageLoadingContext provider"
22
+ );
23
+ }
24
+ return pageLoadingContext;
25
+ };
26
+ export {
27
+ PageLoadingContextProvider,
28
+ usePageLoadingContext
29
+ };
@@ -0,0 +1,32 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { PageType } from './page.js';
3
+ export type RenderMode = 'stream' | 'html';
4
+ export interface RedirectRouteProps {
5
+ redirect: string;
6
+ path: string;
7
+ name?: string;
8
+ }
9
+ export interface NotFoundRouteProps {
10
+ notfound: boolean;
11
+ page: PageType;
12
+ prerender?: boolean;
13
+ renderMode?: RenderMode;
14
+ }
15
+ export interface RouteProps {
16
+ path: string;
17
+ page: PageType;
18
+ name: string;
19
+ prerender?: boolean;
20
+ renderMode?: RenderMode;
21
+ whileLoadingPage?: () => ReactElement | null;
22
+ }
23
+ export type InternalRouteProps = Partial<RouteProps & RedirectRouteProps & NotFoundRouteProps>;
24
+ /**
25
+ * Route is now a "virtual" component
26
+ * it is actually never rendered. All the page loading logic happens in active-route-loader
27
+ * and all the validation happens within utility functions called from the Router
28
+ */
29
+ export declare function Route(props: RouteProps): JSX.Element;
30
+ export declare function Route(props: RedirectRouteProps): JSX.Element;
31
+ export declare function Route(props: NotFoundRouteProps): JSX.Element;
32
+ //# sourceMappingURL=Route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../src/Route.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE1C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;CAC7C;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,CACrD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CAAA;AACrD,wBAAgB,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAA;AAC7D,wBAAgB,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAA"}
package/dist/Route.js ADDED
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ function Route(_props) {
3
+ return /* @__PURE__ */ React.createElement(React.Fragment, null);
4
+ }
5
+ export {
6
+ Route
7
+ };
package/dist/Set.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ import React from 'react';
3
+ export type WrapperType<WTProps> = (props: Omit<WTProps, 'wrap' | 'children'> & {
4
+ children: ReactNode;
5
+ }) => ReactElement | null;
6
+ type SetProps<P> = P & {
7
+ /**
8
+ * P is the interface for the props that are forwarded to the wrapper
9
+ * components. TypeScript will most likely infer this for you, but if you
10
+ * need to you can specify it yourself in your JSX like so:
11
+ * <Set<{theme: string}> wrap={ThemableLayout} theme="dark">
12
+ */
13
+ wrap?: WrapperType<P> | WrapperType<P>[];
14
+ /**
15
+ *`Routes` nested in a `<Set>` with `private` specified require
16
+ * authentication. When a user is not authenticated and attempts to visit
17
+ * the wrapped route they will be redirected to `unauthenticated` route.
18
+ *
19
+ * @deprecated Please use `<PrivateSet>` instead
20
+ */
21
+ private?: boolean;
22
+ /**
23
+ * The page name where a user will be redirected when not authenticated
24
+ *
25
+ * @deprecated Please use `<PrivateSet>` instead and specify this prop there
26
+ */
27
+ unauthenticated?: string;
28
+ /**
29
+ * Route is permitted when authenticated and user has any of the provided
30
+ * roles such as "admin" or ["admin", "editor"]
31
+ */
32
+ roles?: string | string[];
33
+ /** Prerender all pages in the set */
34
+ prerender?: boolean;
35
+ children: ReactNode;
36
+ /** Loading state for auth to distinguish with whileLoading */
37
+ whileLoadingAuth?: () => ReactElement | null;
38
+ whileLoadingPage?: () => ReactElement | null;
39
+ };
40
+ /**
41
+ * TypeScript will often infer the type of the props you can forward to the
42
+ * wrappers for you, but if you need to you can specify it yourself in your
43
+ * JSX like so:
44
+ * <Set<{theme: string}> wrap={ThemeableLayout} theme="dark">
45
+ */
46
+ export declare function Set<WrapperProps>(props: SetProps<WrapperProps>): React.JSX.Element;
47
+ type PrivateSetProps<P> = P & Omit<SetProps<P>, 'private' | 'unauthenticated'> & {
48
+ /** The page name where a user will be redirected when not authenticated */
49
+ unauthenticated: string;
50
+ };
51
+ /** @deprecated Please use `<PrivateSet>` instead */
52
+ export declare function Private<WrapperProps>(props: PrivateSetProps<WrapperProps>): React.JSX.Element;
53
+ export declare function PrivateSet<WrapperProps>(props: PrivateSetProps<WrapperProps>): React.JSX.Element;
54
+ export declare const isSetNode: (node: ReactNode) => node is ReactElement<SetProps<any>>;
55
+ export declare const isPrivateSetNode: (node: ReactNode) => node is ReactElement<PrivateSetProps<unknown>>;
56
+ export declare const isPrivateNode: (node: ReactNode) => node is ReactElement<SetProps<any>>;
57
+ export {};
58
+ //# sourceMappingURL=Set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Set.d.ts","sourceRoot":"","sources":["../src/Set.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,CACjC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG;IAC1C,QAAQ,EAAE,SAAS,CAAA;CACpB,KACE,YAAY,GAAG,IAAI,CAAA;AAExB,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IACxC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;IACnB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;IAC5C,gBAAgB,CAAC,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;CAC7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,qBAI9D;AAED,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB,CAAC,GAAG;IACjD,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAEH,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,qBAIzE;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,qBAI5E;AAED,eAAO,MAAM,SAAS,SACd,SAAS,KACd,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAOpC,CAAA;AAED,eAAO,MAAM,gBAAgB,SACrB,SAAS,KACd,IAAI,IAAI,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAE/C,CAAA;AAGD,eAAO,MAAM,aAAa,SAClB,SAAS,KACd,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAEpC,CAAA"}
package/dist/Set.js ADDED
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ function Set(props) {
3
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.children);
4
+ }
5
+ function Private(props) {
6
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.children);
7
+ }
8
+ function PrivateSet(props) {
9
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.children);
10
+ }
11
+ const isSetNode = (node) => {
12
+ return React.isValidElement(node) && (node.type === Set || node.type === PrivateSet || node.type === Private) && // Don't even bother including Sets without children. They're useless.
13
+ node.props.children;
14
+ };
15
+ const isPrivateSetNode = (node) => {
16
+ return React.isValidElement(node) && node.type === PrivateSet;
17
+ };
18
+ const isPrivateNode = (node) => {
19
+ return React.isValidElement(node) && node.type === Private;
20
+ };
21
+ export {
22
+ Private,
23
+ PrivateSet,
24
+ Set,
25
+ isPrivateNode,
26
+ isPrivateSetNode,
27
+ isSetNode
28
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * gets the announcement for the new page.
3
+ * called in one of active-route-loader's `useEffect`.
4
+ *
5
+ * the order of priority is:
6
+ * 1. RouteAnnouncement (the most specific one)
7
+ * 2. h1
8
+ * 3. document.title
9
+ * 4. location.pathname
10
+ */
11
+ export declare const getAnnouncement: () => string;
12
+ export declare const getFocus: () => HTMLElement | null;
13
+ export declare const resetFocus: () => void;
14
+ //# sourceMappingURL=a11yUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11yUtils.d.ts","sourceRoot":"","sources":["../src/a11yUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,cAkB3B,CAAA;AAED,eAAO,MAAM,QAAQ,0BAapB,CAAA;AAGD,eAAO,MAAM,UAAU,YAItB,CAAA"}
@@ -0,0 +1,35 @@
1
+ const getAnnouncement = () => {
2
+ const routeAnnouncement = globalThis?.document.querySelectorAll(
3
+ "[data-redwood-route-announcement]"
4
+ )?.[0];
5
+ if (routeAnnouncement?.textContent) {
6
+ return routeAnnouncement.textContent;
7
+ }
8
+ const pageHeading = globalThis?.document.querySelector(`h1`);
9
+ if (pageHeading?.textContent) {
10
+ return pageHeading.textContent;
11
+ }
12
+ if (globalThis?.document.title) {
13
+ return document.title;
14
+ }
15
+ return `new page at ${globalThis?.location.pathname}`;
16
+ };
17
+ const getFocus = () => {
18
+ const routeFocus = globalThis?.document.querySelectorAll(
19
+ "[data-redwood-route-focus]"
20
+ )?.[0];
21
+ if (!routeFocus?.children.length || routeFocus.children[0].tabIndex < 0) {
22
+ return null;
23
+ }
24
+ return routeFocus.children[0];
25
+ };
26
+ const resetFocus = () => {
27
+ globalThis?.document.body.setAttribute("tabindex", "-1");
28
+ globalThis?.document.body.focus();
29
+ globalThis?.document.body.removeAttribute("tabindex");
30
+ };
31
+ export {
32
+ getAnnouncement,
33
+ getFocus,
34
+ resetFocus
35
+ };
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { Spec } from './page.js';
3
+ interface Props {
4
+ path: string;
5
+ spec: Spec;
6
+ params?: Record<string, string>;
7
+ whileLoadingPage?: () => React.ReactNode | null;
8
+ children?: React.ReactNode;
9
+ }
10
+ export declare const ActiveRouteLoader: ({ spec, params, whileLoadingPage, }: Props) => React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=active-route-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-route-loader.d.ts","sourceRoot":"","sources":["../src/active-route-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAG1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIrC,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAiCD,eAAO,MAAM,iBAAiB,wCAI3B,KAAK,sBAmEP,CAAA"}
@@ -0,0 +1,82 @@
1
+ import React, { Suspense, useEffect, useRef } from "react";
2
+ import { getAnnouncement, getFocus, resetFocus } from "./a11yUtils.js";
3
+ import { usePageLoadingContext } from "./PageLoadingContext.js";
4
+ import { inIframe } from "./util.js";
5
+ let isPrerendered = false;
6
+ if (typeof window !== "undefined") {
7
+ const redwoodAppElement = document.getElementById("redwood-app");
8
+ if (redwoodAppElement && redwoodAppElement.children.length > 0) {
9
+ isPrerendered = true;
10
+ }
11
+ }
12
+ let firstLoad = true;
13
+ const Fallback = ({ children }) => {
14
+ const { loading, setPageLoadingContext, delay } = usePageLoadingContext();
15
+ useEffect(() => {
16
+ const timer = setTimeout(() => {
17
+ setPageLoadingContext(true);
18
+ }, delay);
19
+ return () => {
20
+ clearTimeout(timer);
21
+ setPageLoadingContext(false);
22
+ };
23
+ }, [delay, setPageLoadingContext]);
24
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, loading ? children : null);
25
+ };
26
+ const ActiveRouteLoader = ({
27
+ spec,
28
+ params,
29
+ whileLoadingPage
30
+ }) => {
31
+ const announcementRef = useRef(null);
32
+ const usePrerenderLoader = (
33
+ // Prerendering doesn't work with Streaming/SSR yet. So we disable it.
34
+ !globalThis.RWJS_EXP_STREAMING_SSR && (globalThis.__REDWOOD__PRERENDERING || isPrerendered && firstLoad)
35
+ );
36
+ const LazyRouteComponent = usePrerenderLoader ? spec.prerenderLoader(spec.name).default : spec.LazyComponent;
37
+ if (firstLoad) {
38
+ firstLoad = false;
39
+ }
40
+ useEffect(() => {
41
+ if (inIframe()) {
42
+ return;
43
+ }
44
+ if (announcementRef.current) {
45
+ announcementRef.current.innerText = getAnnouncement();
46
+ }
47
+ const routeFocus = getFocus();
48
+ if (!routeFocus) {
49
+ resetFocus();
50
+ } else {
51
+ routeFocus.focus();
52
+ }
53
+ }, [spec, params]);
54
+ if (params) {
55
+ delete params["ref"];
56
+ delete params["key"];
57
+ }
58
+ return /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(Fallback, null, whileLoadingPage?.()) }, /* @__PURE__ */ React.createElement(LazyRouteComponent, { ...params }), /* @__PURE__ */ React.createElement(
59
+ "div",
60
+ {
61
+ id: "redwood-announcer",
62
+ style: {
63
+ position: "absolute",
64
+ top: 0,
65
+ width: 1,
66
+ height: 1,
67
+ padding: 0,
68
+ overflow: "hidden",
69
+ clip: "rect(0, 0, 0, 0)",
70
+ whiteSpace: "nowrap",
71
+ border: 0
72
+ },
73
+ role: "alert",
74
+ "aria-live": "assertive",
75
+ "aria-atomic": "true",
76
+ ref: announcementRef
77
+ }
78
+ ));
79
+ };
80
+ export {
81
+ ActiveRouteLoader
82
+ };
@@ -0,0 +1,44 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ import type { PageType } from './page.js';
3
+ import { type ParamType } from './util.js';
4
+ type WhileLoadingPage = () => ReactElement | null;
5
+ export type GeneratedRoutesMap = {
6
+ [key: string]: (args?: Record<string | number, string | number | boolean>) => string;
7
+ };
8
+ export type Wrappers = ((props: any) => ReactNode)[];
9
+ interface Set {
10
+ id: string;
11
+ wrappers: Wrappers;
12
+ isPrivate: boolean;
13
+ props: {
14
+ private?: boolean;
15
+ [key: string]: unknown;
16
+ };
17
+ }
18
+ type RoutePath = string;
19
+ /**
20
+ * This is essentially the same as RouteProps
21
+ * but it allows for page and redirect to be null or undefined
22
+ * Keeping the shape consistent makes it easier to use
23
+ */
24
+ interface AnalyzedRoute {
25
+ path: RoutePath;
26
+ name: string | null;
27
+ whileLoadingPage?: WhileLoadingPage;
28
+ page: PageType | null;
29
+ redirect: string | null;
30
+ sets: Set[];
31
+ }
32
+ interface AnalyzeRoutesOptions {
33
+ currentPathName: string;
34
+ userParamTypes?: Record<string, ParamType>;
35
+ }
36
+ export declare function analyzeRoutes(children: ReactNode, { currentPathName, userParamTypes }: AnalyzeRoutesOptions): {
37
+ pathRouteMap: Record<string, AnalyzedRoute>;
38
+ namedRoutesMap: GeneratedRoutesMap;
39
+ hasRootRoute: boolean;
40
+ NotFoundPage: PageType | undefined;
41
+ activeRoutePath: string | undefined;
42
+ };
43
+ export {};
44
+ //# sourceMappingURL=analyzeRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeRoutes.d.ts","sourceRoot":"","sources":["../src/analyzeRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAQzC,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,WAAW,CAAA;AAElB,KAAK,gBAAgB,GAAG,MAAM,YAAY,GAAG,IAAI,CAAA;AAIjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,CACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KACtD,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,SAAS,CAAC,EAAE,CAAA;AAEpD,UAAU,GAAG;IACX,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAED,KAAK,SAAS,GAAG,MAAM,CAAA;AAEvB;;;;GAIG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAED,UAAU,oBAAoB;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAC3C;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,EACnB,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,oBAAoB;;;;;;EA6K1D"}