You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							1.3 KiB
						
					
					
				'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;
 | 
						|
 |