node-rigorous
Version:
Rigorous Framework
75 lines (55 loc) • 2.75 kB
JavaScript
/**
* Autoriser le require dynamique
* Impact -> https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
*/
/* eslint global-require: 0 */ // --> OFF
/* eslint import/no-dynamic-require: 0 */ // --> OFF
const fs = require('fs');
function isModelDirectory(directory) {
return (directory.indexOf('.') === -1 && directory.indexOf('__') === -1);
}
function isRouteFile(file) {
return (file.indexOf('.js') > -1 && file.indexOf('__') === -1);
}
function isValidRouteFile(name) {
return (name !== ''
&& (
name.indexOf('post_') > -1 || name.indexOf('get_') > -1
|| name.indexOf('update_') > -1 || name.indexOf('put_') > -1
));
}
function getRoutelFileName(file) {
return file.substr(0, file.length - 3); // 3 = .js
}
module.exports = {
init: (app, apiVersion, PATH_ROUTES) => {
return new Promise((resolve, reject) => {
fs.readdirSync(PATH_ROUTES).forEach((directory) => {
if (isModelDirectory(directory)) {
fs.readdirSync(`${PATH_ROUTES}/${directory}`).forEach((file) => {
if (isRouteFile(file)) {
const name = getRoutelFileName(file);
try {
if (isValidRouteFile(name)) {
// './post_me.update.byid.title'
const indexDelimiter = name.indexOf('_'); // post_me.update....
const typeRequest = name.substr(0, indexDelimiter); // 'post'
const partialRouteName = name.substr(indexDelimiter + 1, name.length).split('.').join('/'); // me.update... -> ['me', 'update', 'byid', 'title'] -> me/update/byid/title
const routeName = `/api/v${apiVersion}/${directory}/${partialRouteName}`; // /switlist/me/update/byid/title
const Route = require(`${PATH_ROUTES}/${directory}/${name}`);
console.log('Route ', routeName);
new Route().routeIt(app, typeRequest, routeName);
}
} catch (err) {
console.log(`Model ${name} failed to load:'`, err);
return reject(err);
}
}
return null;
});
}
});
return resolve();
});
},
};