one 1.1.473 → 1.1.475

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 (245) hide show
  1. package/dist/cjs/Root.cjs +5 -1
  2. package/dist/cjs/Root.js +2 -2
  3. package/dist/cjs/Root.js.map +1 -1
  4. package/dist/cjs/Root.native.js +5 -2
  5. package/dist/cjs/Root.native.js.map +2 -2
  6. package/dist/cjs/createApp.cjs +2 -0
  7. package/dist/cjs/createApp.js +16 -2
  8. package/dist/cjs/createApp.js.map +1 -1
  9. package/dist/cjs/createApp.native.js +1 -0
  10. package/dist/cjs/createApp.native.js.map +2 -2
  11. package/dist/cjs/fork/__tests__/getPathFromState.test.cjs +1440 -0
  12. package/dist/cjs/fork/__tests__/getPathFromState.test.js +1559 -0
  13. package/dist/cjs/fork/__tests__/getPathFromState.test.js.map +6 -0
  14. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js +1726 -0
  15. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +6 -0
  16. package/dist/cjs/fork/__tests__/getStateFromPath.test.cjs +2565 -0
  17. package/dist/cjs/fork/__tests__/getStateFromPath.test.js +2702 -0
  18. package/dist/cjs/fork/__tests__/getStateFromPath.test.js.map +6 -0
  19. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js +2861 -0
  20. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +6 -0
  21. package/dist/cjs/fork/getPathFromState.cjs +2 -1
  22. package/dist/cjs/fork/getPathFromState.js +1 -1
  23. package/dist/cjs/fork/getPathFromState.js.map +1 -1
  24. package/dist/cjs/fork/getPathFromState.native.js +10 -5
  25. package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
  26. package/dist/cjs/fork/getPathFromState.test.cjs +113 -0
  27. package/dist/cjs/fork/getPathFromState.test.js +122 -0
  28. package/dist/cjs/fork/getPathFromState.test.js.map +6 -0
  29. package/dist/cjs/fork/getPathFromState.test.native.js +135 -0
  30. package/dist/cjs/fork/getPathFromState.test.native.js.map +6 -0
  31. package/dist/cjs/fork/getStateFromPath.test.cjs +229 -0
  32. package/dist/cjs/fork/getStateFromPath.test.js +290 -0
  33. package/dist/cjs/fork/getStateFromPath.test.js.map +6 -0
  34. package/dist/cjs/fork/getStateFromPath.test.native.js +374 -0
  35. package/dist/cjs/fork/getStateFromPath.test.native.js.map +6 -0
  36. package/dist/cjs/render.cjs +1 -1
  37. package/dist/cjs/render.js +1 -1
  38. package/dist/cjs/render.js.map +1 -1
  39. package/dist/cjs/router/FlagsContext.cjs +27 -0
  40. package/dist/cjs/router/FlagsContext.js +22 -0
  41. package/dist/cjs/router/FlagsContext.js.map +6 -0
  42. package/dist/cjs/router/FlagsContext.native.js +26 -0
  43. package/dist/cjs/router/FlagsContext.native.js.map +6 -0
  44. package/dist/cjs/router/getRoutes.cjs +11 -1
  45. package/dist/cjs/router/getRoutes.js +11 -1
  46. package/dist/cjs/router/getRoutes.js.map +1 -1
  47. package/dist/cjs/router/getRoutes.native.js +11 -1
  48. package/dist/cjs/router/getRoutes.native.js.map +2 -2
  49. package/dist/cjs/router/matchers.test.cjs +38 -0
  50. package/dist/cjs/router/matchers.test.js +42 -0
  51. package/dist/cjs/router/matchers.test.js.map +6 -0
  52. package/dist/cjs/router/matchers.test.native.js +39 -0
  53. package/dist/cjs/router/matchers.test.native.js.map +6 -0
  54. package/dist/cjs/router/router.cjs +3 -35
  55. package/dist/cjs/router/router.js +2 -26
  56. package/dist/cjs/router/router.js.map +1 -1
  57. package/dist/cjs/router/router.native.js +2 -33
  58. package/dist/cjs/router/router.native.js.map +2 -2
  59. package/dist/cjs/router/utils/getNavigateAction.cjs +61 -0
  60. package/dist/cjs/router/utils/getNavigateAction.js +46 -0
  61. package/dist/cjs/router/utils/getNavigateAction.js.map +6 -0
  62. package/dist/cjs/router/utils/getNavigateAction.native.js +58 -0
  63. package/dist/cjs/router/utils/getNavigateAction.native.js.map +6 -0
  64. package/dist/cjs/router/utils/getNavigateAction.test.cjs +259 -0
  65. package/dist/cjs/router/utils/getNavigateAction.test.js +295 -0
  66. package/dist/cjs/router/utils/getNavigateAction.test.js.map +6 -0
  67. package/dist/cjs/router/utils/getNavigateAction.test.native.js +330 -0
  68. package/dist/cjs/router/utils/getNavigateAction.test.native.js.map +6 -0
  69. package/dist/cjs/testing-utils.cjs +63 -0
  70. package/dist/cjs/testing-utils.js +55 -0
  71. package/dist/cjs/testing-utils.js.map +6 -0
  72. package/dist/cjs/testing-utils.native.js +79 -0
  73. package/dist/cjs/testing-utils.native.js.map +6 -0
  74. package/dist/cjs/views/Navigator.cjs +8 -1
  75. package/dist/cjs/views/Navigator.js +25 -11
  76. package/dist/cjs/views/Navigator.js.map +1 -1
  77. package/dist/cjs/views/Navigator.native.js +7 -4
  78. package/dist/cjs/views/Navigator.native.js.map +2 -2
  79. package/dist/cjs/vite/one.cjs +6 -1
  80. package/dist/cjs/vite/one.js +6 -1
  81. package/dist/cjs/vite/one.js.map +1 -1
  82. package/dist/cjs/vite/one.native.js +7 -2
  83. package/dist/cjs/vite/one.native.js.map +2 -2
  84. package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +2 -0
  85. package/dist/cjs/vite/plugins/virtualEntryPlugin.js +2 -0
  86. package/dist/cjs/vite/plugins/virtualEntryPlugin.js.map +1 -1
  87. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +2 -0
  88. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +2 -2
  89. package/dist/esm/Root.js +2 -1
  90. package/dist/esm/Root.js.map +1 -1
  91. package/dist/esm/Root.mjs +5 -1
  92. package/dist/esm/Root.mjs.map +1 -1
  93. package/dist/esm/Root.native.js +5 -1
  94. package/dist/esm/Root.native.js.map +1 -1
  95. package/dist/esm/createApp.js +16 -2
  96. package/dist/esm/createApp.js.map +1 -1
  97. package/dist/esm/createApp.mjs +2 -0
  98. package/dist/esm/createApp.mjs.map +1 -1
  99. package/dist/esm/createApp.native.js +1 -0
  100. package/dist/esm/createApp.native.js.map +1 -1
  101. package/dist/esm/fork/__tests__/getPathFromState.test.js +1561 -0
  102. package/dist/esm/fork/__tests__/getPathFromState.test.js.map +6 -0
  103. package/dist/esm/fork/__tests__/getPathFromState.test.mjs +1441 -0
  104. package/dist/esm/fork/__tests__/getPathFromState.test.mjs.map +1 -0
  105. package/dist/esm/fork/__tests__/getPathFromState.test.native.js +1580 -0
  106. package/dist/esm/fork/__tests__/getPathFromState.test.native.js.map +1 -0
  107. package/dist/esm/fork/__tests__/getStateFromPath.test.js +2706 -0
  108. package/dist/esm/fork/__tests__/getStateFromPath.test.js.map +6 -0
  109. package/dist/esm/fork/__tests__/getStateFromPath.test.mjs +2566 -0
  110. package/dist/esm/fork/__tests__/getStateFromPath.test.mjs.map +1 -0
  111. package/dist/esm/fork/__tests__/getStateFromPath.test.native.js +2636 -0
  112. package/dist/esm/fork/__tests__/getStateFromPath.test.native.js.map +1 -0
  113. package/dist/esm/fork/getPathFromState.js +1 -1
  114. package/dist/esm/fork/getPathFromState.js.map +1 -1
  115. package/dist/esm/fork/getPathFromState.mjs +2 -1
  116. package/dist/esm/fork/getPathFromState.mjs.map +1 -1
  117. package/dist/esm/fork/getPathFromState.native.js +9 -5
  118. package/dist/esm/fork/getPathFromState.native.js.map +1 -1
  119. package/dist/esm/fork/getPathFromState.test.js +123 -0
  120. package/dist/esm/fork/getPathFromState.test.js.map +6 -0
  121. package/dist/esm/fork/getPathFromState.test.mjs +114 -0
  122. package/dist/esm/fork/getPathFromState.test.mjs.map +1 -0
  123. package/dist/esm/fork/getPathFromState.test.native.js +122 -0
  124. package/dist/esm/fork/getPathFromState.test.native.js.map +1 -0
  125. package/dist/esm/fork/getStateFromPath.test.js +294 -0
  126. package/dist/esm/fork/getStateFromPath.test.js.map +6 -0
  127. package/dist/esm/fork/getStateFromPath.test.mjs +230 -0
  128. package/dist/esm/fork/getStateFromPath.test.mjs.map +1 -0
  129. package/dist/esm/fork/getStateFromPath.test.native.js +233 -0
  130. package/dist/esm/fork/getStateFromPath.test.native.js.map +1 -0
  131. package/dist/esm/render.js +1 -1
  132. package/dist/esm/render.js.map +1 -1
  133. package/dist/esm/render.mjs +1 -1
  134. package/dist/esm/render.mjs.map +1 -1
  135. package/dist/esm/router/FlagsContext.js +6 -0
  136. package/dist/esm/router/FlagsContext.js.map +6 -0
  137. package/dist/esm/router/FlagsContext.mjs +4 -0
  138. package/dist/esm/router/FlagsContext.mjs.map +1 -0
  139. package/dist/esm/router/FlagsContext.native.js +4 -0
  140. package/dist/esm/router/FlagsContext.native.js.map +1 -0
  141. package/dist/esm/router/getRoutes.js +11 -1
  142. package/dist/esm/router/getRoutes.js.map +1 -1
  143. package/dist/esm/router/getRoutes.mjs +11 -1
  144. package/dist/esm/router/getRoutes.mjs.map +1 -1
  145. package/dist/esm/router/getRoutes.native.js +11 -1
  146. package/dist/esm/router/getRoutes.native.js.map +1 -1
  147. package/dist/esm/router/matchers.test.js +50 -0
  148. package/dist/esm/router/matchers.test.js.map +6 -0
  149. package/dist/esm/router/matchers.test.mjs +39 -0
  150. package/dist/esm/router/matchers.test.mjs.map +1 -0
  151. package/dist/esm/router/matchers.test.native.js +39 -0
  152. package/dist/esm/router/matchers.test.native.js.map +1 -0
  153. package/dist/esm/router/router.js +1 -26
  154. package/dist/esm/router/router.js.map +1 -1
  155. package/dist/esm/router/router.mjs +1 -33
  156. package/dist/esm/router/router.mjs.map +1 -1
  157. package/dist/esm/router/router.native.js +1 -37
  158. package/dist/esm/router/router.native.js.map +1 -1
  159. package/dist/esm/router/utils/getNavigateAction.js +32 -0
  160. package/dist/esm/router/utils/getNavigateAction.js.map +6 -0
  161. package/dist/esm/router/utils/getNavigateAction.mjs +38 -0
  162. package/dist/esm/router/utils/getNavigateAction.mjs.map +1 -0
  163. package/dist/esm/router/utils/getNavigateAction.native.js +42 -0
  164. package/dist/esm/router/utils/getNavigateAction.native.js.map +1 -0
  165. package/dist/esm/router/utils/getNavigateAction.test.js +296 -0
  166. package/dist/esm/router/utils/getNavigateAction.test.js.map +6 -0
  167. package/dist/esm/router/utils/getNavigateAction.test.mjs +260 -0
  168. package/dist/esm/router/utils/getNavigateAction.test.mjs.map +1 -0
  169. package/dist/esm/router/utils/getNavigateAction.test.native.js +273 -0
  170. package/dist/esm/router/utils/getNavigateAction.test.native.js.map +1 -0
  171. package/dist/esm/testing-utils.js +33 -0
  172. package/dist/esm/testing-utils.js.map +6 -0
  173. package/dist/esm/testing-utils.mjs +27 -0
  174. package/dist/esm/testing-utils.mjs.map +1 -0
  175. package/dist/esm/testing-utils.native.js +38 -0
  176. package/dist/esm/testing-utils.native.js.map +1 -0
  177. package/dist/esm/views/Navigator.js +29 -11
  178. package/dist/esm/views/Navigator.js.map +1 -1
  179. package/dist/esm/views/Navigator.mjs +8 -1
  180. package/dist/esm/views/Navigator.mjs.map +1 -1
  181. package/dist/esm/views/Navigator.native.js +8 -2
  182. package/dist/esm/views/Navigator.native.js.map +1 -1
  183. package/dist/esm/vite/one.js +6 -1
  184. package/dist/esm/vite/one.js.map +1 -1
  185. package/dist/esm/vite/one.mjs +6 -1
  186. package/dist/esm/vite/one.mjs.map +1 -1
  187. package/dist/esm/vite/one.native.js +9 -2
  188. package/dist/esm/vite/one.native.js.map +1 -1
  189. package/dist/esm/vite/plugins/virtualEntryPlugin.js +2 -0
  190. package/dist/esm/vite/plugins/virtualEntryPlugin.js.map +1 -1
  191. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +2 -0
  192. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  193. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +2 -0
  194. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  195. package/package.json +13 -10
  196. package/src/Root.tsx +12 -2
  197. package/src/createApp.native.tsx +8 -2
  198. package/src/createApp.tsx +18 -3
  199. package/src/fork/__tests__/README.md +8 -0
  200. package/src/fork/__tests__/getPathFromState.test.tsx +1809 -0
  201. package/src/fork/__tests__/getStateFromPath.test.tsx +3188 -0
  202. package/src/fork/getPathFromState.test.ts +146 -0
  203. package/src/fork/getPathFromState.ts +1 -1
  204. package/src/fork/getStateFromPath.test.ts +345 -0
  205. package/src/render.tsx +3 -3
  206. package/src/router/FlagsContext.ts +4 -0
  207. package/src/router/getRoutes.ts +14 -2
  208. package/src/router/matchers.test.ts +120 -0
  209. package/src/router/router.ts +1 -113
  210. package/src/router/utils/getNavigateAction.test.ts +334 -0
  211. package/src/router/utils/getNavigateAction.ts +120 -0
  212. package/src/testing-utils.ts +56 -0
  213. package/src/views/Navigator.tsx +34 -10
  214. package/src/vite/one.ts +5 -0
  215. package/src/vite/plugins/virtualEntryPlugin.ts +4 -1
  216. package/src/vite/types.ts +18 -0
  217. package/types/Root.d.ts +1 -0
  218. package/types/Root.d.ts.map +1 -1
  219. package/types/createApp.d.ts +2 -0
  220. package/types/createApp.d.ts.map +1 -1
  221. package/types/createApp.native.d.ts +2 -0
  222. package/types/createApp.native.d.ts.map +1 -1
  223. package/types/fork/getPathFromState.test.d.ts +2 -0
  224. package/types/fork/getPathFromState.test.d.ts.map +1 -0
  225. package/types/fork/getStateFromPath.test.d.ts +2 -0
  226. package/types/fork/getStateFromPath.test.d.ts.map +1 -0
  227. package/types/router/FlagsContext.d.ts +3 -0
  228. package/types/router/FlagsContext.d.ts.map +1 -0
  229. package/types/router/getRoutes.d.ts.map +1 -1
  230. package/types/router/matchers.test.d.ts +2 -0
  231. package/types/router/matchers.test.d.ts.map +1 -0
  232. package/types/router/router.d.ts.map +1 -1
  233. package/types/router/utils/getNavigateAction.d.ts +17 -0
  234. package/types/router/utils/getNavigateAction.d.ts.map +1 -0
  235. package/types/router/utils/getNavigateAction.test.d.ts +2 -0
  236. package/types/router/utils/getNavigateAction.test.d.ts.map +1 -0
  237. package/types/testing-utils.d.ts +26 -0
  238. package/types/testing-utils.d.ts.map +1 -0
  239. package/types/views/Navigator.d.ts +1 -1
  240. package/types/views/Navigator.d.ts.map +1 -1
  241. package/types/vite/one.d.ts.map +1 -1
  242. package/types/vite/plugins/virtualEntryPlugin.d.ts +2 -0
  243. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  244. package/types/vite/types.d.ts +16 -0
  245. package/types/vite/types.d.ts.map +1 -1
@@ -0,0 +1,1440 @@
1
+ var import_vitest = require("vitest"),
2
+ import_getPathFromState = require("../getPathFromState.cjs"),
3
+ import_getStateFromPath = require("../getStateFromPath.cjs");
4
+ (0, import_vitest.test)("converts state to path string", () => {
5
+ const state = {
6
+ routes: [{
7
+ name: "foo",
8
+ state: {
9
+ index: 1,
10
+ routes: [{
11
+ name: "boo"
12
+ }, {
13
+ name: "bar",
14
+ params: {
15
+ fruit: "apple"
16
+ },
17
+ state: {
18
+ routes: [{
19
+ name: "baz qux",
20
+ params: {
21
+ author: "jane",
22
+ valid: !0
23
+ }
24
+ }]
25
+ }
26
+ }]
27
+ }
28
+ }]
29
+ },
30
+ path = "/foo/bar/baz%20qux?author=jane&valid=true";
31
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)(state)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path))).toBe(path);
32
+ });
33
+ (0, import_vitest.test)("converts state to path string with config", () => {
34
+ const path = "/few/bar/sweet/apple/baz/jane?id=x10&valid=true",
35
+ config = {
36
+ screens: {
37
+ Foo: {
38
+ path: "few",
39
+ screens: {
40
+ Bar: {
41
+ path: "bar/:type/:fruit",
42
+ screens: {
43
+ Baz: {
44
+ path: "baz/:author",
45
+ parse: {
46
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
47
+ id: id => Number(id.replace(/^x/, "")),
48
+ valid: Boolean
49
+ },
50
+ stringify: {
51
+ author: author => author.toLowerCase(),
52
+ id: id => `x${id}`
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ };
61
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
62
+ routes: [{
63
+ name: "Foo",
64
+ state: {
65
+ index: 1,
66
+ routes: [{
67
+ name: "boo"
68
+ }, {
69
+ name: "Bar",
70
+ params: {
71
+ fruit: "apple",
72
+ type: "sweet",
73
+ avaliable: !1
74
+ },
75
+ state: {
76
+ routes: [{
77
+ name: "Baz",
78
+ params: {
79
+ author: "Jane",
80
+ id: 10,
81
+ valid: !0
82
+ }
83
+ }]
84
+ }
85
+ }]
86
+ }
87
+ }]
88
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
89
+ });
90
+ (0, import_vitest.test)("prepends trailing slash to path", () => {
91
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
92
+ routes: [{
93
+ name: "foo",
94
+ state: {
95
+ routes: [{
96
+ name: "bar"
97
+ }]
98
+ }
99
+ }]
100
+ })).toBe("/foo/bar"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
101
+ routes: [{
102
+ name: "foo",
103
+ state: {
104
+ routes: [{
105
+ name: "bar",
106
+ path: "foo/bar"
107
+ }]
108
+ }
109
+ }]
110
+ })).toBe("/foo/bar");
111
+ });
112
+ (0, import_vitest.test)("handles route without param", () => {
113
+ const path = "/foo/bar";
114
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
115
+ routes: [{
116
+ name: "foo",
117
+ state: {
118
+ routes: [{
119
+ name: "bar"
120
+ }]
121
+ }
122
+ }]
123
+ })).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path))).toBe(path);
124
+ });
125
+ (0, import_vitest.test)("doesn't add query param for empty params", () => {
126
+ const path = "/foo";
127
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
128
+ routes: [{
129
+ name: "foo",
130
+ params: {}
131
+ }]
132
+ })).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path))).toBe(path);
133
+ });
134
+ (0, import_vitest.test)("handles state with config with nested screens", () => {
135
+ const path = "/foo/foe/bar/sweet/apple/baz/jane?answer=42&count=10&valid=true",
136
+ config = {
137
+ screens: {
138
+ Foo: {
139
+ path: "foo",
140
+ screens: {
141
+ Foe: {
142
+ path: "foe",
143
+ screens: {
144
+ Bar: {
145
+ path: "bar/:type/:fruit",
146
+ screens: {
147
+ Baz: {
148
+ path: "baz/:author",
149
+ parse: {
150
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
151
+ count: Number,
152
+ valid: Boolean
153
+ },
154
+ stringify: {
155
+ author: author => author.toLowerCase(),
156
+ id: id => `x${id}`,
157
+ unknown: _ => "x"
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ };
168
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
169
+ routes: [{
170
+ name: "Foo",
171
+ state: {
172
+ routes: [{
173
+ name: "Foe",
174
+ state: {
175
+ routes: [{
176
+ name: "Bar",
177
+ params: {
178
+ fruit: "apple",
179
+ type: "sweet"
180
+ },
181
+ state: {
182
+ routes: [{
183
+ name: "Baz",
184
+ params: {
185
+ answer: "42",
186
+ author: "Jane",
187
+ count: "10",
188
+ valid: !0
189
+ }
190
+ }]
191
+ }
192
+ }]
193
+ }
194
+ }]
195
+ }
196
+ }]
197
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
198
+ });
199
+ (0, import_vitest.test)("handles state with config with nested screens and exact", () => {
200
+ const path = "/foe/bar/sweet/apple/baz/jane?answer=42&count=10&valid=true",
201
+ config = {
202
+ screens: {
203
+ Foo: {
204
+ path: "foo",
205
+ screens: {
206
+ Foe: {
207
+ path: "foe",
208
+ exact: !0,
209
+ screens: {
210
+ Bar: {
211
+ path: "bar/:type/:fruit",
212
+ screens: {
213
+ Baz: {
214
+ path: "baz/:author",
215
+ parse: {
216
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
217
+ count: Number,
218
+ valid: Boolean
219
+ },
220
+ stringify: {
221
+ author: author => author.toLowerCase(),
222
+ id: id => `x${id}`,
223
+ unknown: _ => "x"
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+ };
234
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
235
+ routes: [{
236
+ name: "Foo",
237
+ state: {
238
+ routes: [{
239
+ name: "Foe",
240
+ state: {
241
+ routes: [{
242
+ name: "Bar",
243
+ params: {
244
+ fruit: "apple",
245
+ type: "sweet"
246
+ },
247
+ state: {
248
+ routes: [{
249
+ name: "Baz",
250
+ params: {
251
+ answer: "42",
252
+ author: "Jane",
253
+ count: "10",
254
+ valid: !0
255
+ }
256
+ }]
257
+ }
258
+ }]
259
+ }
260
+ }]
261
+ }
262
+ }]
263
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
264
+ });
265
+ (0, import_vitest.test)("handles state with config with nested screens and unused configs", () => {
266
+ const path = "/foo/foe/baz/jane?answer=42&count=10&valid=true",
267
+ config = {
268
+ screens: {
269
+ Foo: {
270
+ path: "foo",
271
+ screens: {
272
+ Foe: {
273
+ path: "foe",
274
+ screens: {
275
+ Baz: {
276
+ path: "baz/:author",
277
+ parse: {
278
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
279
+ count: Number,
280
+ valid: Boolean
281
+ },
282
+ stringify: {
283
+ author: author => author.replace(/^\w/, c => c.toLowerCase()),
284
+ unknown: _ => "x"
285
+ }
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+ }
292
+ };
293
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
294
+ routes: [{
295
+ name: "Foo",
296
+ state: {
297
+ routes: [{
298
+ name: "Foe",
299
+ state: {
300
+ routes: [{
301
+ name: "Baz",
302
+ params: {
303
+ answer: "42",
304
+ author: "Jane",
305
+ count: 10,
306
+ valid: !0
307
+ }
308
+ }]
309
+ }
310
+ }]
311
+ }
312
+ }]
313
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
314
+ });
315
+ (0, import_vitest.test)("handles state with config with nested screens and unused configs with exact", () => {
316
+ const path = "/foe/baz/jane?answer=42&count=10&valid=true",
317
+ config = {
318
+ screens: {
319
+ Foo: {
320
+ path: "foo",
321
+ screens: {
322
+ Foe: {
323
+ path: "foe",
324
+ exact: !0,
325
+ screens: {
326
+ Baz: {
327
+ path: "baz/:author",
328
+ parse: {
329
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
330
+ count: Number,
331
+ valid: Boolean
332
+ },
333
+ stringify: {
334
+ author: author => author.replace(/^\w/, c => c.toLowerCase()),
335
+ unknown: _ => "x"
336
+ }
337
+ }
338
+ }
339
+ }
340
+ }
341
+ }
342
+ }
343
+ };
344
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
345
+ routes: [{
346
+ name: "Foo",
347
+ state: {
348
+ routes: [{
349
+ name: "Foe",
350
+ state: {
351
+ routes: [{
352
+ name: "Baz",
353
+ params: {
354
+ answer: "42",
355
+ author: "Jane",
356
+ count: 10,
357
+ valid: !0
358
+ }
359
+ }]
360
+ }
361
+ }]
362
+ }
363
+ }]
364
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
365
+ });
366
+ (0, import_vitest.test)("handles nested object with stringify in it", () => {
367
+ const path = "/bar/sweet/apple/foo/bis/jane?answer=42&count=10&valid=true",
368
+ config = {
369
+ screens: {
370
+ Bar: {
371
+ path: "bar/:type/:fruit",
372
+ screens: {
373
+ Foo: {
374
+ path: "foo",
375
+ screens: {
376
+ Foe: {
377
+ path: "foe"
378
+ },
379
+ Baz: {
380
+ screens: {
381
+ Bos: "bos",
382
+ Bis: {
383
+ path: "bis/:author",
384
+ stringify: {
385
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
386
+ },
387
+ parse: {
388
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
389
+ count: Number,
390
+ valid: Boolean
391
+ }
392
+ }
393
+ }
394
+ }
395
+ }
396
+ }
397
+ }
398
+ }
399
+ }
400
+ };
401
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
402
+ routes: [{
403
+ name: "Bar",
404
+ params: {
405
+ fruit: "apple",
406
+ type: "sweet"
407
+ },
408
+ state: {
409
+ routes: [{
410
+ name: "Foo",
411
+ state: {
412
+ routes: [{
413
+ name: "Baz",
414
+ state: {
415
+ routes: [{
416
+ name: "Bis",
417
+ params: {
418
+ answer: "42",
419
+ author: "Jane",
420
+ count: 10,
421
+ valid: !0
422
+ }
423
+ }]
424
+ }
425
+ }]
426
+ }
427
+ }]
428
+ }
429
+ }]
430
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
431
+ });
432
+ (0, import_vitest.test)("handles nested object with stringify in it with exact", () => {
433
+ const path = "/bis/jane?answer=42&count=10&valid=true",
434
+ config = {
435
+ screens: {
436
+ Bar: {
437
+ path: "bar/:type/:fruit",
438
+ screens: {
439
+ Foo: {
440
+ path: "foo",
441
+ screens: {
442
+ Foe: {
443
+ path: "foe"
444
+ },
445
+ Baz: {
446
+ path: "baz",
447
+ screens: {
448
+ Bos: "bos",
449
+ Bis: {
450
+ path: "bis/:author",
451
+ exact: !0,
452
+ stringify: {
453
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
454
+ },
455
+ parse: {
456
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
457
+ count: Number,
458
+ valid: Boolean
459
+ }
460
+ }
461
+ }
462
+ }
463
+ }
464
+ }
465
+ }
466
+ }
467
+ }
468
+ };
469
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
470
+ routes: [{
471
+ name: "Bar",
472
+ params: {
473
+ fruit: "apple",
474
+ type: "sweet"
475
+ },
476
+ state: {
477
+ routes: [{
478
+ name: "Foo",
479
+ state: {
480
+ routes: [{
481
+ name: "Baz",
482
+ state: {
483
+ routes: [{
484
+ name: "Bis",
485
+ params: {
486
+ answer: "42",
487
+ author: "Jane",
488
+ count: 10,
489
+ valid: !0
490
+ }
491
+ }]
492
+ }
493
+ }]
494
+ }
495
+ }]
496
+ }
497
+ }]
498
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
499
+ });
500
+ (0, import_vitest.test)("handles nested object for second route depth", () => {
501
+ const path = "/foo/bar/baz",
502
+ config = {
503
+ screens: {
504
+ Foo: {
505
+ path: "foo",
506
+ screens: {
507
+ Foe: "foe",
508
+ Bar: {
509
+ path: "bar",
510
+ screens: {
511
+ Baz: "baz"
512
+ }
513
+ }
514
+ }
515
+ }
516
+ }
517
+ };
518
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
519
+ routes: [{
520
+ name: "Foo",
521
+ state: {
522
+ routes: [{
523
+ name: "Bar",
524
+ state: {
525
+ routes: [{
526
+ name: "Baz"
527
+ }]
528
+ }
529
+ }]
530
+ }
531
+ }]
532
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
533
+ });
534
+ (0, import_vitest.test)("handles nested object for second route depth with exact", () => {
535
+ const path = "/baz",
536
+ config = {
537
+ screens: {
538
+ Foo: {
539
+ path: "foo",
540
+ screens: {
541
+ Foe: "foe",
542
+ Bar: {
543
+ path: "bar",
544
+ screens: {
545
+ Baz: {
546
+ path: "baz",
547
+ exact: !0
548
+ }
549
+ }
550
+ }
551
+ }
552
+ }
553
+ }
554
+ };
555
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
556
+ routes: [{
557
+ name: "Foo",
558
+ state: {
559
+ routes: [{
560
+ name: "Bar",
561
+ state: {
562
+ routes: [{
563
+ name: "Baz"
564
+ }]
565
+ }
566
+ }]
567
+ }
568
+ }]
569
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
570
+ });
571
+ (0, import_vitest.test)("handles nested object for second route depth and path and stringify in roots", () => {
572
+ const path = "/foo/dathomir/bar/42/baz",
573
+ config = {
574
+ screens: {
575
+ Foo: {
576
+ path: "foo/:planet",
577
+ stringify: {
578
+ id: id => `planet=${id}`
579
+ },
580
+ screens: {
581
+ Foe: "foe",
582
+ Bar: {
583
+ path: "bar/:id",
584
+ parse: {
585
+ id: Number
586
+ },
587
+ screens: {
588
+ Baz: "baz"
589
+ }
590
+ }
591
+ }
592
+ }
593
+ }
594
+ };
595
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
596
+ routes: [{
597
+ name: "Foo",
598
+ params: {
599
+ planet: "dathomir"
600
+ },
601
+ state: {
602
+ routes: [{
603
+ name: "Bar",
604
+ state: {
605
+ routes: [{
606
+ name: "Baz",
607
+ params: {
608
+ id: 42
609
+ }
610
+ }]
611
+ }
612
+ }]
613
+ }
614
+ }]
615
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
616
+ });
617
+ (0, import_vitest.test)("handles nested object for second route depth and path and stringify in roots with exact", () => {
618
+ const path = "/baz",
619
+ config = {
620
+ screens: {
621
+ Foo: {
622
+ path: "foo/:id",
623
+ stringify: {
624
+ id: id => `id=${id}`
625
+ },
626
+ screens: {
627
+ Foe: "foe",
628
+ Bar: {
629
+ path: "bar/:id",
630
+ stringify: {
631
+ id: id => `id=${id}`
632
+ },
633
+ parse: {
634
+ id: Number
635
+ },
636
+ screens: {
637
+ Baz: {
638
+ path: "baz",
639
+ exact: !0
640
+ }
641
+ }
642
+ }
643
+ }
644
+ }
645
+ }
646
+ };
647
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
648
+ routes: [{
649
+ name: "Foo",
650
+ state: {
651
+ routes: [{
652
+ name: "Bar",
653
+ state: {
654
+ routes: [{
655
+ name: "Baz"
656
+ }]
657
+ }
658
+ }]
659
+ }
660
+ }]
661
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
662
+ });
663
+ (0, import_vitest.test)("ignores empty string paths", () => {
664
+ const path = "/bar",
665
+ config = {
666
+ screens: {
667
+ Foo: {
668
+ path: "",
669
+ screens: {
670
+ Foe: "foe"
671
+ }
672
+ },
673
+ Bar: "bar"
674
+ }
675
+ };
676
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
677
+ routes: [{
678
+ name: "Foo",
679
+ state: {
680
+ routes: [{
681
+ name: "Bar"
682
+ }]
683
+ }
684
+ }]
685
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
686
+ });
687
+ (0, import_vitest.test)("keeps query params if path is empty", () => {
688
+ const path = "/?foo=42",
689
+ config = {
690
+ screens: {
691
+ Foo: {
692
+ screens: {
693
+ Foe: "foe",
694
+ Bar: {
695
+ screens: {
696
+ Qux: {
697
+ path: "",
698
+ parse: {
699
+ foo: Number
700
+ }
701
+ },
702
+ Baz: "baz"
703
+ }
704
+ }
705
+ }
706
+ }
707
+ }
708
+ };
709
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
710
+ routes: [{
711
+ name: "Foo",
712
+ state: {
713
+ routes: [{
714
+ name: "Bar",
715
+ state: {
716
+ routes: [{
717
+ name: "Qux",
718
+ params: {
719
+ foo: 42
720
+ }
721
+ }]
722
+ }
723
+ }]
724
+ }
725
+ }]
726
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toEqual(path);
727
+ });
728
+ (0, import_vitest.test)("does not use Object.prototype properties as parsing functions", () => {
729
+ const path = "/?toString=42",
730
+ config = {
731
+ screens: {
732
+ Foo: {
733
+ screens: {
734
+ Foe: "foe",
735
+ Bar: {
736
+ screens: {
737
+ Qux: {
738
+ path: "",
739
+ parse: {}
740
+ },
741
+ Baz: "baz"
742
+ }
743
+ }
744
+ }
745
+ }
746
+ }
747
+ };
748
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
749
+ routes: [{
750
+ name: "Foo",
751
+ state: {
752
+ routes: [{
753
+ name: "Bar",
754
+ state: {
755
+ routes: [{
756
+ name: "Qux",
757
+ params: {
758
+ toString: 42
759
+ }
760
+ }]
761
+ }
762
+ }]
763
+ }
764
+ }]
765
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toEqual(path);
766
+ });
767
+ (0, import_vitest.test)("cuts nested configs too", () => {
768
+ const path = "/foo/baz",
769
+ config = {
770
+ screens: {
771
+ Foo: {
772
+ path: "foo",
773
+ screens: {
774
+ Bar: {
775
+ path: "",
776
+ screens: {
777
+ Baz: {
778
+ path: "baz"
779
+ }
780
+ }
781
+ }
782
+ }
783
+ }
784
+ }
785
+ };
786
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
787
+ routes: [{
788
+ name: "Foo",
789
+ state: {
790
+ routes: [{
791
+ name: "Bar",
792
+ state: {
793
+ routes: [{
794
+ name: "Baz"
795
+ }]
796
+ }
797
+ }]
798
+ }
799
+ }]
800
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
801
+ });
802
+ (0, import_vitest.test)("cuts nested configs too with exact", () => {
803
+ const path = "/baz",
804
+ config = {
805
+ screens: {
806
+ Foo: {
807
+ path: "foo",
808
+ screens: {
809
+ Bar: {
810
+ path: "",
811
+ exact: !0,
812
+ screens: {
813
+ Baz: {
814
+ path: "baz"
815
+ }
816
+ }
817
+ }
818
+ }
819
+ }
820
+ }
821
+ };
822
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
823
+ routes: [{
824
+ name: "Foo",
825
+ state: {
826
+ routes: [{
827
+ name: "Bar",
828
+ state: {
829
+ routes: [{
830
+ name: "Baz"
831
+ }]
832
+ }
833
+ }]
834
+ }
835
+ }]
836
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
837
+ });
838
+ (0, import_vitest.test)("handles empty path at the end", () => {
839
+ const path = "/foo/bar",
840
+ config = {
841
+ screens: {
842
+ Foo: {
843
+ path: "foo",
844
+ screens: {
845
+ Bar: "bar"
846
+ }
847
+ },
848
+ Baz: {
849
+ path: ""
850
+ }
851
+ }
852
+ };
853
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
854
+ routes: [{
855
+ name: "Foo",
856
+ state: {
857
+ routes: [{
858
+ name: "Bar",
859
+ state: {
860
+ routes: [{
861
+ name: "Baz"
862
+ }]
863
+ }
864
+ }]
865
+ }
866
+ }]
867
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
868
+ });
869
+ (0, import_vitest.test)('returns "/" for empty path', () => {
870
+ const path = "/",
871
+ config = {
872
+ screens: {
873
+ Foo: {
874
+ path: "",
875
+ screens: {
876
+ Bar: ""
877
+ }
878
+ }
879
+ }
880
+ };
881
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
882
+ routes: [{
883
+ name: "Foo",
884
+ state: {
885
+ routes: [{
886
+ name: "Bar"
887
+ }]
888
+ }
889
+ }]
890
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
891
+ });
892
+ (0, import_vitest.test)("parses no path specified", () => {
893
+ const path = "/bar",
894
+ config = {
895
+ screens: {
896
+ Foo: {
897
+ screens: {
898
+ Foe: {},
899
+ Bar: "bar"
900
+ }
901
+ }
902
+ }
903
+ };
904
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
905
+ routes: [{
906
+ name: "Foo",
907
+ state: {
908
+ routes: [{
909
+ name: "Bar"
910
+ }]
911
+ }
912
+ }]
913
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
914
+ });
915
+ (0, import_vitest.test)("strips undefined query params", () => {
916
+ const path = "/bar/sweet/apple/foo/bis/jane?count=10&valid=true",
917
+ config = {
918
+ screens: {
919
+ Bar: {
920
+ path: "bar/:type/:fruit",
921
+ screens: {
922
+ Foo: {
923
+ path: "foo",
924
+ screens: {
925
+ Foe: {
926
+ path: "foe"
927
+ },
928
+ Baz: {
929
+ screens: {
930
+ Bos: "bos",
931
+ Bis: {
932
+ path: "bis/:author",
933
+ stringify: {
934
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
935
+ },
936
+ parse: {
937
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
938
+ count: Number,
939
+ valid: Boolean
940
+ }
941
+ }
942
+ }
943
+ }
944
+ }
945
+ }
946
+ }
947
+ }
948
+ }
949
+ };
950
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
951
+ routes: [{
952
+ name: "Bar",
953
+ params: {
954
+ fruit: "apple",
955
+ type: "sweet"
956
+ },
957
+ state: {
958
+ routes: [{
959
+ name: "Foo",
960
+ state: {
961
+ routes: [{
962
+ name: "Baz",
963
+ state: {
964
+ routes: [{
965
+ name: "Bis",
966
+ params: {
967
+ author: "Jane",
968
+ count: 10,
969
+ valid: !0
970
+ }
971
+ }]
972
+ }
973
+ }]
974
+ }
975
+ }]
976
+ }
977
+ }]
978
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
979
+ });
980
+ (0, import_vitest.test)("strips undefined query params with exact", () => {
981
+ const path = "/bis/jane?count=10&valid=true",
982
+ config = {
983
+ screens: {
984
+ Bar: {
985
+ path: "bar/:type/:fruit",
986
+ screens: {
987
+ Foo: {
988
+ path: "foo",
989
+ screens: {
990
+ Foe: {
991
+ path: "foe"
992
+ },
993
+ Baz: {
994
+ screens: {
995
+ Bos: "bos",
996
+ Bis: {
997
+ path: "bis/:author",
998
+ exact: !0,
999
+ stringify: {
1000
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
1001
+ },
1002
+ parse: {
1003
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
1004
+ count: Number,
1005
+ valid: Boolean
1006
+ }
1007
+ }
1008
+ }
1009
+ }
1010
+ }
1011
+ }
1012
+ }
1013
+ }
1014
+ }
1015
+ };
1016
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1017
+ routes: [{
1018
+ name: "Bar",
1019
+ params: {
1020
+ fruit: "apple",
1021
+ type: "sweet"
1022
+ },
1023
+ state: {
1024
+ routes: [{
1025
+ name: "Foo",
1026
+ state: {
1027
+ routes: [{
1028
+ name: "Baz",
1029
+ state: {
1030
+ routes: [{
1031
+ name: "Bis",
1032
+ params: {
1033
+ author: "Jane",
1034
+ count: 10,
1035
+ valid: !0
1036
+ }
1037
+ }]
1038
+ }
1039
+ }]
1040
+ }
1041
+ }]
1042
+ }
1043
+ }]
1044
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
1045
+ });
1046
+ (0, import_vitest.test)("handles stripping all query params", () => {
1047
+ const path = "/bar/sweet/apple/foo/bis/jane",
1048
+ config = {
1049
+ screens: {
1050
+ Bar: {
1051
+ path: "bar/:type/:fruit",
1052
+ screens: {
1053
+ Foo: {
1054
+ path: "foo",
1055
+ screens: {
1056
+ Foe: {
1057
+ path: "foe"
1058
+ },
1059
+ Baz: {
1060
+ screens: {
1061
+ Bos: "bos",
1062
+ Bis: {
1063
+ path: "bis/:author",
1064
+ stringify: {
1065
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
1066
+ },
1067
+ parse: {
1068
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
1069
+ count: Number,
1070
+ valid: Boolean
1071
+ }
1072
+ }
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ }
1079
+ }
1080
+ };
1081
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1082
+ routes: [{
1083
+ name: "Bar",
1084
+ params: {
1085
+ fruit: "apple",
1086
+ type: "sweet"
1087
+ },
1088
+ state: {
1089
+ routes: [{
1090
+ name: "Foo",
1091
+ state: {
1092
+ routes: [{
1093
+ name: "Baz",
1094
+ state: {
1095
+ routes: [{
1096
+ name: "Bis",
1097
+ params: {
1098
+ author: "Jane"
1099
+ }
1100
+ }]
1101
+ }
1102
+ }]
1103
+ }
1104
+ }]
1105
+ }
1106
+ }]
1107
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
1108
+ });
1109
+ (0, import_vitest.test)("handles stripping all query params with exact", () => {
1110
+ const path = "/bis/jane",
1111
+ config = {
1112
+ screens: {
1113
+ Bar: {
1114
+ path: "bar/:type/:fruit",
1115
+ screens: {
1116
+ Foo: {
1117
+ path: "foo",
1118
+ screens: {
1119
+ Foe: {
1120
+ path: "foe"
1121
+ },
1122
+ Baz: {
1123
+ path: "baz",
1124
+ screens: {
1125
+ Bos: "bos",
1126
+ Bis: {
1127
+ path: "bis/:author",
1128
+ exact: !0,
1129
+ stringify: {
1130
+ author: author => author.replace(/^\w/, c => c.toLowerCase())
1131
+ },
1132
+ parse: {
1133
+ author: author => author.replace(/^\w/, c => c.toUpperCase()),
1134
+ count: Number,
1135
+ valid: Boolean
1136
+ }
1137
+ }
1138
+ }
1139
+ }
1140
+ }
1141
+ }
1142
+ }
1143
+ }
1144
+ }
1145
+ };
1146
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1147
+ routes: [{
1148
+ name: "Bar",
1149
+ params: {
1150
+ fruit: "apple",
1151
+ type: "sweet"
1152
+ },
1153
+ state: {
1154
+ routes: [{
1155
+ name: "Foo",
1156
+ state: {
1157
+ routes: [{
1158
+ name: "Baz",
1159
+ state: {
1160
+ routes: [{
1161
+ name: "Bis",
1162
+ params: {
1163
+ author: "Jane"
1164
+ }
1165
+ }]
1166
+ }
1167
+ }]
1168
+ }
1169
+ }]
1170
+ }
1171
+ }]
1172
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
1173
+ });
1174
+ (0, import_vitest.test)("replaces undefined query params", () => {
1175
+ const path = "/bar/undefined/apple",
1176
+ config = {
1177
+ screens: {
1178
+ Bar: "bar/:type/:fruit"
1179
+ }
1180
+ };
1181
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1182
+ routes: [{
1183
+ name: "Bar",
1184
+ params: {
1185
+ fruit: "apple"
1186
+ }
1187
+ }]
1188
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
1189
+ });
1190
+ import_vitest.test.skip("matches wildcard patterns at root", () => {
1191
+ const path = "/test/bar/42/whatever",
1192
+ config = {
1193
+ screens: {
1194
+ 404: "*",
1195
+ Foo: {
1196
+ screens: {
1197
+ Bar: {
1198
+ path: "/bar/:id/"
1199
+ }
1200
+ }
1201
+ }
1202
+ }
1203
+ };
1204
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1205
+ routes: [{
1206
+ name: "404"
1207
+ }]
1208
+ }, config)).toBe("/404"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe("/404");
1209
+ });
1210
+ import_vitest.test.skip("matches wildcard patterns at nested level", () => {
1211
+ const path = "/bar/42/whatever/baz/initt",
1212
+ config = {
1213
+ screens: {
1214
+ Foo: {
1215
+ screens: {
1216
+ Bar: {
1217
+ path: "/bar/:id/",
1218
+ screens: {
1219
+ 404: "*"
1220
+ }
1221
+ }
1222
+ }
1223
+ }
1224
+ }
1225
+ };
1226
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1227
+ routes: [{
1228
+ name: "Foo",
1229
+ state: {
1230
+ routes: [{
1231
+ name: "Bar",
1232
+ params: {
1233
+ id: "42"
1234
+ },
1235
+ state: {
1236
+ routes: [{
1237
+ name: "404"
1238
+ }]
1239
+ }
1240
+ }]
1241
+ }
1242
+ }]
1243
+ }, config)).toBe("/bar/42/404"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe("/bar/42/404");
1244
+ });
1245
+ import_vitest.test.skip("matches wildcard patterns at nested level with exact", () => {
1246
+ const path = "/whatever",
1247
+ config = {
1248
+ screens: {
1249
+ Foo: {
1250
+ screens: {
1251
+ Bar: {
1252
+ path: "/bar/:id/",
1253
+ screens: {
1254
+ 404: {
1255
+ path: "*",
1256
+ exact: !0
1257
+ }
1258
+ }
1259
+ },
1260
+ Baz: {}
1261
+ }
1262
+ }
1263
+ }
1264
+ };
1265
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1266
+ routes: [{
1267
+ name: "Foo",
1268
+ state: {
1269
+ routes: [{
1270
+ name: "Bar",
1271
+ state: {
1272
+ routes: [{
1273
+ name: "404"
1274
+ }]
1275
+ }
1276
+ }]
1277
+ }
1278
+ }]
1279
+ }, config)).toBe("/404"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe("/404");
1280
+ });
1281
+ (0, import_vitest.test)("tries to match wildcard patterns at the end", () => {
1282
+ const path = "/bar/42/test",
1283
+ config = {
1284
+ screens: {
1285
+ Foo: {
1286
+ screens: {
1287
+ Bar: {
1288
+ path: "/bar/:id/",
1289
+ screens: {
1290
+ 404: "*",
1291
+ Test: "test"
1292
+ }
1293
+ }
1294
+ }
1295
+ }
1296
+ }
1297
+ };
1298
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1299
+ routes: [{
1300
+ name: "Foo",
1301
+ state: {
1302
+ routes: [{
1303
+ name: "Bar",
1304
+ params: {
1305
+ id: "42"
1306
+ },
1307
+ state: {
1308
+ routes: [{
1309
+ name: "Test"
1310
+ }]
1311
+ }
1312
+ }]
1313
+ }
1314
+ }]
1315
+ }, config)).toBe(path), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(path);
1316
+ });
1317
+ import_vitest.test.skip("uses nearest parent wildcard match for unmatched paths", () => {
1318
+ const path = "/bar/42/baz/test",
1319
+ config = {
1320
+ screens: {
1321
+ Foo: {
1322
+ screens: {
1323
+ Bar: {
1324
+ path: "/bar/:id/",
1325
+ screens: {
1326
+ Baz: "baz"
1327
+ }
1328
+ },
1329
+ 404: "*"
1330
+ }
1331
+ }
1332
+ }
1333
+ };
1334
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1335
+ routes: [{
1336
+ name: "Foo",
1337
+ state: {
1338
+ routes: [{
1339
+ name: "404"
1340
+ }]
1341
+ }
1342
+ }]
1343
+ }, config)).toBe("/404"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe("/404");
1344
+ });
1345
+ import_vitest.test.skip("handles path at top level", () => {
1346
+ const path = "foo/fruits/apple",
1347
+ config = {
1348
+ path: "foo",
1349
+ screens: {
1350
+ Foo: {
1351
+ screens: {
1352
+ Fruits: "fruits/:fruit"
1353
+ }
1354
+ }
1355
+ }
1356
+ };
1357
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1358
+ routes: [{
1359
+ name: "Foo",
1360
+ state: {
1361
+ routes: [{
1362
+ name: "Fruits",
1363
+ params: {
1364
+ fruit: "apple"
1365
+ }
1366
+ }]
1367
+ }
1368
+ }]
1369
+ }, config)).toBe(`/${path}`), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)((0, import_getStateFromPath.getStateFromPath)(path, config), config)).toBe(`/${path}`);
1370
+ });
1371
+ import_vitest.test.skip("ignores regexp patterns when provided", () => {
1372
+ const config = {
1373
+ screens: {
1374
+ Foo: {
1375
+ path: "foo/:id(\\d+)",
1376
+ parse: {
1377
+ id: Number
1378
+ }
1379
+ },
1380
+ Bar: {
1381
+ path: "foo/:id([a-z]+)"
1382
+ },
1383
+ Baz: {
1384
+ path: "foo/:id(\\d+)/:name([a-z]+)"
1385
+ },
1386
+ Qux: {
1387
+ path: "foo/:id(@[a-z]+)",
1388
+ stringify: {
1389
+ id: id => `@${id}`
1390
+ }
1391
+ }
1392
+ }
1393
+ };
1394
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1395
+ routes: [{
1396
+ name: "Foo",
1397
+ params: {
1398
+ id: 42
1399
+ }
1400
+ }]
1401
+ }, config)).toBe("/foo/42"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1402
+ routes: [{
1403
+ name: "Bar",
1404
+ params: {
1405
+ id: "bar"
1406
+ }
1407
+ }]
1408
+ }, config)).toBe("/foo/bar"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1409
+ routes: [{
1410
+ name: "Baz",
1411
+ params: {
1412
+ id: 42,
1413
+ name: "bar"
1414
+ }
1415
+ }]
1416
+ }, config)).toBe("/foo/42/bar"), (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1417
+ routes: [{
1418
+ name: "Qux",
1419
+ params: {
1420
+ id: "bar"
1421
+ }
1422
+ }]
1423
+ }, config)).toBe("/foo/@bar");
1424
+ });
1425
+ import_vitest.test.skip("correctly handles regex pattern with slash", () => {
1426
+ (0, import_vitest.expect)((0, import_getPathFromState.getPathFromState)({
1427
+ routes: [{
1428
+ name: "Foo",
1429
+ params: {
1430
+ id: "bar"
1431
+ }
1432
+ }]
1433
+ }, {
1434
+ screens: {
1435
+ Foo: {
1436
+ path: "foo/:id([a-z]+\\/)"
1437
+ }
1438
+ }
1439
+ })).toBe("/foo/bar");
1440
+ });