redis-smq-rest-api
Version:
REST API for RedisSMQ: OpenAPI 3 schema and Swagger UI for managing queues, messages, and consumers.
44 lines • 1.98 kB
JavaScript
import * as path from 'path/posix';
function isRouterResourceDescription(resource) {
return (!!resource &&
typeof resource === 'object' &&
'handler' in resource &&
typeof resource.handler === 'function');
}
function extractControllerMetadata(handlerFunction, pathSegments) {
const handlerName = handlerFunction.name;
const fullRoutePath = path.resolve(...pathSegments);
return {
controllerRoutePath: fullRoutePath,
controllerName: handlerName,
controller: handlerFunction,
};
}
export async function parseRoutingMap(routingDefinition, callbackFn, accumulatedPath = [], accumulatedTags = []) {
try {
if (Array.isArray(routingDefinition)) {
for (const routeItem of routingDefinition) {
await parseRoutingMap(routeItem, callbackFn, accumulatedPath, accumulatedTags);
}
}
else if (isRouterResourceDescription(routingDefinition)) {
const { handler, description, method, payload } = routingDefinition;
const { controller, controllerName, controllerRoutePath } = extractControllerMetadata(handler, accumulatedPath);
const applicableTags = accumulatedTags
.filter((tagSet) => tagSet.length)
.at(-1);
await callbackFn(controller, controllerName, method, payload, controllerRoutePath, description, applicableTags);
}
else {
const { path: routePathSegment, tags = [], resource } = routingDefinition;
const updatedPath = [...accumulatedPath, routePathSegment];
const updatedTags = [...accumulatedTags, tags];
await parseRoutingMap(resource, callbackFn, updatedPath, updatedTags);
}
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
throw new Error(`Error parsing routing map: ${errorMessage}`);
}
}
//# sourceMappingURL=parser.js.map