import { Request, Response } from 'express';
import { PathDownload, StreamDownload } from './download';
import { View } from '../view';
export declare type ResponseBody = string | undefined | null | object | Array<any> | View;
export declare type ResponseHeaders = {
    [key: string]: string;
};
export declare class HTTPResponse<ResponseType> {
    protected readonly controllerResponse: ResponseType;
    protected readonly headers?: ResponseHeaders;
    protected readonly status?: number;
    protected mimeType: string | undefined;
    protected defaultHeaders: object | undefined;
    constructor(controllerResponse: ResponseType, headers?: ResponseHeaders, status?: number);
    handle(req: Request, res: Response): void;
    protected setBody(_: any, res: Response): HTTPResponse<ResponseType>;
    protected setStatus(req: Request, res: Response): HTTPResponse<ResponseType>;
    protected setHeaders(req: Request, res: Response): HTTPResponse<ResponseType>;
    protected setMimeType(req: Request, res: Response): HTTPResponse<ResponseType>;
}
export declare class HTTPRedirect extends HTTPResponse<string> {
    protected readonly status: number;
    handle(req: Request, res: Response): void;
}
export declare class JSONResponse extends HTTPResponse<object | Array<any>> {
    protected readonly mimeType: string;
}
export declare class HTMLResponse extends HTTPResponse<string> {
    protected readonly mimeType: string;
}
export declare class NoContentResponse extends HTTPResponse<undefined> {
    protected readonly mimeType: undefined;
    constructor(content?: any, headers?: any);
}
export declare class DownloadResponse extends HTTPResponse<StreamDownload | PathDownload> {
    constructor(download: StreamDownload | PathDownload, headers?: ResponseHeaders, status?: number);
    protected setBody(req: Request, res: Response): HTTPResponse<StreamDownload | PathDownload>;
}
export declare function toResponse(response: any, headers?: ResponseHeaders, status?: number): Promise<HTTPResponse<any>>;
