Sha256: 2d3b73a8ed67e03af4e44ed6b3d7b1a25c1b11e79f634b99110d4b0ce62c955d
Contents?: true
Size: 2 KB
Versions: 5
Compression:
Stored size: 2 KB
Contents
# frozen_string_literal: true require "json" module Licensed module Sources class NPM < Source def self.type "npm" end def enabled? Licensed::Shell.tool_available?("npm") && File.exist?(@config.pwd.join("package.json")) end def enumerate_dependencies @yarn_lock_present = File.exist?(@config.pwd.join("yarn.lock")) packages.map do |name, package| path = package["path"] Dependency.new( name: name, version: package["version"], path: path, metadata: { "type" => NPM.type, "name" => package["name"], "summary" => package["description"], "homepage" => package["homepage"] } ) end end def packages root_dependencies = JSON.parse(package_metadata_command)["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 results.each do |package| name_with_version = "#{name}-#{package["version"]}" hsh[name_with_version] = package end end end end # Recursively parse dependency JSON data. Returns a hash mapping the # package name to it's metadata def recursive_dependencies(dependencies, result = {}) dependencies.each do |name, dependency| next if @yarn_lock_present && dependency["missing"] (result[name] ||= []) << dependency recursive_dependencies(dependency["dependencies"] || {}, result) end result end # Returns the output from running `npm list` to get package metadata def package_metadata_command Licensed::Shell.execute("npm", "list", "--json", "--production", "--long", allow_failure: true) end end end end
Version data entries
5 entries across 5 versions & 1 rubygems