export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'; type CleanRouteParamName = Param extends `${infer Name}?${string}` ? Name : Param extends `${infer Name}#${string}` ? Name : Param; export type RouteParamNames = Path extends `${infer Segment}/${infer Rest}` ? Segment extends `:${infer Param}` ? CleanRouteParamName | RouteParamNames : RouteParamNames : Path extends `:${infer Param}` ? CleanRouteParamName : never; export type RouteParams = { [Key in RouteParamNames]: string | number; }; export type EndpointMethod = Endpoint extends `${infer Method}: ${string}` ? Method extends HttpMethod ? Method : never : never; export type EndpointPath = Endpoint extends `${HttpMethod}: ${infer Path}` ? Path : never; export type ConventionEndpoint = keyof Convention extends never ? string : Extract; type StrictEmpty = [keyof T] extends [never] ? never : T; export type RequestOptions = Omit & { params?: StrictEmpty>; query?: StrictEmpty>; }; export type GetQueryFromConvention = T extends keyof Convention ? Convention[T]['query'] : any; export type GetDataFromConvention = T extends keyof Convention ? Convention[T]['data'] : any; export type GetParamsFromConvention = RouteParams>; export {};