@@ -5,19 +5,23 @@ import { exec } from 'shelljs';
5
5
import { CliOptions } from './cli' ;
6
6
import { getCommandLines } from './packageManager' ;
7
7
import { Dependency , gatherPeerDependencies , getInstalledVersion } from './packageUtils' ;
8
- import { findPossibleResolutions } from './solution' ;
8
+ import { findPossibleResolutions , Resolution } from './solution' ;
9
9
10
10
function getAllNestedPeerDependencies ( options : CliOptions ) {
11
11
const gatheredDependencies = gatherPeerDependencies ( "." , options ) ;
12
12
13
- const allNestedPeerDependencies : Dependency [ ] = gatheredDependencies . map ( dep => {
13
+ function applySemverInformation ( dep : Dependency ) : Dependency {
14
14
const installedVersion = getInstalledVersion ( dep ) ;
15
15
const semverSatisfies = installedVersion ? semver . satisfies ( installedVersion , dep . version ) : false ;
16
16
const isYalc = ! ! / - [ a - f 0 - 9 ] + - y a l c $ / . exec ( installedVersion ) ;
17
17
18
18
return { ...dep , installedVersion, semverSatisfies, isYalc } ;
19
- } ) ;
20
- return allNestedPeerDependencies ;
19
+ }
20
+
21
+ const allNestedPeerDependencies = gatheredDependencies . peerDependencies . map ( applySemverInformation ) ;
22
+ const allNestedPeerDevDependencies = gatheredDependencies . peerDevDependencies . map ( applySemverInformation ) ;
23
+
24
+ return { allNestedPeerDependencies, allNestedPeerDevDependencies } ;
21
25
}
22
26
23
27
let recursiveCount = 0 ;
@@ -51,16 +55,18 @@ const reportPeerDependencyStatusByDependee = (dep: Dependency, options: CliOptio
51
55
} ;
52
56
53
57
export function checkPeerDependencies ( packageManager : string , options : CliOptions ) {
54
- const allNestedPeerDependencies = getAllNestedPeerDependencies ( options ) ;
58
+ const { allNestedPeerDependencies, allNestedPeerDevDependencies } = getAllNestedPeerDependencies ( options ) ;
59
+ const combinedPeerAndPeerDevDependencies = [ ...allNestedPeerDependencies , ...allNestedPeerDevDependencies ] ;
60
+
55
61
if ( options . orderBy === 'depender' ) {
56
- allNestedPeerDependencies . sort ( ( a , b ) => `${ a . depender } ${ a . name } ` . localeCompare ( `${ b . depender } ${ b . name } ` ) )
57
- allNestedPeerDependencies . forEach ( dep => reportPeerDependencyStatusByDepender ( dep , options ) ) ;
62
+ combinedPeerAndPeerDevDependencies . sort ( ( a , b ) => `${ a . depender } ${ a . name } ` . localeCompare ( `${ b . depender } ${ b . name } ` ) ) ;
63
+ combinedPeerAndPeerDevDependencies . forEach ( dep => reportPeerDependencyStatusByDepender ( dep , options ) ) ;
58
64
} else if ( options . orderBy === 'dependee' ) {
59
- allNestedPeerDependencies . sort ( ( a , b ) => `${ a . name } ${ a . depender } ` . localeCompare ( `${ b . name } ${ b . depender } ` ) )
60
- allNestedPeerDependencies . forEach ( dep => reportPeerDependencyStatusByDependee ( dep , options ) ) ;
65
+ combinedPeerAndPeerDevDependencies . sort ( ( a , b ) => `${ a . name } ${ a . depender } ` . localeCompare ( `${ b . name } ${ b . depender } ` ) ) ;
66
+ combinedPeerAndPeerDevDependencies . forEach ( dep => reportPeerDependencyStatusByDependee ( dep , options ) ) ;
61
67
}
62
68
63
- const problems = allNestedPeerDependencies . filter ( dep => ! dep . semverSatisfies && ! dep . isYalc ) ;
69
+ const problems = combinedPeerAndPeerDevDependencies . filter ( dep => ! dep . semverSatisfies && ! dep . isYalc ) ;
64
70
65
71
if ( ! problems . length ) {
66
72
console . log ( ' ✅ All peer dependencies are met' ) ;
@@ -70,15 +76,14 @@ export function checkPeerDependencies(packageManager: string, options: CliOption
70
76
console . log ( ) ;
71
77
console . log ( 'Searching for solutions...' ) ;
72
78
console . log ( ) ;
73
- const resolutions = findPossibleResolutions ( problems , allNestedPeerDependencies ) ;
74
- const installs = resolutions . filter ( r => r . resolution && r . resolutionType === 'install' ) . map ( r => r . resolution ) ;
75
- const upgrades = resolutions . filter ( r => r . resolution && r . resolutionType === 'upgrade' ) . map ( r => r . resolution ) ;
79
+ const resolutions : Resolution [ ] = findPossibleResolutions ( problems , allNestedPeerDependencies , allNestedPeerDevDependencies ) ;
80
+ const resolutionsWithSolutions = resolutions . filter ( r => r . resolution ) ;
76
81
const nosolution = resolutions . filter ( r => ! r . resolution ) ;
77
82
78
83
nosolution . forEach ( solution => {
79
84
const name = solution . problem . name ;
80
85
const errorPrefix = `Unable to find a version of ${ name } that satisfies the following peerDependencies:` ;
81
- const peerDepRanges = allNestedPeerDependencies . filter ( dep => dep . name === name )
86
+ const peerDepRanges = combinedPeerAndPeerDevDependencies . filter ( dep => dep . name === name )
82
87
. reduce ( ( acc , dep ) => acc . includes ( dep . version ) ? acc : acc . concat ( dep . version ) , [ ] ) ;
83
88
console . error ( ` ❌ ${ errorPrefix } ${ peerDepRanges . join ( " and " ) } ` )
84
89
} ) ;
@@ -88,7 +93,7 @@ export function checkPeerDependencies(packageManager: string, options: CliOption
88
93
console . error ( ) ;
89
94
}
90
95
91
- const commandLines = getCommandLines ( packageManager , installs , upgrades ) ;
96
+ const commandLines = getCommandLines ( packageManager , resolutionsWithSolutions ) ;
92
97
if ( options . install && commandLines . length > 0 ) {
93
98
console . log ( 'Installing peerDependencies...' ) ;
94
99
console . log ( ) ;
@@ -98,7 +103,8 @@ export function checkPeerDependencies(packageManager: string, options: CliOption
98
103
console . log ( ) ;
99
104
} ) ;
100
105
101
- const newUnsatisfiedDeps = getAllNestedPeerDependencies ( options )
106
+ const checkAgain = getAllNestedPeerDependencies ( options ) ;
107
+ const newUnsatisfiedDeps = [ ...checkAgain . allNestedPeerDependencies , ...checkAgain . allNestedPeerDevDependencies ]
102
108
. filter ( dep => ! dep . semverSatisfies )
103
109
. filter ( dep => ! nosolution . some ( x => isSameDep ( x . problem , dep ) ) ) ;
104
110
0 commit comments