vortez 4.1.3 → 5.0.0-dev.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +0 -0
- package/LICENSE +0 -0
- package/README.md +235 -289
- package/build/Template.d.ts +16 -2
- package/build/Template.js +20 -8
- package/build/Template.js.map +1 -1
- package/build/Vortez.d.ts +8 -15
- package/build/Vortez.js +8 -16
- package/build/Vortez.js.map +1 -1
- package/build/beta/Beta.d.ts +8 -0
- package/build/beta/Beta.js +9 -0
- package/build/beta/Beta.js.map +1 -0
- package/build/{Beta → beta}/JwtManager.d.ts +0 -0
- package/build/{Beta → beta}/JwtManager.js +1 -1
- package/build/{Beta → beta}/JwtManager.js.map +1 -1
- package/build/{Beta → beta}/Mail.d.ts +1 -1
- package/build/{Beta → beta}/Mail.js +1 -1
- package/build/beta/Mail.js.map +1 -0
- package/build/logger/Debug.d.ts +174 -0
- package/build/logger/Debug.js +295 -0
- package/build/logger/Debug.js.map +1 -0
- package/build/logger/Logger.d.ts +38 -0
- package/build/logger/Logger.js +48 -0
- package/build/logger/Logger.js.map +1 -0
- package/build/{Server → server}/BodyParser.d.ts +0 -0
- package/build/{Server → server}/BodyParser.js +0 -0
- package/build/{Server → server}/BodyParser.js.map +1 -1
- package/build/{Server → server}/Cookie.d.ts +0 -0
- package/build/{Server → server}/Cookie.js +0 -0
- package/build/{Server → server}/Cookie.js.map +1 -1
- package/build/server/LoggerManager.d.ts +21 -0
- package/build/server/LoggerManager.js +30 -0
- package/build/server/LoggerManager.js.map +1 -0
- package/build/{Server → server}/Request.d.ts +4 -2
- package/build/{Server → server}/Request.js +2 -1
- package/build/server/Request.js.map +1 -0
- package/build/{Server → server}/Response.d.ts +4 -1
- package/build/{Server → server}/Response.js +24 -8
- package/build/server/Response.js.map +1 -0
- package/build/{Server → server}/Server.d.ts +20 -67
- package/build/server/Server.js +211 -0
- package/build/server/Server.js.map +1 -0
- package/build/server/ServerDebug.d.ts +17 -0
- package/build/server/ServerDebug.js +67 -0
- package/build/server/ServerDebug.js.map +1 -0
- package/build/server/ServerError.d.ts +18 -0
- package/build/server/ServerError.js +15 -0
- package/build/server/ServerError.js.map +1 -0
- package/build/{Server → server}/Session.d.ts +9 -13
- package/build/{Server → server}/Session.js +34 -35
- package/build/server/Session.js.map +1 -0
- package/build/{Config.d.ts → server/config/Config.d.ts} +19 -3
- package/build/server/config/Config.js +60 -0
- package/build/server/config/Config.js.map +1 -0
- package/build/server/config/ConfigLoader.d.ts +24 -0
- package/build/server/config/ConfigLoader.js +53 -0
- package/build/server/config/ConfigLoader.js.map +1 -0
- package/build/server/config/ConfigValidator.d.ts +71 -0
- package/build/server/config/ConfigValidator.js +131 -0
- package/build/server/config/ConfigValidator.js.map +1 -0
- package/build/server/router/HttpRule.d.ts +69 -0
- package/build/server/router/HttpRule.js +96 -0
- package/build/server/router/HttpRule.js.map +1 -0
- package/build/server/router/Router.d.ts +127 -0
- package/build/server/router/Router.js +211 -0
- package/build/server/router/Router.js.map +1 -0
- package/build/server/router/Rule.d.ts +71 -0
- package/build/server/router/Rule.js +113 -0
- package/build/server/router/Rule.js.map +1 -0
- package/build/server/router/WsRule.d.ts +25 -0
- package/build/server/router/WsRule.js +34 -0
- package/build/server/router/WsRule.js.map +1 -0
- package/build/server/router/middleware/HttpMiddleware.d.ts +35 -0
- package/build/server/router/middleware/HttpMiddleware.js +90 -0
- package/build/server/router/middleware/HttpMiddleware.js.map +1 -0
- package/build/server/router/middleware/Middleware.d.ts +77 -0
- package/build/server/router/middleware/Middleware.js +69 -0
- package/build/server/router/middleware/Middleware.js.map +1 -0
- package/build/server/router/middleware/WsMiddleware.d.ts +24 -0
- package/build/server/router/middleware/WsMiddleware.js +90 -0
- package/build/server/router/middleware/WsMiddleware.js.map +1 -0
- package/build/{Server/WebSocket → server/websocket}/Chunk.d.ts +0 -0
- package/build/{Server/WebSocket → server/websocket}/Chunk.js +0 -0
- package/build/{Server/WebSocket → server/websocket}/Chunk.js.map +1 -1
- package/build/server/websocket/Websocket.d.ts +88 -0
- package/build/{Server/WebSocket/WebSocket.js → server/websocket/Websocket.js} +91 -53
- package/build/server/websocket/Websocket.js.map +1 -0
- package/build/utilities/ConsoleUI.d.ts +88 -0
- package/build/utilities/ConsoleUI.js +141 -0
- package/build/utilities/ConsoleUI.js.map +1 -0
- package/build/utilities/DebugUI.d.ts +66 -0
- package/build/utilities/DebugUI.js +98 -0
- package/build/utilities/DebugUI.js.map +1 -0
- package/build/utilities/Env.d.ts +81 -0
- package/build/{Utilities → utilities}/Env.js +47 -35
- package/build/utilities/Env.js.map +1 -0
- package/build/utilities/Path.d.ts +24 -0
- package/build/utilities/Path.js +36 -0
- package/build/{Utilities → utilities}/Path.js.map +1 -1
- package/build/{Utilities → utilities}/Utilities.d.ts +68 -55
- package/build/{Utilities → utilities}/Utilities.js +36 -19
- package/build/utilities/Utilities.js.map +1 -0
- package/changes.md +122 -88
- package/examples/in-docs.js +0 -0
- package/global/Source/Logo_960.png +0 -0
- package/global/Source/Logo_SM_960.png +0 -0
- package/global/Style/Template/Error.css +0 -0
- package/global/Style/Template/Folder.css +0 -0
- package/global/Style/Template/Template.css +0 -0
- package/global/Template/Error.vhtml +0 -0
- package/global/Template/Folder.vhtml +0 -0
- package/package.json +10 -13
- package/tests/Template/template.js +0 -0
- package/tests/Template/template.txt +0 -0
- package/tests/Template/template.vhtml +0 -0
- package/tests/debug.js +9 -3
- package/tests/jwtManager/jwtManager.js +0 -0
- package/tests/test.env +0 -0
- package/tests/test.js +50 -48
- package/tests/test.vhtml +0 -0
- package/tests/utilities.js +1 -1
- package/tests/websocket.vhtml +0 -0
- package/Notes.md +0 -12
- package/build/Beta/Mail.js.map +0 -1
- package/build/Config.js +0 -33
- package/build/Config.js.map +0 -1
- package/build/ConsoleUI.d.ts +0 -57
- package/build/ConsoleUI.js +0 -110
- package/build/ConsoleUI.js.map +0 -1
- package/build/Debug.d.ts +0 -154
- package/build/Debug.js +0 -256
- package/build/Debug.js.map +0 -1
- package/build/LoggerManager/Logger.d.ts +0 -23
- package/build/LoggerManager/Logger.js +0 -23
- package/build/LoggerManager/Logger.js.map +0 -1
- package/build/LoggerManager/LoggerManager.d.ts +0 -18
- package/build/LoggerManager/LoggerManager.js +0 -30
- package/build/LoggerManager/LoggerManager.js.map +0 -1
- package/build/Server/Request.js.map +0 -1
- package/build/Server/Response.js.map +0 -1
- package/build/Server/Rule.d.ts +0 -81
- package/build/Server/Rule.js +0 -146
- package/build/Server/Rule.js.map +0 -1
- package/build/Server/Server.js +0 -330
- package/build/Server/Server.js.map +0 -1
- package/build/Server/Session.js.map +0 -1
- package/build/Server/WebSocket/WebSocket.d.ts +0 -70
- package/build/Server/WebSocket/WebSocket.js.map +0 -1
- package/build/Utilities/Env.d.ts +0 -75
- package/build/Utilities/Env.js.map +0 -1
- package/build/Utilities/Path.d.ts +0 -18
- package/build/Utilities/Path.js +0 -27
- package/build/Utilities/Utilities.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpRule.js","sourceRoot":"","sources":["../../../src/server/router/HttpRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <codefeez.dev@gmail.com>
|
|
3
|
+
* @description Manages the routing of the requests and WebSocket connections.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import HTTP from 'http';
|
|
7
|
+
import { Duplex } from 'stream';
|
|
8
|
+
import _Rule from './Rule.js';
|
|
9
|
+
import _WsRule from './WsRule.js';
|
|
10
|
+
import _HttpRule from './HttpRule.js';
|
|
11
|
+
import _WsMiddleware from './middleware/WsMiddleware.js';
|
|
12
|
+
import _HttpMiddleware from './middleware/HttpMiddleware.js';
|
|
13
|
+
import _Middleware from './middleware/Middleware.js';
|
|
14
|
+
import Request from '../Request.js';
|
|
15
|
+
import Response from '../Response.js';
|
|
16
|
+
import Websocket from '../websocket/Websocket.js';
|
|
17
|
+
import Config from '../config/Config.js';
|
|
18
|
+
export { Rule } from './Rule.js';
|
|
19
|
+
export { WsRule } from './WsRule.js';
|
|
20
|
+
export { HttpRule } from './HttpRule.js';
|
|
21
|
+
export declare class Router {
|
|
22
|
+
config: Config;
|
|
23
|
+
httpRules: Router.HttpRule[];
|
|
24
|
+
wsRules: Router.WsRule[];
|
|
25
|
+
readonly httpMiddleware: Router.HttpMiddleware;
|
|
26
|
+
readonly wsMiddleware: Router.WsMiddleware;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a router for rule management.
|
|
29
|
+
* @param config - The server configuration.
|
|
30
|
+
*/
|
|
31
|
+
constructor(config?: Config, rules?: Router.rules[], middlewares?: Router.MiddlewareOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Adds middleware actions to the router.
|
|
34
|
+
* @param middleware - The middleware to be added.
|
|
35
|
+
*/
|
|
36
|
+
use(middleware: Router.HttpMiddleware | Router.WsMiddleware): this;
|
|
37
|
+
/**
|
|
38
|
+
* Adds middleware error actions to the router.
|
|
39
|
+
* @param middleware - The middleware to be added.
|
|
40
|
+
*/
|
|
41
|
+
useError(middleware: Router.HttpMiddleware | Router.WsMiddleware): this;
|
|
42
|
+
/**
|
|
43
|
+
* Triggered when the server receives an HTTP request.
|
|
44
|
+
* @param HttpRequest - The incoming HTTP request.
|
|
45
|
+
* @param HttpResponse - The server response stream.
|
|
46
|
+
*/
|
|
47
|
+
requestManager(HttpRequest: HTTP.IncomingMessage, HttpResponse: HTTP.ServerResponse): void;
|
|
48
|
+
/**
|
|
49
|
+
* Will be executed when the server receives an upgrade request.
|
|
50
|
+
* @param HttpRequest The request received by the server.
|
|
51
|
+
* @param Socket The socket to respond with (WebSocket upgrade).
|
|
52
|
+
*/
|
|
53
|
+
upgradeManager(HttpRequest: HTTP.IncomingMessage, Socket: Duplex): void;
|
|
54
|
+
/**
|
|
55
|
+
* Routes incoming HTTP requests to be processed.
|
|
56
|
+
* @param request - The received HTTP request.
|
|
57
|
+
* @param response - The server response handler.
|
|
58
|
+
*/
|
|
59
|
+
routeRequest(request: Request, response: Response): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Routes WebSocket connection requests.
|
|
62
|
+
* @param request - The received HTTP request.
|
|
63
|
+
* @param webSocket - The WebSocket connection with the client.
|
|
64
|
+
*/
|
|
65
|
+
routeWebSocket(request: Request, webSocket: Websocket): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Adds one or more routing rules to the server.
|
|
68
|
+
* @param rules - The rule(s) to be added.
|
|
69
|
+
*/
|
|
70
|
+
addRules(...rules: Router.rules[]): this;
|
|
71
|
+
/**
|
|
72
|
+
* Adds one or more routing rules to the server.
|
|
73
|
+
* @param rule - The rule(s) to be added.
|
|
74
|
+
*/
|
|
75
|
+
addRule(rule: Router.rules): this;
|
|
76
|
+
/**
|
|
77
|
+
* Mount a router in this router
|
|
78
|
+
* this action merge the rules adding the provided url rule as a prefix to all rules.
|
|
79
|
+
* @param router - The router to mount.
|
|
80
|
+
* @param urlRule - The url rule to mount the router.
|
|
81
|
+
*/
|
|
82
|
+
mount(router: Router, urlRule?: string): this;
|
|
83
|
+
/**
|
|
84
|
+
* Adds an action routing rule.
|
|
85
|
+
* @param method - The HTTP method to respond to.
|
|
86
|
+
* @param urlRule - The URL path for the action.
|
|
87
|
+
* @param action - The action to be executed.
|
|
88
|
+
*/
|
|
89
|
+
addAction(method: Request.Method, urlRule: string, action: Router.HttpRule.action): Router.HttpRule;
|
|
90
|
+
/**
|
|
91
|
+
* Adds a file routing rule.
|
|
92
|
+
* @param urlRule - The URL path to listen on.
|
|
93
|
+
* @param source - The path to the file to be served.
|
|
94
|
+
*/
|
|
95
|
+
addFile(urlRule: string, source: string): Router.HttpRule;
|
|
96
|
+
/**
|
|
97
|
+
* Adds a folder routing rule.
|
|
98
|
+
* @param urlRule - The URL path to listen on.
|
|
99
|
+
* @param source - The directory path to be served.
|
|
100
|
+
*/
|
|
101
|
+
addFolder(urlRule: string, source: string): Router;
|
|
102
|
+
/**
|
|
103
|
+
* Adds a WebSocket routing rule.
|
|
104
|
+
* @param urlRule - The URL path to listen on.
|
|
105
|
+
* @param action - The action to be executed on connection.
|
|
106
|
+
*/
|
|
107
|
+
addWebSocket(urlRule: string, action: Router.WsRule.action): Router.WsRule;
|
|
108
|
+
/**
|
|
109
|
+
* Creates a new router.
|
|
110
|
+
* @returns A new router.
|
|
111
|
+
*/
|
|
112
|
+
createRouter(): Router;
|
|
113
|
+
}
|
|
114
|
+
export declare namespace Router {
|
|
115
|
+
export import Rule = _Rule;
|
|
116
|
+
export import WsRule = _WsRule;
|
|
117
|
+
export import HttpRule = _HttpRule;
|
|
118
|
+
export import WsMiddleware = _WsMiddleware;
|
|
119
|
+
export import HttpMiddleware = _HttpMiddleware;
|
|
120
|
+
export import Middleware = _Middleware;
|
|
121
|
+
interface MiddlewareOptions {
|
|
122
|
+
http?: HttpMiddleware;
|
|
123
|
+
ws?: WsMiddleware;
|
|
124
|
+
}
|
|
125
|
+
type rules = WsRule | HttpRule;
|
|
126
|
+
}
|
|
127
|
+
export default Router;
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <codefeez.dev@gmail.com>
|
|
3
|
+
* @description Manages the routing of the requests and WebSocket connections.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import _Rule from './Rule.js';
|
|
7
|
+
import _WsRule from './WsRule.js';
|
|
8
|
+
import _HttpRule from './HttpRule.js';
|
|
9
|
+
import _WsMiddleware from './middleware/WsMiddleware.js';
|
|
10
|
+
import _HttpMiddleware from './middleware/HttpMiddleware.js';
|
|
11
|
+
import _Middleware from './middleware/Middleware.js';
|
|
12
|
+
import Request from '../Request.js';
|
|
13
|
+
import Response from '../Response.js';
|
|
14
|
+
import Websocket from '../websocket/Websocket.js';
|
|
15
|
+
import LoggerManager from '../LoggerManager.js';
|
|
16
|
+
import Config from '../config/Config.js';
|
|
17
|
+
export { Rule } from './Rule.js';
|
|
18
|
+
export { WsRule } from './WsRule.js';
|
|
19
|
+
export { HttpRule } from './HttpRule.js';
|
|
20
|
+
const logger = LoggerManager.getInstance();
|
|
21
|
+
export class Router {
|
|
22
|
+
config;
|
|
23
|
+
httpRules = [];
|
|
24
|
+
wsRules = [];
|
|
25
|
+
httpMiddleware;
|
|
26
|
+
wsMiddleware;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a router for rule management.
|
|
29
|
+
* @param config - The server configuration.
|
|
30
|
+
*/
|
|
31
|
+
constructor(config = new Config(), rules = [], middlewares = {}) {
|
|
32
|
+
this.config = config;
|
|
33
|
+
const { http: httpMiddleware = new Router.HttpMiddleware(), ws: wsMiddleware = new Router.WsMiddleware() } = middlewares;
|
|
34
|
+
this.httpMiddleware = httpMiddleware;
|
|
35
|
+
this.wsMiddleware = wsMiddleware;
|
|
36
|
+
this.addRules(...rules);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Adds middleware actions to the router.
|
|
40
|
+
* @param middleware - The middleware to be added.
|
|
41
|
+
*/
|
|
42
|
+
use(middleware) {
|
|
43
|
+
if (middleware instanceof Router.HttpMiddleware)
|
|
44
|
+
this.httpMiddleware.use(middleware);
|
|
45
|
+
else
|
|
46
|
+
this.wsMiddleware.use(middleware);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Adds middleware error actions to the router.
|
|
51
|
+
* @param middleware - The middleware to be added.
|
|
52
|
+
*/
|
|
53
|
+
useError(middleware) {
|
|
54
|
+
if (middleware instanceof Router.HttpMiddleware)
|
|
55
|
+
this.httpMiddleware.useError(middleware);
|
|
56
|
+
else
|
|
57
|
+
this.wsMiddleware.useError(middleware);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Triggered when the server receives an HTTP request.
|
|
62
|
+
* @param HttpRequest - The incoming HTTP request.
|
|
63
|
+
* @param HttpResponse - The server response stream.
|
|
64
|
+
*/
|
|
65
|
+
requestManager(HttpRequest, HttpResponse) {
|
|
66
|
+
const request = new Request(HttpRequest);
|
|
67
|
+
const response = new Response(request, HttpResponse, this.config.templates);
|
|
68
|
+
const sessionID = request.cookies.get('Session');
|
|
69
|
+
logger.request.log(request.ip, request.method, request.url, sessionID);
|
|
70
|
+
const isRouted = this.routeRequest(request, response);
|
|
71
|
+
if (!isRouted)
|
|
72
|
+
response.sendError(400, `No router for: ${request.method} -> ${request.url}`);
|
|
73
|
+
}
|
|
74
|
+
;
|
|
75
|
+
/**
|
|
76
|
+
* Will be executed when the server receives an upgrade request.
|
|
77
|
+
* @param HttpRequest The request received by the server.
|
|
78
|
+
* @param Socket The socket to respond with (WebSocket upgrade).
|
|
79
|
+
*/
|
|
80
|
+
upgradeManager(HttpRequest, Socket) {
|
|
81
|
+
const request = new Request(HttpRequest);
|
|
82
|
+
const webSocket = new Websocket(request, Socket);
|
|
83
|
+
const sessionID = request.cookies.get('Session');
|
|
84
|
+
logger.webSocket.log(request.ip, request.method, request.url, sessionID);
|
|
85
|
+
const isRouted = this.routeWebSocket(request, webSocket);
|
|
86
|
+
if (!isRouted)
|
|
87
|
+
webSocket.reject(400, `No router for: ${request.method} -> ${request.url}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Routes incoming HTTP requests to be processed.
|
|
91
|
+
* @param request - The received HTTP request.
|
|
92
|
+
* @param response - The server response handler.
|
|
93
|
+
*/
|
|
94
|
+
async routeRequest(request, response) {
|
|
95
|
+
const rule = this.httpRules.find((rule) => rule.test(request));
|
|
96
|
+
if (!rule)
|
|
97
|
+
return false;
|
|
98
|
+
rule.exec(request, response);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Routes WebSocket connection requests.
|
|
103
|
+
* @param request - The received HTTP request.
|
|
104
|
+
* @param webSocket - The WebSocket connection with the client.
|
|
105
|
+
*/
|
|
106
|
+
async routeWebSocket(request, webSocket) {
|
|
107
|
+
const rule = this.wsRules.find((rule) => rule.test(request));
|
|
108
|
+
if (!rule)
|
|
109
|
+
return false;
|
|
110
|
+
rule.exec(request, webSocket);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Adds one or more routing rules to the server.
|
|
115
|
+
* @param rules - The rule(s) to be added.
|
|
116
|
+
*/
|
|
117
|
+
addRules(...rules) {
|
|
118
|
+
for (const rule of rules)
|
|
119
|
+
this.addRule(rule);
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Adds one or more routing rules to the server.
|
|
124
|
+
* @param rule - The rule(s) to be added.
|
|
125
|
+
*/
|
|
126
|
+
addRule(rule) {
|
|
127
|
+
if (rule instanceof Router.WsRule) {
|
|
128
|
+
rule.middleware.mergeAtStart(this.wsMiddleware);
|
|
129
|
+
this.wsRules.push(rule);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
rule.middleware.mergeAtStart(this.httpMiddleware);
|
|
133
|
+
this.httpRules.push(rule);
|
|
134
|
+
}
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Mount a router in this router
|
|
139
|
+
* this action merge the rules adding the provided url rule as a prefix to all rules.
|
|
140
|
+
* @param router - The router to mount.
|
|
141
|
+
* @param urlRule - The url rule to mount the router.
|
|
142
|
+
*/
|
|
143
|
+
mount(router, urlRule) {
|
|
144
|
+
const httpRules = router.httpRules.map((rule) => {
|
|
145
|
+
const newUrlRule = urlRule ? `${urlRule}/${rule.urlRule}` : rule.urlRule;
|
|
146
|
+
return new Router.HttpRule(rule.method, newUrlRule, rule.action, rule.middleware.clone());
|
|
147
|
+
});
|
|
148
|
+
const wsRules = router.wsRules.map((rule) => {
|
|
149
|
+
const newUrlRule = urlRule ? `${urlRule}/${rule.urlRule}` : rule.urlRule;
|
|
150
|
+
return new Router.WsRule(newUrlRule, rule.action, rule.middleware.clone());
|
|
151
|
+
});
|
|
152
|
+
this.addRules(...httpRules, ...wsRules);
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Adds an action routing rule.
|
|
157
|
+
* @param method - The HTTP method to respond to.
|
|
158
|
+
* @param urlRule - The URL path for the action.
|
|
159
|
+
* @param action - The action to be executed.
|
|
160
|
+
*/
|
|
161
|
+
addAction(method, urlRule, action) {
|
|
162
|
+
const rule = new Router.HttpRule(method, urlRule, action);
|
|
163
|
+
this.addRule(rule);
|
|
164
|
+
return rule;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Adds a file routing rule.
|
|
168
|
+
* @param urlRule - The URL path to listen on.
|
|
169
|
+
* @param source - The path to the file to be served.
|
|
170
|
+
*/
|
|
171
|
+
addFile(urlRule, source) {
|
|
172
|
+
const rule = Router.HttpRule.file(urlRule, source);
|
|
173
|
+
this.addRule(rule);
|
|
174
|
+
return rule;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Adds a folder routing rule.
|
|
178
|
+
* @param urlRule - The URL path to listen on.
|
|
179
|
+
* @param source - The directory path to be served.
|
|
180
|
+
*/
|
|
181
|
+
addFolder(urlRule, source) {
|
|
182
|
+
const rule = Router.HttpRule.folder(urlRule, source);
|
|
183
|
+
this.addRule(rule);
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Adds a WebSocket routing rule.
|
|
188
|
+
* @param urlRule - The URL path to listen on.
|
|
189
|
+
* @param action - The action to be executed on connection.
|
|
190
|
+
*/
|
|
191
|
+
addWebSocket(urlRule, action) {
|
|
192
|
+
const rule = new Router.WsRule(urlRule, action);
|
|
193
|
+
this.addRules(rule);
|
|
194
|
+
return rule;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Creates a new router.
|
|
198
|
+
* @returns A new router.
|
|
199
|
+
*/
|
|
200
|
+
createRouter() { return new Router(this.config); }
|
|
201
|
+
}
|
|
202
|
+
(function (Router) {
|
|
203
|
+
Router.Rule = _Rule;
|
|
204
|
+
Router.WsRule = _WsRule;
|
|
205
|
+
Router.HttpRule = _HttpRule;
|
|
206
|
+
Router.WsMiddleware = _WsMiddleware;
|
|
207
|
+
Router.HttpMiddleware = _HttpMiddleware;
|
|
208
|
+
Router.Middleware = _Middleware;
|
|
209
|
+
})(Router || (Router = {}));
|
|
210
|
+
export default Router;
|
|
211
|
+
//# sourceMappingURL=Router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../src/server/router/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <codefeez.dev@gmail.com>
|
|
3
|
+
* @description Contains routing rule logic for Vortez.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import Request from '../Request.js';
|
|
7
|
+
import Response from '../Response.js';
|
|
8
|
+
import Websocket from '../websocket/Websocket.js';
|
|
9
|
+
export declare abstract class Rule<T extends any> {
|
|
10
|
+
/** The UrlRule with which the routing rule was created */
|
|
11
|
+
private _urlRule;
|
|
12
|
+
/** The regular expression for the routing rule */
|
|
13
|
+
private _expression;
|
|
14
|
+
/** The executable content for the routing rule */
|
|
15
|
+
readonly action: T;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a routing rule for Vortez.
|
|
18
|
+
* @param urlRule - The URL rule adopted by this Rule instance.
|
|
19
|
+
* @param action - The executable content of the rule.
|
|
20
|
+
*/
|
|
21
|
+
constructor(urlRule: string, action: T);
|
|
22
|
+
get urlRule(): string;
|
|
23
|
+
set urlRule(urlRule: string);
|
|
24
|
+
get expression(): RegExp;
|
|
25
|
+
/**
|
|
26
|
+
* Executes the rule's content.
|
|
27
|
+
* @param request - The Request that matched the rule.
|
|
28
|
+
* @param client - The client that made the request.
|
|
29
|
+
*/
|
|
30
|
+
abstract exec(request: Request, client: Rule.ClientType): void | Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Checks whether a URL matches this route.
|
|
33
|
+
* Also sets the Request.ruleParams.
|
|
34
|
+
* @param request - The incoming request.
|
|
35
|
+
*/
|
|
36
|
+
test(request: Request): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves the ruleParams from the routing rule if available.
|
|
39
|
+
* @param path - The URL to resolve.
|
|
40
|
+
*/
|
|
41
|
+
getParams(path: string): Rule.ruleParams;
|
|
42
|
+
/**
|
|
43
|
+
* Extracts the surplus URL using the rule's expression.
|
|
44
|
+
* @param url - The full URL to extract from.
|
|
45
|
+
*/
|
|
46
|
+
getSurplus(url: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a regular expression for route matching.
|
|
49
|
+
* @param urlRule - The UrlRule used to form the RegExp.
|
|
50
|
+
* @throws Invalid URL rule format
|
|
51
|
+
*/
|
|
52
|
+
createExpression(urlRule: string): RegExp;
|
|
53
|
+
/**
|
|
54
|
+
* Cleans the URL rule.
|
|
55
|
+
* @param urlRule - The URL rule to clean.
|
|
56
|
+
*/
|
|
57
|
+
private static cleanUrlRule;
|
|
58
|
+
/**
|
|
59
|
+
* Creates a regular expression for route matching.
|
|
60
|
+
* @param urlRule - The UrlRule used to form the RegExp.
|
|
61
|
+
* @throws Invalid URL rule format
|
|
62
|
+
*/
|
|
63
|
+
private static createExpression;
|
|
64
|
+
}
|
|
65
|
+
export declare namespace Rule {
|
|
66
|
+
type ClientType = Websocket | Response;
|
|
67
|
+
interface ruleParams {
|
|
68
|
+
[name: string]: string | undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export default Rule;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <codefeez.dev@gmail.com>
|
|
3
|
+
* @description Contains routing rule logic for Vortez.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export class Rule {
|
|
7
|
+
/** The UrlRule with which the routing rule was created */
|
|
8
|
+
_urlRule;
|
|
9
|
+
/** The regular expression for the routing rule */
|
|
10
|
+
_expression;
|
|
11
|
+
/** The executable content for the routing rule */
|
|
12
|
+
action;
|
|
13
|
+
/**
|
|
14
|
+
* Creates a routing rule for Vortez.
|
|
15
|
+
* @param urlRule - The URL rule adopted by this Rule instance.
|
|
16
|
+
* @param action - The executable content of the rule.
|
|
17
|
+
*/
|
|
18
|
+
constructor(urlRule, action) {
|
|
19
|
+
urlRule = Rule.cleanUrlRule(urlRule);
|
|
20
|
+
this._urlRule = urlRule;
|
|
21
|
+
this._expression = this.createExpression(urlRule);
|
|
22
|
+
this.action = action;
|
|
23
|
+
}
|
|
24
|
+
get urlRule() { return this._urlRule; }
|
|
25
|
+
set urlRule(urlRule) {
|
|
26
|
+
urlRule = Rule.cleanUrlRule(urlRule);
|
|
27
|
+
this._urlRule = urlRule;
|
|
28
|
+
this._expression = this.createExpression(urlRule);
|
|
29
|
+
}
|
|
30
|
+
get expression() { return this._expression; }
|
|
31
|
+
/**
|
|
32
|
+
* Checks whether a URL matches this route.
|
|
33
|
+
* Also sets the Request.ruleParams.
|
|
34
|
+
* @param request - The incoming request.
|
|
35
|
+
*/
|
|
36
|
+
test(request) { return this._expression.test(request.url); }
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves the ruleParams from the routing rule if available.
|
|
39
|
+
* @param path - The URL to resolve.
|
|
40
|
+
*/
|
|
41
|
+
getParams(path) {
|
|
42
|
+
const math = this._expression.exec(path);
|
|
43
|
+
if (!math)
|
|
44
|
+
return {};
|
|
45
|
+
return { ...math.groups };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extracts the surplus URL using the rule's expression.
|
|
49
|
+
* @param url - The full URL to extract from.
|
|
50
|
+
*/
|
|
51
|
+
getSurplus(url) {
|
|
52
|
+
const { $surplus = '' } = this.getParams(url);
|
|
53
|
+
return $surplus;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Creates a regular expression for route matching.
|
|
57
|
+
* @param urlRule - The UrlRule used to form the RegExp.
|
|
58
|
+
* @throws Invalid URL rule format
|
|
59
|
+
*/
|
|
60
|
+
createExpression(urlRule) {
|
|
61
|
+
return Rule.createExpression(urlRule);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cleans the URL rule.
|
|
65
|
+
* @param urlRule - The URL rule to clean.
|
|
66
|
+
*/
|
|
67
|
+
static cleanUrlRule(urlRule) {
|
|
68
|
+
if (!urlRule.startsWith('/'))
|
|
69
|
+
urlRule = '/' + urlRule;
|
|
70
|
+
if (urlRule.endsWith('/'))
|
|
71
|
+
urlRule = urlRule.slice(0, -1);
|
|
72
|
+
urlRule = urlRule.replace(/\/+/g, '/');
|
|
73
|
+
return urlRule;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Creates a regular expression for route matching.
|
|
77
|
+
* @param urlRule - The UrlRule used to form the RegExp.
|
|
78
|
+
* @throws Invalid URL rule format
|
|
79
|
+
*/
|
|
80
|
+
static createExpression(urlRule) {
|
|
81
|
+
const validators = {
|
|
82
|
+
paramRequired: /^\$(?<param>(?!\$).+)$/,
|
|
83
|
+
paramOptional: /^\$\?(?<param>(?!\$).+)$/,
|
|
84
|
+
escape: /\\(?![\$\[\]\*\+\?\.\(\)\{\}\^\|\-])|(?<!\\)[\$\[\]\*\+\?\.\(\)\{\}\^\|\-]/gi,
|
|
85
|
+
};
|
|
86
|
+
const zones = urlRule.split('/').slice(1);
|
|
87
|
+
let generated = '^';
|
|
88
|
+
for (let index = 0; index < zones.length; index++) {
|
|
89
|
+
const zone = zones[index];
|
|
90
|
+
if (zone == '*') {
|
|
91
|
+
const isLast = index == (zones.length - 1);
|
|
92
|
+
generated += isLast ? '(?<$surplus>/.+)?' : '(?:/[^/]+)';
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const optional = zone.match(validators.paramOptional);
|
|
96
|
+
if (optional && optional.groups) {
|
|
97
|
+
const param = optional.groups['param'].replace(validators.escape, '');
|
|
98
|
+
generated += `(?:/(?<${param}>[^/]+))?`;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const required = zone.match(validators.paramRequired);
|
|
102
|
+
if (required && required.groups) {
|
|
103
|
+
const param = required.groups['param'].replace(validators.escape, '');
|
|
104
|
+
generated += `/(?<${param}>[^/]+)`;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
generated += `/${zone}`;
|
|
108
|
+
}
|
|
109
|
+
return new RegExp(`${generated}/?$`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export default Rule;
|
|
113
|
+
//# sourceMappingURL=Rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/server/router/Rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Request from '../Request.js';
|
|
2
|
+
import Websocket from '../websocket/Websocket.js';
|
|
3
|
+
import Middleware from './middleware/Middleware.js';
|
|
4
|
+
import WsMiddleware from './middleware/WsMiddleware.js';
|
|
5
|
+
import Rule from './Rule.js';
|
|
6
|
+
export declare class WsRule extends Rule<WsRule.action> {
|
|
7
|
+
readonly middleware: WsMiddleware;
|
|
8
|
+
constructor(urlRule: string, action: WsRule.action, middleware?: WsMiddleware);
|
|
9
|
+
exec(request: Request, client: Websocket, state?: Middleware.State): void;
|
|
10
|
+
test(request: Request): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Adds a middleware to this specific rule.
|
|
13
|
+
* @param action The middleware action.
|
|
14
|
+
*/
|
|
15
|
+
use(action: Middleware.action.ws): this;
|
|
16
|
+
/**
|
|
17
|
+
* Adds a error middleware to this specific rule.
|
|
18
|
+
* @param action The middleware action.
|
|
19
|
+
*/
|
|
20
|
+
useError(action: Middleware.errorAction.ws): this;
|
|
21
|
+
}
|
|
22
|
+
export declare namespace WsRule {
|
|
23
|
+
type action = (request: Request, client: Websocket, state: Middleware.State) => void;
|
|
24
|
+
}
|
|
25
|
+
export default WsRule;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import WsMiddleware from './middleware/WsMiddleware.js';
|
|
2
|
+
import Rule from './Rule.js';
|
|
3
|
+
export class WsRule extends Rule {
|
|
4
|
+
middleware;
|
|
5
|
+
constructor(urlRule, action, middleware = new WsMiddleware()) {
|
|
6
|
+
super(urlRule, action);
|
|
7
|
+
this.middleware = middleware;
|
|
8
|
+
}
|
|
9
|
+
exec(request, client, state) {
|
|
10
|
+
request.ruleParams = this.getParams(request.url);
|
|
11
|
+
this.middleware.run(request, client, this.action, state);
|
|
12
|
+
}
|
|
13
|
+
test(request) {
|
|
14
|
+
return super.test(request);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Adds a middleware to this specific rule.
|
|
18
|
+
* @param action The middleware action.
|
|
19
|
+
*/
|
|
20
|
+
use(action) {
|
|
21
|
+
this.middleware.use(action);
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Adds a error middleware to this specific rule.
|
|
26
|
+
* @param action The middleware action.
|
|
27
|
+
*/
|
|
28
|
+
useError(action) {
|
|
29
|
+
this.middleware.useError(action);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export default WsRule;
|
|
34
|
+
//# sourceMappingURL=WsRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WsRule.js","sourceRoot":"","sources":["../../../src/server/router/WsRule.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,MAAO,SAAQ,IAAmB;IAGvB;IAFpB,YACI,OAAe,EAAE,MAAqB,EACtB,aAA2B,IAAI,YAAY,EAAE;QAC7D,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QADP,eAAU,GAAV,UAAU,CAAmC;IACrC,CAAC;IACtB,IAAI,CAAC,OAAgB,EAAE,MAAiB,EAAE,KAAwB;QACrE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IACM,IAAI,CAAC,OAAgB;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD;;;OAGG;IACI,GAAG,CAAC,MAA4B;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD;;;OAGG;IACI,QAAQ,CAAC,MAAiC;QAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAID,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author NetFeez <codefeez.dev@gmail.com>
|
|
3
|
+
* @description Manages the middleware pipeline for HttpRules.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import Request from '../../Request.js';
|
|
7
|
+
import Response from '../../Response.js';
|
|
8
|
+
import HttpRule from '../HttpRule.js';
|
|
9
|
+
import Middleware from './Middleware.js';
|
|
10
|
+
export declare class HttpMiddleware extends Middleware<HttpRule> {
|
|
11
|
+
clone(): HttpMiddleware;
|
|
12
|
+
/**
|
|
13
|
+
* Runs the middleware pipeline.
|
|
14
|
+
* @param request - The request received by the server.
|
|
15
|
+
* @param response - The response to be sent by the server.
|
|
16
|
+
* @param action - The action to run.
|
|
17
|
+
* @param state - The state to pass to the action.
|
|
18
|
+
*/
|
|
19
|
+
run(request: Request, response: Response, action: HttpRule.action, state?: Middleware.State): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Runs the error pipeline.
|
|
22
|
+
* @param error - The error to handle.
|
|
23
|
+
* @param request - The request received by the server.
|
|
24
|
+
* @param response - The response to be sent by the server.
|
|
25
|
+
* @param state - The state to pass to the action.
|
|
26
|
+
*/
|
|
27
|
+
runError(error: unknown, request: Request, response: Response, state?: Middleware.State): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Handles errors.
|
|
30
|
+
* @param error - The error to handle.
|
|
31
|
+
*/
|
|
32
|
+
protected errorHandler(error: unknown, request: Request, response: Response): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export declare namespace HttpMiddleware { }
|
|
35
|
+
export default HttpMiddleware;
|