morph-cli 0.1.0

AST-based codebase migration and codemod tool for JavaScript and TypeScript projects.
Documentation
use colored::Colorize;
use indicatif::{ProgressBar, ProgressStyle};

pub fn label(text: &str) -> String {
    text.bold().cyan().to_string()
}

pub fn bullet() -> String {
    "".bold().blue().to_string()
}

pub fn success_prefix() -> String {
    "done".bold().green().to_string()
}

pub fn warning_prefix() -> String {
    "todo".bold().yellow().to_string()
}

pub fn muted_prefix() -> String {
    "skip".bold().dimmed().to_string()
}

pub fn error_prefix() -> String {
    "fail".bold().red().to_string()
}

pub fn info_prefix() -> String {
    "info".bold().blue().to_string()
}

pub fn print_info(message: &str) {
    println!("{}", message.bold());
}

pub fn spinner(message: &str) -> ProgressBar {
    let spinner = ProgressBar::new_spinner();
    spinner.set_style(
        ProgressStyle::with_template("{spinner:.cyan} {msg}")
            .expect("spinner template should be valid")
            .tick_strings(&["", "", "", "", "", ""]),
    );
    spinner.set_message(message.to_owned());
    spinner.enable_steady_tick(std::time::Duration::from_millis(80));
    spinner
}
pub enum LogLevel {
    Verbose,
    Info,
    Warning,
    Error,
}

pub fn log(level: LogLevel, message: &str, is_verbose: bool) {
    match level {
        LogLevel::Verbose if is_verbose => {
            println!("{} {}", "trace".bold().dimmed(), message.dimmed());
        }
        LogLevel::Info => {
            println!("{} {}", "info".bold().blue(), message);
        }
        LogLevel::Warning => {
            println!("{} {}", "warn".bold().yellow(), message);
        }
        LogLevel::Error => {
            println!("{} {}", "error".bold().red(), message);
        }
        _ => {}
    }
}

pub fn explain_skip(reason: &str) -> String {
    format!("{} {}", "skipped:".bold().yellow(), reason.dimmed())
}

pub fn explain_error(category: &str, message: &str) -> String {
    format!("{}: {}", category.bold().red(), message)
}