/**
 * This script programmatically triggers a production build
 * and responds with the status, message and full output
 */
const { exec } = require('child_process');

module.exports = () => new Promise((resolve, reject) => {
  const buildProcess = exec('npm run build'); // Trigger the build command

  let output = ''; // Will store console output

  // Write output to console, and append to var for returning
  buildProcess.stdout.on('data', (data) => {
    process.stdout.write(data);
    output += data;
  });

  // Handle errors, by sending the reject
  buildProcess.on('error', (error) => {
    reject(Error({
      success: false,
      error,
      output,
    }));
  });

  // When finished, check success, make message and resolve response
  buildProcess.on('exit', (response) => {
    const success = response === 0;
    const message = `Build process exited with ${response}: `
      + `${success ? 'Success' : 'Possible Error'}`;
    resolve({ success, message, output });
  });
});