Sha256: fff80d15b35ffc0ec3c78c3808ba60ca00477f4e4abd86d27506cddf9daef624

Contents?: true

Size: 1.05 KB

Versions: 5

Compression:

Stored size: 1.05 KB

Contents

require 'json'

module LicenseFinder
  class NPM
    DEPENDENCY_GROUPS = ["dependencies", "devDependencies", "bundleDependencies", "bundledDependencies"]

    def self.current_packages
      json = npm_json
      dependencies = DEPENDENCY_GROUPS.map { |g| (json[g] || {}).values }.flatten(1).reject{ |d| d.is_a?(String) }

      dependencies.map do |node_module|
        NpmPackage.new(node_module)
      end
    end

    def self.active?
      package_path.exist?
    end

    private

    def self.npm_json
      command = "npm list --json --long"
      output, success = capture(command)
      if success
        json = JSON(output)
      else
        json = JSON(output) rescue nil
        if json
          $stderr.puts "Command #{command} returned error but parsing succeeded." unless ENV['test_run']
        else
          raise "Command #{command} failed to execute: #{output}"
        end
      end
      json
    end

    def self.capture(command)
      [`#{command}`, $?.success?]
    end

    def self.package_path
      Pathname.new('package.json')
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
license_finder-1.1.1-java lib/license_finder/package_managers/npm.rb
license_finder-1.1.1 lib/license_finder/package_managers/npm.rb
license_finder-1.1.0 lib/license_finder/package_managers/npm.rb
license_finder-1.0.1 lib/license_finder/package_managers/npm.rb
license_finder-1.0.0.1 lib/license_finder/package_managers/npm.rb