genlayer
Version:
GenLayer Command Line Tool
95 lines (77 loc) • 2.63 kB
text/typescript
import { ConfigFileManager } from "../../lib/config/ConfigFileManager";
import ora, { Ora } from "ora";
import chalk from "chalk";
import inquirer from "inquirer";
export class BaseAction extends ConfigFileManager {
private spinner: Ora;
constructor() {
super()
this.spinner = ora({ text: "", spinner: "dots" });
}
protected async confirmPrompt(message: string): Promise<void> {
const answer = await inquirer.prompt([
{
type: "confirm",
name: "confirmAction",
message: chalk.yellow(message),
default: true,
},
]);
if (!answer.confirmAction) {
this.logError("Operation aborted!");
process.exit(0);
}
}
private formatOutput(data: any): string {
if (data instanceof Error) {
const errorDetails = {
name: data.name,
message: data.message,
...(Object.keys(data).length ? data : {}),
};
return JSON.stringify(errorDetails, null, 2);
}
if (data instanceof Map) {
data = Object.fromEntries(data);
}
return typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
}
protected log(message: string, data?: any): void {
console.log(chalk.white(`\n${message}`));
if (data) console.log(this.formatOutput(data));
}
protected logSuccess(message: string, data?: any): void {
console.log(chalk.green(`\n✔ ${message}`));
if (data) console.log(chalk.green(this.formatOutput(data)));
}
protected logInfo(message: string, data?: any): void {
console.log(chalk.blue(`\nℹ ${message}`));
if (data) console.log(chalk.blue(this.formatOutput(data)));
}
protected logWarning(message: string, data?: any): void {
console.log(chalk.yellow(`\n⚠ ${message}`));
if (data) console.log(chalk.yellow(this.formatOutput(data)));
}
protected logError(message: string, error?: any): void {
console.error(chalk.red(`\n✖ ${message}`));
if (error) console.error(chalk.red(this.formatOutput(error)));
}
protected startSpinner(message: string) {
this.spinner.text = chalk.blue(`${message}`);
this.spinner.start();
}
protected succeedSpinner(message: string, data?: any): void {
if (data) this.log('Result:', data);
this.spinner.succeed(chalk.green(message));
}
protected failSpinner(message: string, error?:any): void {
if (error) this.log('Error:', error);
this.spinner.fail(chalk.red(message));
}
protected stopSpinner(): void {
this.spinner.stop();
}
protected setSpinnerText(message: string): void {
this.spinner.text = chalk.blue(message);
}
}