import { ClearHttpContext } from "../Contracts.mjs";
import { Response as Response$1 } from "../core/Response.mjs";
import { ClassMiddleware, ControllerHandler } from "./basic.mjs";
import { Request } from "../core/Request.mjs";
import { EventHandlerRequest, H3, H3Event, Middleware as Middleware$1, TypedServerRequest } from "h3";
//#region src/types/h3.d.ts
type H3App = Omit
& {
fetch: (request: TypedServerRequest) => Promise;
};
type MaybePromise = T | Promise;
interface HttpRequest extends TypedServerRequest {
getBody: () => Record;
}
/**
* HTTP context passed to route handlers
*/
interface HttpContext extends Omit, ClearHttpContext {
req: HttpRequest;
clearRequest: Request;
clearResponse: Response$1;
}
/**
* Route handler function type
*/
type RouteHandler = (
/**
* H3 event context
*/
ctx: HttpContext,
/**
* ClearRequest instance
*/
req: Request) => any | Promise;
/**
* Handler can be either a function or controller reference
*/
type Handler = RouteHandler | ControllerHandler;
type NextFunction = () => MaybePromise;
/**
* Middleware function type
*/
type MiddlewareFunction = Middleware$1;
type Middleware = MiddlewareFunction | ClassMiddleware;
//#endregion
export { H3App, Handler, HttpContext, HttpRequest, MaybePromise, Middleware, MiddlewareFunction, NextFunction, RouteHandler };