48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const path = require('path');
 | 
						|
const which = require('which');
 | 
						|
const pathKey = require('path-key')();
 | 
						|
 | 
						|
function resolveCommandAttempt(parsed, withoutPathExt) {
 | 
						|
    const cwd = process.cwd();
 | 
						|
    const hasCustomCwd = parsed.options.cwd != null;
 | 
						|
 | 
						|
    // 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 (hasCustomCwd) {
 | 
						|
        try {
 | 
						|
            process.chdir(parsed.options.cwd);
 | 
						|
        } catch (err) {
 | 
						|
            /* Empty */
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    let resolved;
 | 
						|
 | 
						|
    try {
 | 
						|
        resolved = which.sync(parsed.command, {
 | 
						|
            path: (parsed.options.env || process.env)[pathKey],
 | 
						|
            pathExt: withoutPathExt ? path.delimiter : undefined,
 | 
						|
        });
 | 
						|
    } catch (e) {
 | 
						|
        /* Empty */
 | 
						|
    } finally {
 | 
						|
        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;
 |