UNPKG

@iredium/butterfly

Version:
152 lines (151 loc) 5.58 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RouteDrawer = void 0; var express_1 = require("express"); var controller_handler_1 = require("./controller_handler"); var is_class_1 = require("../helpers/is_class"); var pluralize = require("pluralize"); var RouteDrawer = /** @class */ (function () { function RouteDrawer() { this.router = express_1.Router(); } RouteDrawer.prototype.draw = function (router, c) { this.router = router; if (c) c(this); }; RouteDrawer.prototype.getActions = function (param) { return { index: { path: '/', method: 'get' }, show: { path: "/:" + param, method: 'get' }, create: { path: '/', method: 'post' }, update: { path: "/:" + param, method: 'patch' }, destroy: { path: "/:" + param, method: 'delete' }, restore: { path: "/:" + param + "/restore", method: 'patch' } }; }; RouteDrawer.prototype.resources = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (args.length < 2) throw Error("Expect minimal 2 arguments, got " + args.length); var router = express_1.Router(); var hasCallback = args.length > 2 && !is_class_1.isClass(args[args.length - 1]); var basePath = args[0]; var c = hasCallback ? args[args.length - 1] : null; var ControllerClass = hasCallback ? args[args.length - 2] : args[args.length - 1]; var middlewares = hasCallback ? args.splice(1, args.length - 3).map(function (o) { return o.get ? o.get() : o; }) : args.splice(1, args.length - 2).map(function (o) { return o.get ? o.get() : o; }); var path = basePath.split('/'); var param = pluralize.singular(path[path.length - 1]); var actions = this.getActions(param); console.log({ path: args[0], middlewares: middlewares, ControllerClass: ControllerClass }); for (var key in actions) { var m = [].concat(middlewares); var action = actions[key]; m.push(controller_handler_1.controllerHandler(ControllerClass, key)); router[action.method].apply(router, __spreadArray([action.path], m)); } this.router.use(basePath, router); var route = new RouteDrawer(); if (c) route.draw(router, c); }; RouteDrawer.prototype.group = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var router = express_1.Router(); var basePath = args[0]; var c = args[args.length - 1]; var middlewares = args.splice(1, args.length - 2).map(function (o) { return o.get ? o.get() : o; }); (_a = this.router).use.apply(_a, __spreadArray([basePath], middlewares)); var route = new RouteDrawer(); if (c) route.draw(router, c); }; RouteDrawer.prototype.use = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('use', args); }; RouteDrawer.prototype.options = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('options', args); }; RouteDrawer.prototype.get = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('get', args); }; RouteDrawer.prototype.post = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('post', args); }; RouteDrawer.prototype.patch = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('patch', args); }; RouteDrawer.prototype.put = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('put', args); }; RouteDrawer.prototype.delete = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this.handleMethod('delete', args); }; RouteDrawer.prototype.handleMethod = function (method, args) { var _a; var path = args[0]; var middlewares = args.filter(function (o) { return o; }).splice(1, args.length - 1).map(function (o) { return o.get ? o.get() : o; }); return (_a = this.router)[method].apply(_a, __spreadArray([path], middlewares)); }; return RouteDrawer; }()); exports.RouteDrawer = RouteDrawer; exports.default = new RouteDrawer();