// This file exports a function that has the same interface as
// `spawnSync`, but it throws if there's an error while executing
// the supplied command or if the exit code is not 0. This is similar to what
// `execSync` does, but we want to use `spawnSync` because it provides automatic
// escaping for the supplied arguments.

const childProcess = require('child_process');

module.exports = function() {
  const result = childProcess.spawnSync.apply(childProcess, arguments);
  if (result.error) {
    throw result.error;
  } else if (result.status !== 0) {
    if (result.stdout) console.error(result.stdout.toString());
    if (result.stderr) console.error(result.stderr.toString());
    throw new Error(
      `Command ${(result.args || []).join(' ')} exited with code "${
        result.status
      }"`
    );
  } else {
    return result;
  }
};
