UNPKG

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
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