main
js 59 lines 1.62 KB
Raw
1 #!/usr/bin/env node
2
3 'use strict';
4
5 const {readJson} = require('fs-extra');
6 const {join} = require('path');
7 const theme = require('../theme');
8 const {execRead} = require('../utils');
9
10 const readPackageJSON = async (cwd, name) => {
11 const packageJSONPath = join(
12 cwd,
13 'build',
14 'node_modules',
15 name,
16 'package.json'
17 );
18 return await readJson(packageJSONPath);
19 };
20
21 const run = async ({cwd, packages, skipPackages}) => {
22 if (skipPackages.length === 0) {
23 return;
24 }
25
26 const validateDependencies = async (name, dependencies) => {
27 if (!dependencies) {
28 return;
29 }
30
31 for (let dependency in dependencies) {
32 // Do we depend on a package that has been skipped?
33 if (skipPackages.includes(dependency)) {
34 const version = dependencies[dependency];
35 // Do we depend on a version of the package that has not been published to NPM?
36 const info = await execRead(`npm view ${dependency}@${version}`);
37 if (!info) {
38 console.log(
39 theme`{error Package} {package ${name}} {error depends on an unpublished skipped package}`,
40 theme`{package ${dependency}}@{version ${version}}`
41 );
42 process.exit(1);
43 }
44 }
45 }
46 };
47
48 // Make sure none of the other packages depend on a skipped package,
49 // unless the dependency has already been published to NPM.
50 for (let i = 0; i < packages.length; i++) {
51 const name = packages[i];
52 const {dependencies, peerDependencies} = await readPackageJSON(cwd, name);
53
54 validateDependencies(name, dependencies);
55 validateDependencies(name, peerDependencies);
56 }
57 };
58
59 module.exports = run;