diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6681227 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "editor.fontSize": 15, + "terminal.integrated.fontSize": 14, + "workbench.iconTheme": "material-icon-theme", + "workbench.colorTheme": "Tokyo Night Pro" +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 4a0c452..8a8923c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -19,36 +19,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell_polyfill", + "windows-sys 0.61.2", ] [[package]] @@ -59,15 +60,15 @@ checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" @@ -92,15 +93,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" @@ -113,14 +114,14 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ - "encode_unicode 0.3.6", - "lazy_static", + "encode_unicode", "libc", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -129,7 +130,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ - "encode_unicode 1.0.0", + "encode_unicode", "libc", "once_cell", "unicode-width", @@ -151,15 +152,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "encode_unicode" -version = "0.3.6" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" @@ -182,16 +177,16 @@ version = "1.43.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46fdb647ebde000f43b5b53f773c30cf9b0cb4300453208713fa38b2c70935a0" dependencies = [ - "console 0.15.8", + "console 0.15.11", "once_cell", "similar", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -202,17 +197,11 @@ dependencies = [ "either", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - [[package]] name = "libc" -version = "0.2.172" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "lock_api" @@ -236,9 +225,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "parking_lot" @@ -304,9 +299,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "signal-hook" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ "libc", "signal-hook-registry", @@ -314,18 +309,18 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] [[package]] name = "similar" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "smallvec" @@ -351,6 +346,29 @@ dependencies = [ "colored", "demand", "insta", + "spm_core 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio", +] + +[[package]] +name = "spm_core" +version = "0.8.0" +dependencies = [ + "clap", + "colored", + "demand", + "tokio", +] + +[[package]] +name = "spm_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ca6395d4f77daf86fb32aeb3f1d8116fada42eb83fd6f892f1d6d8ebd169c0" +dependencies = [ + "clap", + "colored", + "demand", "tokio", ] @@ -362,9 +380,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.109" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -382,12 +400,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -444,11 +461,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -457,15 +474,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" diff --git a/Cargo.toml b/Cargo.toml index 74335c1..b930917 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,27 @@ -[package] -name = "spm-swift-package" +[workspace] +members = [ + "crates/spm_core", + "crates/cli", +] +resolver = "2" + +[workspace.package] version = "0.8.0" edition = "2024" -authors = ["João Lucas "] license = "MIT" +authors = ["João Lucas "] description = "Command Line Tools for macOS to create project in Swift Package Manager with desirable files." readme = "README.md" repository = "https://github.com/heroesofcode/spm-swift-package" -exclude = [".github/**", ".api/*"] -[dependencies] +[workspace.dependencies] demand = "1.7.2" clap = "4.5.49" colored = "3.0.0" tokio = { version = "1.48.0", features = ["full"] } +insta = "1.43.2" # dev-dependency -[dev-dependencies] -insta = "1.43.2" \ No newline at end of file +[profile.release] +strip = true +lto = true +codegen-units = 1 \ No newline at end of file diff --git a/crates/cli/.gitignore b/crates/cli/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/crates/cli/.gitignore @@ -0,0 +1 @@ +/target diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml new file mode 100644 index 0000000..bd7c510 --- /dev/null +++ b/crates/cli/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "spm-swift-package" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description.workspace = true +readme.workspace = true +repository.workspace = true + +[dependencies] +demand.workspace = true +clap.workspace = true +colored.workspace = true +tokio.workspace = true +spm_core = "0.8.0" + +[dev-dependencies] +insta.workspace = true \ No newline at end of file diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs new file mode 100644 index 0000000..a4b672e --- /dev/null +++ b/crates/cli/src/lib.rs @@ -0,0 +1 @@ +pub mod presentation; \ No newline at end of file diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs new file mode 100644 index 0000000..9764d09 --- /dev/null +++ b/crates/cli/src/main.rs @@ -0,0 +1,12 @@ +mod presentation; + +use presentation::cli_controller::CliController; +use presentation::header::Header; + +#[tokio::main] +async fn main() { + let header = Header::show(); + println!("{header}"); + + let _ = CliController::execute_flow().await; +} \ No newline at end of file diff --git a/src/presentation/cli_controller.rs b/crates/cli/src/presentation/cli_controller.rs similarity index 95% rename from src/presentation/cli_controller.rs rename to crates/cli/src/presentation/cli_controller.rs index eff7471..c3e99e9 100644 --- a/src/presentation/cli_controller.rs +++ b/crates/cli/src/presentation/cli_controller.rs @@ -2,7 +2,7 @@ use colored::Colorize; use demand::{DemandOption, Input, MultiSelect, Spinner, SpinnerStyle}; use std::process::Command; -use crate::domain::usecase::usecase::*; +use spm_core::domain::usecase::usecase::*; pub struct CliController; @@ -13,7 +13,12 @@ impl CliController { let platform_selected = Self::multiselect_platform()?; Self::loading().await?; - SpmUseCase::execute(&project_name, file_selected, platform_selected).await?; + SpmUseCase::execute( + &project_name, + file_selected, + platform_selected + ).await?; + Self::command_open_xcode(&project_name)?; Ok(()) } diff --git a/src/presentation/header.rs b/crates/cli/src/presentation/header.rs similarity index 100% rename from src/presentation/header.rs rename to crates/cli/src/presentation/header.rs diff --git a/src/presentation/mod.rs b/crates/cli/src/presentation/mod.rs similarity index 100% rename from src/presentation/mod.rs rename to crates/cli/src/presentation/mod.rs diff --git a/tests/header_snapshot_tests.rs b/crates/cli/tests/header_snapshot_tests.rs similarity index 99% rename from tests/header_snapshot_tests.rs rename to crates/cli/tests/header_snapshot_tests.rs index b0c42ee..04e6d80 100644 --- a/tests/header_snapshot_tests.rs +++ b/crates/cli/tests/header_snapshot_tests.rs @@ -6,4 +6,4 @@ fn test_show_header_snapshot() { colored::control::set_override(false); let header = Header::show(); assert_snapshot!(header); -} +} \ No newline at end of file diff --git a/tests/snapshots/header_snapshot_tests__show_header_snapshot.snap b/crates/cli/tests/snapshots/header_snapshot_tests__show_header_snapshot.snap similarity index 73% rename from tests/snapshots/header_snapshot_tests__show_header_snapshot.snap rename to crates/cli/tests/snapshots/header_snapshot_tests__show_header_snapshot.snap index 82f4a8e..09d9f29 100644 --- a/tests/snapshots/header_snapshot_tests__show_header_snapshot.snap +++ b/crates/cli/tests/snapshots/header_snapshot_tests__show_header_snapshot.snap @@ -1,5 +1,5 @@ --- -source: tests/header_snapshot_tests.rs +source: crates/cli/tests/header_snapshot_tests.rs expression: header snapshot_kind: text --- diff --git a/crates/spm_core/Cargo.toml b/crates/spm_core/Cargo.toml new file mode 100644 index 0000000..c655051 --- /dev/null +++ b/crates/spm_core/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "spm_core" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description = "Core business logic for spm-swift-package" +repository.workspace = true + +[dependencies] +demand.workspace = true +colored.workspace = true +clap.workspace = true +tokio.workspace = true \ No newline at end of file diff --git a/src/domain/builder/mod.rs b/crates/spm_core/src/domain/builder/mod.rs similarity index 100% rename from src/domain/builder/mod.rs rename to crates/spm_core/src/domain/builder/mod.rs diff --git a/src/domain/builder/spm_builder.rs b/crates/spm_core/src/domain/builder/spm_builder.rs similarity index 100% rename from src/domain/builder/spm_builder.rs rename to crates/spm_core/src/domain/builder/spm_builder.rs diff --git a/src/domain/file/mod.rs b/crates/spm_core/src/domain/file/mod.rs similarity index 100% rename from src/domain/file/mod.rs rename to crates/spm_core/src/domain/file/mod.rs diff --git a/src/domain/file/project_file.rs b/crates/spm_core/src/domain/file/project_file.rs similarity index 100% rename from src/domain/file/project_file.rs rename to crates/spm_core/src/domain/file/project_file.rs diff --git a/src/domain/file/project_templates.rs b/crates/spm_core/src/domain/file/project_templates.rs similarity index 100% rename from src/domain/file/project_templates.rs rename to crates/spm_core/src/domain/file/project_templates.rs diff --git a/src/domain/mod.rs b/crates/spm_core/src/domain/mod.rs similarity index 100% rename from src/domain/mod.rs rename to crates/spm_core/src/domain/mod.rs diff --git a/src/domain/platform/mod.rs b/crates/spm_core/src/domain/platform/mod.rs similarity index 100% rename from src/domain/platform/mod.rs rename to crates/spm_core/src/domain/platform/mod.rs diff --git a/src/domain/platform/platform_validator.rs b/crates/spm_core/src/domain/platform/platform_validator.rs similarity index 100% rename from src/domain/platform/platform_validator.rs rename to crates/spm_core/src/domain/platform/platform_validator.rs diff --git a/src/domain/usecase/mod.rs b/crates/spm_core/src/domain/usecase/mod.rs similarity index 100% rename from src/domain/usecase/mod.rs rename to crates/spm_core/src/domain/usecase/mod.rs diff --git a/src/domain/usecase/usecase.rs b/crates/spm_core/src/domain/usecase/usecase.rs similarity index 100% rename from src/domain/usecase/usecase.rs rename to crates/spm_core/src/domain/usecase/usecase.rs diff --git a/crates/spm_core/src/lib.rs b/crates/spm_core/src/lib.rs new file mode 100644 index 0000000..d7abca1 --- /dev/null +++ b/crates/spm_core/src/lib.rs @@ -0,0 +1 @@ +pub mod domain; diff --git a/tests/project_file_tests.rs b/crates/spm_core/tests/project_file_tests.rs similarity index 93% rename from tests/project_file_tests.rs rename to crates/spm_core/tests/project_file_tests.rs index e25d836..3d67e2b 100644 --- a/tests/project_file_tests.rs +++ b/crates/spm_core/tests/project_file_tests.rs @@ -1,4 +1,4 @@ -use spm_swift_package::domain::file::project_file::ProjectFile; +use spm_core::domain::file::project_file::ProjectFile; use std::path::Path; #[test] @@ -28,4 +28,4 @@ fn test_structure_create() { assert!(Path::new(&format!("{}/CHANGELOG.md", project_name)).exists()); let _ = std::fs::remove_dir_all(project_name); -} +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 84f5a69..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod domain; -pub mod presentation; diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 2a92411..0000000 --- a/src/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -use spm_swift_package::presentation::cli_controller::CliController; -use spm_swift_package::presentation::header::Header; - -#[tokio::main] -async fn main() { - let header = Header::show(); - println!("{}", header); - - let _ = CliController::execute_flow().await; -}