import { BaseHttpRequest } from './BaseHttpRequest.js'; import { ResponseError } from '@nu-art/ts-common/core/exceptions/types'; import { DBDef_V3 } from '@nu-art/ts-common'; export declare enum HttpMethod { ALL = "all", POST = "post", GET = "get", PATCH = "patch", DELETE = "delete", PUT = "put", OPTIONS = "options", HEAD = "head" } export type HttpMethod_Query = 'get' | 'delete'; export type HttpMethod_Body = 'post' | 'put' | 'patch'; export type HttpMethod_Empty = 'options' | 'head'; export type QueryParams = { [key: string]: string | number | undefined; }; export type UrlQueryParams = { [key: string]: string | undefined; }; /** * P - Params * B - Body * R - Response * M - Method * IP - Input Params * IB - Input Body */ export type TypedApi = { M: M; R: R; B: B; P: P; IP: IP; IB: IB; E: E; Body: B; }; export type BodyApi = TypedApi; export type QueryApi = TypedApi; export type EmptyApi = TypedApi; export type ApiDef> = { method: API['M']; fullUrl?: string; baseUrl?: string; path: string; timeout?: number; errors?: API['E']['type']; }; export type ApiStruct = { [k: string]: (TypedApi | ApiStruct); }; export type ApiDefResolver = API_Struct extends TypedApi ? ApiDef : API_Struct extends ApiStruct ? ApiDefRouter : never; export type ApiDefRouter = { [P in keyof API_Struct]: ApiDefResolver; }; export type ApiDefCaller = API_Struct extends TypedApi ? ApiCaller : API_Struct extends ApiStruct ? ApiCallerRouter : never; export type ApiCallerRouter = { [P in keyof API_Struct]: ApiDefCaller; }; export type ApiCaller_Query> = API['IP'] extends undefined ? () => BaseHttpRequest : (query: API['IP']) => BaseHttpRequest; export type ApiCaller_Body> = API['IB'] extends undefined ? () => BaseHttpRequest : (query: API['IB']) => BaseHttpRequest; export type ApiCaller_Any> = (body: API['IB'], query: API['IP']) => BaseHttpRequest; export type ApiCaller = API extends QueryApi ? ApiCaller_Query : API extends BodyApi ? ApiCaller_Body : API extends TypedApi ? ApiCaller_Any : never; export type DBModuleType = { dbDef?: DBDef_V3; }; export type ApiModule = { dbModule?: DBModuleType; apiDef?: { [name: string]: { [name: string]: { path: string; }; }; }; };