@@ -23,35 +23,24 @@ function getAllNestedPeerDependencies(options: CliOptions): Dependency[] {
23
23
24
24
let recursiveCount = 0 ;
25
25
26
- const reportPeerDependencyStatusByDepender = ( dep : Dependency , options : CliOptions ) => {
27
- if ( dep . semverSatisfies ) {
28
- if ( options . verbose ) {
29
- console . log ( ` ✅ ${ dep . depender } @${ dep . dependerVersion } requires ${ dep . name } ${ dep . version } (${ dep . installedVersion } is installed)` ) ;
30
- }
31
- } else if ( dep . isYalc ) {
32
- console . log ( ` ☑️ ${ dep . depender } @${ dep . dependerVersion } requires ${ dep . name } ${ dep . version } (${ dep . installedVersion } is installed via yalc)` ) ;
33
- } else if ( dep . installedVersion ) {
34
- console . log ( ` ❌ ${ dep . depender } @${ dep . dependerVersion } requires ${ dep . name } ${ dep . version } (${ dep . installedVersion } is installed)` ) ;
35
- } else {
36
- console . log ( ` ❌ ${ dep . depender } @${ dep . dependerVersion } requires ${ dep . name } ${ dep . version } (${ dep . name } is not installed)` ) ;
37
- }
38
- } ;
26
+ const reportPeerDependencyStatus = ( dep : Dependency , byDepender : boolean , force : boolean ) => {
27
+ const message = byDepender ?
28
+ `${ dep . depender } @${ dep . dependerVersion } requires ${ dep . name } ${ dep . version } ` :
29
+ `${ dep . name } ${ dep . version } is required by ${ dep . depender } @${ dep . dependerVersion } ` ;
39
30
40
- const reportPeerDependencyStatusByDependee = ( dep : Dependency , options : CliOptions ) => {
41
31
if ( dep . semverSatisfies ) {
42
- if ( options . verbose ) {
43
- console . log ( ` ✅ ${ dep . name } ${ dep . version } is required by ${ dep . depender } @ ${ dep . dependerVersion } (${ dep . installedVersion } is installed)` ) ;
32
+ if ( force ) {
33
+ console . log ( ` ✅ ${ message } (${ dep . installedVersion } is installed)` ) ;
44
34
}
45
35
} else if ( dep . isYalc ) {
46
- console . log ( ` ☑️ ${ dep . name } ${ dep . version } is required by ${ dep . depender } @ ${ dep . dependerVersion } (${ dep . installedVersion } is installed via yalc)` ) ;
36
+ console . log ( ` ☑️ ${ message } (${ dep . installedVersion } is installed via yalc)` ) ;
47
37
} else if ( dep . installedVersion ) {
48
- console . log ( ` ❌ ${ dep . name } ${ dep . version } is required by ${ dep . depender } @ ${ dep . dependerVersion } (${ dep . installedVersion } is installed)` ) ;
38
+ console . log ( ` ❌ ${ message } ) (${ dep . installedVersion } is installed)` ) ;
49
39
} else {
50
- console . log ( ` ❌ ${ dep . name } ${ dep . version } is required by ${ dep . depender } @ ${ dep . dependerVersion } (${ dep . name } is not installed)` ) ;
40
+ console . log ( ` ❌ ${ message } (${ dep . name } is not installed)` ) ;
51
41
}
52
42
} ;
53
43
54
-
55
44
function findSolutions ( problems : Dependency [ ] , allNestedPeerDependencies : Dependency [ ] ) {
56
45
console . log ( ) ;
57
46
console . log ( 'Searching for solutions...' ) ;
@@ -105,17 +94,25 @@ function installPeerDependencies(commandLines: any[], options: CliOptions, nosol
105
94
return ;
106
95
}
107
96
108
- export function checkPeerDependencies ( packageManager : string , options : CliOptions ) {
109
- const allNestedPeerDependencies = getAllNestedPeerDependencies ( options ) ;
110
-
97
+ function report ( options : CliOptions , allNestedPeerDependencies : Dependency [ ] ) {
111
98
if ( options . orderBy === 'depender' ) {
112
99
allNestedPeerDependencies . sort ( ( a , b ) => `${ a . depender } ${ a . name } ` . localeCompare ( `${ b . depender } ${ b . name } ` ) ) ;
113
- allNestedPeerDependencies . forEach ( dep => reportPeerDependencyStatusByDepender ( dep , options ) ) ;
114
- } else if ( options . orderBy === 'dependee' ) {
100
+ } else if ( options . orderBy == 'dependee' ) {
115
101
allNestedPeerDependencies . sort ( ( a , b ) => `${ a . name } ${ a . depender } ` . localeCompare ( `${ b . name } ${ b . depender } ` ) ) ;
116
- allNestedPeerDependencies . forEach ( dep => reportPeerDependencyStatusByDependee ( dep , options ) ) ;
117
102
}
118
103
104
+ allNestedPeerDependencies . forEach ( dep => {
105
+ const isUnsatisfied = ( dep : Dependency ) => ! dep . semverSatisfies && ! dep . isYalc ;
106
+ const relatedPeerDeps = allNestedPeerDependencies . filter ( other => other . name === dep . name && other !== dep ) ;
107
+ const force = options . verbose || relatedPeerDeps . some ( isUnsatisfied ) ;
108
+ reportPeerDependencyStatus ( dep , options . orderBy === 'depender' , force ) ;
109
+ } ) ;
110
+ }
111
+
112
+ export function checkPeerDependencies ( packageManager : string , options : CliOptions ) {
113
+ const allNestedPeerDependencies = getAllNestedPeerDependencies ( options ) ;
114
+ report ( options , allNestedPeerDependencies ) ;
115
+
119
116
const problems = allNestedPeerDependencies . filter ( dep => ! dep . semverSatisfies && ! dep . isYalc ) ;
120
117
121
118
if ( ! problems . length ) {
@@ -135,13 +132,22 @@ export function checkPeerDependencies(packageManager: string, options: CliOption
135
132
const commandLines = getCommandLines ( packageManager , resolutionsWithSolutions ) ;
136
133
137
134
if ( commandLines . length ) {
135
+ console . log ( ) ;
138
136
console . log ( `Install peerDependencies using ${ commandLines . length > 1 ? 'these commands:' : 'this command' } :` ) ;
139
137
console . log ( ) ;
140
138
commandLines . forEach ( command => console . log ( command ) ) ;
141
139
console . log ( ) ;
142
140
}
143
141
} else {
144
- console . log ( `Install peerDependencies using "npx check-peer-dependencies --install"` ) ;
142
+ console . log ( ) ;
143
+ console . log ( `Search for solutions using this command:` ) ;
144
+ console . log ( ) ;
145
+ console . log ( `npx check-peer-dependencies --findSolutions` ) ;
146
+ console . log ( ) ;
147
+ console . log ( `Install peerDependencies using this command:` ) ;
148
+ console . log ( ) ;
149
+ console . log ( `npx check-peer-dependencies --install` ) ;
150
+ console . log ( ) ;
145
151
}
146
152
147
153
process . exit ( 1 ) ;
0 commit comments