routing-controllers
Version:
Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage for Express / Koa using TypeScript.
32 lines • 1.26 kB
JavaScript
import * as path from 'path';
/**
* Loads all exported classes from the given directory.
*/
export function importClassesFromDirectories(directories, formats = ['.js', '.ts', '.tsx']) {
const loadFileClasses = function (exported, allLoaded) {
if (exported instanceof Function) {
allLoaded.push(exported);
}
else if (exported instanceof Array) {
exported.forEach((i) => loadFileClasses(i, allLoaded));
}
else if (exported instanceof Object || typeof exported === 'object') {
Object.keys(exported).forEach(key => loadFileClasses(exported[key], allLoaded));
}
return allLoaded;
};
const allFiles = directories.reduce((allDirs, dir) => {
// Replace \ with / for glob
return allDirs.concat(require('glob').sync(path.normalize(dir).replace(/\\/g, '/')));
}, []);
const dirs = allFiles
.filter(file => {
const dtsExtension = file.substring(file.length - 5, file.length);
return formats.indexOf(path.extname(file)) !== -1 && dtsExtension !== '.d.ts';
})
.map(file => {
return require(file);
});
return loadFileClasses(dirs, []);
}
//# sourceMappingURL=importClassesFromDirectories.js.map