UNPKG

rjweb-server

Version:

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

190 lines (189 loc) 4.43 kB
import { WsConnect, WsMessage, WsClose, HttpRequest } from "../types/external"; const currentVersion = 3; class Dummy { } class MiddlewareLoader { constructor(data, context) { this.data = data; this.context = context; } /** * Configure the Middleware * @since 7.0.0 * @from rjweb-server */ config(config) { return { data: this.data, config, version: currentVersion, localContext: this.context }; } } class MiddlewareBuilder { constructor() { this.data = { classModifications: { httpRequest: class extends HttpRequest { }, wsConnect: class extends WsConnect { }, wsMessage: class extends WsMessage { }, wsClose: class extends WsClose { } } }; this.dataContext = {}; this.version = currentVersion; } /** * Set the default Context State * @since 7.0.0 */ context(context) { this.dataContext = context; return 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(callback) { this.data.classModifications.http = callback(HttpRequest, this.dataContext); const builder = new MiddlewareBuilder(); builder.data = this.data; builder.dataContext = this.dataContext; builder.version = this.version; return builder; } /** * 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(callback) { this.data.classModifications.wsConnect = callback(WsConnect, this.dataContext); const builder = new MiddlewareBuilder(); builder.data = this.data; builder.dataContext = this.dataContext; builder.version = this.version; return builder; } /** * 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(callback) { this.data.classModifications.wsMessage = callback(WsMessage, this.dataContext); const builder = new MiddlewareBuilder(); builder.data = this.data; builder.dataContext = this.dataContext; builder.version = this.version; return builder; } /** * 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(callback) { this.data.classModifications.wsClose = callback(WsClose, this.dataContext); const builder = new MiddlewareBuilder(); builder.data = this.data; builder.dataContext = this.dataContext; builder.version = this.version; return builder; } /** * Add a Callback for when the Middleware gets loaded * @since 5.7.0 */ init(callback) { this.data.initEvent = callback; return this; } /** * Add a Callback for HTTP Requests * @since 5.7.0 */ http(callback) { this.data.httpEvent = callback; return this; } /** * Add a Callback for WebSocket Connections * @since 5.7.0 */ wsConnect(callback) { this.data.wsConnectEvent = callback; return this; } /** * Add a Callback for WebSocket Messages * @since 5.7.0 */ wsMessage(callback) { this.data.wsMessageEvent = callback; return this; } /** * Add a Callback for Closing WebSockets * @since 5.7.0 */ wsClose(callback) { this.data.wsCloseEvent = callback; return this; } /** * Get the Production Version of this Class (required to load) * @since 5.7.0 */ build() { return new MiddlewareLoader(this.data, this.dataContext); } } export { MiddlewareLoader, currentVersion, MiddlewareBuilder as default };