All files / util ora-handler.js

100% Statements 25/25
100% Branches 12/12
100% Functions 9/9
100% Lines 24/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45        65x 10x 1x 2x     10x 82x 82x 9x   82x 82x 70x 70x   12x 12x 3x 1x 1x 1x   2x 2x   3x     3x   9x           10x      
import colors from 'colors';
import ora from 'ora';
 
class MockOra {
  succeed() { return this; }
  fail() { return this; }
  start() { return this; }
  stop() { return this; }
}
 
const asyncOra = (initalOraValue, asyncFn, processExitFn = process.exit) => {
  let fnOra = new MockOra();
  if (asyncOra.interactive) {
    fnOra = ora.ora(initalOraValue).start();
  }
  return new Promise((resolve, reject) => {
    asyncFn(fnOra).then(() => {
      fnOra.succeed();
      resolve();
    }).catch((err) => {
      fnOra.fail();
      if (asyncOra.interactive) {
        if (err && err.message && err.stack) {
          console.error('\nAn unhandled error has occurred inside Forge:'.red);
          console.error(colors.red(err.message));
          console.error(colors.red(err.stack));
        } else {
          console.error('\nElectron forge was terminated:'.red);
          console.error(colors.red(typeof err === 'string' ? err : JSON.stringify(err)));
        }
        processExitFn(1);
        // If the process is still alive we should continue because either something went really wrong
        // or we are testing this function
        setTimeout(() => resolve(), 500);
      } else {
        reject(err);
      }
    });
  });
};
 
asyncOra.interactive = true;
 
export default asyncOra;