diff --git a/packages/cli-uwf/src/format.ts b/packages/cli-uwf/src/format.ts index 0b80f26..ff339f4 100644 --- a/packages/cli-uwf/src/format.ts +++ b/packages/cli-uwf/src/format.ts @@ -2,21 +2,33 @@ import { stringify } from "yaml"; export type OutputFormat = "json" | "yaml" | "table"; -function formatTable(data: Array>): string { +function formatHorizontalTable(data: Array>): string { if (data.length === 0) return ""; const keys = Object.keys(data[0]); const widths = keys.map((k) => { - let max = 0; + let max = k.length; for (const row of data) { const len = String(row[k] ?? "").length; if (len > max) max = len; } return max; }); + const header = keys.map((k, i) => k.toUpperCase().padEnd(widths[i])).join(" "); const rows = data.map((row) => keys.map((k, i) => String(row[k] ?? "").padEnd(widths[i])).join(" "), ); - return rows.join("\n"); + return [header, ...rows].join("\n"); +} + +function formatVerticalTable(data: Record): string { + const entries = Object.entries(data); + if (entries.length === 0) return ""; + const keyWidth = Math.max(...entries.map(([k]) => k.length)); + const header = `${"KEY".padEnd(keyWidth)} VALUE`; + const rows = entries.map( + ([k, v]) => `${k.padEnd(keyWidth)} ${typeof v === "object" ? JSON.stringify(v) : String(v)}`, + ); + return [header, ...rows].join("\n"); } export function formatOutput(data: unknown, format: OutputFormat): string { @@ -26,8 +38,16 @@ export function formatOutput(data: unknown, format: OutputFormat): string { case "yaml": return stringify(data).trimEnd(); case "table": - if (Array.isArray(data) && data.length > 0 && typeof data[0] === "object" && data[0] !== null) { - return formatTable(data as Array>); + if ( + Array.isArray(data) && + data.length > 0 && + typeof data[0] === "object" && + data[0] !== null + ) { + return formatHorizontalTable(data as Array>); + } + if (typeof data === "object" && data !== null && !Array.isArray(data)) { + return formatVerticalTable(data as Record); } return stringify(data).trimEnd(); }