import { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'; import { Simplify, Except, Split, SetRequired } from 'type-fest'; import { RouteDef, APIDef, APIDefToUnion } from './route-def.js'; import { HTTPMethod } from './http-method.js'; export { FilterByAndStripPrefix } from './helpers.js'; type ExplodeMethodsOnRouteDef = Route extends any ? Route extends { method: infer Method; } ? Method extends HTTPMethod ? Simplify<{ method: Method; } & Except> : never : never : never; type ReplacePathParams = Path extends `${infer Before}[${infer Param}]${infer After}` ? ReplacePathParams<`${Before}${string}${After}`> : Path; type ReplacePathParamsOnRouteDef = Route extends any ? Simplify<{ route: ReplacePathParams; } & Except> : never; type AnyRoutePath = Routes["route"]; type PathWithMethod = Extract["route"]; type ExactMatchingRouteByPath> = Routes extends RouteDef ? Extract : never; type FilterToMostSpecificRoute = ExactMatchingRouteByPath extends never ? MatchedRoutes : ExactMatchingRouteByPath; type MatchingRoute, Method extends HTTPMethod = HTTPMethod> = FilterToMostSpecificRoute extends Split ? Route["method"] extends Method ? Route : never : never : never : never>; interface AxiosConfigForRouteDef extends Omit { url?: Route["route"]; method?: Route["method"]; params?: Route["queryParams"] & Route["commonParams"]; data?: Route["jsonBody"] & Route["commonParams"]; } type FormDataFromRouteDef = keyof Route["formData"] extends never ? Route["urlEncodedFormData"] : Route["formData"]; interface TypedAxios>>> { defaults: AxiosInstance["defaults"]; interceptors: AxiosInstance["interceptors"]; getUri(config?: AxiosConfigForRouteDef): string; post, MR extends RouteDef = MatchingRoute>(url: URL, ...args: keyof FormDataFromRouteDef extends never ? keyof MR["jsonBody"] extends never ? [data?: any, config?: Omit, "data">] : [ data: MR["jsonBody"], config?: Omit, "data"> ] : [ data: TypedURLSearchParams>, config?: Omit, "data"> ]): Promise>; put, MR extends RouteDef = MatchingRoute>(url: URL, data: MR["jsonBody"], config?: Omit, "data">): Promise>; get, MR extends RouteDef = MatchingRoute>(url: URL, config?: AxiosConfigForRouteDef): Promise>; head, MR extends RouteDef = MatchingRoute>(url: URL, config?: AxiosConfigForRouteDef): Promise>; delete, MR extends RouteDef = MatchingRoute>(url: URL, config?: AxiosConfigForRouteDef): Promise>; patch, MR extends RouteDef = MatchingRoute>(url: URL, data: MR["jsonBody"], config?: Omit, "data">): Promise>; options, MR extends RouteDef = MatchingRoute>(url: URL, config?: AxiosConfigForRouteDef): Promise>; postForm, MR extends RouteDef = MatchingRoute>(url: URL, data: FormDataFromRouteDef, config?: Omit, "data">): Promise>; putForm, MR extends RouteDef = MatchingRoute>(url: URL, data: FormDataFromRouteDef, config?: Omit, "data">): Promise>; patchForm, MR extends RouteDef = MatchingRoute>(url: URL, data: FormDataFromRouteDef, config?: Omit, "data">): Promise>; request, MR extends RouteDef = MatchingRoute, Config extends AxiosRequestConfig = SetRequired, "method" | "url">>(config: Config): Promise>; } type TypedURLSearchParams<_T> = URLSearchParams & { __URLSearchParamsType?: _T; }; declare const createTypedURLSearchParams: (data: T) => TypedURLSearchParams; export { APIDef, APIDefToUnion, AnyRoutePath, AxiosConfigForRouteDef, ExactMatchingRouteByPath, ExplodeMethodsOnRouteDef, MatchingRoute, PathWithMethod, ReplacePathParams, ReplacePathParamsOnRouteDef, RouteDef, TypedAxios, TypedURLSearchParams, createTypedURLSearchParams };