1234567891011121314151617181920212223242526272829303132333435 |
- type ExtractRouteParamsKey<T extends string> =
- T extends `${infer P1}:${infer P2}/${infer P3}`
- ? P2 | ExtractRouteParamsKey<P3>
- : T extends `${infer P1}:${infer P2}`
- ? P2
- : T extends `:${infer P2}/${infer P3}`
- ? P2 | ExtractRouteParamsKey<P3>
- : T extends `:${infer P2}`
- ? P2
- : never
- type ExtractRouteParams<T extends string> = {
- [key in ExtractRouteParamsKey<T>]: string
- }
- export const fillRoutePath = <T extends string>(path: T, params: ExtractRouteParams<T>) => {
- let processPath: string = path
- for (const [key, value] of Object.entries(params)) {
- const rg = new RegExp(`:${key}/?`)
- processPath = processPath.replace(rg, value as string)
- }
- return processPath
- }
- const place = /(?:\/:([^/]*))/g
- export const verifiRoutePath = (pathname: string, path: string) => {
- const rg = path
- .replace(/\/([^:])/g, (_, d) => `\\/${d}`)
- .replace(place, () => `(?:/[^/]*)`)
- return new RegExp(`^${rg}$`).test(pathname)
- }
|