Sha256: 79e758879ae01d496f95aa7d4030aed375b21cb65b873da72904d9e3b7a684a2
Contents?: true
Size: 1.71 KB
Versions: 5
Compression:
Stored size: 1.71 KB
Contents
# frozen_string_literal: true require "json" module Licensed module Source class NPM def self.type "npm" end def initialize(config) @config = config end def enabled? Licensed::Shell.tool_available?("npm") && File.exist?(@config.pwd.join("package.json")) end def dependencies return @dependencies if defined?(@dependencies) packages = recursive_dependencies(JSON.parse(package_metadata_command)["dependencies"]) @dependencies = packages.map do |name, package| path = package["path"] fail "couldn't locate #{name} under node_modules/" unless path Dependency.new(path, { "type" => NPM.type, "name" => package["name"], "version" => package["version"], "summary" => package["description"], "homepage" => package["homepage"] }) 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| (result[name] ||= {}).update(dependency) recursive_dependencies(dependency["dependencies"] || {}, result) end result end # Returns the output from running `npm list` to get package metadata def package_metadata_command npm_list_command("--json", "--production", "--long") end # Executes an `npm list` command with the provided args and returns the # output from stdout def npm_list_command(*args) Licensed::Shell.execute("npm", "list", *args) end end end end
Version data entries
5 entries across 5 versions & 1 rubygems