xypriss 1.3.8 → 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.
- package/README.md +219 -31
- package/dist/cjs/mods/security/src/components/cache/index.js +0 -72
- package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/cjs/mods/security/src/index.js +0 -3
- package/dist/cjs/mods/security/src/index.js.map +1 -1
- package/dist/cjs/shared/logger/Logger.js +2 -0
- package/dist/cjs/shared/logger/Logger.js.map +1 -1
- package/dist/cjs/src/index.js +55 -61
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +281 -0
- package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
- package/dist/cjs/src/middleware/built-in/index.js +325 -0
- package/dist/cjs/src/middleware/built-in/index.js.map +1 -0
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
- package/dist/cjs/src/quick-start.js +0 -4
- package/dist/cjs/src/quick-start.js.map +1 -1
- package/dist/cjs/src/server/FastServer.js +53 -411
- package/dist/cjs/src/server/FastServer.js.map +1 -1
- package/dist/cjs/src/server/ServerFactory.js +7 -62
- package/dist/cjs/src/server/ServerFactory.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +1 -1
- package/dist/cjs/src/server/components/fastapi/PerformanceManager.js +1 -1
- package/dist/cjs/src/server/components/fastapi/PerformanceManager.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/RouteManager.js +0 -82
- package/dist/cjs/src/server/components/fastapi/RouteManager.js.map +1 -1
- package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +384 -0
- package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/cjs/src/server/const/default.js +0 -8
- package/dist/cjs/src/server/const/default.js.map +1 -1
- package/dist/cjs/src/server/core/HttpServer.js +500 -0
- package/dist/cjs/src/server/core/HttpServer.js.map +1 -0
- package/dist/cjs/src/server/core/XyprissApp.js +412 -0
- package/dist/cjs/src/server/core/XyprissApp.js.map +1 -0
- package/dist/cjs/src/server/middleware/MiddlewareManager.js +146 -0
- package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -0
- package/dist/cjs/src/server/routing/Router.js +341 -0
- package/dist/cjs/src/server/routing/Router.js.map +1 -0
- package/dist/cjs/src/server/utils/PortManager.js +1 -0
- package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
- package/dist/cjs/src/server/utils/forceClosePort.js +294 -88
- package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
- package/dist/esm/mods/security/src/components/cache/index.js +1 -70
- package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/esm/mods/security/src/index.js +1 -1
- package/dist/esm/shared/logger/Logger.js +2 -0
- package/dist/esm/shared/logger/Logger.js.map +1 -1
- package/dist/esm/src/index.js +41 -11
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +279 -0
- package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
- package/dist/esm/src/middleware/built-in/index.js +323 -0
- package/dist/esm/src/middleware/built-in/index.js.map +1 -0
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
- package/dist/esm/src/quick-start.js +0 -4
- package/dist/esm/src/quick-start.js.map +1 -1
- package/dist/esm/src/server/FastServer.js +53 -411
- package/dist/esm/src/server/FastServer.js.map +1 -1
- package/dist/esm/src/server/ServerFactory.js +8 -59
- package/dist/esm/src/server/ServerFactory.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +1 -1
- package/dist/esm/src/server/components/fastapi/PerformanceManager.js +1 -1
- package/dist/esm/src/server/components/fastapi/PerformanceManager.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/RouteManager.js +0 -82
- package/dist/esm/src/server/components/fastapi/RouteManager.js.map +1 -1
- package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +382 -0
- package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/esm/src/server/const/default.js +0 -8
- package/dist/esm/src/server/const/default.js.map +1 -1
- package/dist/esm/src/server/core/HttpServer.js +498 -0
- package/dist/esm/src/server/core/HttpServer.js.map +1 -0
- package/dist/esm/src/server/core/XyprissApp.js +410 -0
- package/dist/esm/src/server/core/XyprissApp.js.map +1 -0
- package/dist/esm/src/server/middleware/MiddlewareManager.js +144 -0
- package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -0
- package/dist/esm/src/server/routing/Router.js +339 -0
- package/dist/esm/src/server/routing/Router.js.map +1 -0
- package/dist/esm/src/server/utils/PortManager.js +1 -0
- package/dist/esm/src/server/utils/PortManager.js.map +1 -1
- package/dist/esm/src/server/utils/forceClosePort.js +294 -88
- package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
- package/dist/index.d.ts +2166 -4273
- 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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"}
|