@@ -14,18 +14,23 @@ export default class VersionRoute extends Route {
14
14
async model ( { range } , transition ) {
15
15
let crate = this . modelFor ( 'crate' ) ;
16
16
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 ) ;
20
21
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 } ) ;
29
34
}
30
35
}
31
36
}
0 commit comments