UNPKG

@zerooneit/expressive-tea

Version:
63 lines (62 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.router = exports.generateRoute = exports.extractParameters = exports.mapArguments = exports.autoResponse = void 0; const lodash_1 = require("lodash"); const MetaData_1 = require("../classes/MetaData"); const constants_1 = require("../libs/constants"); function autoResponse(request, response, annotations, responseResult) { const view = (0, lodash_1.find)(annotations, { type: 'view' }); if (view) { return response.render(view.arguments[0], responseResult); } response.send((0, lodash_1.isNumber)(responseResult) ? responseResult.toString() : responseResult); } exports.autoResponse = autoResponse; function mapArguments(decoratedArguments, request, response, next) { return (0, lodash_1.chain)(decoratedArguments) .sortBy('index') .map((argument) => { switch (argument.type) { case constants_1.ARGUMENT_TYPES.REQUEST: return request; case constants_1.ARGUMENT_TYPES.RESPONSE: return response; case constants_1.ARGUMENT_TYPES.NEXT: return next; case constants_1.ARGUMENT_TYPES.QUERY: return extractParameters(request.query, argument.arguments); case constants_1.ARGUMENT_TYPES.BODY: return extractParameters(request.body, argument.arguments); case constants_1.ARGUMENT_TYPES.GET_PARAM: return extractParameters(request.params, argument.arguments); default: return; } }) .thru((args) => (0, lodash_1.size)(args) ? args : [request, response, next]) .value(); } exports.mapArguments = mapArguments; function extractParameters(target, args) { if (!args && !target) { return; } if (!args) { return target; } if (Array.isArray(args)) { return (0, lodash_1.pick)(target, args); } return (0, lodash_1.get)(target, args); } exports.extractParameters = extractParameters; function generateRoute(route, verb) { return (target, propertyKey, descriptor) => router(verb, route, target, descriptor.value, propertyKey); } exports.generateRoute = generateRoute; function router(verb, route, target, handler, propertyKey) { const existedRoutesHandlers = MetaData_1.default.get(constants_1.ROUTER_HANDLERS_KEY, target) || []; existedRoutesHandlers.unshift({ verb, route, handler, target, propertyKey }); MetaData_1.default.set(constants_1.ROUTER_HANDLERS_KEY, existedRoutesHandlers, target); } exports.router = router;