UNPKG

@prezly/theme-kit-core

Version:

Data layer and utility library for developing Prezly themes with JavaScript

24 lines (23 loc) 1.03 kB
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 {};