Skip to content

Commit 516a259

Browse files
feat(report): For a given unmet peer dependency, show every related peer dependency, even if currently met
1 parent c34735a commit 516a259

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

src/checkPeerDependencies.ts

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,24 @@ function getAllNestedPeerDependencies(options: CliOptions): Dependency[] {
2323

2424
let recursiveCount = 0;
2525

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}`;
3930

40-
const reportPeerDependencyStatusByDependee = (dep: Dependency, options: CliOptions) => {
4131
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)`);
4434
}
4535
} 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)`);
4737
} 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)`);
4939
} 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)`);
5141
}
5242
};
5343

54-
5544
function findSolutions(problems: Dependency[], allNestedPeerDependencies: Dependency[]) {
5645
console.log();
5746
console.log('Searching for solutions...');
@@ -105,17 +94,25 @@ function installPeerDependencies(commandLines: any[], options: CliOptions, nosol
10594
return;
10695
}
10796

108-
export function checkPeerDependencies(packageManager: string, options: CliOptions) {
109-
const allNestedPeerDependencies = getAllNestedPeerDependencies(options);
110-
97+
function report(options: CliOptions, allNestedPeerDependencies: Dependency[]) {
11198
if (options.orderBy === 'depender') {
11299
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') {
115101
allNestedPeerDependencies.sort((a, b) => `${a.name}${a.depender}`.localeCompare(`${b.name}${b.depender}`));
116-
allNestedPeerDependencies.forEach(dep => reportPeerDependencyStatusByDependee(dep, options));
117102
}
118103

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+
119116
const problems = allNestedPeerDependencies.filter(dep => !dep.semverSatisfies && !dep.isYalc);
120117

121118
if (!problems.length) {
@@ -135,13 +132,22 @@ export function checkPeerDependencies(packageManager: string, options: CliOption
135132
const commandLines = getCommandLines(packageManager, resolutionsWithSolutions);
136133

137134
if (commandLines.length) {
135+
console.log();
138136
console.log(`Install peerDependencies using ${commandLines.length > 1 ? 'these commands:' : 'this command'}:`);
139137
console.log();
140138
commandLines.forEach(command => console.log(command));
141139
console.log();
142140
}
143141
} 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();
145151
}
146152

147153
process.exit(1);

0 commit comments

Comments
 (0)