UNPKG

@feoe/fs-router

Version:
21 lines (20 loc) 1.21 kB
import { type NavigateOptions, type PathParam } from "react-router-dom"; import type { RouteTypes } from "../types/route-type"; export interface NavigationOptions extends NavigateOptions { } type OptionalParams<T extends string> = T extends `${infer Part}/${infer Rest}` ? (Part extends `:${infer Name}?` ? Name : never) | OptionalParams<Rest> : T extends `:${infer Name}?` ? Name : never; type RouteParams<Path extends string> = { [P in OptionalParams<Path>]?: string | number | boolean; } & { [P in Exclude<PathParam<Path>, OptionalParams<Path>>]: string | number | boolean; }; type PathParameters<Path extends string> = Exclude<PathParam<Path>, OptionalParams<Path>>["length"] extends 0 ? [path: Path, params?: RouteParams<Path>, query?: Record<string, string>] : [path: Path, params: RouteParams<Path>, query?: Record<string, string>]; export declare function useNavigation(): { back(): void; forward(): void; reload(): void; buildHref: <Path extends keyof RouteTypes>(...args: PathParameters<Path>) => string; push<Path extends keyof RouteTypes>(...args: PathParameters<Path>): void; replace<Path extends keyof RouteTypes>(...args: PathParameters<Path>): void; }; export {};