/**
* Output formatting for pgh CLI.
*/
export function formatOutput (data, format) {
if (format === 'json') return JSON.stringify(data, null, 2)
if (format === 'plain') return formatPlain(data)
return formatTable(data)
}
function formatPlain (data) {
if (typeof data === 'string') return data
if (Array.isArray(data)) return data.map(formatPlain).join('\n')
if (typeof data === 'object' && data !== null) {
return Object.entries(data)
.map(([k, v]) => `${k}: ${typeof v === 'object' ? JSON.stringify(v) : v}`)
.join('\n')
}
return String(data)
}
function cellString (v) {
if (v === null || v === undefined) return ''
if (typeof v === 'object') return JSON.stringify(v)
return String(v)
}
function formatTable (data) {
if (typeof data === 'string') return data
if (Array.isArray(data)) {
if (data.length === 0) return '(empty)'
const keys = Object.keys(data[0])
const widths = keys.map(k =>
Math.max(k.length, ...data.map(r => cellString(r[k]).length))
)
const header = keys.map((k, i) => k.padEnd(widths[i])).join(' ')
const sep = widths.map(w => '-'.repeat(w)).join(' ')
const rows = data.map(r =>
keys.map((k, i) => cellString(r[k]).padEnd(widths[i])).join(' ')
)
return [header, sep, ...rows].join('\n')
}
return formatPlain(data)
}