Class: Dependabot::NpmAndYarn::Package::RegistryFinder

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/npm_and_yarn/package/registry_finder.rb

Constant Summary collapse

GLOBAL_NPM_REGISTRY =
"https://registry.npmjs.org"
CENTRAL_REGISTRIES =
%w(
  https://registry.npmjs.org
  http://registry.npmjs.org
  https://registry.yarnpkg.com
  http://registry.yarnpkg.com
).freeze
NPM_AUTH_TOKEN_REGEX =
%r{//(?<registry>.*)/:_authToken=(?<token>.*)$}
NPM_GLOBAL_REGISTRY_REGEX =
/^registry\s*=\s*['"]?(?<registry>.*?)['"]?$/
YARN_GLOBAL_REGISTRY_REGEX =
/^(?:--)?registry\s+((['"](?<registry>.*)['"])|(?<registry>.*))/
NPM_SCOPED_REGISTRY_REGEX =
/^(?<scope>@[^:]+)\s*:registry\s*=\s*['"]?(?<registry>.*?)['"]?$/
YARN_SCOPED_REGISTRY_REGEX =
/['"](?<scope>@[^:]+):registry['"]\s((['"](?<registry>.*)['"])|(?<registry>.*))/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, credentials:, npmrc_file: nil, yarnrc_file: nil, yarnrc_yml_file: nil) ⇒ RegistryFinder

Returns a new instance of RegistryFinder.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 38

def initialize(
  dependency:,
  credentials:,
  npmrc_file: nil,
  yarnrc_file: nil,
  yarnrc_yml_file: nil
)
  @dependency = dependency
  @credentials = credentials
  @npmrc_file = npmrc_file
  @yarnrc_file = yarnrc_file
  @yarnrc_yml_file = yarnrc_yml_file

  @registry = T.let(nil, T.nilable(String))
  @first_registry_with_dependency_details = T.let(nil, T.nilable(String))
  @known_registries = T.let([], T::Array[T::Hash[String, T.nilable(String)]])
  @configured_global_registry = T.let(nil, T.nilable(String))
  @global_registry = T.let(nil, T.nilable(String))
  @parsed_yarnrc_yml = T.let(nil, T.nilable(T::Hash[String, T.untyped]))
end

Class Method Details

.central_registry?(registry) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
89
90
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 86

def self.central_registry?(registry)
  CENTRAL_REGISTRIES.any? do |r|
    r.include?(registry)
  end
end

Instance Method Details

#auth_headersObject



68
69
70
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 68

def auth_headers
  auth_header_for(auth_token)
end

#custom_registry?Boolean

Returns:

  • (Boolean)


98
99
100
101
102
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 98

def custom_registry?
  return false if CENTRAL_REGISTRIES.include?(registry_url)

  !(registry_url || "").match?(/registry\.npmjs\.(org|com)/)
end

#dependency_urlObject



73
74
75
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 73

def dependency_url
  "#{registry_url}/#{escaped_dependency_name}"
end

#registryObject



60
61
62
63
64
65
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 60

def registry
  return @registry if @registry

  @registry = configured_registry || locked_registry || first_registry_with_dependency_details
  T.must(@registry)
end

#registry_from_rc(dependency_name) ⇒ Object



93
94
95
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 93

def registry_from_rc(dependency_name)
  explicit_registry_from_rc(dependency_name) || global_registry
end

#tarball_url(version) ⇒ Object



78
79
80
81
82
83
# File 'lib/dependabot/npm_and_yarn/package/registry_finder.rb', line 78

def tarball_url(version)
   = version.to_s.gsub(/\+.*/, "")

  # Dependency name needs to be unescaped since tarball URLs don't always work with escaped slashes
  "#{registry_url}/#{dependency&.name}/-/#{scopeless_name}-#{version_without_build_metadata}.tgz"
end