@bgscore/react-router
Version:
Automatic React Router generator for Vite with TypeScript support
34 lines (33 loc) • 1.48 kB
TypeScript
export type AutoRouteOptions = {
sourceDir?: string;
outputDir?: string;
authGuardDir?: string;
notFoundDir?: string;
errorBoundaryDir?: string;
outputName?: string;
baseUrl?: string;
layoutName?: string;
minify?: boolean;
logging?: boolean;
};
export interface RouteNode {
path: string;
element?: string;
children: RouteNode[];
isIndex?: boolean;
hasErrorBoundary?: boolean;
hasMetadata?: boolean;
hasLoader?: boolean;
imports: Array<{
name: string;
path: string;
type: "layout" | "component";
hasMetadata?: boolean;
}>;
isIndependent?: boolean;
metadata?: Record<string, any>;
}
export type NestedKeyOf<T> = T extends object ? T extends Array<infer U> ? `${number}` | `${number}.${NestedKeyOf<U>}` : {
[K in keyof T]: T[K] extends Array<infer U> ? `${K & string}` | `${K & string}[${number}]` | `${K & string}[${number}].${NestedKeyOf<U>}` : T[K] extends object ? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}` : `${K & string}`;
}[keyof T] : string;
export type PathValue<T, P extends string> = P extends `${infer K}[${infer I}].${infer R}` ? K extends keyof T ? T[K] extends Array<infer U> ? PathValue<U, R> : never : never : P extends `${infer K}[${infer I}]` ? K extends keyof T ? T[K] extends Array<infer U> ? U : never : never : P extends `${infer K}.${infer R}` ? K extends keyof T ? PathValue<T[K], R> : never : P extends keyof T ? T[P] : never;