import chalk from 'chalk'; import { ConfluenceClient } from '../../lib/confluence-client/index.js'; import { ConfigManager } from '../../lib/config.js'; import { EXIT_CODES } from '../../lib/errors.js'; import { escapeXml } from '../../lib/formatters.js'; import { resolvePageTarget } from '../../lib/resolve-page-target.js'; export interface InfoCommandOptions { xml?: boolean; } export async function infoCommand(target: string, options: InfoCommandOptions = {}): Promise { const configManager = new ConfigManager(); const config = await configManager.getConfig(); if (!config) { console.error(chalk.red('Not configured. Run: cn setup')); process.exit(EXIT_CODES.CONFIG_ERROR); } const pageId = resolvePageTarget(target); const client = new ConfluenceClient(config); const [page, labels] = await Promise.all([client.getPage(pageId, false), client.getAllLabels(pageId)]); if (options.xml) { console.log(''); console.log(` ${escapeXml(page.id)}`); console.log(` ${escapeXml(page.title)}`); console.log(` ${escapeXml(page.spaceId)}`); if (page.status) console.log(` ${escapeXml(page.status)}`); if (page.parentId) console.log(` ${escapeXml(page.parentId)}`); if (page.version) console.log(` ${page.version.number}`); if (page._links?.webui) console.log(` ${escapeXml(`${config.confluenceUrl}/wiki${page._links.webui}`)}`); if (labels.length > 0) { console.log(' '); for (const label of labels) { console.log(` `); } console.log(' '); } console.log(''); return; } console.log(`${chalk.bold(page.title)} ${chalk.gray(page.id)}`); console.log(`Space: ${page.spaceId}`); if (page.status) console.log(`Status: ${page.status}`); if (page.parentId) console.log(`Parent: ${page.parentId}`); if (page.version) console.log(`Version: ${page.version.number}`); if (page._links?.webui) console.log(`URL: ${config.confluenceUrl}/wiki${page._links.webui}`); if (labels.length > 0) { console.log(`Labels: ${labels.map((l) => chalk.cyan(l.name)).join(', ')}`); } }