@tanstack/solid-router 1.121.0-alpha.22 → 1.121.0-alpha.28

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 (265) hide show
  1. package/dist/cjs/Asset.cjs +65 -21
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/Asset.d.cts +2 -1
  4. package/dist/cjs/CatchBoundary.cjs +14 -15
  5. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  6. package/dist/cjs/ClientOnly.cjs +12 -14
  7. package/dist/cjs/ClientOnly.cjs.map +1 -1
  8. package/dist/cjs/ClientOnly.d.cts +0 -20
  9. package/dist/cjs/HeadContent.cjs +28 -23
  10. package/dist/cjs/HeadContent.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +167 -141
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +26 -24
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/Matches.d.cts +1 -0
  16. package/dist/cjs/RouterProvider.cjs +5 -5
  17. package/dist/cjs/RouterProvider.cjs.map +1 -1
  18. package/dist/cjs/SafeFragment.cjs +2 -2
  19. package/dist/cjs/SafeFragment.cjs.map +1 -1
  20. package/dist/cjs/ScriptOnce.cjs +4 -9
  21. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  22. package/dist/cjs/ScriptOnce.d.cts +1 -1
  23. package/dist/cjs/Scripts.cjs +9 -13
  24. package/dist/cjs/Scripts.cjs.map +1 -1
  25. package/dist/cjs/ScrollRestoration.cjs +3 -4
  26. package/dist/cjs/ScrollRestoration.cjs.map +1 -1
  27. package/dist/cjs/Transitioner.cjs +9 -8
  28. package/dist/cjs/Transitioner.cjs.map +1 -1
  29. package/dist/cjs/awaited.cjs +2 -2
  30. package/dist/cjs/awaited.cjs.map +1 -1
  31. package/dist/cjs/fileRoute.cjs +5 -5
  32. package/dist/cjs/fileRoute.cjs.map +1 -1
  33. package/dist/cjs/index.cjs +0 -12
  34. package/dist/cjs/index.cjs.map +1 -1
  35. package/dist/cjs/index.d.cts +3 -6
  36. package/dist/cjs/lazyRouteComponent.cjs +6 -26
  37. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  38. package/dist/cjs/lazyRouteComponent.d.cts +1 -1
  39. package/dist/cjs/link.cjs +37 -31
  40. package/dist/cjs/link.cjs.map +1 -1
  41. package/dist/cjs/not-found.cjs +5 -7
  42. package/dist/cjs/not-found.cjs.map +1 -1
  43. package/dist/cjs/renderRouteNotFound.cjs +4 -4
  44. package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
  45. package/dist/cjs/route.cjs +16 -16
  46. package/dist/cjs/route.cjs.map +1 -1
  47. package/dist/cjs/route.d.cts +14 -5
  48. package/dist/cjs/router.cjs.map +1 -1
  49. package/dist/cjs/routerContext.cjs.map +1 -1
  50. package/dist/cjs/scroll-restoration.cjs +12 -6
  51. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  52. package/dist/cjs/ssr/RouterClient.cjs +45 -0
  53. package/dist/cjs/ssr/RouterClient.cjs.map +1 -0
  54. package/dist/cjs/ssr/RouterClient.d.cts +4 -0
  55. package/dist/cjs/ssr/RouterServer.cjs +56 -0
  56. package/dist/cjs/ssr/RouterServer.cjs.map +1 -0
  57. package/dist/cjs/ssr/RouterServer.d.cts +5 -0
  58. package/dist/cjs/ssr/client.cjs +5 -0
  59. package/dist/cjs/ssr/client.cjs.map +1 -0
  60. package/dist/cjs/ssr/client.d.cts +1 -0
  61. package/dist/cjs/ssr/defaultRenderHandler.cjs +18 -0
  62. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -0
  63. package/dist/cjs/ssr/defaultRenderHandler.d.cts +1 -0
  64. package/dist/cjs/ssr/defaultStreamHandler.cjs +20 -0
  65. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -0
  66. package/dist/cjs/ssr/defaultStreamHandler.d.cts +1 -0
  67. package/dist/cjs/ssr/renderRouterToStream.cjs +45 -0
  68. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -0
  69. package/dist/cjs/ssr/renderRouterToStream.d.cts +8 -0
  70. package/dist/cjs/ssr/renderRouterToString.cjs +43 -0
  71. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -0
  72. package/dist/cjs/ssr/renderRouterToString.d.cts +7 -0
  73. package/dist/cjs/ssr/server.cjs +20 -0
  74. package/dist/cjs/ssr/server.cjs.map +1 -0
  75. package/dist/cjs/ssr/server.d.cts +6 -0
  76. package/dist/cjs/useBlocker.cjs +41 -35
  77. package/dist/cjs/useBlocker.cjs.map +1 -1
  78. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  79. package/dist/cjs/useLoaderData.cjs.map +1 -1
  80. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  81. package/dist/cjs/useLocation.cjs +1 -1
  82. package/dist/cjs/useLocation.cjs.map +1 -1
  83. package/dist/cjs/useMatch.cjs.map +1 -1
  84. package/dist/cjs/useNavigate.cjs +9 -3
  85. package/dist/cjs/useNavigate.cjs.map +1 -1
  86. package/dist/cjs/useParams.cjs.map +1 -1
  87. package/dist/cjs/useRouter.cjs +1 -1
  88. package/dist/cjs/useRouter.cjs.map +1 -1
  89. package/dist/cjs/useRouterState.cjs +3 -3
  90. package/dist/cjs/useRouterState.cjs.map +1 -1
  91. package/dist/cjs/useSearch.cjs.map +1 -1
  92. package/dist/cjs/utils.cjs +1 -1
  93. package/dist/cjs/utils.cjs.map +1 -1
  94. package/dist/esm/Asset.d.ts +2 -1
  95. package/dist/esm/Asset.js +60 -16
  96. package/dist/esm/Asset.js.map +1 -1
  97. package/dist/esm/CatchBoundary.js +1 -2
  98. package/dist/esm/CatchBoundary.js.map +1 -1
  99. package/dist/esm/ClientOnly.d.ts +0 -20
  100. package/dist/esm/ClientOnly.js +11 -13
  101. package/dist/esm/ClientOnly.js.map +1 -1
  102. package/dist/esm/HeadContent.js +23 -18
  103. package/dist/esm/HeadContent.js.map +1 -1
  104. package/dist/esm/Match.js +148 -122
  105. package/dist/esm/Match.js.map +1 -1
  106. package/dist/esm/Matches.d.ts +1 -0
  107. package/dist/esm/Matches.js +18 -16
  108. package/dist/esm/Matches.js.map +1 -1
  109. package/dist/esm/RouterProvider.js.map +1 -1
  110. package/dist/esm/SafeFragment.js.map +1 -1
  111. package/dist/esm/ScriptOnce.d.ts +1 -1
  112. package/dist/esm/ScriptOnce.js +2 -7
  113. package/dist/esm/ScriptOnce.js.map +1 -1
  114. package/dist/esm/Scripts.js +7 -11
  115. package/dist/esm/Scripts.js.map +1 -1
  116. package/dist/esm/ScrollRestoration.js +3 -4
  117. package/dist/esm/ScrollRestoration.js.map +1 -1
  118. package/dist/esm/Transitioner.js +9 -8
  119. package/dist/esm/Transitioner.js.map +1 -1
  120. package/dist/esm/awaited.js.map +1 -1
  121. package/dist/esm/fileRoute.js +5 -5
  122. package/dist/esm/fileRoute.js.map +1 -1
  123. package/dist/esm/index.d.ts +3 -6
  124. package/dist/esm/index.js +2 -8
  125. package/dist/esm/index.js.map +1 -1
  126. package/dist/esm/lazyRouteComponent.d.ts +1 -1
  127. package/dist/esm/lazyRouteComponent.js +2 -22
  128. package/dist/esm/lazyRouteComponent.js.map +1 -1
  129. package/dist/esm/link.js +34 -28
  130. package/dist/esm/link.js.map +1 -1
  131. package/dist/esm/not-found.js +2 -4
  132. package/dist/esm/not-found.js.map +1 -1
  133. package/dist/esm/renderRouteNotFound.js.map +1 -1
  134. package/dist/esm/route.d.ts +14 -5
  135. package/dist/esm/route.js +12 -12
  136. package/dist/esm/route.js.map +1 -1
  137. package/dist/esm/router.js.map +1 -1
  138. package/dist/esm/routerContext.js.map +1 -1
  139. package/dist/esm/scroll-restoration.js +10 -4
  140. package/dist/esm/scroll-restoration.js.map +1 -1
  141. package/dist/esm/ssr/RouterClient.d.ts +4 -0
  142. package/dist/esm/ssr/RouterClient.js +45 -0
  143. package/dist/esm/ssr/RouterClient.js.map +1 -0
  144. package/dist/esm/ssr/RouterServer.d.ts +5 -0
  145. package/dist/esm/ssr/RouterServer.js +56 -0
  146. package/dist/esm/ssr/RouterServer.js.map +1 -0
  147. package/dist/esm/ssr/client.d.ts +1 -0
  148. package/dist/esm/ssr/client.js +5 -0
  149. package/dist/esm/ssr/client.js.map +1 -0
  150. package/dist/esm/ssr/defaultRenderHandler.d.ts +1 -0
  151. package/dist/esm/ssr/defaultRenderHandler.js +18 -0
  152. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -0
  153. package/dist/esm/ssr/defaultStreamHandler.d.ts +1 -0
  154. package/dist/esm/ssr/defaultStreamHandler.js +20 -0
  155. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -0
  156. package/dist/esm/ssr/renderRouterToStream.d.ts +8 -0
  157. package/dist/esm/ssr/renderRouterToStream.js +28 -0
  158. package/dist/esm/ssr/renderRouterToStream.js.map +1 -0
  159. package/dist/esm/ssr/renderRouterToString.d.ts +7 -0
  160. package/dist/esm/ssr/renderRouterToString.js +26 -0
  161. package/dist/esm/ssr/renderRouterToString.js.map +1 -0
  162. package/dist/esm/ssr/server.d.ts +6 -0
  163. package/dist/esm/ssr/server.js +14 -0
  164. package/dist/esm/ssr/server.js.map +1 -0
  165. package/dist/esm/useBlocker.js +41 -35
  166. package/dist/esm/useBlocker.js.map +1 -1
  167. package/dist/esm/useCanGoBack.js.map +1 -1
  168. package/dist/esm/useLoaderData.js.map +1 -1
  169. package/dist/esm/useLoaderDeps.js.map +1 -1
  170. package/dist/esm/useLocation.js +1 -1
  171. package/dist/esm/useLocation.js.map +1 -1
  172. package/dist/esm/useMatch.js.map +1 -1
  173. package/dist/esm/useNavigate.js +9 -3
  174. package/dist/esm/useNavigate.js.map +1 -1
  175. package/dist/esm/useParams.js.map +1 -1
  176. package/dist/esm/useRouter.js +1 -1
  177. package/dist/esm/useRouter.js.map +1 -1
  178. package/dist/esm/useRouterState.js +3 -3
  179. package/dist/esm/useRouterState.js.map +1 -1
  180. package/dist/esm/useSearch.js.map +1 -1
  181. package/dist/esm/utils.js +1 -1
  182. package/dist/esm/utils.js.map +1 -1
  183. package/dist/source/Asset.d.ts +2 -1
  184. package/dist/source/Asset.jsx +45 -7
  185. package/dist/source/Asset.jsx.map +1 -1
  186. package/dist/source/ClientOnly.d.ts +0 -20
  187. package/dist/source/ClientOnly.jsx +3 -29
  188. package/dist/source/ClientOnly.jsx.map +1 -1
  189. package/dist/source/HeadContent.jsx +13 -0
  190. package/dist/source/HeadContent.jsx.map +1 -1
  191. package/dist/source/Match.jsx +74 -61
  192. package/dist/source/Match.jsx.map +1 -1
  193. package/dist/source/Matches.d.ts +1 -0
  194. package/dist/source/Matches.jsx +14 -11
  195. package/dist/source/Matches.jsx.map +1 -1
  196. package/dist/source/ScriptOnce.d.ts +1 -1
  197. package/dist/source/ScriptOnce.jsx +2 -12
  198. package/dist/source/ScriptOnce.jsx.map +1 -1
  199. package/dist/source/Transitioner.jsx +8 -8
  200. package/dist/source/Transitioner.jsx.map +1 -1
  201. package/dist/source/index.d.ts +3 -6
  202. package/dist/source/index.jsx +1 -4
  203. package/dist/source/index.jsx.map +1 -1
  204. package/dist/source/lazyRouteComponent.d.ts +1 -1
  205. package/dist/source/lazyRouteComponent.jsx +7 -21
  206. package/dist/source/lazyRouteComponent.jsx.map +1 -1
  207. package/dist/source/link.jsx +22 -17
  208. package/dist/source/link.jsx.map +1 -1
  209. package/dist/source/not-found.jsx.map +1 -1
  210. package/dist/source/route.d.ts +14 -5
  211. package/dist/source/route.jsx.map +1 -1
  212. package/dist/source/scroll-restoration.jsx +9 -2
  213. package/dist/source/scroll-restoration.jsx.map +1 -1
  214. package/dist/source/ssr/RouterClient.d.ts +4 -0
  215. package/dist/source/ssr/RouterClient.jsx +28 -0
  216. package/dist/source/ssr/RouterClient.jsx.map +1 -0
  217. package/dist/source/ssr/RouterServer.d.ts +5 -0
  218. package/dist/source/ssr/RouterServer.jsx +38 -0
  219. package/dist/source/ssr/RouterServer.jsx.map +1 -0
  220. package/dist/source/ssr/client.d.ts +1 -0
  221. package/dist/source/ssr/client.js +2 -0
  222. package/dist/source/ssr/client.js.map +1 -0
  223. package/dist/source/ssr/defaultRenderHandler.d.ts +1 -0
  224. package/dist/source/ssr/defaultRenderHandler.jsx +9 -0
  225. package/dist/source/ssr/defaultRenderHandler.jsx.map +1 -0
  226. package/dist/source/ssr/defaultStreamHandler.d.ts +1 -0
  227. package/dist/source/ssr/defaultStreamHandler.jsx +10 -0
  228. package/dist/source/ssr/defaultStreamHandler.jsx.map +1 -0
  229. package/dist/source/ssr/renderRouterToStream.d.ts +8 -0
  230. package/dist/source/ssr/renderRouterToStream.jsx +17 -0
  231. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -0
  232. package/dist/source/ssr/renderRouterToString.d.ts +7 -0
  233. package/dist/source/ssr/renderRouterToString.jsx +20 -0
  234. package/dist/source/ssr/renderRouterToString.jsx.map +1 -0
  235. package/dist/source/ssr/server.d.ts +6 -0
  236. package/dist/source/ssr/server.js +7 -0
  237. package/dist/source/ssr/server.js.map +1 -0
  238. package/dist/source/useBlocker.jsx +44 -27
  239. package/dist/source/useBlocker.jsx.map +1 -1
  240. package/dist/source/useNavigate.jsx +12 -2
  241. package/dist/source/useNavigate.jsx.map +1 -1
  242. package/package.json +34 -7
  243. package/src/Asset.tsx +76 -7
  244. package/src/ClientOnly.tsx +5 -32
  245. package/src/HeadContent.tsx +17 -0
  246. package/src/Match.tsx +103 -81
  247. package/src/Matches.tsx +28 -19
  248. package/src/ScriptOnce.tsx +1 -13
  249. package/src/Transitioner.tsx +7 -7
  250. package/src/index.tsx +1 -18
  251. package/src/lazyRouteComponent.tsx +6 -26
  252. package/src/link.tsx +29 -21
  253. package/src/not-found.tsx +1 -1
  254. package/src/route.tsx +16 -5
  255. package/src/scroll-restoration.tsx +10 -3
  256. package/src/ssr/RouterClient.tsx +43 -0
  257. package/src/ssr/RouterServer.tsx +60 -0
  258. package/src/ssr/client.ts +1 -0
  259. package/src/ssr/defaultRenderHandler.tsx +12 -0
  260. package/src/ssr/defaultStreamHandler.tsx +13 -0
  261. package/src/ssr/renderRouterToStream.tsx +36 -0
  262. package/src/ssr/renderRouterToString.tsx +31 -0
  263. package/src/ssr/server.ts +6 -0
  264. package/src/useBlocker.tsx +48 -32
  265. package/src/useNavigate.tsx +14 -2
@@ -0,0 +1,8 @@
1
+ import { JSXElement } from 'solid-js';
2
+ import { AnyRouter } from '@tanstack/router-core';
3
+ export declare const renderRouterToStream: ({ request, router, responseHeaders, children, }: {
4
+ request: Request;
5
+ router: AnyRouter;
6
+ responseHeaders: Headers;
7
+ children: () => JSXElement;
8
+ }) => Promise<Response>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Solid = require("solid-js/web");
4
+ function _interopNamespaceDefault(e) {
5
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
6
+ if (e) {
7
+ for (const k in e) {
8
+ if (k !== "default") {
9
+ const d = Object.getOwnPropertyDescriptor(e, k);
10
+ Object.defineProperty(n, k, d.get ? d : {
11
+ enumerable: true,
12
+ get: () => e[k]
13
+ });
14
+ }
15
+ }
16
+ }
17
+ n.default = e;
18
+ return Object.freeze(n);
19
+ }
20
+ const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
21
+ const renderRouterToString = async ({
22
+ router,
23
+ responseHeaders,
24
+ children
25
+ }) => {
26
+ try {
27
+ let html = Solid__namespace.renderToString(children);
28
+ const injectedHtml = await Promise.all(router.serverSsr.injectedHtml).then((htmls) => htmls.join(""));
29
+ html = html.replace(`</body>`, `${injectedHtml}</body>`);
30
+ return new Response(html, {
31
+ status: router.state.statusCode,
32
+ headers: responseHeaders
33
+ });
34
+ } catch (error) {
35
+ console.error("Render to string error:", error);
36
+ return new Response("Internal Server Error", {
37
+ status: 500,
38
+ headers: responseHeaders
39
+ });
40
+ }
41
+ };
42
+ exports.renderRouterToString = renderRouterToString;
43
+ //# sourceMappingURL=renderRouterToString.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRouterToString.cjs","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport type { JSXElement } from 'solid-js'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToString = async ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n let html = Solid.renderToString(children)\n const injectedHtml = await Promise.all(router.serverSsr!.injectedHtml).then(\n (htmls) => htmls.join(''),\n )\n html = html.replace(`</body>`, `${injectedHtml}</body>`)\n return new Response(html, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","html","Solid","renderToString","injectedHtml","Promise","all","serverSsr","then","htmls","join","replace","Response","status","state","statusCode","headers","error","console"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,QAAIC,OAAOC,iBAAMC,eAAeH,QAAQ;AACxC,UAAMI,eAAe,MAAMC,QAAQC,IAAIR,OAAOS,UAAWH,YAAY,EAAEI,KACpEC,CAAAA,UAAUA,MAAMC,KAAK,EAAE,CAC1B;AACAT,WAAOA,KAAKU,QAAQ,WAAW,GAAGP,YAAY,SAAS;AACvD,WAAO,IAAIQ,SAASX,MAAM;AAAA,MACxBY,QAAQf,OAAOgB,MAAMC;AAAAA,MACrBC,SAASjB;AAAAA,IAAAA,CACV;AAAA,EACH,SAASkB,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASjB;AAAAA,IAAAA,CACV;AAAA,EACH;AACF;;"}
@@ -0,0 +1,7 @@
1
+ import { JSXElement } from 'solid-js';
2
+ import { AnyRouter } from '@tanstack/router-core';
3
+ export declare const renderRouterToString: ({ router, responseHeaders, children, }: {
4
+ router: AnyRouter;
5
+ responseHeaders: Headers;
6
+ children: () => JSXElement;
7
+ }) => Promise<Response>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const RouterServer = require("./RouterServer.cjs");
4
+ const defaultRenderHandler = require("./defaultRenderHandler.cjs");
5
+ const defaultStreamHandler = require("./defaultStreamHandler.cjs");
6
+ const renderRouterToStream = require("./renderRouterToStream.cjs");
7
+ const renderRouterToString = require("./renderRouterToString.cjs");
8
+ const server = require("@tanstack/router-core/ssr/server");
9
+ exports.RouterServer = RouterServer.RouterServer;
10
+ exports.defaultRenderHandler = defaultRenderHandler.defaultRenderHandler;
11
+ exports.defaultStreamHandler = defaultStreamHandler.defaultStreamHandler;
12
+ exports.renderRouterToStream = renderRouterToStream.renderRouterToStream;
13
+ exports.renderRouterToString = renderRouterToString.renderRouterToString;
14
+ Object.keys(server).forEach((k) => {
15
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
16
+ enumerable: true,
17
+ get: () => server[k]
18
+ });
19
+ });
20
+ //# sourceMappingURL=server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,6 @@
1
+ export { RouterServer } from './RouterServer.cjs';
2
+ export { defaultRenderHandler } from './defaultRenderHandler.cjs';
3
+ export { defaultStreamHandler } from './defaultStreamHandler.cjs';
4
+ export { renderRouterToStream } from './renderRouterToStream.cjs';
5
+ export { renderRouterToString } from './renderRouterToString.cjs';
6
+ export * from '@tanstack/router-core/ssr/server';
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Solid$1 = require("solid-js/web");
3
4
  const Solid = require("solid-js");
4
5
  const useRouter = require("./useRouter.cjs");
5
6
  function _interopNamespaceDefault(e) {
@@ -41,31 +42,32 @@ function _resolveBlockerOpts(opts, condition) {
41
42
  withResolver: false
42
43
  };
43
44
  }
44
- const shouldBlock = Boolean(opts.condition ?? true);
45
- const fn = opts.blockerFn;
45
+ const shouldBlock = Solid__namespace.createMemo(() => Boolean(opts.condition ?? true));
46
46
  const _customBlockerFn = async () => {
47
- if (shouldBlock && fn !== void 0) {
48
- return await fn();
47
+ if (shouldBlock() && opts.blockerFn !== void 0) {
48
+ return await opts.blockerFn();
49
49
  }
50
- return shouldBlock;
50
+ return shouldBlock();
51
51
  };
52
52
  return {
53
- shouldBlockFn: _customBlockerFn,
54
- enableBeforeUnload: shouldBlock,
55
- withResolver: fn === void 0
53
+ get shouldBlockFn() {
54
+ return _customBlockerFn;
55
+ },
56
+ get enableBeforeUnload() {
57
+ return shouldBlock();
58
+ },
59
+ get withResolver() {
60
+ return opts.blockerFn === void 0;
61
+ }
56
62
  };
57
63
  }
58
64
  function useBlocker(opts, condition) {
59
- const {
60
- shouldBlockFn,
61
- enableBeforeUnload = true,
62
- disabled = false,
63
- withResolver = false
64
- } = _resolveBlockerOpts(opts, condition);
65
+ const props = Solid__namespace.mergeProps({
66
+ enableBeforeUnload: true,
67
+ disabled: false,
68
+ withResolver: false
69
+ }, _resolveBlockerOpts(opts, condition));
65
70
  const router = useRouter.useRouter();
66
- const {
67
- history
68
- } = router;
69
71
  const [resolver, setResolver] = Solid__namespace.createSignal({
70
72
  status: "idle",
71
73
  current: void 0,
@@ -92,12 +94,12 @@ function useBlocker(opts, condition) {
92
94
  }
93
95
  const current = getLocation(blockerFnArgs.currentLocation);
94
96
  const next = getLocation(blockerFnArgs.nextLocation);
95
- const shouldBlock = await shouldBlockFn({
97
+ const shouldBlock = await props.shouldBlockFn({
96
98
  action: blockerFnArgs.action,
97
99
  current,
98
100
  next
99
101
  });
100
- if (!withResolver) {
102
+ if (!props.withResolver) {
101
103
  return shouldBlock;
102
104
  }
103
105
  if (!shouldBlock) {
@@ -124,41 +126,45 @@ function useBlocker(opts, condition) {
124
126
  });
125
127
  return canNavigateAsync;
126
128
  };
127
- return disabled ? void 0 : history.block({
129
+ const disposeBlock = props.disabled ? void 0 : router.history.block({
128
130
  blockerFn: blockerFnComposed,
129
- enableBeforeUnload
131
+ enableBeforeUnload: props.enableBeforeUnload
130
132
  });
133
+ Solid__namespace.onCleanup(() => disposeBlock?.());
131
134
  });
132
135
  return resolver;
133
136
  }
134
137
  const _resolvePromptBlockerArgs = (props) => {
135
138
  if ("shouldBlockFn" in props) {
136
- return {
137
- ...props
138
- };
139
+ return props;
139
140
  }
140
- const shouldBlock = Boolean(props.condition ?? true);
141
- const fn = props.blockerFn;
141
+ const shouldBlock = Solid__namespace.createMemo(() => Boolean(props.condition ?? true));
142
142
  const _customBlockerFn = async () => {
143
- if (shouldBlock && fn !== void 0) {
144
- return await fn();
143
+ if (shouldBlock() && props.blockerFn !== void 0) {
144
+ return await props.blockerFn();
145
145
  }
146
146
  return shouldBlock;
147
147
  };
148
148
  return {
149
149
  shouldBlockFn: _customBlockerFn,
150
- enableBeforeUnload: shouldBlock,
151
- withResolver: fn === void 0
150
+ get enableBeforeUnload() {
151
+ return shouldBlock();
152
+ },
153
+ get withResolver() {
154
+ return props.blockerFn === void 0;
155
+ }
152
156
  };
153
157
  };
154
158
  function Block(opts) {
155
- const {
156
- children,
157
- ...rest
158
- } = opts;
159
+ const [propsWithChildren, rest] = Solid__namespace.splitProps(opts, ["children"]);
159
160
  const args = _resolvePromptBlockerArgs(rest);
160
161
  const resolver = useBlocker(args);
161
- return children ? typeof children === "function" ? children(resolver) : children : null;
162
+ const children = Solid__namespace.createMemo(() => {
163
+ const child = propsWithChildren.children;
164
+ if (resolver && typeof child === "function") return child(resolver());
165
+ return child;
166
+ });
167
+ return Solid$1.memo(children);
162
168
  }
163
169
  exports.Block = Block;
164
170
  exports.useBlocker = useBlocker;
@@ -1 +1 @@
1
- {"version":3,"file":"useBlocker.cjs","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Boolean(opts.condition ?? true)\n const fn = opts.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const {\n shouldBlockFn,\n enableBeforeUnload = true,\n disabled = false,\n withResolver = false,\n } = _resolveBlockerOpts(opts, condition)\n\n const router = useRouter()\n const { history } = router\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(undefined, location)\n const matchedRoutes = router.getMatchedRoutes(\n parsedLocation.pathname,\n undefined,\n )\n if (matchedRoutes.foundRoute === undefined) {\n throw new Error(`No route found for location ${location.href}`)\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n const shouldBlock = await shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n return disabled\n ? undefined\n : history.block({ blockerFn: blockerFnComposed, enableBeforeUnload })\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return { ...props }\n }\n\n const shouldBlock = Boolean(props.condition ?? true)\n const fn = props.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const { children, ...rest } = opts\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n return children\n ? typeof children === 'function'\n ? children(resolver as any)\n : children\n : null\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","fn","blockerFn","useBlocker","disabled","router","useRouter","history","resolver","setResolver","Solid","createSignal","status","current","next","action","proceed","reset","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","Error","href","routeId","id","fullPath","params","routeParams","search","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","block","_resolvePromptBlockerArgs","props","Block","children","rest","args"],"mappings":"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"}
1
+ {"version":3,"file":"useBlocker.cjs","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(undefined, location)\n const matchedRoutes = router.getMatchedRoutes(\n parsedLocation.pathname,\n undefined,\n )\n if (matchedRoutes.foundRoute === undefined) {\n throw new Error(`No route found for location ${location.href}`)\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","Solid","createMemo","blockerFn","useBlocker","props","mergeProps","disabled","router","useRouter","resolver","setResolver","createSignal","status","current","next","action","proceed","reset","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","Error","href","routeId","id","fullPath","params","routeParams","search","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","Block","propsWithChildren","rest","splitProps","args","children","child","_$memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoFA,SAASA,oBACPC,MACAC,WACgB;AAChB,MAAID,SAASE,QAAW;AACtB,WAAO;AAAA,MACLC,eAAeA,MAAM;AAAA,MACrBC,cAAc;AAAA,IAAA;AAAA,EAElB;AAEA,MAAI,mBAAmBJ,MAAM;AAC3B,WAAOA;AAAAA,EACT;AAEA,MAAI,OAAOA,SAAS,YAAY;AAC9B,UAAMK,eAAcC,QAAQL,aAAa,IAAI;AAE7C,UAAMM,oBAAmB,YAAY;AACnC,UAAIF,aAAa,QAAO,MAAML,KAAAA;AAC9B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACLG,eAAeI;AAAAA,MACfC,oBAAoBH;AAAAA,MACpBD,cAAc;AAAA,IAAA;AAAA,EAElB;AAEA,QAAMC,cAAcI,iBAAMC,WAAW,MAAMJ,QAAQN,KAAKC,aAAa,IAAI,CAAC;AAE1E,QAAMM,mBAAmB,YAAY;AACnC,QAAIF,YAAAA,KAAiBL,KAAKW,cAAcT,QAAW;AACjD,aAAO,MAAMF,KAAKW,UAAAA;AAAAA,IACpB;AACA,WAAON,YAAAA;AAAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAIF,gBAAgB;AAClB,aAAOI;AAAAA,IACT;AAAA,IACA,IAAIC,qBAAqB;AACvB,aAAOH,YAAAA;AAAAA,IACT;AAAA,IACA,IAAID,eAAe;AACjB,aAAOJ,KAAKW,cAAcT;AAAAA,IAC5B;AAAA,EAAA;AAEJ;AAwBO,SAASU,WACdZ,MACAC,WACwC;AACxC,QAAMY,QAAQJ,iBAAMK,WAClB;AAAA,IACEN,oBAAoB;AAAA,IACpBO,UAAU;AAAA,IACVX,cAAc;AAAA,EAAA,GAEhBL,oBAAoBC,MAAMC,SAAS,CACrC;AAEA,QAAMe,SAASC,UAAAA,UAAAA;AAEf,QAAM,CAACC,UAAUC,WAAW,IAAIV,iBAAMW,aAA8B;AAAA,IAClEC,QAAQ;AAAA,IACRC,SAASpB;AAAAA,IACTqB,MAAMrB;AAAAA,IACNsB,QAAQtB;AAAAA,IACRuB,SAASvB;AAAAA,IACTwB,OAAOxB;AAAAA,EAAAA,CACR;AAEDO,mBAAMkB,aAAa,MAAM;AACvB,UAAMC,oBAAoB,OAAOC,kBAAiC;AAChE,eAASC,YACPC,UAC0B;AAC1B,cAAMC,iBAAiBhB,OAAOiB,cAAc/B,QAAW6B,QAAQ;AAC/D,cAAMG,gBAAgBlB,OAAOmB,iBAC3BH,eAAeI,UACflC,MACF;AACA,YAAIgC,cAAcG,eAAenC,QAAW;AAC1C,gBAAM,IAAIoC,MAAM,+BAA+BP,SAASQ,IAAI,EAAE;AAAA,QAChE;AACA,eAAO;AAAA,UACLC,SAASN,cAAcG,WAAWI;AAAAA,UAClCC,UAAUR,cAAcG,WAAWK;AAAAA,UACnCN,UAAUJ,eAAeI;AAAAA,UACzBO,QAAQT,cAAcU;AAAAA,UACtBC,QAAQb,eAAea;AAAAA,QAAAA;AAAAA,MAE3B;AAEA,YAAMvB,UAAUQ,YAAYD,cAAciB,eAAe;AACzD,YAAMvB,OAAOO,YAAYD,cAAckB,YAAY;AAEnD,YAAM1C,cAAc,MAAMQ,MAAMV,cAAc;AAAA,QAC5CqB,QAAQK,cAAcL;AAAAA,QACtBF;AAAAA,QACAC;AAAAA,MAAAA,CACD;AACD,UAAI,CAACV,MAAMT,cAAc;AACvB,eAAOC;AAAAA,MACT;AAEA,UAAI,CAACA,aAAa;AAChB,eAAO;AAAA,MACT;AAEA,YAAM2C,UAAU,IAAIC,QAAkBC,CAAAA,YAAY;AAChD/B,oBAAY;AAAA,UACVE,QAAQ;AAAA,UACRC;AAAAA,UACAC;AAAAA,UACAC,QAAQK,cAAcL;AAAAA,UACtBC,SAASA,MAAMyB,QAAQ,KAAK;AAAA,UAC5BxB,OAAOA,MAAMwB,QAAQ,IAAI;AAAA,QAAA,CAC1B;AAAA,MACH,CAAC;AAED,YAAMC,mBAAmB,MAAMH;AAC/B7B,kBAAY;AAAA,QACVE,QAAQ;AAAA,QACRC,SAASpB;AAAAA,QACTqB,MAAMrB;AAAAA,QACNsB,QAAQtB;AAAAA,QACRuB,SAASvB;AAAAA,QACTwB,OAAOxB;AAAAA,MAAAA,CACR;AAED,aAAOiD;AAAAA,IACT;AAEA,UAAMC,eAAevC,MAAME,WACvBb,SACAc,OAAOqC,QAAQC,MAAM;AAAA,MACnB3C,WAAWiB;AAAAA,MACXpB,oBAAoBK,MAAML;AAAAA,IAAAA,CAC3B;AAELC,qBAAM8C,UAAU,MAAMH,gBAAgB;AAAA,EACxC,CAAC;AAED,SAAOlC;AACT;AAEA,MAAMsC,4BAA4BA,CAChC3C,UACmB;AACnB,MAAI,mBAAmBA,OAAO;AAC5B,WAAOA;AAAAA,EACT;AAEA,QAAMR,cAAcI,iBAAMC,WAAW,MAAMJ,QAAQO,MAAMZ,aAAa,IAAI,CAAC;AAE3E,QAAMM,mBAAmB,YAAY;AACnC,QAAIF,YAAAA,KAAiBQ,MAAMF,cAAcT,QAAW;AAClD,aAAO,MAAMW,MAAMF,UAAAA;AAAAA,IACrB;AACA,WAAON;AAAAA,EACT;AAEA,SAAO;AAAA,IACLF,eAAeI;AAAAA,IACf,IAAIC,qBAAqB;AACvB,aAAOH,YAAAA;AAAAA,IACT;AAAA,IACA,IAAID,eAAe;AACjB,aAAOS,MAAMF,cAAcT;AAAAA,IAC7B;AAAA,EAAA;AAEJ;AAYO,SAASuD,MAAMzD,MAAkD;AACtE,QAAM,CAAC0D,mBAAmBC,IAAI,IAAIlD,iBAAMmD,WAAW5D,MAAM,CAAC,UAAU,CAAC;AACrE,QAAM6D,OAAOL,0BAA0BG,IAAI;AAE3C,QAAMzC,WAAWN,WAAWiD,IAAI;AAChC,QAAMC,WAAWrD,iBAAMC,WAAW,MAAM;AACtC,UAAMqD,QAAQL,kBAAkBI;AAChC,QAAI5C,YAAY,OAAO6C,UAAU,WAAY,QAAOA,MAAM7C,UAAU;AACpE,WAAO6C;AAAAA,EACT,CAAC;AAED,SAAAC,QAAAA,KAAUF,QAAQ;AACpB;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCanGoBack.cjs","sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import { useRouterState } from './useRouterState'\n\nexport function useCanGoBack() {\n return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })\n}\n"],"names":["useRouterState"],"mappings":";;;AAEO,SAAS,eAAe;AACtB,SAAAA,eAAA,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,gBAAgB,GAAG;AAC7E;;"}
1
+ {"version":3,"file":"useCanGoBack.cjs","sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import { useRouterState } from './useRouterState'\n\nexport function useCanGoBack() {\n return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })\n}\n"],"names":["useRouterState"],"mappings":";;;AAEO,SAAS,eAAe;AAC7B,SAAOA,eAAAA,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,gBAAgB,GAAG;AAC7E;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLoaderData.cjs","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderData,\n StrictOrFrom,\n UseLoaderDataResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDataBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> {\n select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected\n}\n\nexport type UseLoaderDataOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>\n\nexport type UseLoaderDataRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,\n) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>\n\nexport function useLoaderData<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,\n): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n select: (s: any) => {\n return opts.select ? opts.select(s.loaderData) : s.loaderData\n },\n } as any) as any\n}\n"],"names":["useLoaderData","opts","useMatch","from","strict","select","s","loaderData"],"mappings":";;;AAkCO,SAASA,cAMdC,MACmE;AACnE,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,QAAQA,CAACC,MAAW;AAClB,aAAOL,KAAKI,SAASJ,KAAKI,OAAOC,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAAAA;AAAAA,EACrD,CACM;AACV;;"}
1
+ {"version":3,"file":"useLoaderData.cjs","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderData,\n StrictOrFrom,\n UseLoaderDataResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDataBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> {\n select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected\n}\n\nexport type UseLoaderDataOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>\n\nexport type UseLoaderDataRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,\n) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>\n\nexport function useLoaderData<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,\n): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n select: (s: any) => {\n return opts.select ? opts.select(s.loaderData) : s.loaderData\n },\n } as any) as any\n}\n"],"names":["useLoaderData","opts","useMatch","from","strict","select","s","loaderData"],"mappings":";;;AAkCO,SAASA,cAMdC,MACmE;AACnE,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,QAAQA,CAACC,MAAW;AAClB,aAAOL,KAAKI,SAASJ,KAAKI,OAAOC,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IACrD;AAAA,EAAA,CACM;AACV;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLoaderDeps.cjs","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderDeps,\n StrictOrFrom,\n UseLoaderDepsResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDepsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n> {\n select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected\n}\n\nexport type UseLoaderDepsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom> &\n UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>\n\nexport type UseLoaderDepsRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,\n) => UseLoaderDepsResult<TRouter, TId, TSelected>\n\nexport function useLoaderDeps<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TSelected = unknown,\n>(\n opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,\n): UseLoaderDepsResult<TRouter, TFrom, TSelected> {\n const { select, ...rest } = opts\n return useMatch({\n ...rest,\n select: (s) => {\n return select ? select(s.loaderDeps) : s.loaderDeps\n },\n }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>\n}\n"],"names":["useLoaderDeps","opts","select","rest","useMatch","s","loaderDeps"],"mappings":";;;AA+BO,SAASA,cAKdC,MACgD;AAC1C,QAAA;AAAA,IAAEC;AAAAA,IAAQ,GAAGC;AAAAA,EAAAA,IAASF;AAC5B,SAAOG,kBAAS;AAAA,IACd,GAAGD;AAAAA,IACHD,QAASG,CAAM,MAAA;AACb,aAAOH,SAASA,OAAOG,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAAAA;AAAAA,EAC3C,CACD;AACH;;"}
1
+ {"version":3,"file":"useLoaderDeps.cjs","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderDeps,\n StrictOrFrom,\n UseLoaderDepsResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDepsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n> {\n select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected\n}\n\nexport type UseLoaderDepsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom> &\n UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>\n\nexport type UseLoaderDepsRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,\n) => UseLoaderDepsResult<TRouter, TId, TSelected>\n\nexport function useLoaderDeps<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TSelected = unknown,\n>(\n opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,\n): UseLoaderDepsResult<TRouter, TFrom, TSelected> {\n const { select, ...rest } = opts\n return useMatch({\n ...rest,\n select: (s) => {\n return select ? select(s.loaderDeps) : s.loaderDeps\n },\n }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>\n}\n"],"names":["useLoaderDeps","opts","select","rest","useMatch","s","loaderDeps"],"mappings":";;;AA+BO,SAASA,cAKdC,MACgD;AAChD,QAAM;AAAA,IAAEC;AAAAA,IAAQ,GAAGC;AAAAA,EAAAA,IAASF;AAC5B,SAAOG,kBAAS;AAAA,IACd,GAAGD;AAAAA,IACHD,QAASG,CAAAA,MAAM;AACb,aAAOH,SAASA,OAAOG,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAC3C;AAAA,EAAA,CACD;AACH;;"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const useRouterState = require("./useRouterState.cjs");
4
4
  function useLocation(opts) {
5
5
  return useRouterState.useRouterState({
6
- select: (state) => (opts == null ? void 0 : opts.select) ? opts.select(state.location) : state.location
6
+ select: (state) => opts?.select ? opts.select(state.location) : state.location
7
7
  });
8
8
  }
9
9
  exports.useLocation = useLocation;
@@ -1 +1 @@
1
- {"version":3,"file":"useLocation.cjs","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected>,\n): Accessor<UseLocationResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"names":["useLocation","opts","useRouterState","select","state","location"],"mappings":";;;AAmBO,SAASA,YAIdC,MACiD;AACjD,SAAOC,8BAAe;AAAA,IACpBC,QAAQA,CAACC,WACPH,6BAAME,UAASF,KAAKE,OAAOC,MAAMC,QAAQ,IAAID,MAAMC;AAAAA,EAAAA,CAC/C;AACV;;"}
1
+ {"version":3,"file":"useLocation.cjs","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected>,\n): Accessor<UseLocationResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"names":["useLocation","opts","useRouterState","select","state","location"],"mappings":";;;AAmBO,SAASA,YAIdC,MACiD;AACjD,SAAOC,8BAAe;AAAA,IACpBC,QAAQA,CAACC,UACPH,MAAME,SAASF,KAAKE,OAAOC,MAAMC,QAAQ,IAAID,MAAMC;AAAAA,EAAAA,CAC/C;AACV;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match) : match\n },\n } as any)\n\n return matchSelection as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchSelection","useRouterState","select","state","match","matches","find","d","routeId","id","invariant","shouldThrow","undefined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,iBAAMC,WAC3BH,KAAKI,OAAOC,iCAAoBC,yBAClC;AAEA,QAAMC,iBAAiBC,eAAAA,eAAe;AAAA,IACpCC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEAgB,gBACE,GAAGjB,KAAKkB,eAAe,SAAS,CAACP,QACjC,kBAAkBX,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAEA,UAAIO,UAAUQ,QAAW;AAChBA,eAAAA;AAAAA,MAAAA;AAGT,aAAOnB,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,IAAAA;AAAAA,EAC5C,CACM;AAEDJ,SAAAA;AACT;;"}
1
+ {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n const matchSelection = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n invariant(\n !((opts.shouldThrow ?? true) && !match),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n\n if (match === undefined) {\n return undefined\n }\n\n return opts.select ? opts.select(match) : match\n },\n } as any)\n\n return matchSelection as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchSelection","useRouterState","select","state","match","matches","find","d","routeId","id","invariant","shouldThrow","undefined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,iBAAMC,WAC3BH,KAAKI,OAAOC,aAAAA,oBAAoBC,yBAClC;AAEA,QAAMC,iBAAiBC,eAAAA,eAAe;AAAA,IACpCC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEAgB,gBACE,GAAGjB,KAAKkB,eAAe,SAAS,CAACP,QACjC,kBAAkBX,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAEA,UAAIO,UAAUQ,QAAW;AACvB,eAAOA;AAAAA,MACT;AAEA,aAAOnB,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,IAC5C;AAAA,EAAA,CACM;AAER,SAAOJ;AACT;;"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Solid = require("solid-js");
4
4
  const useRouter = require("./useRouter.cjs");
5
+ const useMatch = require("./useMatch.cjs");
5
6
  function _interopNamespaceDefault(e) {
6
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
7
8
  if (e) {
@@ -21,12 +22,17 @@ function _interopNamespaceDefault(e) {
21
22
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
22
23
  function useNavigate(_defaultOpts) {
23
24
  const {
24
- navigate
25
+ navigate,
26
+ state
25
27
  } = useRouter.useRouter();
28
+ const matchIndex = useMatch.useMatch({
29
+ strict: false,
30
+ select: (match) => match.index
31
+ });
26
32
  return (options) => {
27
33
  return navigate({
28
- from: _defaultOpts == null ? void 0 : _defaultOpts.from,
29
- ...options
34
+ ...options,
35
+ from: options.from ?? _defaultOpts?.from ?? state.matches[matchIndex()].fullPath
30
36
  });
31
37
  };
32
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigate.cjs","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n FromPathOption,\n NavigateOptions,\n RegisteredRouter,\n UseNavigateResult,\n} from '@tanstack/router-core'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate } = useRouter()\n\n return ((options: NavigateOptions) => {\n return navigate({ from: _defaultOpts?.from as any, ...options })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\nexport function Navigate<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Solid.onMount(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","useRouter","options","from","Navigate","props","Solid","onMount"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUO,SAASA,YAGdC,cAEkC;AAC5B,QAAA;AAAA,IAAEC;AAAAA,MAAaC,oBAAU;AAE/B,SAAQ,CAACC,YAA6B;AACpC,WAAOF,SAAS;AAAA,MAAEG,MAAMJ,6CAAcI;AAAAA,MAAa,GAAGD;AAAAA,IAAAA,CAAS;AAAA,EACjE;AACF;AAEO,SAASE,SAMdC,OAAuE;AACjE,QAAA;AAAA,IAAEL;AAAAA,MAAaC,oBAAU;AAE/BK,mBAAMC,QAAQ,MAAM;AACT,aAAA;AAAA,MACP,GAAGF;AAAAA,IAAAA,CACJ;AAAA,EAAA,CACF;AAEM,SAAA;AACT;;;"}
1
+ {"version":3,"file":"useNavigate.cjs","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport { useMatch } from './useMatch'\nimport type {\n AnyRouter,\n FromPathOption,\n NavigateOptions,\n RegisteredRouter,\n UseNavigateResult,\n} from '@tanstack/router-core'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate, state } = useRouter()\n\n const matchIndex = useMatch({\n strict: false,\n select: (match) => match.index,\n })\n\n return ((options: NavigateOptions) => {\n return navigate({\n ...options,\n from:\n options.from ??\n _defaultOpts?.from ??\n state.matches[matchIndex()]!.fullPath,\n })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\nexport function Navigate<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Solid.onMount(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","state","useRouter","matchIndex","useMatch","strict","select","match","index","options","from","matches","fullPath","Navigate","props","Solid","onMount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWO,SAASA,YAGdC,cAEkC;AAClC,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAUC,oBAAAA;AAE5B,QAAMC,aAAaC,SAAAA,SAAS;AAAA,IAC1BC,QAAQ;AAAA,IACRC,QAASC,WAAUA,MAAMC;AAAAA,EAAAA,CAC1B;AAED,SAAQ,CAACC,YAA6B;AACpC,WAAOT,SAAS;AAAA,MACd,GAAGS;AAAAA,MACHC,MACED,QAAQC,QACRX,cAAcW,QACdT,MAAMU,QAAQR,WAAAA,CAAY,EAAGS;AAAAA,IAAAA,CAChC;AAAA,EACH;AACF;AAEO,SAASC,SAMdC,OAAuE;AACvE,QAAM;AAAA,IAAEd;AAAAA,EAAAA,IAAaE,oBAAAA;AAErBa,mBAAMC,QAAQ,MAAM;AAClBhB,aAAS;AAAA,MACP,GAAGc;AAAAA,IAAAA,CACJ;AAAA,EACH,CAAC;AAED,SAAO;AACT;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useParams.cjs","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";;;AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACM;AACV;;"}
1
+ {"version":3,"file":"useParams.cjs","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";;;AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IACzD;AAAA,EAAA,CACM;AACV;;"}
@@ -22,7 +22,7 @@ function _interopNamespaceDefault(e) {
22
22
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
23
23
  function useRouter(opts) {
24
24
  const value = Solid__namespace.useContext(routerContext.getRouterContext());
25
- warning(!(((opts == null ? void 0 : opts.warn) ?? true) && !value), "useRouter must be used inside a <RouterProvider> component!");
25
+ warning(!((opts?.warn ?? true) && !value), "useRouter must be used inside a <RouterProvider> component!");
26
26
  return value;
27
27
  }
28
28
  exports.useRouter = useRouter;
@@ -1 +1 @@
1
- {"version":3,"file":"useRouter.cjs","sources":["../../src/useRouter.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { getRouterContext } from './routerContext'\nimport type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'\n\nexport function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {\n warn?: boolean\n}): TRouter {\n const value = Solid.useContext(getRouterContext() as any)\n warning(\n !((opts?.warn ?? true) && !value),\n 'useRouter must be used inside a <RouterProvider> component!',\n )\n return value as any\n}\n"],"names":["useRouter","opts","value","Solid","useContext","getRouterContext","warning","warn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKO,SAASA,UAAwDC,MAE5D;AACV,QAAMC,QAAQC,iBAAMC,WAAWC,cAAAA,iBAAAA,CAAyB;AACxDC,UACE,IAAGL,6BAAMM,SAAQ,SAAS,CAACL,QAC3B,6DACF;AACOA,SAAAA;AACT;;"}
1
+ {"version":3,"file":"useRouter.cjs","sources":["../../src/useRouter.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { getRouterContext } from './routerContext'\nimport type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'\n\nexport function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {\n warn?: boolean\n}): TRouter {\n const value = Solid.useContext(getRouterContext() as any)\n warning(\n !((opts?.warn ?? true) && !value),\n 'useRouter must be used inside a <RouterProvider> component!',\n )\n return value as any\n}\n"],"names":["useRouter","opts","value","Solid","useContext","getRouterContext","warning","warn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKO,SAASA,UAAwDC,MAE5D;AACV,QAAMC,QAAQC,iBAAMC,WAAWC,cAAAA,iBAAAA,CAAyB;AACxDC,UACE,GAAGL,MAAMM,QAAQ,SAAS,CAACL,QAC3B,6DACF;AACA,SAAOA;AACT;;"}
@@ -4,11 +4,11 @@ const solidStore = require("@tanstack/solid-store");
4
4
  const useRouter = require("./useRouter.cjs");
5
5
  function useRouterState(opts) {
6
6
  const contextRouter = useRouter.useRouter({
7
- warn: (opts == null ? void 0 : opts.router) === void 0
7
+ warn: opts?.router === void 0
8
8
  });
9
- const router = (opts == null ? void 0 : opts.router) || contextRouter;
9
+ const router = opts?.router || contextRouter;
10
10
  return solidStore.useStore(router.__store, (state) => {
11
- if (opts == null ? void 0 : opts.select) return opts.select(state);
11
+ if (opts?.select) return opts.select(state);
12
12
  return state;
13
13
  });
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(router.__store, (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select"],"mappings":";;;;AAmBO,SAASA,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAAA,UAAmB;AAAA,IACvCC,OAAMH,6BAAMI,YAAWC;AAAAA,EAAAA,CACxB;AACKD,QAAAA,UAASJ,6BAAMI,WAAUH;AAExBK,SAAAA,oBAASF,OAAOG,SAAUC,CAAU,UAAA;AACzC,QAAIR,6BAAMS,OAAeT,QAAAA,KAAKS,OAAOD,KAAK;AAEnCA,WAAAA;AAAAA,EAAAA,CACR;AACH;;"}
1
+ {"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(router.__store, (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select"],"mappings":";;;;AAmBO,SAASA,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAAA,UAAmB;AAAA,IACvCC,MAAMH,MAAMI,WAAWC;AAAAA,EAAAA,CACxB;AACD,QAAMD,SAASJ,MAAMI,UAAUH;AAE/B,SAAOK,oBAASF,OAAOG,SAAUC,CAAAA,UAAU;AACzC,QAAIR,MAAMS,OAAQ,QAAOT,KAAKS,OAAOD,KAAK;AAE1C,WAAOA;AAAAA,EACT,CAAC;AACH;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSearch.cjs","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseSearchResult,\n} from '@tanstack/router-core'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as any\n}\n"],"names":["useSearch","opts","useMatch","from","strict","shouldThrow","select","match","search"],"mappings":";;;AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACD;AACH;;"}
1
+ {"version":3,"file":"useSearch.cjs","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n UseSearchResult,\n} from '@tanstack/router-core'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as any\n}\n"],"names":["useSearch","opts","useMatch","from","strict","shouldThrow","select","match","search"],"mappings":";;;AA6CO,SAASA,UAOdC,MASA;AACA,SAAOC,kBAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IACzD;AAAA,EAAA,CACD;AACH;;"}
@@ -47,7 +47,7 @@ function useIntersectionObserver(ref, callback, intersectionObserverOptions = {}
47
47
  }, intersectionObserverOptions);
48
48
  observerRef.observe(r);
49
49
  Solid__namespace.onCleanup(() => {
50
- observerRef == null ? void 0 : observerRef.disconnect();
50
+ observerRef?.disconnect();
51
51
  });
52
52
  });
53
53
  return () => observerRef;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n prev.previous = prev.current\n prev.current = current\n }\n\n return prev\n },\n )\n}\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(() => {\n const r = ref()\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"names":["Solid"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,MAAM,kBACX,OAAO,WAAW,cAAcA,iBAAM,qBAAqBA,iBAAM;AAEtD,MAAA,cAAc,CAAC,OAAsB;AAChD,SAAOA,iBAAM;AAAA,IACX,CACE,OAA8D;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,MAET;AACH,YAAM,UAAU,GAAG;AAEf,UAAA,KAAK,YAAY,SAAS;AAC5B,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU;AAAA,MAAA;AAGV,aAAA;AAAA,IAAA;AAAA,EAEX;AACF;AA2BgB,SAAA,wBACd,KACA,UACA,8BAAwD,CACxD,GAAA,UAAkC,IACW;AACvC,QAAA,kCACJ,OAAO,yBAAyB;AAClC,MAAI,cAA2C;AAE/CA,mBAAM,aAAa,MAAM;AACvB,UAAM,IAAI,IAAI;AACd,QAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,UAAU;AAC9D;AAAA,IAAA;AAGF,kBAAc,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AAClD,eAAS,KAAK;AAAA,OACb,2BAA2B;AAE9B,gBAAY,QAAQ,CAAC;AAErBA,qBAAM,UAAU,MAAM;AACpB,iDAAa;AAAA,IAAW,CACzB;AAAA,EAAA,CACF;AAED,SAAO,MAAM;AACf;;;;"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n prev.previous = prev.current\n prev.current = current\n }\n\n return prev\n },\n )\n}\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(() => {\n const r = ref()\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"names":["Solid"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,MAAM,kBACX,OAAO,WAAW,cAAcA,iBAAM,qBAAqBA,iBAAM;AAE5D,MAAM,cAAc,CAAC,OAAsB;AAChD,SAAOA,iBAAM;AAAA,IACX,CACE,OAA8D;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,MAET;AACH,YAAM,UAAU,GAAA;AAEhB,UAAI,KAAK,YAAY,SAAS;AAC5B,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU;AAAA,MACjB;AAEA,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AA2BO,SAAS,wBACd,KACA,UACA,8BAAwD,CAAA,GACxD,UAAkC,IACW;AAC7C,QAAM,kCACJ,OAAO,yBAAyB;AAClC,MAAI,cAA2C;AAE/CA,mBAAM,aAAa,MAAM;AACvB,UAAM,IAAI,IAAA;AACV,QAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,UAAU;AAC9D;AAAA,IACF;AAEA,kBAAc,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AAClD,eAAS,KAAK;AAAA,IAChB,GAAG,2BAA2B;AAE9B,gBAAY,QAAQ,CAAC;AAErBA,qBAAM,UAAU,MAAM;AACpB,mBAAa,WAAA;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAED,SAAO,MAAM;AACf;;;;"}
@@ -1,2 +1,3 @@
1
1
  import { RouterManagedTag } from '@tanstack/router-core';
2
- export declare function Asset({ tag, attrs, children }: RouterManagedTag): any;
2
+ import { JSX } from 'solid-js';
3
+ export declare function Asset({ tag, attrs, children, }: RouterManagedTag): JSX.Element | null;
package/dist/esm/Asset.js CHANGED
@@ -1,5 +1,6 @@
1
- import { template, spread, mergeProps, createComponent } from "solid-js/web";
1
+ import { createComponent, mergeProps, template, spread } from "solid-js/web";
2
2
  import { Style, Meta, Title } from "@solidjs/meta";
3
+ import { onMount, onCleanup } from "solid-js";
3
4
  var _tmpl$ = /* @__PURE__ */ template(`<link>`), _tmpl$2 = /* @__PURE__ */ template(`<script>`);
4
5
  function Asset({
5
6
  tag,
@@ -24,25 +25,68 @@ function Asset({
24
25
  innerHTML: children
25
26
  }));
26
27
  case "script":
27
- if (attrs && attrs.src) {
28
- return (() => {
29
- var _el$2 = _tmpl$2();
30
- spread(_el$2, attrs, false, false);
31
- return _el$2;
32
- })();
33
- }
34
- if (typeof children === "string") return (() => {
35
- var _el$3 = _tmpl$2();
36
- spread(_el$3, mergeProps(attrs, {
37
- "innerHTML": children
38
- }), false, false);
39
- return _el$3;
40
- })();
41
- return null;
28
+ return createComponent(Script, {
29
+ attrs,
30
+ children
31
+ });
42
32
  default:
43
33
  return null;
44
34
  }
45
35
  }
36
+ function Script({
37
+ attrs,
38
+ children
39
+ }) {
40
+ onMount(() => {
41
+ if (attrs?.src) {
42
+ const script = document.createElement("script");
43
+ for (const [key, value] of Object.entries(attrs)) {
44
+ if (value !== void 0 && value !== false) {
45
+ script.setAttribute(key, typeof value === "boolean" ? "" : String(value));
46
+ }
47
+ }
48
+ document.head.appendChild(script);
49
+ onCleanup(() => {
50
+ if (script.parentNode) {
51
+ script.parentNode.removeChild(script);
52
+ }
53
+ });
54
+ } else if (typeof children === "string") {
55
+ const script = document.createElement("script");
56
+ script.textContent = children;
57
+ if (attrs) {
58
+ for (const [key, value] of Object.entries(attrs)) {
59
+ if (value !== void 0 && value !== false) {
60
+ script.setAttribute(key, typeof value === "boolean" ? "" : String(value));
61
+ }
62
+ }
63
+ }
64
+ document.head.appendChild(script);
65
+ onCleanup(() => {
66
+ if (script.parentNode) {
67
+ script.parentNode.removeChild(script);
68
+ }
69
+ });
70
+ }
71
+ });
72
+ if (attrs?.src && typeof attrs.src === "string") {
73
+ return (() => {
74
+ var _el$2 = _tmpl$2();
75
+ spread(_el$2, attrs, false, false);
76
+ return _el$2;
77
+ })();
78
+ }
79
+ if (typeof children === "string") {
80
+ return (() => {
81
+ var _el$3 = _tmpl$2();
82
+ spread(_el$3, mergeProps(attrs, {
83
+ "innerHTML": children
84
+ }), false, false);
85
+ return _el$3;
86
+ })();
87
+ }
88
+ return null;
89
+ }
46
90
  export {
47
91
  Asset
48
92
  };