161 lines
6.7 KiB
TypeScript
161 lines
6.7 KiB
TypeScript
// AUTO-GENERATED by `wrnexus dev` - do not edit.
|
|
// Typed routes support required, optional, and catch-all parameters.
|
|
|
|
export interface Routes {
|
|
"/": Record<string, never>;
|
|
"/accessibility": Record<string, never>;
|
|
"/advanced-forms": Record<string, never>;
|
|
"/base": Record<string, never>;
|
|
"/blocks": Record<string, never>;
|
|
"/colors": Record<string, never>;
|
|
"/components/accordion": Record<string, never>;
|
|
"/components/advanced-date-picker": Record<string, never>;
|
|
"/components/advanced-range-slider": Record<string, never>;
|
|
"/components/advanced-select": Record<string, never>;
|
|
"/components/alert": Record<string, never>;
|
|
"/components/avatar": Record<string, never>;
|
|
"/components/avatar-group": Record<string, never>;
|
|
"/components/badge": Record<string, never>;
|
|
"/components/blockquote": Record<string, never>;
|
|
"/components/breadcrumb": Record<string, never>;
|
|
"/components/button": Record<string, never>;
|
|
"/components/button-group": Record<string, never>;
|
|
"/components/card": Record<string, never>;
|
|
"/components/carousel": Record<string, never>;
|
|
"/components/chart": Record<string, never>;
|
|
"/components/chat-bubble": Record<string, never>;
|
|
"/components/checkbox": Record<string, never>;
|
|
"/components/clipboard": Record<string, never>;
|
|
"/components/collapse": Record<string, never>;
|
|
"/components/color-picker": Record<string, never>;
|
|
"/components/columns": Record<string, never>;
|
|
"/components/combo-box": Record<string, never>;
|
|
"/components/confetti": Record<string, never>;
|
|
"/components/container": Record<string, never>;
|
|
"/components/context-menu": Record<string, never>;
|
|
"/components/copy-markup": Record<string, never>;
|
|
"/components/custom-scrollbar": Record<string, never>;
|
|
"/components/data-map": Record<string, never>;
|
|
"/components/data-table": Record<string, never>;
|
|
"/components/date-picker": Record<string, never>;
|
|
"/components/device-frame": Record<string, never>;
|
|
"/components/divider": Record<string, never>;
|
|
"/components/drag-and-drop": Record<string, never>;
|
|
"/components/drawer": Record<string, never>;
|
|
"/components/dropdown": Record<string, never>;
|
|
"/components/file-input": Record<string, never>;
|
|
"/components/file-upload": Record<string, never>;
|
|
"/components/file-upload-progress": Record<string, never>;
|
|
"/components/grid": Record<string, never>;
|
|
"/components/image": Record<string, never>;
|
|
"/components/input": Record<string, never>;
|
|
"/components/input-group": Record<string, never>;
|
|
"/components/input-number": Record<string, never>;
|
|
"/components/kbd": Record<string, never>;
|
|
"/components/layout-splitter": Record<string, never>;
|
|
"/components/legend-indicator": Record<string, never>;
|
|
"/components/link": Record<string, never>;
|
|
"/components/list": Record<string, never>;
|
|
"/components/list-group": Record<string, never>;
|
|
"/components/map": Record<string, never>;
|
|
"/components/marquee": Record<string, never>;
|
|
"/components/mega-menu": Record<string, never>;
|
|
"/components/modal": Record<string, never>;
|
|
"/components/nav": Record<string, never>;
|
|
"/components/navbar": Record<string, never>;
|
|
"/components/pagination": Record<string, never>;
|
|
"/components/pin-input": Record<string, never>;
|
|
"/components/popover": Record<string, never>;
|
|
"/components/progress": Record<string, never>;
|
|
"/components/radio": Record<string, never>;
|
|
"/components/range-slider": Record<string, never>;
|
|
"/components/rating": Record<string, never>;
|
|
"/components/scrollspy": Record<string, never>;
|
|
"/components/search-box": Record<string, never>;
|
|
"/components/select": Record<string, never>;
|
|
"/components/sidebar": Record<string, never>;
|
|
"/components/skeleton": Record<string, never>;
|
|
"/components/spinner": Record<string, never>;
|
|
"/components/stepper": Record<string, never>;
|
|
"/components/strong-password": Record<string, never>;
|
|
"/components/styled-icon": Record<string, never>;
|
|
"/components/switch": Record<string, never>;
|
|
"/components/table": Record<string, never>;
|
|
"/components/tabs": Record<string, never>;
|
|
"/components/textarea": Record<string, never>;
|
|
"/components/time-picker": Record<string, never>;
|
|
"/components/timeline": Record<string, never>;
|
|
"/components/toast": Record<string, never>;
|
|
"/components/toast-notifications": Record<string, never>;
|
|
"/components/toggle-count": Record<string, never>;
|
|
"/components/toggle-password": Record<string, never>;
|
|
"/components/tooltip": Record<string, never>;
|
|
"/components/tree-view": Record<string, never>;
|
|
"/components/typography": Record<string, never>;
|
|
"/components/wysiwyg-editor": Record<string, never>;
|
|
"/dark-mode": Record<string, never>;
|
|
"/docs": Record<string, never>;
|
|
"/fonts": Record<string, never>;
|
|
"/forms": Record<string, never>;
|
|
"/framework-guides": Record<string, never>;
|
|
"/installation": Record<string, never>;
|
|
"/integrations": Record<string, never>;
|
|
"/layout": Record<string, never>;
|
|
"/navigation": Record<string, never>;
|
|
"/overlays": Record<string, never>;
|
|
"/resources": Record<string, never>;
|
|
"/sizing": Record<string, never>;
|
|
"/tables": Record<string, never>;
|
|
"/templates": Record<string, never>;
|
|
"/themes": Record<string, never>;
|
|
}
|
|
|
|
export type RoutePath = keyof Routes;
|
|
type RouteValue = string | readonly string[] | undefined;
|
|
|
|
function encodeRouteValue(value: RouteValue, catchAll: boolean): string {
|
|
if (value === undefined) return "";
|
|
const values = Array.isArray(value) ? value : catchAll ? String(value).split("/") : [String(value)];
|
|
return values.map((part) => encodeURIComponent(part)).join("/");
|
|
}
|
|
|
|
export function href<P extends RoutePath>(
|
|
path: P,
|
|
...args: keyof Routes[P] extends never
|
|
? []
|
|
: Record<string, never> extends Routes[P]
|
|
? [params?: Routes[P]]
|
|
: [params: Routes[P]]
|
|
): string {
|
|
const params = (args[0] ?? {}) as Record<string, RouteValue>;
|
|
const output: string[] = [];
|
|
for (const segment of String(path).split("/").filter(Boolean)) {
|
|
let name: string | undefined;
|
|
let optional = false;
|
|
let catchAll = false;
|
|
if (segment.startsWith("[[") && segment.endsWith("]]")) {
|
|
optional = true;
|
|
name = segment.slice(2, -2);
|
|
} else if (segment.startsWith("[") && segment.endsWith("]")) {
|
|
name = segment.slice(1, -1);
|
|
if (name.endsWith("?")) {
|
|
optional = true;
|
|
name = name.slice(0, -1);
|
|
}
|
|
}
|
|
if (!name) {
|
|
output.push(segment);
|
|
continue;
|
|
}
|
|
if (name.startsWith("...")) {
|
|
catchAll = true;
|
|
name = name.slice(3);
|
|
}
|
|
const value = params[name];
|
|
if (value === undefined && optional) continue;
|
|
if (value === undefined) throw new Error(`WRN-ROUTE-MISSING-PARAM: Missing route parameter '${name}'.`);
|
|
output.push(encodeRouteValue(value, catchAll));
|
|
}
|
|
return "/" + output.filter(Boolean).join("/");
|
|
}
|