Skip to content

Commit 961132b

Browse files
committed
chore: bump package_json_parser version to 0.0.7 and improve error handling in package.json parsing
1 parent 0a489f6 commit 961132b

File tree

6 files changed

+83
-14
lines changed

6 files changed

+83
-14
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ indicatif = "0.17.8"
108108
flate2 = "1.0.28"
109109
glob = "0.3.2"
110110
once_cell = "1.20.2"
111-
package_json_parser = "0.0.6"
111+
package_json_parser = "0.0.7"
112112
strum = { version = "0.27.1", features = ["derive"] }
113113
tar = "0.4.40"
114114
tempfile = "=3.16.0"

crates/package_manager/src/resolver.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ impl PackageManagerResolver {
3737
if acc.is_some() {
3838
return Ok(acc);
3939
}
40-
let package_json = PackageJsonParser::parse(item)?;
4140

42-
Ok(package_json.package_manager)
41+
let res = PackageJsonParser::parse(item).map_err(|e| {
42+
eprintln!("{:?}", e);
43+
anyhow::anyhow!("parse package.json failed, err: {:?}", e)
44+
})?;
45+
46+
return Ok(res.package_manager);
4347
})?;
4448

4549
if let Some(raw) = package_manager {

crates/shim/src/pm_shim.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,14 @@ impl PmShim {
6565

6666
let dir = resolver.ensure_package_manager(&package_manager).await?;
6767

68-
let Ok(json) = PackageJsonParser::parse(dir.join("package.json")) else {
69-
bail!("Failed to parse package.json");
70-
};
71-
72-
// let json = PJson::from(dir)?;
73-
74-
let map = json.bin_to_hash_map()?;
75-
76-
// let x = map.get(bin_name);
68+
let json = PackageJsonParser::parse(dir.join("package.json")).map_err(|e| {
69+
eprintln!("{:?}", e);
70+
anyhow::anyhow!("parse package.json failed, err: {:?}", e)
71+
})?;
72+
73+
let map = json
74+
.bin_to_hash_map()
75+
.map_err(|e| anyhow::anyhow!("{}", e))?;
7776

7877
if let Some(file) = map.get(bin_name) {
7978
let file = dir.join(file);

crates/test_utils/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ is: {}
341341

342342
let res = self.snapshots.join("\n");
343343

344+
let current_dir = current_dir().unwrap();
345+
346+
let res = res.replace(&current_dir.display().to_string(), ".");
347+
344348
f(&res);
345349

346350
Ok(())

e2e/tests/snapshots/snm_test____test_context_wrapped_test_package_json_parse_err.snap

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,31 @@ is: snm i
77

88

99
stdout:
10-
stderr:Error: invalid type: string "true", expected a boolean at line 3 column 19
10+
stderr:package_json::json_parse_failed (https://docs.rs/package_json_parser/0.0.7/package_json_parser/enum.ErrorKind.html#variant.JsonParseError)
11+
12+
× JSON parsing failed
13+
╰─▶ invalid type: string "true", expected a boolean at line 3 column 19
14+
╭─[./tests/fixtures/package_json_parse_err/package.json:1:1]
15+
1 │ ╭─▶ {
16+
2 │ │ "packageManager": "pnpm@9.14.2",
17+
3 │ │ "private": "true"
18+
· │ ─────────┬─────────
19+
· │ ╰── here
20+
4 │ ╰─▶ }
21+
╰────
22+
help: Please check the JSON syntax
23+
24+
Error: parse package.json failed, err: package_json::json_parse_failed (https://docs.rs/package_json_parser/0.0.7/package_json_parser/enum.ErrorKind.html#variant.JsonParseError)
25+
26+
× JSON parsing failed
27+
╰─▶ invalid type: string "true", expected a boolean at line 3 column 19
28+
╭─[./tests/fixtures/package_json_parse_err/package.json:1:1]
29+
1 │ ╭─▶ {
30+
2 │ │ "packageManager": "pnpm@9.14.2",
31+
3 │ │ "private": "true"
32+
· │ ─────────┬─────────
33+
· │ ╰── here
34+
4 │ ╰─▶ }
35+
╰────
36+
help: Please check the JSON syntax
1137
status:1

e2e/tests/snapshots/snm_test____test_context_wrapped_test_snm_install_with_invalid_private_package_json.snap

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,41 @@ is: snm i
77

88

99
stdout:
10-
stderr:Error: invalid type: string "true", expected a boolean at line 5 column 18
10+
stderr:package_json::json_parse_failed (https://docs.rs/package_json_parser/0.0.7/package_json_parser/enum.ErrorKind.html#variant.JsonParseError)
11+
12+
× JSON parsing failed
13+
╰─▶ invalid type: string "true", expected a boolean at line 5 column 18
14+
╭─[./tests/fixtures/invalid_package_json/package.json:1:1]
15+
1 │ ╭─▶ {
16+
2 │ │ "name": "snm_i",
17+
3 │ │ "version": "1.0.0",
18+
4 │ │ "packageManager": "pnpm@9.0.0",
19+
5 │ │ "private":"true",
20+
· │ ─────────┬─────────
21+
· │ ╰── here
22+
6 │ │ "dependencies": {
23+
7 │ │ "react": "18.3.1"
24+
8 │ │ }
25+
9 │ ╰─▶ }
26+
╰────
27+
help: Please check the JSON syntax
28+
29+
Error: parse package.json failed, err: package_json::json_parse_failed (https://docs.rs/package_json_parser/0.0.7/package_json_parser/enum.ErrorKind.html#variant.JsonParseError)
30+
31+
× JSON parsing failed
32+
╰─▶ invalid type: string "true", expected a boolean at line 5 column 18
33+
╭─[./tests/fixtures/invalid_package_json/package.json:1:1]
34+
1 │ ╭─▶ {
35+
2 │ │ "name": "snm_i",
36+
3 │ │ "version": "1.0.0",
37+
4 │ │ "packageManager": "pnpm@9.0.0",
38+
5 │ │ "private":"true",
39+
· │ ─────────┬─────────
40+
· │ ╰── here
41+
6 │ │ "dependencies": {
42+
7 │ │ "react": "18.3.1"
43+
8 │ │ }
44+
9 │ ╰─▶ }
45+
╰────
46+
help: Please check the JSON syntax
1147
status:1

0 commit comments

Comments
 (0)