dependabot-npm_and_yarn 0.113.3 → 0.113.4

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: 7714376f9aaea75c5e7cddade3dc2a558daf84f1c189a53f0ab79814bdba9708
4
- data.tar.gz: 325ac6842f0e62fa60cfb940f56ecefa1231549e2132d99f7ed4903fba3a71d7
3
+ metadata.gz: 8a9017a5f237612771fdf551da5eaed55fa1d4838b4eabf9d4cfcc756d5cd6cf
4
+ data.tar.gz: e2b2d8751f6afd28fb5c2f81a21db5f2e51d587b0c01de9940858c953b72cdf8
5
5
  SHA512:
6
- metadata.gz: 4ee264c2cf66455545da8572d913a2e78b28b55ae13dfbd753f1411e484be2ca08e8dcfe0622d26b5997cc77e837313f14291357044af1f39223a3e3841232d7
7
- data.tar.gz: c944eac6ec261393f9201408e7ddb7f6a2b61eafa73bb17e28955d4d08b41438824e23e49d4a9899de7f7e0dbe1fbe79138e90f3fb1bade9f83ef8678710f689
6
+ metadata.gz: e3c82abdf1efa61e7f4841b2a9e8eea221852d376cce2ab4eee146645b700a349a52bc8d6a20335cfbb3b6debe12cb0410cc9a8cb572145dab7c20c9005f3c6e
7
+ data.tar.gz: dd25f70d2771bbd0f9812a2a4171efbe63a8ba8f84bf1d3176d51a3221d7ba3b0163209b362912bca18929f29ec8cc2c357403b79511d03821908467629a3133
@@ -216,7 +216,7 @@ module Dependabot
216
216
 
217
217
  version = t.name.match(Dependabot::GitCommitChecker::VERSION_REGEX).
218
218
  named_captures.fetch("version")
219
- next unless NpmAndYarn::Version.correct?(version)
219
+ next unless version_class.correct?(version)
220
220
 
221
221
  return version
222
222
  end
@@ -233,11 +233,10 @@ module Dependabot
233
233
  manifest_name: manifest_name
234
234
  )&.fetch("version", nil)
235
235
 
236
- return unless lock_version
237
- return if lock_version.include?("://")
238
- return if lock_version.include?("file:")
239
- return if lock_version.include?("link:")
240
- return if lock_version.include?("#")
236
+ # This line is to guard against improperly formatted versions in a
237
+ # lockfile, such as additional characters. NPM/yarn fixes these when
238
+ # running an update, so we can safely ignore these versions.
239
+ return unless version_class.correct?(lock_version)
241
240
 
242
241
  lock_version
243
242
  end
@@ -337,6 +336,10 @@ module Dependabot
337
336
  ].compact
338
337
  end
339
338
  end
339
+
340
+ def version_class
341
+ NpmAndYarn::Version
342
+ end
340
343
  end
341
344
  end
342
345
  end
@@ -153,12 +153,12 @@ module Dependabot
153
153
  end
154
154
 
155
155
  def semver_version_for(version_string)
156
- return unless version_string
156
+ # The next two lines are to guard against improperly formatted
157
+ # versions in a lockfile, such as an empty string or additional
158
+ # characters. NPM/yarn fixes these when running an update, so we can
159
+ # safely ignore these versions.
157
160
  return if version_string == ""
158
- return if version_string.include?("://")
159
- return if version_string.include?("file:")
160
- return if version_string.include?("link:")
161
- return if version_string.include?("#")
161
+ return unless version_class.correct?(version_string)
162
162
 
163
163
  version_string
164
164
  end
@@ -216,6 +216,10 @@ module Dependabot
216
216
  dependency_files.
217
217
  select { |f| f.name.end_with?("npm-shrinkwrap.json") }
218
218
  end
219
+
220
+ def version_class
221
+ NpmAndYarn::Version
222
+ end
219
223
  end
220
224
  end
221
225
  end
@@ -54,6 +54,10 @@ module Dependabot
54
54
  latest_version_finder.latest_version_with_no_unlock
55
55
  end
56
56
 
57
+ def latest_resolvable_previous_version
58
+ version_resolver.latest_resolvable_previous_version
59
+ end
60
+
57
61
  def updated_requirements
58
62
  resolvable_version =
59
63
  if preferred_resolvable_version.is_a?(version_class)
@@ -104,17 +108,19 @@ module Dependabot
104
108
 
105
109
  def build_updated_dependency(update_details)
106
110
  original_dep = update_details.fetch(:dependency)
111
+ version = update_details.fetch(:version).to_s
112
+ previous_version = update_details.fetch(:previous_version)&.to_s
107
113
 
108
114
  Dependency.new(
109
115
  name: original_dep.name,
110
- version: update_details.fetch(:version).to_s,
116
+ version: version,
111
117
  requirements: RequirementsUpdater.new(
112
118
  requirements: original_dep.requirements,
113
119
  updated_source: original_dep == dependency ? updated_source : nil,
114
- latest_resolvable_version: update_details[:version].to_s,
120
+ latest_resolvable_version: version,
115
121
  update_strategy: requirements_update_strategy
116
122
  ).updated_requirements,
117
- previous_version: original_dep.version,
123
+ previous_version: previous_version,
118
124
  previous_requirements: original_dep.requirements,
119
125
  package_manager: original_dep.package_manager
120
126
  )
@@ -73,13 +73,19 @@ module Dependabot
73
73
  # our problem, so we quietly return `nil` here.
74
74
  end
75
75
 
76
+ def possible_previous_versions_with_details
77
+ @possible_previous_versions_with_details ||= begin
78
+ npm_details.fetch("versions", {}).
79
+ transform_keys { |k| version_class.new(k) }.
80
+ reject { |v, _| v.prerelease? && !related_to_current_pre?(v) }.
81
+ sort_by(&:first).reverse
82
+ end
83
+ end
84
+
76
85
  def possible_versions_with_details
77
- npm_details.fetch("versions", {}).
86
+ possible_previous_versions_with_details.
78
87
  reject { |_, details| details["deprecated"] }.
79
- transform_keys { |k| version_class.new(k) }.
80
- reject { |k, _| k.prerelease? && !related_to_current_pre?(k) }.
81
- reject { |k, _| ignore_reqs.any? { |r| r.satisfied_by?(k) } }.
82
- sort_by(&:first).reverse
88
+ reject { |v, _| ignore_reqs.any? { |r| r.satisfied_by?(v) } }
83
89
  end
84
90
 
85
91
  def possible_versions
@@ -73,6 +73,10 @@ module Dependabot
73
73
  true
74
74
  end
75
75
 
76
+ def latest_resolvable_previous_version
77
+ resolve_latest_previous_version(dependency)
78
+ end
79
+
76
80
  def dependency_updates_from_full_unlock
77
81
  return if git_dependency?(dependency)
78
82
  if part_of_tightly_locked_monorepo?
@@ -80,8 +84,11 @@ module Dependabot
80
84
  end
81
85
  return if newly_broken_peer_reqs_from_dep.any?
82
86
 
83
- updates =
84
- [{ dependency: dependency, version: latest_allowable_version }]
87
+ updates = [{
88
+ dependency: dependency,
89
+ version: latest_allowable_version,
90
+ previous_version: latest_resolvable_previous_version
91
+ }]
85
92
  newly_broken_peer_reqs_on_dep.each do |peer_req|
86
93
  dep_name = peer_req.fetch(:requiring_dep_name)
87
94
  dep = top_level_dependencies.find { |d| d.name == dep_name }
@@ -94,7 +101,11 @@ module Dependabot
94
101
  latest_version_of_dep_with_satisfied_peer_reqs(dep)
95
102
  return nil unless updated_version
96
103
 
97
- updates << { dependency: dep, version: updated_version }
104
+ updates << {
105
+ dependency: dep,
106
+ version: updated_version,
107
+ previous_version: resolve_latest_previous_version(dep)
108
+ }
98
109
  end
99
110
  updates.uniq
100
111
  end
@@ -115,6 +126,31 @@ module Dependabot
115
126
  )
116
127
  end
117
128
 
129
+ def resolve_latest_previous_version(dep)
130
+ if dep.version && version_class.correct?(dep.version)
131
+ return version_class.new(dep.version)
132
+ end
133
+
134
+ @resolve_latest_previous_version ||= {}
135
+ @resolve_latest_previous_version[dep] ||= begin
136
+ relevant_versions = latest_version_finder(dependency).
137
+ possible_previous_versions_with_details.
138
+ map(&:first)
139
+ reqs = dep.requirements.map { |r| r[:requirement] }.compact.
140
+ map { |r| requirement_class.requirements_array(r) }
141
+
142
+ # Pick the lowest version from the max possible version from all
143
+ # requirements. This matches the logic when combining the same
144
+ # dependency in DependencySet from multiple manifest files where we
145
+ # pick the lowest version from the duplicates.
146
+ reqs.flat_map do |req|
147
+ relevant_versions.select do |version|
148
+ req.any? { |r| r.satisfied_by?(version) }
149
+ end.max
150
+ end.min
151
+ end
152
+ end
153
+
118
154
  def part_of_tightly_locked_monorepo?
119
155
  monorepo_dep_names =
120
156
  TIGHTLY_COUPLED_MONOREPOS.values.
@@ -149,7 +185,11 @@ module Dependabot
149
185
  find { |v| v == latest_allowable_version }
150
186
  next unless updated_version
151
187
 
152
- updates << { dependency: dep, version: updated_version }
188
+ updates << {
189
+ dependency: dep,
190
+ version: updated_version,
191
+ previous_version: resolve_latest_previous_version(dep)
192
+ }
153
193
  end
154
194
 
155
195
  updates
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.113.3
4
+ version: 0.113.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-26 00:00:00.000000000 Z
11
+ date: 2019-09-27 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.113.3
19
+ version: 0.113.4
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.113.3
26
+ version: 0.113.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement