Sha256: b5833388b12096528f4cf7ee32103312e15cfaf153bd04b664897682d65166cd

Contents?: true

Size: 1.41 KB

Versions: 11

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module Spandx
  module Js
    class YarnPkg < ::Spandx::Core::Gateway
      DEFAULT_SOURCE = 'https://registry.yarnpkg.com'
      attr_reader :http

      def initialize(http: Spandx.http)
        @http = http
      end

      def matches?(dependency)
        %i[npm yarn].include?(dependency.package_manager)
      end

      def licenses_for(dependency)
        metadata = metadata_for(dependency)

        return [] if metadata.empty?

        [metadata['license']].compact
      end

      def metadata_for(dependency)
        uri = uri_for(dependency)
        response = http.get(uri, escape: false)

        if http.ok?(response)
          json = Oj.load(response.body)
          json['versions'] ? json['versions'][dependency.version] : json
        else
          {}
        end
      end

      private

      def uri_for(dependency)
        URI.parse(source_for(dependency)).tap do |uri|
          uri.path = if dependency.name.include?('/')
                       '/' + dependency.name.sub('/', '%2f')
                     else
                       '/' + dependency.name + '/' + dependency.version
                     end
        end
      end

      def source_for(dependency)
        if dependency.meta['resolved']
          uri = URI.parse(dependency.meta['resolved'])
          "#{uri.scheme}://#{uri.host}:#{uri.port}"
        else
          DEFAULT_SOURCE
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
spandx-0.18.3 lib/spandx/js/yarn_pkg.rb
spandx-0.18.2 lib/spandx/js/yarn_pkg.rb
spandx-0.18.1 lib/spandx/js/yarn_pkg.rb
spandx-0.18.0 lib/spandx/js/yarn_pkg.rb
spandx-0.17.0 lib/spandx/js/yarn_pkg.rb
spandx-0.16.1 lib/spandx/js/yarn_pkg.rb
spandx-0.16.0 lib/spandx/js/yarn_pkg.rb
spandx-0.15.1 lib/spandx/js/yarn_pkg.rb
spandx-0.15.0 lib/spandx/js/yarn_pkg.rb
spandx-0.14.0 lib/spandx/js/yarn_pkg.rb
spandx-0.13.5 lib/spandx/js/yarn_pkg.rb