mirror of https://github.com/BRAVO68WEB/shx.git
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import path from 'path';
|
|
import { readdirSync } from 'fs';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
|
|
import { Router } from 'express';
|
|
|
|
const router = Router();
|
|
|
|
const isCompiled = path.extname(__filename) === '.js';
|
|
const thisFileName = path.basename(__filename);
|
|
|
|
const loadRoutes = async (dirPath: string, prefix = '/') => {
|
|
readdirSync(dirPath, {
|
|
withFileTypes: true,
|
|
}).forEach(async f => {
|
|
if (f.isFile()) {
|
|
if (f.name == thisFileName) return;
|
|
|
|
const isRouteMod = f.name.endsWith(`.routes.${isCompiled ? 'js' : 'ts'}`);
|
|
if (isRouteMod) {
|
|
const route = f.name.replace(`.routes.${isCompiled ? 'js' : 'ts'}`, '');
|
|
const modRoute = path.join(prefix, route);
|
|
console.log('🛰️', 'Loaded', modRoute);
|
|
|
|
const mod = await import(path.join(baseDir, prefix + f.name));
|
|
router.use(modRoute, mod.default);
|
|
}
|
|
} else if (f.isDirectory()) {
|
|
await loadRoutes(path.resolve(dirPath, f.name), prefix + f.name + '/');
|
|
}
|
|
});
|
|
};
|
|
|
|
let baseDir = path.dirname(__filename);
|
|
baseDir = path.resolve(baseDir);
|
|
|
|
loadRoutes(baseDir);
|
|
export default router;
|