@morojs/moro 1.6.0 → 1.6.2

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 (68) hide show
  1. package/dist/core/config/config-sources.js +4 -0
  2. package/dist/core/config/config-sources.js.map +1 -1
  3. package/dist/core/config/config-validator.js +3 -0
  4. package/dist/core/config/config-validator.js.map +1 -1
  5. package/dist/core/config/file-loader.js +3 -1
  6. package/dist/core/config/file-loader.js.map +1 -1
  7. package/dist/core/config/schema.js +4 -1
  8. package/dist/core/config/schema.js.map +1 -1
  9. package/dist/core/events/event-bus.js +1 -1
  10. package/dist/core/events/event-bus.js.map +1 -1
  11. package/dist/core/framework.d.ts +1 -1
  12. package/dist/core/framework.js +13 -7
  13. package/dist/core/framework.js.map +1 -1
  14. package/dist/core/http/http-server.d.ts +55 -15
  15. package/dist/core/http/http-server.js +70 -146
  16. package/dist/core/http/http-server.js.map +1 -1
  17. package/dist/core/http/index.d.ts +1 -1
  18. package/dist/core/http/index.js +1 -1
  19. package/dist/core/http/index.js.map +1 -1
  20. package/dist/core/http/uws-http-server.d.ts +4 -22
  21. package/dist/core/http/uws-http-server.js +43 -208
  22. package/dist/core/http/uws-http-server.js.map +1 -1
  23. package/dist/core/networking/adapters/uws-adapter.d.ts +1 -1
  24. package/dist/core/networking/adapters/uws-adapter.js +1 -1
  25. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  26. package/dist/core/pooling/object-pool-manager.js +502 -0
  27. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  28. package/dist/core/routing/app-integration.d.ts +12 -10
  29. package/dist/core/routing/app-integration.js +43 -74
  30. package/dist/core/routing/app-integration.js.map +1 -1
  31. package/dist/core/routing/index.d.ts +15 -29
  32. package/dist/core/routing/index.js +43 -390
  33. package/dist/core/routing/index.js.map +1 -1
  34. package/dist/core/routing/path-matcher.d.ts +67 -0
  35. package/dist/core/routing/path-matcher.js +182 -0
  36. package/dist/core/routing/path-matcher.js.map +1 -0
  37. package/dist/core/{http → routing}/router.d.ts +21 -9
  38. package/dist/core/routing/router.js +68 -0
  39. package/dist/core/routing/router.js.map +1 -0
  40. package/dist/core/routing/unified-router.d.ts +148 -0
  41. package/dist/core/routing/unified-router.js +684 -0
  42. package/dist/core/routing/unified-router.js.map +1 -0
  43. package/dist/moro.d.ts +10 -7
  44. package/dist/moro.js +90 -41
  45. package/dist/moro.js.map +1 -1
  46. package/dist/types/config.d.ts +3 -0
  47. package/package.json +1 -1
  48. package/src/core/config/config-sources.ts +4 -0
  49. package/src/core/config/config-validator.ts +3 -0
  50. package/src/core/config/file-loader.ts +4 -1
  51. package/src/core/config/schema.ts +4 -1
  52. package/src/core/events/event-bus.ts +1 -1
  53. package/src/core/framework.ts +14 -9
  54. package/src/core/http/http-server.ts +76 -161
  55. package/src/core/http/index.ts +1 -1
  56. package/src/core/http/uws-http-server.ts +43 -246
  57. package/src/core/networking/adapters/uws-adapter.ts +1 -1
  58. package/src/core/pooling/object-pool-manager.ts +630 -0
  59. package/src/core/routing/app-integration.ts +57 -109
  60. package/src/core/routing/index.ts +62 -473
  61. package/src/core/routing/path-matcher.ts +222 -0
  62. package/src/core/routing/router.ts +97 -0
  63. package/src/core/routing/unified-router.ts +870 -0
  64. package/src/moro.ts +107 -57
  65. package/src/types/config.ts +3 -0
  66. package/dist/core/http/router.js +0 -183
  67. package/dist/core/http/router.js.map +0 -1
  68. package/src/core/http/router.ts +0 -230
@@ -0,0 +1,502 @@
1
+ // Unified Object Pool Manager
2
+ // Consolidates object pooling from http-server, router, and other components
3
+ import { createFrameworkLogger } from '../logger/index.js';
4
+ import * as crypto from 'crypto';
5
+ const logger = createFrameworkLogger('ObjectPoolManager');
6
+ /**
7
+ * Generic object pool for reusable objects
8
+ */
9
+ class ObjectPool {
10
+ pool = [];
11
+ factory;
12
+ reset;
13
+ maxSize;
14
+ acquireCount = 0;
15
+ releaseCount = 0;
16
+ createCount = 0;
17
+ constructor(factory, maxSize = 100, reset) {
18
+ this.factory = factory;
19
+ this.maxSize = maxSize;
20
+ this.reset = reset;
21
+ }
22
+ acquire() {
23
+ this.acquireCount++;
24
+ if (this.pool.length > 0) {
25
+ return this.pool.pop();
26
+ }
27
+ this.createCount++;
28
+ return this.factory();
29
+ }
30
+ release(obj) {
31
+ if (this.pool.length >= this.maxSize) {
32
+ return; // Pool is full, let it be garbage collected
33
+ }
34
+ this.releaseCount++;
35
+ // Reset object if reset function provided
36
+ if (this.reset) {
37
+ this.reset(obj);
38
+ }
39
+ this.pool.push(obj);
40
+ }
41
+ get size() {
42
+ return this.pool.length;
43
+ }
44
+ get stats() {
45
+ return {
46
+ poolSize: this.pool.length,
47
+ maxSize: this.maxSize,
48
+ acquireCount: this.acquireCount,
49
+ releaseCount: this.releaseCount,
50
+ createCount: this.createCount,
51
+ utilization: this.maxSize > 0 ? this.pool.length / this.maxSize : 0,
52
+ };
53
+ }
54
+ clear() {
55
+ this.pool = [];
56
+ }
57
+ }
58
+ /**
59
+ * LRU Cache for route lookups
60
+ */
61
+ class LRUCache {
62
+ cache = new Map();
63
+ maxSize;
64
+ hits = 0;
65
+ misses = 0;
66
+ constructor(maxSize = 500) {
67
+ this.maxSize = maxSize;
68
+ }
69
+ get(key) {
70
+ const value = this.cache.get(key);
71
+ if (value !== undefined) {
72
+ this.hits++;
73
+ // Move to end (most recently used)
74
+ this.cache.delete(key);
75
+ this.cache.set(key, value);
76
+ return value;
77
+ }
78
+ this.misses++;
79
+ return undefined;
80
+ }
81
+ set(key, value) {
82
+ if (this.cache.has(key)) {
83
+ this.cache.delete(key);
84
+ }
85
+ this.cache.set(key, value);
86
+ // Evict oldest if over capacity
87
+ if (this.cache.size > this.maxSize) {
88
+ const firstKey = this.cache.keys().next().value;
89
+ if (firstKey !== undefined) {
90
+ this.cache.delete(firstKey);
91
+ }
92
+ }
93
+ }
94
+ has(key) {
95
+ return this.cache.has(key);
96
+ }
97
+ delete(key) {
98
+ return this.cache.delete(key);
99
+ }
100
+ clear() {
101
+ this.cache.clear();
102
+ this.hits = 0;
103
+ this.misses = 0;
104
+ }
105
+ get size() {
106
+ return this.cache.size;
107
+ }
108
+ get stats() {
109
+ const total = this.hits + this.misses;
110
+ return {
111
+ size: this.cache.size,
112
+ maxSize: this.maxSize,
113
+ hits: this.hits,
114
+ misses: this.misses,
115
+ hitRate: total > 0 ? this.hits / total : 0,
116
+ };
117
+ }
118
+ }
119
+ /**
120
+ * ObjectPoolManager - Singleton for managing all object pools
121
+ * Consolidates pools from:
122
+ * - MoroHttpServer (paramObjectPool, bufferPool)
123
+ * - Router (paramObjectPool)
124
+ * - Various route caches
125
+ */
126
+ export class ObjectPoolManager {
127
+ static instance = null;
128
+ // Parameter object pool (for route params)
129
+ paramPool;
130
+ // Header object pool (for parsed headers)
131
+ headerPool;
132
+ // Query object pool (for parsed query strings)
133
+ queryPool;
134
+ // Buffer pools by size
135
+ bufferPools;
136
+ bufferSizes = [64, 256, 1024, 4096, 16384];
137
+ // Route lookup cache
138
+ routeCache;
139
+ // Response cache (for common responses - now includes full response metadata)
140
+ responseCache;
141
+ // Performance monitoring
142
+ performanceStats = {
143
+ poolHits: 0,
144
+ poolMisses: 0,
145
+ totalAcquisitions: 0,
146
+ totalReleases: 0,
147
+ lastAdjustment: 0,
148
+ adjustmentInterval: 60000, // 1 minute
149
+ };
150
+ // Adaptive pool sizing
151
+ poolUsageHistory = new Map();
152
+ adaptiveMode = true;
153
+ constructor() {
154
+ // Set initial last adjustment time to prevent immediate adjustment
155
+ this.performanceStats.lastAdjustment = Date.now();
156
+ // Initialize parameter object pool with adaptive sizing
157
+ this.paramPool = new ObjectPool(() => ({}), 100, // Initial size
158
+ (obj) => {
159
+ // Clear all properties
160
+ for (const key in obj) {
161
+ delete obj[key];
162
+ }
163
+ });
164
+ // Initialize header object pool
165
+ this.headerPool = new ObjectPool(() => ({}), 50, // Initial size - headers are less common to pool
166
+ (obj) => {
167
+ // Clear all properties
168
+ for (const key in obj) {
169
+ delete obj[key];
170
+ }
171
+ });
172
+ // Initialize query object pool
173
+ this.queryPool = new ObjectPool(() => ({}), 100, // Initial size - queries are very common
174
+ (obj) => {
175
+ // Clear all properties
176
+ for (const key in obj) {
177
+ delete obj[key];
178
+ }
179
+ });
180
+ // Initialize buffer pools with enhanced sizing
181
+ this.bufferPools = new Map();
182
+ this.bufferSizes.forEach(size => {
183
+ this.bufferPools.set(size, new ObjectPool(() => Buffer.allocUnsafe(size), this.getOptimalPoolSize(size)));
184
+ });
185
+ // Initialize caches with enhanced statistics
186
+ this.routeCache = new LRUCache(500);
187
+ this.responseCache = new LRUCache(200); // Increased for full response caching
188
+ // Pre-warm pools for better initial performance
189
+ this.preWarmPools();
190
+ logger.debug('ObjectPoolManager initialized with enhanced performance features', 'Initialization');
191
+ }
192
+ /**
193
+ * Pre-warm pools with initial objects for better startup performance
194
+ */
195
+ preWarmPools() {
196
+ // Pre-warm parameter pool
197
+ for (let i = 0; i < 20; i++) {
198
+ const obj = this.paramPool.acquire();
199
+ this.paramPool.release(obj);
200
+ }
201
+ // Pre-warm header pool
202
+ for (let i = 0; i < 10; i++) {
203
+ const obj = this.headerPool.acquire();
204
+ this.headerPool.release(obj);
205
+ }
206
+ // Pre-warm query pool
207
+ for (let i = 0; i < 20; i++) {
208
+ const obj = this.queryPool.acquire();
209
+ this.queryPool.release(obj);
210
+ }
211
+ // Pre-warm buffer pools
212
+ this.bufferSizes.forEach(size => {
213
+ const pool = this.bufferPools.get(size);
214
+ if (pool) {
215
+ for (let i = 0; i < Math.min(10, pool.stats.maxSize); i++) {
216
+ const buffer = pool.acquire();
217
+ pool.release(buffer);
218
+ }
219
+ }
220
+ });
221
+ logger.debug('Object pools pre-warmed', 'PoolManager');
222
+ }
223
+ /**
224
+ * Get optimal pool size based on buffer size and usage patterns
225
+ */
226
+ getOptimalPoolSize(bufferSize) {
227
+ // Smaller buffers can have larger pools
228
+ if (bufferSize <= 256)
229
+ return 100;
230
+ if (bufferSize <= 1024)
231
+ return 75;
232
+ if (bufferSize <= 4096)
233
+ return 50;
234
+ return 25; // Large buffers need smaller pools
235
+ }
236
+ static getInstance() {
237
+ if (!this.instance) {
238
+ this.instance = new ObjectPoolManager();
239
+ }
240
+ return this.instance;
241
+ }
242
+ /**
243
+ * Reset the singleton (useful for testing)
244
+ */
245
+ static reset() {
246
+ if (this.instance) {
247
+ this.instance.clearAll();
248
+ }
249
+ this.instance = null;
250
+ }
251
+ // Parameter Object Pool
252
+ acquireParams() {
253
+ this.performanceStats.totalAcquisitions++;
254
+ const obj = this.paramPool.acquire();
255
+ if (this.poolUsageHistory.has('params')) {
256
+ const history = this.poolUsageHistory.get('params');
257
+ if (history.length >= 100) {
258
+ history.shift(); // Keep only last 100 measurements
259
+ }
260
+ history.push(this.paramPool.size);
261
+ }
262
+ else {
263
+ this.poolUsageHistory.set('params', [this.paramPool.size]);
264
+ }
265
+ return obj;
266
+ }
267
+ releaseParams(obj) {
268
+ this.performanceStats.totalReleases++;
269
+ this.paramPool.release(obj);
270
+ // Adaptive pool sizing based on usage patterns
271
+ if (this.adaptiveMode &&
272
+ Date.now() - this.performanceStats.lastAdjustment > this.performanceStats.adjustmentInterval) {
273
+ this.adjustPoolSizes();
274
+ }
275
+ }
276
+ // Header Object Pool
277
+ acquireHeaders() {
278
+ this.performanceStats.totalAcquisitions++;
279
+ return this.headerPool.acquire();
280
+ }
281
+ releaseHeaders(obj) {
282
+ this.performanceStats.totalReleases++;
283
+ this.headerPool.release(obj);
284
+ }
285
+ // Query Object Pool
286
+ acquireQuery() {
287
+ this.performanceStats.totalAcquisitions++;
288
+ return this.queryPool.acquire();
289
+ }
290
+ releaseQuery(obj) {
291
+ this.performanceStats.totalReleases++;
292
+ this.queryPool.release(obj);
293
+ }
294
+ // Request ID Generation
295
+ generateRequestId() {
296
+ return crypto.randomUUID();
297
+ }
298
+ // Buffer Pool
299
+ acquireBuffer(size) {
300
+ this.performanceStats.totalAcquisitions++;
301
+ // Find smallest buffer that fits
302
+ for (const poolSize of this.bufferSizes) {
303
+ if (size <= poolSize) {
304
+ const pool = this.bufferPools.get(poolSize);
305
+ if (pool) {
306
+ const buffer = pool.acquire();
307
+ this.performanceStats.poolHits++;
308
+ // Track usage for adaptive sizing
309
+ const poolKey = `buffer_${poolSize}`;
310
+ if (this.poolUsageHistory.has(poolKey)) {
311
+ const history = this.poolUsageHistory.get(poolKey);
312
+ if (history.length >= 100) {
313
+ history.shift();
314
+ }
315
+ history.push(pool.size);
316
+ }
317
+ else {
318
+ this.poolUsageHistory.set(poolKey, [pool.size]);
319
+ }
320
+ return buffer;
321
+ }
322
+ }
323
+ }
324
+ // No pool available for this size, allocate directly
325
+ this.performanceStats.poolMisses++;
326
+ return Buffer.allocUnsafe(size);
327
+ }
328
+ releaseBuffer(buffer) {
329
+ this.performanceStats.totalReleases++;
330
+ const size = buffer.length;
331
+ const pool = this.bufferPools.get(size);
332
+ if (pool) {
333
+ pool.release(buffer);
334
+ // Adaptive pool sizing based on usage patterns
335
+ if (this.adaptiveMode &&
336
+ Date.now() - this.performanceStats.lastAdjustment > this.performanceStats.adjustmentInterval) {
337
+ this.adjustPoolSizes();
338
+ }
339
+ }
340
+ // If no pool for this size, let it be garbage collected
341
+ }
342
+ // Route Cache
343
+ getCachedRoute(key) {
344
+ return this.routeCache.get(key);
345
+ }
346
+ cacheRoute(key, route) {
347
+ this.routeCache.set(key, route);
348
+ }
349
+ hasCachedRoute(key) {
350
+ return this.routeCache.has(key);
351
+ }
352
+ clearRouteCache() {
353
+ this.routeCache.clear();
354
+ }
355
+ // Response Cache (For Opt-In Explicit Caching Only)
356
+ // NOTE: This cache is NOT used automatically by the framework.
357
+ // It's available for developers who explicitly want to cache specific responses.
358
+ // Developers must carefully manage cache keys to avoid stale/incorrect data.
359
+ getCachedResponse(key) {
360
+ return this.responseCache.get(key);
361
+ }
362
+ cacheResponse(key, buffer, headers, statusCode = 200) {
363
+ // Cache responses up to 4KB
364
+ // WARNING: Only use this for static responses that never change
365
+ if (buffer.length < 4096) {
366
+ this.responseCache.set(key, {
367
+ buffer: Buffer.from(buffer), // Clone to avoid mutations
368
+ headers: { ...headers }, // Clone headers
369
+ statusCode,
370
+ });
371
+ }
372
+ }
373
+ hasCachedResponse(key) {
374
+ return this.responseCache.has(key);
375
+ }
376
+ clearResponseCache() {
377
+ this.responseCache.clear();
378
+ }
379
+ /**
380
+ * Adaptively adjust pool sizes based on usage patterns
381
+ */
382
+ adjustPoolSizes() {
383
+ this.performanceStats.lastAdjustment = Date.now();
384
+ // Adjust parameter pool size
385
+ const paramHistory = this.poolUsageHistory.get('params') || [];
386
+ if (paramHistory.length >= 10) {
387
+ const avgUsage = paramHistory.reduce((sum, size) => sum + size, 0) / paramHistory.length;
388
+ const targetSize = Math.min(Math.max(Math.round(avgUsage * 1.2), 50), 200); // 20% buffer, 50-200 range
389
+ if (Math.abs(this.paramPool.stats.maxSize - targetSize) > 10) {
390
+ logger.debug(`Adjusting param pool size from ${this.paramPool.stats.maxSize} to ${targetSize}`, 'PoolManager');
391
+ // Note: We can't directly change maxSize, but we can log the recommendation
392
+ // In a real implementation, we'd recreate the pool with the new size
393
+ }
394
+ }
395
+ // Adjust buffer pool sizes
396
+ this.bufferSizes.forEach(size => {
397
+ const poolKey = `buffer_${size}`;
398
+ const history = this.poolUsageHistory.get(poolKey) || [];
399
+ if (history.length >= 10) {
400
+ const avgUsage = history.reduce((sum, size) => sum + size, 0) / history.length;
401
+ const pool = this.bufferPools.get(size);
402
+ if (pool) {
403
+ const currentMax = pool.stats.maxSize;
404
+ const targetMax = this.getOptimalPoolSize(size);
405
+ if (Math.abs(currentMax - targetMax) > 5) {
406
+ logger.debug(`Buffer pool ${size}B: usage ${avgUsage.toFixed(1)}/${currentMax}, target ${targetMax}`, 'PoolManager');
407
+ }
408
+ }
409
+ }
410
+ });
411
+ logger.debug('Pool size adjustment cycle completed', 'PoolManager');
412
+ }
413
+ /**
414
+ * Enable or disable adaptive pool sizing
415
+ */
416
+ setAdaptiveMode(enabled) {
417
+ this.adaptiveMode = enabled;
418
+ logger.debug(`Adaptive pool sizing ${enabled ? 'enabled' : 'disabled'}`, 'PoolManager');
419
+ }
420
+ // Utility Methods
421
+ /**
422
+ * Clear all pools and caches
423
+ */
424
+ clearAll() {
425
+ this.paramPool.clear();
426
+ this.headerPool.clear();
427
+ this.queryPool.clear();
428
+ this.bufferPools.forEach(pool => pool.clear());
429
+ this.routeCache.clear();
430
+ this.responseCache.clear();
431
+ logger.debug('All pools and caches cleared', 'Maintenance');
432
+ }
433
+ /**
434
+ * Force garbage collection on pooled objects
435
+ */
436
+ forceCleanup() {
437
+ this.clearAll();
438
+ // Force GC if available
439
+ if (globalThis?.gc) {
440
+ globalThis.gc();
441
+ logger.debug('Forced garbage collection', 'Maintenance');
442
+ }
443
+ }
444
+ /**
445
+ * Get comprehensive performance statistics
446
+ */
447
+ getStats() {
448
+ const bufferPoolStats = {};
449
+ this.bufferPools.forEach((pool, size) => {
450
+ bufferPoolStats[`${size}B`] = pool.stats;
451
+ });
452
+ return {
453
+ paramPool: this.paramPool.stats,
454
+ headerPool: this.headerPool.stats,
455
+ queryPool: this.queryPool.stats,
456
+ bufferPools: bufferPoolStats,
457
+ routeCache: this.routeCache.stats,
458
+ responseCache: this.responseCache.stats,
459
+ totalMemory: {
460
+ params: this.paramPool.size * 50, // Rough estimate
461
+ headers: this.headerPool.size * 100, // Rough estimate
462
+ queries: this.queryPool.size * 50, // Rough estimate
463
+ buffers: Array.from(this.bufferPools.values()).reduce((sum, pool) => sum + pool.size, 0),
464
+ routes: this.routeCache.size * 200, // Rough estimate
465
+ responses: this.responseCache.size * 1000, // Rough estimate (increased for full responses)
466
+ },
467
+ };
468
+ }
469
+ /**
470
+ * Get performance summary for monitoring
471
+ */
472
+ getPerformanceSummary() {
473
+ const stats = this.getStats();
474
+ const routeCacheTotal = stats.routeCache.hits + stats.routeCache.misses;
475
+ const responseCacheTotal = stats.responseCache.hits + stats.responseCache.misses;
476
+ return {
477
+ routeCacheHitRate: routeCacheTotal > 0 ? (stats.routeCache.hits / routeCacheTotal) * 100 : 0,
478
+ responseCacheHitRate: responseCacheTotal > 0 ? (stats.responseCache.hits / responseCacheTotal) * 100 : 0,
479
+ paramPoolUtilization: stats.paramPool.utilization * 100,
480
+ totalMemoryKB: Object.values(stats.totalMemory).reduce((a, b) => a + b, 0) / 1024,
481
+ };
482
+ }
483
+ /**
484
+ * Log performance statistics
485
+ */
486
+ logStats() {
487
+ const summary = this.getPerformanceSummary();
488
+ logger.info('ObjectPoolManager Performance', 'Stats', {
489
+ routeCacheHitRate: `${summary.routeCacheHitRate.toFixed(1)}%`,
490
+ responseCacheHitRate: `${summary.responseCacheHitRate.toFixed(1)}%`,
491
+ paramPoolUtilization: `${summary.paramPoolUtilization.toFixed(1)}%`,
492
+ totalMemory: `${summary.totalMemoryKB.toFixed(1)} KB`,
493
+ });
494
+ }
495
+ }
496
+ /**
497
+ * Convenience function to get the singleton instance
498
+ */
499
+ export function getPoolManager() {
500
+ return ObjectPoolManager.getInstance();
501
+ }
502
+ //# sourceMappingURL=object-pool-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-pool-manager.js","sourceRoot":"","sources":["../../../src/core/pooling/object-pool-manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
1
  import { RouteBuilder, RouteSchema, CompiledRoute } from './index.js';
2
2
  import { HttpRequest, HttpResponse } from '../http/index.js';
3
+ /**
4
+ * RouteRegistry - Facade to UnifiedRouter for backward compatibility
5
+ * This was part of the public API, so we maintain it as an alias
6
+ */
7
+ export declare class RouteRegistry {
8
+ private router;
9
+ register(route: CompiledRoute): void;
10
+ handleRequest(req: HttpRequest, res: HttpResponse): Promise<boolean>;
11
+ getRoutes(): CompiledRoute[];
12
+ }
3
13
  export interface IntelligentApp {
4
14
  get(path: string): RouteBuilder;
5
15
  post(path: string): RouteBuilder;
@@ -12,16 +22,8 @@ export interface IntelligentApp {
12
22
  register(route: CompiledRoute): void;
13
23
  directRoute(method: string, path: string, handler: Function, options?: any): void;
14
24
  }
15
- export declare class RouteRegistry {
16
- private routes;
17
- private routePatterns;
18
- register(route: CompiledRoute): void;
19
- handleRequest(req: HttpRequest, res: HttpResponse): Promise<boolean>;
20
- getRoutes(): CompiledRoute[];
21
- private pathToRegex;
22
- }
23
25
  export declare class IntelligentRoutingManager implements IntelligentApp {
24
- private routeRegistry;
26
+ private router;
25
27
  get(path: string): RouteBuilder;
26
28
  post(path: string): RouteBuilder;
27
29
  put(path: string): RouteBuilder;
@@ -30,7 +32,7 @@ export declare class IntelligentRoutingManager implements IntelligentApp {
30
32
  head(path: string): RouteBuilder;
31
33
  options(path: string): RouteBuilder;
32
34
  route(schema: RouteSchema): CompiledRoute;
33
- register(route: CompiledRoute): void;
35
+ register(_route: CompiledRoute): void;
34
36
  handleIntelligentRoute(req: HttpRequest, res: HttpResponse): Promise<boolean>;
35
37
  getIntelligentRoutes(): CompiledRoute[];
36
38
  directRoute(method: string, path: string, handler: Function, options?: any): void;