Skip to content

Commit 9be5cc2

Browse files
Merge pull request #1239 from KuSh/fix-pnpm-list
2 parents b61f672 + ba235d8 commit 9be5cc2

1 file changed

Lines changed: 19 additions & 11 deletions

File tree

‎src/cmds/js/pnpm_cmd.rs‎

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ use crate::parser::{
1515
/// pnpm list JSON output structure
1616
#[derive(Debug, Deserialize)]
1717
struct PnpmListOutput {
18+
name: String,
1819
#[serde(flatten)]
19-
packages: HashMap<String, PnpmPackage>,
20+
package: PackageJsonListItem,
2021
}
2122

2223
#[derive(Debug, Deserialize)]
23-
struct PnpmPackage {
24+
struct PackageJsonListItem {
2425
version: Option<String>,
2526
#[serde(rename = "dependencies", default)]
26-
dependencies: HashMap<String, PnpmPackage>,
27+
dependencies: HashMap<String, PackageJsonListItem>,
2728
#[serde(rename = "devDependencies", default)]
28-
dev_dependencies: HashMap<String, PnpmPackage>,
29+
dev_dependencies: HashMap<String, PackageJsonListItem>,
2930
}
3031

3132
/// pnpm outdated JSON output structure
@@ -52,13 +53,19 @@ impl OutputParser for PnpmListParser {
5253

5354
fn parse(input: &str) -> ParseResult<DependencyState> {
5455
// Tier 1: Try JSON parsing
55-
match serde_json::from_str::<PnpmListOutput>(input) {
56+
match serde_json::from_str::<Vec<PnpmListOutput>>(input) {
5657
Ok(json) => {
5758
let mut dependencies = Vec::new();
5859
let mut total_count = 0;
5960

60-
for (name, pkg) in &json.packages {
61-
collect_dependencies(name, pkg, false, &mut dependencies, &mut total_count);
61+
for pkg in &json {
62+
collect_dependencies(
63+
pkg.name.as_str(),
64+
&pkg.package,
65+
false,
66+
&mut dependencies,
67+
&mut total_count,
68+
);
6269
}
6370

6471
let result = DependencyState {
@@ -88,7 +95,7 @@ impl OutputParser for PnpmListParser {
8895
/// Recursively collect dependencies from pnpm package tree
8996
fn collect_dependencies(
9097
name: &str,
91-
pkg: &PnpmPackage,
98+
pkg: &PackageJsonListItem,
9299
is_dev: bool,
93100
deps: &mut Vec<Dependency>,
94101
count: &mut usize,
@@ -502,16 +509,17 @@ mod tests {
502509

503510
#[test]
504511
fn test_pnpm_list_parser_json() {
505-
let json = r#"{
506-
"my-project": {
512+
let json = r#"[
513+
{
514+
"name": "my-project",
507515
"version": "1.0.0",
508516
"dependencies": {
509517
"express": {
510518
"version": "4.18.2"
511519
}
512520
}
513521
}
514-
}"#;
522+
]"#;
515523

516524
let result = PnpmListParser::parse(json);
517525
assert_eq!(result.tier(), 1);

0 commit comments

Comments
 (0)