alwaysai
Version:
The alwaysAI command-line interface (CLI)
33 lines (30 loc) • 1.12 kB
text/typescript
import { CliTerseError } from '@alwaysai/alwayscli';
import * as chalk from 'chalk';
import * as logSymbols from 'log-symbols';
import { confirmPromptComponent } from './confirm-prompt-component';
import { echo, echoCommandInvocation } from '../../util/echo';
export async function runWithEchoAndProceedPrompt<TArgs extends any[]>(
func: (...args: TArgs) => any,
args: TArgs,
props: { yes?: boolean; functionName?: string } = {}
) {
const { yes = false, functionName } = props;
const commandString = `${functionName ?? func.name} ${args.join(' ')}`;
echoCommandInvocation(commandString);
const result = await func(...args);
let endOfCommandMessage = `End of "${commandString}"`;
if (typeof result !== 'undefined') {
endOfCommandMessage = `${endOfCommandMessage} (result=${result})`;
}
if (!yes) {
const confirmed = await confirmPromptComponent({
message: `${endOfCommandMessage}. Proceed?`
});
if (!confirmed) {
throw new CliTerseError('User elected not to proceed');
}
} else {
echo(`${logSymbols.success} ${chalk.bold(endOfCommandMessage)}`);
}
echo();
}