Class: Dependabot::Bun::PackageManagerHelper
- Inherits:
-
Object
- Object
- Dependabot::Bun::PackageManagerHelper
- Extended by:
- T::Helpers, T::Sig
- Defined in:
- lib/dependabot/bun/package_manager.rb
Instance Method Summary collapse
- #detect_version(name) ⇒ Object
- #find_engine_constraints_as_requirement(name) ⇒ Object
-
#initialize(package_json, lockfiles, registry_config_files, credentials) ⇒ PackageManagerHelper
constructor
A new instance of PackageManagerHelper.
- #installed_version ⇒ Object
- #language ⇒ Object
- #language_requirement ⇒ Object
- #package_manager ⇒ Object
- #package_manager_by_name(name) ⇒ Object
- #setup(name) ⇒ Object
Constructor Details
#initialize(package_json, lockfiles, registry_config_files, credentials) ⇒ PackageManagerHelper
Returns a new instance of PackageManagerHelper.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/dependabot/bun/package_manager.rb', line 68 def initialize(package_json, lockfiles, registry_config_files, credentials) @package_json = package_json @lockfiles = lockfiles @registry_helper = T.let( RegistryHelper.new(registry_config_files, credentials), Dependabot::Bun::RegistryHelper ) @manifest_package_manager = T.let(package_json&.fetch(MANIFEST_PACKAGE_MANAGER_KEY, nil), T.nilable(String)) @engines = T.let(package_json&.fetch(MANIFEST_ENGINES_KEY, nil), T.nilable(T::Hash[String, T.untyped])) @installed_versions = T.let({}, T::Hash[String, String]) @registries = T.let({}, T::Hash[String, String]) @language = T.let(nil, T.nilable(Ecosystem::VersionManager)) @language_requirement = T.let(nil, T.nilable(Requirement)) end |
Instance Method Details
#detect_version(name) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/dependabot/bun/package_manager.rb', line 173 def detect_version(name) # Prioritize version mentioned in "packageManager" instead of "engines" if @manifest_package_manager&.start_with?("#{name}@") detected_version = @manifest_package_manager.split("@").last.to_s end # If "packageManager" has no version specified, check if we can extract "engines" information detected_version ||= check_engine_version(name) if detected_version.to_s.empty? # If neither "packageManager" nor "engines" have versions, infer version from lockfileVersion detected_version ||= guessed_version(name) if detected_version.to_s.empty? # Strip and validate version format detected_version_string = detected_version.to_s.strip # Ensure detected_version is neither "0" nor invalid format return if detected_version_string == "0" || !detected_version_string.match?(ConstraintHelper::VERSION_REGEX) detected_version_string end |
#find_engine_constraints_as_requirement(name) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/dependabot/bun/package_manager.rb', line 105 def find_engine_constraints_as_requirement(name) Dependabot.logger.info("Processing engine constraints for #{name}") return nil unless @engines.is_a?(Hash) && @engines[name] raw_constraint = @engines[name].to_s.strip return nil if raw_constraint.empty? constraints = ConstraintHelper.extract_ruby_constraints(raw_constraint) # When constraints are invalid we return constraints array nil if constraints.nil? Dependabot.logger.warn( "Unrecognized constraint format for #{name}: #{raw_constraint}" ) end if constraints && !constraints.empty? Dependabot.logger.info("Parsed constraints for #{name}: #{constraints.join(', ')}") Requirement.new(constraints) end rescue StandardError => e Dependabot.logger.error("Error processing constraints for #{name}: #{e.}") nil end |
#installed_version ⇒ Object
213 214 215 |
# File 'lib/dependabot/bun/package_manager.rb', line 213 def installed_version Helpers.bun_version end |
#language ⇒ Object
92 93 94 95 96 97 |
# File 'lib/dependabot/bun/package_manager.rb', line 92 def language @language ||= Language.new( raw_version: Helpers.node_version, requirement: language_requirement ) end |
#language_requirement ⇒ Object
100 101 102 |
# File 'lib/dependabot/bun/package_manager.rb', line 100 def language_requirement @language_requirement ||= find_engine_constraints_as_requirement(Language::NAME) end |
#package_manager ⇒ Object
87 88 89 |
# File 'lib/dependabot/bun/package_manager.rb', line 87 def package_manager package_manager_by_name(ECOSYSTEM) end |
#package_manager_by_name(name) ⇒ Object
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/dependabot/bun/package_manager.rb', line 195 def package_manager_by_name(name) detected_version = detect_version(name) # if we have a detected version, we check if it is deprecated or unsupported if detected_version package_manager = BunPackageManager.new( detected_version: detected_version.to_s ) return package_manager if package_manager.deprecated? || package_manager.unsupported? end BunPackageManager.new( detected_version: detected_version, raw_version: installed_version ) end |
#setup(name) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/dependabot/bun/package_manager.rb', line 133 def setup(name) # we prioritize version mentioned in "packageManager" instead of "engines" # i.e. if { engines : "pnpm" : "6" } and { packageManager: "pnpm@6.0.2" }, # we go for the specificity mentioned in packageManager (6.0.2) unless @manifest_package_manager&.start_with?("#{name}@") || (@manifest_package_manager&.==name.to_s) || @manifest_package_manager.nil? return end return package_manager.version.to_s if package_manager.deprecated? || package_manager.unsupported? if @engines && @manifest_package_manager.nil? # if "packageManager" doesn't exists in manifest file, # we check if we can extract "engines" information version = check_engine_version(name) elsif @manifest_package_manager&.==name.to_s # if "packageManager" is found but no version is specified (i.e. pnpm@1.2.3), # we check if we can get "engines" info to override default version version = check_engine_version(name) if @engines elsif @manifest_package_manager&.start_with?("#{name}@") # if "packageManager" info has version specification i.e. yarn@3.3.1 # we go with the version in "packageManager" Dependabot.logger.info( "Found \"#{MANIFEST_PACKAGE_MANAGER_KEY}\" : \"#{@manifest_package_manager}\". " \ "Skipped checking \"#{MANIFEST_ENGINES_KEY}\"." ) end version ||= requested_version(name) version ||= guessed_version(name) version end |