* wip: add some spin logging * wipe dioxus branding if not being used by dioxus * add --locked, --offline, --frozen * properly git init with `dx new` and `dx init` * dont panic in verbosity * Move build-assets to "tools" * change ui for dx new offline * pin tauri-bundle * pin tauri * run tailwind once
89 lines
2.7 KiB
Rust
89 lines
2.7 KiB
Rust
#![doc = include_str!("../README.md")]
|
|
#![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")]
|
|
#![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")]
|
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
|
#![allow(clippy::doc_overindented_list_items)]
|
|
|
|
mod build;
|
|
mod bundle_utils;
|
|
mod cli;
|
|
mod config;
|
|
mod devcfg;
|
|
mod dx_build_info;
|
|
mod error;
|
|
mod fastfs;
|
|
mod logging;
|
|
mod platform;
|
|
mod rustcwrapper;
|
|
mod serve;
|
|
mod settings;
|
|
mod tailwind;
|
|
mod wasm_bindgen;
|
|
mod wasm_opt;
|
|
mod workspace;
|
|
|
|
pub(crate) use build::*;
|
|
pub(crate) use cli::*;
|
|
pub(crate) use config::*;
|
|
pub(crate) use dioxus_dx_wire_format::*;
|
|
pub(crate) use error::*;
|
|
pub(crate) use link::*;
|
|
pub(crate) use logging::*;
|
|
pub(crate) use platform::*;
|
|
pub(crate) use rustcwrapper::*;
|
|
pub(crate) use settings::*;
|
|
pub(crate) use tailwind::*;
|
|
pub(crate) use wasm_bindgen::*;
|
|
pub(crate) use workspace::*;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
// The CLI uses dx as a rustcwrapper in some instances (like binary patching)
|
|
if rustcwrapper::is_wrapping_rustc() {
|
|
return rustcwrapper::run_rustc().await;
|
|
}
|
|
|
|
// If we're being ran as a linker (likely from ourselves), we want to act as a linker instead.
|
|
if let Some(link_args) = link::LinkAction::from_env() {
|
|
return link_args.run_link().await;
|
|
}
|
|
|
|
let args = TraceController::initialize();
|
|
let result = match args.action {
|
|
Commands::Translate(opts) => opts.translate(),
|
|
Commands::New(opts) => opts.create().await,
|
|
Commands::Init(opts) => opts.init().await,
|
|
Commands::Config(opts) => opts.config().await,
|
|
Commands::Autoformat(opts) => opts.autoformat().await,
|
|
Commands::Check(opts) => opts.check().await,
|
|
Commands::Clean(opts) => opts.clean().await,
|
|
Commands::Build(opts) => opts.build().await,
|
|
Commands::Serve(opts) => opts.serve().await,
|
|
Commands::Bundle(opts) => opts.bundle().await,
|
|
Commands::Run(opts) => opts.run().await,
|
|
Commands::SelfUpdate(opts) => opts.self_update().await,
|
|
Commands::Tools(BuildTools::BuildAssets(opts)) => opts.run().await,
|
|
};
|
|
|
|
// Provide a structured output for third party tools that can consume the output of the CLI
|
|
match result {
|
|
Ok(output) => {
|
|
tracing::debug!(json = ?output);
|
|
}
|
|
Err(err) => {
|
|
eprintln!(
|
|
"{ERROR_STYLE}failed:{ERROR_STYLE:#} {err}",
|
|
ERROR_STYLE = styles::ERROR_STYLE
|
|
);
|
|
|
|
tracing::error!(
|
|
json = ?StructuredOutput::Error {
|
|
message: format!("{err:?}"),
|
|
},
|
|
);
|
|
|
|
std::process::exit(1);
|
|
}
|
|
};
|
|
}
|