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;