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
JavaScript
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
};