From 1c4291928a3286a6c1d5ed0a4c3f7ac3eb87d45d Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Mon, 16 Jun 2025 23:17:07 +0000 Subject: [PATCH] Refactor route registration and plugin initialization - Add filePath to route registration for better traceability - Restrict HTTP file route matching to method-named files - Replace engine.map with engine.registers (Set) for endpoint tracking - Refactor IPC service registration to use engine.registers - Move plugin initialization before engine.listen - Delegate route registration to engine.register method --- server/src/classes/Route/index.js | 1 + server/src/classes/RtEngine/index.js | 5 ++++- server/src/engines/he/index.js | 10 +++++++++- server/src/registers/httpFileRoutes.js | 12 +++++++++--- server/src/registers/ipcService.js | 4 ++-- server/src/server.js | 20 ++++++-------------- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/server/src/classes/Route/index.js b/server/src/classes/Route/index.js index 0f3ca8d..4c4dc59 100755 --- a/server/src/classes/Route/index.js +++ b/server/src/classes/Route/index.js @@ -50,6 +50,7 @@ export default class Route { this.server.register.http({ method: method, route: this.params.route, + filePath: this.params.filePath, middlewares: this.params.useMiddlewares, fn: this[method].handler, }) diff --git a/server/src/classes/RtEngine/index.js b/server/src/classes/RtEngine/index.js index d4d7eea..612e115 100755 --- a/server/src/classes/RtEngine/index.js +++ b/server/src/classes/RtEngine/index.js @@ -80,7 +80,10 @@ class RTEngineNG { const handler = this.events.get(message.event) if (typeof handler === "function") { - const result = await handler(client, message.data) + const result = await handler(client, message.data, { + senders: this.senders, + find: this.find, + }) if (message.ack === true) { client.emit(`ack_${message.event}`, result) diff --git a/server/src/engines/he/index.js b/server/src/engines/he/index.js index d2f5270..87faabc 100755 --- a/server/src/engines/he/index.js +++ b/server/src/engines/he/index.js @@ -13,7 +13,7 @@ export default class Engine { app = null ws = null router = new he.Router() - map = new Map() + registers = new Set() initialize = async () => { this.app = new he.Server({ @@ -73,6 +73,14 @@ export default class Engine { }) } + register = (obj) => { + // set to the endpoints map, used by _map + this.registers.add(obj) + + // register endpoint to http interface router + this.router[obj.method](obj.route, ...obj.middlewares, obj.fn) + } + listen = async () => { await this.app.listen(this.server.params.listenPort) } diff --git a/server/src/registers/httpFileRoutes.js b/server/src/registers/httpFileRoutes.js index 2767bde..8f22922 100755 --- a/server/src/registers/httpFileRoutes.js +++ b/server/src/registers/httpFileRoutes.js @@ -13,7 +13,10 @@ export default async (startDir, server) => { await RecursiveRegister({ start: startDir, match: async (filePath) => { - return filePath.endsWith(".js") || filePath.endsWith(".ts") + // Only match files named as HTTP methods (get.js, post.ts, etc.) + const httpMethodRegex = + /\/(get|post|put|delete|patch|options|head)\.(js|ts)$/i + return httpMethodRegex.test(filePath) }, onMatch: async ({ absolutePath, relativePath }) => { const paths = relativePath.split("/") @@ -51,14 +54,17 @@ export default async (startDir, server) => { } } - new Route(server, { + const routeParams = { route: route, + filePath: absolutePath, useMiddlewares: fileObj.useMiddlewares, useContexts: fileObj.useContexts, handlers: { [method]: fileObj.fn ?? fileObj, }, - }).register() + } + + new Route(server, routeParams).register() }, }) } diff --git a/server/src/registers/ipcService.js b/server/src/registers/ipcService.js index 1d9e178..c9f5bac 100644 --- a/server/src/registers/ipcService.js +++ b/server/src/registers/ipcService.js @@ -5,8 +5,8 @@ export default async (server) => { } // get only the root paths - let paths = Array.from(server.engine.map.keys()).map((key) => { - const root = key.split("/")[1] + let paths = Array.from(server.engine.registers.values()).map((key) => { + const root = key.route.split("/")[1] return "/" + root }) diff --git a/server/src/server.js b/server/src/server.js index 3a9a5db..5f28db4 100755 --- a/server/src/server.js +++ b/server/src/server.js @@ -99,7 +99,6 @@ class Server { headers = {} events = {} contexts = {} - engine = null get hasSSL() { @@ -211,6 +210,11 @@ class Server { await registerServiceToIPC(this) } + for (const Plugin of this.plugins) { + const pluginInstance = new Plugin(this) + await pluginInstance.initialize() + } + // listen await this.engine.listen() @@ -226,7 +230,6 @@ class Server { const lines = [ `- Url: ${this.hasSSL ? "https" : "http"}://${this.params.listenIp}:${this.params.listenPort}`, `- Websocket: ${this.engine.ws ? this.engine.ws?.config?.path : "Disabled"}`, - `- Routes: ${this.engine.map.size}`, `- Tooks: ${elapsedTimeInMs.toFixed(2)}ms`, ] @@ -254,18 +257,7 @@ class Server { `[${obj.method.toUpperCase()}] ${obj.route}`, ) - // set to the endpoints map, used by _map - this.engine.map.set(obj.route, { - method: obj.method, - path: obj.route, - }) - - // register endpoint to http interface router - this.engine.router[obj.method]( - obj.route, - ...obj.middlewares, - obj.fn, - ) + return this.engine.register(obj) }, ws: (wsEndpointObj) => {}, }