shx/routes/index.ts

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;