@tanstack/solid-router 1.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/cjs/Asset.cjs +59 -0
  4. package/dist/cjs/Asset.cjs.map +1 -0
  5. package/dist/cjs/Asset.d.cts +2 -0
  6. package/dist/cjs/CatchBoundary.cjs +92 -0
  7. package/dist/cjs/CatchBoundary.cjs.map +1 -0
  8. package/dist/cjs/CatchBoundary.d.cts +11 -0
  9. package/dist/cjs/HeadContent.cjs +129 -0
  10. package/dist/cjs/HeadContent.cjs.map +1 -0
  11. package/dist/cjs/HeadContent.d.cts +8 -0
  12. package/dist/cjs/Match.cjs +340 -0
  13. package/dist/cjs/Match.cjs.map +1 -0
  14. package/dist/cjs/Match.d.cts +8 -0
  15. package/dist/cjs/Matches.cjs +151 -0
  16. package/dist/cjs/Matches.cjs.map +1 -0
  17. package/dist/cjs/Matches.d.cts +69 -0
  18. package/dist/cjs/RouterProvider.cjs +45 -0
  19. package/dist/cjs/RouterProvider.cjs.map +1 -0
  20. package/dist/cjs/RouterProvider.d.cts +35 -0
  21. package/dist/cjs/SafeFragment.cjs +8 -0
  22. package/dist/cjs/SafeFragment.cjs.map +1 -0
  23. package/dist/cjs/SafeFragment.d.cts +1 -0
  24. package/dist/cjs/ScriptOnce.cjs +23 -0
  25. package/dist/cjs/ScriptOnce.cjs.map +1 -0
  26. package/dist/cjs/ScriptOnce.d.cts +5 -0
  27. package/dist/cjs/Scripts.cjs +48 -0
  28. package/dist/cjs/Scripts.cjs.map +1 -0
  29. package/dist/cjs/Scripts.d.cts +1 -0
  30. package/dist/cjs/ScrollRestoration.cjs +37 -0
  31. package/dist/cjs/ScrollRestoration.cjs.map +1 -0
  32. package/dist/cjs/ScrollRestoration.d.cts +15 -0
  33. package/dist/cjs/Transitioner.cjs +132 -0
  34. package/dist/cjs/Transitioner.cjs.map +1 -0
  35. package/dist/cjs/Transitioner.d.cts +1 -0
  36. package/dist/cjs/awaited.cjs +53 -0
  37. package/dist/cjs/awaited.cjs.map +1 -0
  38. package/dist/cjs/awaited.d.cts +11 -0
  39. package/dist/cjs/fileRoute.cjs +90 -0
  40. package/dist/cjs/fileRoute.cjs.map +1 -0
  41. package/dist/cjs/fileRoute.d.cts +58 -0
  42. package/dist/cjs/history.d.cts +8 -0
  43. package/dist/cjs/index.cjs +260 -0
  44. package/dist/cjs/index.cjs.map +1 -0
  45. package/dist/cjs/index.d.cts +53 -0
  46. package/dist/cjs/lazyRouteComponent.cjs +74 -0
  47. package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
  48. package/dist/cjs/lazyRouteComponent.d.cts +7 -0
  49. package/dist/cjs/link.cjs +279 -0
  50. package/dist/cjs/link.cjs.map +1 -0
  51. package/dist/cjs/link.d.cts +113 -0
  52. package/dist/cjs/matchContext.cjs +25 -0
  53. package/dist/cjs/matchContext.cjs.map +1 -0
  54. package/dist/cjs/matchContext.d.cts +3 -0
  55. package/dist/cjs/not-found.cjs +51 -0
  56. package/dist/cjs/not-found.cjs.map +1 -0
  57. package/dist/cjs/not-found.d.cts +27 -0
  58. package/dist/cjs/redirects.cjs +29 -0
  59. package/dist/cjs/redirects.cjs.map +1 -0
  60. package/dist/cjs/redirects.d.cts +21 -0
  61. package/dist/cjs/renderRouteNotFound.cjs +23 -0
  62. package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
  63. package/dist/cjs/renderRouteNotFound.d.cts +3 -0
  64. package/dist/cjs/route.cjs +233 -0
  65. package/dist/cjs/route.cjs.map +1 -0
  66. package/dist/cjs/route.d.cts +297 -0
  67. package/dist/cjs/routeInfo.d.cts +53 -0
  68. package/dist/cjs/router.cjs +1687 -0
  69. package/dist/cjs/router.cjs.map +1 -0
  70. package/dist/cjs/router.d.cts +555 -0
  71. package/dist/cjs/routerContext.cjs +33 -0
  72. package/dist/cjs/routerContext.cjs.map +1 -0
  73. package/dist/cjs/routerContext.d.cts +8 -0
  74. package/dist/cjs/scroll-restoration.cjs +183 -0
  75. package/dist/cjs/scroll-restoration.cjs.map +1 -0
  76. package/dist/cjs/scroll-restoration.d.cts +29 -0
  77. package/dist/cjs/typePrimitives.d.cts +66 -0
  78. package/dist/cjs/useBlocker.cjs +165 -0
  79. package/dist/cjs/useBlocker.cjs.map +1 -0
  80. package/dist/cjs/useBlocker.d.cts +68 -0
  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 +14 -0
  85. package/dist/cjs/useLoaderData.cjs.map +1 -0
  86. package/dist/cjs/useLoaderData.d.cts +13 -0
  87. package/dist/cjs/useLoaderDeps.cjs +17 -0
  88. package/dist/cjs/useLoaderDeps.cjs.map +1 -0
  89. package/dist/cjs/useLoaderDeps.d.cts +12 -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 +39 -0
  94. package/dist/cjs/useMatch.cjs.map +1 -0
  95. package/dist/cjs/useMatch.d.cts +14 -0
  96. package/dist/cjs/useNavigate.cjs +45 -0
  97. package/dist/cjs/useNavigate.cjs.map +1 -0
  98. package/dist/cjs/useNavigate.d.cts +7 -0
  99. package/dist/cjs/useParams.cjs +15 -0
  100. package/dist/cjs/useParams.cjs.map +1 -0
  101. package/dist/cjs/useParams.d.cts +15 -0
  102. package/dist/cjs/useRouteContext.cjs +11 -0
  103. package/dist/cjs/useRouteContext.cjs.map +1 -0
  104. package/dist/cjs/useRouteContext.d.cts +13 -0
  105. package/dist/cjs/useRouter.cjs +29 -0
  106. package/dist/cjs/useRouter.cjs.map +1 -0
  107. package/dist/cjs/useRouter.d.cts +4 -0
  108. package/dist/cjs/useRouterState.cjs +16 -0
  109. package/dist/cjs/useRouterState.cjs.map +1 -0
  110. package/dist/cjs/useRouterState.d.cts +8 -0
  111. package/dist/cjs/useSearch.cjs +15 -0
  112. package/dist/cjs/useSearch.cjs.map +1 -0
  113. package/dist/cjs/useSearch.d.cts +15 -0
  114. package/dist/cjs/utils.cjs +58 -0
  115. package/dist/cjs/utils.cjs.map +1 -0
  116. package/dist/cjs/utils.d.cts +44 -0
  117. package/dist/esm/Asset.d.ts +2 -0
  118. package/dist/esm/Asset.js +59 -0
  119. package/dist/esm/Asset.js.map +1 -0
  120. package/dist/esm/CatchBoundary.d.ts +11 -0
  121. package/dist/esm/CatchBoundary.js +75 -0
  122. package/dist/esm/CatchBoundary.js.map +1 -0
  123. package/dist/esm/HeadContent.d.ts +8 -0
  124. package/dist/esm/HeadContent.js +112 -0
  125. package/dist/esm/HeadContent.js.map +1 -0
  126. package/dist/esm/Match.d.ts +8 -0
  127. package/dist/esm/Match.js +323 -0
  128. package/dist/esm/Match.js.map +1 -0
  129. package/dist/esm/Matches.d.ts +69 -0
  130. package/dist/esm/Matches.js +134 -0
  131. package/dist/esm/Matches.js.map +1 -0
  132. package/dist/esm/RouterProvider.d.ts +35 -0
  133. package/dist/esm/RouterProvider.js +45 -0
  134. package/dist/esm/RouterProvider.js.map +1 -0
  135. package/dist/esm/SafeFragment.d.ts +1 -0
  136. package/dist/esm/SafeFragment.js +8 -0
  137. package/dist/esm/SafeFragment.js.map +1 -0
  138. package/dist/esm/ScriptOnce.d.ts +5 -0
  139. package/dist/esm/ScriptOnce.js +23 -0
  140. package/dist/esm/ScriptOnce.js.map +1 -0
  141. package/dist/esm/Scripts.d.ts +1 -0
  142. package/dist/esm/Scripts.js +48 -0
  143. package/dist/esm/Scripts.js.map +1 -0
  144. package/dist/esm/ScrollRestoration.d.ts +15 -0
  145. package/dist/esm/ScrollRestoration.js +37 -0
  146. package/dist/esm/ScrollRestoration.js.map +1 -0
  147. package/dist/esm/Transitioner.d.ts +1 -0
  148. package/dist/esm/Transitioner.js +115 -0
  149. package/dist/esm/Transitioner.js.map +1 -0
  150. package/dist/esm/awaited.d.ts +11 -0
  151. package/dist/esm/awaited.js +36 -0
  152. package/dist/esm/awaited.js.map +1 -0
  153. package/dist/esm/fileRoute.d.ts +58 -0
  154. package/dist/esm/fileRoute.js +90 -0
  155. package/dist/esm/fileRoute.js.map +1 -0
  156. package/dist/esm/history.d.ts +8 -0
  157. package/dist/esm/index.d.ts +53 -0
  158. package/dist/esm/index.js +149 -0
  159. package/dist/esm/index.js.map +1 -0
  160. package/dist/esm/lazyRouteComponent.d.ts +7 -0
  161. package/dist/esm/lazyRouteComponent.js +74 -0
  162. package/dist/esm/lazyRouteComponent.js.map +1 -0
  163. package/dist/esm/link.d.ts +113 -0
  164. package/dist/esm/link.js +262 -0
  165. package/dist/esm/link.js.map +1 -0
  166. package/dist/esm/matchContext.d.ts +3 -0
  167. package/dist/esm/matchContext.js +8 -0
  168. package/dist/esm/matchContext.js.map +1 -0
  169. package/dist/esm/not-found.d.ts +27 -0
  170. package/dist/esm/not-found.js +51 -0
  171. package/dist/esm/not-found.js.map +1 -0
  172. package/dist/esm/redirects.d.ts +21 -0
  173. package/dist/esm/redirects.js +29 -0
  174. package/dist/esm/redirects.js.map +1 -0
  175. package/dist/esm/renderRouteNotFound.d.ts +3 -0
  176. package/dist/esm/renderRouteNotFound.js +23 -0
  177. package/dist/esm/renderRouteNotFound.js.map +1 -0
  178. package/dist/esm/route.d.ts +297 -0
  179. package/dist/esm/route.js +233 -0
  180. package/dist/esm/route.js.map +1 -0
  181. package/dist/esm/routeInfo.d.ts +53 -0
  182. package/dist/esm/router.d.ts +555 -0
  183. package/dist/esm/router.js +1687 -0
  184. package/dist/esm/router.js.map +1 -0
  185. package/dist/esm/routerContext.d.ts +8 -0
  186. package/dist/esm/routerContext.js +16 -0
  187. package/dist/esm/routerContext.js.map +1 -0
  188. package/dist/esm/scroll-restoration.d.ts +29 -0
  189. package/dist/esm/scroll-restoration.js +183 -0
  190. package/dist/esm/scroll-restoration.js.map +1 -0
  191. package/dist/esm/typePrimitives.d.ts +66 -0
  192. package/dist/esm/useBlocker.d.ts +68 -0
  193. package/dist/esm/useBlocker.js +148 -0
  194. package/dist/esm/useBlocker.js.map +1 -0
  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 +13 -0
  199. package/dist/esm/useLoaderData.js +14 -0
  200. package/dist/esm/useLoaderData.js.map +1 -0
  201. package/dist/esm/useLoaderDeps.d.ts +12 -0
  202. package/dist/esm/useLoaderDeps.js +17 -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 +14 -0
  208. package/dist/esm/useMatch.js +22 -0
  209. package/dist/esm/useMatch.js.map +1 -0
  210. package/dist/esm/useNavigate.d.ts +7 -0
  211. package/dist/esm/useNavigate.js +28 -0
  212. package/dist/esm/useNavigate.js.map +1 -0
  213. package/dist/esm/useParams.d.ts +15 -0
  214. package/dist/esm/useParams.js +15 -0
  215. package/dist/esm/useParams.js.map +1 -0
  216. package/dist/esm/useRouteContext.d.ts +13 -0
  217. package/dist/esm/useRouteContext.js +11 -0
  218. package/dist/esm/useRouteContext.js.map +1 -0
  219. package/dist/esm/useRouter.d.ts +4 -0
  220. package/dist/esm/useRouter.js +12 -0
  221. package/dist/esm/useRouter.js.map +1 -0
  222. package/dist/esm/useRouterState.d.ts +8 -0
  223. package/dist/esm/useRouterState.js +16 -0
  224. package/dist/esm/useRouterState.js.map +1 -0
  225. package/dist/esm/useSearch.d.ts +15 -0
  226. package/dist/esm/useSearch.js +15 -0
  227. package/dist/esm/useSearch.js.map +1 -0
  228. package/dist/esm/utils.d.ts +44 -0
  229. package/dist/esm/utils.js +41 -0
  230. package/dist/esm/utils.js.map +1 -0
  231. package/package.json +75 -0
  232. package/src/Asset.tsx +23 -0
  233. package/src/CatchBoundary.tsx +78 -0
  234. package/src/HeadContent.tsx +146 -0
  235. package/src/Match.tsx +356 -0
  236. package/src/Matches.tsx +348 -0
  237. package/src/RouterProvider.tsx +130 -0
  238. package/src/SafeFragment.tsx +3 -0
  239. package/src/ScriptOnce.tsx +30 -0
  240. package/src/Scripts.tsx +65 -0
  241. package/src/ScrollRestoration.tsx +65 -0
  242. package/src/Transitioner.tsx +152 -0
  243. package/src/awaited.tsx +49 -0
  244. package/src/fileRoute.ts +274 -0
  245. package/src/history.ts +9 -0
  246. package/src/index.tsx +359 -0
  247. package/src/lazyRouteComponent.tsx +114 -0
  248. package/src/link.tsx +1002 -0
  249. package/src/matchContext.tsx +10 -0
  250. package/src/not-found.tsx +69 -0
  251. package/src/redirects.ts +71 -0
  252. package/src/renderRouteNotFound.tsx +27 -0
  253. package/src/route.ts +1477 -0
  254. package/src/routeInfo.ts +239 -0
  255. package/src/router.ts +3066 -0
  256. package/src/routerContext.tsx +26 -0
  257. package/src/scroll-restoration.tsx +337 -0
  258. package/src/typePrimitives.ts +195 -0
  259. package/src/useBlocker.tsx +298 -0
  260. package/src/useCanGoBack.ts +5 -0
  261. package/src/useLoaderData.tsx +64 -0
  262. package/src/useLoaderDeps.tsx +52 -0
  263. package/src/useLocation.tsx +26 -0
  264. package/src/useMatch.tsx +96 -0
  265. package/src/useNavigate.tsx +61 -0
  266. package/src/useParams.tsx +83 -0
  267. package/src/useRouteContext.ts +62 -0
  268. package/src/useRouter.tsx +15 -0
  269. package/src/useRouterState.tsx +32 -0
  270. package/src/useSearch.tsx +84 -0
  271. package/src/utils.ts +96 -0
@@ -0,0 +1,75 @@
1
+ import { createComponent, Dynamic, template, insert, memo, delegateEvents } from "solid-js/web";
2
+ import * as Solid from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<div><div><strong>Something went wrong!</strong><button></button></div><div>`), _tmpl$2 = /* @__PURE__ */ template(`<div><pre>`), _tmpl$3 = /* @__PURE__ */ template(`<code>`);
4
+ function CatchBoundary(props) {
5
+ return createComponent(Solid.ErrorBoundary, {
6
+ fallback: (error, reset) => {
7
+ var _a;
8
+ (_a = props.onCatch) == null ? void 0 : _a.call(props, error);
9
+ Solid.createEffect(Solid.on([props.getResetKey], () => reset(), {
10
+ defer: true
11
+ }));
12
+ return createComponent(Dynamic, {
13
+ get component() {
14
+ return props.errorComponent ?? ErrorComponent;
15
+ },
16
+ error,
17
+ reset
18
+ });
19
+ },
20
+ get children() {
21
+ return props.children;
22
+ }
23
+ });
24
+ }
25
+ function ErrorComponent({
26
+ error
27
+ }) {
28
+ const [show, setShow] = Solid.createSignal(process.env.NODE_ENV !== "production");
29
+ return (() => {
30
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling;
31
+ _el$.style.setProperty("padding", ".5rem");
32
+ _el$.style.setProperty("max-width", "100%");
33
+ _el$2.style.setProperty("display", "flex");
34
+ _el$2.style.setProperty("align-items", "center");
35
+ _el$2.style.setProperty("gap", ".5rem");
36
+ _el$3.style.setProperty("font-size", "1rem");
37
+ _el$4.$$click = () => setShow((d) => !d);
38
+ _el$4.style.setProperty("appearance", "none");
39
+ _el$4.style.setProperty("font-size", ".6em");
40
+ _el$4.style.setProperty("border", "1px solid currentColor");
41
+ _el$4.style.setProperty("padding", ".1rem .2rem");
42
+ _el$4.style.setProperty("font-weight", "bold");
43
+ _el$4.style.setProperty("border-radius", ".25rem");
44
+ insert(_el$4, () => show() ? "Hide Error" : "Show Error");
45
+ _el$5.style.setProperty("height", ".25rem");
46
+ insert(_el$, (() => {
47
+ var _c$ = memo(() => !!show());
48
+ return () => _c$() ? (() => {
49
+ var _el$6 = _tmpl$2(), _el$7 = _el$6.firstChild;
50
+ _el$7.style.setProperty("font-size", ".7em");
51
+ _el$7.style.setProperty("border", "1px solid red");
52
+ _el$7.style.setProperty("border-radius", ".25rem");
53
+ _el$7.style.setProperty("padding", ".3rem");
54
+ _el$7.style.setProperty("color", "red");
55
+ _el$7.style.setProperty("overflow", "auto");
56
+ insert(_el$7, (() => {
57
+ var _c$2 = memo(() => !!error.message);
58
+ return () => _c$2() ? (() => {
59
+ var _el$8 = _tmpl$3();
60
+ insert(_el$8, () => error.message);
61
+ return _el$8;
62
+ })() : null;
63
+ })());
64
+ return _el$6;
65
+ })() : null;
66
+ })(), null);
67
+ return _el$;
68
+ })();
69
+ }
70
+ delegateEvents(["click"]);
71
+ export {
72
+ CatchBoundary,
73
+ ErrorComponent
74
+ };
75
+ //# sourceMappingURL=CatchBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CatchBoundary.js","sources":["../../src/CatchBoundary.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { Dynamic } from 'solid-js/web'\nimport type { ErrorRouteComponent } from './route'\n\nexport function CatchBoundary(\n props: {\n getResetKey: () => number | string\n children: Solid.JSX.Element\n errorComponent?: ErrorRouteComponent\n onCatch?: (error: Error) => void\n } & Solid.ParentProps,\n) {\n return (\n <Solid.ErrorBoundary\n fallback={(error, reset) => {\n props.onCatch?.(error)\n\n Solid.createEffect(\n Solid.on([props.getResetKey], () => reset(), { defer: true }),\n )\n\n return (\n <Dynamic\n component={props.errorComponent ?? ErrorComponent}\n error={error}\n reset={reset}\n />\n )\n }}\n >\n {props.children}\n </Solid.ErrorBoundary>\n )\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = Solid.createSignal(\n process.env.NODE_ENV !== 'production',\n )\n\n return (\n <div style={{ padding: '.5rem', 'max-width': '100%' }}>\n <div style={{ display: 'flex', 'align-items': 'center', gap: '.5rem' }}>\n <strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n 'font-size': '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n 'font-weight': 'bold',\n 'border-radius': '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show() ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show() ? (\n <div>\n <pre\n style={{\n 'font-size': '.7em',\n border: '1px solid red',\n 'border-radius': '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["CatchBoundary","props","_$createComponent","Solid","ErrorBoundary","fallback","error","reset","onCatch","createEffect","on","getResetKey","defer","Dynamic","component","errorComponent","ErrorComponent","children","show","setShow","createSignal","process","env","NODE_ENV","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","style","setProperty","$$click","d","_$insert","_c$","_$memo","_el$6","_tmpl$2","_el$7","_c$2","message","_el$8","_tmpl$3","_$delegateEvents"],"mappings":";;;AAIO,SAASA,cACdC,OAMA;AACAC,SAAAA,gBACGC,MAAMC,eAAa;AAAA,IAClBC,UAAUA,CAACC,OAAOC,UAAU;;AAC1BN,kBAAMO,YAANP,+BAAgBK;AAEVG,YAAAA,aACJN,MAAMO,GAAG,CAACT,MAAMU,WAAW,GAAG,MAAMJ,SAAS;AAAA,QAAEK,OAAO;AAAA,MAAA,CAAM,CAC9D;AAEA,aAAAV,gBACGW,SAAO;AAAA,QAAA,IACNC,YAAS;AAAA,iBAAEb,MAAMc,kBAAkBC;AAAAA,QAAc;AAAA,QACjDV;AAAAA,QACAC;AAAAA,MAAAA,CAAY;AAAA,IAGlB;AAAA,IAAC,IAAAU,WAAA;AAAA,aAEAhB,MAAMgB;AAAAA,IAAAA;AAAAA,EAAQ,CAAA;AAGrB;AAEO,SAASD,eAAe;AAAA,EAAEV;AAAsB,GAAG;AAClD,QAAA,CAACY,MAAMC,OAAO,IAAIhB,MAAMiB,aAC5BC,QAAQC,IAAIC,aAAa,YAC3B;AAEA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAC,GAAAA,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE,aAAAC,QAAAL,MAAAI;AAAAE,SAAAA,MAAAC,YAAA,WAAA,OAAA;AAAAD,SAAAA,MAAAC,YAAA,aAAA,MAAA;AAAAD,UAAAA,MAAAC,YAAA,WAAA,MAAA;AAAAD,UAAAA,MAAAC,YAAA,eAAA,QAAA;AAAAD,UAAAA,MAAAC,YAAA,OAAA,OAAA;AAAAD,UAAAA,MAAAC,YAAA,aAAA,MAAA;AAAAJ,UAAAK,UAaiB,MAAMf,QAASgB,CAAAA,MAAM,CAACA,CAAC;AAACH,UAAAA,MAAAC,YAAA,cAAA,MAAA;AAAAD,UAAAA,MAAAC,YAAA,aAAA,MAAA;AAAAD,UAAAA,MAAAC,YAAA,UAAA,wBAAA;AAAAD,UAAAA,MAAAC,YAAA,WAAA,aAAA;AAAAD,UAAAA,MAAAC,YAAA,eAAA,MAAA;AAAAD,UAAAA,MAAAC,YAAA,iBAAA,QAAA;AAAAG,WAAAP,OAEhCX,MAAAA,KAAK,IAAI,eAAe,YAAY;AAAAc,UAAAA,MAAAC,YAAA,UAAA,QAAA;AAAAG,WAAAZ,OAAA,MAAA;AAAA,UAAAa,MAAAC,KAIxCpB,MAAAA,CAAAA,CAAAA,MAAM;AAAA,aAAA,MAANmB,IAAA,KAAA,MAAA;AAAA,YAAAE,QAAAC,QAAAA,GAAAC,QAAAF,MAAAZ;AAAAK,cAAAA,MAAAC,YAAA,aAAA,MAAA;AAAAD,cAAAA,MAAAC,YAAA,UAAA,eAAA;AAAAD,cAAAA,MAAAC,YAAA,iBAAA,QAAA;AAAAD,cAAAA,MAAAC,YAAA,WAAA,OAAA;AAAAD,cAAAA,MAAAC,YAAA,SAAA,KAAA;AAAAD,cAAAA,MAAAC,YAAA,YAAA,MAAA;AAAAG,eAAAK,QAAA,MAAA;AAAA,cAAAC,OAAAJ,KAYMhC,MAAAA,CAAAA,CAAAA,MAAMqC,OAAO;AAAA,iBAAA,MAAbD,KAAA,KAAA,MAAA;AAAA,gBAAAE,QAAAC,QAAA;AAAAD,mBAAAA,OAAuBtC,MAAAA,MAAMqC,OAAO;AAAAC,mBAAAA;AAAAA,iBAAW;AAAA,QAAA,IAAI;AAAAL,eAAAA;AAAAA,aAGtD;AAAA,IAAI,GAAA,GAAA,IAAA;AAAAf,WAAAA;AAAAA,EAAAA,GAAA;AAGd;AAACsB,eAAA,CAAA,OAAA,CAAA;"}
@@ -0,0 +1,8 @@
1
+ import { RouterManagedTag } from '@tanstack/router-core';
2
+ import * as Solid from 'solid-js';
3
+ export declare const useTags: () => RouterManagedTag[];
4
+ /**
5
+ * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
+ * It should be rendered in the `<head>` of your document.
7
+ */
8
+ export declare function HeadContent(): Solid.JSX.Element[];
@@ -0,0 +1,112 @@
1
+ import { createComponent } from "solid-js/web";
2
+ import * as Solid from "solid-js";
3
+ import { Asset } from "./Asset.js";
4
+ import { useRouter } from "./useRouter.js";
5
+ import { useRouterState } from "./useRouterState.js";
6
+ const useTags = () => {
7
+ const router = useRouter();
8
+ const routeMeta = useRouterState({
9
+ select: (state) => {
10
+ return state.matches.map((match) => match.meta).filter(Boolean);
11
+ }
12
+ });
13
+ const meta = Solid.createMemo(() => {
14
+ const resultMeta = [];
15
+ const metaByAttribute = {};
16
+ let title;
17
+ [...routeMeta()].reverse().forEach((metas) => {
18
+ [...metas].reverse().forEach((m) => {
19
+ if (!m) return;
20
+ if (m.title) {
21
+ if (!title) {
22
+ title = {
23
+ tag: "title",
24
+ children: m.title
25
+ };
26
+ }
27
+ } else {
28
+ const attribute = m.name ?? m.property;
29
+ if (attribute) {
30
+ if (metaByAttribute[attribute]) {
31
+ return;
32
+ } else {
33
+ metaByAttribute[attribute] = true;
34
+ }
35
+ }
36
+ resultMeta.push({
37
+ tag: "meta",
38
+ attrs: {
39
+ ...m
40
+ }
41
+ });
42
+ }
43
+ });
44
+ });
45
+ if (title) {
46
+ resultMeta.push(title);
47
+ }
48
+ resultMeta.reverse();
49
+ return resultMeta;
50
+ }, [routeMeta]);
51
+ const links = useRouterState({
52
+ select: (state) => state.matches.map((match) => match.links).filter(Boolean).flat(1).map((link) => ({
53
+ tag: "link",
54
+ attrs: {
55
+ ...link
56
+ }
57
+ }))
58
+ });
59
+ const preloadMeta = useRouterState({
60
+ select: (state) => {
61
+ const preloadMeta2 = [];
62
+ state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => {
63
+ var _a, _b, _c, _d;
64
+ return (_d = (_c = (_b = (_a = router.ssr) == null ? void 0 : _a.manifest) == null ? void 0 : _b.routes[route.id]) == null ? void 0 : _c.preloads) == null ? void 0 : _d.filter(Boolean).forEach((preload) => {
65
+ preloadMeta2.push({
66
+ tag: "link",
67
+ attrs: {
68
+ rel: "modulepreload",
69
+ href: preload
70
+ }
71
+ });
72
+ });
73
+ });
74
+ return preloadMeta2;
75
+ }
76
+ });
77
+ const headScripts = useRouterState({
78
+ select: (state) => state.matches.map((match) => match.headScripts).flat(1).filter(Boolean).map(({
79
+ children,
80
+ ...script
81
+ }) => ({
82
+ tag: "script",
83
+ attrs: {
84
+ ...script
85
+ },
86
+ children
87
+ }))
88
+ });
89
+ return uniqBy([...meta(), ...preloadMeta(), ...links(), ...headScripts()], (d) => {
90
+ return JSON.stringify(d);
91
+ });
92
+ };
93
+ function HeadContent() {
94
+ const tags = useTags();
95
+ return tags.map((tag) => createComponent(Asset, tag));
96
+ }
97
+ function uniqBy(arr, fn) {
98
+ const seen = /* @__PURE__ */ new Set();
99
+ return arr.filter((item) => {
100
+ const key = fn(item);
101
+ if (seen.has(key)) {
102
+ return false;
103
+ }
104
+ seen.add(key);
105
+ return true;
106
+ });
107
+ }
108
+ export {
109
+ HeadContent,
110
+ useTags
111
+ };
112
+ //# sourceMappingURL=HeadContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...routeMeta()].reverse().forEach((metas) => {\n ;[...metas].reverse().forEach((m) => {\n if (!m) return\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n return\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n },\n })\n }\n })\n })\n\n if (title) {\n resultMeta.push(title)\n }\n\n resultMeta.reverse()\n\n return resultMeta\n }, [routeMeta])\n\n const links = useRouterState({\n select: (state) =>\n state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n },\n })) as Array<RouterManagedTag>,\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n })\n\n return uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n return tags.map((tag) => <Asset {...tag} />)\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","reverse","forEach","metas","m","tag","children","attribute","name","property","push","attrs","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","rel","href","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as Solid from 'solid-js';
2
+ export declare const Match: (props: {
3
+ matchId: string;
4
+ }) => Solid.JSX.Element;
5
+ export declare const MatchInner: (props: {
6
+ matchId: string;
7
+ }) => any;
8
+ export declare const Outlet: () => Solid.JSX.Element;
@@ -0,0 +1,323 @@
1
+ import { createComponent, memo, Dynamic, mergeProps } from "solid-js/web";
2
+ import * as Solid from "solid-js";
3
+ import invariant from "tiny-invariant";
4
+ import warning from "tiny-warning";
5
+ import { rootRouteId, pick, createControlledPromise, getLocationChangeInfo } from "@tanstack/router-core";
6
+ import { ErrorComponent, CatchBoundary } from "./CatchBoundary.js";
7
+ import { useRouterState } from "./useRouterState.js";
8
+ import { useRouter } from "./useRouter.js";
9
+ import { CatchNotFound, isNotFound } from "./not-found.js";
10
+ import { isRedirect } from "./redirects.js";
11
+ import { matchContext } from "./matchContext.js";
12
+ import { SafeFragment } from "./SafeFragment.js";
13
+ import { renderRouteNotFound } from "./renderRouteNotFound.js";
14
+ import { ScrollRestoration } from "./scroll-restoration.js";
15
+ const Match = (props) => {
16
+ const router = useRouter();
17
+ const routeId = useRouterState({
18
+ select: (s) => {
19
+ var _a;
20
+ return (_a = s.matches.find((d) => d.id === props.matchId)) == null ? void 0 : _a.routeId;
21
+ }
22
+ });
23
+ invariant(routeId, `Could not find routeId for matchId "${props.matchId}". Please file an issue!`);
24
+ const route = () => router.routesById[routeId()];
25
+ const PendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
26
+ const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
27
+ const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
28
+ const routeNotFoundComponent = () => {
29
+ var _a;
30
+ return route().isRoot ? (
31
+ // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component
32
+ route().options.notFoundComponent ?? ((_a = router.options.notFoundRoute) == null ? void 0 : _a.options.component)
33
+ ) : route().options.notFoundComponent;
34
+ };
35
+ const ResolvedSuspenseBoundary = () => {
36
+ var _a;
37
+ return (
38
+ // If we're on the root route, allow forcefully wrapping in suspense
39
+ (!route().isRoot || route().options.wrapInSuspense) && (route().options.wrapInSuspense ?? PendingComponent() ?? ((_a = route().options.errorComponent) == null ? void 0 : _a.preload)) ? Solid.Suspense : SafeFragment
40
+ );
41
+ };
42
+ const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
43
+ const ResolvedNotFoundBoundary = () => routeNotFoundComponent() ? CatchNotFound : SafeFragment;
44
+ const resetKey = useRouterState({
45
+ select: (s) => s.loadedAt
46
+ });
47
+ const parentRouteId = useRouterState({
48
+ select: (s) => {
49
+ var _a;
50
+ const index = s.matches.findIndex((d) => d.id === props.matchId);
51
+ return (_a = s.matches[index - 1]) == null ? void 0 : _a.routeId;
52
+ }
53
+ });
54
+ return [createComponent(matchContext.Provider, {
55
+ value: () => props.matchId,
56
+ get children() {
57
+ return createComponent(Dynamic, {
58
+ get component() {
59
+ return ResolvedSuspenseBoundary();
60
+ },
61
+ get fallback() {
62
+ return createComponent(Dynamic, {
63
+ get component() {
64
+ return PendingComponent();
65
+ }
66
+ });
67
+ },
68
+ get children() {
69
+ return createComponent(Dynamic, {
70
+ get component() {
71
+ return ResolvedCatchBoundary();
72
+ },
73
+ getResetKey: () => resetKey(),
74
+ get errorComponent() {
75
+ return routeErrorComponent() || ErrorComponent;
76
+ },
77
+ onCatch: (error) => {
78
+ var _a;
79
+ if (isNotFound(error)) throw error;
80
+ warning(false, `Error in route match: ${props.matchId}`);
81
+ (_a = routeOnCatch()) == null ? void 0 : _a(error);
82
+ },
83
+ get children() {
84
+ return createComponent(Dynamic, {
85
+ get component() {
86
+ return ResolvedNotFoundBoundary();
87
+ },
88
+ fallback: (error) => {
89
+ if (!routeNotFoundComponent() || error.routeId && error.routeId !== routeId || !error.routeId && !route().isRoot) throw error;
90
+ return createComponent(Dynamic, mergeProps({
91
+ get component() {
92
+ return routeNotFoundComponent();
93
+ }
94
+ }, error));
95
+ },
96
+ get children() {
97
+ return createComponent(MatchInner, {
98
+ get matchId() {
99
+ return props.matchId;
100
+ }
101
+ });
102
+ }
103
+ });
104
+ }
105
+ });
106
+ }
107
+ });
108
+ }
109
+ }), memo(() => memo(() => parentRouteId() === rootRouteId)() ? [createComponent(OnRendered, {}), createComponent(ScrollRestoration, {})] : null)];
110
+ };
111
+ function OnRendered() {
112
+ const router = useRouter();
113
+ const location = useRouterState({
114
+ select: (s) => {
115
+ var _a;
116
+ return (_a = s.resolvedLocation) == null ? void 0 : _a.state.key;
117
+ }
118
+ });
119
+ Solid.createEffect(Solid.on([location], () => {
120
+ router.emit({
121
+ type: "onRendered",
122
+ ...getLocationChangeInfo(router.state)
123
+ });
124
+ }));
125
+ return null;
126
+ }
127
+ const MatchInner = (props) => {
128
+ const router = useRouter();
129
+ const matchState = useRouterState({
130
+ select: (s) => {
131
+ const matchIndex = s.matches.findIndex((d) => d.id === props.matchId);
132
+ const match2 = s.matches[matchIndex];
133
+ const routeId = match2.routeId;
134
+ const remountFn = router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps;
135
+ const remountDeps = remountFn == null ? void 0 : remountFn({
136
+ routeId,
137
+ loaderDeps: match2.loaderDeps,
138
+ params: match2._strictParams,
139
+ search: match2._strictSearch
140
+ });
141
+ const key = remountDeps ? JSON.stringify(remountDeps) : void 0;
142
+ return {
143
+ key,
144
+ routeId,
145
+ match: pick(match2, ["id", "status", "error"])
146
+ };
147
+ }
148
+ });
149
+ const route = () => router.routesById[matchState().routeId];
150
+ const match = () => matchState().match;
151
+ const out = () => {
152
+ const Comp = route().options.component ?? router.options.defaultComponent;
153
+ if (Comp) {
154
+ return createComponent(Comp, {});
155
+ }
156
+ return createComponent(Outlet, {});
157
+ };
158
+ return createComponent(Solid.Switch, {
159
+ get children() {
160
+ return [createComponent(Solid.Match, {
161
+ get when() {
162
+ return match().status === "notFound";
163
+ },
164
+ children: (_) => {
165
+ invariant(isNotFound(match().error), "Expected a notFound error");
166
+ return renderRouteNotFound(router, route(), match().error);
167
+ }
168
+ }), createComponent(Solid.Match, {
169
+ get when() {
170
+ return match().status === "redirected";
171
+ },
172
+ children: (_) => {
173
+ invariant(isRedirect(match().error), "Expected a redirect error");
174
+ const [loaderResult] = Solid.createResource(async () => {
175
+ var _a;
176
+ await new Promise((r) => setTimeout(r, 0));
177
+ return (_a = router.getMatch(match().id)) == null ? void 0 : _a.loadPromise;
178
+ });
179
+ return memo(loaderResult);
180
+ }
181
+ }), createComponent(Solid.Match, {
182
+ get when() {
183
+ return match().status === "error";
184
+ },
185
+ children: (_) => {
186
+ if (router.isServer) {
187
+ const RouteErrorComponent = (route().options.errorComponent ?? router.options.defaultErrorComponent) || ErrorComponent;
188
+ return createComponent(RouteErrorComponent, {
189
+ get error() {
190
+ return match().error;
191
+ },
192
+ info: {
193
+ componentStack: ""
194
+ }
195
+ });
196
+ }
197
+ throw match().error;
198
+ }
199
+ }), createComponent(Solid.Match, {
200
+ get when() {
201
+ return match().status === "pending";
202
+ },
203
+ children: (_) => {
204
+ var _a;
205
+ const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
206
+ if (pendingMinMs && !((_a = router.getMatch(match().id)) == null ? void 0 : _a.minPendingPromise)) {
207
+ if (!router.isServer) {
208
+ const minPendingPromise = createControlledPromise();
209
+ Promise.resolve().then(() => {
210
+ router.updateMatch(match().id, (prev) => ({
211
+ ...prev,
212
+ minPendingPromise
213
+ }));
214
+ });
215
+ setTimeout(() => {
216
+ minPendingPromise.resolve();
217
+ router.updateMatch(match().id, (prev) => ({
218
+ ...prev,
219
+ minPendingPromise: void 0
220
+ }));
221
+ }, pendingMinMs);
222
+ }
223
+ }
224
+ const [loaderResult] = Solid.createResource(async () => {
225
+ var _a2;
226
+ await new Promise((r) => setTimeout(r, 0));
227
+ return (_a2 = router.getMatch(match().id)) == null ? void 0 : _a2.loadPromise;
228
+ });
229
+ return memo(loaderResult);
230
+ }
231
+ }), createComponent(Solid.Match, {
232
+ get when() {
233
+ return match().status === "success";
234
+ },
235
+ get children() {
236
+ return out();
237
+ }
238
+ })];
239
+ }
240
+ });
241
+ };
242
+ const Outlet = () => {
243
+ const router = useRouter();
244
+ const matchId = Solid.useContext(matchContext);
245
+ const routeId = useRouterState({
246
+ select: (s) => {
247
+ var _a;
248
+ return (_a = s.matches.find((d) => d.id === matchId())) == null ? void 0 : _a.routeId;
249
+ }
250
+ });
251
+ const route = () => router.routesById[routeId()];
252
+ const parentGlobalNotFound = useRouterState({
253
+ select: (s) => {
254
+ const matches = s.matches;
255
+ const parentMatch = matches.find((d) => d.id === matchId());
256
+ invariant(parentMatch, `Could not find parent match for matchId "${matchId()}"`);
257
+ return parentMatch.globalNotFound;
258
+ }
259
+ });
260
+ const childMatchId = useRouterState({
261
+ select: (s) => {
262
+ var _a;
263
+ const matches = s.matches;
264
+ const index = matches.findIndex((d) => d.id === matchId());
265
+ const v = (_a = matches[index + 1]) == null ? void 0 : _a.id;
266
+ return v;
267
+ }
268
+ });
269
+ return createComponent(Solid.Switch, {
270
+ get children() {
271
+ return [createComponent(Solid.Match, {
272
+ get when() {
273
+ return parentGlobalNotFound();
274
+ },
275
+ get children() {
276
+ return renderRouteNotFound(router, route(), void 0);
277
+ }
278
+ }), createComponent(Solid.Match, {
279
+ get when() {
280
+ return childMatchId();
281
+ },
282
+ children: (matchId2) => {
283
+ return createComponent(Solid.Show, {
284
+ get when() {
285
+ return matchId2() === rootRouteId;
286
+ },
287
+ get fallback() {
288
+ return createComponent(Match, {
289
+ get matchId() {
290
+ return matchId2();
291
+ }
292
+ });
293
+ },
294
+ get children() {
295
+ return createComponent(Solid.Suspense, {
296
+ get fallback() {
297
+ return createComponent(Dynamic, {
298
+ get component() {
299
+ return router.options.defaultPendingComponent;
300
+ }
301
+ });
302
+ },
303
+ get children() {
304
+ return createComponent(Match, {
305
+ get matchId() {
306
+ return matchId2();
307
+ }
308
+ });
309
+ }
310
+ });
311
+ }
312
+ });
313
+ }
314
+ })];
315
+ }
316
+ });
317
+ };
318
+ export {
319
+ Match,
320
+ MatchInner,
321
+ Outlet
322
+ };
323
+ //# sourceMappingURL=Match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Match.js","sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n pick,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound, isNotFound } from './not-found'\nimport { isRedirect } from './redirects'\nimport { matchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute } from './route'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) => {\n return s.matches.find((d) => d.id === props.matchId)?.routeId as string\n },\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${props.matchId}\". Please file an issue!`,\n )\n\n const route: () => AnyRoute = () => router.routesById[routeId()]\n\n const PendingComponent = () =>\n route().options.pendingComponent ?? router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const ResolvedSuspenseBoundary = () =>\n // If we're on the root route, allow forcefully wrapping in suspense\n (!route().isRoot || route().options.wrapInSuspense) &&\n (route().options.wrapInSuspense ??\n PendingComponent() ??\n (route().options.errorComponent as any)?.preload)\n ? Solid.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const parentRouteId = useRouterState({\n select: (s) => {\n const index = s.matches.findIndex((d) => d.id === props.matchId)\n return s.matches[index - 1]?.routeId as string\n },\n })\n\n return (\n <>\n <matchContext.Provider value={() => props.matchId}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={<Dynamic component={PendingComponent()} />}\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => resetKey()}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n warning(false, `Error in route match: ${props.matchId}`)\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (error.routeId && error.routeId !== routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <MatchInner matchId={props.matchId} />\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </matchContext.Provider>\n\n {parentRouteId() === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </>\n )\n}\n\n// On Rendered can't happen above the root layout because it actually\n// renders a dummy dom element to track the rendered state of the app.\n// We render a script tag with a key that changes based on the current\n// location state.key. Also, because it's below the root layout, it\n// allows us to fire onRendered events even after a hydration mismatch\n// error that occurred above the root layout (like bad head/link tags,\n// which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = useRouterState({\n select: (s) => {\n return s.resolvedLocation?.state.key\n },\n })\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (props: { matchId: string }): any => {\n const router = useRouter()\n\n // { match, key, routeId } =\n const matchState: Solid.Accessor<any> = useRouterState({\n select: (s) => {\n const matchIndex = s.matches.findIndex((d) => d.id === props.matchId)\n const match = s.matches[matchIndex]!\n const routeId = match.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: pick(match, ['id', 'status', 'error']),\n }\n },\n })\n\n const route = () => router.routesById[matchState().routeId]!\n\n // function useChangedDiff(value: any) {\n // const ref = Solid.useRef(value)\n // const changed = ref.current !== value\n // if (changed) {\n // console.log(\n // 'Changed:',\n // value,\n // Object.fromEntries(\n // Object.entries(value).filter(\n // ([key, val]) => val !== ref.current[key],\n // ),\n // ),\n // )\n // }\n // ref.current = value\n // }\n\n // useChangedDiff(match)\n const match = () => matchState().match\n\n const out = () => {\n const Comp = route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n return (\n <Solid.Switch>\n <Solid.Match when={match().status === 'notFound'}>\n {(_) => {\n invariant(isNotFound(match().error), 'Expected a notFound error')\n\n return renderRouteNotFound(router, route(), match().error)\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'redirected'}>\n {(_) => {\n invariant(isRedirect(match().error), 'Expected a redirect error')\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'error'}>\n {(_) => {\n if (router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={match().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw match().error\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ?? router.options.defaultPendingMinMs\n\n if (pendingMinMs && !router.getMatch(match().id)?.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!router.isServer) {\n const minPendingPromise = createControlledPromise<void>()\n\n Promise.resolve().then(() => {\n router.updateMatch(match().id, (prev) => ({\n ...prev,\n minPendingPromise,\n }))\n })\n\n setTimeout(() => {\n minPendingPromise.resolve()\n\n // We've handled the minPendingPromise, so we can delete it\n router.updateMatch(match().id, (prev) => ({\n ...prev,\n minPendingPromise: undefined,\n }))\n }, pendingMinMs)\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'success'}>{out()}</Solid.Match>\n </Solid.Switch>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const matchId = Solid.useContext(matchContext)\n const routeId = useRouterState({\n select: (s) => s.matches.find((d) => d.id === matchId())?.routeId as string,\n })\n\n const route = () => router.routesById[routeId()]!\n\n const parentGlobalNotFound = useRouterState({\n select: (s) => {\n const matches = s.matches\n const parentMatch = matches.find((d) => d.id === matchId())\n invariant(\n parentMatch,\n `Could not find parent match for matchId \"${matchId()}\"`,\n )\n return parentMatch.globalNotFound\n },\n })\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n const v = matches[index + 1]?.id\n return v\n },\n })\n\n return (\n <Solid.Switch>\n <Solid.Match when={parentGlobalNotFound()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Match>\n <Solid.Match when={childMatchId()}>\n {(matchId) => {\n // const nextMatch = <Match matchId={matchId()} />\n\n return (\n <Solid.Show\n when={matchId() === rootRouteId}\n fallback={<Match matchId={matchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={matchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Match>\n </Solid.Switch>\n )\n}\n"],"names":["Match","props","router","useRouter","routeId","useRouterState","select","s","matches","find","d","id","matchId","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","ResolvedSuspenseBoundary","wrapInSuspense","preload","Solid","Suspense","SafeFragment","ResolvedCatchBoundary","CatchBoundary","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","_$createComponent","matchContext","Provider","value","children","Dynamic","fallback","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","MatchInner","_$memo","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","key","createEffect","on","emit","type","getLocationChangeInfo","matchState","matchIndex","match","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","JSON","stringify","undefined","pick","out","Comp","defaultComponent","Outlet","Switch","when","status","_","renderRouteNotFound","isRedirect","loaderResult","createResource","Promise","r","setTimeout","getMatch","loadPromise","isServer","RouteErrorComponent","info","componentStack","pendingMinMs","defaultPendingMinMs","minPendingPromise","createControlledPromise","resolve","then","updateMatch","prev","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","Show"],"mappings":"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"}