lib/licensed/sources/npm.rb in licensed-2.12.2 vs lib/licensed/sources/npm.rb in licensed-2.13.0

- old
+ new

@@ -28,11 +28,11 @@ ) end end def packages - root_dependencies = JSON.parse(package_metadata_command)["dependencies"] + root_dependencies = package_metadata["dependencies"] recursive_dependencies(root_dependencies).each_with_object({}) do |(name, results), hsh| results.uniq! { |package| package["version"] } if results.size == 1 hsh[name] = results[0] else @@ -52,9 +52,21 @@ next if yarn_lock_present && dependency["missing"] (result[name] ||= []) << dependency recursive_dependencies(dependency["dependencies"] || {}, result) end result + end + + # Returns parsed package metadata returned from `npm list` + def package_metadata + return @package_metadata if defined?(@package_metadata) + + @package_metadata = begin + JSON.parse(package_metadata_command) + rescue JSON::ParserError => e + raise Licensed::Sources::Source::Error, + "Licensed was unable to parse the output from 'npm list'. Please run 'npm list --json --long' and check for errors. Error: #{e.message}" + end end # Returns the output from running `npm list` to get package metadata def package_metadata_command args = %w(--json --long)