@multiplatform.one/router 5.0.26 → 6.0.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 (249) hide show
  1. package/dist/cjs/hooks/index.cjs +31 -0
  2. package/dist/cjs/hooks/index.native.js +34 -0
  3. package/dist/cjs/hooks/index.native.js.map +1 -0
  4. package/dist/cjs/hooks/useUrlState.cjs +185 -0
  5. package/dist/cjs/hooks/useUrlState.native.js +203 -0
  6. package/dist/cjs/hooks/useUrlState.native.js.map +1 -0
  7. package/dist/cjs/hooks/useUrlState.spec.cjs +280 -0
  8. package/dist/cjs/hooks/useUrlState.spec.native.js +315 -0
  9. package/dist/cjs/hooks/useUrlState.spec.native.js.map +1 -0
  10. package/dist/cjs/index.cjs +9 -6
  11. package/dist/cjs/index.native.js +16 -13
  12. package/dist/cjs/index.native.js.map +1 -6
  13. package/dist/cjs/index.storybook.cjs +34 -0
  14. package/dist/cjs/index.storybook.native.js +37 -0
  15. package/dist/cjs/index.storybook.native.js.map +1 -0
  16. package/dist/cjs/router/EmptyRouter.cjs +78 -0
  17. package/dist/cjs/router/EmptyRouter.native.js +106 -0
  18. package/dist/cjs/router/EmptyRouter.native.js.map +1 -0
  19. package/dist/cjs/router/ReactRouter.cjs +107 -0
  20. package/dist/cjs/router/ReactRouter.native.js +135 -0
  21. package/dist/cjs/router/ReactRouter.native.js.map +1 -0
  22. package/dist/cjs/router/index.cjs +17 -67
  23. package/dist/cjs/router/index.native.js +22 -81
  24. package/dist/cjs/router/index.native.js.map +1 -6
  25. package/dist/cjs/router/index.storybook-expo.cjs +8 -6
  26. package/dist/cjs/router/index.storybook-expo.native.js +14 -11
  27. package/dist/cjs/router/index.storybook-expo.native.js.map +1 -6
  28. package/dist/cjs/router/index.storybook.cjs +8 -6
  29. package/dist/cjs/router/index.storybook.native.js +14 -11
  30. package/dist/cjs/router/index.storybook.native.js.map +1 -6
  31. package/dist/cjs/router/index.webext.cjs +8 -6
  32. package/dist/cjs/router/index.webext.native.js +14 -11
  33. package/dist/cjs/router/index.webext.native.js.map +1 -6
  34. package/dist/cjs/types.cjs +7 -5
  35. package/dist/cjs/types.native.js +11 -5
  36. package/dist/cjs/types.native.js.map +1 -6
  37. package/dist/esm/hooks/index.mjs +3 -0
  38. package/dist/esm/hooks/index.mjs.map +1 -0
  39. package/dist/esm/hooks/index.native.js +3 -0
  40. package/dist/esm/hooks/index.native.js.map +1 -0
  41. package/dist/esm/hooks/useUrlState.mjs +157 -0
  42. package/dist/esm/hooks/useUrlState.mjs.map +1 -0
  43. package/dist/esm/hooks/useUrlState.native.js +172 -0
  44. package/dist/esm/hooks/useUrlState.native.js.map +1 -0
  45. package/dist/esm/hooks/useUrlState.spec.mjs +257 -0
  46. package/dist/esm/hooks/useUrlState.spec.mjs.map +1 -0
  47. package/dist/esm/hooks/useUrlState.spec.native.js +289 -0
  48. package/dist/esm/hooks/useUrlState.spec.native.js.map +1 -0
  49. package/dist/esm/index.mjs +1 -0
  50. package/dist/esm/index.mjs.map +1 -1
  51. package/dist/esm/index.native.js +4 -3
  52. package/dist/esm/index.native.js.map +1 -6
  53. package/dist/esm/index.storybook.mjs +5 -0
  54. package/dist/esm/index.storybook.mjs.map +1 -0
  55. package/dist/esm/index.storybook.native.js +5 -0
  56. package/dist/esm/index.storybook.native.js.map +1 -0
  57. package/dist/esm/router/EmptyRouter.mjs +49 -0
  58. package/dist/esm/router/EmptyRouter.mjs.map +1 -0
  59. package/dist/esm/router/EmptyRouter.native.js +74 -0
  60. package/dist/esm/router/EmptyRouter.native.js.map +1 -0
  61. package/dist/esm/router/ReactRouter.mjs +79 -0
  62. package/dist/esm/router/ReactRouter.mjs.map +1 -0
  63. package/dist/esm/router/ReactRouter.native.js +104 -0
  64. package/dist/esm/router/ReactRouter.native.js.map +1 -0
  65. package/dist/esm/router/index.mjs +1 -53
  66. package/dist/esm/router/index.mjs.map +1 -1
  67. package/dist/esm/router/index.native.js +3 -71
  68. package/dist/esm/router/index.native.js.map +1 -6
  69. package/dist/esm/router/index.storybook-expo.mjs +1 -1
  70. package/dist/esm/router/index.storybook-expo.mjs.map +1 -1
  71. package/dist/esm/router/index.storybook-expo.native.js +2 -2
  72. package/dist/esm/router/index.storybook-expo.native.js.map +1 -6
  73. package/dist/esm/router/index.storybook.mjs +1 -1
  74. package/dist/esm/router/index.storybook.mjs.map +1 -1
  75. package/dist/esm/router/index.storybook.native.js +2 -2
  76. package/dist/esm/router/index.storybook.native.js.map +1 -6
  77. package/dist/esm/router/index.webext.mjs +1 -1
  78. package/dist/esm/router/index.webext.mjs.map +1 -1
  79. package/dist/esm/router/index.webext.native.js +2 -2
  80. package/dist/esm/router/index.webext.native.js.map +1 -6
  81. package/dist/esm/types.native.js +2 -1
  82. package/dist/esm/types.native.js.map +1 -6
  83. package/dist/jsx/hooks/index.mjs +3 -0
  84. package/dist/jsx/hooks/index.mjs.map +1 -0
  85. package/dist/jsx/hooks/index.native.js +34 -0
  86. package/dist/jsx/hooks/index.native.js.map +1 -0
  87. package/dist/jsx/hooks/useUrlState.mjs +157 -0
  88. package/dist/jsx/hooks/useUrlState.mjs.map +1 -0
  89. package/dist/jsx/hooks/useUrlState.native.js +203 -0
  90. package/dist/jsx/hooks/useUrlState.native.js.map +1 -0
  91. package/dist/jsx/hooks/useUrlState.spec.mjs +257 -0
  92. package/dist/jsx/hooks/useUrlState.spec.mjs.map +1 -0
  93. package/dist/jsx/hooks/useUrlState.spec.native.js +315 -0
  94. package/dist/jsx/hooks/useUrlState.spec.native.js.map +1 -0
  95. package/dist/jsx/index.js +3 -2
  96. package/dist/jsx/index.js.map +1 -6
  97. package/dist/jsx/index.mjs +1 -0
  98. package/dist/jsx/index.mjs.map +1 -1
  99. package/dist/jsx/index.native.js +25 -3
  100. package/dist/jsx/index.native.js.map +1 -6
  101. package/dist/jsx/index.storybook.mjs +5 -0
  102. package/dist/jsx/index.storybook.mjs.map +1 -0
  103. package/dist/jsx/index.storybook.native.js +37 -0
  104. package/dist/jsx/index.storybook.native.js.map +1 -0
  105. package/dist/jsx/router/EmptyRouter.mjs +49 -0
  106. package/dist/jsx/router/EmptyRouter.mjs.map +1 -0
  107. package/dist/jsx/router/EmptyRouter.native.js +106 -0
  108. package/dist/jsx/router/EmptyRouter.native.js.map +1 -0
  109. package/dist/jsx/router/ReactRouter.mjs +79 -0
  110. package/dist/jsx/router/ReactRouter.mjs.map +1 -0
  111. package/dist/jsx/router/ReactRouter.native.js +135 -0
  112. package/dist/jsx/router/ReactRouter.native.js.map +1 -0
  113. package/dist/jsx/router/index.mjs +1 -53
  114. package/dist/jsx/router/index.mjs.map +1 -1
  115. package/dist/jsx/router/index.native.js +31 -68
  116. package/dist/jsx/router/index.native.js.map +1 -6
  117. package/dist/jsx/router/index.storybook-expo.mjs +1 -1
  118. package/dist/jsx/router/index.storybook-expo.mjs.map +1 -1
  119. package/dist/jsx/router/index.storybook-expo.native.js +23 -2
  120. package/dist/jsx/router/index.storybook-expo.native.js.map +1 -6
  121. package/dist/jsx/router/index.storybook.mjs +1 -1
  122. package/dist/jsx/router/index.storybook.mjs.map +1 -1
  123. package/dist/jsx/router/index.storybook.native.js +23 -2
  124. package/dist/jsx/router/index.storybook.native.js.map +1 -6
  125. package/dist/jsx/router/index.webext.mjs +1 -1
  126. package/dist/jsx/router/index.webext.mjs.map +1 -1
  127. package/dist/jsx/router/index.webext.native.js +23 -2
  128. package/dist/jsx/router/index.webext.native.js.map +1 -6
  129. package/dist/jsx/types.native.js +21 -1
  130. package/dist/jsx/types.native.js.map +1 -6
  131. package/package.json +46 -36
  132. package/src/hooks/README.md +232 -0
  133. package/src/hooks/index.ts +8 -0
  134. package/src/hooks/useUrlState.spec.ts +219 -0
  135. package/src/hooks/useUrlState.ts +231 -0
  136. package/src/index.storybook.ts +3 -0
  137. package/src/index.ts +1 -21
  138. package/src/router/EmptyRouter.tsx +50 -0
  139. package/src/router/{reactRouter.tsx → ReactRouter.tsx} +27 -22
  140. package/src/router/index.storybook-expo.tsx +1 -22
  141. package/src/router/index.storybook.tsx +1 -22
  142. package/src/router/index.tsx +1 -97
  143. package/src/router/index.webext.tsx +1 -22
  144. package/src/types.tsx +3 -24
  145. package/dist/cjs/index.js +0 -16
  146. package/dist/cjs/index.js.map +0 -6
  147. package/dist/cjs/router/emptyRouter.cjs +0 -55
  148. package/dist/cjs/router/emptyRouter.js +0 -47
  149. package/dist/cjs/router/emptyRouter.js.map +0 -6
  150. package/dist/cjs/router/emptyRouter.native.js +0 -77
  151. package/dist/cjs/router/emptyRouter.native.js.map +0 -6
  152. package/dist/cjs/router/index.electron.cjs +0 -18
  153. package/dist/cjs/router/index.electron.js +0 -15
  154. package/dist/cjs/router/index.electron.js.map +0 -6
  155. package/dist/cjs/router/index.electron.native.js +0 -20
  156. package/dist/cjs/router/index.electron.native.js.map +0 -6
  157. package/dist/cjs/router/index.js +0 -63
  158. package/dist/cjs/router/index.js.map +0 -6
  159. package/dist/cjs/router/index.storybook-expo.js +0 -15
  160. package/dist/cjs/router/index.storybook-expo.js.map +0 -6
  161. package/dist/cjs/router/index.storybook.js +0 -15
  162. package/dist/cjs/router/index.storybook.js.map +0 -6
  163. package/dist/cjs/router/index.webext.js +0 -15
  164. package/dist/cjs/router/index.webext.js.map +0 -6
  165. package/dist/cjs/router/reactRouter.cjs +0 -74
  166. package/dist/cjs/router/reactRouter.js +0 -48
  167. package/dist/cjs/router/reactRouter.js.map +0 -6
  168. package/dist/cjs/router/reactRouter.native.js +0 -96
  169. package/dist/cjs/router/reactRouter.native.js.map +0 -6
  170. package/dist/cjs/types.js +0 -14
  171. package/dist/cjs/types.js.map +0 -6
  172. package/dist/esm/index.js +0 -3
  173. package/dist/esm/index.js.map +0 -6
  174. package/dist/esm/router/emptyRouter.js +0 -31
  175. package/dist/esm/router/emptyRouter.js.map +0 -6
  176. package/dist/esm/router/emptyRouter.mjs +0 -29
  177. package/dist/esm/router/emptyRouter.mjs.map +0 -1
  178. package/dist/esm/router/emptyRouter.native.js +0 -54
  179. package/dist/esm/router/emptyRouter.native.js.map +0 -6
  180. package/dist/esm/router/index.electron.js +0 -2
  181. package/dist/esm/router/index.electron.js.map +0 -6
  182. package/dist/esm/router/index.electron.mjs +0 -2
  183. package/dist/esm/router/index.electron.mjs.map +0 -1
  184. package/dist/esm/router/index.electron.native.js +0 -2
  185. package/dist/esm/router/index.electron.native.js.map +0 -6
  186. package/dist/esm/router/index.js +0 -52
  187. package/dist/esm/router/index.js.map +0 -6
  188. package/dist/esm/router/index.storybook-expo.js +0 -2
  189. package/dist/esm/router/index.storybook-expo.js.map +0 -6
  190. package/dist/esm/router/index.storybook.js +0 -2
  191. package/dist/esm/router/index.storybook.js.map +0 -6
  192. package/dist/esm/router/index.webext.js +0 -2
  193. package/dist/esm/router/index.webext.js.map +0 -6
  194. package/dist/esm/router/reactRouter.js +0 -38
  195. package/dist/esm/router/reactRouter.js.map +0 -6
  196. package/dist/esm/router/reactRouter.mjs +0 -48
  197. package/dist/esm/router/reactRouter.mjs.map +0 -1
  198. package/dist/esm/router/reactRouter.native.js +0 -74
  199. package/dist/esm/router/reactRouter.native.js.map +0 -6
  200. package/dist/esm/types.js +0 -1
  201. package/dist/esm/types.js.map +0 -6
  202. package/dist/jsx/router/emptyRouter.js +0 -31
  203. package/dist/jsx/router/emptyRouter.js.map +0 -6
  204. package/dist/jsx/router/emptyRouter.mjs +0 -29
  205. package/dist/jsx/router/emptyRouter.mjs.map +0 -1
  206. package/dist/jsx/router/emptyRouter.native.js +0 -54
  207. package/dist/jsx/router/emptyRouter.native.js.map +0 -6
  208. package/dist/jsx/router/index.electron.js +0 -2
  209. package/dist/jsx/router/index.electron.js.map +0 -6
  210. package/dist/jsx/router/index.electron.mjs +0 -2
  211. package/dist/jsx/router/index.electron.mjs.map +0 -1
  212. package/dist/jsx/router/index.electron.native.js +0 -2
  213. package/dist/jsx/router/index.electron.native.js.map +0 -6
  214. package/dist/jsx/router/index.js +0 -52
  215. package/dist/jsx/router/index.js.map +0 -6
  216. package/dist/jsx/router/index.storybook-expo.js +0 -2
  217. package/dist/jsx/router/index.storybook-expo.js.map +0 -6
  218. package/dist/jsx/router/index.storybook.js +0 -2
  219. package/dist/jsx/router/index.storybook.js.map +0 -6
  220. package/dist/jsx/router/index.webext.js +0 -2
  221. package/dist/jsx/router/index.webext.js.map +0 -6
  222. package/dist/jsx/router/reactRouter.js +0 -38
  223. package/dist/jsx/router/reactRouter.js.map +0 -6
  224. package/dist/jsx/router/reactRouter.mjs +0 -48
  225. package/dist/jsx/router/reactRouter.mjs.map +0 -1
  226. package/dist/jsx/router/reactRouter.native.js +0 -74
  227. package/dist/jsx/router/reactRouter.native.js.map +0 -6
  228. package/dist/jsx/types.js +0 -1
  229. package/dist/jsx/types.js.map +0 -6
  230. package/src/router/emptyRouter.tsx +0 -56
  231. package/src/router/index.electron.tsx +0 -22
  232. package/types/index.d.ts +0 -3
  233. package/types/index.d.ts.map +0 -1
  234. package/types/router/emptyRouter.d.ts +0 -26
  235. package/types/router/emptyRouter.d.ts.map +0 -1
  236. package/types/router/index.d.ts +0 -27
  237. package/types/router/index.d.ts.map +0 -1
  238. package/types/router/index.electron.d.ts +0 -22
  239. package/types/router/index.electron.d.ts.map +0 -1
  240. package/types/router/index.storybook-expo.d.ts +0 -22
  241. package/types/router/index.storybook-expo.d.ts.map +0 -1
  242. package/types/router/index.storybook.d.ts +0 -22
  243. package/types/router/index.storybook.d.ts.map +0 -1
  244. package/types/router/index.webext.d.ts +0 -22
  245. package/types/router/index.webext.d.ts.map +0 -1
  246. package/types/router/reactRouter.d.ts +0 -27
  247. package/types/router/reactRouter.d.ts.map +0 -1
  248. package/types/types.d.ts +0 -60
  249. package/types/types.d.ts.map +0 -1
@@ -0,0 +1,172 @@
1
+ import { useCallback, useEffect, useMemo, useRef } from "react";
2
+ import { isWeb } from "@multiplatform.one/platform";
3
+ import { useParams, useRouter } from "../router/index.native.js";
4
+ function _type_of(obj) {
5
+ "@swc/helpers - typeof";
6
+
7
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
8
+ }
9
+ function useSearchParams() {
10
+ var router = useRouter();
11
+ var currentParams = useParams();
12
+ var debounceTimerRef = useRef(void 0);
13
+ var searchParams = useMemo(function () {
14
+ var params = {};
15
+ Object.entries(currentParams).forEach(function (param) {
16
+ var [key, value] = param;
17
+ if (value !== void 0 && value !== null) {
18
+ params[key] = value;
19
+ }
20
+ });
21
+ return params;
22
+ }, [currentParams]);
23
+ var setSearchParams = useCallback(function (newParams) {
24
+ var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
25
+ var {
26
+ replace: _replace = true,
27
+ debounceMs = 0
28
+ } = options;
29
+ var updateParams = function updateParams2() {
30
+ var updatedParams = typeof newParams === "function" ? newParams(searchParams) : newParams;
31
+ var cleanParams = {};
32
+ Object.entries(updatedParams).forEach(function (param) {
33
+ var [key, value] = param;
34
+ if (value !== void 0 && value !== null && value !== "") {
35
+ cleanParams[key] = value;
36
+ }
37
+ });
38
+ router.setParams(cleanParams);
39
+ };
40
+ if (debounceMs > 0) {
41
+ if (debounceTimerRef.current) {
42
+ clearTimeout(debounceTimerRef.current);
43
+ }
44
+ debounceTimerRef.current = setTimeout(updateParams, debounceMs);
45
+ } else {
46
+ updateParams();
47
+ }
48
+ }, [router, searchParams]);
49
+ useEffect(function () {
50
+ return function () {
51
+ if (debounceTimerRef.current) {
52
+ clearTimeout(debounceTimerRef.current);
53
+ }
54
+ };
55
+ }, []);
56
+ return [searchParams, setSearchParams];
57
+ }
58
+ function useUrlState(defaultValues) {
59
+ var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
60
+ var {
61
+ debounceMs = 500,
62
+ serialize = function (value) {
63
+ var params = {};
64
+ Object.entries(value).forEach(function (param) {
65
+ var [key, val] = param;
66
+ if (val !== void 0 && val !== null && val !== "") {
67
+ if (Array.isArray(val)) {
68
+ params[key] = val.map(String);
69
+ } else if ((typeof val === "undefined" ? "undefined" : _type_of(val)) === "object") {
70
+ params[key] = JSON.stringify(val);
71
+ } else {
72
+ params[key] = String(val);
73
+ }
74
+ }
75
+ });
76
+ return params;
77
+ },
78
+ deserialize = function (params) {
79
+ var result = {};
80
+ Object.entries(params).forEach(function (param) {
81
+ var [key, value] = param;
82
+ if (key in defaultValues) {
83
+ var defaultValue = defaultValues[key];
84
+ if (value === void 0) {
85
+ result[key] = defaultValue;
86
+ } else if (Array.isArray(defaultValue)) {
87
+ result[key] = Array.isArray(value) ? value : [value];
88
+ } else if (typeof defaultValue === "boolean") {
89
+ result[key] = value === "true";
90
+ } else if (typeof defaultValue === "number") {
91
+ result[key] = Number(value);
92
+ } else if ((typeof defaultValue === "undefined" ? "undefined" : _type_of(defaultValue)) === "object" && defaultValue !== null) {
93
+ try {
94
+ result[key] = JSON.parse(String(value));
95
+ } catch (unused) {
96
+ result[key] = defaultValue;
97
+ }
98
+ } else {
99
+ result[key] = value;
100
+ }
101
+ }
102
+ });
103
+ Object.keys(defaultValues).forEach(function (key) {
104
+ if (!(key in result)) {
105
+ result[key] = defaultValues[key];
106
+ }
107
+ });
108
+ return result;
109
+ }
110
+ } = options;
111
+ var [searchParams, setSearchParams] = useSearchParams();
112
+ var currentState = useMemo(function () {
113
+ return deserialize(searchParams);
114
+ }, [searchParams, deserialize]);
115
+ var setState = useCallback(function (newState) {
116
+ var updatedState = typeof newState === "function" ? newState(currentState) : newState;
117
+ var mergedState = {
118
+ ...currentState,
119
+ ...updatedState
120
+ };
121
+ var serialized = serialize(mergedState);
122
+ setSearchParams(serialized, {
123
+ debounceMs
124
+ });
125
+ }, [currentState, serialize, setSearchParams, debounceMs]);
126
+ return [currentState, setState];
127
+ }
128
+ function useShareableUrl() {
129
+ var params = useParams();
130
+ var shareableUrl = useMemo(function () {
131
+ if (!isWeb || typeof window === "undefined") {
132
+ return "";
133
+ }
134
+ var url = new URL(window.location.href);
135
+ url.search = "";
136
+ Object.entries(params).forEach(function (param) {
137
+ var [key, value] = param;
138
+ if (value !== void 0 && value !== null && value !== "") {
139
+ if (Array.isArray(value)) {
140
+ value.forEach(function (v) {
141
+ return url.searchParams.append(key, String(v));
142
+ });
143
+ } else {
144
+ url.searchParams.set(key, String(value));
145
+ }
146
+ }
147
+ });
148
+ return url.toString();
149
+ }, [params]);
150
+ return shareableUrl;
151
+ }
152
+ function useTypedSearchParams(schema) {
153
+ var params = useParams();
154
+ var typedParams = useMemo(function () {
155
+ var result = {};
156
+ Object.entries(schema).forEach(function (param) {
157
+ var [key, config] = param;
158
+ var rawValue = params[key];
159
+ if (config.parse) {
160
+ result[key] = config.parse(rawValue);
161
+ } else if (rawValue === void 0) {
162
+ result[key] = config.default;
163
+ } else {
164
+ result[key] = rawValue;
165
+ }
166
+ });
167
+ return result;
168
+ }, [params, schema]);
169
+ return typedParams;
170
+ }
171
+ export { useSearchParams, useShareableUrl, useTypedSearchParams, useUrlState };
172
+ //# sourceMappingURL=useUrlState.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","isWeb","useParams","useRouter","_type_of","obj","Symbol","constructor","useSearchParams","router","currentParams","debounceTimerRef","searchParams","params","Object","entries","forEach","param","key","value","setSearchParams","newParams","options","arguments","length","replace","_replace","debounceMs","updateParams","updateParams2","updatedParams","cleanParams","setParams","current","clearTimeout","setTimeout","useUrlState","defaultValues","serialize","val","Array","isArray","map","String","JSON","stringify","deserialize","result","defaultValue","Number","parse","unused","keys","currentState","setState","newState","updatedState","mergedState","serialized","useShareableUrl","shareableUrl","window","url","URL","location","href","search","v"],"sources":["../../../src/hooks/useUrlState.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,257 @@
1
+ import { act, renderHook, waitFor } from "@testing-library/react";
2
+ import { beforeEach, describe, expect, it, vi } from "vitest";
3
+ import * as router from "../router/index.mjs";
4
+ import { useSearchParams, useTypedSearchParams, useUrlState } from "./useUrlState.mjs";
5
+ vi.mock("../router", () => {
6
+ const mockSetParams = vi.fn();
7
+ return {
8
+ useParams: vi.fn(() => ({})),
9
+ useRouter: vi.fn(() => ({
10
+ setParams: mockSetParams
11
+ }))
12
+ };
13
+ });
14
+ const mockUseParams = router.useParams;
15
+ const mockUseRouter = router.useRouter;
16
+ describe("useUrlState", () => {
17
+ beforeEach(() => {
18
+ vi.clearAllMocks();
19
+ });
20
+ describe("useSearchParams", () => {
21
+ it("should return current search params", () => {
22
+ mockUseParams.mockReturnValue({
23
+ foo: "bar",
24
+ baz: "qux"
25
+ });
26
+ const {
27
+ result
28
+ } = renderHook(() => useSearchParams());
29
+ const [params] = result.current;
30
+ expect(params).toEqual({
31
+ foo: "bar",
32
+ baz: "qux"
33
+ });
34
+ });
35
+ it("should update search params", () => {
36
+ const setParamsMock = vi.fn();
37
+ mockUseRouter.mockReturnValue({
38
+ setParams: setParamsMock
39
+ });
40
+ const {
41
+ result
42
+ } = renderHook(() => useSearchParams());
43
+ const [, setParams] = result.current;
44
+ act(() => {
45
+ setParams({
46
+ foo: "bar"
47
+ });
48
+ });
49
+ expect(setParamsMock).toHaveBeenCalledWith({
50
+ foo: "bar"
51
+ });
52
+ });
53
+ it("should support function updates", () => {
54
+ const setParamsMock = vi.fn();
55
+ mockUseParams.mockReturnValue({
56
+ existing: "value"
57
+ });
58
+ mockUseRouter.mockReturnValue({
59
+ setParams: setParamsMock
60
+ });
61
+ const {
62
+ result
63
+ } = renderHook(() => useSearchParams());
64
+ const [, setParams] = result.current;
65
+ act(() => {
66
+ setParams(prev => ({
67
+ ...prev,
68
+ new: "param"
69
+ }));
70
+ });
71
+ expect(setParamsMock).toHaveBeenCalledWith({
72
+ existing: "value",
73
+ new: "param"
74
+ });
75
+ });
76
+ it("should debounce updates when specified", async () => {
77
+ const setParamsMock = vi.fn();
78
+ mockUseRouter.mockReturnValue({
79
+ setParams: setParamsMock
80
+ });
81
+ const {
82
+ result
83
+ } = renderHook(() => useSearchParams());
84
+ const [, setParams] = result.current;
85
+ act(() => {
86
+ setParams({
87
+ foo: "bar"
88
+ }, {
89
+ debounceMs: 100
90
+ });
91
+ });
92
+ expect(setParamsMock).not.toHaveBeenCalled();
93
+ await waitFor(() => {
94
+ expect(setParamsMock).toHaveBeenCalledWith({
95
+ foo: "bar"
96
+ });
97
+ }, {
98
+ timeout: 200
99
+ });
100
+ });
101
+ });
102
+ describe("useUrlState", () => {
103
+ it("should initialize with default values", () => {
104
+ mockUseParams.mockReturnValue({});
105
+ const defaultValues = {
106
+ name: "",
107
+ age: 0,
108
+ active: false
109
+ };
110
+ const {
111
+ result
112
+ } = renderHook(() => useUrlState(defaultValues));
113
+ const [state] = result.current;
114
+ expect(state).toEqual(defaultValues);
115
+ });
116
+ it("should deserialize URL params", () => {
117
+ mockUseParams.mockReturnValue({
118
+ name: "John",
119
+ age: "25",
120
+ active: "true"
121
+ });
122
+ const defaultValues = {
123
+ name: "",
124
+ age: 0,
125
+ active: false
126
+ };
127
+ const {
128
+ result
129
+ } = renderHook(() => useUrlState(defaultValues));
130
+ const [state] = result.current;
131
+ expect(state).toEqual({
132
+ name: "John",
133
+ age: 25,
134
+ active: true
135
+ });
136
+ });
137
+ it("should serialize state to URL params", () => {
138
+ const setParamsMock = vi.fn();
139
+ mockUseParams.mockReturnValue({});
140
+ mockUseRouter.mockReturnValue({
141
+ setParams: setParamsMock
142
+ });
143
+ const defaultValues = {
144
+ name: "",
145
+ age: 0,
146
+ active: false
147
+ };
148
+ const {
149
+ result
150
+ } = renderHook(() => useUrlState(defaultValues, {
151
+ debounceMs: 0
152
+ }));
153
+ const [, setState] = result.current;
154
+ act(() => {
155
+ setState({
156
+ name: "John",
157
+ age: 25,
158
+ active: true
159
+ });
160
+ });
161
+ expect(setParamsMock).toHaveBeenCalledWith({
162
+ name: "John",
163
+ age: "25",
164
+ active: "true"
165
+ });
166
+ });
167
+ it("should handle arrays", () => {
168
+ mockUseParams.mockReturnValue({
169
+ tags: ["react", "typescript"]
170
+ });
171
+ const defaultValues = {
172
+ tags: []
173
+ };
174
+ const {
175
+ result
176
+ } = renderHook(() => useUrlState(defaultValues));
177
+ const [state] = result.current;
178
+ expect(state).toEqual({
179
+ tags: ["react", "typescript"]
180
+ });
181
+ });
182
+ it("should handle objects with JSON serialization", () => {
183
+ mockUseParams.mockReturnValue({
184
+ config: '{"theme":"dark","lang":"en"}'
185
+ });
186
+ const defaultValues = {
187
+ config: {
188
+ theme: "light",
189
+ lang: "en"
190
+ }
191
+ };
192
+ const {
193
+ result
194
+ } = renderHook(() => useUrlState(defaultValues));
195
+ const [state] = result.current;
196
+ expect(state).toEqual({
197
+ config: {
198
+ theme: "dark",
199
+ lang: "en"
200
+ }
201
+ });
202
+ });
203
+ });
204
+ describe("useTypedSearchParams", () => {
205
+ it("should parse params with schema", () => {
206
+ mockUseParams.mockReturnValue({
207
+ page: "2",
208
+ limit: "50",
209
+ search: "test"
210
+ });
211
+ const schema = {
212
+ page: {
213
+ default: 1,
214
+ parse: value => value ? Number.parseInt(String(value), 10) : 1
215
+ },
216
+ limit: {
217
+ default: 20,
218
+ parse: value => value ? Number.parseInt(String(value), 10) : 20
219
+ },
220
+ search: {
221
+ default: ""
222
+ }
223
+ };
224
+ const {
225
+ result
226
+ } = renderHook(() => useTypedSearchParams(schema));
227
+ expect(result.current).toEqual({
228
+ page: 2,
229
+ limit: 50,
230
+ search: "test"
231
+ });
232
+ });
233
+ it("should use defaults for missing params", () => {
234
+ mockUseParams.mockReturnValue({});
235
+ const schema = {
236
+ page: {
237
+ default: 1
238
+ },
239
+ limit: {
240
+ default: 20
241
+ },
242
+ search: {
243
+ default: ""
244
+ }
245
+ };
246
+ const {
247
+ result
248
+ } = renderHook(() => useTypedSearchParams(schema));
249
+ expect(result.current).toEqual({
250
+ page: 1,
251
+ limit: 20,
252
+ search: ""
253
+ });
254
+ });
255
+ });
256
+ });
257
+ //# sourceMappingURL=useUrlState.spec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["act","renderHook","waitFor","beforeEach","describe","expect","it","vi","router","useSearchParams","useTypedSearchParams","useUrlState","mock","mockSetParams","fn","useParams","useRouter","setParams","mockUseParams","mockUseRouter","clearAllMocks","mockReturnValue","foo","baz","result","params","current","toEqual","setParamsMock","toHaveBeenCalledWith","existing","prev","new","debounceMs","not","toHaveBeenCalled","timeout","defaultValues","name","age","active","state","setState","tags","config","theme","lang","page","limit","search","schema","default","parse","value","Number","parseInt","String"],"sources":["../../../src/hooks/useUrlState.spec.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}