1import ora, { Ora } from 'ora'; 2 3import { env } from './env'; 4 5export function withSectionLog<T>( 6 action: (spinner: Ora) => Promise<T>, 7 message: { 8 pending: string; 9 success: string; 10 error: (errror: Error) => string; 11 } 12) { 13 const disabled = env.CI || env.EXPO_DEBUG; 14 const spinner = ora({ 15 text: message.pending, 16 // Ensure our non-interactive mode emulates CI mode. 17 isEnabled: !disabled, 18 // In non-interactive mode, send the stream to stdout so it prevents looking like an error. 19 stream: disabled ? process.stdout : process.stderr, 20 }); 21 22 spinner.start(); 23 24 return action(spinner).then( 25 (result) => { 26 spinner.succeed(message.success); 27 return result; 28 }, 29 (error) => { 30 spinner.fail(message.error(error)); 31 throw error; 32 } 33 ); 34} 35