file-routing-expressjs
Version:
A dependency-free, flexible, system-based file routing for Express.
1 lines • 6.13 kB
Source Map (JSON)
{"version":3,"sources":["../../src/helpers/cli.ts"],"sourcesContent":["import { RouteEndpoint, RouteEndpoints } from \"../types\";\nimport { color, colors } from \"./logging\";\n\nfunction methodColor(method: string): keyof typeof colors {\n switch (method.toLowerCase()) {\n case \"get\": return \"green\";\n case \"post\": return \"blue\";\n case \"put\": return \"yellow\";\n case \"delete\": return \"red\";\n case \"patch\": return \"magenta\";\n default: return \"cyan\";\n }\n}\n\nfunction pad(str: string, len: number) {\n return str + \" \".repeat(Math.max(0, len - str.length));\n}\n\nexport function flattenRoutes(nodes: RouteEndpoints): RouteEndpoints {\n const result: RouteEndpoints = [];\n\n function walk(node: RouteEndpoint) {\n if (node.method !== \"-\") {\n result.push(node);\n }\n\n if (node.children?.length) {\n node.children.forEach(walk);\n }\n }\n\n nodes.forEach(walk);\n return result;\n}\n\nexport function printTree(nodes: RouteEndpoints, indent = \"\") {\n for (const node of nodes) {\n const isGroup = node.method === \"-\";\n\n const method = node.method?.toUpperCase();\n\n const methodColored = method\n ? color(`[${method}]`, methodColor(method))\n : \"\";\n\n const label = isGroup\n ? color(node.endpoint, \"bold\")\n : `${methodColored} ${node.endpoint}`;\n\n console.log(`${indent}${label}`);\n\n if (!isGroup) {\n if (node.middlewares?.length) {\n console.log(\n `${indent} ${color(\"├─\", \"gray\")} ${color(\"middlewares:\", \"cyan\")} ${node.middlewares.join(\", \")}`\n );\n }\n\n if (node.plugins?.length) {\n console.log(\n `${indent} ${color(\"├─\", \"gray\")} ${color(\"plugins:\", \"magenta\")} ${node.plugins.join(\", \")}`\n );\n }\n\n if (node.errorHandler && node.errorHandler !== \"-\") {\n console.log(\n `${indent} ${color(\"└─\", \"gray\")} ${color(\"error:\", \"red\")} ${node.errorHandler}`\n );\n }\n }\n\n if (node.children?.length) {\n printTree(node.children, indent + \" \");\n }\n }\n}\n\nexport function printTable(endpoints: RouteEndpoints) {\n const headers = [\"Method\", \"URI\", \"Name\", \"Middleware\", \"Plugins\", \"Error\"];\n const widths = headers.map(h => h.length);\n const rows = flattenRoutes(endpoints);\n\n for (const row of rows) {\n const values = [\n row.method,\n row.endpoint,\n row.name,\n row.middlewares.join(\", \") || \"-\",\n row.plugins.join(\", \") || \"-\",\n row.errorHandler\n ];\n\n values.forEach((v, i) => {\n widths[i] = Math.max(widths[i], String(v).length);\n });\n }\n\n const line = (char: string) =>\n \"+\" + widths.map(w => char.repeat(w + 2)).join(\"+\") + \"+\";\n\n const printRow = (cols: string[], colorize = false) => {\n const row = cols.map((c, i) => pad(c, widths[i])).join(\" | \");\n const content = `| ${row} |`;\n return colorize ? color(content, \"green\") : content;\n };\n\n console.log(color(line(\"-\"), \"green\"));\n console.log(printRow(headers, true));\n console.log(color(line(\"-\"), \"green\"));\n\n for (const row of rows) {\n console.log(printRow([\n row.method,\n row.endpoint,\n row.name,\n row.middlewares.join(\", \") || \"-\",\n row.plugins.join(\", \") || \"-\",\n row.errorHandler\n ], true));\n }\n\n console.log(color(line(\"-\"), \"green\"));\n}"],"mappings":"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","names":[]}