| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 'use strict';const path = require('path');const which = require('which');const getPathKey = require('path-key');function resolveCommandAttempt(parsed, withoutPathExt) {    const env = parsed.options.env || process.env;    const cwd = process.cwd();    const hasCustomCwd = parsed.options.cwd != null;    // Worker threads do not have process.chdir()    const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;    // If a custom `cwd` was specified, we need to change the process cwd    // because `which` will do stat calls but does not support a custom cwd    if (shouldSwitchCwd) {        try {            process.chdir(parsed.options.cwd);        } catch (err) {            /* Empty */        }    }    let resolved;    try {        resolved = which.sync(parsed.command, {            path: env[getPathKey({ env })],            pathExt: withoutPathExt ? path.delimiter : undefined,        });    } catch (e) {        /* Empty */    } finally {        if (shouldSwitchCwd) {            process.chdir(cwd);        }    }    // If we successfully resolved, ensure that an absolute path is returned    // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it    if (resolved) {        resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);    }    return resolved;}function resolveCommand(parsed) {    return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);}module.exports = resolveCommand;
 |