@@ -413,7 +413,7 @@ async function getLatestStableVersion(updateUrl) {
413
413
const { name : version } = await res . json ( ) ;
414
414
return version ;
415
415
}
416
- async function getNLS ( resourceUrlTemplate , languageId , version ) {
416
+ async function getSpecificNLS ( resourceUrlTemplate , languageId , version ) {
417
417
const resource = {
418
418
publisher : 'ms-ceintl' ,
419
419
name : `vscode-language-pack-${ languageId } ` ,
@@ -422,9 +422,30 @@ async function getNLS(resourceUrlTemplate, languageId, version) {
422
422
} ;
423
423
const url = resourceUrlTemplate . replace ( / \{ ( [ ^ } ] + ) \} / g, ( _ , key ) => resource [ key ] ) ;
424
424
const res = await ( 0 , node_fetch_1 . default ) ( url ) ;
425
+ if ( res . status !== 200 ) {
426
+ throw new Error ( `[${ res . status } ] Error downloading language pack ${ languageId } @${ version } ` ) ;
427
+ }
425
428
const { contents : result } = await res . json ( ) ;
426
429
return result ;
427
430
}
431
+ function previousVersion ( version ) {
432
+ const [ , major , minor , patch ] = / ^ ( \d + ) \. ( \d + ) \. ( \d + ) $ / . exec ( version ) ;
433
+ return `${ major } .${ parseInt ( minor ) - 1 } .${ patch } ` ;
434
+ }
435
+ async function getNLS ( resourceUrlTemplate , languageId , version ) {
436
+ try {
437
+ return await getSpecificNLS ( resourceUrlTemplate , languageId , version ) ;
438
+ }
439
+ catch ( err ) {
440
+ if ( / \[ 4 0 4 \] / . test ( err . message ) ) {
441
+ console . warn ( `Language pack ${ languageId } @${ version } is missing. Downloading previous version...` ) ;
442
+ return await getSpecificNLS ( resourceUrlTemplate , languageId , previousVersion ( version ) ) ;
443
+ }
444
+ else {
445
+ throw err ;
446
+ }
447
+ }
448
+ }
428
449
async function parsePolicies ( ) {
429
450
const parser = new Parser ( ) ;
430
451
parser . setLanguage ( typescript ) ;
0 commit comments