| '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; |