mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-10 08:05:14 +02:00
feat(cli): add walkCommandTree and formatCommandTree helpers
This commit is contained in:
parent
cdcfd21e95
commit
f205bec1f6
2 changed files with 116 additions and 0 deletions
35
packages/cli/src/command-tree.ts
Normal file
35
packages/cli/src/command-tree.ts
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import type { Command } from '@commander-js/extra-typings';
|
||||
|
||||
export interface CommandTreeNode {
|
||||
name: string;
|
||||
description: string;
|
||||
aliases: string[];
|
||||
children: CommandTreeNode[];
|
||||
}
|
||||
|
||||
export function walkCommandTree(command: Command): CommandTreeNode {
|
||||
return {
|
||||
name: command.name(),
|
||||
description: command.description(),
|
||||
aliases: command.aliases(),
|
||||
children: command.commands.map((child) => walkCommandTree(child as Command)),
|
||||
};
|
||||
}
|
||||
|
||||
export function formatCommandTree(node: CommandTreeNode): string {
|
||||
const lines: string[] = [];
|
||||
appendNode(node, 0, lines);
|
||||
return `${lines.join('\n')}\n`;
|
||||
}
|
||||
|
||||
function appendNode(node: CommandTreeNode, depth: number, lines: string[]): void {
|
||||
const indent = ' '.repeat(depth);
|
||||
const aliasPart = node.aliases.length > 0 ? ` (${node.aliases.join(', ')})` : '';
|
||||
const descriptionPart = node.description.length > 0 ? ` - ${node.description}` : '';
|
||||
lines.push(`${indent}${node.name}${aliasPart}${descriptionPart}`);
|
||||
|
||||
const sortedChildren = [...node.children].sort((a, b) => a.name.localeCompare(b.name));
|
||||
for (const child of sortedChildren) {
|
||||
appendNode(child, depth + 1, lines);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue