From 48957b11d8156a638c879bf0e55349c7f78fefc2 Mon Sep 17 00:00:00 2001 From: Andrew Voynov Date: Tue, 30 Jan 2024 21:03:44 +0300 Subject: [PATCH] refactor(cli-config): modified `CrateConfig` struct `out_dir` and `asset_dir` are now methods, because they derive from `crate_dir` and `dioxus_config`. --- packages/cli-config/src/config.rs | 29 ++++++++++++------- packages/cli/src/assets.rs | 4 +-- packages/cli/src/builder.rs | 40 +++++++++++++------------- packages/cli/src/cli/bundle.rs | 4 +-- packages/cli/src/plugin/mod.rs | 8 +++--- packages/cli/src/server/desktop/mod.rs | 2 +- packages/cli/src/server/web/mod.rs | 4 +-- 7 files changed, 49 insertions(+), 42 deletions(-) diff --git a/packages/cli-config/src/config.rs b/packages/cli-config/src/config.rs index 716b2bac4..bdfcf016b 100644 --- a/packages/cli-config/src/config.rs +++ b/packages/cli-config/src/config.rs @@ -338,11 +338,9 @@ pub struct WebHttpsConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CrateConfig { - pub out_dir: PathBuf, pub crate_dir: PathBuf, pub workspace_dir: PathBuf, pub target_dir: PathBuf, - pub asset_dir: PathBuf, #[cfg(feature = "cli")] pub manifest: cargo_toml::Manifest, pub executable: ExecutableType, @@ -383,12 +381,8 @@ impl CrateConfig { let workspace_dir = meta.workspace_root; let target_dir = meta.target_directory; - let out_dir = crate_dir.join(&dioxus_config.application.out_dir); - let cargo_def = &crate_dir.join("Cargo.toml"); - let asset_dir = crate_dir.join(&dioxus_config.application.asset_dir); - let manifest = cargo_toml::Manifest::from_path(cargo_def).unwrap(); let mut output_filename = String::from("dioxus_app"); @@ -414,6 +408,7 @@ impl CrateConfig { let release = false; let hot_reload = false; + let cross_origin_policy = false; let verbose = false; let custom_profile = None; let features = None; @@ -421,26 +416,38 @@ impl CrateConfig { let cargo_args = vec![]; Ok(Self { - out_dir, crate_dir, workspace_dir, target_dir, - asset_dir, #[cfg(feature = "cli")] manifest, executable, - release, dioxus_config, + release, hot_reload, - cross_origin_policy: false, + cross_origin_policy, + verbose, custom_profile, features, - verbose, target, cargo_args, }) } + /// Compose an asset directory. Represents the typical "public" directory + /// with publicly available resources (configurable in the `Dioxus.toml`). + pub fn asset_dir(&self) -> PathBuf { + self.crate_dir + .join(&self.dioxus_config.application.asset_dir) + } + + /// Compose an out directory. Represents the typical "dist" directory that + /// is "distributed" after building an application (configurable in the + /// `Dioxus.toml`). + pub fn out_dir(&self) -> PathBuf { + self.crate_dir.join(&self.dioxus_config.application.out_dir) + } + pub fn as_example(&mut self, example_name: String) -> &mut Self { self.executable = ExecutableType::Example(example_name); self diff --git a/packages/cli/src/assets.rs b/packages/cli/src/assets.rs index 9248b47d5..c9fee435f 100644 --- a/packages/cli/src/assets.rs +++ b/packages/cli/src/assets.rs @@ -13,7 +13,7 @@ pub fn asset_manifest(crate_config: &CrateConfig) -> AssetManifest { /// Create a head file that contains all of the imports for assets that the user project uses pub fn create_assets_head(config: &CrateConfig, manifest: &AssetManifest) -> Result<()> { - let mut file = File::create(config.out_dir.join("__assets_head.html"))?; + let mut file = File::create(config.out_dir().join("__assets_head.html"))?; file.write_all(manifest.head().as_bytes())?; Ok(()) } @@ -29,7 +29,7 @@ pub(crate) fn process_assets(config: &CrateConfig, manifest: &AssetManifest) -> .clone() .unwrap_or_default(), ); - let static_asset_output_dir = config.out_dir.join(static_asset_output_dir); + let static_asset_output_dir = config.out_dir().join(static_asset_output_dir); manifest.copy_static_assets_to(static_asset_output_dir)?; diff --git a/packages/cli/src/builder.rs b/packages/cli/src/builder.rs index 744f47916..40563fccd 100644 --- a/packages/cli/src/builder.rs +++ b/packages/cli/src/builder.rs @@ -39,14 +39,14 @@ pub fn build(config: &CrateConfig, _: bool, skip_assets: bool) -> Result Result {} Err(_e) => { log::warn!("Error copying dir: {}", _e); } } for ignore in &ignore_files { - let ignore = ignore.strip_prefix(&config.asset_dir).unwrap(); - let ignore = config.out_dir.join(ignore); + let ignore = ignore.strip_prefix(&config.asset_dir()).unwrap(); + let ignore = out_dir.join(ignore); if ignore.is_file() { std::fs::remove_file(ignore)?; } @@ -369,13 +369,13 @@ pub fn build_desktop( file_name }; - if !config.out_dir.is_dir() { - create_dir_all(&config.out_dir)?; + if !config.out_dir().is_dir() { + create_dir_all(config.out_dir())?; } - copy(res_path, config.out_dir.join(target_file))?; + copy(res_path, config.out_dir().join(target_file))?; // this code will copy all public file to the output dir - if config.asset_dir.is_dir() { + if config.asset_dir().is_dir() { let copy_options = fs_extra::dir::CopyOptions { overwrite: true, skip_exist: false, @@ -385,20 +385,20 @@ pub fn build_desktop( depth: 0, }; - for entry in std::fs::read_dir(&config.asset_dir)? { + for entry in std::fs::read_dir(config.asset_dir())? { let path = entry?.path(); if path.is_file() { - std::fs::copy(&path, &config.out_dir.join(path.file_name().unwrap()))?; + std::fs::copy(&path, &config.out_dir().join(path.file_name().unwrap()))?; } else { - match fs_extra::dir::copy(&path, &config.out_dir, ©_options) { + match fs_extra::dir::copy(&path, &config.out_dir(), ©_options) { Ok(_) => {} Err(e) => { log::warn!("Error copying dir: {}", e); } } for ignore in &ignore_files { - let ignore = ignore.strip_prefix(&config.asset_dir).unwrap(); - let ignore = config.out_dir.join(ignore); + let ignore = ignore.strip_prefix(&config.asset_dir()).unwrap(); + let ignore = config.out_dir().join(ignore); if ignore.is_file() { std::fs::remove_file(ignore)?; } @@ -635,7 +635,7 @@ fn build_assets(config: &CrateConfig) -> Result> { if file == "*" { // if the sass open auto, we need auto-check the assets dir. - let asset_dir = config.asset_dir.clone(); + let asset_dir = config.asset_dir().clone(); if asset_dir.is_dir() { for entry in walkdir::WalkDir::new(&asset_dir) .into_iter() @@ -655,7 +655,7 @@ fn build_assets(config: &CrateConfig) -> Result> { temp.file_stem().unwrap().to_str().unwrap() ); let target_path = config - .out_dir + .out_dir() .join( temp.strip_prefix(&asset_dir) .unwrap() @@ -685,11 +685,11 @@ fn build_assets(config: &CrateConfig) -> Result> { } else { file }; - let path = config.asset_dir.join(relative_path); + let path = config.asset_dir().join(relative_path); let out_file = format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); let target_path = config - .out_dir + .out_dir() .join(PathBuf::from(relative_path).parent().unwrap()) .join(out_file); if path.is_file() { @@ -719,11 +719,11 @@ fn build_assets(config: &CrateConfig) -> Result> { } else { path }; - let path = config.asset_dir.join(relative_path); + let path = config.asset_dir().join(relative_path); let out_file = format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); let target_path = config - .out_dir + .out_dir() .join(PathBuf::from(relative_path).parent().unwrap()) .join(out_file); if path.is_file() { diff --git a/packages/cli/src/cli/bundle.rs b/packages/cli/src/cli/bundle.rs index a2231b31f..1bc3a4ff6 100644 --- a/packages/cli/src/cli/bundle.rs +++ b/packages/cli/src/cli/bundle.rs @@ -87,7 +87,7 @@ impl Bundle { build_desktop(&crate_config, false, false)?; // copy the binary to the out dir - let package = crate_config.manifest.package.unwrap(); + let package = crate_config.manifest.package.as_ref().unwrap(); let mut name: PathBuf = match &crate_config.executable { ExecutableType::Binary(name) @@ -149,7 +149,7 @@ impl Bundle { } let mut settings = SettingsBuilder::new() - .project_out_directory(crate_config.out_dir) + .project_out_directory(crate_config.out_dir()) .package_settings(PackageSettings { product_name: crate_config.dioxus_config.application.name.clone(), version: package.version().to_string(), diff --git a/packages/cli/src/plugin/mod.rs b/packages/cli/src/plugin/mod.rs index 481dd0984..2aa1f9868 100644 --- a/packages/cli/src/plugin/mod.rs +++ b/packages/cli/src/plugin/mod.rs @@ -184,8 +184,8 @@ impl PluginManager { let args = lua.create_table()?; args.set("name", crate_config.dioxus_config.application.name.clone())?; args.set("platform", platform)?; - args.set("out_dir", crate_config.out_dir.to_str().unwrap())?; - args.set("asset_dir", crate_config.asset_dir.to_str().unwrap())?; + args.set("out_dir", crate_config.out_dir().to_str().unwrap())?; + args.set("asset_dir", crate_config.asset_dir().to_str().unwrap())?; for i in 1..(manager.len()? as i32 + 1) { let info = manager.get::(i)?; @@ -208,8 +208,8 @@ impl PluginManager { let args = lua.create_table()?; args.set("name", crate_config.dioxus_config.application.name.clone())?; args.set("platform", platform)?; - args.set("out_dir", crate_config.out_dir.to_str().unwrap())?; - args.set("asset_dir", crate_config.asset_dir.to_str().unwrap())?; + args.set("out_dir", crate_config.out_dir().to_str().unwrap())?; + args.set("asset_dir", crate_config.asset_dir().to_str().unwrap())?; for i in 1..(manager.len()? as i32 + 1) { let info = manager.get::(i)?; diff --git a/packages/cli/src/server/desktop/mod.rs b/packages/cli/src/server/desktop/mod.rs index ad4b7bac8..c91ac1397 100644 --- a/packages/cli/src/server/desktop/mod.rs +++ b/packages/cli/src/server/desktop/mod.rs @@ -221,7 +221,7 @@ fn start_desktop(config: &CrateConfig, skip_assets: bool) -> Result<(RAIIChild, ExecutableType::Binary(name) | ExecutableType::Lib(name) | ExecutableType::Example(name) => { - let mut file = config.out_dir.join(name); + let mut file = config.out_dir().join(name); if cfg!(windows) { file.set_extension("exe"); } diff --git a/packages/cli/src/server/web/mod.rs b/packages/cli/src/server/web/mod.rs index 39366ee0c..f4d525ad0 100644 --- a/packages/cli/src/server/web/mod.rs +++ b/packages/cli/src/server/web/mod.rs @@ -290,7 +290,7 @@ async fn setup_router( std::fs::read_to_string( file_service_config .crate_dir - .join(file_service_config.out_dir) + .join(file_service_config.out_dir()) .join("index.html"), ) .ok() @@ -315,7 +315,7 @@ async fn setup_router( Ok(response) }, ) - .service(ServeDir::new(config.crate_dir.join(&config.out_dir))); + .service(ServeDir::new(config.crate_dir.join(config.out_dir()))); // Setup websocket let mut router = Router::new().route("/_dioxus/ws", get(ws_handler));