@intentjs/hyper-express
Version:
A fork of hyper-express to suit IntentJS requirements. High performance Node.js webserver with a simple-to-use API powered by uWebsockets.js under the hood.
189 lines (165 loc) • 6.35 kB
TypeScript
import { ReadableOptions } from 'stream';
import { Request } from '../http/Request';
import { Response } from '../http/Response';
import { Websocket } from '../ws/Websocket';
import { CompressOptions } from 'uWebSockets.js';
import { MiddlewareHandler } from '../middleware/MiddlewareHandler';
// Define types for HTTP Route Creators
export type UserRouteHandler = (request: Request, response: Response) => void;
export interface UserRouteOptions {
middlewares?: Array<MiddlewareHandler>;
stream_options?: ReadableOptions;
max_body_length?: number;
}
// Define types for Websocket Route Creator
export type WSRouteHandler<TUserData = unknown> = (websocket: Websocket<TUserData>) => void;
export interface WSRouteOptions {
message_type?: 'String' | 'Buffer' | 'ArrayBuffer';
compression?: CompressOptions;
idle_timeout?: number;
max_backpressure?: number;
max_payload_length?: number;
}
// Define types for internal route/middleware records
export interface RouteRecord {
method: string;
pattern: string;
options: UserRouteOptions | WSRouteOptions;
handler: UserRouteHandler;
}
// Defines the type for internal middleware records
export interface MiddlewareRecord {
pattern: string;
middleware: MiddlewareHandler;
}
type UsableSpreadableArguments = (string | Router | MiddlewareHandler | MiddlewareHandler[])[];
type RouteSpreadableArguments = (
| string
| UserRouteOptions
// | UserRouteHandler - Temporarily disabled because Typescript cannot do "UserRouteHandler | MiddlewareHandler" due to the next parameter confusing it
| MiddlewareHandler
| MiddlewareHandler[]
)[];
export class Router {
constructor();
/**
* Returns a chainable Router instance which can be used to bind multiple method routes or middlewares on the same path easily.
* Example: `Router.route('/api/v1').get(getHandler).post(postHandler).delete(destroyHandler)`
* Example: `Router.route('/api/v1').use(middleware).user(middleware2)`
* @param {String} pattern
* @returns {Router} A chainable Router instance with a context pattern set to this router's pattern.
*/
route(pattern: string): this;
/**
* Registers middlewares and router instances on the specified pattern if specified.
* If no pattern is specified, the middleware/router instance will be mounted on the '/' root path by default of this instance.
*
* @param {...(String|MiddlewareHandler|Router)} args (request, response, next) => {} OR (request, response) => new Promise((resolve, reject) => {})
*/
use(...args: UsableSpreadableArguments): this;
/**
* Creates an HTTP route that handles any HTTP method requests.
* Note! ANY routes do not support route specific middlewares.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
any(...args: RouteSpreadableArguments): this;
/**
* Alias of any() method.
* Creates an HTTP route that handles any HTTP method requests.
* Note! ANY routes do not support route specific middlewares.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
all(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles GET method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
get(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles POST method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
post(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles PUT method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
put(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles DELETE method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
delete(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles HEAD method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
head(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles OPTIONS method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
options(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles PATCH method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
patch(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles TRACE method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
trace(...args: RouteSpreadableArguments): this;
/**
* Creates an HTTP route that handles CONNECT method requests.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
connect(...args: RouteSpreadableArguments): this;
/**
* Intercepts and handles upgrade requests for incoming websocket connections.
* Note! You must call response.upgrade(data) at some point in this route to open a websocket connection.
*
* @param {String} pattern
* @param {...(RouteOptions|MiddlewareHandler)} args
*/
upgrade(...args: RouteSpreadableArguments): this;
/**
* @param {String} pattern
* @param {WSRouteOptions|WSRouteHandler} options
* @param {WSRouteHandler} handler
*/
ws<TUserData = unknown>(pattern: string, handler: WSRouteHandler<TUserData>): this;
ws<TUserData = unknown>(pattern: string, options: WSRouteOptions, handler: WSRouteHandler<TUserData>): this;
/**
* Returns All routes in this router in the order they were registered.
* @returns {Array}
*/
get routes(): Array<RouteRecord>;
/**
* Returns all middlewares in this router in the order they were registered.
* @returns {Array}
*/
get middlewares(): Array<MiddlewareRecord>;
}