Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 41aeec9

Browse files
Error on inexact caret version range match
1 parent 7c010ce commit 41aeec9

File tree

1 file changed

+18
-66
lines changed

1 file changed

+18
-66
lines changed

scripts/check-truffle-namespace-dependency-versions.js

Lines changed: 18 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,43 @@ const path = require("path");
33

44
const chalk = require("chalk");
55

6-
const { Range } = require("semver");
7-
86
const debug = require("debug")("check-package-versions");
97

108
function main() {
119
const packages = readPackages();
1210
const errors = [];
13-
const warnings = [];
1411

1512
for (const candidateName in packages) {
1613
for (const dependencyName in packages) {
17-
try {
18-
checkDependencyVersion(
14+
errors.push(
15+
...checkDependencyVersionRange(
1916
packages[candidateName],
2017
packages[dependencyName]
21-
);
22-
} catch (err) {
23-
errors.push(err.message);
24-
}
25-
try {
26-
checkDependencyVersionRange(
27-
packages[candidateName],
28-
packages[dependencyName]
29-
);
30-
} catch (err) {
31-
warnings.push(err.message);
32-
}
18+
)
19+
);
3320
}
3421
}
3522

3623
for (const error of errors) {
3724
console.error(chalk.red("Error:"), error);
3825
}
39-
for (const warning of warnings) {
40-
console.error(chalk.yellow("Warning:"), warning);
41-
}
42-
43-
const doneColor =
44-
errors.length > 0
45-
? chalk.red
46-
: warnings.length > 0
47-
? chalk.yellow
48-
: chalk.green;
26+
const doneColor = errors.length > 0 ? chalk.red : chalk.green;
4927
console.error(
5028
doneColor("Done."),
51-
`${errors.length} errors, ${warnings.length} warnings found for @truffle namespace version dependencies.`
29+
`Found ${errors.length} errors for @truffle namespace version dependencies.`
5230
);
5331

5432
if (errors.length > 0) {
5533
process.exit(1);
5634
}
5735
}
5836

59-
function getPackageNames() {
37+
function getPackageDirectoryNames() {
6038
return fs.readdirSync(path.join(__dirname, "..", "packages"));
6139
}
6240

6341
function readPackages() {
64-
const packages = getPackageNames();
42+
const packages = getPackageDirectoryNames();
6543
const packageSpecs = {};
6644
for (const packageName of packages) {
6745
const packageFilePath = path.join(
@@ -75,51 +53,25 @@ function readPackages() {
7553
return packageSpecs;
7654
}
7755

78-
function checkDependencyVersion(candidate, dependency) {
79-
const name = dependency.name;
80-
const version = dependency.version;
81-
82-
for (const depType of [
83-
"dependencies",
84-
"devDependencies",
85-
"peerDependencies"
86-
]) {
87-
const deps = candidate[depType];
88-
if (deps && deps[name]) {
89-
const rawRange = deps[name];
90-
const range = new Range(rawRange);
91-
if (!range.test(version)) {
92-
throw new Error(
93-
`Package "${candidate.name}" depends on "${name}@${rawRange}", but local "${name}" has version ${version}, which is not in range ${rawRange}`
94-
);
95-
} else {
96-
debug(
97-
`${candidate.name} requires ${name}@${version} (${version} in range ${deps[name]})`
98-
);
99-
}
100-
} else {
101-
debug(`${candidate.name} does not require ${name}`);
102-
}
103-
}
104-
}
56+
const depTypes = [
57+
"dependencies",
58+
"devDependencies",
59+
"peerDependencies",
60+
"optionalDependencies",
61+
"bundleDependencies"
62+
];
10563

106-
function checkDependencyVersionRange(candidate, dependency) {
64+
function* checkDependencyVersionRange(candidate, dependency) {
10765
const name = dependency.name;
10866
const version = dependency.version;
10967

110-
for (const depType of [
111-
"dependencies",
112-
"devDependencies",
113-
"peerDependencies"
114-
]) {
68+
for (const depType of depTypes) {
11569
const deps = candidate[depType];
11670
if (deps && deps[name]) {
11771
const rawRange = deps[name];
11872

11973
if (rawRange !== `^${version}`) {
120-
throw new Error(
121-
`Package "${candidate.name}" depends on "${name}@${rawRange}", but range has not been updated for version ${version}`
122-
);
74+
yield `Package "${candidate.name}" depends on "${name}@${rawRange}", but range has not been updated for version ${version}`;
12375
} else {
12476
debug(
12577
`${candidate.name} requires ${name}@${version} (${rawRange} is up-to-date for version ${version})`

0 commit comments

Comments
 (0)