import http, { OutgoingMessage } from 'http'; import { CookieSerializeOptions } from 'cookie-es'; import * as ufo from 'ufo'; interface H3EventContext extends Record { } interface H3Event { '__is_event__': true; event: H3Event; req: IncomingMessage; res: ServerResponse; context: H3EventContext; } declare type CompatibilityEvent = H3Event | IncomingMessage; declare type H3Response = T | Promise; interface EventHandler { '__is_handler__'?: true; (event: CompatibilityEvent): H3Response; } declare function defineEventHandler(handler: EventHandler): EventHandler; declare const eventHandler: typeof defineEventHandler; declare type LazyEventHandler = () => EventHandler | Promise; declare function defineLazyEventHandler(factory: LazyEventHandler): EventHandler; declare const lazyEventHandler: typeof defineLazyEventHandler; interface DynamicEventHandler extends EventHandler { set: (handler: EventHandler) => void; } declare function dynamicEventHandler(initial?: EventHandler): DynamicEventHandler; declare function isEventHandler(input: any): input is EventHandler; declare type CompatibilityEventHandler = EventHandler | Handler | Middleware; declare function toEventHandler(handler: CompatibilityEventHandler): EventHandler; declare function createEvent(req: http.IncomingMessage, res: http.ServerResponse): CompatibilityEvent; declare function isEvent(input: any): input is H3Event; interface CompatibilityRequestProps { event: H3Event; context: Record; /** Only available with connect and press */ originalUrl?: string; } interface IncomingMessage extends http.IncomingMessage, CompatibilityRequestProps { req: H3Event['req']; res: H3Event['res']; } interface ServerResponse extends http.ServerResponse { event: H3Event; res: H3Event['res']; req: http.ServerResponse['req'] & CompatibilityRequestProps; } declare type Handler = (req: IncomingMessage & ReqT, res: ServerResponse) => T; declare type PromisifiedHandler = Handler>; declare type Middleware = (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => any) => any; declare type LazyHandler = () => Handler | Promise; declare type Encoding = false | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'latin1' | 'binary' | 'hex'; declare type HTTPMethod = 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE'; interface Layer { route: string; match?: Matcher; handler: EventHandler; } declare type Stack = Layer[]; interface InputLayer { route?: string; match?: Matcher; handler: Handler | LazyHandler | EventHandler | LazyEventHandler; lazy?: boolean; /** @deprecated */ handle?: Handler; /** @deprecated */ promisify?: boolean; } declare type InputStack = InputLayer[]; declare type Matcher = (url: string, event?: CompatibilityEvent) => boolean; interface AppUse { (route: string | string[], handler: CompatibilityEventHandler | CompatibilityEventHandler[], options?: Partial): App; (handler: CompatibilityEventHandler | CompatibilityEventHandler[], options?: Partial): App; (options: InputLayer): App; } declare type NodeHandler = (req: http.IncomingMessage, res: http.ServerResponse) => Promise; interface App extends NodeHandler { stack: Stack; handler: EventHandler; nodeHandler: NodeHandler; use: AppUse; } interface AppOptions { debug?: boolean; onError?: (error: Error, event: CompatibilityEvent) => any; } declare function createApp(options?: AppOptions): App; declare function use(app: App, arg1: string | Handler | InputLayer | InputLayer[], arg2?: Handler | Partial | Handler[] | Middleware | Middleware[], arg3?: Partial): App; declare function createAppEventHandler(stack: Stack, options: AppOptions): EventHandler; /** * H3 Runtime Error * @class * @extends Error * @property {Number} statusCode An Integer indicating the HTTP response status code. * @property {String} statusMessage A String representing the HTTP status message * @property {String} fatal Indicates if the error is a fatal error. * @property {String} unhandled Indicates if the error was unhandled and auto captured. * @property {Any} data An extra data that will includes in the response.
* This can be used to pass additional information about the error. * @property {Boolean} internal Setting this property to true will mark error as an internal error */ declare class H3Error extends Error { static __h3_error__: boolean; statusCode: number; fatal: boolean; unhandled: boolean; statusMessage: string; data?: any; } /** * Creates new `Error` that can be used to handle both internal and runtime errors. * * @param input {Partial} * @return {H3Error} An instance of the H3Error */ declare function createError(input: string | Partial): H3Error; /** * Receive an error and return the corresponding response.
* H3 internally uses this function to handle unhandled errors.
* Note that calling this function will close the connection and no other data will be sent to client afterwards. * @param event {CompatibilityEvent} H3 event or req passed by h3 handler * @param error {H3Error|Error} Raised error * @param debug {Boolean} Whether application is in debug mode.
* In the debug mode the stack trace of errors will be return in response. */ declare function sendError(event: CompatibilityEvent, error: Error | H3Error, debug?: boolean): void; declare function isError(input: any): input is H3Error; declare const defineHandler: (handler: Handler) => Handler; /** @deprecated Use defineHandler */ declare const defineHandle: (handler: Handler) => Handler; declare const defineMiddleware: (middleware: Middleware) => Middleware; declare function promisifyHandler(handler: Handler | Middleware): PromisifiedHandler; /** @deprecated Use defineHandler */ declare const promisifyHandle: typeof promisifyHandler; declare function callHandler(handler: Middleware, req: IncomingMessage, res: ServerResponse): Promise; declare function defineLazyHandler(handler: LazyHandler, promisify?: boolean): Handler; /** @deprecated Use defineLazyHandler */ declare const lazyHandle: typeof defineLazyHandler; declare function useBase(base: string, handler: Handler): Handler; /** * Reads body of the request and returns encoded raw string (default) or `Buffer` if encoding if falsy. * @param event {CompatibilityEvent} H3 event or req passed by h3 handler * @param encoding {Encoding} encoding="utf-8" - The character encoding to use. * * @return {String|Buffer} Encoded raw string or raw Buffer of the body */ declare function readRawBody(event: CompatibilityEvent, encoding?: Encoding): Encoding extends false ? Buffer : Promise; /** @deprecated Use `h3.readRawBody` */ declare const useRawBody: typeof readRawBody; /** * Reads request body and try to safely parse using [destr](https://github.com/unjs/destr) * @param event {CompatibilityEvent} H3 event or req passed by h3 handler * @param encoding {Encoding} encoding="utf-8" - The character encoding to use. * * @return {*} The `Object`, `Array`, `String`, `Number`, `Boolean`, or `null` value corresponding to the request JSON body * * ```ts * const body = await useBody(req) * ``` */ declare function readBody(event: CompatibilityEvent): Promise; /** @deprecated Use `h3.readBody` */ declare const useBody: typeof readBody; interface CacheConditions { modifiedTime?: string | Date; maxAge?: number; etag?: string; cacheControls?: string[]; } /** * Check request caching headers (`If-Modified-Since`) and add caching headers (Last-Modified, Cache-Control) * Note: `public` cache control will be added by default * @returns `true` when cache headers are matching. When `true` is returned, no reponse should be sent anymore */ declare function handleCacheHeaders(event: CompatibilityEvent, opts: CacheConditions): boolean; declare const MIMES: { html: string; json: string; }; /** * Parse the request to get HTTP Cookie header string and returning an object of all cookie name-value pairs. * @param event {CompatibilityEvent} H3 event or req passed by h3 handler * @returns Object of cookie name-value pairs * ```ts * const cookies = parseCookies(event) * ``` */ declare function parseCookies(event: CompatibilityEvent): Record; /** @deprecated Use `h3.parseCookies` */ declare const useCookies: typeof parseCookies; /** * Get a cookie value by name. * @param event {CompatibilityEvent} H3 event or req passed by h3 handler * @param name Name of the cookie to get * @returns {*} Value of the cookie (String or undefined) * ```ts * const authorization = useCookie(request, 'Authorization') * ``` */ declare function getCookie(event: CompatibilityEvent, name: string): string | undefined; /** @deprecated Use `h3.getCookie` */ declare const useCookie: typeof getCookie; /** * Set a cookie value by name. * @param event {CompatibilityEvent} H3 event or res passed by h3 handler * @param name Name of the cookie to set * @param value Value of the cookie to set * @param serializeOptions {CookieSerializeOptions} Options for serializing the cookie * ```ts * setCookie(res, 'Authorization', '1234567') * ``` */ declare function setCookie(event: CompatibilityEvent, name: string, value: string, serializeOptions?: CookieSerializeOptions): void; /** * Set a cookie value by name. * @param event {CompatibilityEvent} H3 event or res passed by h3 handler * @param name Name of the cookie to delete * @param serializeOptions {CookieSerializeOptions} Cookie options * ```ts * deleteCookie(res, 'SessionId') * ``` */ declare function deleteCookie(event: CompatibilityEvent, name: string, serializeOptions?: CookieSerializeOptions): void; declare function getQuery(event: CompatibilityEvent): ufo.QueryObject; /** @deprecated Use `h3.getQuery` */ declare const useQuery: typeof getQuery; declare function getRouterParams(event: CompatibilityEvent): CompatibilityEvent['context']; declare function getRouterParam(event: CompatibilityEvent, name: string): CompatibilityEvent['context'][string]; declare function getMethod(event: CompatibilityEvent, defaultMethod?: HTTPMethod): HTTPMethod; /** @deprecated Use `h3.getMethod` */ declare const useMethod: typeof getMethod; declare function isMethod(event: CompatibilityEvent, expected: HTTPMethod | HTTPMethod[], allowHead?: boolean): boolean; declare function assertMethod(event: CompatibilityEvent, expected: HTTPMethod | HTTPMethod[], allowHead?: boolean): void; declare function getRequestHeaders(event: CompatibilityEvent): CompatibilityEvent['req']['headers']; declare const getHeaders: typeof getRequestHeaders; declare function getRequestHeader(event: CompatibilityEvent, name: string): CompatibilityEvent['req']['headers'][string]; declare const getHeader: typeof getRequestHeader; declare function send(event: CompatibilityEvent, data?: any, type?: string): Promise; declare function defaultContentType(event: CompatibilityEvent, type?: string): void; declare function sendRedirect(event: CompatibilityEvent, location: string, code?: number): Promise; declare function getResponseHeaders(event: CompatibilityEvent): ReturnType; declare function getResponseHeader(event: CompatibilityEvent, name: string): ReturnType; declare function setResponseHeaders(event: CompatibilityEvent, headers: Record[1]>): void; declare const setHeaders: typeof setResponseHeaders; declare function setResponseHeader(event: CompatibilityEvent, name: string, value: Parameters[1]): void; declare const setHeader: typeof setResponseHeader; declare function appendResponseHeaders(event: CompatibilityEvent, headers: Record): void; declare const appendHeaders: typeof appendResponseHeaders; declare function appendResponseHeader(event: CompatibilityEvent, name: string, value: string): void; declare const appendHeader: typeof appendResponseHeader; declare function isStream(data: any): any; declare function sendStream(event: CompatibilityEvent, data: any): Promise; declare type RouterMethod = Lowercase; declare type RouterUse = (path: string, handler: CompatibilityEventHandler, method?: RouterMethod | RouterMethod[]) => Router; declare type AddRouteShortcuts = Record; interface Router extends AddRouteShortcuts { add: RouterUse; use: RouterUse; handler: EventHandler; } declare function createRouter(): Router; export { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3EventContext, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, getCookie, getHeader, getHeaders, getMethod, getQuery, getRequestHeader, getRequestHeaders, getResponseHeader, getResponseHeaders, getRouterParam, getRouterParams, handleCacheHeaders, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, parseCookies, promisifyHandle, promisifyHandler, readBody, readRawBody, send, sendError, sendRedirect, sendStream, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };