Skip to content

Commit 32bc571

Browse files
committed
chore: 添加 snm_node 依赖并重构 NodeVersion 解析逻辑
- 在 `Cargo.toml` 中添加 `snm_node` 依赖项以支持 Node.js 版本管理。 - 更新 `factory.rs` 中的 NodeVersion 解析逻辑,使用新的 `NodeVersion` 实现。 - 移除不再使用的 `node_version.rs` 文件,确保代码整洁性和可读性。
1 parent 0e3574b commit 32bc571

File tree

18 files changed

+121
-264
lines changed

18 files changed

+121
-264
lines changed

crates/cli/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ tracing-subscriber = { workspace = true }
3535
# self
3636
snm_config = { workspace = true }
3737
snm_downloader = { workspace = true }
38+
snm_node = { workspace = true }
3839
snm_pm = { workspace = true }
3940
snm_utils = { workspace = true }
4041

crates/cli/src/node/factory.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use semver::Version;
77
use serde::Serialize;
88
use snm_config::snm_config::SnmConfig;
99
use snm_downloader::{download_resource, DownloadNodeResource};
10+
use snm_node::NodeVersion;
1011
use tracing::trace;
1112

1213
use crate::node::metadata::NodeMetadata;
@@ -203,7 +204,7 @@ impl<'a> NodeFactory<'a> {
203204
}
204205
}
205206

206-
let node_version = snm_utils::NodeVersion::try_from_str(&args.version)?;
207+
let node_version = NodeVersion::try_from(args.version.clone())?;
207208

208209
let resource = DownloadNodeResource::builder()
209210
.config(self.config)

crates/node/src/node_version.rs

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@ pub struct NodeVersion {
1212
impl TryFrom<String> for NodeVersion {
1313
type Error = anyhow::Error;
1414
fn try_from(raw: String) -> Result<Self, Self::Error> {
15+
let raw_trim = raw.trim().to_lowercase();
16+
1517
let r = regex!(r"^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$");
16-
if !r.is_match(&raw) {
18+
19+
if !r.is_match(&raw_trim) {
1720
bail!("Invalid Node.js version format: {}", raw);
1821
}
19-
let val = raw.trim().to_lowercase().trim_start_matches("v").to_owned();
22+
23+
let val = raw_trim.trim_start_matches("v").to_owned();
24+
2025
Ok(Self {
2126
raw: Some(raw.to_owned()),
2227
val,
@@ -32,42 +37,24 @@ impl TryFrom<PathBuf> for NodeVersion {
3237
}
3338
}
3439

35-
// impl NodeVersion {
36-
// pub async fn try_from_file<P: AsRef<Path>>(file: P) -> anyhow::Result<Self> {
37-
// let raw = read_to_string(&file)?;
38-
39-
// let r = regex!(r"^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$");
40-
41-
// if !r.is_match(&raw) {
42-
// bail!("Invalid Node.js version format: {}", raw);
43-
// }
44-
45-
// let val = raw.trim().to_lowercase().trim_start_matches("v").to_owned();
46-
47-
// Ok(Self {
48-
// raw: Some(raw.to_owned()),
49-
// val,
50-
// })
51-
// }
52-
53-
// pub fn try_default<P: AsRef<Path>>(node_bin_dir: P) -> anyhow::Result<Self> {
54-
// let default_dir = node_bin_dir.as_ref().join("default");
55-
56-
// if !default_dir.try_exists()? {
57-
// bail!("No default Node.js version found");
58-
// }
40+
#[cfg(test)]
41+
mod test {
42+
use anyhow::bail;
43+
use lazy_regex::regex;
44+
45+
#[test]
46+
fn should_xx() -> anyhow::Result<()> {
47+
let raw = r#"v20.0.0
48+
49+
50+
"#;
51+
let raw = raw.trim().to_lowercase();
52+
let r = regex!(r"^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$");
5953

60-
// let val = default_dir
61-
// .read_link()?
62-
// .file_name()
63-
// .map(|v| v.to_string_lossy().into_owned())
64-
// .ok_or_else(|| {
65-
// anyhow::anyhow!(
66-
// "Failed to read default Node.js version from symlink: {:?}",
67-
// default_dir
68-
// )
69-
// })?;
54+
if !r.is_match(&raw) {
55+
bail!("Invalid Node.js version format: {}", raw);
56+
}
7057

71-
// Ok(Self { raw: None, val })
72-
// }
73-
// }
58+
Ok(())
59+
}
60+
}

crates/package_manager/Cargo.toml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ name = "package_manager"
44
version = "0.1.0-67"
55

66
[dependencies]
7-
anyhow = { workspace = true }
8-
lazy-regex = { workspace = true }
9-
snm_config = { workspace = true }
10-
strum = { workspace = true }
11-
up_finder = { workspace = true }
7+
anyhow = { workspace = true }
8+
lazy-regex = { workspace = true }
9+
package_json_parser = { workspace = true }
10+
snm_config = { workspace = true }
11+
strum = { workspace = true }
12+
up_finder = { workspace = true }

crates/package_manager/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
mod kind;
22
mod manager;
3+
mod setup;
34

45
pub use kind::*;
56
pub use manager::*;
7+
pub use setup::*;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// use std::str::FromStr;
2+
3+
// use package_json_parser::PackageJsonParser;
4+
use snm_config::snm_config::SnmConfig;
5+
// use up_finder::UpFinder;
6+
7+
// use crate::PackageManager;
8+
9+
pub struct PackageManagerSetup {
10+
pub config: SnmConfig,
11+
}
12+
13+
impl PackageManagerSetup {
14+
// fn find_up_package_manager(&self) -> anyhow::Result<Option<PackageManager>> {
15+
16+
// let find_up = UpFinder::builder()
17+
// .cwd(&self.config.workspace) // 从当前目录开始
18+
// .build();
19+
20+
// let files = find_up.find_up("package.json");
21+
22+
// if files.is_empty() {
23+
// return Ok(None);
24+
// }
25+
26+
// let Some(package_manager) = files.iter().find_map(|item| {
27+
// let Ok(package_json) = PackageJsonParser::parse(item) else {
28+
// return None;
29+
// };
30+
31+
// let Some(raw) = package_json.package_manager else {
32+
// return None;
33+
// };
34+
35+
// let Some(package_manager) = PackageManager::from_str(&raw.0).ok() else {
36+
// return None;
37+
// };
38+
39+
// Some(package_manager)
40+
// }) else {
41+
// Ok(None)
42+
// }
43+
44+
// Ok(None)
45+
46+
// }
47+
}

crates/snm_pm/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
pub mod ops;
2-
pub mod package_json;
32
pub mod pm;

crates/snm_pm/src/package_json.rs

Lines changed: 0 additions & 118 deletions
This file was deleted.

crates/snm_pm/tests/features/has_bin/bin/npm.cjs

Whitespace-only changes.

crates/snm_pm/tests/features/has_bin/bin/npx.cjs

Whitespace-only changes.

0 commit comments

Comments
 (0)