import 'reflect-metadata';
export declare type DataType = 'number' | 'string' | Record<any, any> | undefined;
export interface ParamItem {
    name: string;
    type: string;
    index: number;
    dataType: DataType;
}
export interface Method {
    subUrl: string;
    httpMethod: string;
    params: ParamItem[];
    midwares?: (() => any)[];
}
export interface Router {
    [methodName: string]: Method;
}
export interface Clazz {
    baseUrl: string;
    routes: Router;
    midwares?: (() => any)[];
    logPackage?: boolean;
    validateif?: (v: any) => boolean;
}
export declare const getClazz: (target: any) => Clazz;
export declare const getMethod: (target: any, methodName: any) => Method;
/**
 * Service class decorator.
 *
 * @Controller('/user')
 * class UserService {
 * }
 * @param baseUrl 基础路径
 * @param logPackage 是否输出 api 日志
 *
 */
export declare function Controller(baseUrl?: string, midwares?: (() => any)[], logPackage?: boolean): (target: any) => void;
/**
 *
 * @GET('/user/:name')
 * list(@PathParam('name') name:string)
 */
export declare const Get: (url: string, midwares?: any[] | undefined) => (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
export declare const Post: (url: string, midwares?: any[] | undefined) => (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
export declare const Delete: (url: string, midwares?: any[] | undefined) => (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
export declare const Put: (url: string, midwares?: any[] | undefined) => (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
export declare const GetPost: (url: string, midwares?: any[] | undefined) => (target: any, methodName: string, descriptor: PropertyDescriptor) => void;
/**
 *
 * list(@PathParam('name') name:string)
 *
 */
export declare const Param: (paramName?: string | undefined, dataType?: DataType) => (target: any, methodName: string, paramIndex: number) => void;
export declare const Query: (paramName?: string | undefined, dataType?: DataType) => (target: any, methodName: string, paramIndex: number) => void;
export declare const Body: (paramName?: string | undefined, dataType?: DataType) => (target: any, methodName: string, paramIndex: number) => void;
export declare const Cookie: (paramName?: string | undefined, dataType?: DataType) => (target: any, methodName: string, paramIndex: number) => void;
export declare const Headers: (paramName?: string | undefined, dataType?: DataType) => (target: any, methodName: string, paramIndex: number) => void;
export declare const Token: (target: any, methodName: string, paramIndex: number) => void;
export declare const Esn: (target: any, methodName: string, paramIndex: number) => void;
/**
 *
 * @GET('/get')
 * list(@Request request, @Response res)
 */
export declare const HttpRequest: (target: any, methodName: string, paramIndex: number) => void;
export declare const HttpResponse: (target: any, methodName: string, paramIndex: number) => void;
/** 参数值是原始的Http请求Body数据 */
export declare const HttpBody: (target: any, methodName: string, paramIndex: number) => void;
/** 参数值是Http请求的Body数据自动转换的Model对象, 与 Body 的区别的是，会自动合并未知字段 */
export declare const HttpBodyModel: (target: any, methodName: string, paramIndex: number) => void;
