@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
@@ -1,23 +1,29 @@
1
1
  // Intelligent Routing System for Moro Framework
2
2
  // Schema-first with automatic middleware ordering and chainable API
3
- import { createFrameworkLogger } from '../logger/index.js';
4
- const logger = createFrameworkLogger('IntelligentRouting');
5
- // Execution phases in optimal order
3
+ //
4
+ // NOTE: This file exports types and thin facades to UnifiedRouter
5
+ // All routing logic has been consolidated in unified-router.ts
6
+ import { UnifiedRouter } from './unified-router.js';
6
7
  export const EXECUTION_PHASES = [
7
- 'security', // CORS, Helmet (framework-managed)
8
- 'parsing', // Body/query parsing (framework-managed)
9
- 'rateLimit', // Rate limiting (early protection)
10
- 'before', // Custom pre-processing middleware
11
- 'auth', // Authentication/authorization
12
- 'validation', // Request validation
13
- 'transform', // Data transformation middleware
14
- 'cache', // Caching logic
15
- 'after', // Custom post-processing middleware
16
- 'handler', // Route handler (always last)
8
+ 'security',
9
+ 'parsing',
10
+ 'rateLimit',
11
+ 'before',
12
+ 'auth',
13
+ 'validation',
14
+ 'transform',
15
+ 'cache',
16
+ 'after',
17
+ 'handler',
17
18
  ];
18
- // Route builder implementation
19
+ // ===== FACADE IMPLEMENTATIONS (Delegate to UnifiedRouter) =====
20
+ /**
21
+ * Thin facade to UnifiedRouter.RouteBuilder
22
+ * Maintains backward compatibility while using optimized implementation
23
+ */
19
24
  export class IntelligentRouteBuilder {
20
25
  schema;
26
+ router = UnifiedRouter.getInstance();
21
27
  constructor(method, path) {
22
28
  this.schema = {
23
29
  method,
@@ -25,7 +31,6 @@ export class IntelligentRouteBuilder {
25
31
  middleware: {},
26
32
  };
27
33
  }
28
- // Validation methods
29
34
  validate(config) {
30
35
  this.schema.validation = { ...this.schema.validation, ...config };
31
36
  return this;
@@ -54,7 +59,6 @@ export class IntelligentRouteBuilder {
54
59
  this.schema.validation.headers = schema;
55
60
  return this;
56
61
  }
57
- // Security methods
58
62
  auth(config) {
59
63
  this.schema.auth = config;
60
64
  return this;
@@ -63,34 +67,34 @@ export class IntelligentRouteBuilder {
63
67
  this.schema.rateLimit = config;
64
68
  return this;
65
69
  }
66
- // Caching
67
70
  cache(config) {
68
71
  this.schema.cache = config;
69
72
  return this;
70
73
  }
71
- // Custom middleware
72
74
  before(...middleware) {
73
75
  if (!this.schema.middleware)
74
76
  this.schema.middleware = {};
75
- this.schema.middleware.before = [...(this.schema.middleware.before || []), ...middleware];
77
+ const phases = this.schema.middleware;
78
+ phases.before = [...(phases.before || []), ...middleware];
76
79
  return this;
77
80
  }
78
81
  after(...middleware) {
79
82
  if (!this.schema.middleware)
80
83
  this.schema.middleware = {};
81
- this.schema.middleware.after = [...(this.schema.middleware.after || []), ...middleware];
84
+ const phases = this.schema.middleware;
85
+ phases.after = [...(phases.after || []), ...middleware];
82
86
  return this;
83
87
  }
84
88
  transform(...middleware) {
85
89
  if (!this.schema.middleware)
86
90
  this.schema.middleware = {};
87
- this.schema.middleware.transform = [...(this.schema.middleware.transform || []), ...middleware];
91
+ const phases = this.schema.middleware;
92
+ phases.transform = [...(phases.transform || []), ...middleware];
88
93
  return this;
89
94
  }
90
95
  use(...middleware) {
91
96
  return this.after(...middleware);
92
97
  }
93
- // Metadata
94
98
  describe(description) {
95
99
  this.schema.description = description;
96
100
  return this;
@@ -99,7 +103,6 @@ export class IntelligentRouteBuilder {
99
103
  this.schema.tags = [...(this.schema.tags || []), ...tags];
100
104
  return this;
101
105
  }
102
- // Terminal method - compiles the route
103
106
  handler(handler) {
104
107
  if (!handler) {
105
108
  throw new Error('Handler is required');
@@ -108,387 +111,37 @@ export class IntelligentRouteBuilder {
108
111
  ...this.schema,
109
112
  handler,
110
113
  };
111
- logger.debug(`Compiled route: ${completeSchema.method} ${completeSchema.path}`, 'RouteCompilation', {
112
- hasValidation: !!completeSchema.validation,
113
- hasAuth: !!completeSchema.auth,
114
- hasRateLimit: !!completeSchema.rateLimit,
115
- hasCache: !!completeSchema.cache,
116
- customMiddleware: {
117
- before: completeSchema.middleware?.before?.length || 0,
118
- after: completeSchema.middleware?.after?.length || 0,
119
- transform: completeSchema.middleware?.transform?.length || 0,
120
- },
121
- });
122
- return new ExecutableRoute(completeSchema);
114
+ // Delegate to UnifiedRouter
115
+ this.router.registerRoute(completeSchema);
123
116
  }
124
117
  }
125
- // Executable route with intelligent middleware ordering
118
+ /**
119
+ * Thin facade implementing CompiledRoute interface
120
+ * Just stores schema for documentation purposes
121
+ */
126
122
  export class ExecutableRoute {
127
123
  schema;
128
- // PERFORMANCE OPTIMIZATION: Pre-analyze route requirements
129
- requiresAuth;
130
- requiresValidation;
131
- requiresRateLimit;
132
- requiresCache;
133
- hasBeforeMiddleware;
134
- hasAfterMiddleware;
135
- hasTransformMiddleware;
136
- isFastPath;
137
124
  constructor(schema) {
138
125
  this.schema = schema;
139
- // Pre-calculate what this route actually needs
140
- this.requiresAuth = !!this.schema.auth;
141
- this.requiresValidation = !!this.schema.validation;
142
- this.requiresRateLimit = !!this.schema.rateLimit;
143
- this.requiresCache = !!this.schema.cache;
144
- this.hasBeforeMiddleware = !!this.schema.middleware?.before?.length;
145
- this.hasAfterMiddleware = !!this.schema.middleware?.after?.length;
146
- this.hasTransformMiddleware = !!this.schema.middleware?.transform?.length;
147
- // Fast path: no middleware, no auth, no validation, no rate limiting
148
- this.isFastPath =
149
- !this.requiresAuth &&
150
- !this.requiresValidation &&
151
- !this.requiresRateLimit &&
152
- !this.requiresCache &&
153
- !this.hasBeforeMiddleware &&
154
- !this.hasAfterMiddleware &&
155
- !this.hasTransformMiddleware;
156
- // Log fast path routes for monitoring
157
- if (this.isFastPath) {
158
- logger.debug(`Fast path route: ${this.schema.method} ${this.schema.path}`, 'FastPath');
159
- }
126
+ // Register with UnifiedRouter
127
+ UnifiedRouter.getInstance().registerRoute(schema);
160
128
  }
161
129
  async execute(req, res) {
162
- const validatedReq = req;
163
- try {
164
- // PERFORMANCE OPTIMIZATION: Fast path for simple routes
165
- if (this.isFastPath) {
166
- // Skip all middleware - execute handler directly
167
- const result = await this.schema.handler(validatedReq, res);
168
- if (result !== undefined && !res.headersSent) {
169
- res.json(result);
170
- }
171
- return;
172
- }
173
- // Optimized middleware execution - only run what's needed
174
- if (this.hasBeforeMiddleware) {
175
- await this.executePhase('before', validatedReq, res);
176
- if (res.headersSent)
177
- return;
178
- }
179
- if (this.requiresRateLimit) {
180
- await this.executePhase('rateLimit', validatedReq, res);
181
- if (res.headersSent)
182
- return;
183
- }
184
- if (this.requiresAuth) {
185
- await this.executePhase('auth', validatedReq, res);
186
- if (res.headersSent)
187
- return;
188
- }
189
- if (this.requiresValidation) {
190
- await this.executePhase('validation', validatedReq, res);
191
- if (res.headersSent)
192
- return;
193
- }
194
- if (this.hasTransformMiddleware) {
195
- await this.executePhase('transform', validatedReq, res);
196
- if (res.headersSent)
197
- return;
198
- }
199
- if (this.requiresCache) {
200
- await this.executePhase('cache', validatedReq, res);
201
- if (res.headersSent)
202
- return;
203
- }
204
- if (this.hasAfterMiddleware) {
205
- await this.executePhase('after', validatedReq, res);
206
- if (res.headersSent)
207
- return;
208
- }
209
- // Execute handler last
210
- if (!res.headersSent) {
211
- await this.executePhase('handler', validatedReq, res);
212
- }
213
- }
214
- catch (error) {
215
- logger.error('Route execution error', 'RouteExecution', {
216
- error: error instanceof Error ? error.message : String(error),
217
- route: `${this.schema.method} ${this.schema.path}`,
218
- requestId: req.requestId,
219
- });
220
- if (!res.headersSent) {
221
- res.status(500).json({
222
- success: false,
223
- error: 'Internal server error',
224
- requestId: req.requestId,
225
- });
226
- }
227
- }
228
- }
229
- async executePhase(phase, req, res) {
230
- switch (phase) {
231
- case 'before':
232
- if (this.schema.middleware?.before) {
233
- for (const middleware of this.schema.middleware.before) {
234
- await this.executeMiddleware(middleware, req, res);
235
- }
236
- }
237
- break;
238
- case 'rateLimit':
239
- if (this.schema.rateLimit) {
240
- await this.executeRateLimit(req, res);
241
- }
242
- break;
243
- case 'auth':
244
- if (this.schema.auth) {
245
- await this.executeAuth(req, res);
246
- }
247
- break;
248
- case 'validation':
249
- if (this.schema.validation) {
250
- await this.executeValidation(req, res);
251
- }
252
- break;
253
- case 'transform':
254
- if (this.schema.middleware?.transform) {
255
- for (const middleware of this.schema.middleware.transform) {
256
- await this.executeMiddleware(middleware, req, res);
257
- }
258
- }
259
- break;
260
- case 'cache':
261
- if (this.schema.cache) {
262
- await this.executeCache(req, res);
263
- }
264
- break;
265
- case 'after':
266
- if (this.schema.middleware?.after) {
267
- for (const middleware of this.schema.middleware.after) {
268
- await this.executeMiddleware(middleware, req, res);
269
- }
270
- }
271
- break;
272
- case 'handler': {
273
- const result = await this.schema.handler(req, res);
274
- if (result !== undefined && !res.headersSent) {
275
- res.json(result);
276
- }
277
- break;
278
- }
279
- }
280
- }
281
- async executeMiddleware(middleware, req, res) {
282
- // PERFORMANCE OPTIMIZATION: Reduce Promise overhead
283
- return new Promise((resolve, reject) => {
284
- let resolved = false;
285
- const next = () => {
286
- if (!resolved) {
287
- resolved = true;
288
- resolve();
289
- }
290
- };
291
- try {
292
- const result = middleware(req, res, next);
293
- if (result instanceof Promise) {
294
- result.then(() => !resolved && next()).catch(reject);
295
- }
296
- else {
297
- // Synchronous middleware - call next immediately if not called
298
- if (!resolved) {
299
- next();
300
- }
301
- }
302
- }
303
- catch (error) {
304
- if (!resolved) {
305
- resolved = true;
306
- reject(error);
307
- }
308
- }
309
- });
310
- }
311
- async executeRateLimit(req, res) {
312
- // Rate limiting implementation will be added
313
- logger.debug('Rate limit check', 'RateLimit', {
314
- config: this.schema.rateLimit,
315
- ip: req.ip,
316
- });
317
- }
318
- async executeAuth(req, res) {
319
- const authConfig = this.schema.auth;
320
- const auth = req.auth;
321
- // This should never happen since executeAuth is only called when auth config exists
322
- if (!authConfig) {
323
- logger.error('executeAuth called without auth config', 'Auth');
324
- return;
325
- }
326
- logger.debug('Auth check', 'Auth', {
327
- config: authConfig,
328
- isAuthenticated: auth?.isAuthenticated,
329
- userRoles: auth?.user?.roles,
330
- });
331
- // Check if auth middleware ran
332
- if (!auth) {
333
- res.status(500);
334
- res.json({
335
- success: false,
336
- error: 'Authentication middleware not configured',
337
- message: 'Auth middleware must be installed before using route-level auth',
338
- });
339
- return;
340
- }
341
- // Check authentication requirement (default is required unless optional: true)
342
- if (!authConfig.optional && !auth.isAuthenticated) {
343
- res.status(401);
344
- res.json({
345
- success: false,
346
- error: 'Authentication required',
347
- message: 'You must be logged in to access this resource',
348
- });
349
- return;
350
- }
351
- // Skip further checks if not authenticated but optional
352
- if (!auth.isAuthenticated && authConfig.optional) {
353
- return; // Continue to handler
354
- }
355
- // Only check roles/permissions if user is authenticated
356
- if (auth.isAuthenticated) {
357
- const user = auth.user;
358
- // Check roles if specified
359
- if (authConfig.roles && authConfig.roles.length > 0) {
360
- const userRoles = user?.roles || [];
361
- const hasRole = authConfig.roles.some((role) => userRoles.includes(role));
362
- if (!hasRole) {
363
- res.status(403);
364
- res.json({
365
- success: false,
366
- error: 'Insufficient permissions',
367
- message: `Required roles: ${authConfig.roles.join(', ')}`,
368
- userRoles,
369
- });
370
- return;
371
- }
372
- }
373
- // Check permissions if specified
374
- if (authConfig.permissions && authConfig.permissions.length > 0) {
375
- const userPermissions = user?.permissions || [];
376
- const hasPermission = authConfig.permissions.every((permission) => userPermissions.includes(permission));
377
- if (!hasPermission) {
378
- res.status(403);
379
- res.json({
380
- success: false,
381
- error: 'Insufficient permissions',
382
- message: `Required permissions: ${authConfig.permissions.join(', ')}`,
383
- userPermissions,
384
- });
385
- return;
386
- }
387
- }
388
- }
389
- // All auth checks passed
390
- }
391
- async executeValidation(req, res) {
392
- if (!this.schema.validation)
393
- return;
394
- const { body, query, params, headers } = this.schema.validation;
395
- // Validate body
396
- if (body && req.body !== undefined) {
397
- try {
398
- req.validatedBody = await body.parseAsync(req.body);
399
- req.body = req.validatedBody; // Update original for compatibility
400
- }
401
- catch (error) {
402
- this.sendValidationError(res, error, 'body', req.requestId);
403
- return;
404
- }
405
- }
406
- // Validate query
407
- if (query && req.query !== undefined) {
408
- try {
409
- req.validatedQuery = await query.parseAsync(req.query);
410
- req.query = req.validatedQuery; // Update original for compatibility
411
- }
412
- catch (error) {
413
- this.sendValidationError(res, error, 'query', req.requestId);
414
- return;
415
- }
416
- }
417
- // Validate params
418
- if (params && req.params !== undefined) {
419
- try {
420
- req.validatedParams = await params.parseAsync(req.params);
421
- req.params = req.validatedParams; // Update original for compatibility
422
- }
423
- catch (error) {
424
- this.sendValidationError(res, error, 'params', req.requestId);
425
- return;
426
- }
427
- }
428
- // Validate headers
429
- if (headers && req.headers !== undefined) {
430
- try {
431
- req.validatedHeaders = await headers.parseAsync(req.headers);
432
- }
433
- catch (error) {
434
- this.sendValidationError(res, error, 'headers', req.requestId);
435
- return;
436
- }
437
- }
438
- logger.debug('Validation passed', 'Validation', {
439
- route: `${this.schema.method} ${this.schema.path}`,
440
- validatedFields: Object.keys(this.schema.validation),
441
- });
442
- }
443
- sendValidationError(res, error, field, requestId) {
444
- if (error.issues) {
445
- res.status(400).json({
446
- success: false,
447
- error: `Validation failed for ${field}`,
448
- details: error.issues.map((issue) => ({
449
- field: issue.path.length > 0 ? issue.path.join('.') : field,
450
- message: issue.message,
451
- code: issue.code,
452
- })),
453
- requestId,
454
- });
455
- }
456
- else {
457
- res.status(400).json({
458
- success: false,
459
- error: `Validation failed for ${field}`,
460
- requestId,
461
- });
462
- }
463
- }
464
- async executeCache(req, res) {
465
- // Caching implementation will be added
466
- logger.debug('Cache check', 'Cache', {
467
- config: this.schema.cache,
468
- });
469
- }
470
- // Performance monitoring
471
- getPerformanceInfo() {
472
- return {
473
- path: this.schema.path,
474
- method: this.schema.method,
475
- isFastPath: this.isFastPath,
476
- requiresAuth: this.requiresAuth,
477
- requiresValidation: this.requiresValidation,
478
- requiresRateLimit: this.requiresRateLimit,
479
- requiresCache: this.requiresCache,
480
- hasBeforeMiddleware: this.hasBeforeMiddleware,
481
- hasAfterMiddleware: this.hasAfterMiddleware,
482
- hasTransformMiddleware: this.hasTransformMiddleware,
483
- };
130
+ // This is never called - UnifiedRouter handles execution
131
+ // But we implement it for interface compatibility
132
+ throw new Error('ExecutableRoute.execute() should not be called directly - routing handled by UnifiedRouter');
484
133
  }
485
134
  }
486
- // Factory functions for creating routes
135
+ // ===== FACTORY FUNCTIONS (Backward Compatibility) =====
487
136
  export function createRoute(method, path) {
488
137
  return new IntelligentRouteBuilder(method, path);
489
138
  }
490
- // Schema-first route creation
491
139
  export function defineRoute(schema) {
492
140
  return new ExecutableRoute(schema);
493
141
  }
142
+ // ===== RE-EXPORTS FROM UNIFIED ROUTER =====
143
+ export { UnifiedRouter } from './unified-router.js';
144
+ export { RouteBuilder as UnifiedRouteBuilder } from './unified-router.js';
145
+ export { PathMatcher } from './path-matcher.js';
146
+ export { ObjectPoolManager, getPoolManager } from '../pooling/object-pool-manager.js';
494
147
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/routing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/routing/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export interface CompiledPath {
2
+ pattern: RegExp | null;
3
+ paramNames: string[];
4
+ isStatic: boolean;
5
+ path: string;
6
+ segments: number;
7
+ }
8
+ export interface MatchResult {
9
+ params: Record<string, string>;
10
+ }
11
+ /**
12
+ * PathMatcher - Single source of truth for path pattern compilation and matching
13
+ */
14
+ export declare class PathMatcher {
15
+ private static readonly cache;
16
+ private static compilationCount;
17
+ private static cacheHits;
18
+ private static cacheMisses;
19
+ /**
20
+ * Compile a path pattern into an efficient matching structure
21
+ * Results are cached for performance
22
+ */
23
+ static compile(path: string): CompiledPath;
24
+ /**
25
+ * Internal compilation logic
26
+ */
27
+ private static compileInternal;
28
+ /**
29
+ * Match a request path against a compiled pattern
30
+ * Returns match result with extracted parameters, or null if no match
31
+ */
32
+ static match(compiledPath: CompiledPath, requestPath: string): MatchResult | null;
33
+ /**
34
+ * Compile and match in one operation (convenience method)
35
+ */
36
+ static compileAndMatch(pathPattern: string, requestPath: string): MatchResult | null;
37
+ /**
38
+ * Check if a path pattern is static (no parameters)
39
+ */
40
+ static isStatic(path: string): boolean;
41
+ /**
42
+ * Get performance statistics
43
+ */
44
+ static getStats(): {
45
+ cacheSize: number;
46
+ cacheHits: number;
47
+ cacheMisses: number;
48
+ hitRate: number;
49
+ compilationCount: number;
50
+ };
51
+ /**
52
+ * Clear the cache (useful for testing)
53
+ */
54
+ static clearCache(): void;
55
+ /**
56
+ * Pre-compile multiple paths (cache warming)
57
+ */
58
+ static precompile(paths: string[]): void;
59
+ }
60
+ /**
61
+ * Legacy compatibility function - maps to PathMatcher.compile
62
+ * @deprecated Use PathMatcher.compile instead
63
+ */
64
+ export declare function pathToRegex(path: string): {
65
+ pattern: RegExp;
66
+ paramNames: string[];
67
+ };