tanexpo 0.2.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 (81) hide show
  1. package/dist/components/Link.d.mts +7 -0
  2. package/dist/components/Link.d.ts +7 -0
  3. package/dist/components/Link.js +81 -0
  4. package/dist/components/Link.js.map +1 -0
  5. package/dist/components/Link.mjs +56 -0
  6. package/dist/components/Link.mjs.map +1 -0
  7. package/dist/components/Link.native.d.mts +7 -0
  8. package/dist/components/Link.native.d.ts +7 -0
  9. package/dist/components/Link.native.js +35 -0
  10. package/dist/components/Link.native.js.map +1 -0
  11. package/dist/components/Link.native.mjs +10 -0
  12. package/dist/components/Link.native.mjs.map +1 -0
  13. package/dist/components/Redirect.d.mts +16 -0
  14. package/dist/components/Redirect.d.ts +16 -0
  15. package/dist/components/Redirect.js +69 -0
  16. package/dist/components/Redirect.js.map +1 -0
  17. package/dist/components/Redirect.mjs +44 -0
  18. package/dist/components/Redirect.mjs.map +1 -0
  19. package/dist/components/Redirect.native.d.mts +1 -0
  20. package/dist/components/Redirect.native.d.ts +1 -0
  21. package/dist/components/Redirect.native.js +31 -0
  22. package/dist/components/Redirect.native.js.map +1 -0
  23. package/dist/components/Redirect.native.mjs +6 -0
  24. package/dist/components/Redirect.native.mjs.map +1 -0
  25. package/dist/components/index.d.mts +5 -0
  26. package/dist/components/index.d.ts +5 -0
  27. package/dist/components/index.js +106 -0
  28. package/dist/components/index.js.map +1 -0
  29. package/dist/components/index.mjs +78 -0
  30. package/dist/components/index.mjs.map +1 -0
  31. package/dist/hooks/index.d.mts +5 -0
  32. package/dist/hooks/index.d.ts +5 -0
  33. package/dist/hooks/index.js +91 -0
  34. package/dist/hooks/index.js.map +1 -0
  35. package/dist/hooks/index.mjs +63 -0
  36. package/dist/hooks/index.mjs.map +1 -0
  37. package/dist/hooks/useLocalSearchParams.d.mts +13 -0
  38. package/dist/hooks/useLocalSearchParams.d.ts +13 -0
  39. package/dist/hooks/useLocalSearchParams.js +39 -0
  40. package/dist/hooks/useLocalSearchParams.js.map +1 -0
  41. package/dist/hooks/useLocalSearchParams.mjs +14 -0
  42. package/dist/hooks/useLocalSearchParams.mjs.map +1 -0
  43. package/dist/hooks/useLocalSearchParams.native.d.mts +1 -0
  44. package/dist/hooks/useLocalSearchParams.native.d.ts +1 -0
  45. package/dist/hooks/useLocalSearchParams.native.js +31 -0
  46. package/dist/hooks/useLocalSearchParams.native.js.map +1 -0
  47. package/dist/hooks/useLocalSearchParams.native.mjs +6 -0
  48. package/dist/hooks/useLocalSearchParams.native.mjs.map +1 -0
  49. package/dist/hooks/useRouter.d.mts +13 -0
  50. package/dist/hooks/useRouter.d.ts +13 -0
  51. package/dist/hooks/useRouter.js +76 -0
  52. package/dist/hooks/useRouter.js.map +1 -0
  53. package/dist/hooks/useRouter.mjs +51 -0
  54. package/dist/hooks/useRouter.mjs.map +1 -0
  55. package/dist/hooks/useRouter.native.d.mts +12 -0
  56. package/dist/hooks/useRouter.native.d.ts +12 -0
  57. package/dist/hooks/useRouter.native.js +41 -0
  58. package/dist/hooks/useRouter.native.js.map +1 -0
  59. package/dist/hooks/useRouter.native.mjs +16 -0
  60. package/dist/hooks/useRouter.native.mjs.map +1 -0
  61. package/dist/index.d.mts +8 -0
  62. package/dist/index.d.ts +8 -0
  63. package/dist/index.js +149 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/index.mjs +119 -0
  66. package/dist/index.mjs.map +1 -0
  67. package/dist/index.native.d.mts +7 -0
  68. package/dist/index.native.d.ts +7 -0
  69. package/dist/index.native.js +62 -0
  70. package/dist/index.native.js.map +1 -0
  71. package/dist/index.native.mjs +32 -0
  72. package/dist/index.native.mjs.map +1 -0
  73. package/dist/types-BrqVaE2O.d.mts +21 -0
  74. package/dist/types-BrqVaE2O.d.ts +21 -0
  75. package/dist/utils/route-utils.d.mts +19 -0
  76. package/dist/utils/route-utils.d.ts +19 -0
  77. package/dist/utils/route-utils.js +48 -0
  78. package/dist/utils/route-utils.js.map +1 -0
  79. package/dist/utils/route-utils.mjs +22 -0
  80. package/dist/utils/route-utils.mjs.map +1 -0
  81. package/package.json +64 -0
@@ -0,0 +1,78 @@
1
+ // src/components/Link.tsx
2
+ import { Link as TanStackLink } from "@tanstack/react-router";
3
+
4
+ // src/utils/route-utils.ts
5
+ function expoPathToTanStack(pathname) {
6
+ return pathname.replace(/\[([^\]]+)\]/g, (_, key) => `$${key}`);
7
+ }
8
+ function splitParams(pathname, params = {}) {
9
+ const dynamicKeys = Array.from(pathname.matchAll(/\[([^\]]+)\]/g), (m) => m[1]);
10
+ const pathParams = {};
11
+ const searchParams = {};
12
+ for (const [key, value] of Object.entries(params)) {
13
+ if (dynamicKeys.includes(key)) {
14
+ pathParams[key] = value;
15
+ } else {
16
+ searchParams[key] = value;
17
+ }
18
+ }
19
+ return { pathParams, searchParams };
20
+ }
21
+
22
+ // src/components/Link.tsx
23
+ import { jsx } from "react/jsx-runtime";
24
+ function mapPrefetchToPreload(prefetch) {
25
+ if (prefetch === void 0 || prefetch === false) {
26
+ return false;
27
+ }
28
+ if (prefetch === true) {
29
+ return "intent";
30
+ }
31
+ return prefetch;
32
+ }
33
+ function Link({ href, replace, prefetch, children }) {
34
+ const preload = mapPrefetchToPreload(prefetch);
35
+ if (typeof href === "string") {
36
+ return /* @__PURE__ */ jsx(TanStackLink, { to: href, replace, preload, children });
37
+ }
38
+ const { pathname, params } = href;
39
+ const to = expoPathToTanStack(pathname);
40
+ const { pathParams, searchParams } = splitParams(pathname, params);
41
+ return /* @__PURE__ */ jsx(
42
+ TanStackLink,
43
+ {
44
+ to,
45
+ params: pathParams,
46
+ search: Object.keys(searchParams).length ? searchParams : void 0,
47
+ replace,
48
+ preload,
49
+ children
50
+ }
51
+ );
52
+ }
53
+
54
+ // src/components/Redirect.tsx
55
+ import { Navigate } from "@tanstack/react-router";
56
+ import { jsx as jsx2 } from "react/jsx-runtime";
57
+ function Redirect({ href, replace }) {
58
+ if (typeof href === "string") {
59
+ return /* @__PURE__ */ jsx2(Navigate, { to: href, replace });
60
+ }
61
+ const { pathname, params } = href;
62
+ const to = expoPathToTanStack(pathname);
63
+ const { pathParams, searchParams } = splitParams(pathname, params);
64
+ return /* @__PURE__ */ jsx2(
65
+ Navigate,
66
+ {
67
+ to,
68
+ params: pathParams,
69
+ search: Object.keys(searchParams).length ? searchParams : void 0,
70
+ replace
71
+ }
72
+ );
73
+ }
74
+ export {
75
+ Link,
76
+ Redirect
77
+ };
78
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/Link.tsx","../../src/utils/route-utils.ts","../../src/components/Redirect.tsx"],"sourcesContent":["import { Link as TanStackLink } from \"@tanstack/react-router\";\nimport type { HrefObject, LinkProps, Prefetch } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\nfunction mapPrefetchToPreload(prefetch: Prefetch | undefined) {\n if (prefetch === undefined || prefetch === false) {\n return false;\n }\n\n if (prefetch === true) {\n return \"intent\";\n }\n\n return prefetch;\n}\n\nexport function Link({ href, replace, prefetch, children }: LinkProps) {\n const preload = mapPrefetchToPreload(prefetch);\n\n // String href\n if (typeof href === \"string\") {\n return (\n <TanStackLink to={href} replace={replace} preload={preload}>\n {children}\n </TanStackLink>\n );\n }\n\n // Object-based Expo href\n const { pathname, params } = href as HrefObject;\n\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n return (\n <TanStackLink\n to={to}\n params={pathParams}\n search={Object.keys(searchParams).length ? searchParams : undefined}\n replace={replace}\n preload={preload}\n >\n {children}\n </TanStackLink>\n );\n}\n","import type { HrefObject } from \"../types\";\n\n/**\n * Converts:\n * /user/[id]/post/[slug] → /user/$id/post/$slug\n */\nexport function expoPathToTanStack(pathname: string) {\n return pathname.replace(/\\[([^\\]]+)\\]/g, (_, key) => `$${key}`);\n}\n\n/**\n * Splits params into:\n * - path params (used by dynamic segments)\n * - search params (query string)\n */\nexport function splitParams(pathname: string, params: HrefObject[\"params\"] = {}) {\n const dynamicKeys = Array.from(pathname.matchAll(/\\[([^\\]]+)\\]/g), (m) => m[1]);\n\n const pathParams: Record<string, unknown> = {};\n const searchParams: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (dynamicKeys.includes(key)) {\n pathParams[key] = value;\n } else {\n searchParams[key] = value;\n }\n }\n\n return { pathParams, searchParams };\n}\n","import { Navigate } from \"@tanstack/react-router\";\nimport type { Href } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\ntype RedirectProps = {\n href: Href;\n replace?: boolean;\n};\n\n/**\n * Expo-compatible Redirect for web.\n *\n * Maps Expo Router <Redirect /> → TanStack Router <Navigate />\n */\nexport function Redirect({ href, replace }: RedirectProps) {\n // String path\n if (typeof href === \"string\") {\n return <Navigate to={href} replace={replace} />;\n }\n\n const { pathname, params } = href;\n\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n return (\n <Navigate\n to={to}\n params={pathParams}\n search={Object.keys(searchParams).length ? searchParams : undefined}\n replace={replace}\n />\n );\n}\n"],"mappings":";AAAA,SAAS,QAAQ,oBAAoB;;;ACM9B,SAAS,mBAAmB,UAAkB;AACnD,SAAO,SAAS,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE;AAChE;AAOO,SAAS,YAAY,UAAkB,SAA+B,CAAC,GAAG;AAC/E,QAAM,cAAc,MAAM,KAAK,SAAS,SAAS,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAE9E,QAAM,aAAsC,CAAC;AAC7C,QAAM,eAAwC,CAAC;AAE/C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,iBAAW,GAAG,IAAI;AAAA,IACpB,OAAO;AACL,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,aAAa;AACpC;;;ADRM;AAlBN,SAAS,qBAAqB,UAAgC;AAC5D,MAAI,aAAa,UAAa,aAAa,OAAO;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,KAAK,EAAE,MAAM,SAAS,UAAU,SAAS,GAAc;AACrE,QAAM,UAAU,qBAAqB,QAAQ;AAG7C,MAAI,OAAO,SAAS,UAAU;AAC5B,WACE,oBAAC,gBAAa,IAAI,MAAM,SAAkB,SACvC,UACH;AAAA,EAEJ;AAGA,QAAM,EAAE,UAAU,OAAO,IAAI;AAE7B,QAAM,KAAK,mBAAmB,QAAQ;AACtC,QAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AE7CA,SAAS,gBAAgB;AAiBd,gBAAAA,YAAA;AAHJ,SAAS,SAAS,EAAE,MAAM,QAAQ,GAAkB;AAEzD,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,gBAAAA,KAAC,YAAS,IAAI,MAAM,SAAkB;AAAA,EAC/C;AAEA,QAAM,EAAE,UAAU,OAAO,IAAI;AAE7B,QAAM,KAAK,mBAAmB,QAAQ;AACtC,QAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA;AAAA,EACF;AAEJ;","names":["jsx"]}
@@ -0,0 +1,5 @@
1
+ export { useLocalSearchParams } from './useLocalSearchParams.mjs';
2
+ export { useRouter } from './useRouter.mjs';
3
+ import '../types-BrqVaE2O.mjs';
4
+ import 'react';
5
+ import '@tanstack/router-core';
@@ -0,0 +1,5 @@
1
+ export { useLocalSearchParams } from './useLocalSearchParams.js';
2
+ export { useRouter } from './useRouter.js';
3
+ import '../types-BrqVaE2O.js';
4
+ import 'react';
5
+ import '@tanstack/router-core';
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/index.ts
21
+ var hooks_exports = {};
22
+ __export(hooks_exports, {
23
+ useLocalSearchParams: () => useLocalSearchParams,
24
+ useRouter: () => useRouter
25
+ });
26
+ module.exports = __toCommonJS(hooks_exports);
27
+
28
+ // src/hooks/useLocalSearchParams.ts
29
+ var import_react_router = require("@tanstack/react-router");
30
+ function useLocalSearchParams() {
31
+ const params = (0, import_react_router.useParams)({ strict: false });
32
+ const search = (0, import_react_router.useSearch)({ strict: false });
33
+ return {
34
+ ...params,
35
+ ...search
36
+ };
37
+ }
38
+
39
+ // src/hooks/useRouter.ts
40
+ var import_react_router2 = require("@tanstack/react-router");
41
+
42
+ // src/utils/route-utils.ts
43
+ function expoPathToTanStack(pathname) {
44
+ return pathname.replace(/\[([^\]]+)\]/g, (_, key) => `$${key}`);
45
+ }
46
+ function splitParams(pathname, params = {}) {
47
+ const dynamicKeys = Array.from(pathname.matchAll(/\[([^\]]+)\]/g), (m) => m[1]);
48
+ const pathParams = {};
49
+ const searchParams = {};
50
+ for (const [key, value] of Object.entries(params)) {
51
+ if (dynamicKeys.includes(key)) {
52
+ pathParams[key] = value;
53
+ } else {
54
+ searchParams[key] = value;
55
+ }
56
+ }
57
+ return { pathParams, searchParams };
58
+ }
59
+
60
+ // src/hooks/useRouter.ts
61
+ function useRouter() {
62
+ const router = (0, import_react_router2.useRouter)();
63
+ function navigate(href, replace = false) {
64
+ if (typeof href === "string") {
65
+ router.navigate({ to: href, replace });
66
+ return;
67
+ }
68
+ const { pathname, params } = href;
69
+ const to = expoPathToTanStack(pathname);
70
+ const { pathParams, searchParams } = splitParams(pathname, params);
71
+ router.navigate({
72
+ to,
73
+ params: pathParams,
74
+ search: Object.keys(searchParams).length ? searchParams : void 0,
75
+ replace
76
+ });
77
+ }
78
+ return {
79
+ push: (href) => navigate(href, false),
80
+ replace: (href) => navigate(href, true),
81
+ navigate,
82
+ back: () => router.history.back(),
83
+ prefetch: router.preloadRoute
84
+ };
85
+ }
86
+ // Annotate the CommonJS export names for ESM import in node:
87
+ 0 && (module.exports = {
88
+ useLocalSearchParams,
89
+ useRouter
90
+ });
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/useLocalSearchParams.ts","../../src/hooks/useRouter.ts","../../src/utils/route-utils.ts"],"sourcesContent":["export { useLocalSearchParams } from \"./useLocalSearchParams\";\nexport { useRouter } from \"./useRouter\";\n","import { useParams, useSearch } from \"@tanstack/react-router\";\nimport type { LocalSearchParams } from \"../types\";\n\n/**\n * Expo-compatible useLocalSearchParams for web.\n *\n * Combines:\n * - path params from useParams()\n * - query params from useSearch()\n */\nexport function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T {\n const params = useParams({ strict: false }) as Record<string, string | string[] | undefined>;\n\n const search = useSearch({ strict: false }) as Record<string, string | string[] | undefined>;\n\n return {\n ...params,\n ...search,\n } as T;\n}\n","import { useRouter as useTanStackRouter } from \"@tanstack/react-router\";\nimport type { Href } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\nexport function useRouter() {\n const router = useTanStackRouter();\n\n function navigate(href: Href, replace = false) {\n if (typeof href === \"string\") {\n router.navigate({ to: href, replace });\n return;\n }\n\n const { pathname, params } = href;\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n router.navigate({\n to,\n params: pathParams,\n search: Object.keys(searchParams).length ? searchParams : undefined,\n replace,\n });\n }\n\n return {\n push: (href: Href) => navigate(href, false),\n replace: (href: Href) => navigate(href, true),\n navigate,\n back: () => router.history.back(),\n prefetch: router.preloadRoute,\n };\n}\n","import type { HrefObject } from \"../types\";\n\n/**\n * Converts:\n * /user/[id]/post/[slug] → /user/$id/post/$slug\n */\nexport function expoPathToTanStack(pathname: string) {\n return pathname.replace(/\\[([^\\]]+)\\]/g, (_, key) => `$${key}`);\n}\n\n/**\n * Splits params into:\n * - path params (used by dynamic segments)\n * - search params (query string)\n */\nexport function splitParams(pathname: string, params: HrefObject[\"params\"] = {}) {\n const dynamicKeys = Array.from(pathname.matchAll(/\\[([^\\]]+)\\]/g), (m) => m[1]);\n\n const pathParams: Record<string, unknown> = {};\n const searchParams: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (dynamicKeys.includes(key)) {\n pathParams[key] = value;\n } else {\n searchParams[key] = value;\n }\n }\n\n return { pathParams, searchParams };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,0BAAqC;AAU9B,SAAS,uBAA2E;AACzF,QAAM,aAAS,+BAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,QAAM,aAAS,+BAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;;;ACnBA,IAAAA,uBAA+C;;;ACMxC,SAAS,mBAAmB,UAAkB;AACnD,SAAO,SAAS,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE;AAChE;AAOO,SAAS,YAAY,UAAkB,SAA+B,CAAC,GAAG;AAC/E,QAAM,cAAc,MAAM,KAAK,SAAS,SAAS,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAE9E,QAAM,aAAsC,CAAC;AAC7C,QAAM,eAAwC,CAAC;AAE/C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,iBAAW,GAAG,IAAI;AAAA,IACpB,OAAO;AACL,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,aAAa;AACpC;;;AD1BO,SAAS,YAAY;AAC1B,QAAM,aAAS,qBAAAC,WAAkB;AAEjC,WAAS,SAAS,MAAY,UAAU,OAAO;AAC7C,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,SAAS,EAAE,IAAI,MAAM,QAAQ,CAAC;AACrC;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,UAAM,KAAK,mBAAmB,QAAQ;AACtC,UAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,WAAO,SAAS;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM,CAAC,SAAe,SAAS,MAAM,KAAK;AAAA,IAC1C,SAAS,CAAC,SAAe,SAAS,MAAM,IAAI;AAAA,IAC5C;AAAA,IACA,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA,IAChC,UAAU,OAAO;AAAA,EACnB;AACF;","names":["import_react_router","useTanStackRouter"]}
@@ -0,0 +1,63 @@
1
+ // src/hooks/useLocalSearchParams.ts
2
+ import { useParams, useSearch } from "@tanstack/react-router";
3
+ function useLocalSearchParams() {
4
+ const params = useParams({ strict: false });
5
+ const search = useSearch({ strict: false });
6
+ return {
7
+ ...params,
8
+ ...search
9
+ };
10
+ }
11
+
12
+ // src/hooks/useRouter.ts
13
+ import { useRouter as useTanStackRouter } from "@tanstack/react-router";
14
+
15
+ // src/utils/route-utils.ts
16
+ function expoPathToTanStack(pathname) {
17
+ return pathname.replace(/\[([^\]]+)\]/g, (_, key) => `$${key}`);
18
+ }
19
+ function splitParams(pathname, params = {}) {
20
+ const dynamicKeys = Array.from(pathname.matchAll(/\[([^\]]+)\]/g), (m) => m[1]);
21
+ const pathParams = {};
22
+ const searchParams = {};
23
+ for (const [key, value] of Object.entries(params)) {
24
+ if (dynamicKeys.includes(key)) {
25
+ pathParams[key] = value;
26
+ } else {
27
+ searchParams[key] = value;
28
+ }
29
+ }
30
+ return { pathParams, searchParams };
31
+ }
32
+
33
+ // src/hooks/useRouter.ts
34
+ function useRouter() {
35
+ const router = useTanStackRouter();
36
+ function navigate(href, replace = false) {
37
+ if (typeof href === "string") {
38
+ router.navigate({ to: href, replace });
39
+ return;
40
+ }
41
+ const { pathname, params } = href;
42
+ const to = expoPathToTanStack(pathname);
43
+ const { pathParams, searchParams } = splitParams(pathname, params);
44
+ router.navigate({
45
+ to,
46
+ params: pathParams,
47
+ search: Object.keys(searchParams).length ? searchParams : void 0,
48
+ replace
49
+ });
50
+ }
51
+ return {
52
+ push: (href) => navigate(href, false),
53
+ replace: (href) => navigate(href, true),
54
+ navigate,
55
+ back: () => router.history.back(),
56
+ prefetch: router.preloadRoute
57
+ };
58
+ }
59
+ export {
60
+ useLocalSearchParams,
61
+ useRouter
62
+ };
63
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useLocalSearchParams.ts","../../src/hooks/useRouter.ts","../../src/utils/route-utils.ts"],"sourcesContent":["import { useParams, useSearch } from \"@tanstack/react-router\";\nimport type { LocalSearchParams } from \"../types\";\n\n/**\n * Expo-compatible useLocalSearchParams for web.\n *\n * Combines:\n * - path params from useParams()\n * - query params from useSearch()\n */\nexport function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T {\n const params = useParams({ strict: false }) as Record<string, string | string[] | undefined>;\n\n const search = useSearch({ strict: false }) as Record<string, string | string[] | undefined>;\n\n return {\n ...params,\n ...search,\n } as T;\n}\n","import { useRouter as useTanStackRouter } from \"@tanstack/react-router\";\nimport type { Href } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\nexport function useRouter() {\n const router = useTanStackRouter();\n\n function navigate(href: Href, replace = false) {\n if (typeof href === \"string\") {\n router.navigate({ to: href, replace });\n return;\n }\n\n const { pathname, params } = href;\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n router.navigate({\n to,\n params: pathParams,\n search: Object.keys(searchParams).length ? searchParams : undefined,\n replace,\n });\n }\n\n return {\n push: (href: Href) => navigate(href, false),\n replace: (href: Href) => navigate(href, true),\n navigate,\n back: () => router.history.back(),\n prefetch: router.preloadRoute,\n };\n}\n","import type { HrefObject } from \"../types\";\n\n/**\n * Converts:\n * /user/[id]/post/[slug] → /user/$id/post/$slug\n */\nexport function expoPathToTanStack(pathname: string) {\n return pathname.replace(/\\[([^\\]]+)\\]/g, (_, key) => `$${key}`);\n}\n\n/**\n * Splits params into:\n * - path params (used by dynamic segments)\n * - search params (query string)\n */\nexport function splitParams(pathname: string, params: HrefObject[\"params\"] = {}) {\n const dynamicKeys = Array.from(pathname.matchAll(/\\[([^\\]]+)\\]/g), (m) => m[1]);\n\n const pathParams: Record<string, unknown> = {};\n const searchParams: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (dynamicKeys.includes(key)) {\n pathParams[key] = value;\n } else {\n searchParams[key] = value;\n }\n }\n\n return { pathParams, searchParams };\n}\n"],"mappings":";AAAA,SAAS,WAAW,iBAAiB;AAU9B,SAAS,uBAA2E;AACzF,QAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,QAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;;;ACnBA,SAAS,aAAa,yBAAyB;;;ACMxC,SAAS,mBAAmB,UAAkB;AACnD,SAAO,SAAS,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE;AAChE;AAOO,SAAS,YAAY,UAAkB,SAA+B,CAAC,GAAG;AAC/E,QAAM,cAAc,MAAM,KAAK,SAAS,SAAS,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAE9E,QAAM,aAAsC,CAAC;AAC7C,QAAM,eAAwC,CAAC;AAE/C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,iBAAW,GAAG,IAAI;AAAA,IACpB,OAAO;AACL,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,aAAa;AACpC;;;AD1BO,SAAS,YAAY;AAC1B,QAAM,SAAS,kBAAkB;AAEjC,WAAS,SAAS,MAAY,UAAU,OAAO;AAC7C,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,SAAS,EAAE,IAAI,MAAM,QAAQ,CAAC;AACrC;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,UAAM,KAAK,mBAAmB,QAAQ;AACtC,UAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,WAAO,SAAS;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM,CAAC,SAAe,SAAS,MAAM,KAAK;AAAA,IAC1C,SAAS,CAAC,SAAe,SAAS,MAAM,IAAI;AAAA,IAC5C;AAAA,IACA,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA,IAChC,UAAU,OAAO;AAAA,EACnB;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ import { b as LocalSearchParams } from '../types-BrqVaE2O.mjs';
2
+ import 'react';
3
+
4
+ /**
5
+ * Expo-compatible useLocalSearchParams for web.
6
+ *
7
+ * Combines:
8
+ * - path params from useParams()
9
+ * - query params from useSearch()
10
+ */
11
+ declare function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T;
12
+
13
+ export { useLocalSearchParams };
@@ -0,0 +1,13 @@
1
+ import { b as LocalSearchParams } from '../types-BrqVaE2O.js';
2
+ import 'react';
3
+
4
+ /**
5
+ * Expo-compatible useLocalSearchParams for web.
6
+ *
7
+ * Combines:
8
+ * - path params from useParams()
9
+ * - query params from useSearch()
10
+ */
11
+ declare function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T;
12
+
13
+ export { useLocalSearchParams };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/useLocalSearchParams.ts
21
+ var useLocalSearchParams_exports = {};
22
+ __export(useLocalSearchParams_exports, {
23
+ useLocalSearchParams: () => useLocalSearchParams
24
+ });
25
+ module.exports = __toCommonJS(useLocalSearchParams_exports);
26
+ var import_react_router = require("@tanstack/react-router");
27
+ function useLocalSearchParams() {
28
+ const params = (0, import_react_router.useParams)({ strict: false });
29
+ const search = (0, import_react_router.useSearch)({ strict: false });
30
+ return {
31
+ ...params,
32
+ ...search
33
+ };
34
+ }
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ useLocalSearchParams
38
+ });
39
+ //# sourceMappingURL=useLocalSearchParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useLocalSearchParams.ts"],"sourcesContent":["import { useParams, useSearch } from \"@tanstack/react-router\";\nimport type { LocalSearchParams } from \"../types\";\n\n/**\n * Expo-compatible useLocalSearchParams for web.\n *\n * Combines:\n * - path params from useParams()\n * - query params from useSearch()\n */\nexport function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T {\n const params = useParams({ strict: false }) as Record<string, string | string[] | undefined>;\n\n const search = useSearch({ strict: false }) as Record<string, string | string[] | undefined>;\n\n return {\n ...params,\n ...search,\n } as T;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAqC;AAU9B,SAAS,uBAA2E;AACzF,QAAM,aAAS,+BAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,QAAM,aAAS,+BAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ // src/hooks/useLocalSearchParams.ts
2
+ import { useParams, useSearch } from "@tanstack/react-router";
3
+ function useLocalSearchParams() {
4
+ const params = useParams({ strict: false });
5
+ const search = useSearch({ strict: false });
6
+ return {
7
+ ...params,
8
+ ...search
9
+ };
10
+ }
11
+ export {
12
+ useLocalSearchParams
13
+ };
14
+ //# sourceMappingURL=useLocalSearchParams.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useLocalSearchParams.ts"],"sourcesContent":["import { useParams, useSearch } from \"@tanstack/react-router\";\nimport type { LocalSearchParams } from \"../types\";\n\n/**\n * Expo-compatible useLocalSearchParams for web.\n *\n * Combines:\n * - path params from useParams()\n * - query params from useSearch()\n */\nexport function useLocalSearchParams<T extends LocalSearchParams = LocalSearchParams>(): T {\n const params = useParams({ strict: false }) as Record<string, string | string[] | undefined>;\n\n const search = useSearch({ strict: false }) as Record<string, string | string[] | undefined>;\n\n return {\n ...params,\n ...search,\n } as T;\n}\n"],"mappings":";AAAA,SAAS,WAAW,iBAAiB;AAU9B,SAAS,uBAA2E;AACzF,QAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,QAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,CAAC;AAE1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;","names":[]}
@@ -0,0 +1 @@
1
+ export { useLocalSearchParams } from 'expo-router';
@@ -0,0 +1 @@
1
+ export { useLocalSearchParams } from 'expo-router';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/useLocalSearchParams.native.ts
21
+ var useLocalSearchParams_native_exports = {};
22
+ __export(useLocalSearchParams_native_exports, {
23
+ useLocalSearchParams: () => import_expo_router.useLocalSearchParams
24
+ });
25
+ module.exports = __toCommonJS(useLocalSearchParams_native_exports);
26
+ var import_expo_router = require("expo-router");
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ useLocalSearchParams
30
+ });
31
+ //# sourceMappingURL=useLocalSearchParams.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useLocalSearchParams.native.ts"],"sourcesContent":["export { useLocalSearchParams } from \"expo-router\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAqC;","names":[]}
@@ -0,0 +1,6 @@
1
+ // src/hooks/useLocalSearchParams.native.ts
2
+ import { useLocalSearchParams } from "expo-router";
3
+ export {
4
+ useLocalSearchParams
5
+ };
6
+ //# sourceMappingURL=useLocalSearchParams.native.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useLocalSearchParams.native.ts"],"sourcesContent":["export { useLocalSearchParams } from \"expo-router\";\n"],"mappings":";AAAA,SAAS,4BAA4B;","names":[]}
@@ -0,0 +1,13 @@
1
+ import * as _tanstack_router_core from '@tanstack/router-core';
2
+ import { H as Href } from '../types-BrqVaE2O.mjs';
3
+ import 'react';
4
+
5
+ declare function useRouter(): {
6
+ push: (href: Href) => void;
7
+ replace: (href: Href) => void;
8
+ navigate: (href: Href, replace?: boolean) => void;
9
+ back: () => any;
10
+ prefetch: _tanstack_router_core.PreloadRouteFn<any, any, any, any>;
11
+ };
12
+
13
+ export { useRouter };
@@ -0,0 +1,13 @@
1
+ import * as _tanstack_router_core from '@tanstack/router-core';
2
+ import { H as Href } from '../types-BrqVaE2O.js';
3
+ import 'react';
4
+
5
+ declare function useRouter(): {
6
+ push: (href: Href) => void;
7
+ replace: (href: Href) => void;
8
+ navigate: (href: Href, replace?: boolean) => void;
9
+ back: () => any;
10
+ prefetch: _tanstack_router_core.PreloadRouteFn<any, any, any, any>;
11
+ };
12
+
13
+ export { useRouter };
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/hooks/useRouter.ts
21
+ var useRouter_exports = {};
22
+ __export(useRouter_exports, {
23
+ useRouter: () => useRouter
24
+ });
25
+ module.exports = __toCommonJS(useRouter_exports);
26
+ var import_react_router = require("@tanstack/react-router");
27
+
28
+ // src/utils/route-utils.ts
29
+ function expoPathToTanStack(pathname) {
30
+ return pathname.replace(/\[([^\]]+)\]/g, (_, key) => `$${key}`);
31
+ }
32
+ function splitParams(pathname, params = {}) {
33
+ const dynamicKeys = Array.from(pathname.matchAll(/\[([^\]]+)\]/g), (m) => m[1]);
34
+ const pathParams = {};
35
+ const searchParams = {};
36
+ for (const [key, value] of Object.entries(params)) {
37
+ if (dynamicKeys.includes(key)) {
38
+ pathParams[key] = value;
39
+ } else {
40
+ searchParams[key] = value;
41
+ }
42
+ }
43
+ return { pathParams, searchParams };
44
+ }
45
+
46
+ // src/hooks/useRouter.ts
47
+ function useRouter() {
48
+ const router = (0, import_react_router.useRouter)();
49
+ function navigate(href, replace = false) {
50
+ if (typeof href === "string") {
51
+ router.navigate({ to: href, replace });
52
+ return;
53
+ }
54
+ const { pathname, params } = href;
55
+ const to = expoPathToTanStack(pathname);
56
+ const { pathParams, searchParams } = splitParams(pathname, params);
57
+ router.navigate({
58
+ to,
59
+ params: pathParams,
60
+ search: Object.keys(searchParams).length ? searchParams : void 0,
61
+ replace
62
+ });
63
+ }
64
+ return {
65
+ push: (href) => navigate(href, false),
66
+ replace: (href) => navigate(href, true),
67
+ navigate,
68
+ back: () => router.history.back(),
69
+ prefetch: router.preloadRoute
70
+ };
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ useRouter
75
+ });
76
+ //# sourceMappingURL=useRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useRouter.ts","../../src/utils/route-utils.ts"],"sourcesContent":["import { useRouter as useTanStackRouter } from \"@tanstack/react-router\";\nimport type { Href } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\nexport function useRouter() {\n const router = useTanStackRouter();\n\n function navigate(href: Href, replace = false) {\n if (typeof href === \"string\") {\n router.navigate({ to: href, replace });\n return;\n }\n\n const { pathname, params } = href;\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n router.navigate({\n to,\n params: pathParams,\n search: Object.keys(searchParams).length ? searchParams : undefined,\n replace,\n });\n }\n\n return {\n push: (href: Href) => navigate(href, false),\n replace: (href: Href) => navigate(href, true),\n navigate,\n back: () => router.history.back(),\n prefetch: router.preloadRoute,\n };\n}\n","import type { HrefObject } from \"../types\";\n\n/**\n * Converts:\n * /user/[id]/post/[slug] → /user/$id/post/$slug\n */\nexport function expoPathToTanStack(pathname: string) {\n return pathname.replace(/\\[([^\\]]+)\\]/g, (_, key) => `$${key}`);\n}\n\n/**\n * Splits params into:\n * - path params (used by dynamic segments)\n * - search params (query string)\n */\nexport function splitParams(pathname: string, params: HrefObject[\"params\"] = {}) {\n const dynamicKeys = Array.from(pathname.matchAll(/\\[([^\\]]+)\\]/g), (m) => m[1]);\n\n const pathParams: Record<string, unknown> = {};\n const searchParams: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (dynamicKeys.includes(key)) {\n pathParams[key] = value;\n } else {\n searchParams[key] = value;\n }\n }\n\n return { pathParams, searchParams };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA+C;;;ACMxC,SAAS,mBAAmB,UAAkB;AACnD,SAAO,SAAS,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE;AAChE;AAOO,SAAS,YAAY,UAAkB,SAA+B,CAAC,GAAG;AAC/E,QAAM,cAAc,MAAM,KAAK,SAAS,SAAS,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAE9E,QAAM,aAAsC,CAAC;AAC7C,QAAM,eAAwC,CAAC;AAE/C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,iBAAW,GAAG,IAAI;AAAA,IACpB,OAAO;AACL,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,aAAa;AACpC;;;AD1BO,SAAS,YAAY;AAC1B,QAAM,aAAS,oBAAAA,WAAkB;AAEjC,WAAS,SAAS,MAAY,UAAU,OAAO;AAC7C,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,SAAS,EAAE,IAAI,MAAM,QAAQ,CAAC;AACrC;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,UAAM,KAAK,mBAAmB,QAAQ;AACtC,UAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,WAAO,SAAS;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM,CAAC,SAAe,SAAS,MAAM,KAAK;AAAA,IAC1C,SAAS,CAAC,SAAe,SAAS,MAAM,IAAI;AAAA,IAC5C;AAAA,IACA,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA,IAChC,UAAU,OAAO;AAAA,EACnB;AACF;","names":["useTanStackRouter"]}
@@ -0,0 +1,51 @@
1
+ // src/hooks/useRouter.ts
2
+ import { useRouter as useTanStackRouter } from "@tanstack/react-router";
3
+
4
+ // src/utils/route-utils.ts
5
+ function expoPathToTanStack(pathname) {
6
+ return pathname.replace(/\[([^\]]+)\]/g, (_, key) => `$${key}`);
7
+ }
8
+ function splitParams(pathname, params = {}) {
9
+ const dynamicKeys = Array.from(pathname.matchAll(/\[([^\]]+)\]/g), (m) => m[1]);
10
+ const pathParams = {};
11
+ const searchParams = {};
12
+ for (const [key, value] of Object.entries(params)) {
13
+ if (dynamicKeys.includes(key)) {
14
+ pathParams[key] = value;
15
+ } else {
16
+ searchParams[key] = value;
17
+ }
18
+ }
19
+ return { pathParams, searchParams };
20
+ }
21
+
22
+ // src/hooks/useRouter.ts
23
+ function useRouter() {
24
+ const router = useTanStackRouter();
25
+ function navigate(href, replace = false) {
26
+ if (typeof href === "string") {
27
+ router.navigate({ to: href, replace });
28
+ return;
29
+ }
30
+ const { pathname, params } = href;
31
+ const to = expoPathToTanStack(pathname);
32
+ const { pathParams, searchParams } = splitParams(pathname, params);
33
+ router.navigate({
34
+ to,
35
+ params: pathParams,
36
+ search: Object.keys(searchParams).length ? searchParams : void 0,
37
+ replace
38
+ });
39
+ }
40
+ return {
41
+ push: (href) => navigate(href, false),
42
+ replace: (href) => navigate(href, true),
43
+ navigate,
44
+ back: () => router.history.back(),
45
+ prefetch: router.preloadRoute
46
+ };
47
+ }
48
+ export {
49
+ useRouter
50
+ };
51
+ //# sourceMappingURL=useRouter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useRouter.ts","../../src/utils/route-utils.ts"],"sourcesContent":["import { useRouter as useTanStackRouter } from \"@tanstack/react-router\";\nimport type { Href } from \"../types\";\nimport { expoPathToTanStack, splitParams } from \"../utils/route-utils\";\n\nexport function useRouter() {\n const router = useTanStackRouter();\n\n function navigate(href: Href, replace = false) {\n if (typeof href === \"string\") {\n router.navigate({ to: href, replace });\n return;\n }\n\n const { pathname, params } = href;\n const to = expoPathToTanStack(pathname);\n const { pathParams, searchParams } = splitParams(pathname, params);\n\n router.navigate({\n to,\n params: pathParams,\n search: Object.keys(searchParams).length ? searchParams : undefined,\n replace,\n });\n }\n\n return {\n push: (href: Href) => navigate(href, false),\n replace: (href: Href) => navigate(href, true),\n navigate,\n back: () => router.history.back(),\n prefetch: router.preloadRoute,\n };\n}\n","import type { HrefObject } from \"../types\";\n\n/**\n * Converts:\n * /user/[id]/post/[slug] → /user/$id/post/$slug\n */\nexport function expoPathToTanStack(pathname: string) {\n return pathname.replace(/\\[([^\\]]+)\\]/g, (_, key) => `$${key}`);\n}\n\n/**\n * Splits params into:\n * - path params (used by dynamic segments)\n * - search params (query string)\n */\nexport function splitParams(pathname: string, params: HrefObject[\"params\"] = {}) {\n const dynamicKeys = Array.from(pathname.matchAll(/\\[([^\\]]+)\\]/g), (m) => m[1]);\n\n const pathParams: Record<string, unknown> = {};\n const searchParams: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(params)) {\n if (dynamicKeys.includes(key)) {\n pathParams[key] = value;\n } else {\n searchParams[key] = value;\n }\n }\n\n return { pathParams, searchParams };\n}\n"],"mappings":";AAAA,SAAS,aAAa,yBAAyB;;;ACMxC,SAAS,mBAAmB,UAAkB;AACnD,SAAO,SAAS,QAAQ,iBAAiB,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE;AAChE;AAOO,SAAS,YAAY,UAAkB,SAA+B,CAAC,GAAG;AAC/E,QAAM,cAAc,MAAM,KAAK,SAAS,SAAS,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAE9E,QAAM,aAAsC,CAAC;AAC7C,QAAM,eAAwC,CAAC;AAE/C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,YAAY,SAAS,GAAG,GAAG;AAC7B,iBAAW,GAAG,IAAI;AAAA,IACpB,OAAO;AACL,mBAAa,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,aAAa;AACpC;;;AD1BO,SAAS,YAAY;AAC1B,QAAM,SAAS,kBAAkB;AAEjC,WAAS,SAAS,MAAY,UAAU,OAAO;AAC7C,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,SAAS,EAAE,IAAI,MAAM,QAAQ,CAAC;AACrC;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,UAAM,KAAK,mBAAmB,QAAQ;AACtC,UAAM,EAAE,YAAY,aAAa,IAAI,YAAY,UAAU,MAAM;AAEjE,WAAO,SAAS;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM,CAAC,SAAe,SAAS,MAAM,KAAK;AAAA,IAC1C,SAAS,CAAC,SAAe,SAAS,MAAM,IAAI;AAAA,IAC5C;AAAA,IACA,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA,IAChC,UAAU,OAAO;AAAA,EACnB;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ import * as expo_router_build_global_state_routing from 'expo-router/build/global-state/routing';
2
+ import * as expo_router from 'expo-router';
3
+
4
+ declare function useRouter(): {
5
+ push: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
6
+ replace: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
7
+ back: () => void;
8
+ prefetch: (name: expo_router.Href) => void;
9
+ navigate: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
10
+ };
11
+
12
+ export { useRouter };
@@ -0,0 +1,12 @@
1
+ import * as expo_router_build_global_state_routing from 'expo-router/build/global-state/routing';
2
+ import * as expo_router from 'expo-router';
3
+
4
+ declare function useRouter(): {
5
+ push: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
6
+ replace: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
7
+ back: () => void;
8
+ prefetch: (name: expo_router.Href) => void;
9
+ navigate: (href: expo_router.Href, options?: expo_router_build_global_state_routing.NavigationOptions) => void;
10
+ };
11
+
12
+ export { useRouter };