dependabot-composer 0.391.0 → 0.393.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 +4 -4
- data/helpers/v2/composer.lock +4 -4
- data/lib/dependabot/composer/file_updater/lockfile_updater.rb +24 -19
- data/lib/dependabot/composer/file_updater/manifest_updater.rb +9 -9
- data/lib/dependabot/composer/metadata_finder.rb +1 -6
- data/lib/dependabot/composer/update_checker/latest_version_finder.rb +2 -2
- data/lib/dependabot/composer/update_checker/requirements_updater.rb +34 -17
- data/lib/dependabot/composer/update_checker/version_resolver.rb +24 -22
- data/lib/dependabot/composer/update_checker.rb +3 -3
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 78b54a4ac406d7d5f1cae0f767b47f6ba8eb7671d202fd379bd560201f5d7cc7
|
|
4
|
+
data.tar.gz: 020ec993034ceea2e4aa1e4f11d6d87486499bb0a5e241a7087ffbad2b0d981f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de52472901295cf6f857c01953829a2931d77423ec1b713e4789ed782b016012cdd70543be3c9c4463f89f78f2e4239b6c88eee521c71230e227e73f576c0c61
|
|
7
|
+
data.tar.gz: d8ea50434bf9909eb7bc3592bbcbe597c72112ac29e611e04fa6688ea31a2ab45e2984d149c0c89fb365c07bf05836a2a8bc0384ec5d691d58801028311cc58e
|
data/helpers/v2/composer.lock
CHANGED
|
@@ -2684,11 +2684,11 @@
|
|
|
2684
2684
|
},
|
|
2685
2685
|
{
|
|
2686
2686
|
"name": "phpstan/phpstan",
|
|
2687
|
-
"version": "2.2.
|
|
2687
|
+
"version": "2.2.8",
|
|
2688
2688
|
"dist": {
|
|
2689
2689
|
"type": "zip",
|
|
2690
|
-
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/
|
|
2691
|
-
"reference": "
|
|
2690
|
+
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/e285254e60f33c21902efef4a926ca0987c06804",
|
|
2691
|
+
"reference": "e285254e60f33c21902efef4a926ca0987c06804",
|
|
2692
2692
|
"shasum": ""
|
|
2693
2693
|
},
|
|
2694
2694
|
"require": {
|
|
@@ -2744,7 +2744,7 @@
|
|
|
2744
2744
|
"type": "github"
|
|
2745
2745
|
}
|
|
2746
2746
|
],
|
|
2747
|
-
"time": "2026-
|
|
2747
|
+
"time": "2026-08-04T22:21:45+00:00"
|
|
2748
2748
|
},
|
|
2749
2749
|
{
|
|
2750
2750
|
"name": "psr/event-dispatcher",
|
|
@@ -122,21 +122,24 @@ module Dependabot
|
|
|
122
122
|
|
|
123
123
|
sig { returns(T::Hash[String, String]) }
|
|
124
124
|
def run_update_helper
|
|
125
|
-
|
|
126
|
-
SharedHelpers.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
125
|
+
T.cast(
|
|
126
|
+
SharedHelpers.with_git_configured(credentials: credentials) do
|
|
127
|
+
SharedHelpers.run_helper_subprocess(
|
|
128
|
+
command: "php -d memory_limit=-1 #{php_helper_path}",
|
|
129
|
+
allow_unsafe_shell_command: true,
|
|
130
|
+
function: "update",
|
|
131
|
+
env: credentials_env,
|
|
132
|
+
args: [
|
|
133
|
+
Dir.pwd,
|
|
134
|
+
dependency.name,
|
|
135
|
+
dependency.version,
|
|
136
|
+
git_credentials,
|
|
137
|
+
registry_credentials
|
|
138
|
+
]
|
|
139
|
+
)
|
|
140
|
+
end,
|
|
141
|
+
T::Hash[String, String]
|
|
142
|
+
)
|
|
140
143
|
end
|
|
141
144
|
|
|
142
145
|
sig { returns(String) }
|
|
@@ -320,8 +323,8 @@ module Dependabot
|
|
|
320
323
|
next content unless Composer::Version.correct?(updated_req)
|
|
321
324
|
|
|
322
325
|
old_req =
|
|
323
|
-
dep.requirements.find { |r| r
|
|
324
|
-
&.
|
|
326
|
+
dep.requirements.find { |r| r.file == PackageManager::MANIFEST_FILENAME }
|
|
327
|
+
&.requirement_string
|
|
325
328
|
|
|
326
329
|
# When updating a subdep there won't be an old requirement
|
|
327
330
|
next content unless old_req
|
|
@@ -418,13 +421,15 @@ module Dependabot
|
|
|
418
421
|
SharedHelpers.in_a_temporary_directory do
|
|
419
422
|
File.write(PackageManager::MANIFEST_FILENAME, updated_composer_json_content)
|
|
420
423
|
|
|
421
|
-
content_hash =
|
|
424
|
+
content_hash = T.cast(
|
|
422
425
|
SharedHelpers.run_helper_subprocess(
|
|
423
426
|
command: "#{Language::NAME} #{php_helper_path}",
|
|
424
427
|
function: "get_content_hash",
|
|
425
428
|
env: credentials_env,
|
|
426
429
|
args: [Dir.pwd]
|
|
427
|
-
)
|
|
430
|
+
),
|
|
431
|
+
String
|
|
432
|
+
)
|
|
428
433
|
|
|
429
434
|
content.gsub(existing_hash, content_hash)
|
|
430
435
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "sorbet-runtime"
|
|
@@ -23,8 +23,8 @@ module Dependabot
|
|
|
23
23
|
dependencies.reduce(manifest.content.dup) do |content, dep|
|
|
24
24
|
updated_content = content
|
|
25
25
|
updated_requirements(dep).each do |new_req|
|
|
26
|
-
old_req = old_requirement(dep, new_req)&.
|
|
27
|
-
updated_req = new_req.
|
|
26
|
+
old_req = T.must(old_requirement(dep, new_req)&.requirement_string)
|
|
27
|
+
updated_req = T.must(new_req.requirement_string)
|
|
28
28
|
|
|
29
29
|
regex =
|
|
30
30
|
/
|
|
@@ -54,20 +54,20 @@ module Dependabot
|
|
|
54
54
|
|
|
55
55
|
sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
56
56
|
def new_requirements(dependency)
|
|
57
|
-
dependency.requirements.select { |r| r
|
|
57
|
+
dependency.requirements.select { |r| r.file == manifest.name }
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
sig do
|
|
61
61
|
params(
|
|
62
62
|
dependency: Dependabot::Dependency,
|
|
63
|
-
new_requirement:
|
|
63
|
+
new_requirement: Dependabot::DependencyRequirement
|
|
64
64
|
)
|
|
65
|
-
.returns(T.nilable(
|
|
65
|
+
.returns(T.nilable(Dependabot::DependencyRequirement))
|
|
66
66
|
end
|
|
67
67
|
def old_requirement(dependency, new_requirement)
|
|
68
68
|
T.must(dependency.previous_requirements)
|
|
69
|
-
.select { |r| r
|
|
70
|
-
.find { |r| r
|
|
69
|
+
.select { |r| r.file == manifest.name }
|
|
70
|
+
.find { |r| r.groups == new_requirement.groups }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
@@ -81,7 +81,7 @@ module Dependabot
|
|
|
81
81
|
changed_requirements =
|
|
82
82
|
dependency.requirements - T.must(dependency.previous_requirements)
|
|
83
83
|
|
|
84
|
-
changed_requirements.any? { |
|
|
84
|
+
changed_requirements.any? { |requirement| requirement.file == file.name }
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
end
|
|
@@ -36,12 +36,7 @@ module Dependabot
|
|
|
36
36
|
|
|
37
37
|
sig { returns(T.nilable(Source)) }
|
|
38
38
|
def source_from_dependency
|
|
39
|
-
|
|
40
|
-
dependency.requirements
|
|
41
|
-
.filter_map { |r| r.fetch(:source) }
|
|
42
|
-
.first&.fetch(:url, nil)
|
|
43
|
-
|
|
44
|
-
Source.from_url(source_url)
|
|
39
|
+
Source.from_url(dependency.source_string("url"))
|
|
45
40
|
end
|
|
46
41
|
|
|
47
42
|
sig { returns(T.nilable(Source)) }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "excon"
|
|
@@ -74,7 +74,7 @@ module Dependabot
|
|
|
74
74
|
return true if current_version&.prerelease?
|
|
75
75
|
|
|
76
76
|
dependency.requirements.any? do |req|
|
|
77
|
-
req
|
|
77
|
+
req.requirement_string&.match?(/\d-[A-Za-z]/)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -11,6 +11,7 @@ require "sorbet-runtime"
|
|
|
11
11
|
require "dependabot/composer/requirement"
|
|
12
12
|
require "dependabot/composer/update_checker"
|
|
13
13
|
require "dependabot/composer/version"
|
|
14
|
+
require "dependabot/dependency_requirement"
|
|
14
15
|
require "dependabot/requirements_update_strategy"
|
|
15
16
|
|
|
16
17
|
module Dependabot
|
|
@@ -36,7 +37,7 @@ module Dependabot
|
|
|
36
37
|
|
|
37
38
|
sig do
|
|
38
39
|
params(
|
|
39
|
-
requirements: T::Array[
|
|
40
|
+
requirements: T::Array[Dependabot::DependencyRequirement],
|
|
40
41
|
update_strategy: Dependabot::RequirementsUpdateStrategy,
|
|
41
42
|
latest_resolvable_version: T.nilable(T.any(String, Composer::Version))
|
|
42
43
|
).void
|
|
@@ -46,7 +47,10 @@ module Dependabot
|
|
|
46
47
|
update_strategy:,
|
|
47
48
|
latest_resolvable_version:
|
|
48
49
|
)
|
|
49
|
-
@requirements =
|
|
50
|
+
@requirements = T.let(
|
|
51
|
+
requirements.map { |requirement| Dependabot::DependencyRequirement.create(requirement) },
|
|
52
|
+
T::Array[Dependabot::DependencyRequirement]
|
|
53
|
+
)
|
|
50
54
|
@update_strategy = update_strategy
|
|
51
55
|
|
|
52
56
|
check_update_strategy
|
|
@@ -59,7 +63,7 @@ module Dependabot
|
|
|
59
63
|
)
|
|
60
64
|
end
|
|
61
65
|
|
|
62
|
-
sig { returns(T::Array[
|
|
66
|
+
sig { returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
63
67
|
def updated_requirements
|
|
64
68
|
return requirements if update_strategy.lockfile_only?
|
|
65
69
|
return requirements unless latest_resolvable_version
|
|
@@ -69,7 +73,7 @@ module Dependabot
|
|
|
69
73
|
|
|
70
74
|
private
|
|
71
75
|
|
|
72
|
-
sig { returns(T::Array[
|
|
76
|
+
sig { returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
73
77
|
attr_reader :requirements
|
|
74
78
|
|
|
75
79
|
sig { returns(Dependabot::RequirementsUpdateStrategy) }
|
|
@@ -85,9 +89,12 @@ module Dependabot
|
|
|
85
89
|
raise "Unknown update strategy: #{update_strategy}"
|
|
86
90
|
end
|
|
87
91
|
|
|
88
|
-
sig
|
|
92
|
+
sig do
|
|
93
|
+
params(req: Dependabot::DependencyRequirement)
|
|
94
|
+
.returns(Dependabot::DependencyRequirement)
|
|
95
|
+
end
|
|
89
96
|
def updated_requirement(req)
|
|
90
|
-
req_string = T.must(req
|
|
97
|
+
req_string = T.must(req.requirement_string).strip
|
|
91
98
|
or_string_reqs = req_string.split(OR_SEPARATOR)
|
|
92
99
|
or_separator = req_string.match(OR_SEPARATOR)&.to_s || " || "
|
|
93
100
|
branch_or_string_reqs, numeric_or_string_reqs = or_string_reqs
|
|
@@ -110,12 +117,16 @@ module Dependabot
|
|
|
110
117
|
# Add a T.must for new_req as it's defined in the case statement with multiple options
|
|
111
118
|
new_req = T.must(new_req)
|
|
112
119
|
new_req_string =
|
|
113
|
-
[new_req
|
|
114
|
-
new_req.merge(requirement: new_req_string)
|
|
120
|
+
[T.must(new_req.requirement_string), *branch_or_string_reqs].join(or_separator)
|
|
121
|
+
Dependabot::DependencyRequirement.create(new_req.merge(requirement: new_req_string))
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
sig do
|
|
125
|
+
params(req: Dependabot::DependencyRequirement)
|
|
126
|
+
.returns(Dependabot::DependencyRequirement)
|
|
115
127
|
end
|
|
116
|
-
sig { params(req: T::Hash[Symbol, String]).returns(T::Hash[Symbol, String]) }
|
|
117
128
|
def updated_alias(req)
|
|
118
|
-
req_string = T.must(req
|
|
129
|
+
req_string = T.must(req.requirement_string)
|
|
119
130
|
parts = req_string.split(/\sas\s/)
|
|
120
131
|
real_version = T.must(parts.first).strip
|
|
121
132
|
|
|
@@ -125,13 +136,16 @@ module Dependabot
|
|
|
125
136
|
|
|
126
137
|
new_version_string = T.must(latest_resolvable_version).to_s
|
|
127
138
|
new_req = req_string.sub(real_version, new_version_string)
|
|
128
|
-
req.merge(requirement: new_req)
|
|
139
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: new_req))
|
|
129
140
|
end
|
|
130
141
|
|
|
131
142
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
132
|
-
sig
|
|
143
|
+
sig do
|
|
144
|
+
params(req: Dependabot::DependencyRequirement, or_separator: String)
|
|
145
|
+
.returns(Dependabot::DependencyRequirement)
|
|
146
|
+
end
|
|
133
147
|
def widen_requirement(req, or_separator)
|
|
134
|
-
current_requirement = T.must(req
|
|
148
|
+
current_requirement = T.must(req.requirement_string)
|
|
135
149
|
reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
|
|
136
150
|
|
|
137
151
|
updated_requirement =
|
|
@@ -147,13 +161,16 @@ module Dependabot
|
|
|
147
161
|
update_version_string(current_requirement)
|
|
148
162
|
end
|
|
149
163
|
|
|
150
|
-
req.merge(requirement: updated_requirement)
|
|
164
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
|
|
151
165
|
end
|
|
152
166
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
153
167
|
|
|
154
|
-
sig
|
|
168
|
+
sig do
|
|
169
|
+
params(req: Dependabot::DependencyRequirement, or_separator: String)
|
|
170
|
+
.returns(Dependabot::DependencyRequirement)
|
|
171
|
+
end
|
|
155
172
|
def update_requirement_version(req, or_separator)
|
|
156
|
-
current_requirement = T.must(req
|
|
173
|
+
current_requirement = T.must(req.requirement_string)
|
|
157
174
|
reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
|
|
158
175
|
|
|
159
176
|
updated_requirement =
|
|
@@ -167,7 +184,7 @@ module Dependabot
|
|
|
167
184
|
update_version_string(current_requirement)
|
|
168
185
|
end
|
|
169
186
|
|
|
170
|
-
req.merge(requirement: updated_requirement)
|
|
187
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
|
|
171
188
|
end
|
|
172
189
|
|
|
173
190
|
sig { params(requirement_string: String).returns(T::Boolean) }
|
|
@@ -188,19 +188,22 @@ module Dependabot
|
|
|
188
188
|
|
|
189
189
|
sig { returns(T.nilable(String)) }
|
|
190
190
|
def run_update_checker
|
|
191
|
-
|
|
192
|
-
SharedHelpers.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
191
|
+
T.cast(
|
|
192
|
+
SharedHelpers.with_git_configured(credentials: credentials) do
|
|
193
|
+
SharedHelpers.run_helper_subprocess(
|
|
194
|
+
command: "php -d memory_limit=-1 #{php_helper_path}",
|
|
195
|
+
allow_unsafe_shell_command: true,
|
|
196
|
+
function: "get_latest_resolvable_version",
|
|
197
|
+
args: [
|
|
198
|
+
Dir.pwd,
|
|
199
|
+
dependency.name.downcase,
|
|
200
|
+
git_credentials,
|
|
201
|
+
registry_credentials
|
|
202
|
+
]
|
|
203
|
+
)
|
|
204
|
+
end,
|
|
205
|
+
T.nilable(String)
|
|
206
|
+
)
|
|
204
207
|
end
|
|
205
208
|
|
|
206
209
|
sig { params(unlock_requirement: T::Boolean).returns(String) }
|
|
@@ -265,22 +268,22 @@ module Dependabot
|
|
|
265
268
|
end
|
|
266
269
|
|
|
267
270
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
268
|
-
# rubocop:disable Metrics/AbcSize
|
|
269
271
|
sig { returns(String) }
|
|
270
272
|
def updated_version_requirement_string
|
|
271
273
|
lower_bound =
|
|
272
274
|
if requirements_to_unlock == :none
|
|
273
|
-
dependency.requirements.first&.
|
|
275
|
+
dependency.requirements.first&.requirement_string || ">= 0"
|
|
274
276
|
elsif dependency.version
|
|
275
277
|
">= #{dependency.version}"
|
|
276
278
|
else
|
|
277
279
|
version_for_requirement =
|
|
278
|
-
dependency.requirements
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
280
|
+
dependency.requirements
|
|
281
|
+
.filter_map(&:requirement_string)
|
|
282
|
+
.reject { |req_string| req_string.start_with?("<") }
|
|
283
|
+
.select { |req_string| req_string.match?(VERSION_REGEX) }
|
|
284
|
+
.map { |req_string| req_string.match(VERSION_REGEX) }
|
|
285
|
+
.select { |version| requirement_valid?(">= #{version}") }
|
|
286
|
+
.max_by { |version| Composer::Version.new(version.to_s) }
|
|
284
287
|
|
|
285
288
|
">= #{version_for_requirement || 0}"
|
|
286
289
|
end
|
|
@@ -301,7 +304,6 @@ module Dependabot
|
|
|
301
304
|
lower_bound + ", == #{latest_allowable_version}"
|
|
302
305
|
end
|
|
303
306
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
304
|
-
# rubocop:enable Metrics/AbcSize
|
|
305
307
|
|
|
306
308
|
# TODO: Extract error handling and share between the lockfile updater
|
|
307
309
|
#
|
|
@@ -156,13 +156,13 @@ module Dependabot
|
|
|
156
156
|
|
|
157
157
|
sig { returns(T::Boolean) }
|
|
158
158
|
def path_dependency?
|
|
159
|
-
dependency.requirements.any? { |r| r.
|
|
159
|
+
dependency.requirements.any? { |r| r.source_string("type") == "path" }
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
# To be a true git dependency, it must have a branch.
|
|
163
163
|
sig { returns(T::Boolean) }
|
|
164
164
|
def git_dependency?
|
|
165
|
-
dependency.requirements.any? { |r| r.
|
|
165
|
+
dependency.requirements.any? { |r| r.source_string("branch") }
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
sig { returns(Dependabot::DependencyFile) }
|
|
@@ -191,7 +191,7 @@ module Dependabot
|
|
|
191
191
|
if git_commit_checker.pinned_ref_looks_like_version? &&
|
|
192
192
|
git_commit_checker.local_tag_for_latest_version(update_cooldown)
|
|
193
193
|
latest_tag = git_commit_checker.local_tag_for_latest_version(update_cooldown)
|
|
194
|
-
return latest_tag&.
|
|
194
|
+
return latest_tag&.commit_sha
|
|
195
195
|
end
|
|
196
196
|
|
|
197
197
|
# If the dependency is pinned to a tag that doesn't look like a
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-composer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.393.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.393.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.393.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: debug
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ licenses:
|
|
|
276
276
|
- MIT
|
|
277
277
|
metadata:
|
|
278
278
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
279
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
279
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.393.0
|
|
280
280
|
rdoc_options: []
|
|
281
281
|
require_paths:
|
|
282
282
|
- lib
|