import type { Options as CoBodyOptions } from 'co-body';
import type { File, Options as FormidableOptions, Part } from 'formidable';
import type { Context } from 'koa';
import { z } from 'zod';
export declare enum HttpMethodEnum {
    POST = "POST",
    GET = "GET",
    PUT = "PUT",
    PATCH = "PATCH",
    DELETE = "DELETE",
    HEAD = "HEAD"
}
declare const HttpMethod: z.ZodEnum<typeof HttpMethodEnum>;
export type HttpMethod = z.infer<typeof HttpMethod>;
export type ExtendedFormidableOptions = FormidableOptions & {
    onFileBegin?: (name: string, file: File) => void;
    onPart?: (part: Part, handlePart: (part: Part) => void) => void;
};
export type ScalarOrArrayFields = {
    [field: string]: string | string[];
};
export type ScalarOrArrayFiles = {
    [file: string]: File | File[];
};
export declare const KoaBodyMiddlewareOptionsSchema: z.ZodObject<{
    patchNode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    patchKoa: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    jsonLimit: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
    formLimit: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
    textLimit: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
    encoding: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    multipart: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    urlencoded: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    text: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    json: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    jsonStrict: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    jsonTypes: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    urlencodedTypes: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    textTypes: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    multipartTypes: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    includeUnparsed: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    parsedMethods: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<typeof HttpMethodEnum>>>>;
}, z.core.$strip>;
export type KoaBodyDirectOptions = z.infer<typeof KoaBodyMiddlewareOptionsSchema>;
export type KoaBodyMiddlewareOptions = KoaBodyDirectOptions & {
    onError?: (err: Error, ctx: Context) => void;
    formidable?: ExtendedFormidableOptions;
    queryString?: CoBodyOptions['queryString'];
};
export {};
