@@ -18,7 +18,6 @@ export class NodePackageManager implements INodePackageManager {
18
18
19
19
constructor ( private $logger : ILogger ,
20
20
private $errors : IErrors ,
21
- private $httpClient : Server . IHttpClient ,
22
21
private $fs : IFileSystem ,
23
22
private $lockfile : ILockFile ) {
24
23
this . versionsCache = { } ;
@@ -73,11 +72,20 @@ export class NodePackageManager implements INodePackageManager {
73
72
}
74
73
75
74
public getLatestVersion ( packageName : string ) : IFuture < string > {
76
- return ( ( ) => {
77
- var versions = this . getAvailableVersions ( packageName ) . wait ( ) ;
78
- versions = _ . sortBy ( versions , ( ver : string ) => { return ver ; } ) ;
79
- return versions . reverse ( ) [ 0 ] ;
80
- } ) . future < string > ( ) ( ) ;
75
+ var future = new Future < string > ( ) ;
76
+
77
+ npm . commands [ "view" ] ( [ packageName , "dist-tags" ] , [ false ] , ( err : any , data : any ) => { // [false] - silent
78
+ if ( err ) {
79
+ future . throw ( err ) ;
80
+ } else {
81
+ var latestVersion = _ . first ( _ . keys ( data ) ) ;
82
+ this . $logger . trace ( "Using version %s. " , latestVersion ) ;
83
+
84
+ future . return ( latestVersion ) ;
85
+ }
86
+ } ) ;
87
+
88
+ return future ;
81
89
}
82
90
83
91
public getCachedPackagePath ( packageName : string , version : string ) : string {
@@ -166,18 +174,5 @@ export class NodePackageManager implements INodePackageManager {
166
174
} ) ;
167
175
return future ;
168
176
}
169
-
170
- private getAvailableVersions ( packageName : string ) : IFuture < string [ ] > {
171
- return ( ( ) => {
172
- if ( ! this . versionsCache [ packageName ] ) {
173
- var url = NodePackageManager . NPM_REGISTRY_URL + packageName ;
174
- var response = this . $httpClient . httpRequest ( url ) . wait ( ) . body ;
175
- var json = JSON . parse ( response ) ;
176
- this . versionsCache [ packageName ] = _ . keys ( json . versions ) ;
177
- }
178
-
179
- return this . versionsCache [ packageName ] ;
180
- } ) . future < string [ ] > ( ) ( ) ;
181
- }
182
177
}
183
178
$injector . register ( "npm" , NodePackageManager ) ;
0 commit comments