main
js 59 lines 1.62 KB
Raw
1 'use strict';
2
3 /* eslint-disable no-for-of-loops/no-for-of-loops */
4
5 const fs = require('fs');
6 const semver = require('semver');
7
8 const {stablePackages} = require('../../ReactVersions');
9
10 function main() {
11 if (!fs.existsSync('./build/oss-stable-semver')) {
12 throw new Error('No build artifacts found');
13 }
14
15 const packages = new Map();
16 for (const packageName in stablePackages) {
17 if (!fs.existsSync(`build/oss-stable-semver/${packageName}/package.json`)) {
18 throw new Error(`${packageName}`);
19 } else {
20 const info = JSON.parse(
21 fs.readFileSync(`build/oss-stable-semver/${packageName}/package.json`)
22 );
23 packages.set(info.name, info);
24 }
25 }
26
27 for (const [packageName, info] of packages) {
28 if (info.dependencies) {
29 for (const [depName, depRange] of Object.entries(info.dependencies)) {
30 if (packages.has(depName)) {
31 const releaseVersion = packages.get(depName).version;
32 checkDependency(packageName, depName, releaseVersion, depRange);
33 }
34 }
35 }
36
37 if (info.peerDependencies) {
38 for (const [depName, depRange] of Object.entries(info.peerDependencies)) {
39 if (packages.has(depName)) {
40 const releaseVersion = packages.get(depName).version;
41 checkDependency(packageName, depName, releaseVersion, depRange);
42 }
43 }
44 }
45 }
46 }
47
48 function checkDependency(packageName, depName, version, range) {
49 if (!semver.satisfies(version, range)) {
50 throw new Error(
51 `${packageName} has an invalid dependency on ${depName}: ${range}` +
52 '\n\n' +
53 'Actual version is: ' +
54 version
55 );
56 }
57 }
58
59 main();