/*!
 * @package @coolgk/utils
 * @version 3.1.4
 * @link https://github.com/coolgk/node-utils
 * @license MIT
 * @author Daniel Gong <daniel.k.gong@gmail.com>
 *
 * Copyright (c) 2017 Daniel Gong <daniel.k.gong@gmail.com>. All rights reserved.
 * Licensed under the MIT License.
 */

/// <reference types="node" />
/*!
 *  Copyright (c) 2017 Daniel Gong <daniel.k.gong@gmail.com>. All rights reserved.
 *  Licensed under the MIT License.
 */
import { IncomingMessage, ServerResponse } from 'http';
export interface IFormdataConfig {
    array?: boolean;
    mode?: number;
    prefix?: string;
    postfix?: string;
    dir?: string;
    limits?: {
        fieldNameSize?: number;
        fieldSize?: number;
        fields?: number;
        fileSize?: number;
        files?: number;
        parts?: number;
        headerPairs?: number;
        postSize?: number;
    };
    fileFieldNames?: string | string[];
    alwaysReject?: boolean;
}
export declare enum FormDataError {
    FILE_SIZE_EXCEEDED_LIMIT = "FILE_SIZE_EXCEEDED_LIMIT",
    NUM_OF_NON_FILE_FIELDS_EXCEEDED_LIMIT = "NUM_OF_NON_FILE_FIELDS_EXCEEDED_LIMIT",
    NUM_OF_FIELDS_EXCEEDED_LIMIT = "NUM_OF_FIELDS_EXCEEDED_LIMIT",
    NUM_OF_FILES_EXCEEDED_LIMIT = "NUM_OF_FILES_EXCEEDED_LIMIT",
    POST_SIZE_EXCEEDED_LIMIT = "POST_SIZE_EXCEEDED_LIMIT",
    FIELD_SIZE_EXCEEDED_LIMIT = "FIELD_SIZE_EXCEEDED_LIMIT",
    INVALID_JSON = "INVALID_JSON",
}
export interface IFile {
    error?: string | Error;
    fieldname: string;
    filename: string;
    encoding: string;
    mimetype: string;
    size: number;
    path: string;
    remove: () => void;
}
export interface IFormData {
    [key: string]: string | string[] | IFile[] | IFile;
}
export interface IRequest extends IncomingMessage {
    [key: string]: any;
}
export declare function getFormData(request: IncomingMessage, options?: IFormdataConfig): Promise<IFormData>;
export declare function formData(request: IncomingMessage, globalOptions?: IFormdataConfig): {
    getData: (names: string[] | string, options: IFormdataConfig) => Promise<IFormData>;
};
export interface IExpressFormdataConfig extends IFormdataConfig {
    requestFieldName?: string;
}
export declare function express(options?: IExpressFormdataConfig): (request: IRequest, response: ServerResponse, next: () => void) => void;
export default getFormData;
