xypriss 1.3.7 → 2.0.0

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.
Files changed (88) hide show
  1. package/README.md +219 -31
  2. package/dist/cjs/mods/security/src/components/cache/index.js +0 -72
  3. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  4. package/dist/cjs/mods/security/src/index.js +0 -3
  5. package/dist/cjs/mods/security/src/index.js.map +1 -1
  6. package/dist/cjs/shared/logger/Logger.js +2 -0
  7. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  8. package/dist/cjs/src/index.js +55 -61
  9. package/dist/cjs/src/index.js.map +1 -1
  10. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +281 -0
  11. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
  12. package/dist/cjs/src/middleware/built-in/index.js +325 -0
  13. package/dist/cjs/src/middleware/built-in/index.js.map +1 -0
  14. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
  15. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
  16. package/dist/cjs/src/quick-start.js +0 -4
  17. package/dist/cjs/src/quick-start.js.map +1 -1
  18. package/dist/cjs/src/server/FastServer.js +53 -411
  19. package/dist/cjs/src/server/FastServer.js.map +1 -1
  20. package/dist/cjs/src/server/ServerFactory.js +7 -62
  21. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  22. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +1 -1
  23. package/dist/cjs/src/server/components/fastapi/PerformanceManager.js +1 -1
  24. package/dist/cjs/src/server/components/fastapi/PerformanceManager.js.map +1 -1
  25. package/dist/cjs/src/server/components/fastapi/RouteManager.js +0 -82
  26. package/dist/cjs/src/server/components/fastapi/RouteManager.js.map +1 -1
  27. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +384 -0
  28. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
  29. package/dist/cjs/src/server/const/default.js +0 -8
  30. package/dist/cjs/src/server/const/default.js.map +1 -1
  31. package/dist/cjs/src/server/core/HttpServer.js +500 -0
  32. package/dist/cjs/src/server/core/HttpServer.js.map +1 -0
  33. package/dist/cjs/src/server/core/XyprissApp.js +412 -0
  34. package/dist/cjs/src/server/core/XyprissApp.js.map +1 -0
  35. package/dist/cjs/src/server/middleware/MiddlewareManager.js +146 -0
  36. package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -0
  37. package/dist/cjs/src/server/routing/Router.js +341 -0
  38. package/dist/cjs/src/server/routing/Router.js.map +1 -0
  39. package/dist/cjs/src/server/utils/PortManager.js +1 -0
  40. package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
  41. package/dist/cjs/src/server/utils/es_modules.js +3 -2
  42. package/dist/cjs/src/server/utils/es_modules.js.map +1 -1
  43. package/dist/cjs/src/server/utils/forceClosePort.js +294 -88
  44. package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
  45. package/dist/esm/mods/security/src/components/cache/index.js +1 -70
  46. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  47. package/dist/esm/mods/security/src/index.js +1 -1
  48. package/dist/esm/shared/logger/Logger.js +2 -0
  49. package/dist/esm/shared/logger/Logger.js.map +1 -1
  50. package/dist/esm/src/index.js +41 -11
  51. package/dist/esm/src/index.js.map +1 -1
  52. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +279 -0
  53. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
  54. package/dist/esm/src/middleware/built-in/index.js +323 -0
  55. package/dist/esm/src/middleware/built-in/index.js.map +1 -0
  56. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
  57. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
  58. package/dist/esm/src/quick-start.js +0 -4
  59. package/dist/esm/src/quick-start.js.map +1 -1
  60. package/dist/esm/src/server/FastServer.js +53 -411
  61. package/dist/esm/src/server/FastServer.js.map +1 -1
  62. package/dist/esm/src/server/ServerFactory.js +8 -59
  63. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  64. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +1 -1
  65. package/dist/esm/src/server/components/fastapi/PerformanceManager.js +1 -1
  66. package/dist/esm/src/server/components/fastapi/PerformanceManager.js.map +1 -1
  67. package/dist/esm/src/server/components/fastapi/RouteManager.js +0 -82
  68. package/dist/esm/src/server/components/fastapi/RouteManager.js.map +1 -1
  69. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +382 -0
  70. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
  71. package/dist/esm/src/server/const/default.js +0 -8
  72. package/dist/esm/src/server/const/default.js.map +1 -1
  73. package/dist/esm/src/server/core/HttpServer.js +498 -0
  74. package/dist/esm/src/server/core/HttpServer.js.map +1 -0
  75. package/dist/esm/src/server/core/XyprissApp.js +410 -0
  76. package/dist/esm/src/server/core/XyprissApp.js.map +1 -0
  77. package/dist/esm/src/server/middleware/MiddlewareManager.js +144 -0
  78. package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -0
  79. package/dist/esm/src/server/routing/Router.js +339 -0
  80. package/dist/esm/src/server/routing/Router.js.map +1 -0
  81. package/dist/esm/src/server/utils/PortManager.js +1 -0
  82. package/dist/esm/src/server/utils/PortManager.js.map +1 -1
  83. package/dist/esm/src/server/utils/es_modules.js +3 -3
  84. package/dist/esm/src/server/utils/es_modules.js.map +1 -1
  85. package/dist/esm/src/server/utils/forceClosePort.js +294 -88
  86. package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
  87. package/dist/index.d.ts +2166 -4273
  88. package/package.json +31 -19
@@ -0,0 +1,410 @@
1
+ import '../../../shared/logger/Logger.js';
2
+ import { XyPrissHttpServer } from './HttpServer.js';
3
+ import { XyPrissMiddleware } from '../../middleware/XyPrissMiddlewareAPI.js';
4
+ import { XyPrissRouter } from '../routing/Router.js';
5
+
6
+ /**
7
+ * XyprissApp - Express-free UltraFastApp implementation
8
+ *
9
+ * This module provides a complete UltraFastApp implementation that doesn't
10
+ * depend on Express, using our XyPrisHttpServer for maximum performance.
11
+ */
12
+ /**
13
+ * UltraFastApp implementation without Express dependency
14
+ */
15
+ class XyprissApp {
16
+ constructor(logger) {
17
+ this.isStarted = false;
18
+ // App properties
19
+ this.locals = {};
20
+ this.mountpath = "/";
21
+ this.settings = {};
22
+ // ===== MISSING ULTRAFASTAPP METHODS (STUB IMPLEMENTATIONS) =====
23
+ this.invalidateCache = async (pattern) => {
24
+ if (this.cache) {
25
+ // TODO: Implement cache invalidation by pattern
26
+ this.logger.debug("server", `Cache invalidation requested for pattern: ${pattern}`);
27
+ }
28
+ };
29
+ this.getCacheStats = async () => {
30
+ if (this.cache) {
31
+ // TODO: Return actual cache stats
32
+ return { hitRate: 0, missRate: 0, size: 0 };
33
+ }
34
+ return null;
35
+ };
36
+ this.warmUpCache = async (data) => {
37
+ if (this.cache) {
38
+ // TODO: Implement cache warmup
39
+ this.logger.debug("server", `Cache warmup requested for ${data.length} entries`);
40
+ }
41
+ };
42
+ this.getRequestPreCompiler = () => {
43
+ // TODO: Return actual RequestPreCompiler instance
44
+ return null;
45
+ };
46
+ this.getConsoleInterceptor = () => null;
47
+ this.enableConsoleInterception = () => { };
48
+ this.disableConsoleInterception = () => { };
49
+ this.getConsoleStats = () => null;
50
+ this.resetConsoleStats = () => { };
51
+ this.getFileWatcherStatus = () => null;
52
+ this.getFileWatcherStats = () => null;
53
+ this.stopFileWatcher = async () => { };
54
+ this.getFileWatcherManager = () => null;
55
+ this.checkTypeScript = async (files) => null;
56
+ this.getTypeScriptStatus = () => null;
57
+ this.enableTypeScriptChecking = () => { };
58
+ this.disableTypeScriptChecking = () => { };
59
+ this.ultraGet = (path, options, handler) => {
60
+ return this.get(path, handler);
61
+ };
62
+ this.ultraPost = (path, options, handler) => {
63
+ return this.post(path, handler);
64
+ };
65
+ this.ultraPut = (path, options, handler) => {
66
+ return this.put(path, handler);
67
+ };
68
+ this.ultraDelete = (path, options, handler) => {
69
+ return this.delete(path, handler);
70
+ };
71
+ this.ultraRoutes = (routes) => {
72
+ // TODO: Implement bulk route registration
73
+ return null;
74
+ };
75
+ this.getRouterStats = () => null;
76
+ this.getRouterInfo = () => null;
77
+ this.warmUpRoutes = async () => { };
78
+ this.resetRouterStats = () => { };
79
+ this.useCached = (middleware, ttl) => {
80
+ // TODO: Implement cached middleware
81
+ return this.use(middleware);
82
+ };
83
+ this.removeMiddleware = (name) => {
84
+ // TODO: Implement middleware removal
85
+ return false;
86
+ };
87
+ this.enableSecurity = (options) => {
88
+ // TODO: Implement security middleware
89
+ return this;
90
+ };
91
+ // More missing methods
92
+ this.enableConsoleEncryption = () => { };
93
+ this.disableConsoleEncryption = () => { };
94
+ this.encrypt = (data) => data;
95
+ this.setConsoleEncryptionKey = (key) => { };
96
+ this.enableCors = (options) => this;
97
+ this.enableCompression = (options) => this;
98
+ this.enableRateLimit = (options) => this;
99
+ this.getWithCache = (path, options, handler) => this.get(path, handler);
100
+ this.postWithCache = (path, options, handler) => this.post(path, handler);
101
+ this.putWithCache = (path, options, handler) => this.put(path, handler);
102
+ this.deleteWithCache = (path, options, handler) => this.delete(path, handler);
103
+ this.patchWithCache = (path, options, handler) => this.patch(path, handler);
104
+ this.optionsWithCache = (path, options, handler) => this.options(path, handler);
105
+ this.headWithCache = (path, options, handler) => this.head(path, handler);
106
+ // Final missing methods
107
+ this.setConsoleEncryptionDisplayMode = (_mode) => { };
108
+ this.getEncryptedLogs = () => [];
109
+ this.restoreConsoleFromEncrypted = async (_encryptedData, _key) => [];
110
+ this.isConsoleEncryptionEnabled = () => false;
111
+ this.getConsoleEncryptionKey = () => "";
112
+ this.clearEncryptedLogs = () => { };
113
+ this.exportEncryptedLogs = (_format) => null;
114
+ this.importEncryptedLogs = (_data) => { };
115
+ this.getConsoleEncryptionStats = () => null;
116
+ this.getConsoleEncryptionStatus = () => null;
117
+ this.useSecure = (_options) => this;
118
+ this.usePerformance = (_options) => this;
119
+ this.getMiddleware = () => null;
120
+ this.getMiddlewareStats = () => null;
121
+ this.logger = logger;
122
+ this.httpServer = new XyPrissHttpServer(logger);
123
+ this.middlewareAPI = new XyPrissMiddleware(this);
124
+ this.setupDefaultSettings();
125
+ this.logger.debug("routing", "XyprissApp created with new XyPrisHttpServer");
126
+ }
127
+ /**
128
+ * Setup default Express-like settings
129
+ */
130
+ setupDefaultSettings() {
131
+ this.settings = {
132
+ "x-powered-by": false,
133
+ etag: "weak",
134
+ env: process.env.NODE_ENV || "development",
135
+ "subdomain offset": 2,
136
+ "trust proxy": false,
137
+ "view cache": true,
138
+ "view engine": false,
139
+ views: process.cwd() + "/views",
140
+ };
141
+ }
142
+ // ===== HTTP METHOD IMPLEMENTATIONS =====
143
+ get(path, ...handlers) {
144
+ this.logger.debug("server", `Registering GET route: ${path}`);
145
+ this.httpServer.get(path, ...this.convertHandlers(handlers));
146
+ }
147
+ post(path, ...handlers) {
148
+ this.httpServer.post(path, ...this.convertHandlers(handlers));
149
+ }
150
+ put(path, ...handlers) {
151
+ this.httpServer.put(path, ...this.convertHandlers(handlers));
152
+ }
153
+ delete(path, ...handlers) {
154
+ this.httpServer.delete(path, ...this.convertHandlers(handlers));
155
+ }
156
+ patch(path, ...handlers) {
157
+ this.httpServer.patch(path, ...this.convertHandlers(handlers));
158
+ }
159
+ options(path, ...handlers) {
160
+ this.httpServer.options(path, ...this.convertHandlers(handlers));
161
+ }
162
+ head(path, ...handlers) {
163
+ this.httpServer.head(path, ...this.convertHandlers(handlers));
164
+ }
165
+ all(path, ...handlers) {
166
+ // Implement all HTTP methods
167
+ const convertedHandlers = this.convertHandlers(handlers);
168
+ this.httpServer.get(path, ...convertedHandlers);
169
+ this.httpServer.post(path, ...convertedHandlers);
170
+ this.httpServer.put(path, ...convertedHandlers);
171
+ this.httpServer.delete(path, ...convertedHandlers);
172
+ this.httpServer.patch(path, ...convertedHandlers);
173
+ this.httpServer.options(path, ...convertedHandlers);
174
+ this.httpServer.head(path, ...convertedHandlers);
175
+ }
176
+ // ===== MIDDLEWARE METHODS =====
177
+ use(pathOrRouter, router) {
178
+ if (typeof pathOrRouter === "string" &&
179
+ router instanceof XyPrissRouter) {
180
+ // app.use('/api', router)
181
+ this.mountRouter(pathOrRouter, router);
182
+ }
183
+ else if (pathOrRouter instanceof XyPrissRouter) {
184
+ // app.use(router)
185
+ this.mountRouter("/", pathOrRouter);
186
+ }
187
+ else if (typeof pathOrRouter === "function") {
188
+ // app.use(middleware)
189
+ this.httpServer.use(pathOrRouter);
190
+ }
191
+ else if (typeof pathOrRouter === "string" &&
192
+ typeof router === "function") {
193
+ // app.use(path, middleware)
194
+ this.httpServer.use(pathOrRouter, router);
195
+ }
196
+ return this;
197
+ }
198
+ listen(port, hostnameOrCallback, callback) {
199
+ let hostname = "localhost";
200
+ let cb = callback;
201
+ if (typeof hostnameOrCallback === "string") {
202
+ hostname = hostnameOrCallback;
203
+ }
204
+ else if (typeof hostnameOrCallback === "function") {
205
+ cb = hostnameOrCallback;
206
+ }
207
+ this.logger.debug("server", `listen() called: ${hostname}:${port}`);
208
+ const server = this.httpServer.listen(port, hostname, cb);
209
+ this.logger.debug("server", `listen() returning server: ${typeof server}, has 'on': ${typeof server?.on}`);
210
+ return server;
211
+ }
212
+ set(setting, val) {
213
+ this.settings[setting] = val;
214
+ }
215
+ getSetting(setting) {
216
+ return this.settings[setting];
217
+ }
218
+ enabled(setting) {
219
+ return Boolean(this.settings[setting]);
220
+ }
221
+ disabled(setting) {
222
+ return !this.settings[setting];
223
+ }
224
+ enable(setting) {
225
+ this.settings[setting] = true;
226
+ }
227
+ disable(setting) {
228
+ this.settings[setting] = false;
229
+ }
230
+ engine(ext, fn) {
231
+ // Template engine support - basic implementation
232
+ this.settings[`engine:${ext}`] = fn;
233
+ return this;
234
+ }
235
+ param(name, handler) {
236
+ // Parameter preprocessing - basic implementation
237
+ this.settings[`param:${name}`] = handler;
238
+ }
239
+ path() {
240
+ return this.mountpath;
241
+ }
242
+ render(_view, _options, callback) {
243
+ // Template rendering - basic implementation
244
+ if (callback) {
245
+ callback(new Error("Template rendering not implemented"));
246
+ }
247
+ }
248
+ route(path) {
249
+ // Route creation - basic implementation
250
+ return {
251
+ get: (handler) => this.get(path, handler),
252
+ post: (handler) => this.post(path, handler),
253
+ put: (handler) => this.put(path, handler),
254
+ delete: (handler) => this.delete(path, handler),
255
+ patch: (handler) => this.patch(path, handler),
256
+ options: (handler) => this.options(path, handler),
257
+ head: (handler) => this.head(path, handler),
258
+ all: (handler) => this.all(path, handler),
259
+ };
260
+ }
261
+ // ===== CACHE METHODS =====
262
+ setCache(cache) {
263
+ this.cache = cache;
264
+ }
265
+ getCache() {
266
+ return this.cache;
267
+ }
268
+ /**
269
+ * Access the middleware management API
270
+ */
271
+ middleware(config) {
272
+ return this.middlewareAPI;
273
+ }
274
+ /**
275
+ * Mount a router at a specific path
276
+ */
277
+ mountRouter(basePath, router) {
278
+ const routes = router.getRoutes();
279
+ const middleware = router.getMiddleware();
280
+ this.logger.debug("server", `🔧 Mounting router at ${basePath} with ${routes.length} routes`);
281
+ routes.forEach((route) => {
282
+ this.logger.debug("server", `🔧 Router route: ${route.method} ${route.path} (has pattern: ${!!route.pattern})`);
283
+ });
284
+ // Register router middleware first
285
+ middleware.forEach((mw) => {
286
+ this.httpServer.use(mw);
287
+ });
288
+ // Register all routes from the router
289
+ routes.forEach((route) => {
290
+ const fullPath = this.joinPaths(basePath, route.path);
291
+ // Register route-specific middleware
292
+ route.middleware.forEach((mw) => {
293
+ this.httpServer.use(mw);
294
+ });
295
+ // If the route has a compiled pattern, we need to create a new pattern
296
+ // that includes the base path
297
+ let routePath = fullPath;
298
+ if (route.pattern && basePath !== "/") {
299
+ // Create a new pattern that includes the base path
300
+ const originalPattern = route.pattern.source;
301
+ const flags = route.pattern.flags;
302
+ // Remove the ^ and $ anchors from the original pattern
303
+ const cleanPattern = originalPattern
304
+ .replace(/^\^/, "")
305
+ .replace(/\$$/, "");
306
+ // Create new pattern with base path
307
+ const basePathEscaped = basePath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
308
+ const newPatternSource = `^${basePathEscaped}${cleanPattern}$`;
309
+ routePath = new RegExp(newPatternSource, flags);
310
+ this.logger.debug("server", `🔧 Registering route: ${route.method} ${fullPath} (compiled pattern with base path)`);
311
+ }
312
+ else if (route.pattern) {
313
+ // Use the original pattern if no base path
314
+ routePath = route.pattern;
315
+ this.logger.debug("server", `🔧 Registering route: ${route.method} ${fullPath} (original compiled pattern)`);
316
+ }
317
+ else {
318
+ this.logger.debug("server", `🔧 Registering route: ${route.method} ${fullPath} (string path)`);
319
+ }
320
+ // Register the route using the appropriate HTTP method
321
+ const allHandlers = [...route.middleware, route.handler];
322
+ // For RegExp routes, we need to manually add the route with parameter names
323
+ if (routePath instanceof RegExp && route.paramNames) {
324
+ // Manually add route to HTTP server with parameter names
325
+ this.httpServer.addRouteWithParams(route.method.toUpperCase(), routePath, route.paramNames, allHandlers);
326
+ }
327
+ else {
328
+ // Use standard HTTP method registration
329
+ switch (route.method.toUpperCase()) {
330
+ case "GET":
331
+ this.httpServer.get(routePath, ...allHandlers);
332
+ break;
333
+ case "POST":
334
+ this.httpServer.post(routePath, ...allHandlers);
335
+ break;
336
+ case "PUT":
337
+ this.httpServer.put(routePath, ...allHandlers);
338
+ break;
339
+ case "DELETE":
340
+ this.httpServer.delete(routePath, ...allHandlers);
341
+ break;
342
+ case "PATCH":
343
+ this.httpServer.patch(routePath, ...allHandlers);
344
+ break;
345
+ case "OPTIONS":
346
+ this.httpServer.options(routePath, ...allHandlers);
347
+ break;
348
+ case "HEAD":
349
+ this.httpServer.head(routePath, ...allHandlers);
350
+ break;
351
+ default:
352
+ this.logger.warn("server", `Unsupported HTTP method: ${route.method}`);
353
+ break;
354
+ }
355
+ }
356
+ this.logger.debug("server", `Mounted route: ${route.method} ${fullPath}`);
357
+ });
358
+ this.logger.debug("server", `Mounted router at ${basePath} with ${routes.length} routes`);
359
+ }
360
+ /**
361
+ * Join two paths correctly
362
+ */
363
+ joinPaths(basePath, subPath) {
364
+ const normalizedBase = basePath.endsWith("/")
365
+ ? basePath.slice(0, -1)
366
+ : basePath;
367
+ const normalizedSub = subPath.startsWith("/") ? subPath : "/" + subPath;
368
+ if (normalizedBase === "" || normalizedBase === "/") {
369
+ return normalizedSub;
370
+ }
371
+ return normalizedBase + normalizedSub;
372
+ }
373
+ // ===== HELPER METHODS =====
374
+ /**
375
+ * Convert Express RequestHandler to XyPrisHttpServer handler
376
+ */
377
+ convertHandler(handler) {
378
+ return (req, res, next) => {
379
+ // Type assertion to make it compatible
380
+ return handler(req, res, next);
381
+ };
382
+ }
383
+ /**
384
+ * Convert array of Express RequestHandlers to XyPrisHttpServer handlers
385
+ */
386
+ convertHandlers(handlers) {
387
+ return handlers.map((handler) => this.convertHandler(handler));
388
+ }
389
+ /**
390
+ * Get the underlying HTTP server
391
+ */
392
+ getHttpServer() {
393
+ return this.httpServer;
394
+ }
395
+ /**
396
+ * Close the server
397
+ */
398
+ close(callback) {
399
+ this.httpServer.close(callback);
400
+ }
401
+ /**
402
+ * Get server address
403
+ */
404
+ address() {
405
+ return this.httpServer.address();
406
+ }
407
+ }
408
+
409
+ export { XyprissApp };
410
+ //# sourceMappingURL=XyprissApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XyprissApp.js","sources":["../../../../../src/server/core/XyprissApp.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Modular Middleware Manager
3
+ * Handles middleware registration, execution, and management
4
+ */
5
+ class MiddlewareManager {
6
+ constructor(logger) {
7
+ this.middleware = [];
8
+ this.logger = logger;
9
+ this.logger.debug("middleware", "Created new middleware manager");
10
+ }
11
+ /**
12
+ * Register middleware
13
+ */
14
+ use(handler, config = {}) {
15
+ const middlewareConfig = {
16
+ name: config.name || `middleware_${this.middleware.length + 1}`,
17
+ enabled: config.enabled !== false,
18
+ priority: config.priority || 100,
19
+ description: config.description || "Custom middleware",
20
+ };
21
+ const entry = {
22
+ config: middlewareConfig,
23
+ handler,
24
+ };
25
+ this.middleware.push(entry);
26
+ // Sort by priority (lower numbers first)
27
+ this.middleware.sort((a, b) => a.config.priority - b.config.priority);
28
+ this.logger.debug("middleware", `Registered middleware: ${middlewareConfig.name} (priority: ${middlewareConfig.priority})`);
29
+ }
30
+ /**
31
+ * Execute all middleware in order
32
+ * @returns true if all middleware completed successfully, false if chain was stopped
33
+ */
34
+ async execute(req, res) {
35
+ this.logger.debug("middleware", `Executing ${this.middleware.length} middleware functions`);
36
+ for (let i = 0; i < this.middleware.length; i++) {
37
+ const entry = this.middleware[i];
38
+ if (!entry.config.enabled) {
39
+ this.logger.debug("middleware", `Skipping disabled middleware: ${entry.config.name}`);
40
+ continue;
41
+ }
42
+ this.logger.debug("middleware", `Executing middleware: ${entry.config.name} (${i + 1}/${this.middleware.length})`);
43
+ try {
44
+ let nextCalled = false;
45
+ const next = () => {
46
+ nextCalled = true;
47
+ };
48
+ // Execute middleware
49
+ const result = entry.handler(req, res, next);
50
+ // Handle async middleware
51
+ if (result instanceof Promise) {
52
+ await result;
53
+ }
54
+ // Check if middleware expects next parameter
55
+ const expectsNext = this.isMiddlewareWithNext(entry.handler);
56
+ this.logger.debug("middleware", `Middleware ${entry.config.name} analysis: expectsNext=${expectsNext}, nextCalled=${nextCalled}, paramCount=${entry.handler.length}`);
57
+ // Only stop the chain if middleware expects next() but didn't call it
58
+ if (expectsNext && !nextCalled) {
59
+ this.logger.debug("middleware", `Middleware ${entry.config.name} expects next() but did not call it - stopping chain`);
60
+ return false; // Return false to indicate chain was stopped
61
+ }
62
+ this.logger.debug("middleware", `Middleware ${entry.config.name} completed successfully`);
63
+ this.logger.debug("middleware", `Middleware ${entry.config.name} completed`);
64
+ }
65
+ catch (error) {
66
+ this.logger.error("middleware", `Error in middleware ${entry.config.name}:`, error);
67
+ // Continue with next middleware on error
68
+ }
69
+ }
70
+ this.logger.debug("middleware", `All middleware completed`);
71
+ return true; // Return true to indicate all middleware completed successfully
72
+ }
73
+ /**
74
+ * Check if middleware function expects a next parameter
75
+ */
76
+ isMiddlewareWithNext(handler) {
77
+ return handler.length >= 3; // req, res, next
78
+ }
79
+ /**
80
+ * Get middleware statistics
81
+ */
82
+ getStats() {
83
+ const enabled = this.middleware.filter((m) => m.config.enabled);
84
+ const disabled = this.middleware.filter((m) => !m.config.enabled);
85
+ return {
86
+ total: this.middleware.length,
87
+ enabled: enabled.length,
88
+ disabled: disabled.length,
89
+ middleware: this.middleware.map((m) => ({
90
+ name: m.config.name,
91
+ enabled: m.config.enabled,
92
+ priority: m.config.priority,
93
+ description: m.config.description,
94
+ })),
95
+ };
96
+ }
97
+ /**
98
+ * Enable/disable middleware by name
99
+ */
100
+ setMiddlewareEnabled(name, enabled) {
101
+ const entry = this.middleware.find((m) => m.config.name === name);
102
+ if (entry) {
103
+ entry.config.enabled = enabled;
104
+ this.logger.debug("middleware", `${enabled ? "Enabled" : "Disabled"} middleware: ${name}`);
105
+ return true;
106
+ }
107
+ return false;
108
+ }
109
+ /**
110
+ * Remove middleware by name
111
+ */
112
+ removeMiddleware(name) {
113
+ const index = this.middleware.findIndex((m) => m.config.name === name);
114
+ if (index !== -1) {
115
+ this.middleware.splice(index, 1);
116
+ this.logger.debug("middleware", `Removed middleware: ${name}`);
117
+ return true;
118
+ }
119
+ return false;
120
+ }
121
+ /**
122
+ * Clear all middleware
123
+ */
124
+ clear() {
125
+ const count = this.middleware.length;
126
+ this.middleware = [];
127
+ this.logger.debug("middleware", `Cleared ${count} middleware functions`);
128
+ }
129
+ /**
130
+ * Get middleware by name
131
+ */
132
+ getMiddleware(name) {
133
+ return this.middleware.find((m) => m.config.name === name);
134
+ }
135
+ /**
136
+ * List all middleware names
137
+ */
138
+ listMiddleware() {
139
+ return this.middleware.map((m) => m.config.name);
140
+ }
141
+ }
142
+
143
+ export { MiddlewareManager };
144
+ //# sourceMappingURL=MiddlewareManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiddlewareManager.js","sources":["../../../../../src/server/middleware/MiddlewareManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}