text: import shell from 'shelljs';
  import path from 'path';
  import tmp from 'tmp';
  import helpers from './helpers';
  
  const isOSX = helpers.isOSX;
  tmp.setGracefulCleanup();
  
  const PNG_TO_ICNS_BIN_PATH = path.join(__dirname, '../..', 'bin/convertToIcns');
  
  /**
   * @callback pngToIcnsCallback
   * @param error
   * @param {string} icnsDest If error, will return the original png src
   */
  
  /**
   *
   * @param {string} pngSrc
   * @param {string} icnsDest
   * @param {pngToIcnsCallback} callback
   */
  function convertToIcns(pngSrc, icnsDest, callback) {
    if (!isOSX()) {
      callback('OSX is required to convert .png to .icns icon', pngSrc);
      return;
    }
  
    shell.exec(`${PNG_TO_ICNS_BIN_PATH} ${pngSrc} ${icnsDest}`, { silent: true }, (exitCode, stdOut, stdError) => {
      if (stdOut.includes('icon.iconset:error') || exitCode) {
        if (exitCode) {
          callback({
            stdOut,
            stdError,
          }, pngSrc);
          return;
        }
  
        callback(stdOut, pngSrc);
        return;
      }
  
      callback(null, icnsDest);
    });
  }
  
  /**
   * Converts the png to a temporary directory which will be cleaned up on process exit
   * @param {string} pngSrc
   * @param {pngToIcnsCallback} callback
   */
  function convertToIcnsTmp(pngSrc, callback) {
    const tempIconDirObj = tmp.dirSync({ unsafeCleanup: true });
    const tempIconDirPath = tempIconDirObj.name;
    convertToIcns(pngSrc, `${tempIconDirPath}/icon.icns`, callback);
  }
  
  export default convertToIcnsTmp;
  