{"version":3,"file":"cli.mjs","names":[],"sources":["../src/core/usage.ts","../src/cli.ts"],"sourcesContent":["import type { ArgsDef, CommandDef } from 'citty'\nimport { formatBanner } from './brand'\nimport { createContext } from './context'\nimport { createStyle, writeHuman } from './output'\n\nasync function resolve<T>(value: T | (() => T | Promise<T>) | Promise<T> | undefined): Promise<T | undefined> {\n  if (typeof value === 'function') return await (value as () => T | Promise<T>)()\n  return await value\n}\n\ninterface Row {\n  name: string\n  description: string\n}\n\nfunction formatSection(title: string, rows: Row[], paint: ReturnType<typeof createStyle>['paint']): string {\n  const width = Math.max(...rows.map(r => r.name.length))\n  const lines = rows.map(row => `  ${paint('blue', '│')} ${paint(['cyan', 'bold'], row.name.padEnd(width))}  ${row.description}`)\n  return `  ${paint('dim', title)}\\n\\n${lines.join('\\n')}`\n}\n\n/**\n * Branded replacement for citty's default usage renderer — banner on top,\n * blue-railed command and option lists, no repeated boilerplate: the docs\n * link lives in the banner meta line only.\n */\nexport async function showUsage(cmd: CommandDef<any>, parent?: CommandDef<any>): Promise<void> {\n  const ctx = createContext()\n  const { paint } = createStyle(ctx)\n\n  const meta = await resolve(cmd.meta)\n  const parentMeta = await resolve(parent?.meta)\n  const commandName = [parentMeta?.name, meta?.name].filter(Boolean).join(' ') || 'evlog'\n  const version = meta?.version ?? parentMeta?.version ?? ''\n\n  const subCommands = await resolve(cmd.subCommands)\n  const args = await resolve(cmd.args as ArgsDef | undefined)\n  const hasCommands = !!subCommands && Object.keys(subCommands).length > 0\n  const hasArgs = !!args && Object.keys(args).length > 0\n\n  const sections: string[] = [formatBanner(ctx, version).trimEnd()]\n\n  const usageParts = [commandName]\n  if (hasCommands) usageParts.push('<command>')\n  if (hasArgs) usageParts.push('[options]')\n  sections.push(`  ${paint('dim', 'USAGE')}  ${paint('bold', usageParts.join(' '))}`)\n\n  if (hasCommands) {\n    const rows: Row[] = []\n    for (const [name, sub] of Object.entries(subCommands)) {\n      const subMeta = await resolve((sub as CommandDef).meta)\n      rows.push({ name, description: subMeta?.description ?? '' })\n    }\n    sections.push(formatSection('COMMANDS', rows, paint))\n  }\n\n  if (hasArgs) {\n    const rows: Row[] = Object.entries(args).map(([name, def]) => ({\n      name: `--${name}`,\n      description: (def as { description?: string }).description ?? '',\n    }))\n    sections.push(formatSection('OPTIONS', rows, paint))\n  }\n\n  if (hasCommands) {\n    sections.push(`  ${paint('dim', `Use ${commandName} <command> --help for details`)}`)\n  }\n\n  // One blank line between major sections; no leading spacer above the banner\n  writeHuman(`${sections.join('\\n\\n')}\\n`)\n}\n","import { runMain } from 'citty'\nimport { showUsage } from './core/usage'\nimport { main } from './index'\n\nrunMain(main, { showUsage })\n"],"mappings":";;;AAKA,eAAe,QAAW,OAAoF;CAC5G,IAAI,OAAO,UAAU,YAAY,OAAO,MAAO,MAA+B;CAC9E,OAAO,MAAM;AACf;AAOA,SAAS,cAAc,OAAe,MAAa,OAAwD;CACzG,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAI,MAAK,EAAE,KAAK,MAAM,CAAC;CACtD,MAAM,QAAQ,KAAK,KAAI,QAAO,KAAK,MAAM,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,MAAM,GAAG,IAAI,KAAK,OAAO,KAAK,CAAC,EAAE,IAAI,IAAI,aAAa;CAC9H,OAAO,KAAK,MAAM,OAAO,KAAK,EAAE,MAAM,MAAM,KAAK,IAAI;AACvD;;;;;;AAOA,eAAsB,UAAU,KAAsB,QAAyC;CAC7F,MAAM,MAAM,cAAc;CAC1B,MAAM,EAAE,UAAU,YAAY,GAAG;CAEjC,MAAM,OAAO,MAAM,QAAQ,IAAI,IAAI;CACnC,MAAM,aAAa,MAAM,QAAQ,QAAQ,IAAI;CAC7C,MAAM,cAAc,CAAC,YAAY,MAAM,MAAM,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK;CAChF,MAAM,UAAU,MAAM,WAAW,YAAY,WAAW;CAExD,MAAM,cAAc,MAAM,QAAQ,IAAI,WAAW;CACjD,MAAM,OAAO,MAAM,QAAQ,IAAI,IAA2B;CAC1D,MAAM,cAAc,CAAC,CAAC,eAAe,OAAO,KAAK,WAAW,CAAC,CAAC,SAAS;CACvE,MAAM,UAAU,CAAC,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS;CAErD,MAAM,WAAqB,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,QAAQ,CAAC;CAEhE,MAAM,aAAa,CAAC,WAAW;CAC/B,IAAI,aAAa,WAAW,KAAK,WAAW;CAC5C,IAAI,SAAS,WAAW,KAAK,WAAW;CACxC,SAAS,KAAK,KAAK,MAAM,OAAO,OAAO,EAAE,IAAI,MAAM,QAAQ,WAAW,KAAK,GAAG,CAAC,GAAG;CAElF,IAAI,aAAa;EACf,MAAM,OAAc,CAAC;EACrB,KAAK,MAAM,CAAC,MAAM,QAAQ,OAAO,QAAQ,WAAW,GAAG;GACrD,MAAM,UAAU,MAAM,QAAS,IAAmB,IAAI;GACtD,KAAK,KAAK;IAAE;IAAM,aAAa,SAAS,eAAe;GAAG,CAAC;EAC7D;EACA,SAAS,KAAK,cAAc,YAAY,MAAM,KAAK,CAAC;CACtD;CAEA,IAAI,SAAS;EACX,MAAM,OAAc,OAAO,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,UAAU;GAC7D,MAAM,KAAK;GACX,aAAc,IAAiC,eAAe;EAChE,EAAE;EACF,SAAS,KAAK,cAAc,WAAW,MAAM,KAAK,CAAC;CACrD;CAEA,IAAI,aACF,SAAS,KAAK,KAAK,MAAM,OAAO,OAAO,YAAY,8BAA8B,GAAG;CAItF,WAAW,GAAG,SAAS,KAAK,MAAM,EAAE,GAAG;AACzC;;;AClEA,QAAQ,MAAM,EAAE,UAAU,CAAC"}