@@ -13,9 +13,9 @@ use crate::{
13
13
shell:: { color_choice:: ColorChoice , verbosity:: Verbosity } ,
14
14
source,
15
15
target:: {
16
- pm, LocalGitRepo , MavenPackage , Package , PackageHost , Sbom , SbomStandard , SingleTargetSeed ,
17
- SingleTargetSeedKind , TargetSeed , TargetSeedKind , TargetType , ToTargetSeed ,
18
- ToTargetSeedKind , VcsUrl ,
16
+ pm, LocalGitRepo , MavenPackage , MultiTargetSeed , MultiTargetSeedKind , Package , PackageHost ,
17
+ Sbom , SbomStandard , SingleTargetSeed , SingleTargetSeedKind , TargetSeed , TargetSeedKind ,
18
+ TargetType , ToTargetSeed , ToTargetSeedKind , VcsUrl ,
19
19
} ,
20
20
} ;
21
21
use clap:: { Parser as _, ValueEnum } ;
@@ -651,7 +651,13 @@ impl ToTargetSeed for CheckArgs {
651
651
652
652
Ok ( TargetSeed :: Single ( seed) )
653
653
}
654
- TargetSeedKind :: Multi ( _multi_target_seed_kind) => todo ! ( ) ,
654
+ TargetSeedKind :: Multi ( multi_target_seed_kind) => {
655
+ let seed = MultiTargetSeed {
656
+ kind : multi_target_seed_kind,
657
+ specifier : command. get_specifier ( ) . to_string ( ) ,
658
+ } ;
659
+ Ok ( TargetSeed :: Multi ( seed) )
660
+ }
655
661
}
656
662
}
657
663
}
@@ -673,6 +679,9 @@ pub enum CheckCommand {
673
679
/// Analyze packages specified in an SBOM document
674
680
#[ command( hide = true ) ]
675
681
Sbom ( CheckSbomArgs ) ,
682
+ /// Analyze npm dependencies specified in an package-lock.json document
683
+ #[ command( hide = true ) ]
684
+ PackageLockJson ( CheckPackageLockJsonArgs ) ,
676
685
}
677
686
678
687
impl CheckCommand {
@@ -684,6 +693,7 @@ impl CheckCommand {
684
693
Pypi ( args) => & args. package ,
685
694
Repo ( args) => & args. source ,
686
695
Sbom ( args) => & args. path ,
696
+ PackageLockJson ( args) => & args. path ,
687
697
}
688
698
}
689
699
}
@@ -696,6 +706,7 @@ impl ToTargetSeedKind for CheckCommand {
696
706
CheckCommand :: Pypi ( args) => args. to_target_seed_kind ( ) ,
697
707
CheckCommand :: Repo ( args) => args. to_target_seed_kind ( ) ,
698
708
CheckCommand :: Sbom ( args) => args. to_target_seed_kind ( ) ,
709
+ CheckCommand :: PackageLockJson ( args) => args. to_target_seed_kind ( ) ,
699
710
}
700
711
}
701
712
}
@@ -887,6 +898,24 @@ impl ToTargetSeedKind for CheckSbomArgs {
887
898
}
888
899
}
889
900
901
+ #[ derive( Debug , Clone , clap:: Args ) ]
902
+ pub struct CheckPackageLockJsonArgs {
903
+ /// package-lock.json to analyze
904
+ pub path : String ,
905
+ }
906
+
907
+ impl ToTargetSeedKind for CheckPackageLockJsonArgs {
908
+ fn to_target_seed_kind ( & self ) -> Result < TargetSeedKind > {
909
+ let path = PathBuf :: from ( & self . path ) ;
910
+ if path. exists ( ) && self . path . ends_with ( "package-lock.json" ) {
911
+ return Ok ( TargetSeedKind :: Multi ( MultiTargetSeedKind :: PackageLockJson (
912
+ path,
913
+ ) ) ) ;
914
+ }
915
+ Err ( hc_error ! ( "The provided package-lock.json does not exist" ) )
916
+ }
917
+ }
918
+
890
919
#[ derive( Debug , Clone , clap:: Args ) ]
891
920
pub struct SchemaArgs {
892
921
#[ clap( subcommand) ]
@@ -1616,6 +1645,7 @@ mod tests {
1616
1645
CheckCommand :: Pypi ( args) => args. package ,
1617
1646
CheckCommand :: Repo ( args) => args. source ,
1618
1647
CheckCommand :: Sbom ( args) => args. path ,
1648
+ CheckCommand :: PackageLockJson ( args) => args. path ,
1619
1649
}
1620
1650
}
1621
1651
0 commit comments