@very-simple/router
Version:
A very simple router
36 lines (33 loc) • 1.49 kB
TypeScript
declare type RouteTrigger = 'init' | 'push' | 'replace' | 'popstate';
declare type RouteParams = Record<string, string>;
declare type RouteAction = (params: RouteParams, to: Route, from?: Route) => any;
declare type TypedRouteAction<T> = (params: ParseRouteParams<T>, to: Route, from?: Route) => any;
declare type RouteEvent = 'before-route' | 'route';
interface RouteDefinition {
pattern: string;
keys: string[];
regExp?: RegExp;
action: RouteAction;
}
interface Route {
path: string;
params: RouteParams;
matches: boolean;
trigger: RouteTrigger;
}
declare type ParseRouteParams<url> = url extends `${infer start}/${infer rest}` ? ParseRouteParams<start> & ParseRouteParams<rest> : url extends `:${infer param}` ? {
[k in param]: string;
} : {};
declare type RouteEventHandler = (to: Route, from?: Route) => any | Promise<any>;
declare const _default: {
readonly currentRoute: Route | undefined;
on: (event: RouteEvent, handler: RouteEventHandler) => void;
off: (event: RouteEvent, handler: RouteEventHandler) => void;
start({ handleInitial }?: {
handleInitial?: boolean | undefined;
}): void;
route<T extends string>(path: T, action: TypedRouteAction<T>): void;
push(path: string): void;
replace(path: string): void;
};
export { ParseRouteParams, Route, RouteAction, RouteDefinition, RouteEvent, RouteEventHandler, RouteParams, RouteTrigger, TypedRouteAction, _default as default };