@@ -14,18 +14,23 @@ export default class VersionRoute extends Route {
1414 async model ( { range } , transition ) {
1515 let crate = this . modelFor ( 'crate' ) ;
1616
17- let versions = await crate . get ( 'versions' ) ;
18- let allVersionNums = versions . map ( it => it . num ) ;
19- let unyankedVersionNums = versions . filter ( it => ! it . yanked ) . map ( it => it . num ) ;
17+ try {
18+ let versions = await crate . hasMany ( 'versions' ) . load ( ) ;
19+ let allVersionNums = versions . map ( it => it . num ) ;
20+ let unyankedVersionNums = versions . filter ( it => ! it . yanked ) . map ( it => it . num ) ;
2021
21- let npmRange = cargoRangeToNpm ( range ) ;
22- // find a version that matches the specified range
23- let versionNum = maxSatisfying ( unyankedVersionNums , npmRange ) ?? maxSatisfying ( allVersionNums , npmRange ) ;
24- if ( versionNum ) {
25- this . router . replaceWith ( 'crate.version' , versionNum ) ;
26- } else {
27- let title = `${ crate . name } : No matching version found for ${ range } ` ;
28- this . router . replaceWith ( 'catch-all' , { transition, title } ) ;
22+ let npmRange = cargoRangeToNpm ( range ) ;
23+ // find a version that matches the specified range
24+ let versionNum = maxSatisfying ( unyankedVersionNums , npmRange ) ?? maxSatisfying ( allVersionNums , npmRange ) ;
25+ if ( versionNum ) {
26+ this . router . replaceWith ( 'crate.version' , versionNum ) ;
27+ } else {
28+ let title = `${ crate . name } : No matching version found for ${ range } ` ;
29+ this . router . replaceWith ( 'catch-all' , { transition, title } ) ;
30+ }
31+ } catch ( error ) {
32+ let title = `${ crate . name } : Failed to load version data` ;
33+ this . router . replaceWith ( 'catch-all' , { transition, error, title, tryAgain : true } ) ;
2934 }
3035 }
3136}
0 commit comments