dependabot-bun 0.302.0 → 0.303.0

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: 2e582772b7434396ead9bc8cd217fe9dbd1cbcce73f5ee0a5571e1237dc1daa2
4
- data.tar.gz: 306542df8d2d549f0dffabfeb5cf8153cd27798af0c47f7334af6cfcf8eb991a
3
+ metadata.gz: 27edfc9fc442ae68e0e2c82be8cc05bac045eb4f3fbabe7ccc57723399d119e7
4
+ data.tar.gz: 784300996dcb070425ce461848e9c8887805aeaf174563ecdd55128a7b4cf750
5
5
  SHA512:
6
- metadata.gz: 9a76ad8ce2ab1049472de84584606db05748abd9f6c42fa45a891503f081f2a3e089256bc60ed9cfd2b78f71fc87e7d53b2fc1c7f3069d5cdc3b0915bdc737b0
7
- data.tar.gz: a9245eeea8f989130de6fd9be4aedd53e9cd959f930230ea1a3aca648e0262546312190be02c33ce8d726c4227ccb6d99f1d93e91c89759ffa7690ab49b57e1c
6
+ metadata.gz: 05003d07765b28ceab7cfca523382a983652ce8bede462c1ae5975c77e58026f46b81d59ab621ba3fb7618170250f32195515ea899c40e0923011b654e074bc7
7
+ data.tar.gz: 6fc8e6bc5e2be73805ebb101bb0d57586ea788461393528a265d21e5f3b0438e1ebf4659a484fc10ac3c1b716f9d30ca67d8e02397a7bf7883f68f5eadce9791
@@ -1,7 +1,8 @@
1
- # typed: true
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "excon"
5
+ require "sorbet-runtime"
5
6
  require "time"
6
7
 
7
8
  require "dependabot/metadata_finders"
@@ -13,19 +14,23 @@ require "dependabot/bun/version"
13
14
  module Dependabot
14
15
  module Bun
15
16
  class MetadataFinder < Dependabot::MetadataFinders::Base
17
+ extend T::Sig
18
+
19
+ sig { override.returns(T.nilable(String)) }
16
20
  def homepage_url
17
21
  # Attempt to use version_listing first, as fetching the entire listing
18
22
  # array can be slow (if it's large)
19
23
  return latest_version_listing["homepage"] if latest_version_listing["homepage"]
20
24
 
21
- listing = all_version_listings.find { |_, l| l["homepage"] }
22
- listing&.last&.fetch("homepage", nil) || super
25
+ listing = all_version_listings.find { |l| l["homepage"] }
26
+ listing&.fetch("homepage", nil) || super
23
27
  end
24
28
 
29
+ sig { override.returns(T.nilable(String)) }
25
30
  def maintainer_changes
26
31
  return unless npm_releaser
27
32
  return unless npm_listing.dig("time", dependency.version)
28
- return if previous_releasers.include?(npm_releaser)
33
+ return if previous_releasers&.include?(npm_releaser)
29
34
 
30
35
  "This version was pushed to npm by " \
31
36
  "[#{npm_releaser}](https://www.npmjs.com/~#{npm_releaser}), a new " \
@@ -34,10 +39,11 @@ module Dependabot
34
39
 
35
40
  private
36
41
 
42
+ sig { override.returns(T.nilable(Dependabot::Source)) }
37
43
  def look_up_source
38
44
  return find_source_from_registry if new_source.nil?
39
45
 
40
- source_type = new_source[:type] || new_source.fetch("type")
46
+ source_type = new_source&.[](:type) || new_source&.fetch("type")
41
47
 
42
48
  case source_type
43
49
  when "git" then find_source_from_git_url
@@ -46,12 +52,14 @@ module Dependabot
46
52
  end
47
53
  end
48
54
 
55
+ sig { returns(T.nilable(String)) }
49
56
  def npm_releaser
50
57
  all_version_listings
51
- .find { |v, _| v == dependency.version }
52
- &.last&.fetch("_npmUser", nil)&.fetch("name", nil)
58
+ .find { |v| v["version"] == dependency.version }
59
+ &.dig("_npmUser", "name")
53
60
  end
54
61
 
62
+ sig { returns(T.nilable(T::Array[String])) }
55
63
  def previous_releasers
56
64
  times = npm_listing.fetch("time")
57
65
 
@@ -65,9 +73,10 @@ module Dependabot
65
73
 
66
74
  all_version_listings
67
75
  .reject { |v, _| Time.parse(times[v]) > cutoff }
68
- .filter_map { |_, d| d.fetch("_npmUser", nil)&.fetch("name", nil) }
76
+ .filter_map { |d| d.fetch("_npmUser", nil)&.fetch("name", nil) }
69
77
  end
70
78
 
79
+ sig { returns(T.nilable(Source)) }
71
80
  def find_source_from_registry
72
81
  # Attempt to use version_listing first, as fetching the entire listing
73
82
  # array can be slow (if it's large)
@@ -81,7 +90,7 @@ module Dependabot
81
90
  return potential_sources.first if potential_sources.any?
82
91
 
83
92
  potential_sources =
84
- all_version_listings.flat_map do |_, listing|
93
+ all_version_listings.flat_map do |listing|
85
94
  [
86
95
  get_source(listing["repository"]),
87
96
  get_source(listing["homepage"]),
@@ -92,6 +101,7 @@ module Dependabot
92
101
  potential_sources.first
93
102
  end
94
103
 
104
+ sig { returns(T.nilable(T::Hash[T.any(String, Symbol), String])) }
95
105
  def new_source
96
106
  sources = dependency.requirements
97
107
  .map { |r| r.fetch(:source) }.uniq.compact
@@ -100,6 +110,7 @@ module Dependabot
100
110
  sources.first
101
111
  end
102
112
 
113
+ sig { params(details: T.any(String, T::Hash[String, String])).returns(T.nilable(Source)) }
103
114
  def get_source(details)
104
115
  potential_url = get_url(details)
105
116
  return unless potential_url
@@ -111,6 +122,7 @@ module Dependabot
111
122
  potential_source
112
123
  end
113
124
 
125
+ sig { params(details: T.any(String, T::Hash[String, String])).returns(T.nilable(String)) }
114
126
  def get_url(details)
115
127
  url =
116
128
  case details
@@ -122,6 +134,7 @@ module Dependabot
122
134
  "https://github.com/" + url
123
135
  end
124
136
 
137
+ sig { params(details: T.any(String, T::Hash[String, String])).returns(T.nilable(String)) }
125
138
  def get_directory(details)
126
139
  # Only return a directory if it is explicitly specified
127
140
  return unless details.is_a?(Hash)
@@ -129,22 +142,32 @@ module Dependabot
129
142
  details.fetch("directory", nil)
130
143
  end
131
144
 
145
+ sig { returns(T.nilable(Source)) }
132
146
  def find_source_from_git_url
133
- url = new_source[:url] || new_source.fetch("url")
147
+ url = new_source&.[](:url) || new_source&.fetch("url")
134
148
  Source.from_url(url)
135
149
  end
136
150
 
151
+ sig { returns(T::Hash[String, T.untyped]) }
137
152
  def latest_version_listing
138
- return @latest_version_listing if defined?(@latest_version_listing)
153
+ return @latest_version_listing unless @latest_version_listing.nil?
154
+
155
+ response = Dependabot::RegistryClient.get(url: "#{dependency_url}/latest",
156
+ headers: registry_auth_headers)
157
+ return @latest_version_listing = {} if response.status >= 500
139
158
 
140
- response = Dependabot::RegistryClient.get(url: "#{dependency_url}/latest", headers: registry_auth_headers)
141
- return @latest_version_listing = JSON.parse(response.body) if response.status == 200
159
+ begin
160
+ @latest_version_listing = JSON.parse(response.body)
161
+ rescue JSON::ParserError
162
+ raise unless non_standard_registry?
142
163
 
143
- @latest_version_listing = {}
164
+ @latest_version_listing = {}
165
+ end
144
166
  rescue JSON::ParserError, Excon::Error::Timeout
145
- @latest_version_listing = {}
167
+ @latest_version_listing = T.let({}, T.nilable(T::Hash[String, T.untyped]))
146
168
  end
147
169
 
170
+ sig { returns(T::Array[T::Hash[String, T.untyped]]) }
148
171
  def all_version_listings
149
172
  return [] if npm_listing["versions"].nil?
150
173
 
@@ -154,6 +177,7 @@ module Dependabot
154
177
  .reverse
155
178
  end
156
179
 
180
+ sig { returns(T::Hash[String, T.untyped]) }
157
181
  def npm_listing
158
182
  return @npm_listing unless @npm_listing.nil?
159
183
 
@@ -168,14 +192,15 @@ module Dependabot
168
192
  @npm_listing = {}
169
193
  end
170
194
  rescue Excon::Error::Timeout
171
- @npm_listing = {}
195
+ @npm_listing = T.let({}, T.nilable(T::Hash[String, T.untyped]))
172
196
  end
173
197
 
198
+ sig { returns(String) }
174
199
  def dependency_url
175
200
  registry_url =
176
201
  if new_source.nil? then "https://registry.npmjs.org"
177
202
  else
178
- new_source.fetch(:url)
203
+ new_source&.fetch(:url)
179
204
  end
180
205
 
181
206
  # NPM registries expect slashes to be escaped
@@ -183,19 +208,22 @@ module Dependabot
183
208
  "#{registry_url}/#{escaped_dependency_name}"
184
209
  end
185
210
 
211
+ sig { returns(T::Hash[String, String]) }
186
212
  def registry_auth_headers
187
213
  return {} unless auth_token
188
214
 
189
215
  { "Authorization" => "Bearer #{auth_token}" }
190
216
  end
191
217
 
218
+ sig { returns(String) }
192
219
  def dependency_registry
193
220
  if new_source.nil? then "registry.npmjs.org"
194
221
  else
195
- new_source.fetch(:url).gsub("https://", "").gsub("http://", "")
222
+ T.must(new_source).fetch(:url).gsub("https://", "").gsub("http://", "")
196
223
  end
197
224
  end
198
225
 
226
+ sig { returns(T.nilable(String)) }
199
227
  def auth_token
200
228
  credentials
201
229
  .select { |cred| cred["type"] == "npm_registry" }
@@ -203,6 +231,7 @@ module Dependabot
203
231
  &.fetch("token", nil)
204
232
  end
205
233
 
234
+ sig { returns(T::Boolean) }
206
235
  def non_standard_registry?
207
236
  dependency_registry != "registry.npmjs.org"
208
237
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.302.0
4
+ version: 0.303.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-20 00:00:00.000000000 Z
11
+ date: 2025-03-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.302.0
19
+ version: 0.303.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.302.0
26
+ version: 0.303.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: debug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.8.5
159
+ version: 0.8.7
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.8.5
166
+ version: 0.8.7
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: simplecov
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -347,7 +347,7 @@ licenses:
347
347
  - MIT
348
348
  metadata:
349
349
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
350
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.302.0
350
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.303.0
351
351
  post_install_message:
352
352
  rdoc_options: []
353
353
  require_paths: