All files index.js

92.85% Statements 13/14
75% Branches 9/12
100% Functions 3/3
92.85% Lines 13/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 321x                       4x 4x 2x   2x 2x 2x 1x 1x   1x 1x     1x         1x
const { execFile } = require('child_process');
 
/**
 * @typedef {Object} Options
 * @property {'buffer' | null} encoding `encoding` means stdout/stderr are definitely `Buffer`.
 * 
 * @typedef {import("child_process").ExecOptions} ExecOptions
 * @param {string} command 
 * @param {ExecOptions & Options} options 
 * @returns {Promise<string>}
 */
function whereis(command, options) {
  return new Promise((resolve, reject) => {
    if (!command) {
      return reject(new Error('No command name is passed!'));
    }
    const commandStr = /(win32)/.test(process.platform) ? `${command}.exe` : command;
    execFile('which', [commandStr], options, (error, stdout, stderr) => {
      if (error) {
        reject(new Error(`Could not find ${command} on your system; ${error.message ? error.message : ''}`));
        return;
      }
      const str = stdout.toString().split('\n')[0];
      Iif (str === '' || str.charAt(0) !== '/') {
        reject(new Error(`Could not find ${command} on your system;`));
      }
      resolve(str);
    });
  });
}
 
module.exports = whereis;