dependabot-deno 0.374.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 +7 -0
- data/lib/dependabot/deno/file_fetcher.rb +70 -0
- data/lib/dependabot/deno/file_parser.rb +151 -0
- data/lib/dependabot/deno/file_updater.rb +66 -0
- data/lib/dependabot/deno/metadata_finder.rb +52 -0
- data/lib/dependabot/deno/package/package_details_fetcher.rb +104 -0
- data/lib/dependabot/deno/requirement.rb +74 -0
- data/lib/dependabot/deno/update_checker/latest_version_finder.rb +33 -0
- data/lib/dependabot/deno/update_checker.rb +94 -0
- data/lib/dependabot/deno/version.rb +57 -0
- data/lib/dependabot/deno.rb +23 -0
- metadata +277 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: ec6066d4076a76e3d341894a983e26ee507fdeba5d5b6b64dcb24fe01ffc05e6
|
|
4
|
+
data.tar.gz: e3763f86ce236ceae251ba9ab0c161b6eca6aaf27a9d751ac1e7eed9c5966493
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: ddb2bb058df3aeceaa8212feea1f922b41a35bd5c96c8ad4f201be1015d54a4c8858cc5002cd491c483b6484750753bc80a7da3d13bf7104a4dc44281f317a2c
|
|
7
|
+
data.tar.gz: c58c39f8f1e91219d894cac7f61d4362c5872c576b533b17b2061a4d6dba38aa4a12b34818ec3085ce33975fdca2d199def91f224f128f73126cde2ef56d19ec
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "dependabot/file_fetchers"
|
|
5
|
+
require "dependabot/file_fetchers/base"
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Deno
|
|
9
|
+
class FileFetcher < Dependabot::FileFetchers::Base
|
|
10
|
+
extend T::Sig
|
|
11
|
+
|
|
12
|
+
MANIFEST_FILENAMES = T.let(%w(deno.json deno.jsonc).freeze, T::Array[String])
|
|
13
|
+
|
|
14
|
+
sig { override.returns(String) }
|
|
15
|
+
def self.required_files_message
|
|
16
|
+
"Repo must contain a deno.json or deno.jsonc."
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
sig { override.params(filenames: T::Array[String]).returns(T::Boolean) }
|
|
20
|
+
def self.required_files_in?(filenames)
|
|
21
|
+
filenames.any? { |f| MANIFEST_FILENAMES.include?(f) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
sig { override.returns(T::Array[DependencyFile]) }
|
|
25
|
+
def fetch_files
|
|
26
|
+
unless allow_beta_ecosystems?
|
|
27
|
+
raise Dependabot::DependencyFileNotFound.new(
|
|
28
|
+
nil,
|
|
29
|
+
"Deno ecosystem support is in beta. Set enable-beta-ecosystems to use it."
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
fetched_files = []
|
|
34
|
+
fetched_files << manifest_file
|
|
35
|
+
fetched_files << lockfile if lockfile
|
|
36
|
+
fetched_files
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
sig { override.returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
|
40
|
+
def ecosystem_versions
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
sig { returns(DependencyFile) }
|
|
47
|
+
def manifest_file
|
|
48
|
+
@manifest_file ||= T.let(
|
|
49
|
+
begin
|
|
50
|
+
file = MANIFEST_FILENAMES.filter_map { |f| fetch_file_if_present(f) }.first
|
|
51
|
+
raise Dependabot::DependencyFileNotFound.new(nil, self.class.required_files_message) unless file
|
|
52
|
+
|
|
53
|
+
file
|
|
54
|
+
end,
|
|
55
|
+
T.nilable(DependencyFile)
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
sig { returns(T.nilable(DependencyFile)) }
|
|
60
|
+
def lockfile
|
|
61
|
+
@lockfile ||= T.let(
|
|
62
|
+
fetch_file_if_present("deno.lock"),
|
|
63
|
+
T.nilable(DependencyFile)
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Dependabot::FileFetchers.register("deno", Dependabot::Deno::FileFetcher)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
require "dependabot/dependency"
|
|
6
|
+
require "dependabot/file_parsers"
|
|
7
|
+
require "dependabot/file_parsers/base"
|
|
8
|
+
require "dependabot/deno/version"
|
|
9
|
+
|
|
10
|
+
module Dependabot
|
|
11
|
+
module Deno
|
|
12
|
+
class FileParser < Dependabot::FileParsers::Base
|
|
13
|
+
extend T::Sig
|
|
14
|
+
|
|
15
|
+
ECOSYSTEM = "deno"
|
|
16
|
+
MANIFEST_FILENAMES = T.let(%w(deno.json deno.jsonc).freeze, T::Array[String])
|
|
17
|
+
|
|
18
|
+
# Matches jsr:@scope/name[@constraint][/subpath] or npm:[@scope/]name[@constraint][/subpath]
|
|
19
|
+
# Constraint and subpath are both optional per Deno's specifier format.
|
|
20
|
+
JSR_SPECIFIER = %r{\Ajsr:(?<name>@[^@/]+/[^@/]+)(?:@(?<constraint>[^/]+))?(?:/[^\s]*)?\z}
|
|
21
|
+
NPM_SPECIFIER = %r{\Anpm:(?<name>(?:@[^/]+/)?[^@/]+)(?:@(?<constraint>[^/]+))?(?:/[^\s]*)?\z}
|
|
22
|
+
|
|
23
|
+
# Matches either a JSON string literal (with escapes), a line comment, a
|
|
24
|
+
# block comment, or a trailing comma. The alternation lets gsub preserve
|
|
25
|
+
# strings while stripping the JSONC-only constructs, so e.g. "//" inside a
|
|
26
|
+
# URL value is not mistaken for the start of a comment.
|
|
27
|
+
JSONC_TOKEN = %r{
|
|
28
|
+
("(?:\\.|[^"\\])*") # JSON string literal
|
|
29
|
+
| //[^\n]* # line comment
|
|
30
|
+
| /\*.*?\*/ # block comment
|
|
31
|
+
| ,(?=\s*[\}\]]) # trailing comma
|
|
32
|
+
}mx
|
|
33
|
+
|
|
34
|
+
sig { override.returns(T::Array[Dependabot::Dependency]) }
|
|
35
|
+
def parse
|
|
36
|
+
# Multiple import aliases can reference the same underlying package
|
|
37
|
+
# (e.g. "@std/path" and "@std/path/posix"). Keyed dedup by name +
|
|
38
|
+
# source type collapses those without merging across registries — our
|
|
39
|
+
# update checker only queries the first requirement's source, so
|
|
40
|
+
# mixing jsr+npm under one Dependency would silently miss updates.
|
|
41
|
+
# When the same name+source appears with different constraints, every
|
|
42
|
+
# constraint is preserved as a separate requirement entry so callers
|
|
43
|
+
# can update them all.
|
|
44
|
+
deps_by_key = {}
|
|
45
|
+
|
|
46
|
+
imports.each do |_alias_name, specifier|
|
|
47
|
+
dep = parse_specifier(specifier.to_s)
|
|
48
|
+
next unless dep
|
|
49
|
+
|
|
50
|
+
key = [dep.name, T.must(dep.requirements.first)[:source][:type]]
|
|
51
|
+
existing = deps_by_key[key]
|
|
52
|
+
deps_by_key[key] = if existing
|
|
53
|
+
Dependabot::Dependency.new(
|
|
54
|
+
name: existing.name,
|
|
55
|
+
version: existing.version,
|
|
56
|
+
requirements: (existing.requirements + dep.requirements).uniq,
|
|
57
|
+
package_manager: existing.package_manager
|
|
58
|
+
)
|
|
59
|
+
else
|
|
60
|
+
dep
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
deps_by_key.values.sort_by(&:name)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
sig { override.void }
|
|
70
|
+
def check_required_files
|
|
71
|
+
return if manifest_file
|
|
72
|
+
|
|
73
|
+
raise "No deno.json or deno.jsonc found!"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
sig { returns(T::Hash[String, T.untyped]) }
|
|
77
|
+
def imports
|
|
78
|
+
parsed_manifest.fetch("imports", {})
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
sig { returns(T::Hash[String, T.untyped]) }
|
|
82
|
+
def parsed_manifest
|
|
83
|
+
@parsed_manifest ||= T.let(
|
|
84
|
+
parse_json_or_jsonc(T.must(manifest_file).content),
|
|
85
|
+
T.nilable(T::Hash[String, T.untyped])
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
sig { returns(T.nilable(DependencyFile)) }
|
|
90
|
+
def manifest_file
|
|
91
|
+
@manifest_file ||= T.let(
|
|
92
|
+
MANIFEST_FILENAMES.filter_map { |f| get_original_file(f) }.first,
|
|
93
|
+
T.nilable(DependencyFile)
|
|
94
|
+
)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
sig { params(specifier: String).returns(T.nilable(Dependabot::Dependency)) }
|
|
98
|
+
def parse_specifier(specifier)
|
|
99
|
+
if (match = JSR_SPECIFIER.match(specifier))
|
|
100
|
+
build_dependency(
|
|
101
|
+
name: T.must(match[:name]),
|
|
102
|
+
constraint: match[:constraint],
|
|
103
|
+
source_type: "jsr"
|
|
104
|
+
)
|
|
105
|
+
elsif (match = NPM_SPECIFIER.match(specifier))
|
|
106
|
+
build_dependency(
|
|
107
|
+
name: T.must(match[:name]),
|
|
108
|
+
constraint: match[:constraint],
|
|
109
|
+
source_type: "npm"
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
sig { params(name: String, constraint: T.nilable(String), source_type: String).returns(Dependabot::Dependency) }
|
|
115
|
+
def build_dependency(name:, constraint:, source_type:)
|
|
116
|
+
version = constraint ? extract_version(constraint) : nil
|
|
117
|
+
|
|
118
|
+
Dependabot::Dependency.new(
|
|
119
|
+
name: name,
|
|
120
|
+
version: version,
|
|
121
|
+
requirements: [{
|
|
122
|
+
requirement: constraint,
|
|
123
|
+
file: T.must(manifest_file).name,
|
|
124
|
+
groups: ["imports"],
|
|
125
|
+
source: { type: source_type }
|
|
126
|
+
}],
|
|
127
|
+
package_manager: ECOSYSTEM
|
|
128
|
+
)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
sig { params(constraint: String).returns(T.nilable(String)) }
|
|
132
|
+
def extract_version(constraint)
|
|
133
|
+
version_str = constraint.sub(/\A[~^>=<!\s]+/, "")
|
|
134
|
+
return version_str if Deno::Version.correct?(version_str)
|
|
135
|
+
|
|
136
|
+
nil
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
sig { params(content: T.nilable(String)).returns(T::Hash[String, T.untyped]) }
|
|
140
|
+
def parse_json_or_jsonc(content)
|
|
141
|
+
return {} unless content
|
|
142
|
+
|
|
143
|
+
cleaned = content.gsub(JSONC_TOKEN) { ::Regexp.last_match(1) || "" }
|
|
144
|
+
|
|
145
|
+
JSON.parse(cleaned)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
Dependabot::FileParsers.register("deno", Dependabot::Deno::FileParser)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "dependabot/file_updaters"
|
|
5
|
+
require "dependabot/file_updaters/base"
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Deno
|
|
9
|
+
class FileUpdater < Dependabot::FileUpdaters::Base
|
|
10
|
+
extend T::Sig
|
|
11
|
+
|
|
12
|
+
MANIFEST_FILENAMES = T.let(%w(deno.json deno.jsonc).freeze, T::Array[String])
|
|
13
|
+
|
|
14
|
+
sig { override.returns(T::Array[Dependabot::DependencyFile]) }
|
|
15
|
+
def updated_dependency_files
|
|
16
|
+
updated_files = []
|
|
17
|
+
|
|
18
|
+
dependency_files.each do |file|
|
|
19
|
+
next unless MANIFEST_FILENAMES.include?(file.name)
|
|
20
|
+
|
|
21
|
+
new_content = update_manifest_content(file)
|
|
22
|
+
next if new_content == file.content
|
|
23
|
+
|
|
24
|
+
updated_files << updated_file(file: file, content: new_content)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
updated_files
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
sig { override.void }
|
|
33
|
+
def check_required_files
|
|
34
|
+
return if dependency_files.any? { |f| MANIFEST_FILENAMES.include?(f.name) }
|
|
35
|
+
|
|
36
|
+
raise "No deno.json or deno.jsonc found!"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
sig { params(file: Dependabot::DependencyFile).returns(String) }
|
|
40
|
+
def update_manifest_content(file)
|
|
41
|
+
content = T.must(file.content)
|
|
42
|
+
|
|
43
|
+
dependencies.each do |dep|
|
|
44
|
+
prev_reqs = dep.previous_requirements&.select { |r| r[:file] == file.name } || []
|
|
45
|
+
new_reqs = dep.requirements.select { |r| r[:file] == file.name }
|
|
46
|
+
|
|
47
|
+
prev_reqs.zip(new_reqs).each do |prev_req, new_req|
|
|
48
|
+
source_type = prev_req[:source][:type]
|
|
49
|
+
prev_req_str = prev_req[:requirement]
|
|
50
|
+
new_req_str = T.must(new_req)[:requirement]
|
|
51
|
+
|
|
52
|
+
base = "#{source_type}:#{dep.name}"
|
|
53
|
+
old_specifier = prev_req_str ? "#{base}@#{prev_req_str}" : base
|
|
54
|
+
new_specifier = "#{base}@#{new_req_str}"
|
|
55
|
+
|
|
56
|
+
content = content.gsub(%r{#{Regexp.escape(old_specifier)}(?=["/])}, new_specifier)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
content
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Dependabot::FileUpdaters.register("deno", Dependabot::Deno::FileUpdater)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
require "dependabot/metadata_finders"
|
|
6
|
+
require "dependabot/metadata_finders/base"
|
|
7
|
+
require "dependabot/registry_client"
|
|
8
|
+
|
|
9
|
+
module Dependabot
|
|
10
|
+
module Deno
|
|
11
|
+
class MetadataFinder < Dependabot::MetadataFinders::Base
|
|
12
|
+
extend T::Sig
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
sig { override.returns(T.nilable(Dependabot::Source)) }
|
|
17
|
+
def look_up_source
|
|
18
|
+
source_type = dependency.requirements.first&.dig(:source, :type)
|
|
19
|
+
|
|
20
|
+
case source_type
|
|
21
|
+
when "npm"
|
|
22
|
+
find_source_from_npm
|
|
23
|
+
when "jsr"
|
|
24
|
+
find_source_from_jsr
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
sig { returns(T.nilable(Dependabot::Source)) }
|
|
29
|
+
def find_source_from_npm
|
|
30
|
+
response = Dependabot::RegistryClient.get(
|
|
31
|
+
url: "https://registry.npmjs.org/#{dependency.name}"
|
|
32
|
+
)
|
|
33
|
+
data = JSON.parse(response.body)
|
|
34
|
+
|
|
35
|
+
repo = data.dig("repository", "url")
|
|
36
|
+
return nil unless repo
|
|
37
|
+
|
|
38
|
+
Source.from_url(repo)
|
|
39
|
+
rescue JSON::ParserError, Excon::Error::Timeout, Excon::Error::Socket
|
|
40
|
+
nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
sig { returns(T.nilable(Dependabot::Source)) }
|
|
44
|
+
def find_source_from_jsr
|
|
45
|
+
# JSR meta.json doesn't include repository info directly
|
|
46
|
+
nil
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
Dependabot::MetadataFinders.register("deno", Dependabot::Deno::MetadataFinder)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
require "time"
|
|
6
|
+
require "sorbet-runtime"
|
|
7
|
+
require "dependabot/registry_client"
|
|
8
|
+
require "dependabot/package/package_release"
|
|
9
|
+
require "dependabot/deno/version"
|
|
10
|
+
|
|
11
|
+
module Dependabot
|
|
12
|
+
module Deno
|
|
13
|
+
module Package
|
|
14
|
+
class PackageDetailsFetcher
|
|
15
|
+
extend T::Sig
|
|
16
|
+
|
|
17
|
+
sig do
|
|
18
|
+
params(
|
|
19
|
+
dependency: Dependabot::Dependency
|
|
20
|
+
).void
|
|
21
|
+
end
|
|
22
|
+
def initialize(dependency:)
|
|
23
|
+
@dependency = dependency
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
sig { returns(T::Array[Dependabot::Package::PackageRelease]) }
|
|
27
|
+
def available_versions
|
|
28
|
+
source_type = dependency.requirements.first&.dig(:source, :type)
|
|
29
|
+
|
|
30
|
+
case source_type
|
|
31
|
+
when "jsr"
|
|
32
|
+
fetch_jsr_releases
|
|
33
|
+
when "npm"
|
|
34
|
+
fetch_npm_releases
|
|
35
|
+
else
|
|
36
|
+
[]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
sig { returns(Dependabot::Dependency) }
|
|
43
|
+
attr_reader :dependency
|
|
44
|
+
|
|
45
|
+
sig { returns(T::Array[Dependabot::Package::PackageRelease]) }
|
|
46
|
+
def fetch_jsr_releases
|
|
47
|
+
name = dependency.name
|
|
48
|
+
url = "https://jsr.io/#{name}/meta.json"
|
|
49
|
+
|
|
50
|
+
response = Dependabot::RegistryClient.get(url: url)
|
|
51
|
+
data = JSON.parse(response.body)
|
|
52
|
+
|
|
53
|
+
data.fetch("versions", {}).filter_map do |version_str, meta|
|
|
54
|
+
next unless Deno::Version.correct?(version_str)
|
|
55
|
+
|
|
56
|
+
yanked = meta.is_a?(Hash) && meta["yanked"] == true
|
|
57
|
+
released_at = parse_time(meta["createdAt"]) if meta.is_a?(Hash)
|
|
58
|
+
|
|
59
|
+
Dependabot::Package::PackageRelease.new(
|
|
60
|
+
version: Deno::Version.new(version_str),
|
|
61
|
+
released_at: released_at,
|
|
62
|
+
yanked: yanked
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
rescue JSON::ParserError, Excon::Error::Timeout, Excon::Error::Socket
|
|
66
|
+
[]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
sig { returns(T::Array[Dependabot::Package::PackageRelease]) }
|
|
70
|
+
def fetch_npm_releases
|
|
71
|
+
name = dependency.name
|
|
72
|
+
url = "https://registry.npmjs.org/#{name}"
|
|
73
|
+
|
|
74
|
+
response = Dependabot::RegistryClient.get(url: url)
|
|
75
|
+
data = JSON.parse(response.body)
|
|
76
|
+
|
|
77
|
+
time_data = data.fetch("time", {})
|
|
78
|
+
|
|
79
|
+
data.fetch("versions", {}).filter_map do |version_str, _meta|
|
|
80
|
+
next unless Deno::Version.correct?(version_str)
|
|
81
|
+
|
|
82
|
+
released_at = parse_time(time_data[version_str])
|
|
83
|
+
|
|
84
|
+
Dependabot::Package::PackageRelease.new(
|
|
85
|
+
version: Deno::Version.new(version_str),
|
|
86
|
+
released_at: released_at
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
rescue JSON::ParserError, Excon::Error::Timeout, Excon::Error::Socket
|
|
90
|
+
[]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
sig { params(time_str: T.nilable(String)).returns(T.nilable(Time)) }
|
|
94
|
+
def parse_time(time_str)
|
|
95
|
+
return nil unless time_str
|
|
96
|
+
|
|
97
|
+
Time.parse(time_str)
|
|
98
|
+
rescue ArgumentError
|
|
99
|
+
nil
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
require "dependabot/requirement"
|
|
6
|
+
require "dependabot/utils"
|
|
7
|
+
require "dependabot/deno/version"
|
|
8
|
+
|
|
9
|
+
# Deno uses npm-style semver constraints for both jsr: and npm: specifiers.
|
|
10
|
+
# Supported operators: ^, ~, >=, >, <=, <, =, exact version
|
|
11
|
+
|
|
12
|
+
module Dependabot
|
|
13
|
+
module Deno
|
|
14
|
+
class Requirement < Dependabot::Requirement
|
|
15
|
+
extend T::Sig
|
|
16
|
+
|
|
17
|
+
sig { override.params(requirement_string: T.nilable(String)).returns(T::Array[Requirement]) }
|
|
18
|
+
def self.requirements_array(requirement_string)
|
|
19
|
+
return [new(nil)] if requirement_string.nil?
|
|
20
|
+
|
|
21
|
+
[new(requirement_string)]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
sig { params(requirements: T.nilable(T.any(String, T::Array[String]))).void }
|
|
25
|
+
def initialize(*requirements)
|
|
26
|
+
requirements = requirements.flatten.compact.flat_map do |req_string|
|
|
27
|
+
req_string.split(",").map(&:strip).map do |r|
|
|
28
|
+
convert_deno_constraint_to_ruby_constraint(r.strip)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
requirements = [">= 0"] if requirements.empty?
|
|
32
|
+
super(requirements)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
sig { params(req_string: String).returns(T.any(String, T::Array[String])) }
|
|
38
|
+
def convert_deno_constraint_to_ruby_constraint(req_string)
|
|
39
|
+
if req_string.match?(/^\^/) then convert_caret_req(req_string)
|
|
40
|
+
elsif req_string.match?(/^~[^>]/) then convert_tilde_req(req_string)
|
|
41
|
+
elsif req_string.match?(/[<=>]/) then req_string
|
|
42
|
+
else
|
|
43
|
+
"= #{req_string}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
sig { params(req_string: String).returns(String) }
|
|
48
|
+
def convert_tilde_req(req_string)
|
|
49
|
+
version = req_string.gsub(/^~/, "")
|
|
50
|
+
"~> #{version}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
sig { params(req_string: String).returns(T::Array[String]) }
|
|
54
|
+
def convert_caret_req(req_string)
|
|
55
|
+
version = req_string.gsub(/^\^/, "")
|
|
56
|
+
parts = version.split(".")
|
|
57
|
+
first_non_zero = parts.find { |d| d != "0" }
|
|
58
|
+
first_non_zero_index =
|
|
59
|
+
first_non_zero ? parts.index(first_non_zero) : parts.count - 1
|
|
60
|
+
upper_bound = parts.map.with_index do |part, i|
|
|
61
|
+
if i < T.must(first_non_zero_index) then part
|
|
62
|
+
elsif i == first_non_zero_index then (part.to_i + 1).to_s
|
|
63
|
+
else
|
|
64
|
+
0
|
|
65
|
+
end
|
|
66
|
+
end.join(".")
|
|
67
|
+
|
|
68
|
+
[">= #{version}", "< #{upper_bound}"]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Dependabot::Utils.register_requirement_class("deno", Dependabot::Deno::Requirement)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
require "dependabot/package/package_latest_version_finder"
|
|
6
|
+
require "dependabot/package/package_details"
|
|
7
|
+
require "dependabot/deno/update_checker"
|
|
8
|
+
require "dependabot/deno/package/package_details_fetcher"
|
|
9
|
+
|
|
10
|
+
module Dependabot
|
|
11
|
+
module Deno
|
|
12
|
+
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
|
13
|
+
class LatestVersionFinder < Dependabot::Package::PackageLatestVersionFinder
|
|
14
|
+
extend T::Sig
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
sig { override.returns(T.nilable(Dependabot::Package::PackageDetails)) }
|
|
19
|
+
def package_details
|
|
20
|
+
@package_details ||= T.let(
|
|
21
|
+
Dependabot::Package::PackageDetails.new(
|
|
22
|
+
dependency: dependency,
|
|
23
|
+
releases: Package::PackageDetailsFetcher.new(
|
|
24
|
+
dependency: dependency
|
|
25
|
+
).available_versions
|
|
26
|
+
),
|
|
27
|
+
T.nilable(Dependabot::Package::PackageDetails)
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "dependabot/update_checkers"
|
|
5
|
+
require "dependabot/update_checkers/base"
|
|
6
|
+
require "dependabot/deno/version"
|
|
7
|
+
require "dependabot/deno/requirement"
|
|
8
|
+
|
|
9
|
+
module Dependabot
|
|
10
|
+
module Deno
|
|
11
|
+
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
|
12
|
+
extend T::Sig
|
|
13
|
+
|
|
14
|
+
require_relative "update_checker/latest_version_finder"
|
|
15
|
+
|
|
16
|
+
sig { override.returns(T.nilable(T.any(String, Gem::Version))) }
|
|
17
|
+
def latest_version
|
|
18
|
+
latest_version_finder.latest_version
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
sig { override.returns(T.nilable(T.any(String, Gem::Version))) }
|
|
22
|
+
def latest_resolvable_version
|
|
23
|
+
latest_version
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
sig { override.returns(T.nilable(String)) }
|
|
27
|
+
def latest_resolvable_version_with_no_unlock
|
|
28
|
+
dependency.version
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
sig { override.returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
|
32
|
+
def updated_requirements
|
|
33
|
+
return dependency.requirements unless latest_version
|
|
34
|
+
|
|
35
|
+
dependency.requirements.map do |req|
|
|
36
|
+
req.merge(requirement: updated_constraint(req[:requirement]))
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
sig { override.returns(T::Boolean) }
|
|
43
|
+
def latest_version_resolvable_with_full_unlock?
|
|
44
|
+
false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
sig { override.returns(T::Array[Dependabot::Dependency]) }
|
|
48
|
+
def updated_dependencies_after_full_unlock
|
|
49
|
+
[]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
sig { returns(LatestVersionFinder) }
|
|
53
|
+
def latest_version_finder
|
|
54
|
+
@latest_version_finder ||= T.let(
|
|
55
|
+
LatestVersionFinder.new(
|
|
56
|
+
dependency: dependency,
|
|
57
|
+
dependency_files: dependency_files,
|
|
58
|
+
credentials: credentials,
|
|
59
|
+
ignored_versions: ignored_versions,
|
|
60
|
+
security_advisories: security_advisories,
|
|
61
|
+
cooldown_options: update_cooldown
|
|
62
|
+
),
|
|
63
|
+
T.nilable(LatestVersionFinder)
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
sig { params(old_constraint: T.nilable(String)).returns(String) }
|
|
68
|
+
def updated_constraint(old_constraint)
|
|
69
|
+
return latest_version.to_s unless old_constraint
|
|
70
|
+
|
|
71
|
+
latest = latest_version
|
|
72
|
+
return old_constraint unless latest
|
|
73
|
+
|
|
74
|
+
if old_constraint.start_with?("^")
|
|
75
|
+
"^#{latest}"
|
|
76
|
+
elsif old_constraint.start_with?("~")
|
|
77
|
+
"~#{latest}"
|
|
78
|
+
elsif old_constraint.start_with?("=")
|
|
79
|
+
"=#{latest}"
|
|
80
|
+
elsif old_constraint.match?(/\A[><]/)
|
|
81
|
+
# Range constraints (>=, <=, <, >, and compound ranges like
|
|
82
|
+
# ">=1.0.0 <2.0.0") are intentionally left unchanged. Updating
|
|
83
|
+
# range bounds requires resolving the new version against the
|
|
84
|
+
# full range and is deferred to a follow-up.
|
|
85
|
+
old_constraint
|
|
86
|
+
else
|
|
87
|
+
latest.to_s
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
Dependabot::UpdateCheckers.register("deno", Dependabot::Deno::UpdateChecker)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "dependabot/version"
|
|
5
|
+
require "dependabot/utils"
|
|
6
|
+
require "sorbet-runtime"
|
|
7
|
+
|
|
8
|
+
# Deno uses semver for both jsr: and npm: specifiers.
|
|
9
|
+
# Build metadata (e.g. 1.0.0+build) is preserved but ignored in comparisons.
|
|
10
|
+
|
|
11
|
+
module Dependabot
|
|
12
|
+
module Deno
|
|
13
|
+
class Version < Dependabot::Version
|
|
14
|
+
extend T::Sig
|
|
15
|
+
|
|
16
|
+
VERSION_PATTERN = T.let(Gem::Version::VERSION_PATTERN + '(\+[0-9a-zA-Z\-.]+)?', String)
|
|
17
|
+
ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/
|
|
18
|
+
|
|
19
|
+
sig { returns(T.nilable(String)) }
|
|
20
|
+
attr_reader :build_info
|
|
21
|
+
|
|
22
|
+
sig { override.params(version: VersionParameter).returns(T::Boolean) }
|
|
23
|
+
def self.correct?(version)
|
|
24
|
+
return false if version.nil?
|
|
25
|
+
|
|
26
|
+
version.to_s.match?(ANCHORED_VERSION_PATTERN)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig { override.params(version: VersionParameter).void }
|
|
30
|
+
def initialize(version)
|
|
31
|
+
@version_string = T.let(version.to_s, String)
|
|
32
|
+
@build_info = T.let(nil, T.nilable(String))
|
|
33
|
+
|
|
34
|
+
version, @build_info = version.to_s.split("+") if version.to_s.include?("+")
|
|
35
|
+
|
|
36
|
+
super(T.must(version))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
sig { override.params(version: VersionParameter).returns(Dependabot::Deno::Version) }
|
|
40
|
+
def self.new(version)
|
|
41
|
+
T.cast(super, Dependabot::Deno::Version)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
sig { override.returns(String) }
|
|
45
|
+
def to_s
|
|
46
|
+
@version_string
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
sig { override.returns(String) }
|
|
50
|
+
def inspect
|
|
51
|
+
"#<#{self.class} #{@version_string}>"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Dependabot::Utils.register_version_class("deno", Dependabot::Deno::Version)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# These all need to be required so the various classes can be registered in a
|
|
5
|
+
# lookup table of package manager names to concrete classes.
|
|
6
|
+
require "dependabot/deno/file_fetcher"
|
|
7
|
+
require "dependabot/deno/file_parser"
|
|
8
|
+
require "dependabot/deno/update_checker"
|
|
9
|
+
require "dependabot/deno/file_updater"
|
|
10
|
+
require "dependabot/deno/metadata_finder"
|
|
11
|
+
require "dependabot/deno/package/package_details_fetcher"
|
|
12
|
+
require "dependabot/deno/version"
|
|
13
|
+
require "dependabot/deno/requirement"
|
|
14
|
+
|
|
15
|
+
require "dependabot/pull_request_creator/labeler"
|
|
16
|
+
Dependabot::PullRequestCreator::Labeler
|
|
17
|
+
.register_label_details("deno", name: "deno", colour: "70ffaf")
|
|
18
|
+
|
|
19
|
+
require "dependabot/dependency"
|
|
20
|
+
# Deno's import map has no dev/prod distinction (no devDependencies equivalent),
|
|
21
|
+
# so every import is treated as production. If a future deno.json schema adds
|
|
22
|
+
# a way to mark dev-only or test-only imports, this check should consult groups.
|
|
23
|
+
Dependabot::Dependency.register_production_check("deno", ->(_) { true })
|
metadata
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: dependabot-deno
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.374.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Dependabot
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: dependabot-common
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - '='
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 0.374.0
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - '='
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 0.374.0
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: debug
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '1.9'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.9'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: gpgme
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '2.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '2.0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rake
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '13.2'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '13.2'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rspec
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '3.12'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '3.12'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rspec-its
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '2.0'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '2.0'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: rspec-sorbet
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '1.9'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '1.9'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: rubocop
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '1.80'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '1.80'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: rubocop-performance
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '1.26'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '1.26'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: rubocop-rspec
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '3.7'
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '3.7'
|
|
152
|
+
- !ruby/object:Gem::Dependency
|
|
153
|
+
name: rubocop-sorbet
|
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
|
155
|
+
requirements:
|
|
156
|
+
- - "~>"
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
version: '0.10'
|
|
159
|
+
type: :development
|
|
160
|
+
prerelease: false
|
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - "~>"
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0.10'
|
|
166
|
+
- !ruby/object:Gem::Dependency
|
|
167
|
+
name: simplecov
|
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - "~>"
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0.22'
|
|
173
|
+
type: :development
|
|
174
|
+
prerelease: false
|
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
+
requirements:
|
|
177
|
+
- - "~>"
|
|
178
|
+
- !ruby/object:Gem::Version
|
|
179
|
+
version: '0.22'
|
|
180
|
+
- !ruby/object:Gem::Dependency
|
|
181
|
+
name: turbo_tests
|
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
|
183
|
+
requirements:
|
|
184
|
+
- - "~>"
|
|
185
|
+
- !ruby/object:Gem::Version
|
|
186
|
+
version: 2.2.5
|
|
187
|
+
type: :development
|
|
188
|
+
prerelease: false
|
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
190
|
+
requirements:
|
|
191
|
+
- - "~>"
|
|
192
|
+
- !ruby/object:Gem::Version
|
|
193
|
+
version: 2.2.5
|
|
194
|
+
- !ruby/object:Gem::Dependency
|
|
195
|
+
name: vcr
|
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
|
197
|
+
requirements:
|
|
198
|
+
- - "~>"
|
|
199
|
+
- !ruby/object:Gem::Version
|
|
200
|
+
version: '6.1'
|
|
201
|
+
type: :development
|
|
202
|
+
prerelease: false
|
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - "~>"
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '6.1'
|
|
208
|
+
- !ruby/object:Gem::Dependency
|
|
209
|
+
name: webmock
|
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
|
211
|
+
requirements:
|
|
212
|
+
- - "~>"
|
|
213
|
+
- !ruby/object:Gem::Version
|
|
214
|
+
version: '3.25'
|
|
215
|
+
type: :development
|
|
216
|
+
prerelease: false
|
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
218
|
+
requirements:
|
|
219
|
+
- - "~>"
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: '3.25'
|
|
222
|
+
- !ruby/object:Gem::Dependency
|
|
223
|
+
name: webrick
|
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
|
225
|
+
requirements:
|
|
226
|
+
- - "~>"
|
|
227
|
+
- !ruby/object:Gem::Version
|
|
228
|
+
version: '1.9'
|
|
229
|
+
type: :development
|
|
230
|
+
prerelease: false
|
|
231
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
232
|
+
requirements:
|
|
233
|
+
- - "~>"
|
|
234
|
+
- !ruby/object:Gem::Version
|
|
235
|
+
version: '1.9'
|
|
236
|
+
description: Dependabot-Deno provides support for bumping Deno dependencies via Dependabot.
|
|
237
|
+
If you want support for multiple package managers, you probably want the meta-gem
|
|
238
|
+
dependabot-omnibus.
|
|
239
|
+
email: opensource@github.com
|
|
240
|
+
executables: []
|
|
241
|
+
extensions: []
|
|
242
|
+
extra_rdoc_files: []
|
|
243
|
+
files:
|
|
244
|
+
- lib/dependabot/deno.rb
|
|
245
|
+
- lib/dependabot/deno/file_fetcher.rb
|
|
246
|
+
- lib/dependabot/deno/file_parser.rb
|
|
247
|
+
- lib/dependabot/deno/file_updater.rb
|
|
248
|
+
- lib/dependabot/deno/metadata_finder.rb
|
|
249
|
+
- lib/dependabot/deno/package/package_details_fetcher.rb
|
|
250
|
+
- lib/dependabot/deno/requirement.rb
|
|
251
|
+
- lib/dependabot/deno/update_checker.rb
|
|
252
|
+
- lib/dependabot/deno/update_checker/latest_version_finder.rb
|
|
253
|
+
- lib/dependabot/deno/version.rb
|
|
254
|
+
homepage: https://github.com/dependabot/dependabot-core
|
|
255
|
+
licenses:
|
|
256
|
+
- MIT
|
|
257
|
+
metadata:
|
|
258
|
+
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
259
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.374.0
|
|
260
|
+
rdoc_options: []
|
|
261
|
+
require_paths:
|
|
262
|
+
- lib
|
|
263
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
264
|
+
requirements:
|
|
265
|
+
- - ">="
|
|
266
|
+
- !ruby/object:Gem::Version
|
|
267
|
+
version: 3.3.0
|
|
268
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
|
+
requirements:
|
|
270
|
+
- - ">="
|
|
271
|
+
- !ruby/object:Gem::Version
|
|
272
|
+
version: 3.3.0
|
|
273
|
+
requirements: []
|
|
274
|
+
rubygems_version: 3.7.2
|
|
275
|
+
specification_version: 4
|
|
276
|
+
summary: Provides Dependabot support for Deno
|
|
277
|
+
test_files: []
|