class Licensed::Sources::Yarn::Berry
Public Class Methods
version_requirement()
click to toggle source
# File lib/licensed/sources/yarn/berry.rb, line 9 def self.version_requirement Gem::Requirement.new(">= 2.0") end
Public Instance Methods
enumerate_dependencies()
click to toggle source
# File lib/licensed/sources/yarn/berry.rb, line 13 def enumerate_dependencies packages.map do |name, package| Dependency.new( name: name, version: package["version"], path: package["path"], metadata: { "type" => self.class.type, "name" => package["name"], "homepage" => package["homepage"] } ) end end
packages()
click to toggle source
Finds packages that the current project relies on based on the output from ‘yarn info`
# File lib/licensed/sources/yarn/berry.rb, line 29 def packages # parse all lines of output to json and find one that is "type": "tree" yarn_info = JSON.parse("[#{yarn_info_command.lines.join(",")}]") mapped_packages = yarn_info.reduce({}) do |accum, package| name, _ = package["value"].rpartition("@") version = package.dig("children", "Version") id = "#{name}@#{version}" accum[name] ||= [] accum[name] << { "id" => id, "name" => name, "version" => version, "homepage" => package.dig("children", "Manifest", "Homepage"), "path" => dependency_paths[id] } accum end mapped_packages.each_with_object({}) do |(name, results), hsh| results.uniq! { |package| package["version"] } if results.size == 1 # if there is only one package for a name, reference it by name hsh[name] = results[0] else # if there is more than one package for a name, reference each by id results.each do |package| hsh[package["id"]] = package end end end end
yarn_info_command()
click to toggle source
Returns the output from running ‘yarn list` to get project dependencies
# File lib/licensed/sources/yarn/berry.rb, line 63 def yarn_info_command args = %w(--json --manifest --recursive --all) Licensed::Shell.execute("yarn", "info", *args) end