406
}
407
}
409
return `-${option.alias} --${optionId}${args}`;
410
}
411
>
return `--${optionId}${args}`;
argv.ts
412
>
}
413
414
// exported only for testing
415
export function formatOptions(options: OptionDescriptions<unknown> | Record<string, Option<'boolean'> | Option<'string'> | Option<'string[]'>>, columns: number): string[] {
416
>
const usageTexts: [string, string][] = [];
argv.ts
417
>
for (const optionId in options) {
418
>
const o = options[optionId as keyof typeof options] as Option<'boolean'> | Option<'string'> | Option<'string[]'>;
419
>
const usageText = formatUsage(optionId, o);
420
>
usageTexts.push([usageText, o.description!]);
421
>
}
422
>
return formatUsageTexts(usageTexts, columns);
423
>
}
424
425
>
function formatUsageTexts(usageTexts: [string, string][], columns: number) {
argv.ts
426
>
const maxLength = usageTexts.reduce((previous, e) => Math.max(previous, e[0].length), 12);
427
>
const argLength = maxLength + 2/*left padding*/ + 1/*right padding*/;
428
>
if (columns - argLength < 25) {
429
// Use a condensed version on narrow terminals
430
return usageTexts.reduce<string[]>((r, ut) => r.concat([` ${ut[0]}`, ` ${ut[1]}`]), []);