33 lines
997 B
JavaScript
33 lines
997 B
JavaScript
import which from 'which';
|
|
import fs from 'fs';
|
|
|
|
/**
|
|
* Decorates ENOENT error received from a spawn system call
|
|
* with a more descriptive message, so it could be properly handled by a user.
|
|
*
|
|
* @param {!Error} error Original error instance. !!! The instance is mutated after
|
|
* this helper function invocation
|
|
* @param {!string} cmd Original command to execute
|
|
* @param {?string} cwd Optional path to the current working dir
|
|
* @return {Error} Mutated error instance with an improved description or an
|
|
* unchanged error instance
|
|
*/
|
|
function formatEnoent (error, cmd, cwd = null) {
|
|
try {
|
|
which.sync(cmd);
|
|
if (cwd) {
|
|
try {
|
|
fs.accessSync(cwd, fs.R_OK);
|
|
} catch (ign) {
|
|
error.message = `The current working directory '${cwd}' for '${cmd}' command ` +
|
|
`either does not exist or is not accessible`;
|
|
}
|
|
}
|
|
} catch (ign) {
|
|
error.message = `Command '${cmd}' not found. Is it installed?`;
|
|
}
|
|
return error;
|
|
}
|
|
|
|
export { formatEnoent };
|