Skip to content

Commit 35604cc

Browse files
committed
Use correct latest crates.io version
For download count and license, get the correct latest version from the versions array. Fix #9453
1 parent 7d966ab commit 35604cc

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

services/crates/crates-downloads.service.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ export default class CratesDownloads extends BaseCratesService {
6868
transform({ variant, json }) {
6969
switch (variant) {
7070
case 'dv':
71-
return json.crate ? json.versions[0].downloads : json.version.downloads
71+
let lastVer;
72+
if (json.crate) {
73+
const lastVerNum = json.crate.max_stable_version ? json.crate.max_stable_version : json.crate.max_version;
74+
lastVer = json.versions.find(ver => ver.num === lastVerNum) || json.versions[0]
75+
} else {
76+
lastVer = json.version
77+
}
78+
return lastVer.downloads
7279
case 'dr':
7380
return json.crate.recent_downloads || 0
7481
default:

services/crates/crates-license.service.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,22 @@ export default class CratesLicense extends BaseCratesService {
2828
return { message }
2929
}
3030

31-
static transform({ errors, version, versions }) {
31+
static transform({ errors, version, versions, crate }) {
3232
// crates.io returns a 200 response with an errors object in
3333
// error scenarios, e.g. https://crates.io/api/v1/crates/libc/0.1
3434
if (errors) {
3535
throw new InvalidResponse({ prettyMessage: errors[0].detail })
3636
}
3737

38-
const license = version ? version.license : versions[0].license
38+
let license;
39+
if (version) {
40+
license = version.license;
41+
} else {
42+
const lastVerNum = crate.max_stable_version ? crate.max_stable_version : crate.max_version;
43+
const lastVer = versions.find(ver => ver.num === lastVerNum) || versions[0]
44+
license = lastVer.license;
45+
}
46+
3947
if (!license) {
4048
throw new InvalidResponse({ prettyMessage: 'invalid null license' })
4149
}

0 commit comments

Comments
 (0)