dependabot-npm_and_yarn 0.101.0 → 0.101.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9e0c9d6c0b14886296fc65c5fa0a4d69292a0562c8ff5c654fbb676814a3d95
4
- data.tar.gz: f91706007b71f7594ebabad31b5196afb988b0197dbc680332a7dddfbba86d88
3
+ metadata.gz: 1cf6617f329cb9987316bd94cfa8d5015ee5c2385e843f94a6c07195af7c9d81
4
+ data.tar.gz: 258fa046ee0b0e3435b0a9c16a5bda624c77917ece08d3772701138ebeb6cad9
5
5
  SHA512:
6
- metadata.gz: c941364a2f9b0fbcbc767e2bac507c2c35c030d81fb17e3e5ce83ae08a4e61821e4d2362a370bd3652bfb0e86212972e49b2d5e159c952b885baf70c56d913ee
7
- data.tar.gz: 3ef9c44d8e4dedd0094f69b69e00d0f1ad466aafdb0a1b7ee749655821fb51e4b7e4745e317e35d7c8001dcaed51e125f505d0efcaa1d8182a5c50049827c22e
6
+ metadata.gz: f889d16cc3e211ac41d5d4fb4154ea084a371bfbe7341fc8b8d4c616a1688d5743615e93d02a8fe27aff8933287d8e5d2b625cf315925cab44aed1567c5b2820
7
+ data.tar.gz: 734982d233f792584c01832efa2b8379fd30552986fcf879ed2df435681fd4e1b5660c546fca86900ee11166232289698effd34f168fa9a97141689e70e15c38
@@ -24,36 +24,24 @@ module Dependabot
24
24
  end
25
25
 
26
26
  def latest_version_details_from_registry
27
- return nil unless npm_details&.fetch("dist-tags", nil)
27
+ return unless valid_npm_details?
28
+ return { version: version_from_dist_tags } if version_from_dist_tags
29
+ return if specified_dist_tag_requirement?
28
30
 
29
- dist_tag_version = version_from_dist_tags(npm_details)
30
- return { version: dist_tag_version } if dist_tag_version
31
- return nil if specified_dist_tag_requirement?
32
-
33
- { version: version_from_versions_array }
31
+ version = possible_versions.find { |v| !yanked?(v) }
32
+ { version: version }
34
33
  rescue Excon::Error::Socket, Excon::Error::Timeout, RegistryError
35
34
  raise if dependency_registry == "registry.npmjs.org"
36
35
  # Custom registries can be flaky. We don't want to make that
37
36
  # our problem, so we quietly return `nil` here.
38
37
  end
39
38
 
40
- def latest_resolvable_version_with_no_unlock
41
- return unless npm_details
42
-
43
- if specified_dist_tag_requirement?
44
- return version_from_dist_tags(npm_details)
45
- end
39
+ def latest_version_with_no_unlock
40
+ return unless valid_npm_details?
41
+ return version_from_dist_tags if specified_dist_tag_requirement?
46
42
 
47
- reqs = dependency.requirements.map do |r|
48
- NpmAndYarn::Requirement.
49
- requirements_array(r.fetch(:requirement))
50
- end.compact
51
-
52
- possible_versions.
53
- find do |version|
54
- reqs.all? { |r| r.any? { |opt| opt.satisfied_by?(version) } } &&
55
- !yanked?(version)
56
- end
43
+ in_range_versions = filter_out_of_range_versions(possible_versions)
44
+ in_range_versions.find { |version| !yanked?(version) }
57
45
  rescue Excon::Error::Socket, Excon::Error::Timeout
58
46
  raise if dependency_registry == "registry.npmjs.org"
59
47
  # Sometimes custom registries are flaky. We don't want to make that
@@ -61,12 +49,7 @@ module Dependabot
61
49
  end
62
50
 
63
51
  def possible_versions
64
- npm_details.fetch("versions", {}).
65
- reject { |_, details| details["deprecated"] }.
66
- keys.map { |v| version_class.new(v) }.
67
- reject { |v| v.prerelease? && !related_to_current_pre?(v) }.
68
- reject { |v| ignore_reqs.any? { |r| r.satisfied_by?(v) } }.
69
- sort.reverse
52
+ possible_versions_with_details.map(&:first)
70
53
  end
71
54
 
72
55
  def possible_versions_with_details
@@ -83,7 +66,20 @@ module Dependabot
83
66
  attr_reader :dependency, :credentials, :dependency_files,
84
67
  :ignored_versions
85
68
 
86
- def version_from_dist_tags(npm_details)
69
+ def valid_npm_details?
70
+ !npm_details&.fetch("dist-tags", nil).nil?
71
+ end
72
+
73
+ def filter_out_of_range_versions(possible_versions)
74
+ reqs = dependency.requirements.map do |r|
75
+ NpmAndYarn::Requirement.requirements_array(r.fetch(:requirement))
76
+ end.compact
77
+
78
+ possible_versions.
79
+ select { |v| reqs.all? { |r| r.any? { |o| o.satisfied_by?(v) } } }
80
+ end
81
+
82
+ def version_from_dist_tags
87
83
  dist_tags = npm_details["dist-tags"].keys
88
84
 
89
85
  # Check if a dist tag was specified as a requirement. If it was, and
@@ -166,10 +162,6 @@ module Dependabot
166
162
  end
167
163
  end
168
164
 
169
- def version_from_versions_array
170
- possible_versions.find { |version| !yanked?(version) }
171
- end
172
-
173
165
  def yanked?(version)
174
166
  @yanked ||= {}
175
167
  return @yanked[version] if @yanked.key?(version)
@@ -178,20 +170,18 @@ module Dependabot
178
170
  begin
179
171
  status = Excon.get(
180
172
  dependency_url + "/#{version}",
181
- SharedHelpers.excon_defaults.merge(
182
- headers: registry_auth_headers,
183
- idempotent: true
184
- )
173
+ headers: registry_auth_headers,
174
+ idempotent: true,
175
+ **SharedHelpers.excon_defaults
185
176
  ).status
186
177
 
187
178
  if status == 404 && dependency_registry != "registry.npmjs.org"
188
179
  # Some registries don't handle escaped package names properly
189
180
  status = Excon.get(
190
181
  dependency_url.gsub("%2F", "/") + "/#{version}",
191
- SharedHelpers.excon_defaults.merge(
192
- headers: registry_auth_headers,
193
- idempotent: true
194
- )
182
+ headers: registry_auth_headers,
183
+ idempotent: true,
184
+ **SharedHelpers.excon_defaults
195
185
  ).status
196
186
  end
197
187
 
@@ -214,10 +204,9 @@ module Dependabot
214
204
  begin
215
205
  Excon.get(
216
206
  dependency_url + "/latest",
217
- SharedHelpers.excon_defaults.merge(
218
- headers: registry_auth_headers,
219
- idempotent: true
220
- )
207
+ headers: registry_auth_headers,
208
+ idempotent: true,
209
+ **SharedHelpers.excon_defaults
221
210
  ).status < 400
222
211
  rescue Excon::Error::Timeout
223
212
  # Give the benefit of the doubt if the registry is playing up
@@ -248,10 +237,9 @@ module Dependabot
248
237
  def fetch_npm_response
249
238
  response = Excon.get(
250
239
  dependency_url,
251
- SharedHelpers.excon_defaults.merge(
252
- headers: registry_auth_headers,
253
- idempotent: true
254
- )
240
+ headers: registry_auth_headers,
241
+ idempotent: true,
242
+ **SharedHelpers.excon_defaults
255
243
  )
256
244
 
257
245
  return response unless response.status == 500
@@ -266,11 +254,10 @@ module Dependabot
266
254
  username, password = decoded_token.split(":")
267
255
  Excon.get(
268
256
  dependency_url,
269
- SharedHelpers.excon_defaults.merge(
270
- user: username,
271
- password: password,
272
- idempotent: true
273
- )
257
+ user: username,
258
+ password: password,
259
+ idempotent: true,
260
+ **SharedHelpers.excon_defaults
274
261
  )
275
262
  end
276
263
 
@@ -330,26 +317,34 @@ module Dependabot
330
317
  end
331
318
 
332
319
  def registry_finder
333
- @registry_finder ||=
334
- RegistryFinder.new(
335
- dependency: dependency,
336
- credentials: credentials,
337
- npmrc_file: dependency_files.
338
- find { |f| f.name.end_with?(".npmrc") },
339
- yarnrc_file: dependency_files.
340
- find { |f| f.name.end_with?(".yarnrc") }
341
- )
320
+ @registry_finder ||= RegistryFinder.new(
321
+ dependency: dependency,
322
+ credentials: credentials,
323
+ npmrc_file: npmrc_file,
324
+ yarnrc_file: yarnrc_file
325
+ )
342
326
  end
343
327
 
344
328
  def ignore_reqs
345
- ignored_versions.
346
- map { |req| NpmAndYarn::Requirement.new(req.split(",")) }
329
+ ignored_versions.map { |req| requirement_class.new(req.split(",")) }
347
330
  end
348
331
 
349
332
  def version_class
350
333
  NpmAndYarn::Version
351
334
  end
352
335
 
336
+ def requirement_class
337
+ NpmAndYarn::Requirement
338
+ end
339
+
340
+ def npmrc_file
341
+ dependency_files.find { |f| f.name.end_with?(".npmrc") }
342
+ end
343
+
344
+ def yarnrc_file
345
+ dependency_files.find { |f| f.name.end_with?(".yarnrc") }
346
+ end
347
+
353
348
  # TODO: Remove need for me
354
349
  def git_dependency?
355
350
  GitCommitChecker.new(
@@ -50,13 +50,15 @@ module Dependabot
50
50
  return latest_resolvable_version_with_no_unlock_for_git_dependency
51
51
  end
52
52
 
53
- latest_version_finder.latest_resolvable_version_with_no_unlock
53
+ latest_version_finder.latest_version_with_no_unlock
54
54
  end
55
55
 
56
56
  def updated_requirements
57
57
  resolvable_version =
58
- if [version_class, NilClass].include?(preferred_resolvable_version)
59
- preferred_resolvable_version&.to_s
58
+ if preferred_resolvable_version.is_a?(version_class)
59
+ preferred_resolvable_version.to_s
60
+ elsif preferred_resolvable_version.nil?
61
+ nil
60
62
  else
61
63
  # If the preferred_resolvable_version came back as anything other
62
64
  # than a version class or `nil` it must be because this is a git
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-npm_and_yarn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.101.0
4
+ version: 0.101.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.101.0
19
+ version: 0.101.1
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.101.0
26
+ version: 0.101.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement