Sha256: b7bfa91d86ac7d2473920247e78786d4edbeea30afff9087c0048f754869455d

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require "json"

module Licensed
  module Source
    class NPM
      def initialize(config)
        @config = config
      end

      def type
        "npm"
      end

      def enabled?
        @config.enabled?(type) && File.exist?(@config.pwd.join("package.json"))
      end

      def dependencies
        return @dependencies if defined?(@dependencies)

        packages = recursive_dependencies(JSON.parse(command)["dependencies"])

        @dependencies = packages.map do |name, package|
          Dependency.new(package["realPath"], {
            "type"     => type,
            "name"     => package["name"],
            "version"  => package["version"],
            "summary"  => package["description"],
            "homepage" => package["homepage"]
          })
        end
      end

      def command
        `npm list --json --production --long`
      end

      def recursive_dependencies(dependencies, result = {})
        dependencies.each do |name, dependency|
          (result[name] ||= {}).update(dependency)
          recursive_dependencies(dependency["dependencies"] || {}, result)
        end
        result
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
licensed-0.6.0 lib/licensed/source/npm.rb