in node/internal.ts [433:504]
function _tryGetExecutablePath(filePath: string, extensions: string[]): string {
try {
// test file exists
let stats: fs.Stats = fs.statSync(filePath);
if (stats.isFile()) {
if (process.platform == 'win32') {
// on Windows, test for valid extension
let isExecutable = false;
let fileName = path.basename(filePath);
let dotIndex = fileName.lastIndexOf('.');
if (dotIndex >= 0) {
let upperExt = fileName.substr(dotIndex).toUpperCase();
if (extensions.some(validExt => validExt.toUpperCase() == upperExt)) {
return filePath;
}
}
}
else {
if (isUnixExecutable(stats)) {
return filePath;
}
}
}
}
catch (err) {
if (err.code != 'ENOENT') {
_debug(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
}
}
// try each extension
let originalFilePath = filePath;
for (let extension of extensions) {
let found = false;
let filePath = originalFilePath + extension;
try {
let stats: fs.Stats = fs.statSync(filePath);
if (stats.isFile()) {
if (process.platform == 'win32') {
// preserve the case of the actual file (since an extension was appended)
try {
let directory = path.dirname(filePath);
let upperName = path.basename(filePath).toUpperCase();
for (let actualName of fs.readdirSync(directory)) {
if (upperName == actualName.toUpperCase()) {
filePath = path.join(directory, actualName);
break;
}
}
}
catch (err) {
_debug(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
}
return filePath;
}
else {
if (isUnixExecutable(stats)) {
return filePath;
}
}
}
}
catch (err) {
if (err.code != 'ENOENT') {
_debug(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
}
}
}
return '';
}