@iredium/butterfly
Version:
Express API Framework
152 lines (151 loc) • 5.58 kB
JavaScript
;
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();