lenso 1.1.0

Run project commands with the Lenso CLI framework
use lenso_cli::Cli;
mod self_update;

#[tokio::main]
async fn main() {
    let args: Vec<_> = std::env::args_os().collect();
    let setup_args = args.clone();
    let setup = Cli::prepare(&args, move |events| {
        let args = setup_args;
        let mut options = lenso_runtime::LoadOptions::from_args(&args);
        options.events = events;
        #[cfg(feature = "project")]
        options.providers.insert(
            "project".into(),
            lenso_runtime::NativeProvider {
                version: lenso_project::VERSION.into(),
                register: lenso_project::register,
            },
        );
        let mut cli = Cli::new("lenso");
        self_update::register(&mut cli, options.offline)?;
        lenso_runtime::register_management_with_options(&mut cli, &options)?;
        let version_only = Cli::command_from_args(&args).is_none()
            && args.iter().any(|arg| arg == "--version" || arg == "-V");
        if !version_only
            && !matches!(
                Cli::command_from_args(&args),
                Some(
                    "new"
                        | "self"
                        | "init"
                        | "ext"
                        | "preset"
                        | "update"
                        | "config"
                        | "migrate"
                        | "cache"
                        | "package"
                        | "publish"
                )
            )
        {
            lenso_runtime::load_project_with_options(
                &mut cli,
                &Cli::project_from_args(&args)?,
                &options,
            )?;
        }
        Ok::<_, lenso_cli::Error>(cli)
    })
    .await;
    let code = match setup {
        Ok(cli) => cli.run_from(args).await,
        Err(error) => {
            Cli::diagnostic(&error, &args);
            1
        }
    };
    std::process::exit(code);
}