use std::path::{Path, PathBuf};
pub use crate::commands::add::AddToProjectOptions;
pub use crate::commands::install::{
DepSelection, FrozenMode, InstallControl, InstallEvent, InstallOutputLevel, InstallOutputMode,
InstallPhase, InstallProgressSnapshot, InstallReporter,
};
pub use aube_registry::NetworkMode;
pub use aube_util::{AUBE, Embedder as Host};
#[derive(Debug, Clone)]
pub struct InstallOptions {
pub project_dir: PathBuf,
pub frozen_mode: FrozenMode,
pub dep_selection: DepSelection,
pub ignore_scripts: bool,
pub run_root_lifecycle: bool,
pub dry_run: bool,
pub lockfile_only: bool,
pub force: bool,
pub network_mode: NetworkMode,
pub strict_no_lockfile: bool,
pub dangerously_allow_all_builds: bool,
pub osv_transitive_check: bool,
pub control: InstallControl,
}
impl InstallOptions {
pub fn new(project_dir: impl Into<PathBuf>) -> Self {
Self {
project_dir: project_dir.into(),
frozen_mode: FrozenMode::Prefer,
dep_selection: DepSelection::All,
ignore_scripts: false,
run_root_lifecycle: true,
dry_run: false,
lockfile_only: false,
force: false,
network_mode: NetworkMode::Online,
strict_no_lockfile: false,
dangerously_allow_all_builds: false,
osv_transitive_check: false,
control: InstallControl::default(),
}
}
}
pub type Result<T> = miette::Result<T>;
pub fn initialize(host: &'static Host, setting_defaults: Vec<(String, String)>) {
aube_util::set_embedder(host);
aube_settings::set_embedder_defaults(setting_defaults);
}
pub fn host() -> &'static Host {
aube_util::embedder()
}
pub async fn install(options: InstallOptions) -> Result<()> {
let mut command_options =
crate::commands::install::InstallOptions::with_mode(options.frozen_mode);
command_options.project_dir = Some(options.project_dir);
command_options.dep_selection = options.dep_selection;
command_options.ignore_scripts = options.ignore_scripts;
command_options.skip_root_lifecycle = !options.run_root_lifecycle;
command_options.dry_run = options.dry_run;
command_options.lockfile_only = options.lockfile_only;
command_options.force = options.force;
command_options.network_mode = options.network_mode;
command_options.strict_no_lockfile = options.strict_no_lockfile;
command_options.dangerously_allow_all_builds = options.dangerously_allow_all_builds;
command_options.osv_transitive_check = options.osv_transitive_check;
command_options.control = options.control;
crate::commands::install::run(command_options).await
}
pub async fn add(
project_dir: &Path,
packages: &[String],
options: AddToProjectOptions,
) -> Result<()> {
crate::commands::add::add_to_project(project_dir, packages, options).await
}
pub fn error_code(error: &miette::Report) -> Option<String> {
error.code().map(|code| code.to_string())
}