45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import type { CommandOutput, OutputFormat, Writer } from "./types.js";
|
|
|
|
function renderText(payload: CommandOutput<unknown>) {
|
|
const data = payload.data as Record<string, unknown>;
|
|
|
|
if (Array.isArray(data?.issues)) {
|
|
return data.issues
|
|
.map((issue) => {
|
|
const item = issue as Record<string, string>;
|
|
return `${item.key} [${item.status}] ${item.issueType} - ${item.summary}`;
|
|
})
|
|
.join("\n");
|
|
}
|
|
|
|
if (data?.issue && typeof data.issue === "object") {
|
|
const issue = data.issue as Record<string, string>;
|
|
return [
|
|
issue.key,
|
|
`${issue.issueType} | ${issue.status}`,
|
|
issue.summary,
|
|
issue.url,
|
|
].join("\n");
|
|
}
|
|
|
|
if (Array.isArray(data?.transitions)) {
|
|
return data.transitions
|
|
.map((transition) => {
|
|
const item = transition as Record<string, string>;
|
|
return `${item.id} ${item.name} -> ${item.toStatus}`;
|
|
})
|
|
.join("\n");
|
|
}
|
|
|
|
return JSON.stringify(payload, null, 2);
|
|
}
|
|
|
|
export function writeOutput(
|
|
writer: Writer,
|
|
payload: CommandOutput<unknown>,
|
|
format: OutputFormat = "json",
|
|
) {
|
|
const body = format === "text" ? renderText(payload) : JSON.stringify(payload, null, 2);
|
|
writer.write(`${body}\n`);
|
|
}
|