UNPKG

rjweb-server

Version:

Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS

142 lines (141 loc) 7.24 kB
import { WsConnect, WsMessage, WsClose, HttpRequest } from "../types/external"; import { LocalContext, GlobalContext } from "../types/context"; import { RealAny, EndFn, AnyClass } from "../types/internal"; export declare const currentVersion = 3; export interface MiddlewareData<Config extends Record<any, any>, Context extends Record<any, any>, HTTPContext extends AnyClass, WSConnectContext extends AnyClass, WSMessageContext extends AnyClass, WSCloseContext extends AnyClass> { /** The Code to run when the Middleware gets loaded */ initEvent?(localContext: Context, config: Config, ctg: GlobalContext): RealAny; /** The Code to run when an HTTP Request Triggers */ httpEvent?(localContext: Context, end: EndFn, ctr: HttpRequest, ctx: LocalContext, ctg: GlobalContext): RealAny; /** The Code to run when a WebSocket Connects */ wsConnectEvent?(localContext: Context, end: EndFn, ctr: WsConnect, ctx: LocalContext, ctg: GlobalContext): RealAny; /** The Code to run when a WebSocket Recieves a Message */ wsMessageEvent?(localContext: Context, end: EndFn, ctr: WsMessage, ctx: LocalContext, ctg: GlobalContext): RealAny; /** The Code to run when a WebSocket Closes */ wsCloseEvent?(localContext: Context, end: EndFn, ctr: WsClose, ctx: LocalContext, ctg: GlobalContext): RealAny; /** Class Modifications */ classModifications: { http: HTTPContext; wsConnect: WSConnectContext; wsMessage: WSMessageContext; wsClose: WSCloseContext; }; } declare class Dummy { } export declare class MiddlewareLoader<Config extends Record<any, any>, Context extends Record<any, any>, HTTPContext extends AnyClass, WSConnectContext extends AnyClass, WSMessageContext extends AnyClass, WSCloseContext extends AnyClass> { protected context: Context; protected data: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>; constructor(data: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>, context: Context); /** * Configure the Middleware * @since 7.0.0 * @from rjweb-server */ config(config: Config): { /** The Internal Data of the Middleware */ data: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>; /** The Provided Config to the Middleware */ config: Config; /** The Version of the Middleware Builder */ version: number; /** The Internal Context of the Middleware */ localContext: Context; }; } /** * A Utility used for constructing middlewares * @example * ``` * const middleware = new MiddlewareBuilder(...).build() * ``` * @since 7.0.0 */ export default class MiddlewareBuilder<Config extends Record<any, any> = {}, Context extends Record<any, any> = {}, HTTPContext extends AnyClass = typeof Dummy, WSConnectContext extends AnyClass = typeof Dummy, WSMessageContext extends AnyClass = typeof Dummy, WSCloseContext extends AnyClass = typeof Dummy> { private data; private dataContext; protected version: number; /** * Set the default Context State * @since 7.0.0 */ context( /** The Initial Context */ context: Context): this; /** * Set the extended Class for the HTTP Context * @example * ``` * const middleware = new MiddlewareBuilder() * .httpClass((Expand) => class extends Expand { * printHi() { * this.print('Hi') * } * }) * .build() * ``` * @since 7.0.0 */ httpClass<Class extends AnyClass>( /** The Callback to the Class extending the HTTP Class */ callback: (extend: typeof HttpRequest, localContext: Context) => Class): MiddlewareBuilder<Config, Context, Class, WSConnectContext, WSMessageContext, WSCloseContext>; /** * Set the extended Class for the WebSocket Connect Context * @example * ``` * const middleware = new MiddlewareBuilder() * .wsConnectClass((Expand) => class extends Expand { * printHi() { * this.print('Hi') * } * }) * .build() * ``` * @since 7.0.0 */ wsConnectClass<Class extends AnyClass>( /** The Callback to the Class extending the HTTP Class */ callback: (extend: typeof WsConnect, localContext: Context) => Class): MiddlewareBuilder<Config, Context, HTTPContext, Class, WSMessageContext, WSCloseContext>; /** * Set the extended Class for the WebSocket Message Context * @example * ``` * const middleware = new MiddlewareBuilder() * .wsMessageClass((Expand) => class extends Expand { * printHi() { * this.print('Hi') * } * }) * .build() * ``` * @since 7.0.0 */ wsMessageClass<Class extends AnyClass>( /** The Callback to the Class extending the HTTP Class */ callback: (extend: typeof WsMessage, localContext: Context) => Class): MiddlewareBuilder<Config, Context, HTTPContext, WSConnectContext, Class, WSCloseContext>; /** * Set the extended Class for the WebSocket Close Context * @example * ``` * const middleware = new MiddlewareBuilder() * .wsCloseClass((Expand) => class extends Expand { * logBye() { * console.log('Bye,', this.client.ip) * } * }) * .build() * ``` * @since 7.0.0 */ wsCloseClass<Class extends AnyClass>( /** The Callback to the Class extending the HTTP Class */ callback: (extend: typeof WsClose, localContext: Context) => Class): MiddlewareBuilder<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, Class>; /** * Add a Callback for when the Middleware gets loaded * @since 5.7.0 */ init( /** The Function to Call on a HTTP Request */ callback: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>['initEvent']): this; /** * Add a Callback for HTTP Requests * @since 5.7.0 */ http( /** The Function to Call on a HTTP Request */ callback: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>['httpEvent']): this; /** * Add a Callback for WebSocket Connections * @since 5.7.0 */ wsConnect( /** The Function to Call on a WebSocket Connection */ callback: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>['wsConnectEvent']): this; /** * Add a Callback for WebSocket Messages * @since 5.7.0 */ wsMessage( /** The Function to Call on a WebSocket Message */ callback: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>['wsMessageEvent']): this; /** * Add a Callback for Closing WebSockets * @since 5.7.0 */ wsClose( /** The Function to Call on a Closed WebSocket */ callback: MiddlewareData<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>['wsCloseEvent']): this; /** * Get the Production Version of this Class (required to load) * @since 5.7.0 */ build(): MiddlewareLoader<Config, Context, HTTPContext, WSConnectContext, WSMessageContext, WSCloseContext>; } export {};