scripts/release/check-release-dependencies.js (49 lines of code) (raw):

'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();