UNPKG

14.3 kBTypeScriptView Raw
1import http, { OutgoingMessage } from 'http';
2import { CookieSerializeOptions } from 'cookie-es';
3import * as ufo from 'ufo';
4
5interface H3EventContext extends Record<string, any> {
6}
7interface H3Event {
8 '__is_event__': true;
9 event: H3Event;
10 req: IncomingMessage;
11 res: ServerResponse;
12 context: H3EventContext;
13}
14declare type CompatibilityEvent = H3Event | IncomingMessage;
15declare type H3Response<T = any> = T | Promise<T>;
16interface EventHandler<T = any> {
17 '__is_handler__'?: true;
18 (event: CompatibilityEvent): H3Response<T>;
19}
20declare function defineEventHandler<T = any>(handler: EventHandler<T>): EventHandler<T>;
21declare const eventHandler: typeof defineEventHandler;
22declare type LazyEventHandler = () => EventHandler | Promise<EventHandler>;
23declare function defineLazyEventHandler(factory: LazyEventHandler): EventHandler;
24declare const lazyEventHandler: typeof defineLazyEventHandler;
25interface DynamicEventHandler extends EventHandler {
26 set: (handler: EventHandler) => void;
27}
28declare function dynamicEventHandler(initial?: EventHandler): DynamicEventHandler;
29declare function isEventHandler(input: any): input is EventHandler;
30declare type CompatibilityEventHandler = EventHandler | Handler | Middleware;
31declare function toEventHandler(handler: CompatibilityEventHandler): EventHandler;
32declare function createEvent(req: http.IncomingMessage, res: http.ServerResponse): CompatibilityEvent;
33declare function isEvent(input: any): input is H3Event;
34
35interface CompatibilityRequestProps {
36 event: H3Event;
37 context: Record<string, any>;
38 /** Only available with connect and press */
39 originalUrl?: string;
40}
41interface IncomingMessage extends http.IncomingMessage, CompatibilityRequestProps {
42 req: H3Event['req'];
43 res: H3Event['res'];
44}
45interface ServerResponse extends http.ServerResponse {
46 event: H3Event;
47 res: H3Event['res'];
48 req: http.ServerResponse['req'] & CompatibilityRequestProps;
49}
50declare type Handler<T = any, ReqT = {}> = (req: IncomingMessage & ReqT, res: ServerResponse) => T;
51declare type PromisifiedHandler = Handler<Promise<any>>;
52declare type Middleware = (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => any) => any;
53declare type LazyHandler = () => Handler | Promise<Handler>;
54declare type Encoding = false | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'latin1' | 'binary' | 'hex';
55declare type HTTPMethod = 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE';
56
57interface Layer {
58 route: string;
59 match?: Matcher;
60 handler: EventHandler;
61}
62declare type Stack = Layer[];
63interface InputLayer {
64 route?: string;
65 match?: Matcher;
66 handler: Handler | LazyHandler | EventHandler | LazyEventHandler;
67 lazy?: boolean;
68 /** @deprecated */
69 handle?: Handler;
70 /** @deprecated */
71 promisify?: boolean;
72}
73declare type InputStack = InputLayer[];
74declare type Matcher = (url: string, event?: CompatibilityEvent) => boolean;
75interface AppUse {
76 (route: string | string[], handler: CompatibilityEventHandler | CompatibilityEventHandler[], options?: Partial<InputLayer>): App;
77 (handler: CompatibilityEventHandler | CompatibilityEventHandler[], options?: Partial<InputLayer>): App;
78 (options: InputLayer): App;
79}
80declare type NodeHandler = (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
81interface App extends NodeHandler {
82 stack: Stack;
83 handler: EventHandler;
84 nodeHandler: NodeHandler;
85 use: AppUse;
86}
87interface AppOptions {
88 debug?: boolean;
89 onError?: (error: Error, event: CompatibilityEvent) => any;
90}
91declare function createApp(options?: AppOptions): App;
92declare function use(app: App, arg1: string | Handler | InputLayer | InputLayer[], arg2?: Handler | Partial<InputLayer> | Handler[] | Middleware | Middleware[], arg3?: Partial<InputLayer>): App;
93declare function createAppEventHandler(stack: Stack, options: AppOptions): EventHandler<void>;
94
95/**
96 * H3 Runtime Error
97 * @class
98 * @extends Error
99 * @property {Number} statusCode An Integer indicating the HTTP response status code.
100 * @property {String} statusMessage A String representing the HTTP status message
101 * @property {String} fatal Indicates if the error is a fatal error.
102 * @property {String} unhandled Indicates if the error was unhandled and auto captured.
103 * @property {Any} data An extra data that will includes in the response.<br>
104 * This can be used to pass additional information about the error.
105 * @property {Boolean} internal Setting this property to <code>true</code> will mark error as an internal error
106 */
107declare class H3Error extends Error {
108 static __h3_error__: boolean;
109 statusCode: number;
110 fatal: boolean;
111 unhandled: boolean;
112 statusMessage: string;
113 data?: any;
114}
115/**
116 * Creates new `Error` that can be used to handle both internal and runtime errors.
117 *
118 * @param input {Partial<H3Error>}
119 * @return {H3Error} An instance of the H3Error
120 */
121declare function createError(input: string | Partial<H3Error>): H3Error;
122/**
123 * Receive an error and return the corresponding response.<br>
124 * H3 internally uses this function to handle unhandled errors.<br>
125 * Note that calling this function will close the connection and no other data will be sent to client afterwards.
126 *
127 @param event {CompatibilityEvent} H3 event or req passed by h3 handler
128 * @param error {H3Error|Error} Raised error
129 * @param debug {Boolean} Whether application is in debug mode.<br>
130 * In the debug mode the stack trace of errors will be return in response.
131 */
132declare function sendError(event: CompatibilityEvent, error: Error | H3Error, debug?: boolean): void;
133declare function isError(input: any): input is H3Error;
134
135declare const defineHandler: <T>(handler: Handler<T, {}>) => Handler<T, {}>;
136/** @deprecated Use defineHandler */
137declare const defineHandle: <T>(handler: Handler<T, {}>) => Handler<T, {}>;
138declare const defineMiddleware: (middleware: Middleware) => Middleware;
139declare function promisifyHandler(handler: Handler | Middleware): PromisifiedHandler;
140/** @deprecated Use defineHandler */
141declare const promisifyHandle: typeof promisifyHandler;
142declare function callHandler(handler: Middleware, req: IncomingMessage, res: ServerResponse): Promise<unknown>;
143declare function defineLazyHandler(handler: LazyHandler, promisify?: boolean): Handler;
144/** @deprecated Use defineLazyHandler */
145declare const lazyHandle: typeof defineLazyHandler;
146declare function useBase(base: string, handler: Handler): Handler;
147
148/**
149 * Reads body of the request and returns encoded raw string (default) or `Buffer` if encoding if falsy.
150 * @param event {CompatibilityEvent} H3 event or req passed by h3 handler
151 * @param encoding {Encoding} encoding="utf-8" - The character encoding to use.
152 *
153 * @return {String|Buffer} Encoded raw string or raw Buffer of the body
154 */
155declare function readRawBody(event: CompatibilityEvent, encoding?: Encoding): Encoding extends false ? Buffer : Promise<string | Buffer>;
156/** @deprecated Use `h3.readRawBody` */
157declare const useRawBody: typeof readRawBody;
158/**
159 * Reads request body and try to safely parse using [destr](https://github.com/unjs/destr)
160 * @param event {CompatibilityEvent} H3 event or req passed by h3 handler
161 * @param encoding {Encoding} encoding="utf-8" - The character encoding to use.
162 *
163 * @return {*} The `Object`, `Array`, `String`, `Number`, `Boolean`, or `null` value corresponding to the request JSON body
164 *
165 * ```ts
166 * const body = await useBody(req)
167 * ```
168 */
169declare function readBody<T = any>(event: CompatibilityEvent): Promise<T>;
170/** @deprecated Use `h3.readBody` */
171declare const useBody: typeof readBody;
172
173interface CacheConditions {
174 modifiedTime?: string | Date;
175 maxAge?: number;
176 etag?: string;
177 cacheControls?: string[];
178}
179/**
180 * Check request caching headers (`If-Modified-Since`) and add caching headers (Last-Modified, Cache-Control)
181 * Note: `public` cache control will be added by default
182 * @returns `true` when cache headers are matching. When `true` is returned, no reponse should be sent anymore
183 */
184declare function handleCacheHeaders(event: CompatibilityEvent, opts: CacheConditions): boolean;
185
186declare const MIMES: {
187 html: string;
188 json: string;
189};
190
191/**
192 * Parse the request to get HTTP Cookie header string and returning an object of all cookie name-value pairs.
193 * @param event {CompatibilityEvent} H3 event or req passed by h3 handler
194 * @returns Object of cookie name-value pairs
195 * ```ts
196 * const cookies = parseCookies(event)
197 * ```
198 */
199declare function parseCookies(event: CompatibilityEvent): Record<string, string>;
200/** @deprecated Use `h3.parseCookies` */
201declare const useCookies: typeof parseCookies;
202/**
203 * Get a cookie value by name.
204 * @param event {CompatibilityEvent} H3 event or req passed by h3 handler
205 * @param name Name of the cookie to get
206 * @returns {*} Value of the cookie (String or undefined)
207 * ```ts
208 * const authorization = useCookie(request, 'Authorization')
209 * ```
210 */
211declare function getCookie(event: CompatibilityEvent, name: string): string | undefined;
212/** @deprecated Use `h3.getCookie` */
213declare const useCookie: typeof getCookie;
214/**
215 * Set a cookie value by name.
216 * @param event {CompatibilityEvent} H3 event or res passed by h3 handler
217 * @param name Name of the cookie to set
218 * @param value Value of the cookie to set
219 * @param serializeOptions {CookieSerializeOptions} Options for serializing the cookie
220 * ```ts
221 * setCookie(res, 'Authorization', '1234567')
222 * ```
223 */
224declare function setCookie(event: CompatibilityEvent, name: string, value: string, serializeOptions?: CookieSerializeOptions): void;
225/**
226 * Set a cookie value by name.
227 * @param event {CompatibilityEvent} H3 event or res passed by h3 handler
228 * @param name Name of the cookie to delete
229 * @param serializeOptions {CookieSerializeOptions} Cookie options
230 * ```ts
231 * deleteCookie(res, 'SessionId')
232 * ```
233 */
234declare function deleteCookie(event: CompatibilityEvent, name: string, serializeOptions?: CookieSerializeOptions): void;
235
236declare function getQuery(event: CompatibilityEvent): ufo.QueryObject;
237/** @deprecated Use `h3.getQuery` */
238declare const useQuery: typeof getQuery;
239declare function getRouterParams(event: CompatibilityEvent): CompatibilityEvent['context'];
240declare function getRouterParam(event: CompatibilityEvent, name: string): CompatibilityEvent['context'][string];
241declare function getMethod(event: CompatibilityEvent, defaultMethod?: HTTPMethod): HTTPMethod;
242/** @deprecated Use `h3.getMethod` */
243declare const useMethod: typeof getMethod;
244declare function isMethod(event: CompatibilityEvent, expected: HTTPMethod | HTTPMethod[], allowHead?: boolean): boolean;
245declare function assertMethod(event: CompatibilityEvent, expected: HTTPMethod | HTTPMethod[], allowHead?: boolean): void;
246declare function getRequestHeaders(event: CompatibilityEvent): CompatibilityEvent['req']['headers'];
247declare const getHeaders: typeof getRequestHeaders;
248declare function getRequestHeader(event: CompatibilityEvent, name: string): CompatibilityEvent['req']['headers'][string];
249declare const getHeader: typeof getRequestHeader;
250
251declare function send(event: CompatibilityEvent, data?: any, type?: string): Promise<void>;
252declare function defaultContentType(event: CompatibilityEvent, type?: string): void;
253declare function sendRedirect(event: CompatibilityEvent, location: string, code?: number): Promise<void>;
254declare function getResponseHeaders(event: CompatibilityEvent): ReturnType<CompatibilityEvent['res']['getHeaders']>;
255declare function getResponseHeader(event: CompatibilityEvent, name: string): ReturnType<CompatibilityEvent['res']['getHeader']>;
256declare function setResponseHeaders(event: CompatibilityEvent, headers: Record<string, Parameters<OutgoingMessage['setHeader']>[1]>): void;
257declare const setHeaders: typeof setResponseHeaders;
258declare function setResponseHeader(event: CompatibilityEvent, name: string, value: Parameters<OutgoingMessage['setHeader']>[1]): void;
259declare const setHeader: typeof setResponseHeader;
260declare function appendResponseHeaders(event: CompatibilityEvent, headers: Record<string, string>): void;
261declare const appendHeaders: typeof appendResponseHeaders;
262declare function appendResponseHeader(event: CompatibilityEvent, name: string, value: string): void;
263declare const appendHeader: typeof appendResponseHeader;
264declare function isStream(data: any): any;
265declare function sendStream(event: CompatibilityEvent, data: any): Promise<void>;
266
267declare type RouterMethod = Lowercase<HTTPMethod>;
268declare type RouterUse = (path: string, handler: CompatibilityEventHandler, method?: RouterMethod | RouterMethod[]) => Router;
269declare type AddRouteShortcuts = Record<RouterMethod, RouterUse>;
270interface Router extends AddRouteShortcuts {
271 add: RouterUse;
272 use: RouterUse;
273 handler: EventHandler;
274}
275declare function createRouter(): Router;
276
277export { 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 };