1
1
import { updateJsonInTree } from './ast-utils' ;
2
2
import { readFileSync } from 'fs' ;
3
+ import { checkAndCleanWithSemver } from './version-utils' ;
4
+ import { lt } from 'semver' ;
3
5
4
6
export function updatePackagesInPackageJson (
5
7
migrationFilePath : string ,
@@ -16,13 +18,36 @@ export function updatePackagesInPackageJson(
16
18
const updatedPackages = packageJsonUpdates . packages ;
17
19
return updateJsonInTree ( 'package.json' , json => {
18
20
Object . keys ( updatedPackages ) . forEach ( p => {
21
+ /**
22
+ * Check the updated version against semver
23
+ */
24
+ const cleanUpdatedVersion = checkAndCleanWithSemver (
25
+ p ,
26
+ updatedPackages [ p ] . version
27
+ ) ;
28
+
19
29
if ( json . devDependencies && json . devDependencies [ p ] ) {
20
- json . devDependencies [ p ] = updatedPackages [ p ] . version ;
30
+ const cleanDevVersion = checkAndCleanWithSemver (
31
+ p ,
32
+ json . devDependencies [ p ]
33
+ ) ;
34
+
35
+ if ( lt ( cleanDevVersion , cleanUpdatedVersion ) ) {
36
+ json . devDependencies [ p ] = updatedPackages [ p ] . version ;
37
+ }
21
38
} else if ( json . dependencies && json . dependencies [ p ] ) {
22
- json . dependencies [ p ] = updatedPackages [ p ] . version ;
39
+ const cleanVersion = checkAndCleanWithSemver ( p , json . dependencies [ p ] ) ;
40
+
41
+ if ( lt ( cleanVersion , cleanUpdatedVersion ) ) {
42
+ json . dependencies [ p ] = updatedPackages [ p ] . version ;
43
+ }
23
44
} else if ( updatedPackages [ p ] . alwaysAddToPackageJson ) {
24
- if ( ! json . dependencies ) json . dependencies = { } ;
25
- json . dependencies [ p ] = updatedPackages [ p ] . version ;
45
+ const cleanVersion = checkAndCleanWithSemver ( p , json . dependencies [ p ] ) ;
46
+
47
+ if ( lt ( cleanVersion , cleanUpdatedVersion ) ) {
48
+ if ( ! json . dependencies ) json . dependencies = { } ;
49
+ json . dependencies [ p ] = updatedPackages [ p ] . version ;
50
+ }
26
51
}
27
52
} ) ;
28
53
return json ;
0 commit comments