33import Future = require( "fibers/future" ) ;
44import npm = require( "npm" ) ;
55import path = require( "path" ) ;
6+ import semver = require( "semver" ) ;
67import shell = require( "shelljs" ) ;
78import helpers = require( "./common/helpers" ) ;
9+ import constants = require( "./constants" ) ;
810
911export class NodePackageManager implements INodePackageManager {
1012 private static NPM_LOAD_FAILED = "Failed to retrieve data from npm. Please try again a little bit later." ;
1113 private static NPM_REGISTRY_URL = "http://registry.npmjs.org/" ;
1214
1315 constructor ( private $logger : ILogger ,
1416 private $errors : IErrors ,
15- private $httpClient : Server . IHttpClient ) { }
17+ private $httpClient : Server . IHttpClient ,
18+ private $staticConfig : IStaticConfig ) { }
1619
1720 public get cache ( ) : string {
1821 return npm . cache ;
@@ -43,7 +46,6 @@ export class NodePackageManager implements INodePackageManager {
4346 }
4447
4548 this . installCore ( pathToSave , packageToInstall ) . wait ( ) ;
46-
4749 } catch ( error ) {
4850 this . $logger . debug ( error ) ;
4951 this . $errors . fail ( NodePackageManager . NPM_LOAD_FAILED ) ;
@@ -54,9 +56,18 @@ export class NodePackageManager implements INodePackageManager {
5456 } ) . future < string > ( ) ( ) ;
5557 }
5658
57- private installCore ( where : string , what : string ) : IFuture < any > {
58- var future = new Future < any > ( ) ;
59- npm . commands [ "install" ] ( where , what , ( err , data ) => {
59+ private installCore ( packageName : string , pathToSave : string ) : IFuture < void > {
60+ var currentVersion = this . $staticConfig . version ;
61+ if ( ! semver . valid ( currentVersion ) ) {
62+ this . $errors . fail ( "Invalid version." ) ;
63+ }
64+
65+ var incrementedVersion = semver . inc ( currentVersion , constants . ReleaseType . MINOR ) ;
66+ packageName = packageName + "@" + "<" + incrementedVersion ;
67+ this . $logger . trace ( "Installing" , packageName ) ;
68+
69+ var future = new Future < void > ( ) ;
70+ npm . commands [ "install" ] ( pathToSave , packageName , ( err , data ) => {
6071 if ( err ) {
6172 future . throw ( err ) ;
6273 } else {
0 commit comments