60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
/* eslint-disable no-for-of-loops/no-for-of-loops */
|
|
|
|
const fs = require('fs');
|
|
const semver = require('semver');
|
|
|
|
const {stablePackages} = require('../../ReactVersions');
|
|
|
|
function main() {
|
|
if (!fs.existsSync('./build/oss-stable-semver')) {
|
|
throw new Error('No build artifacts found');
|
|
}
|
|
|
|
const packages = new Map();
|
|
for (const packageName in stablePackages) {
|
|
if (!fs.existsSync(`build/oss-stable-semver/${packageName}/package.json`)) {
|
|
throw new Error(`${packageName}`);
|
|
} else {
|
|
const info = JSON.parse(
|
|
fs.readFileSync(`build/oss-stable-semver/${packageName}/package.json`)
|
|
);
|
|
packages.set(info.name, info);
|
|
}
|
|
}
|
|
|
|
for (const [packageName, info] of packages) {
|
|
if (info.dependencies) {
|
|
for (const [depName, depRange] of Object.entries(info.dependencies)) {
|
|
if (packages.has(depName)) {
|
|
const releaseVersion = packages.get(depName).version;
|
|
checkDependency(packageName, depName, releaseVersion, depRange);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (info.peerDependencies) {
|
|
for (const [depName, depRange] of Object.entries(info.peerDependencies)) {
|
|
if (packages.has(depName)) {
|
|
const releaseVersion = packages.get(depName).version;
|
|
checkDependency(packageName, depName, releaseVersion, depRange);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function checkDependency(packageName, depName, version, range) {
|
|
if (!semver.satisfies(version, range)) {
|
|
throw new Error(
|
|
`${packageName} has an invalid dependency on ${depName}: ${range}` +
|
|
'\n\n' +
|
|
'Actual version is: ' +
|
|
version
|
|
);
|
|
}
|
|
}
|
|
|
|
main();
|