use std::path::{Path, PathBuf};
use clap::Args;
use crax_dts::dts::new_builder;
#[derive(Args)]
pub struct Cmd {
#[arg(long, help = "Current program like: tsc")]
program: Option<String>,
#[arg(short, long, help = "Typescript config preset")]
preset: Option<String>,
#[arg(short, long, help = "Output")]
output: Option<PathBuf>,
#[arg(short, long, default_value_t = false, help = "Debugger")]
debugger: bool,
#[arg(short, long, default_value_t = false, help = "See log file")]
log_file: bool,
#[arg(long, help = "Pre build task")]
pre_build_task: Option<String>,
#[arg(long, allow_hyphen_values = true, num_args = 0..)]
args: Option<Vec<String>>,
}
pub async fn run(option: &Cmd, cur: impl AsRef<Path>) -> anyhow::Result<()> {
let mut builder = new_builder(&cur);
if let Some(ref output) = option.output {
builder.output(output.clone());
}
if let Some(args) = &option.args {
builder.other_args(args.clone());
} else {
builder.other_args([]);
}
builder.log_file(option.log_file);
builder.debugger(option.debugger);
if let Some(parser) = builder.parser.as_mut() {
if let Some(ref n) = option.preset {
parser.set_config(n);
}
if let Some(ref p) = option.program {
parser.set_program(p);
}
}
let dts = builder.build()?;
dts.exec(true, false).await?;
Ok(())
}