Files
my-pi/pi-rtk-optimizer/src/command-completions.ts
T

50 lines
1.4 KiB
TypeScript

import type { AutocompleteItem } from "@earendil-works/pi-tui";
interface CompletionDefinition {
name: string;
description: string;
}
const TOP_LEVEL_SUBCOMMANDS: CompletionDefinition[] = [
{ name: "show", description: "Show current RTK config + runtime summary" },
{ name: "path", description: "Show RTK config file path" },
{ name: "verify", description: "Check whether rtk binary is available" },
{ name: "stats", description: "Show output compaction metrics" },
{ name: "clear-stats", description: "Clear output compaction metrics" },
{ name: "reset", description: "Reset RTK settings to defaults" },
{ name: "help", description: "Show usage help" },
];
function startsWithFilter(value: string, prefix: string): boolean {
if (!prefix) {
return true;
}
return value.startsWith(prefix);
}
function mapCompletions(values: CompletionDefinition[]): AutocompleteItem[] {
return values.map((entry) => ({
value: entry.name,
label: entry.name,
description: entry.description,
}));
}
export function getRtkArgumentCompletions(argumentPrefix: string): AutocompleteItem[] | null {
const normalized = argumentPrefix.trimStart().toLowerCase();
if (!normalized) {
return mapCompletions(TOP_LEVEL_SUBCOMMANDS);
}
if (normalized.includes(" ")) {
return null;
}
const filtered = TOP_LEVEL_SUBCOMMANDS.filter((entry) => startsWithFilter(entry.name, normalized));
if (filtered.length === 0) {
return null;
}
return mapCompletions(filtered);
}