Spaces:
Sleeping
Sleeping
| ; | |
| 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; | |