dependabot-npm_and_yarn 0.394.0 → 0.395.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/lib/npm/vulnerability-auditor.ts +6 -1
- data/helpers/package-lock.json +7 -6
- data/helpers/test/npm/fixtures/vulnerability-auditor/range-order-lower-major-only/package-lock.json +24 -0
- data/helpers/test/npm/fixtures/vulnerability-auditor/range-order-lower-major-only/package.json +9 -0
- data/helpers/test/npm/vulnerability-auditor.test.ts +76 -0
- data/lib/dependabot/npm_and_yarn/constraint_helper.rb +1 -1
- data/lib/dependabot/npm_and_yarn/dependency_grapher/pnpm_relationship_resolver.rb +5 -1
- data/lib/dependabot/npm_and_yarn/dependency_grapher.rb +1 -1
- data/lib/dependabot/npm_and_yarn/file_fetcher.rb +1 -1
- data/lib/dependabot/npm_and_yarn/file_parser.rb +1 -1
- data/lib/dependabot/npm_and_yarn/file_updater/npm_lockfile_updater.rb +1 -2
- data/lib/dependabot/npm_and_yarn/file_updater/pnpm_lockfile_updater.rb +1 -1
- data/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb +3 -4
- data/lib/dependabot/npm_and_yarn/package_manager.rb +36 -22
- data/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb +1 -2
- data/lib/dependabot/npm_and_yarn/version_selector.rb +8 -10
- data/lib/dependabot/npm_and_yarn.rb +1 -2
- metadata +9 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 814f7f9eb89a5c4996711bb1ec4c541d2d7bbf0c7b3ec3767735fd859f3ea686
|
|
4
|
+
data.tar.gz: 7be4b8ad726b88f8fb3491326a6cd32b27c3b30e71009aabdc58657156f7f4a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09a6318dab7354fa6bc0ba314ad763e6bfb2dd347a009fe13f957064a07d50fd25dd827d6a4ad414796133025a8705e78e1cdf9a975a7205e24f8abad9e57cec'
|
|
7
|
+
data.tar.gz: 8b2ec8e2da37e4597cfc91ad544f52ea5a5f126ba3676f4bd0107abb076bceaff608b75fa898cd56ae8843511f209178130c0ad23889703d582abce0ae48b10d
|
|
@@ -313,7 +313,12 @@ function convertAdvisoriesToRegistryBulkFormat(
|
|
|
313
313
|
>((memo, version) => {
|
|
314
314
|
memo.push({
|
|
315
315
|
id: Math.floor(Math.random() * Number.MAX_SAFE_INTEGER),
|
|
316
|
-
|
|
316
|
+
// Dependabot advisories join comparators with ", " but npm semver
|
|
317
|
+
// uses spaces. Loose semver parsing silently drops the comparator
|
|
318
|
+
// before a comma (">= 3.0.0, < 3.1.2" parses as "<3.1.2"), turning
|
|
319
|
+
// a range for one major into one that also covers every lower
|
|
320
|
+
// version, so strip the commas before Arborist sees the range.
|
|
321
|
+
vulnerable_versions: version.replace(/,/g, " "),
|
|
317
322
|
});
|
|
318
323
|
return memo;
|
|
319
324
|
}, []);
|
data/helpers/package-lock.json
CHANGED
|
@@ -14934,9 +14934,10 @@
|
|
|
14934
14934
|
}
|
|
14935
14935
|
},
|
|
14936
14936
|
"node_modules/postcss-selector-parser": {
|
|
14937
|
-
"version": "7.1.
|
|
14938
|
-
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.
|
|
14939
|
-
"integrity": "sha512-
|
|
14937
|
+
"version": "7.1.5",
|
|
14938
|
+
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz",
|
|
14939
|
+
"integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==",
|
|
14940
|
+
"license": "MIT",
|
|
14940
14941
|
"dependencies": {
|
|
14941
14942
|
"cssesc": "^3.0.0",
|
|
14942
14943
|
"util-deprecate": "^1.0.2"
|
|
@@ -27786,9 +27787,9 @@
|
|
|
27786
27787
|
}
|
|
27787
27788
|
},
|
|
27788
27789
|
"postcss-selector-parser": {
|
|
27789
|
-
"version": "7.1.
|
|
27790
|
-
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.
|
|
27791
|
-
"integrity": "sha512-
|
|
27790
|
+
"version": "7.1.5",
|
|
27791
|
+
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz",
|
|
27792
|
+
"integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==",
|
|
27792
27793
|
"requires": {
|
|
27793
27794
|
"cssesc": "^3.0.0",
|
|
27794
27795
|
"util-deprecate": "^1.0.2"
|
data/helpers/test/npm/fixtures/vulnerability-auditor/range-order-lower-major-only/package-lock.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "test-vulnerability-range-order-lower-major-only",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "test-vulnerability-range-order-lower-major-only",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@msgpack/msgpack": "^2.7.2"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"node_modules/@msgpack/msgpack": {
|
|
15
|
+
"version": "2.7.2",
|
|
16
|
+
"resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.7.2.tgz",
|
|
17
|
+
"integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==",
|
|
18
|
+
"license": "ISC",
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">= 10"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -348,4 +348,80 @@ describe("findVulnerableDependencies", () => {
|
|
|
348
348
|
])
|
|
349
349
|
);
|
|
350
350
|
});
|
|
351
|
+
|
|
352
|
+
// Regression tests for https://github.com/dependabot/dependabot-core/issues/13644:
|
|
353
|
+
// the audit outcome must not depend on the order of affected_versions ranges.
|
|
354
|
+
// GitHub's API emits multi-major advisories in descending-major order (the
|
|
355
|
+
// higher-major ranges first), which is the order that triggers the bug.
|
|
356
|
+
|
|
357
|
+
it("reports the same fix when affected_versions lists the higher major first", async () => {
|
|
358
|
+
helpers.copyDependencies(
|
|
359
|
+
"vulnerability-auditor/update-needed-across-two-versions",
|
|
360
|
+
tempDir
|
|
361
|
+
);
|
|
362
|
+
|
|
363
|
+
// Identical to "finds vulnerable dependencies when multiple versions of the
|
|
364
|
+
// same package are affected", except the two ranges are swapped.
|
|
365
|
+
const advisories = [
|
|
366
|
+
{
|
|
367
|
+
dependency_name: "@msgpack/msgpack",
|
|
368
|
+
affected_versions: [">= 3.0.0, < 3.1.2", ">= 2.0.0, < 2.8.0"],
|
|
369
|
+
},
|
|
370
|
+
];
|
|
371
|
+
const actual = await findVulnerableDependencies(tempDir, advisories);
|
|
372
|
+
|
|
373
|
+
expect(actual.dependency_name).toBe("@msgpack/msgpack");
|
|
374
|
+
expect(actual.current_version).toBe("2.7.2");
|
|
375
|
+
expect(actual.fix_available).toBe(true);
|
|
376
|
+
expect(actual.target_version).toBe("2.8.0");
|
|
377
|
+
|
|
378
|
+
expect(actual.fix_updates).toEqual(
|
|
379
|
+
expect.arrayContaining([
|
|
380
|
+
{
|
|
381
|
+
dependency_name: "@msgpack/msgpack",
|
|
382
|
+
current_version: "2.7.2",
|
|
383
|
+
target_version: "2.8.0",
|
|
384
|
+
top_level_ancestors: [],
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
dependency_name: "@msgpack/msgpack",
|
|
388
|
+
current_version: "3.0.0",
|
|
389
|
+
target_version: "3.1.3",
|
|
390
|
+
top_level_ancestors: ["wireql-client"],
|
|
391
|
+
},
|
|
392
|
+
])
|
|
393
|
+
);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
it("fixes an installed lower major when a range for an uninstalled higher major is listed first", async () => {
|
|
397
|
+
helpers.copyDependencies(
|
|
398
|
+
"vulnerability-auditor/range-order-lower-major-only",
|
|
399
|
+
tempDir
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
// Only @msgpack/msgpack 2.7.2 is installed (manifest range ^2.7.2, so the
|
|
403
|
+
// patched 2.8.0 is an in-range lockfile-only update). The 3.x range applies
|
|
404
|
+
// to published versions that don't appear in this tree and must be inert.
|
|
405
|
+
const advisories = [
|
|
406
|
+
{
|
|
407
|
+
dependency_name: "@msgpack/msgpack",
|
|
408
|
+
affected_versions: [">= 3.0.0, < 3.1.2", ">= 2.0.0, < 2.8.0"],
|
|
409
|
+
},
|
|
410
|
+
];
|
|
411
|
+
const actual = await findVulnerableDependencies(tempDir, advisories);
|
|
412
|
+
|
|
413
|
+
expect(actual.dependency_name).toBe("@msgpack/msgpack");
|
|
414
|
+
expect(actual.current_version).toBe("2.7.2");
|
|
415
|
+
expect(actual.fix_available).toBe(true);
|
|
416
|
+
expect(actual.target_version).toBe("2.8.0");
|
|
417
|
+
|
|
418
|
+
expect(actual.fix_updates).toEqual([
|
|
419
|
+
{
|
|
420
|
+
dependency_name: "@msgpack/msgpack",
|
|
421
|
+
current_version: "2.7.2",
|
|
422
|
+
target_version: "2.8.0",
|
|
423
|
+
top_level_ancestors: [],
|
|
424
|
+
},
|
|
425
|
+
]);
|
|
426
|
+
});
|
|
351
427
|
});
|
|
@@ -17,7 +17,11 @@ module Dependabot
|
|
|
17
17
|
|
|
18
18
|
sig { returns(T::Hash[String, T::Array[String]]) }
|
|
19
19
|
def relationships
|
|
20
|
-
|
|
20
|
+
# pnpm 11+ can write pnpm-lock.yaml as a two-document YAML stream: an
|
|
21
|
+
# env document (pnpm's own binaries, with its own "packages" and
|
|
22
|
+
# "snapshots" sections) precedes the project document. The project
|
|
23
|
+
# graph is always the last document in the stream.
|
|
24
|
+
parsed = YAML.safe_load_stream(T.must(@lockfile.content)).last || {}
|
|
21
25
|
|
|
22
26
|
# v9+ uses "snapshots" for resolved dependency details; v6 uses "packages"
|
|
23
27
|
entries = parsed.fetch("snapshots", nil) || parsed.fetch("packages", {})
|
|
@@ -125,7 +125,7 @@ module Dependabot
|
|
|
125
125
|
@detected_package_manager ||= T.let(
|
|
126
126
|
PackageManagerDetector.new(
|
|
127
127
|
lockfiles_hash,
|
|
128
|
-
parsed_package_json
|
|
128
|
+
Dependabot::Package::NpmPackageManagerConfig.from_package_json(parsed_package_json)
|
|
129
129
|
).detect_package_manager,
|
|
130
130
|
T.nilable(String)
|
|
131
131
|
)
|
|
@@ -329,7 +329,7 @@ module Dependabot
|
|
|
329
329
|
def package_manager_helper
|
|
330
330
|
@package_manager_helper ||= T.let(
|
|
331
331
|
PackageManagerHelper.new(
|
|
332
|
-
parsed_package_json,
|
|
332
|
+
Dependabot::Package::NpmPackageManagerConfig.from_package_json(parsed_package_json),
|
|
333
333
|
lockfiles,
|
|
334
334
|
registry_config_files,
|
|
335
335
|
credentials
|
|
@@ -99,7 +99,7 @@ module Dependabot
|
|
|
99
99
|
def package_manager_helper
|
|
100
100
|
@package_manager_helper ||= T.let(
|
|
101
101
|
PackageManagerHelper.new(
|
|
102
|
-
parsed_package_json,
|
|
102
|
+
Dependabot::Package::NpmPackageManagerConfig.from_package_json(parsed_package_json),
|
|
103
103
|
lockfiles,
|
|
104
104
|
registry_config_files,
|
|
105
105
|
credentials
|
|
@@ -14,7 +14,7 @@ require "dependabot/npm_and_yarn/native_helpers"
|
|
|
14
14
|
require "dependabot/npm_and_yarn/package/registry_finder"
|
|
15
15
|
require "dependabot/shared_helpers"
|
|
16
16
|
|
|
17
|
-
# rubocop:disable Metrics/ClassLength
|
|
17
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
18
18
|
module Dependabot
|
|
19
19
|
module NpmAndYarn
|
|
20
20
|
class FileUpdater < Dependabot::FileUpdaters::Base
|
|
@@ -1426,4 +1426,3 @@ module Dependabot
|
|
|
1426
1426
|
end
|
|
1427
1427
|
end
|
|
1428
1428
|
end
|
|
1429
|
-
# rubocop:enable Metrics/ClassLength
|
|
@@ -114,7 +114,7 @@ module Dependabot
|
|
|
114
114
|
PNPM_TRUST_LOCKFILE_VERSION = "11.3"
|
|
115
115
|
# pnpm-workspace.yaml settings that govern verification of loaded lockfile
|
|
116
116
|
# entries, and so must not be overridden by `trustLockfile=true`.
|
|
117
|
-
LOCKFILE_VERIFICATION_SETTINGS =
|
|
117
|
+
LOCKFILE_VERIFICATION_SETTINGS = %w(trustLockfile trustPolicy).freeze
|
|
118
118
|
|
|
119
119
|
UNREACHABLE_GIT = %r{Command failed with exit code 128: git ls-remote (?<url>.*github\.com/[^/]+/[^ ]+)}
|
|
120
120
|
UNREACHABLE_GIT_V8 = %r{ERR_PNPM_FETCH_404[ [^:print]]+GET (?<url>https://codeload\.github\.com/[^/]+/[^/]+)/}
|
|
@@ -13,7 +13,7 @@ require "dependabot/npm_and_yarn/native_helpers"
|
|
|
13
13
|
require "dependabot/shared_helpers"
|
|
14
14
|
require "dependabot/errors"
|
|
15
15
|
|
|
16
|
-
# rubocop:disable Metrics/ClassLength
|
|
16
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
17
17
|
module Dependabot
|
|
18
18
|
module NpmAndYarn
|
|
19
19
|
class FileUpdater < Dependabot::FileUpdaters::Base
|
|
@@ -829,7 +829,7 @@ module Dependabot
|
|
|
829
829
|
yarnrc_global_registry =
|
|
830
830
|
T.must(T.must(yarnrc_file).content)
|
|
831
831
|
.lines.find { |line| line.match?(regex) }
|
|
832
|
-
|
|
832
|
+
&.match(regex)
|
|
833
833
|
&.named_captures
|
|
834
834
|
&.fetch("registry")
|
|
835
835
|
|
|
@@ -967,7 +967,7 @@ module Dependabot
|
|
|
967
967
|
"[#{code}]: #{error_message}"
|
|
968
968
|
end
|
|
969
969
|
|
|
970
|
-
raise
|
|
970
|
+
raise create_error(handler, modified_error_message, error, params)
|
|
971
971
|
end
|
|
972
972
|
end
|
|
973
973
|
|
|
@@ -1107,4 +1107,3 @@ module Dependabot
|
|
|
1107
1107
|
end
|
|
1108
1108
|
end
|
|
1109
1109
|
end
|
|
1110
|
-
# rubocop:enable Metrics/ClassLength
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "dependabot/shared_helpers"
|
|
@@ -11,6 +11,7 @@ require "dependabot/npm_and_yarn/yarn_package_manager"
|
|
|
11
11
|
require "dependabot/npm_and_yarn/pnpm_package_manager"
|
|
12
12
|
require "dependabot/npm_and_yarn/language"
|
|
13
13
|
require "dependabot/npm_and_yarn/constraint_helper"
|
|
14
|
+
require "dependabot/package/npm_package_manager_config"
|
|
14
15
|
|
|
15
16
|
module Dependabot
|
|
16
17
|
module NpmAndYarn
|
|
@@ -82,14 +83,13 @@ module Dependabot
|
|
|
82
83
|
sig do
|
|
83
84
|
params(
|
|
84
85
|
lockfiles: T::Hash[Symbol, T.nilable(Dependabot::DependencyFile)],
|
|
85
|
-
|
|
86
|
+
config: Dependabot::Package::NpmPackageManagerConfig
|
|
86
87
|
).void
|
|
87
88
|
end
|
|
88
|
-
def initialize(lockfiles,
|
|
89
|
+
def initialize(lockfiles, config)
|
|
89
90
|
@lockfiles = lockfiles
|
|
90
|
-
@
|
|
91
|
-
@
|
|
92
|
-
@engines = T.let(package_json&.fetch(MANIFEST_ENGINES_KEY, {}), T::Hash[String, T.untyped])
|
|
91
|
+
@manifest_package_manager = T.let(config.package_manager, T.nilable(String))
|
|
92
|
+
@engines = T.let(config.engines || {}, T::Hash[String, String])
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
# Returns npm, yarn, or pnpm based on the lockfiles, package.json, and engines
|
|
@@ -130,8 +130,6 @@ module Dependabot
|
|
|
130
130
|
|
|
131
131
|
sig { returns(T.nilable(String)) }
|
|
132
132
|
def name_from_engines
|
|
133
|
-
return unless @engines.is_a?(Hash)
|
|
134
|
-
|
|
135
133
|
PACKAGE_MANAGER_CLASSES.each_key do |manager_name|
|
|
136
134
|
return manager_name if @engines[manager_name]
|
|
137
135
|
end
|
|
@@ -145,22 +143,21 @@ module Dependabot
|
|
|
145
143
|
|
|
146
144
|
sig do
|
|
147
145
|
params(
|
|
148
|
-
|
|
146
|
+
config: Dependabot::Package::NpmPackageManagerConfig,
|
|
149
147
|
lockfiles: T::Hash[Symbol, T.nilable(Dependabot::DependencyFile)],
|
|
150
148
|
registry_config_files: T::Hash[Symbol, T.nilable(Dependabot::DependencyFile)],
|
|
151
149
|
credentials: T.nilable(T::Array[Dependabot::Credential])
|
|
152
150
|
).void
|
|
153
151
|
end
|
|
154
|
-
def initialize(
|
|
155
|
-
@package_json = package_json
|
|
152
|
+
def initialize(config, lockfiles, registry_config_files, credentials)
|
|
156
153
|
@lockfiles = lockfiles
|
|
157
154
|
@registry_helper = T.let(
|
|
158
155
|
RegistryHelper.new(registry_config_files, credentials),
|
|
159
156
|
Dependabot::NpmAndYarn::RegistryHelper
|
|
160
157
|
)
|
|
161
|
-
@package_manager_detector = T.let(PackageManagerDetector.new(lockfiles,
|
|
162
|
-
@manifest_package_manager = T.let(
|
|
163
|
-
@engines = T.let(
|
|
158
|
+
@package_manager_detector = T.let(PackageManagerDetector.new(lockfiles, config), PackageManagerDetector)
|
|
159
|
+
@manifest_package_manager = T.let(config.package_manager, T.nilable(String))
|
|
160
|
+
@engines = T.let(config.engines, T.nilable(T::Hash[String, String]))
|
|
164
161
|
|
|
165
162
|
@installed_versions = T.let({}, T::Hash[String, String])
|
|
166
163
|
@registries = T.let({}, T::Hash[String, String])
|
|
@@ -223,9 +220,9 @@ module Dependabot
|
|
|
223
220
|
|
|
224
221
|
sig { params(name: String).returns(String) }
|
|
225
222
|
def raw_engine_constraint(name)
|
|
226
|
-
return "" unless @engines
|
|
223
|
+
return "" unless @engines
|
|
227
224
|
|
|
228
|
-
@engines
|
|
225
|
+
@engines.fetch(name, "").strip
|
|
229
226
|
end
|
|
230
227
|
|
|
231
228
|
sig { params(raw_constraint: String).returns(T.nilable(T::Array[T::Array[String]])) }
|
|
@@ -424,7 +421,7 @@ module Dependabot
|
|
|
424
421
|
|
|
425
422
|
# If we can't get the installed version or the version is invalid, we need to get inferred version
|
|
426
423
|
unless @installed_versions[name]&.match?(PACKAGE_MANAGER_VERSION_REGEX)
|
|
427
|
-
@installed_versions[name] =
|
|
424
|
+
@installed_versions[name] = T.must(numeric_lockfile_version(name, @lockfiles[name.to_sym])).to_s
|
|
428
425
|
end
|
|
429
426
|
|
|
430
427
|
T.must(@installed_versions[name])
|
|
@@ -472,25 +469,25 @@ module Dependabot
|
|
|
472
469
|
match["version"]
|
|
473
470
|
end
|
|
474
471
|
|
|
475
|
-
sig { params(name: String).returns(T.nilable(
|
|
472
|
+
sig { params(name: String).returns(T.nilable(Integer)) }
|
|
476
473
|
def guessed_version(name)
|
|
477
474
|
lockfile = @lockfiles[name.to_sym]
|
|
478
475
|
return unless lockfile
|
|
479
476
|
|
|
480
|
-
version =
|
|
477
|
+
version = numeric_lockfile_version(name, lockfile)
|
|
481
478
|
|
|
482
479
|
Dependabot.logger.info("Guessed version info \"#{name}\" : \"#{version}\"")
|
|
483
480
|
|
|
484
481
|
version
|
|
485
482
|
end
|
|
486
483
|
|
|
487
|
-
sig { params(name:
|
|
484
|
+
sig { params(name: String).returns(T.nilable(String)) }
|
|
488
485
|
def check_engine_version(name)
|
|
489
|
-
return
|
|
486
|
+
return unless @engines
|
|
490
487
|
|
|
491
488
|
version_selector = VersionSelector.new
|
|
492
489
|
|
|
493
|
-
engine_versions = version_selector.setup(@
|
|
490
|
+
engine_versions = version_selector.setup(@engines, name, dependabot_versions(name))
|
|
494
491
|
|
|
495
492
|
return if engine_versions.empty?
|
|
496
493
|
|
|
@@ -510,6 +507,23 @@ module Dependabot
|
|
|
510
507
|
PNPMPackageManager::SUPPORTED_VERSIONS
|
|
511
508
|
end
|
|
512
509
|
end
|
|
510
|
+
|
|
511
|
+
sig do
|
|
512
|
+
params(
|
|
513
|
+
name: String,
|
|
514
|
+
lockfile: T.nilable(Dependabot::DependencyFile)
|
|
515
|
+
).returns(T.nilable(Integer))
|
|
516
|
+
end
|
|
517
|
+
def numeric_lockfile_version(name, lockfile)
|
|
518
|
+
case name
|
|
519
|
+
when NpmPackageManager::NAME
|
|
520
|
+
Helpers.npm_version_numeric(lockfile)
|
|
521
|
+
when YarnPackageManager::NAME
|
|
522
|
+
Helpers.yarn_version_numeric(lockfile)
|
|
523
|
+
when PNPMPackageManager::NAME
|
|
524
|
+
Helpers.pnpm_version_numeric(lockfile)
|
|
525
|
+
end
|
|
526
|
+
end
|
|
513
527
|
end
|
|
514
528
|
end
|
|
515
529
|
end
|
|
@@ -18,7 +18,7 @@ require "dependabot/npm_and_yarn/update_checker"
|
|
|
18
18
|
require "dependabot/npm_and_yarn/version"
|
|
19
19
|
require "dependabot/shared_helpers"
|
|
20
20
|
|
|
21
|
-
# rubocop:disable Metrics/ClassLength
|
|
21
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
22
22
|
module Dependabot
|
|
23
23
|
module NpmAndYarn
|
|
24
24
|
class UpdateChecker
|
|
@@ -1085,4 +1085,3 @@ module Dependabot
|
|
|
1085
1085
|
end
|
|
1086
1086
|
end
|
|
1087
1087
|
end
|
|
1088
|
-
# rubocop:enable Metrics/ClassLength
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "dependabot/shared_helpers"
|
|
@@ -10,29 +10,27 @@ module Dependabot
|
|
|
10
10
|
extend T::Sig
|
|
11
11
|
extend T::Helpers
|
|
12
12
|
|
|
13
|
-
# Sets up engine
|
|
13
|
+
# Sets up the requested engine version from the manifest engines.
|
|
14
14
|
#
|
|
15
|
-
# @param
|
|
15
|
+
# @param engine_versions [Hash] The manifest engine constraints.
|
|
16
16
|
# @param name [String] The engine name to match.
|
|
17
17
|
# @return [Hash] A hash with selected versions, if found.
|
|
18
18
|
sig do
|
|
19
19
|
params(
|
|
20
|
-
|
|
20
|
+
engine_versions: T.nilable(T::Hash[String, String]),
|
|
21
21
|
name: String,
|
|
22
22
|
dependabot_versions: T.nilable(T::Array[Dependabot::Version])
|
|
23
23
|
)
|
|
24
|
-
.returns(T::Hash[
|
|
24
|
+
.returns(T::Hash[String, T.nilable(String)])
|
|
25
25
|
end
|
|
26
|
-
def setup(
|
|
27
|
-
engine_versions = manifest_json["engines"]
|
|
28
|
-
|
|
26
|
+
def setup(engine_versions, name, dependabot_versions = nil)
|
|
29
27
|
# Return an empty hash if no engine versions are specified
|
|
30
28
|
return {} if engine_versions.nil?
|
|
31
29
|
|
|
32
|
-
versions = {}
|
|
30
|
+
versions = T.let({}, T::Hash[String, T.nilable(String)])
|
|
33
31
|
|
|
34
32
|
engine_versions.each do |engine, value|
|
|
35
|
-
next unless engine
|
|
33
|
+
next unless engine == name
|
|
36
34
|
|
|
37
35
|
versions[name] = ConstraintHelper.find_highest_version_from_constraint_expression(
|
|
38
36
|
value, dependabot_versions
|
|
@@ -35,7 +35,7 @@ ErrorHandler = T.type_alias do
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
module Dependabot
|
|
38
|
-
# rubocop:disable Metrics/ModuleLength
|
|
38
|
+
# rubocop:disable-next Metrics/ModuleLength
|
|
39
39
|
module NpmAndYarn
|
|
40
40
|
NODE_VERSION_NOT_SATISFY_REGEX = /The current Node version (?<current_version>v?\d+\.\d+\.\d+) does not satisfy the required version (?<required_version>v?\d+\.\d+\.\d+)\./ # rubocop:disable Layout/LineLength
|
|
41
41
|
|
|
@@ -660,5 +660,4 @@ module Dependabot
|
|
|
660
660
|
}]
|
|
661
661
|
)
|
|
662
662
|
end
|
|
663
|
-
# rubocop:enable Metrics/ModuleLength
|
|
664
663
|
end
|
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.
|
|
4
|
+
version: 0.395.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.395.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.395.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: debug
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,19 +178,19 @@ dependencies:
|
|
|
178
178
|
- !ruby/object:Gem::Version
|
|
179
179
|
version: '1.1'
|
|
180
180
|
- !ruby/object:Gem::Dependency
|
|
181
|
-
name:
|
|
181
|
+
name: turbo_tests2
|
|
182
182
|
requirement: !ruby/object:Gem::Requirement
|
|
183
183
|
requirements:
|
|
184
184
|
- - "~>"
|
|
185
185
|
- !ruby/object:Gem::Version
|
|
186
|
-
version:
|
|
186
|
+
version: 3.2.7
|
|
187
187
|
type: :development
|
|
188
188
|
prerelease: false
|
|
189
189
|
version_requirements: !ruby/object:Gem::Requirement
|
|
190
190
|
requirements:
|
|
191
191
|
- - "~>"
|
|
192
192
|
- !ruby/object:Gem::Version
|
|
193
|
-
version:
|
|
193
|
+
version: 3.2.7
|
|
194
194
|
- !ruby/object:Gem::Dependency
|
|
195
195
|
name: vcr
|
|
196
196
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -281,6 +281,8 @@ files:
|
|
|
281
281
|
- helpers/test/npm/fixtures/vulnerability-auditor/locked-transitive-dependency/package.json
|
|
282
282
|
- helpers/test/npm/fixtures/vulnerability-auditor/outdated-package-lock/package-lock.json
|
|
283
283
|
- helpers/test/npm/fixtures/vulnerability-auditor/outdated-package-lock/package.json
|
|
284
|
+
- helpers/test/npm/fixtures/vulnerability-auditor/range-order-lower-major-only/package-lock.json
|
|
285
|
+
- helpers/test/npm/fixtures/vulnerability-auditor/range-order-lower-major-only/package.json
|
|
284
286
|
- helpers/test/npm/fixtures/vulnerability-auditor/simple/package-lock.json
|
|
285
287
|
- helpers/test/npm/fixtures/vulnerability-auditor/simple/package.json
|
|
286
288
|
- helpers/test/npm/fixtures/vulnerability-auditor/update-needed-across-two-versions/package-lock.json
|
|
@@ -388,7 +390,7 @@ licenses:
|
|
|
388
390
|
- MIT
|
|
389
391
|
metadata:
|
|
390
392
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
391
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
393
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.395.0
|
|
392
394
|
rdoc_options: []
|
|
393
395
|
require_paths:
|
|
394
396
|
- lib
|