{"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":[]}