Skip to content

Commit fc62d5b

Browse files
feat(check_peer_dependencies): when checking peer deps, ignore package if it's been installed using yalc
1 parent 63e6c97 commit fc62d5b

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

check_peer_dependencies.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ const readFile = filename => JSON.parse(fs.readFileSync(filename).toString('utf-
4242
const visitedDeps = [];
4343
const peerDeps = [];
4444

45-
checkInstalledPackage(readFile(PACKAGEJSON));
45+
const rootPackageJson = readFile(PACKAGEJSON);
46+
checkInstalledPackage(rootPackageJson);
4647

4748
function getDependencies(packageJson) {
4849
const { name, dependencies = {}, peerDependencies = {} } = packageJson;
@@ -61,7 +62,10 @@ function checkInstalledPackage(packageJson) {
6162
}
6263
visitedDeps.push(name);
6364

64-
peerDependencies.forEach(peer => peerDeps.push({ ...peer, depender: `${packageJson.name}@${packageJson.version}` }));
65+
peerDependencies.forEach(peer => {
66+
peerDeps.push({ ...peer, depender: `${packageJson.name}@${packageJson.version}` });
67+
});
68+
6569
dependencies.forEach(dependency => {
6670
const dependencyName = dependency.name;
6771
const installedPkgDir = `${NODEMODULES}/${dependencyName}`;
@@ -72,7 +76,9 @@ function checkInstalledPackage(packageJson) {
7276
}
7377

7478
console.log('Peer Dependencies:');
75-
peerDeps.forEach(dep => console.log(`${dep.depender} requires ${dep.name} ${dep.version}`));
79+
peerDeps.forEach(dep => {
80+
return console.log(`${dep.depender} requires ${dep.name} ${dep.version}`);
81+
});
7682
console.log('');
7783

7884
const missingPeers = [];
@@ -98,6 +104,13 @@ function checkPeerDependency(peerDependency) {
98104

99105
const installedVersion = readFile(pkgJsonFile).version;
100106

107+
const declaredVersion = rootPackageJson.dependencies && rootPackageJson.dependencies[peerDependency.name];
108+
// ignore peer dependencies for yalc'd packages
109+
if (/file:\.yalc/.exec(declaredVersion)) {
110+
console.log(`${peerDependency.depender} depends on ${peerDependency.name} ${peerDependency.version}, but ignoring because ${peerDependency.name} is yalc'd`).
111+
return;
112+
}
113+
101114
if (!semver.satisfies(installedVersion, peerDependency.version)) {
102115
handleIncorrectPeerDependency(peerDependency, installedVersion);
103116
}
@@ -111,6 +124,8 @@ if (missingPeers.length || incorrectPeers.length) {
111124
incorrectPeers.forEach(peer =>
112125
console.error(`Incorrect peer dependency: ${peer.name}@${peer.installedVersion} installed but ${peer.depender} requires ${peer.version}.`));
113126
console.error();
127+
} else {
128+
console.log('No problems found.')
114129
}
115130

116131
function semverReverseSort(a, b) {
@@ -134,10 +149,12 @@ function findPossibleResolution(packageName, allPeerDeps, isMissing = false) {
134149

135150
const foundVer = availableVersions.find(ver => requiredPeerVersions.every(peerVer => semver.satisfies(ver, peerVer.version)));
136151
if (!foundVer) {
137-
console.error(`Unable to find a version for ${packageName} that satisfies the following peerDependencies:`);
152+
const errorPrefix = `Unable to find a version of ${packageName} that satisfies the following peerDependencies:`;
153+
console.error();
154+
console.error(errorPrefix);
138155
requiredPeerVersions.forEach(peer => console.error(`${peer.depender} requires ${peer.name} ${peer.version}`));
139-
throw new Error(`Unable to find a version for ${packageName} that satisfies ` +
140-
`the following peerDependencies: ${requiredPeerVersions.map(x => x.version).join()}`);
156+
console.error();
157+
throw new Error(`${errorPrefix} ${requiredPeerVersions.map(x => x.version).join()}`);
141158
}
142159

143160
console.log(`found ${packageName}@${foundVer} which satisfies ${requiredPeerVersions.join(',')}`);

0 commit comments

Comments
 (0)