@@ -19,7 +19,7 @@ import { map, mergeMap, reduce, switchMap } from 'rxjs/operators';
19
19
import * as semver from 'semver' ;
20
20
import { getNpmPackageJson } from './npm' ;
21
21
import { NpmRepositoryPackageJson } from './npm-package-json' ;
22
- import { JsonSchemaForNpmPackageJsonFiles } from './package-json' ;
22
+ import { Dependency , JsonSchemaForNpmPackageJsonFiles } from './package-json' ;
23
23
import { UpdateSchema } from './schema' ;
24
24
25
25
type VersionRange = string & { __VERSION_RANGE : void ; } ;
@@ -220,6 +220,13 @@ function _performUpdate(
220
220
throw new SchematicsException ( 'package.json could not be parsed: ' + e . message ) ;
221
221
}
222
222
223
+ const updateDependency = ( deps : Dependency , name : string , newVersion : string ) => {
224
+ const oldVersion = deps [ name ] ;
225
+ // We only respect caret and tilde ranges on update.
226
+ const execResult = / ^ [ \^ ~ ] / . exec ( oldVersion ) ;
227
+ deps [ name ] = `${ execResult ? execResult [ 0 ] : '' } ${ newVersion } ` ;
228
+ } ;
229
+
223
230
const toInstall = [ ...infoMap . values ( ) ]
224
231
. map ( x => [ x . name , x . target , x . installed ] )
225
232
// tslint:disable-next-line:non-null-operator
@@ -234,7 +241,7 @@ function _performUpdate(
234
241
) ;
235
242
236
243
if ( packageJson . dependencies && packageJson . dependencies [ name ] ) {
237
- packageJson . dependencies [ name ] = target . version ;
244
+ updateDependency ( packageJson . dependencies , name , target . version ) ;
238
245
239
246
if ( packageJson . devDependencies && packageJson . devDependencies [ name ] ) {
240
247
delete packageJson . devDependencies [ name ] ;
@@ -243,13 +250,13 @@ function _performUpdate(
243
250
delete packageJson . peerDependencies [ name ] ;
244
251
}
245
252
} else if ( packageJson . devDependencies && packageJson . devDependencies [ name ] ) {
246
- packageJson . devDependencies [ name ] = target . version ;
253
+ updateDependency ( packageJson . devDependencies , name , target . version ) ;
247
254
248
255
if ( packageJson . peerDependencies && packageJson . peerDependencies [ name ] ) {
249
256
delete packageJson . peerDependencies [ name ] ;
250
257
}
251
258
} else if ( packageJson . peerDependencies && packageJson . peerDependencies [ name ] ) {
252
- packageJson . peerDependencies [ name ] = target . version ;
259
+ updateDependency ( packageJson . peerDependencies , name , target . version ) ;
253
260
} else {
254
261
logger . warn ( `Package ${ name } was not found in dependencies.` ) ;
255
262
}
0 commit comments