UNPKG

nralcm

Version:

This is a framework based on NodeJs to manage rest api request lifecycle

52 lines (51 loc) 2.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata/Reflect"); const common_1 = require("../common"); const functions_1 = require("../common/functions"); /** * Route Decorator to define routes in controller * @param httpMethod HttpMethod of api * @param route route string for api method */ function Route(httpMethod, route) { return function (target, propertyKey, descriptor) { if (route && route.indexOf("{") >= 0 && route.indexOf("}") >= 0) { const routeParts = route.startsWith("/") ? route.substring(1).split("/") : route.split("/"); const methodParameters = functions_1.getMethodParameters(descriptor.value, propertyKey); routeParts.forEach(ro => { const openCurlyBraceIndex = ro.indexOf("{"); const closeCurlyBraceIndex = ro.indexOf("}"); if (openCurlyBraceIndex >= 0 && closeCurlyBraceIndex >= 0) { const paramName = ro.substring(openCurlyBraceIndex + 1, closeCurlyBraceIndex); if (methodParameters.findIndex(p => p === paramName) === -1) { throw new Error(`Paramerter ${paramName} is missing in method ${propertyKey}`); } } }); } if (httpMethod === common_1.HttpMethod.GET) { const methodParametersType = Reflect.getMetadata("design:paramtypes", target, propertyKey); if (methodParametersType && methodParametersType.length) { methodParametersType.forEach(type => { if (!(type.name === "Number" || type.name === "String" || type.name === "Boolean" || !(type.constructor && type.constructor.name === "Date"))) { throw new Error(`Get request method ${propertyKey} cannot have ${type.name} as parameter`); } }); } } const routeDescriptor = { route: route || propertyKey, descriptor: descriptor, methodName: propertyKey, httpMethod: httpMethod }; // injecting all routes of controller in metadata const routeDescriptors = Reflect.getMetadata("routes", target) ? Reflect.getMetadata("routes", target) : []; routeDescriptors.push(routeDescriptor); Reflect.defineMetadata("routes", routeDescriptors, target); }; } exports.Route = Route;