mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
75 lines
2.0 KiB
JavaScript
Executable File
75 lines
2.0 KiB
JavaScript
Executable File
import fs from "fs"
|
|
|
|
function createRouteHandler(route, fn) {
|
|
if (typeof route !== "string") {
|
|
fn = route
|
|
route = "Unknown route"
|
|
}
|
|
|
|
return async (req, res) => {
|
|
try {
|
|
await fn(req, res)
|
|
} catch (error) {
|
|
console.error(`[ERROR] (${route}) >`, error)
|
|
|
|
return res.status(500).json({
|
|
error: error.message,
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
function createRoutesFromDirectory(startFrom, directoryPath, router) {
|
|
const files = fs.readdirSync(directoryPath)
|
|
|
|
if (typeof router.routes !== "object") {
|
|
router.routes = []
|
|
}
|
|
|
|
files.forEach((file) => {
|
|
const filePath = `${directoryPath}/${file}`
|
|
|
|
const stat = fs.statSync(filePath)
|
|
|
|
if (stat.isDirectory()) {
|
|
createRoutesFromDirectory(startFrom, filePath, router)
|
|
} else if (file.endsWith(".js") || file.endsWith(".jsx") || file.endsWith(".ts") || file.endsWith(".tsx")) {
|
|
let splitedFilePath = filePath.split("/")
|
|
|
|
// slice the startFrom path
|
|
splitedFilePath = splitedFilePath.slice(splitedFilePath.indexOf(startFrom) + 1)
|
|
|
|
const method = splitedFilePath[0]
|
|
|
|
let route = splitedFilePath.slice(1, splitedFilePath.length).join("/")
|
|
|
|
route = route.replace(".jsx", "")
|
|
route = route.replace(".js", "")
|
|
route = route.replace(".ts", "")
|
|
route = route.replace(".tsx", "")
|
|
|
|
if (route.endsWith("/index")) {
|
|
route = route.replace("/index", "")
|
|
}
|
|
|
|
route = `/${route}`
|
|
|
|
let handler = require(filePath)
|
|
|
|
handler = handler.default || handler
|
|
|
|
router[method](route, createRouteHandler(route, handler))
|
|
|
|
//console.log(`[ROUTE] ${method.toUpperCase()} [${route}]`, handler)
|
|
|
|
router.routes.push({
|
|
method,
|
|
path: route,
|
|
})
|
|
}
|
|
})
|
|
|
|
return router
|
|
}
|
|
|
|
export default createRoutesFromDirectory |