@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.
- package/dist/core/config/config-sources.js +4 -0
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +3 -0
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/config/file-loader.js +3 -1
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/schema.js +4 -1
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/events/event-bus.js +1 -1
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/framework.d.ts +1 -1
- package/dist/core/framework.js +13 -7
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +55 -15
- package/dist/core/http/http-server.js +70 -146
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/index.d.ts +1 -1
- package/dist/core/http/index.js +1 -1
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +4 -22
- package/dist/core/http/uws-http-server.js +43 -208
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +1 -1
- package/dist/core/pooling/object-pool-manager.d.ts +140 -0
- package/dist/core/pooling/object-pool-manager.js +502 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -0
- package/dist/core/routing/app-integration.d.ts +12 -10
- package/dist/core/routing/app-integration.js +43 -74
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +15 -29
- package/dist/core/routing/index.js +43 -390
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/path-matcher.d.ts +67 -0
- package/dist/core/routing/path-matcher.js +182 -0
- package/dist/core/routing/path-matcher.js.map +1 -0
- package/dist/core/{http → routing}/router.d.ts +21 -9
- package/dist/core/routing/router.js +68 -0
- package/dist/core/routing/router.js.map +1 -0
- package/dist/core/routing/unified-router.d.ts +148 -0
- package/dist/core/routing/unified-router.js +684 -0
- package/dist/core/routing/unified-router.js.map +1 -0
- package/dist/moro.d.ts +10 -7
- package/dist/moro.js +90 -41
- package/dist/moro.js.map +1 -1
- package/dist/types/config.d.ts +3 -0
- package/package.json +1 -1
- package/src/core/config/config-sources.ts +4 -0
- package/src/core/config/config-validator.ts +3 -0
- package/src/core/config/file-loader.ts +4 -1
- package/src/core/config/schema.ts +4 -1
- package/src/core/events/event-bus.ts +1 -1
- package/src/core/framework.ts +14 -9
- package/src/core/http/http-server.ts +76 -161
- package/src/core/http/index.ts +1 -1
- package/src/core/http/uws-http-server.ts +43 -246
- package/src/core/networking/adapters/uws-adapter.ts +1 -1
- package/src/core/pooling/object-pool-manager.ts +630 -0
- package/src/core/routing/app-integration.ts +57 -109
- package/src/core/routing/index.ts +62 -473
- package/src/core/routing/path-matcher.ts +222 -0
- package/src/core/routing/router.ts +97 -0
- package/src/core/routing/unified-router.ts +870 -0
- package/src/moro.ts +107 -57
- package/src/types/config.ts +3 -0
- package/dist/core/http/router.js +0 -183
- package/dist/core/http/router.js.map +0 -1
- package/src/core/http/router.ts +0 -230
|
@@ -1,73 +1,41 @@
|
|
|
1
1
|
// Integration layer for intelligent routing system with main Moro app
|
|
2
2
|
// Provides both chainable and schema-first APIs
|
|
3
|
+
//
|
|
4
|
+
// NOTE: This is now a thin facade to UnifiedRouter
|
|
5
|
+
// All routing logic has been consolidated in unified-router.ts
|
|
3
6
|
import { createRoute, defineRoute, } from './index.js';
|
|
7
|
+
import { UnifiedRouter } from './unified-router.js';
|
|
4
8
|
import { createFrameworkLogger } from '../logger/index.js';
|
|
5
9
|
const logger = createFrameworkLogger('AppIntegration');
|
|
6
|
-
//
|
|
10
|
+
// ===== RouteRegistry (Public API - Backward Compatibility) =====
|
|
11
|
+
/**
|
|
12
|
+
* RouteRegistry - Facade to UnifiedRouter for backward compatibility
|
|
13
|
+
* This was part of the public API, so we maintain it as an alias
|
|
14
|
+
*/
|
|
7
15
|
export class RouteRegistry {
|
|
8
|
-
|
|
9
|
-
routePatterns = [];
|
|
16
|
+
router = UnifiedRouter.getInstance();
|
|
10
17
|
register(route) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// Convert path to regex pattern for matching
|
|
14
|
-
const { pattern, paramNames } = this.pathToRegex(route.schema.path);
|
|
15
|
-
this.routePatterns.push({
|
|
16
|
-
pattern,
|
|
17
|
-
route,
|
|
18
|
-
method: route.schema.method,
|
|
19
|
-
paramNames,
|
|
20
|
-
});
|
|
21
|
-
logger.debug(`Registered route: ${key}`, 'RouteRegistry', {
|
|
22
|
-
path: route.schema.path,
|
|
23
|
-
hasValidation: !!route.schema.validation,
|
|
24
|
-
hasAuth: !!route.schema.auth,
|
|
25
|
-
hasRateLimit: !!route.schema.rateLimit,
|
|
26
|
-
});
|
|
18
|
+
// Routes are automatically registered with UnifiedRouter when created
|
|
19
|
+
// This is a no-op for API compatibility
|
|
27
20
|
}
|
|
28
21
|
async handleRequest(req, res) {
|
|
29
|
-
|
|
30
|
-
const path = req.path;
|
|
31
|
-
// Find matching route
|
|
32
|
-
for (const routePattern of this.routePatterns) {
|
|
33
|
-
if (routePattern.method === method && routePattern.pattern.test(path)) {
|
|
34
|
-
// Extract path parameters
|
|
35
|
-
const matches = path.match(routePattern.pattern);
|
|
36
|
-
if (matches) {
|
|
37
|
-
req.params = {};
|
|
38
|
-
routePattern.paramNames.forEach((name, index) => {
|
|
39
|
-
req.params[name] = matches[index + 1];
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
// Execute the route
|
|
43
|
-
await routePattern.route.execute(req, res);
|
|
44
|
-
return true; // Route handled
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return false; // No route matched
|
|
22
|
+
return this.router.handleRequest(req, res);
|
|
48
23
|
}
|
|
49
24
|
getRoutes() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
.replace(/:([^/]+)/g, (match, paramName) => {
|
|
58
|
-
paramNames.push(paramName);
|
|
59
|
-
return '([^/]+)'; // Match parameter value
|
|
60
|
-
});
|
|
61
|
-
return {
|
|
62
|
-
pattern: new RegExp(`^${regexPath}$`),
|
|
63
|
-
paramNames,
|
|
64
|
-
};
|
|
25
|
+
const routes = this.router.getAllRoutes();
|
|
26
|
+
return routes.map(routeSchema => ({
|
|
27
|
+
schema: routeSchema,
|
|
28
|
+
execute: async (_req, _res) => {
|
|
29
|
+
throw new Error('CompiledRoute.execute() not used - routing handled by UnifiedRouter');
|
|
30
|
+
},
|
|
31
|
+
}));
|
|
65
32
|
}
|
|
66
33
|
}
|
|
67
34
|
// Intelligent routing manager class
|
|
35
|
+
// Now a thin facade to UnifiedRouter
|
|
68
36
|
export class IntelligentRoutingManager {
|
|
69
|
-
|
|
70
|
-
// Chainable route methods
|
|
37
|
+
router = UnifiedRouter.getInstance();
|
|
38
|
+
// Chainable route methods - delegate to createRoute
|
|
71
39
|
get(path) {
|
|
72
40
|
return this.createChainableRoute('GET', path);
|
|
73
41
|
}
|
|
@@ -95,26 +63,34 @@ export class IntelligentRoutingManager {
|
|
|
95
63
|
this.register(compiledRoute);
|
|
96
64
|
return compiledRoute;
|
|
97
65
|
}
|
|
98
|
-
// Register compiled route
|
|
99
|
-
register(
|
|
100
|
-
|
|
66
|
+
// Register compiled route (no-op, already registered by defineRoute)
|
|
67
|
+
register(_route) {
|
|
68
|
+
// Routes are automatically registered with UnifiedRouter in defineRoute()
|
|
69
|
+
// This is just for API compatibility
|
|
101
70
|
}
|
|
102
|
-
// Handle incoming requests
|
|
71
|
+
// Handle incoming requests - delegates to UnifiedRouter
|
|
103
72
|
async handleIntelligentRoute(req, res) {
|
|
104
|
-
return
|
|
73
|
+
return this.router.handleRequest(req, res);
|
|
105
74
|
}
|
|
106
|
-
// Get all registered routes
|
|
75
|
+
// Get all registered routes - fetch from UnifiedRouter
|
|
107
76
|
getIntelligentRoutes() {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
77
|
+
// Convert UnifiedRouter's internal routes to CompiledRoute format for docs
|
|
78
|
+
const routes = this.router.getAllRoutes();
|
|
79
|
+
return routes.map(routeSchema => ({
|
|
80
|
+
schema: routeSchema, // Cast to match CompiledRoute interface
|
|
81
|
+
execute: async (_req, _res) => {
|
|
82
|
+
// Not used - routing handled by UnifiedRouter
|
|
83
|
+
throw new Error('CompiledRoute.execute() not used - routing handled by UnifiedRouter');
|
|
84
|
+
},
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
// Direct route method (deprecated but kept for compatibility)
|
|
111
88
|
directRoute(method, path, handler, options) {
|
|
112
89
|
logger.warn('Using deprecated direct route method', 'DirectRoute', {
|
|
113
90
|
method,
|
|
114
91
|
path,
|
|
115
92
|
suggestion: 'Use chainable or schema-first API instead',
|
|
116
93
|
});
|
|
117
|
-
// Convert direct options to new schema format
|
|
118
94
|
const schema = {
|
|
119
95
|
method: method.toUpperCase(),
|
|
120
96
|
path,
|
|
@@ -129,15 +105,8 @@ export class IntelligentRoutingManager {
|
|
|
129
105
|
this.route(schema);
|
|
130
106
|
}
|
|
131
107
|
createChainableRoute(method, path) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const originalHandler = builder.handler.bind(builder);
|
|
135
|
-
builder.handler = (handler) => {
|
|
136
|
-
const compiledRoute = originalHandler(handler);
|
|
137
|
-
this.register(compiledRoute);
|
|
138
|
-
return compiledRoute;
|
|
139
|
-
};
|
|
140
|
-
return builder;
|
|
108
|
+
// Just create and return the builder - it auto-registers with UnifiedRouter
|
|
109
|
+
return createRoute(method, path);
|
|
141
110
|
}
|
|
142
111
|
}
|
|
143
112
|
//# sourceMappingURL=app-integration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-integration.js","sourceRoot":"","sources":["../../../src/core/routing/app-integration.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,gDAAgD;
|
|
1
|
+
{"version":3,"file":"app-integration.js","sourceRoot":"","sources":["../../../src/core/routing/app-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,14 +65,19 @@ export interface RouteBuilder {
|
|
|
65
65
|
use(...middleware: Middleware[]): RouteBuilder;
|
|
66
66
|
describe(description: string): RouteBuilder;
|
|
67
67
|
tag(...tags: string[]): RouteBuilder;
|
|
68
|
-
handler<T>(handler: RouteHandler<T>):
|
|
68
|
+
handler<T>(handler: RouteHandler<T>): void;
|
|
69
69
|
}
|
|
70
70
|
export interface CompiledRoute {
|
|
71
71
|
schema: RouteSchema;
|
|
72
72
|
execute(req: HttpRequest, res: HttpResponse): Promise<void>;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Thin facade to UnifiedRouter.RouteBuilder
|
|
76
|
+
* Maintains backward compatibility while using optimized implementation
|
|
77
|
+
*/
|
|
74
78
|
export declare class IntelligentRouteBuilder implements RouteBuilder {
|
|
75
79
|
private schema;
|
|
80
|
+
private router;
|
|
76
81
|
constructor(method: HttpMethod, path: string);
|
|
77
82
|
validate(config: ValidationConfig): RouteBuilder;
|
|
78
83
|
body<T>(schema: ValidationSchema<T>): RouteBuilder;
|
|
@@ -88,39 +93,20 @@ export declare class IntelligentRouteBuilder implements RouteBuilder {
|
|
|
88
93
|
use(...middleware: Middleware[]): RouteBuilder;
|
|
89
94
|
describe(description: string): RouteBuilder;
|
|
90
95
|
tag(...tags: string[]): RouteBuilder;
|
|
91
|
-
handler<T>(handler: RouteHandler<T>):
|
|
96
|
+
handler<T>(handler: RouteHandler<T>): void;
|
|
92
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Thin facade implementing CompiledRoute interface
|
|
100
|
+
* Just stores schema for documentation purposes
|
|
101
|
+
*/
|
|
93
102
|
export declare class ExecutableRoute implements CompiledRoute {
|
|
94
103
|
readonly schema: RouteSchema;
|
|
95
|
-
private readonly requiresAuth;
|
|
96
|
-
private readonly requiresValidation;
|
|
97
|
-
private readonly requiresRateLimit;
|
|
98
|
-
private readonly requiresCache;
|
|
99
|
-
private readonly hasBeforeMiddleware;
|
|
100
|
-
private readonly hasAfterMiddleware;
|
|
101
|
-
private readonly hasTransformMiddleware;
|
|
102
|
-
private readonly isFastPath;
|
|
103
104
|
constructor(schema: RouteSchema);
|
|
104
105
|
execute(req: HttpRequest, res: HttpResponse): Promise<void>;
|
|
105
|
-
private executePhase;
|
|
106
|
-
private executeMiddleware;
|
|
107
|
-
private executeRateLimit;
|
|
108
|
-
private executeAuth;
|
|
109
|
-
private executeValidation;
|
|
110
|
-
private sendValidationError;
|
|
111
|
-
private executeCache;
|
|
112
|
-
getPerformanceInfo(): {
|
|
113
|
-
path: string;
|
|
114
|
-
method: HttpMethod;
|
|
115
|
-
isFastPath: boolean;
|
|
116
|
-
requiresAuth: boolean;
|
|
117
|
-
requiresValidation: boolean;
|
|
118
|
-
requiresRateLimit: boolean;
|
|
119
|
-
requiresCache: boolean;
|
|
120
|
-
hasBeforeMiddleware: boolean;
|
|
121
|
-
hasAfterMiddleware: boolean;
|
|
122
|
-
hasTransformMiddleware: boolean;
|
|
123
|
-
};
|
|
124
106
|
}
|
|
125
107
|
export declare function createRoute(method: HttpMethod, path: string): RouteBuilder;
|
|
126
108
|
export declare function defineRoute(schema: RouteSchema): CompiledRoute;
|
|
109
|
+
export { UnifiedRouter } from './unified-router.js';
|
|
110
|
+
export { RouteBuilder as UnifiedRouteBuilder } from './unified-router.js';
|
|
111
|
+
export { PathMatcher, type CompiledPath, type MatchResult } from './path-matcher.js';
|
|
112
|
+
export { ObjectPoolManager, getPoolManager } from '../pooling/object-pool-manager.js';
|