@feoe/fs-router
Version:
file system based routing
21 lines (20 loc) • 1.21 kB
TypeScript
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 {};