@multiplatform.one/router 6.1.0 → 6.3.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 (106) hide show
  1. package/README.md +51 -0
  2. package/dist/cjs/hooks/useUrlState.cjs +30 -9
  3. package/dist/cjs/hooks/useUrlState.native.js +32 -9
  4. package/dist/cjs/hooks/useUrlState.native.js.map +1 -1
  5. package/dist/cjs/seam/DomNavigationHost.cjs +122 -0
  6. package/dist/cjs/seam/DomNavigationHost.native.js +186 -0
  7. package/dist/cjs/seam/DomNavigationHost.native.js.map +1 -0
  8. package/dist/cjs/seam/index.cjs +47 -0
  9. package/dist/cjs/seam/index.native.js +50 -0
  10. package/dist/cjs/seam/index.native.js.map +1 -0
  11. package/dist/cjs/seam/navigator.cjs +309 -0
  12. package/dist/cjs/seam/navigator.native.js +479 -0
  13. package/dist/cjs/seam/navigator.native.js.map +1 -0
  14. package/dist/cjs/seam/oneAdapter.cjs +128 -0
  15. package/dist/cjs/seam/oneAdapter.native.js +141 -0
  16. package/dist/cjs/seam/oneAdapter.native.js.map +1 -0
  17. package/dist/esm/hooks/useUrlState.mjs +31 -10
  18. package/dist/esm/hooks/useUrlState.mjs.map +1 -1
  19. package/dist/esm/hooks/useUrlState.native.js +33 -10
  20. package/dist/esm/hooks/useUrlState.native.js.map +1 -1
  21. package/dist/esm/seam/DomNavigationHost.mjs +96 -0
  22. package/dist/esm/seam/DomNavigationHost.mjs.map +1 -0
  23. package/dist/esm/seam/DomNavigationHost.native.js +157 -0
  24. package/dist/esm/seam/DomNavigationHost.native.js.map +1 -0
  25. package/dist/esm/seam/index.mjs +5 -0
  26. package/dist/esm/seam/index.mjs.map +1 -0
  27. package/dist/esm/seam/index.native.js +5 -0
  28. package/dist/esm/seam/index.native.js.map +1 -0
  29. package/dist/esm/seam/navigator.mjs +279 -0
  30. package/dist/esm/seam/navigator.mjs.map +1 -0
  31. package/dist/esm/seam/navigator.native.js +446 -0
  32. package/dist/esm/seam/navigator.native.js.map +1 -0
  33. package/dist/esm/seam/oneAdapter.mjs +90 -0
  34. package/dist/esm/seam/oneAdapter.mjs.map +1 -0
  35. package/dist/esm/seam/oneAdapter.native.js +100 -0
  36. package/dist/esm/seam/oneAdapter.native.js.map +1 -0
  37. package/dist/jsx/hooks/useUrlState.mjs +31 -10
  38. package/dist/jsx/hooks/useUrlState.mjs.map +1 -1
  39. package/dist/jsx/hooks/useUrlState.native.js +32 -9
  40. package/dist/jsx/hooks/useUrlState.native.js.map +1 -1
  41. package/dist/jsx/seam/DomNavigationHost.mjs +96 -0
  42. package/dist/jsx/seam/DomNavigationHost.mjs.map +1 -0
  43. package/dist/jsx/seam/DomNavigationHost.native.js +186 -0
  44. package/dist/jsx/seam/DomNavigationHost.native.js.map +1 -0
  45. package/dist/jsx/seam/index.mjs +5 -0
  46. package/dist/jsx/seam/index.mjs.map +1 -0
  47. package/dist/jsx/seam/index.native.js +50 -0
  48. package/dist/jsx/seam/index.native.js.map +1 -0
  49. package/dist/jsx/seam/navigator.mjs +279 -0
  50. package/dist/jsx/seam/navigator.mjs.map +1 -0
  51. package/dist/jsx/seam/navigator.native.js +479 -0
  52. package/dist/jsx/seam/navigator.native.js.map +1 -0
  53. package/dist/jsx/seam/oneAdapter.mjs +90 -0
  54. package/dist/jsx/seam/oneAdapter.mjs.map +1 -0
  55. package/dist/jsx/seam/oneAdapter.native.js +141 -0
  56. package/dist/jsx/seam/oneAdapter.native.js.map +1 -0
  57. package/package.json +26 -9
  58. package/src/hooks/urlStateEdges.spec.ts +98 -0
  59. package/src/hooks/useUrlState.ts +34 -8
  60. package/src/seam/DomNavigationHost.spec.tsx +78 -0
  61. package/src/seam/DomNavigationHost.tsx +150 -0
  62. package/src/seam/index.ts +41 -0
  63. package/src/seam/navigator.spec.ts +189 -0
  64. package/src/seam/navigator.ts +405 -0
  65. package/src/seam/oneAdapter.tsx +166 -0
  66. package/types/hooks/index.d.ts +2 -0
  67. package/types/hooks/index.d.ts.map +1 -0
  68. package/types/hooks/useUrlState.d.ts +36 -0
  69. package/types/hooks/useUrlState.d.ts.map +1 -0
  70. package/types/index.d.ts +4 -0
  71. package/types/index.d.ts.map +1 -0
  72. package/types/index.storybook.d.ts +4 -0
  73. package/types/index.storybook.d.ts.map +1 -0
  74. package/types/router/EmptyRouter.d.ts +7 -0
  75. package/types/router/EmptyRouter.d.ts.map +1 -0
  76. package/types/router/ReactRouter.d.ts +6 -0
  77. package/types/router/ReactRouter.d.ts.map +1 -0
  78. package/types/router/index.d.ts +2 -0
  79. package/types/router/index.d.ts.map +1 -0
  80. package/types/router/index.storybook-expo.d.ts +2 -0
  81. package/types/router/index.storybook-expo.d.ts.map +1 -0
  82. package/types/router/index.storybook.d.ts +2 -0
  83. package/types/router/index.storybook.d.ts.map +1 -0
  84. package/types/router/index.webext.d.ts +2 -0
  85. package/types/router/index.webext.d.ts.map +1 -0
  86. package/types/seam/DomNavigationHost.d.ts +33 -0
  87. package/types/seam/DomNavigationHost.d.ts.map +1 -0
  88. package/types/seam/index.d.ts +7 -0
  89. package/types/seam/index.d.ts.map +1 -0
  90. package/types/seam/navigator.d.ts +133 -0
  91. package/types/seam/navigator.d.ts.map +1 -0
  92. package/types/seam/oneAdapter.d.ts +57 -0
  93. package/types/seam/oneAdapter.d.ts.map +1 -0
  94. package/types/types.d.ts +40 -0
  95. package/types/types.d.ts.map +1 -0
  96. package/dist/cjs/hooks/useUrlState.spec.cjs +0 -280
  97. package/dist/cjs/hooks/useUrlState.spec.native.js +0 -315
  98. package/dist/cjs/hooks/useUrlState.spec.native.js.map +0 -1
  99. package/dist/esm/hooks/useUrlState.spec.mjs +0 -257
  100. package/dist/esm/hooks/useUrlState.spec.mjs.map +0 -1
  101. package/dist/esm/hooks/useUrlState.spec.native.js +0 -289
  102. package/dist/esm/hooks/useUrlState.spec.native.js.map +0 -1
  103. package/dist/jsx/hooks/useUrlState.spec.mjs +0 -257
  104. package/dist/jsx/hooks/useUrlState.spec.mjs.map +0 -1
  105. package/dist/jsx/hooks/useUrlState.spec.native.js +0 -315
  106. package/dist/jsx/hooks/useUrlState.spec.native.js.map +0 -1
@@ -1,257 +0,0 @@
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
@@ -1 +0,0 @@
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":[]}
@@ -1,289 +0,0 @@
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.native.js";
4
- import { useSearchParams, useTypedSearchParams, useUrlState } from "./useUrlState.native.js";
5
- vi.mock("../router", function () {
6
- var mockSetParams = vi.fn();
7
- return {
8
- useParams: vi.fn(function () {
9
- return {};
10
- }),
11
- useRouter: vi.fn(function () {
12
- return {
13
- setParams: mockSetParams
14
- };
15
- })
16
- };
17
- });
18
- var mockUseParams = router.useParams;
19
- var mockUseRouter = router.useRouter;
20
- describe("useUrlState", function () {
21
- beforeEach(function () {
22
- vi.clearAllMocks();
23
- });
24
- describe("useSearchParams", function () {
25
- it("should return current search params", function () {
26
- mockUseParams.mockReturnValue({
27
- foo: "bar",
28
- baz: "qux"
29
- });
30
- var {
31
- result
32
- } = renderHook(function () {
33
- return useSearchParams();
34
- });
35
- var [params] = result.current;
36
- expect(params).toEqual({
37
- foo: "bar",
38
- baz: "qux"
39
- });
40
- });
41
- it("should update search params", function () {
42
- var setParamsMock = vi.fn();
43
- mockUseRouter.mockReturnValue({
44
- setParams: setParamsMock
45
- });
46
- var {
47
- result
48
- } = renderHook(function () {
49
- return useSearchParams();
50
- });
51
- var [, setParams] = result.current;
52
- act(function () {
53
- setParams({
54
- foo: "bar"
55
- });
56
- });
57
- expect(setParamsMock).toHaveBeenCalledWith({
58
- foo: "bar"
59
- });
60
- });
61
- it("should support function updates", function () {
62
- var setParamsMock = vi.fn();
63
- mockUseParams.mockReturnValue({
64
- existing: "value"
65
- });
66
- mockUseRouter.mockReturnValue({
67
- setParams: setParamsMock
68
- });
69
- var {
70
- result
71
- } = renderHook(function () {
72
- return useSearchParams();
73
- });
74
- var [, setParams] = result.current;
75
- act(function () {
76
- setParams(function (prev) {
77
- return {
78
- ...prev,
79
- new: "param"
80
- };
81
- });
82
- });
83
- expect(setParamsMock).toHaveBeenCalledWith({
84
- existing: "value",
85
- new: "param"
86
- });
87
- });
88
- it("should debounce updates when specified", async function () {
89
- var setParamsMock = vi.fn();
90
- mockUseRouter.mockReturnValue({
91
- setParams: setParamsMock
92
- });
93
- var {
94
- result
95
- } = renderHook(function () {
96
- return useSearchParams();
97
- });
98
- var [, setParams] = result.current;
99
- act(function () {
100
- setParams({
101
- foo: "bar"
102
- }, {
103
- debounceMs: 100
104
- });
105
- });
106
- expect(setParamsMock).not.toHaveBeenCalled();
107
- await waitFor(function () {
108
- expect(setParamsMock).toHaveBeenCalledWith({
109
- foo: "bar"
110
- });
111
- }, {
112
- timeout: 200
113
- });
114
- });
115
- });
116
- describe("useUrlState", function () {
117
- it("should initialize with default values", function () {
118
- mockUseParams.mockReturnValue({});
119
- var defaultValues = {
120
- name: "",
121
- age: 0,
122
- active: false
123
- };
124
- var {
125
- result
126
- } = renderHook(function () {
127
- return useUrlState(defaultValues);
128
- });
129
- var [state] = result.current;
130
- expect(state).toEqual(defaultValues);
131
- });
132
- it("should deserialize URL params", function () {
133
- mockUseParams.mockReturnValue({
134
- name: "John",
135
- age: "25",
136
- active: "true"
137
- });
138
- var defaultValues = {
139
- name: "",
140
- age: 0,
141
- active: false
142
- };
143
- var {
144
- result
145
- } = renderHook(function () {
146
- return useUrlState(defaultValues);
147
- });
148
- var [state] = result.current;
149
- expect(state).toEqual({
150
- name: "John",
151
- age: 25,
152
- active: true
153
- });
154
- });
155
- it("should serialize state to URL params", function () {
156
- var setParamsMock = vi.fn();
157
- mockUseParams.mockReturnValue({});
158
- mockUseRouter.mockReturnValue({
159
- setParams: setParamsMock
160
- });
161
- var defaultValues = {
162
- name: "",
163
- age: 0,
164
- active: false
165
- };
166
- var {
167
- result
168
- } = renderHook(function () {
169
- return useUrlState(defaultValues, {
170
- debounceMs: 0
171
- });
172
- });
173
- var [, setState] = result.current;
174
- act(function () {
175
- setState({
176
- name: "John",
177
- age: 25,
178
- active: true
179
- });
180
- });
181
- expect(setParamsMock).toHaveBeenCalledWith({
182
- name: "John",
183
- age: "25",
184
- active: "true"
185
- });
186
- });
187
- it("should handle arrays", function () {
188
- mockUseParams.mockReturnValue({
189
- tags: ["react", "typescript"]
190
- });
191
- var defaultValues = {
192
- tags: []
193
- };
194
- var {
195
- result
196
- } = renderHook(function () {
197
- return useUrlState(defaultValues);
198
- });
199
- var [state] = result.current;
200
- expect(state).toEqual({
201
- tags: ["react", "typescript"]
202
- });
203
- });
204
- it("should handle objects with JSON serialization", function () {
205
- mockUseParams.mockReturnValue({
206
- config: '{"theme":"dark","lang":"en"}'
207
- });
208
- var defaultValues = {
209
- config: {
210
- theme: "light",
211
- lang: "en"
212
- }
213
- };
214
- var {
215
- result
216
- } = renderHook(function () {
217
- return useUrlState(defaultValues);
218
- });
219
- var [state] = result.current;
220
- expect(state).toEqual({
221
- config: {
222
- theme: "dark",
223
- lang: "en"
224
- }
225
- });
226
- });
227
- });
228
- describe("useTypedSearchParams", function () {
229
- it("should parse params with schema", function () {
230
- mockUseParams.mockReturnValue({
231
- page: "2",
232
- limit: "50",
233
- search: "test"
234
- });
235
- var schema = {
236
- page: {
237
- default: 1,
238
- parse: function parse(value) {
239
- return value ? Number.parseInt(String(value), 10) : 1;
240
- }
241
- },
242
- limit: {
243
- default: 20,
244
- parse: function parse(value) {
245
- return value ? Number.parseInt(String(value), 10) : 20;
246
- }
247
- },
248
- search: {
249
- default: ""
250
- }
251
- };
252
- var {
253
- result
254
- } = renderHook(function () {
255
- return useTypedSearchParams(schema);
256
- });
257
- expect(result.current).toEqual({
258
- page: 2,
259
- limit: 50,
260
- search: "test"
261
- });
262
- });
263
- it("should use defaults for missing params", function () {
264
- mockUseParams.mockReturnValue({});
265
- var schema = {
266
- page: {
267
- default: 1
268
- },
269
- limit: {
270
- default: 20
271
- },
272
- search: {
273
- default: ""
274
- }
275
- };
276
- var {
277
- result
278
- } = renderHook(function () {
279
- return useTypedSearchParams(schema);
280
- });
281
- expect(result.current).toEqual({
282
- page: 1,
283
- limit: 20,
284
- search: ""
285
- });
286
- });
287
- });
288
- });
289
- //# sourceMappingURL=useUrlState.spec.native.js.map
@@ -1 +0,0 @@
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"],"sources":["../../../src/hooks/useUrlState.spec.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}