-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrouting.ts
More file actions
36 lines (31 loc) · 1.14 KB
/
routing.ts
File metadata and controls
36 lines (31 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import type { Address } from 'viem';
export const appPaths = {
myVaults: '/',
vaults: {
all: '/vaults',
create: '/vaults/create',
vault: (vaultAddress: Address | '[vaultAddress]') =>
({
overview: `/vaults/${vaultAddress}`,
eth: (mode: '[mode]' | 'supply' | 'withdraw') =>
`/vaults/${vaultAddress}/eth/${mode}` as const,
steth: (mode: '[mode]' | 'mint' | 'repay') =>
`/vaults/${vaultAddress}/steth/${mode}` as const,
claim: `/vaults/${vaultAddress}/claim`,
settings: (mode: '[mode]' | 'main' | 'permissions' | 'tier') =>
`/vaults/${vaultAddress}/settings/${mode}`,
validators: `/vaults/${vaultAddress}/validators`,
}) as const,
},
} as const;
type StringValues<T> =
T extends Record<string, infer U> ? (U extends string ? U : never) : never;
type ObjectValues<T> = T extends string
? T
: T extends Record<string, infer U>
? StringValues<T> | ObjectValues<U> | FunctionValues<U>
: never;
type FunctionValues<T> = T extends (...args: any[]) => infer R
? ObjectValues<R>
: never;
export type AppPathsType = ObjectValues<typeof appPaths>;