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
TypeScript
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 {};