1
- import { makeCheck , Workspace } from "./utils" ;
1
+ import { makeCheck , Workspace , getHighestExternalRanges } from "./utils" ;
2
2
import { contains } from "sembear" ;
3
3
4
4
type ErrorType = {
@@ -7,31 +7,45 @@ type ErrorType = {
7
7
peerVersion : string ;
8
8
dependencyName : string ;
9
9
devVersion : string | null ;
10
+ idealDevVersion : string ;
10
11
} ;
11
12
12
13
export default makeCheck < ErrorType > ( {
13
14
type : "all" ,
14
- validate : workspace => {
15
+ validate : ( workspace , allWorkspaces ) => {
15
16
let errors : ErrorType [ ] = [ ] ;
16
17
let peerDeps = workspace . config . peerDependencies ;
17
18
let devDeps = workspace . config . devDependencies || { } ;
18
19
if ( peerDeps ) {
19
20
for ( let depName in peerDeps ) {
20
21
if ( ! devDeps [ depName ] ) {
22
+ let highestRanges = getHighestExternalRanges ( allWorkspaces ) ;
23
+ let idealDevVersion = highestRanges . get ( depName ) ;
24
+ if ( idealDevVersion === undefined ) {
25
+ idealDevVersion = peerDeps [ depName ] ;
26
+ }
27
+
21
28
errors . push ( {
22
29
type : "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP" ,
23
30
workspace,
24
31
peerVersion : peerDeps [ depName ] ,
25
32
dependencyName : depName ,
26
- devVersion : null
33
+ devVersion : null ,
34
+ idealDevVersion
27
35
} ) ;
28
36
} else if ( ! contains ( peerDeps [ depName ] , devDeps [ depName ] ) ) {
37
+ let highestRanges = getHighestExternalRanges ( allWorkspaces ) ;
38
+ let idealDevVersion = highestRanges . get ( depName ) ;
39
+ if ( idealDevVersion === undefined ) {
40
+ idealDevVersion = peerDeps [ depName ] ;
41
+ }
29
42
errors . push ( {
30
43
type : "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP" ,
31
44
workspace,
32
45
dependencyName : depName ,
33
46
peerVersion : peerDeps [ depName ] ,
34
- devVersion : devDeps [ depName ]
47
+ devVersion : devDeps [ depName ] ,
48
+ idealDevVersion
35
49
} ) ;
36
50
}
37
51
}
@@ -42,9 +56,8 @@ export default makeCheck<ErrorType>({
42
56
if ( ! error . workspace . config . devDependencies ) {
43
57
error . workspace . config . devDependencies = { } ;
44
58
}
45
- error . workspace . config . devDependencies [
46
- error . dependencyName
47
- ] = error . workspace . config . peerDependencies ! [ error . dependencyName ] ;
59
+ error . workspace . config . devDependencies [ error . dependencyName ] =
60
+ error . idealDevVersion ;
48
61
return { requiresInstall : true } ;
49
62
} ,
50
63
print : error => {
0 commit comments