openpencil/packages/cli/src/commands/info.ts
Danila Poyarkov 7f91594d0c refactor: standardize acronym casing
- Rename first-party API, RPC, JSON, CORS, SVG, JSX, and related identifiers to preserve acronym casing
- Keep upstream and serialized boundary names unchanged
- Add a lint guardrail and migration notes for exported APIs
2026-08-10 15:48:16 +03:00

45 lines
1.2 KiB
TypeScript

import { defineCommand } from 'citty'
import type { InfoResult } from '@open-pencil/core/rpc'
import { appTargetOptions } from '#cli/app-target'
import { bold, fmtHistogram, fmtSummary, kv } from '#cli/format'
import { loadRPCData } from '#cli/rpc-data'
export default defineCommand({
meta: { description: 'Show document info (pages, node counts, fonts)' },
args: {
file: {
type: 'positional',
description: 'Document file path (omit to connect to running app)',
required: false
},
...appTargetOptions,
json: { type: 'boolean', description: 'Output as JSON' }
},
async run({ args }) {
const data = await loadRPCData<InfoResult>(args.file, 'info', undefined, args)
if (args.json) {
console.log(JSON.stringify(data, null, 2))
return
}
console.log('')
console.log(bold(` ${data.pages} pages, ${data.totalNodes} nodes`))
console.log('')
const pageItems = Object.entries(data.pageCounts).map(([label, value]) => ({ label, value }))
console.log(fmtHistogram(pageItems, { unit: 'nodes' }))
console.log('')
console.log(fmtSummary(data.types))
if (data.fonts.length > 0) {
console.log('')
console.log(kv('Fonts', data.fonts.join(', ')))
}
console.log('')
}
})