Sha256: c9b0a9edb45d035653a33cfee9dbe5eb3c880d183f188261535651866c8ff788

Contents?: true

Size: 1.41 KB

Versions: 9

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

require "dependabot/composer/version"

module Dependabot
  module Composer
    module Helpers
      # From composers json-schema: https://getcomposer.org/schema.json
      COMPOSER_V2_NAME_REGEX = %r{^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$}
      # From https://github.com/composer/composer/blob/b7d770659b4e3ef21423bd67ade935572913a4c1/src/Composer/Repository/PlatformRepository.php#L33
      PLATFORM_PACKAGE_REGEX = /
        ^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[a-z0-9](?:[_.-]?[a-z0-9]+)*
        |composer-(?:plugin|runtime)-api)$
      /x

      def self.composer_version(composer_json, parsed_lockfile = nil)
        if parsed_lockfile && parsed_lockfile["plugin-api-version"]
          version = Composer::Version.new(parsed_lockfile["plugin-api-version"])
          return version.canonical_segments.first == 1 ? "1" : "2"
        else
          return "1" if composer_json["name"] && composer_json["name"] !~ COMPOSER_V2_NAME_REGEX
          return "1" if invalid_v2_requirement?(composer_json)
        end

        "2"
      end

      def self.invalid_v2_requirement?(composer_json)
        return false unless composer_json.key?("require")

        composer_json["require"].keys.any? do |key|
          key !~ PLATFORM_PACKAGE_REGEX && key !~ COMPOSER_V2_NAME_REGEX
        end
      end
      private_class_method :invalid_v2_requirement?
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dependabot-composer-0.230.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.229.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.228.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.227.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.226.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.225.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.224.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.223.0 lib/dependabot/composer/helpers.rb
dependabot-composer-0.222.0 lib/dependabot/composer/helpers.rb