1. #!/usr/bin/env node
    
  2. 
    
  3. 'use strict';
    
  4. 
    
  5. const {join} = require('path');
    
  6. const {getPublicPackages, handleError} = require('./utils');
    
  7. 
    
  8. const checkOutPackages = require('./prepare-release-from-npm-commands/check-out-packages');
    
  9. const confirmStableVersionNumbers = require('./prepare-release-from-npm-commands/confirm-stable-version-numbers');
    
  10. const getLatestNextVersion = require('./prepare-release-from-npm-commands/get-latest-next-version');
    
  11. const guessStableVersionNumbers = require('./prepare-release-from-npm-commands/guess-stable-version-numbers');
    
  12. const parseParams = require('./prepare-release-from-npm-commands/parse-params');
    
  13. const printPrereleaseSummary = require('./shared-commands/print-prerelease-summary');
    
  14. const testPackagingFixture = require('./shared-commands/test-packaging-fixture');
    
  15. const updateStableVersionNumbers = require('./prepare-release-from-npm-commands/update-stable-version-numbers');
    
  16. const theme = require('./theme');
    
  17. 
    
  18. const run = async () => {
    
  19.   try {
    
  20.     const params = parseParams();
    
  21.     params.cwd = join(__dirname, '..', '..');
    
  22. 
    
  23.     const isExperimental = params.version.includes('experimental');
    
  24. 
    
  25.     if (!params.version) {
    
  26.       params.version = await getLatestNextVersion();
    
  27.     }
    
  28. 
    
  29.     params.packages = await getPublicPackages(isExperimental);
    
  30. 
    
  31.     // Map of package name to upcoming stable version.
    
  32.     // This Map is initially populated with guesses based on local versions.
    
  33.     // The developer running the release later confirms or overrides each version.
    
  34.     const versionsMap = new Map();
    
  35. 
    
  36.     if (isExperimental) {
    
  37.       console.error(
    
  38.         theme.error`Cannot promote an experimental build to stable.`
    
  39.       );
    
  40.       process.exit(1);
    
  41.     }
    
  42. 
    
  43.     await checkOutPackages(params);
    
  44.     await guessStableVersionNumbers(params, versionsMap);
    
  45.     await confirmStableVersionNumbers(params, versionsMap);
    
  46.     await updateStableVersionNumbers(params, versionsMap);
    
  47. 
    
  48.     if (!params.skipTests) {
    
  49.       await testPackagingFixture(params);
    
  50.     }
    
  51. 
    
  52.     await printPrereleaseSummary(params, true);
    
  53.   } catch (error) {
    
  54.     handleError(error);
    
  55.   }
    
  56. };
    
  57. 
    
  58. run();