@prezly/theme-kit-core
Version:
Data layer and utility library for developing Prezly themes with JavaScript
24 lines (23 loc) • 1.03 kB
TypeScript
import type { Route } from './Route';
export type RoutesMap<T extends Route = Route> = Record<string, T>;
type Maybe<T> = T | undefined;
export interface Router<Routes extends RoutesMap = RoutesMap> {
routes: Routes;
match(path: string, searchParams: URLSearchParams, context: Router.MatchContext): {
[RouteName in keyof Routes]: Routes[RouteName] extends Route<infer Pattern, infer Match> ? Maybe<{
params: Match;
route: Route<Pattern, Match>;
}> : undefined;
}[keyof Routes];
generate<RouteName extends keyof Routes>(routeName: RouteName, ...params: Routes[RouteName] extends Route<string, infer Match> ? {} extends Match ? [Match] | [] : [Match] : never): `/${string}`;
dump(): {
[RouteName in keyof Routes]: Routes[RouteName]['pattern'];
};
}
export declare namespace Router {
interface MatchContext {
isSupportedLocale(code: string): boolean;
}
function create<Routes extends RoutesMap>(routes: Routes): Router<Routes>;
}
export {};