dependabot-npm_and_yarn 0.185.0 → 0.187.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d42472b33cbd3bc18ffc46a89ec1258b99ee91c06f37df754c34d918c984054
4
- data.tar.gz: 2f7ad25e3389283e30decb7d515d793d6e1ecdef2f5de75ac81b2dce53bcf15a
3
+ metadata.gz: 4fecb25c98d20c0537bb14fbfbf5f0ae606a09c03bcd8c69686104ae8ea2b60e
4
+ data.tar.gz: 49c8c245cfcbd8a7c0f56acd3fcde70fdf89ddaa22c131b0870f776af1f35d4f
5
5
  SHA512:
6
- metadata.gz: 9608c5d0237700098c9488abf00b3d58d8a6c5cd9487fcd38a2a46fed9e737bef85bd3bbb7c11d8db5571701d960b96164507b709319f1ea3f7d9d89ec62227a
7
- data.tar.gz: 4124eadef4cca03dbad1a826e1cc225a213920971aff8c451af0357fa6be94b7af50defb856509c20938dcb7e71c22574e32dc90971fac130cad56d7547ae04c
6
+ metadata.gz: 8f9b74182a2a7eea592f0087787ce6c36d95cb223fc0f2367c414e701f76944529986994e31c3699b670e68a56f5d34ba09597c0c59591440fc5a142ae765a63
7
+ data.tar.gz: ee6a76e595a5db7fb2ea1d61b3482a6739864c038ed0b4d1806a1c16dcd00085b7af05a8b7582e7e9dd0db9020487c98cfd459ef653ad0d9ebbd70479db12adb
@@ -48,7 +48,9 @@ module Dependabot
48
48
  end
49
49
 
50
50
  def global_registry # rubocop:disable Metrics/PerceivedComplexity
51
- @global_registry ||=
51
+ return @global_registry if defined?(@global_registry)
52
+
53
+ @global_registry =
52
54
  registry_credentials.find do |cred|
53
55
  next false if CENTRAL_REGISTRIES.include?(cred["registry"])
54
56
 
@@ -132,21 +134,24 @@ module Dependabot
132
134
  def credential_lines_for_npmrc
133
135
  lines = []
134
136
  registry_credentials.each do |cred|
135
- registry = cred.fetch("registry").sub(%r{\/?$}, "/")
137
+ registry = cred.fetch("registry")
136
138
 
137
139
  lines += registry_scopes(registry) if registry_scopes(registry)
138
140
 
139
141
  token = cred.fetch("token", nil)
140
142
  next unless token
141
143
 
144
+ # We need to ensure the registry uri ends with a trailing slash in the npmrc file
145
+ # but we do not want to add one if it already exists
146
+ registry_with_trailing_slash = registry.sub(%r{\/?$}, "/")
142
147
  if token.include?(":")
143
148
  encoded_token = Base64.encode64(token).delete("\n")
144
- lines << "//#{registry}:_auth=#{encoded_token}"
149
+ lines << "//#{registry_with_trailing_slash}:_auth=#{encoded_token}"
145
150
  elsif Base64.decode64(token).ascii_only? &&
146
151
  Base64.decode64(token).include?(":")
147
- lines << %(//#{registry}:_auth=#{token.delete("\n")})
152
+ lines << %(//#{registry_with_trailing_slash}:_auth=#{token.delete("\n")})
148
153
  else
149
- lines << "//#{registry}:_authToken=#{token}"
154
+ lines << "//#{registry_with_trailing_slash}:_authToken=#{token}"
150
155
  end
151
156
  end
152
157
 
@@ -169,7 +174,6 @@ module Dependabot
169
174
  def registry_scopes(registry)
170
175
  # Central registries don't just apply to scopes
171
176
  return if CENTRAL_REGISTRIES.include?(registry)
172
-
173
177
  return unless dependency_urls
174
178
 
175
179
  other_regs =
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
4
+
3
5
  require "dependabot/npm_and_yarn/file_updater"
4
6
  require "dependabot/npm_and_yarn/file_parser"
5
7
  require "dependabot/npm_and_yarn/update_checker/registry_finder"
@@ -436,7 +438,7 @@ module Dependabot
436
438
  def handle_timeout(error_message, yarn_lock)
437
439
  url = error_message.match(TIMEOUT_FETCHING_PACKAGE).
438
440
  named_captures["url"]
439
- return if url.start_with?("https://registry.npmjs.org")
441
+ raise if URI(url).host == "registry.npmjs.org"
440
442
 
441
443
  package_name = error_message.match(TIMEOUT_FETCHING_PACKAGE).
442
444
  named_captures["package"]
@@ -482,7 +484,7 @@ module Dependabot
482
484
 
483
485
  return false unless yarnrc_global_registry
484
486
 
485
- yarnrc_global_registry.include?("registry.npmjs.org")
487
+ URI(yarnrc_global_registry).host == "registry.npmjs.org"
486
488
  end
487
489
 
488
490
  def yarnrc_content
@@ -3,17 +3,17 @@
3
3
  module Dependabot
4
4
  module NpmAndYarn
5
5
  class PackageName
6
- DEFINITELY_TYPED_SCOPE = /types/i.freeze
7
- PACKAGE_NAME_REGEX = %r{
6
+ PACKAGE_NAME_REGEX = %r{
8
7
  \A # beginning of string
9
8
  (?=.{1,214}\z) # enforce length (1 - 214)
10
9
  (@(?<scope>[a-z0-9\-~][a-z0-9\-\._~]*)\/)? # capture 'scope' if present
11
10
  (?<name>[a-z0-9\-~][a-z0-9\-._~]*) # capture package name
12
11
  \z # end of string
13
12
  }xi.freeze # multi-line/case-insensitive
13
+
14
14
  TYPES_PACKAGE_NAME_REGEX = %r{
15
15
  \A # beginning of string
16
- @#{DEFINITELY_TYPED_SCOPE}\/ # starts with @types/
16
+ @types\/ # starts with @types/
17
17
  ((?<scope>.+)__)? # capture scope
18
18
  (?<name>.+) # capture name
19
19
  \z # end of string
@@ -37,16 +37,20 @@ module Dependabot
37
37
  end
38
38
  end
39
39
 
40
- def <=>(other)
41
- to_s.casecmp(other.to_s)
40
+ def eql?(other)
41
+ self.class == other.class && to_s == other.to_s
42
42
  end
43
43
 
44
- def eql?(other)
45
- to_s.eql?(other.to_s)
44
+ def hash
45
+ to_s.downcase.hash
46
+ end
47
+
48
+ def <=>(other)
49
+ to_s.casecmp(other.to_s)
46
50
  end
47
51
 
48
52
  def library_name
49
- return self unless types_package?
53
+ return unless types_package?
50
54
 
51
55
  @library_name ||=
52
56
  begin
@@ -60,7 +64,7 @@ module Dependabot
60
64
  end
61
65
 
62
66
  def types_package_name
63
- return self if types_package?
67
+ return if types_package?
64
68
 
65
69
  @types_package_name ||=
66
70
  if scoped?
@@ -77,7 +81,7 @@ module Dependabot
77
81
  end
78
82
 
79
83
  def types_package?
80
- DEFINITELY_TYPED_SCOPE.match?(@scope)
84
+ "types".casecmp?(@scope)
81
85
  end
82
86
  end
83
87
  end
@@ -9,6 +9,7 @@ require "dependabot/npm_and_yarn/file_updater/npmrc_builder"
9
9
  require "dependabot/npm_and_yarn/file_updater/package_json_preparer"
10
10
  require "dependabot/npm_and_yarn/helpers"
11
11
  require "dependabot/npm_and_yarn/native_helpers"
12
+ require "dependabot/npm_and_yarn/package_name"
12
13
  require "dependabot/npm_and_yarn/requirement"
13
14
  require "dependabot/npm_and_yarn/update_checker"
14
15
  require "dependabot/npm_and_yarn/version"
@@ -74,6 +75,8 @@ module Dependabot
74
75
  def latest_resolvable_version
75
76
  return latest_allowable_version if git_dependency?(dependency)
76
77
  return if part_of_tightly_locked_monorepo?
78
+ return if types_update_available?
79
+ return if original_package_update_available?
77
80
 
78
81
  return latest_allowable_version unless relevant_unmet_peer_dependencies.any?
79
82
 
@@ -90,10 +93,12 @@ module Dependabot
90
93
  resolve_latest_previous_version(dependency, updated_version)
91
94
  end
92
95
 
96
+ # rubocop:disable Metrics/PerceivedComplexity
93
97
  def dependency_updates_from_full_unlock
94
98
  return if git_dependency?(dependency)
95
99
  return updated_monorepo_dependencies if part_of_tightly_locked_monorepo?
96
100
  return if newly_broken_peer_reqs_from_dep.any?
101
+ return if original_package_update_available?
97
102
 
98
103
  updates = [{
99
104
  dependency: dependency,
@@ -122,8 +127,10 @@ module Dependabot
122
127
  )
123
128
  }
124
129
  end
130
+ updates += updated_types_dependencies if types_update_available?
125
131
  updates.uniq
126
132
  end
133
+ # rubocop:enable Metrics/PerceivedComplexity
127
134
 
128
135
  private
129
136
 
@@ -222,6 +229,60 @@ module Dependabot
222
229
  updates
223
230
  end
224
231
 
232
+ def types_package
233
+ @types_package ||= begin
234
+ types_package_name = PackageName.new(dependency.name).types_package_name
235
+ top_level_dependencies.find { |d| types_package_name.to_s == d.name } if types_package_name
236
+ end
237
+ end
238
+
239
+ def original_package
240
+ @original_package ||= begin
241
+ original_package_name = PackageName.new(dependency.name).library_name
242
+ top_level_dependencies.find { |d| original_package_name.to_s == d.name } if original_package_name
243
+ end
244
+ end
245
+
246
+ def latest_types_package_version
247
+ @latest_types_package_version ||= latest_version_finder(types_package).latest_version_from_registry
248
+ end
249
+
250
+ def types_update_available?
251
+ return false if types_package.nil?
252
+
253
+ return false unless latest_allowable_version.backwards_compatible_with?(latest_types_package_version)
254
+
255
+ return false unless version_class.correct?(types_package.version)
256
+
257
+ current_types_package_version = version_class.new(types_package.version)
258
+
259
+ return false unless current_types_package_version < latest_types_package_version
260
+
261
+ true
262
+ end
263
+
264
+ def original_package_update_available?
265
+ return false if original_package.nil?
266
+
267
+ return false unless version_class.correct?(original_package.version)
268
+
269
+ original_package_version = version_class.new(original_package.version)
270
+
271
+ latest_version = latest_version_finder(original_package).latest_version_from_registry
272
+
273
+ original_package_version < latest_version
274
+ end
275
+
276
+ def updated_types_dependencies
277
+ [{
278
+ dependency: types_package,
279
+ version: latest_types_package_version,
280
+ previous_version: resolve_latest_previous_version(
281
+ types_package, latest_types_package_version
282
+ )
283
+ }]
284
+ end
285
+
225
286
  def peer_dependency_errors
226
287
  return @peer_dependency_errors if @peer_dependency_errors_checked
227
288
 
@@ -34,6 +34,27 @@ module Dependabot
34
34
  super
35
35
  end
36
36
 
37
+ def major
38
+ @major ||= segments[0] || 0
39
+ end
40
+
41
+ def minor
42
+ @minor ||= segments[1] || 0
43
+ end
44
+
45
+ def patch
46
+ @patch ||= segments[2] || 0
47
+ end
48
+
49
+ def backwards_compatible_with?(other)
50
+ case major
51
+ when 0
52
+ self == other
53
+ else
54
+ major == other.major && minor >= other.minor
55
+ end
56
+ end
57
+
37
58
  def to_s
38
59
  @version_string
39
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-npm_and_yarn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.185.0
4
+ version: 0.187.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-09 00:00:00.000000000 Z
11
+ date: 2022-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.185.0
19
+ version: 0.187.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.185.0
26
+ version: 0.187.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: debase
29
29
  requirement: !ruby/object:Gem::Requirement