@dominion-framework/dominion
Version:
Declarative Promise based Node.js framework for REST API with zero dependencies.
30 lines (22 loc) • 1.14 kB
JavaScript
const Router = require("./../router");
const Errors = require("./../errors");
const allowedMethods = ["GET", "POST", "PUT", "DELETE", "OPTIONS", "WS"];
const getHandlersDefinitions = function (controller) {
const controllerRoot = controller.factory? controller.factory.__model__.name : controller.path;
const permissions = controller.permissions || {};
const controllerHandlers = Object.keys(controller)
.filter((key) => {
if (["path", "factory", "permissions"].includes(key)) {
return false;
}
if (!allowedMethods.includes(key)) {
throw new Errors.Fatal(`Method '${method}' is not recognized. Note, methods should be uppercase.`);
}
return true;
});
return controllerHandlers.reduce((routeHandlers, method) => {
return routeHandlers.concat(controller[method].map(
handler => Router.makeRoute(method, handler, controllerRoot, controller.factory, permissions[method])))
}, []);
};
module.exports = getHandlersDefinitions;