@@ -42,19 +42,22 @@ export class NpmInstallationManager implements INpmInstallationManager {
42
42
return path . join ( this . getCacheRootPath ( ) , packageName , version , "package" ) ;
43
43
}
44
44
45
- public addToCache ( packageName : string , version : string ) : IFuture < void > {
45
+ public addToCache ( packageName : string , version : string ) : IFuture < any > {
46
46
return ( ( ) => {
47
47
let cachedPackagePath = this . getCachedPackagePath ( packageName , version ) ;
48
+ let cachedPackageData : any ;
48
49
if ( ! this . $fs . exists ( cachedPackagePath ) . wait ( ) || ! this . $fs . exists ( path . join ( cachedPackagePath , "framework" ) ) . wait ( ) ) {
49
- this . addToCacheCore ( packageName , version ) . wait ( ) ;
50
+ cachedPackageData = this . addToCacheCore ( packageName , version ) . wait ( ) ;
50
51
}
51
-
52
- if ( ! this . isShasumOfPackageCorrect ( packageName , version ) . wait ( ) ) {
52
+ let realVersion = ( cachedPackageData && cachedPackageData . version ) || version ;
53
+ if ( ! this . isShasumOfPackageCorrect ( packageName , realVersion ) . wait ( ) ) {
53
54
// In some cases the package is not fully downloaded and there are missing directories
54
55
// Try removing the old package and add the real one to cache again
55
- this . addCleanCopyToCache ( packageName , version ) . wait ( ) ;
56
+ cachedPackageData = this . addCleanCopyToCache ( packageName , version ) . wait ( ) ;
56
57
}
57
- } ) . future < void > ( ) ( ) ;
58
+
59
+ return cachedPackageData ;
60
+ } ) . future < any > ( ) ( ) ;
58
61
}
59
62
60
63
public cacheUnpack ( packageName : string , version : string , unpackTarget ?: string ) : IFuture < void > {
@@ -130,21 +133,24 @@ export class NpmInstallationManager implements INpmInstallationManager {
130
133
let packagePath = path . join ( this . getCacheRootPath ( ) , packageName , version ) ;
131
134
this . $logger . trace ( `Deleting: ${ packagePath } .` ) ;
132
135
this . $fs . deleteDirectory ( packagePath ) . wait ( ) ;
133
- this . addToCacheCore ( packageName , version ) . wait ( ) ;
134
- if ( ! this . isShasumOfPackageCorrect ( packageName , version ) . wait ( ) ) {
135
- this . $errors . failWithoutHelp ( `Unable to add package ${ packageName } with version ${ version } to npm cache. Try cleaning your cache and execute the command again.` ) ;
136
+ let cachedPackageData = this . addToCacheCore ( packageName , version ) . wait ( ) ;
137
+ if ( ! this . isShasumOfPackageCorrect ( packageName , cachedPackageData . version ) . wait ( ) ) {
138
+ this . $errors . failWithoutHelp ( `Unable to add package ${ packageName } with version ${ cachedPackageData . version } to npm cache. Try cleaning your cache and execute the command again.` ) ;
136
139
}
140
+
141
+ return cachedPackageData ;
137
142
} ) . future < void > ( ) ( ) ;
138
143
}
139
144
140
- private addToCacheCore ( packageName : string , version : string ) : IFuture < void > {
145
+ private addToCacheCore ( packageName : string , version : string ) : IFuture < any > {
141
146
return ( ( ) => {
142
- this . $npm . cache ( packageName , version ) . wait ( ) ;
143
- let packagePath = path . join ( this . getCacheRootPath ( ) , packageName , version , "package" ) ;
147
+ let cachedPackageData = this . $npm . cache ( packageName , version ) . wait ( ) ;
148
+ let packagePath = path . join ( this . getCacheRootPath ( ) , packageName , cachedPackageData . version , "package" ) ;
144
149
if ( ! this . isPackageUnpacked ( packagePath , packageName ) . wait ( ) ) {
145
- this . cacheUnpack ( packageName , version ) . wait ( ) ;
150
+ this . cacheUnpack ( packageName , cachedPackageData . version ) . wait ( ) ;
146
151
}
147
- } ) . future < void > ( ) ( ) ;
152
+ return cachedPackageData ;
153
+ } ) . future < any > ( ) ( ) ;
148
154
}
149
155
150
156
private isShasumOfPackageCorrect ( packageName : string , version : string ) : IFuture < boolean > {
@@ -185,9 +191,9 @@ export class NpmInstallationManager implements INpmInstallationManager {
185
191
return path . join ( pathToNodeModules , folders [ 0 ] ) ;
186
192
} else {
187
193
version = version || this . getLatestCompatibleVersion ( packageName ) . wait ( ) ;
188
- let packagePath = this . getCachedPackagePath ( packageName , version ) ;
189
- this . addToCache ( packageName , version ) . wait ( ) ;
190
- return packagePath ;
194
+ let cachedData = this . addToCache ( packageName , version ) . wait ( ) ;
195
+ let packageVersion = ( cachedData && cachedData . version ) || version ;
196
+ return this . getCachedPackagePath ( packageName , packageVersion ) ;
191
197
}
192
198
} ) . future < string > ( ) ( ) ;
193
199
}
0 commit comments