1. #!/usr/bin/env node
    
  2. 
    
  3. 'use strict';
    
  4. 
    
  5. const semver = require('semver');
    
  6. const {execRead, logPromise} = require('../utils');
    
  7. 
    
  8. const run = async ({cwd, packages, skipPackages}, versionsMap) => {
    
  9.   const branch = await execRead('git branch | grep \\* | cut -d " " -f2', {
    
  10.     cwd,
    
  11.   });
    
  12. 
    
  13.   for (let i = 0; i < packages.length; i++) {
    
  14.     const packageName = packages[i];
    
  15. 
    
  16.     try {
    
  17.       // In case local package JSONs are outdated,
    
  18.       // guess the next version based on the latest NPM release.
    
  19.       const version = await execRead(`npm show ${packageName} version`);
    
  20. 
    
  21.       if (skipPackages.includes(packageName)) {
    
  22.         versionsMap.set(packageName, version);
    
  23.       } else {
    
  24.         const {major, minor, patch} = semver(version);
    
  25. 
    
  26.         // Guess the next version by incrementing patch.
    
  27.         // The script will confirm this later.
    
  28.         // By default, new releases from mains should increment the minor version number,
    
  29.         // and patch releases should be done from branches.
    
  30.         if (branch === 'main') {
    
  31.           versionsMap.set(packageName, `${major}.${minor + 1}.0`);
    
  32.         } else {
    
  33.           versionsMap.set(packageName, `${major}.${minor}.${patch + 1}`);
    
  34.         }
    
  35.       }
    
  36.     } catch (error) {
    
  37.       // If the package has not yet been published,
    
  38.       // we'll require a version number to be entered later.
    
  39.       versionsMap.set(packageName, null);
    
  40.     }
    
  41.   }
    
  42. };
    
  43. 
    
  44. module.exports = async (params, versionsMap) => {
    
  45.   return logPromise(
    
  46.     run(params, versionsMap),
    
  47.     'Guessing stable version numbers'
    
  48.   );
    
  49. };