class XDep::Npm::CSVOutput

Constants

KNOWN_DEPENDENCIES

Public Class Methods

accepts?(filename) click to toggle source
# File lib/xdep/npm.rb, line 9
def self.accepts?(filename)
  filename == "package.json"
end

Protected Instance Methods

get_rows(input) click to toggle source
# File lib/xdep/npm.rb, line 19
def get_rows(input)
  rows = []

  Dir.chdir(File.dirname(input.path)) do
    # This is very slow...
    ls.each do |name, version|
      info = describe("#{name}@#{version["version"]}")
      license = info["licenses"] ? format_licenses(info["licenses"]) : info["license"]
      rows << [ "JavaScript", name, version["version"], info["description"], info["homepage"], license ]
    end
  end

  rows
end
known_dependencies() click to toggle source
# File lib/xdep/npm.rb, line 15
def known_dependencies
  KNOWN_DEPENDENCIES
end

Private Instance Methods

describe(pkg) click to toggle source
# File lib/xdep/npm.rb, line 42
def describe(pkg)
  # Include license and licenses else we won't get JSON output if one doesn't exist
  out = `npm view #{pkg} description homepage license licenses --json 2>&1`
  raise Error, "Failed to execute npm: #{out}" unless $?.exitstatus.zero?
  parse_json(out)
end
format_licenses(licenses) click to toggle source
# File lib/xdep/npm.rb, line 55
def format_licenses(licenses)
  licenses.map do |data|
    s = data["type"]
    s << " (#{data["url"]})" if data["url"]
    s
  end.join(", ")
end
ls() click to toggle source
# File lib/xdep/npm.rb, line 36
def ls
  out = `npm ls --depth=0 --json 2>&1`
  raise Error, "Failed to execute npm: #{out}" unless $?.exitstatus.zero?
  parse_json(out)["dependencies"]
end
parse_json(out) click to toggle source
# File lib/xdep/npm.rb, line 49
def parse_json(out)
  JSON.parse(out)
rescue JSON::ParserError => e
  raise Error, "Failed to parse npm output: #{e}"
end