diff --git a/services/crates/crates-downloads.service.js b/services/crates/crates-downloads.service.js index a504f00d3a1b3..e31a82c6e04de 100644 --- a/services/crates/crates-downloads.service.js +++ b/services/crates/crates-downloads.service.js @@ -68,7 +68,14 @@ export default class CratesDownloads extends BaseCratesService { transform({ variant, json }) { switch (variant) { case 'dv': - return json.crate ? json.versions[0].downloads : json.version.downloads + let lastVer; + if (json.crate) { + const lastVerNum = json.crate.max_stable_version ? json.crate.max_stable_version : json.crate.max_version; + lastVer = json.versions.find(ver => ver.num === lastVerNum) || json.versions[0] + } else { + lastVer = json.version + } + return lastVer.downloads case 'dr': return json.crate.recent_downloads || 0 default: diff --git a/services/crates/crates-license.service.js b/services/crates/crates-license.service.js index 562f44841cabe..e9dae408a958f 100644 --- a/services/crates/crates-license.service.js +++ b/services/crates/crates-license.service.js @@ -28,14 +28,22 @@ export default class CratesLicense extends BaseCratesService { return { message } } - static transform({ errors, version, versions }) { + static transform({ errors, version, versions, crate }) { // crates.io returns a 200 response with an errors object in // error scenarios, e.g. https://crates.io/api/v1/crates/libc/0.1 if (errors) { throw new InvalidResponse({ prettyMessage: errors[0].detail }) } - const license = version ? version.license : versions[0].license + let license; + if (version) { + license = version.license; + } else { + const lastVerNum = crate.max_stable_version ? crate.max_stable_version : crate.max_version; + const lastVer = versions.find(ver => ver.num === lastVerNum) || versions[0] + license = lastVer.license; + } + if (!license) { throw new InvalidResponse({ prettyMessage: 'invalid null license' }) }