Skip to content

Commit 444b7df

Browse files
dd-jyRHeynsZaRuan Heyns
authored
Fix issues with npm ls output (#132)
* Fix issues with npm ls output (#134) --------- Signed-off-by: Jiyeong Seok <[email protected]> Signed-off-by: Ruan Heyns <[email protected]> Co-authored-by: Ruan Heyns <[email protected]> Co-authored-by: Ruan Heyns <[email protected]>
1 parent 387a840 commit 444b7df

File tree

1 file changed

+11
-3
lines changed
  • src/fosslight_dependency/package_manager

1 file changed

+11
-3
lines changed

src/fosslight_dependency/package_manager/Npm.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ def parse_rel_dependencies(self, rel_name, rel_ver, rel_dependencies):
7979
_version = 'version'
8080

8181
for rel_dep_name in rel_dependencies.keys():
82+
# Optional, non-installed dependencies are listed as empty objects
83+
if rel_dependencies[rel_dep_name] == {}:
84+
continue
8285
if f'{rel_name}({rel_ver})' not in self.relation_tree:
8386
self.relation_tree[f'{rel_name}({rel_ver})'] = []
8487
self.relation_tree[f'{rel_name}({rel_ver})'].append(f'{rel_dep_name}({rel_dependencies[rel_dep_name][_version]})')
@@ -91,13 +94,17 @@ def parse_transitive_relationship(self):
9194
_version = 'version'
9295
_name = 'name'
9396

94-
cmd = 'npm ls -a --prod --json'
95-
rel_tree = subprocess.check_output(cmd, shell=True, encoding='utf8')
97+
cmd = 'npm ls -a --prod --json -s'
98+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
99+
rel_tree = result.stdout
96100
if rel_tree is None:
97101
logger.error(f"It returns the error: {cmd}")
98-
logger.error(f"Fail to run {cmd}")
102+
logger.error(f"No output for {cmd}")
99103
return False
100104

105+
if result.returncode == 1:
106+
logger.warning(f'npm ls returns an error code: {result.stderr}')
107+
101108
try:
102109
rel_json = json.loads(rel_tree)
103110
self.package_name = f'{rel_json[_name]}({rel_json[_version]})'
@@ -110,6 +117,7 @@ def parse_direct_dependencies(self):
110117
self.parse_transitive_relationship()
111118
except Exception as e:
112119
logger.warning(f'Cannot print direct/transitive dependency: {e}')
120+
self.direct_dep = False
113121

114122
def parse_oss_information(self, f_name):
115123
with open(f_name, 'r', encoding='utf8') as json_file:

0 commit comments

Comments
 (0)