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 {};