hunk.code_window:                 options.icon = outPath;
                   returnCallback();
               })
               .catch(error => {
                   console.warn('Skipping icon conversion from `.png` to `.icns`: ', error);
                   returnCallback();
               });
           return;
       }
  
hunk.labels: keep keep keep keep replace keep keep keep keep
hunk.after_edit:                 console.warn('Skipping process to make .ico icon contain only a single image: ', error);
  
hunk.file_path: src/build/iconBuild.js
hunk.type: replace
file: import shell from 'shelljs';
  import path from 'path';
  import tmp from 'tmp';
  
  tmp.setGracefulCleanup();
  
  const EXTRACT_ICO_PATH = path.join(__dirname, '../..', 'bin/singleIco');
  
  /**
   *
   * @param {string} icoSrc input .ico
   * @param {string} dest has to be a .ico path
   */
  function singleIco(icoSrc, dest) {
      return new Promise((resolve, reject) => {
          shell.exec(`${EXTRACT_ICO_PATH} ${icoSrc} ${dest}`, {silent: true}, (exitCode, stdOut, stdError) => {
              if (stdOut.includes('icon.iconset:error') || exitCode) {
                  if (exitCode) {
                      reject({
                          stdOut: stdOut,
                          stdError: stdError
                      });
                      return;
                  }
  
                  reject(stdOut);
                  return;
              }
  
              resolve(dest);
          });
      });
  }
  
  /**
   * Converts the ico to a temporary directory which will be cleaned up on process exit
   * @param {string} icoSrc path to a .ico file
   */
  function singleIcoTmp(icoSrc) {
      const tempIconDirObj = tmp.dirSync({unsafeCleanup: true});
      const tempIconDirPath = tempIconDirObj.name;
      return singleIco(icoSrc, `${tempIconDirPath}/icon.ico`);
  }
  
  export default singleIcoTmp;
  