@@ -204,6 +204,7 @@ def update_dependencies_by_purl(
204
204
is_runtime = False ,
205
205
is_optional = False ,
206
206
is_resolved = False ,
207
+ is_direct = True ,
207
208
):
208
209
209
210
metadata_deps = ['peerDependenciesMeta' , 'dependenciesMeta' ]
@@ -221,6 +222,7 @@ def update_dependencies_by_purl(
221
222
is_runtime = is_runtime ,
222
223
is_optional = is_optional ,
223
224
is_resolved = is_resolved ,
225
+ is_direct = is_direct ,
224
226
)
225
227
dependecies_by_purl [dep_purl ] = dep_package
226
228
@@ -244,6 +246,7 @@ def update_dependencies_by_purl(
244
246
is_runtime = is_runtime ,
245
247
is_optional = metadata .get ("optional" ),
246
248
is_resolved = is_resolved ,
249
+ is_direct = is_direct ,
247
250
)
248
251
dependecies_by_purl [dep_purl ] = dep_package
249
252
continue
@@ -264,6 +267,7 @@ def update_dependencies_by_purl(
264
267
is_runtime = is_runtime ,
265
268
is_optional = is_optional ,
266
269
is_resolved = is_resolved ,
270
+ is_direct = is_direct ,
267
271
)
268
272
dependecies_by_purl [dep_purl ] = dep_package
269
273
@@ -476,6 +480,10 @@ def parse(cls, location, package_only=False):
476
480
477
481
class BaseNpmLockHandler (BaseNpmHandler ):
478
482
483
+ @classmethod
484
+ def is_lockfile (cls ):
485
+ return True
486
+
479
487
@classmethod
480
488
def parse (cls , location , package_only = False ):
481
489
@@ -590,6 +598,7 @@ def parse(cls, location, package_only=False):
590
598
is_runtime = is_runtime ,
591
599
is_optional = is_optional ,
592
600
is_resolved = True ,
601
+ is_direct = False ,
593
602
)
594
603
595
604
# URLs and checksums
@@ -638,6 +647,7 @@ def parse(cls, location, package_only=False):
638
647
is_runtime = is_runtime ,
639
648
is_optional = is_optional ,
640
649
is_resolved = False ,
650
+ is_direct = True ,
641
651
)
642
652
643
653
resolved_package .dependencies = [
@@ -723,6 +733,10 @@ class YarnLockV2Handler(BaseNpmHandler):
723
733
def is_datafile (cls , location , filetypes = tuple ()):
724
734
return super ().is_datafile (location , filetypes = filetypes ) and is_yarn_v2 (location )
725
735
736
+ @classmethod
737
+ def is_lockfile (cls ):
738
+ return True
739
+
726
740
@classmethod
727
741
def parse (cls , location , package_only = False ):
728
742
"""
@@ -833,6 +847,10 @@ class YarnLockV1Handler(BaseNpmHandler):
833
847
description = 'yarn.lock lockfile v1 format'
834
848
documentation_url = 'https://classic.yarnpkg.com/lang/en/docs/yarn-lock/'
835
849
850
+ @classmethod
851
+ def is_lockfile (cls ):
852
+ return True
853
+
836
854
@classmethod
837
855
def is_datafile (cls , location , filetypes = tuple ()):
838
856
return super ().is_datafile (location , filetypes = filetypes ) and not is_yarn_v2 (location )
@@ -953,6 +971,7 @@ def parse(cls, location, package_only=False):
953
971
scope = 'dependencies' ,
954
972
is_optional = False ,
955
973
is_runtime = True ,
974
+ is_direct = True ,
956
975
)
957
976
resolved_package_data .dependencies .append (subdep )
958
977
@@ -972,6 +991,7 @@ def parse(cls, location, package_only=False):
972
991
scope = 'dependencies' ,
973
992
is_optional = False ,
974
993
is_runtime = True ,
994
+ is_direct = False ,
975
995
resolved_package = resolved_package_data .to_dict (),
976
996
)
977
997
dependencies .append (dep .to_dict ())
@@ -988,6 +1008,10 @@ def parse(cls, location, package_only=False):
988
1008
989
1009
class BasePnpmLockHandler (BaseNpmHandler ):
990
1010
1011
+ @classmethod
1012
+ def is_lockfile (cls ):
1013
+ return True
1014
+
991
1015
@classmethod
992
1016
def parse (cls , location , package_only = False ):
993
1017
"""
@@ -1063,19 +1087,22 @@ def parse(cls, location, package_only=False):
1063
1087
scope = 'dependencies' ,
1064
1088
dependecies_by_purl = deps_for_resolved_by_purl ,
1065
1089
is_resolved = True ,
1090
+ is_direct = False ,
1066
1091
)
1067
1092
cls .update_dependencies_by_purl (
1068
1093
dependencies = peer_dependencies ,
1069
1094
scope = 'peerDependencies' ,
1070
1095
dependecies_by_purl = deps_for_resolved_by_purl ,
1071
1096
is_optional = True ,
1097
+ is_direct = False ,
1072
1098
)
1073
1099
cls .update_dependencies_by_purl (
1074
1100
dependencies = optional_dependencies ,
1075
1101
scope = 'optionalDependencies' ,
1076
1102
dependecies_by_purl = deps_for_resolved_by_purl ,
1077
1103
is_resolved = True ,
1078
1104
is_optional = True ,
1105
+ is_direct = False ,
1079
1106
)
1080
1107
cls .update_dependencies_by_purl (
1081
1108
dependencies = peer_dependencies_meta ,
@@ -1122,6 +1149,7 @@ def parse(cls, location, package_only=False):
1122
1149
is_optional = is_optional ,
1123
1150
is_runtime = is_runtime ,
1124
1151
is_resolved = True ,
1152
+ is_direct = True ,
1125
1153
resolved_package = resolved_package .to_dict (),
1126
1154
extra_data = extra_data_deps ,
1127
1155
)
@@ -1577,7 +1605,7 @@ def bundle_deps_mapper(bundle_deps, package):
1577
1605
return package
1578
1606
1579
1607
1580
- def deps_mapper (deps , package , field_name ):
1608
+ def deps_mapper (deps , package , field_name , is_direct = True ):
1581
1609
"""
1582
1610
Handle deps such as dependencies, devDependencies, peerDependencies, optionalDependencies
1583
1611
return a tuple of (dep type, list of deps)
@@ -1630,6 +1658,7 @@ def deps_mapper(deps, package, field_name):
1630
1658
purl = purl ,
1631
1659
scope = field_name ,
1632
1660
extracted_requirement = requirement ,
1661
+ is_direct = is_direct ,
1633
1662
** dependency_attributes
1634
1663
)
1635
1664
dependencies .append (dep )
0 commit comments