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.
|
|
'use strict';
const isWin = process.platform === 'win32';
function notFoundError(original, syscall) { return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { code: 'ENOENT', errno: 'ENOENT', syscall: `${syscall} ${original.command}`, path: original.command, spawnargs: original.args, }); }
function hookChildProcess(cp, parsed) { if (!isWin) { return; }
const originalEmit = cp.emit;
cp.emit = function (name, arg1) { // If emitting "exit" event and exit code is 1, we need to check if
// the command exists and emit an "error" instead
// See https://github.com/IndigoUnited/node-cross-spawn/issues/16
if (name === 'exit') { const err = verifyENOENT(arg1, parsed, 'spawn');
if (err) { return originalEmit.call(cp, 'error', err); } }
return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
}; }
function verifyENOENT(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, 'spawn'); }
return null; }
function verifyENOENTSync(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, 'spawnSync'); }
return null; }
module.exports = { hookChildProcess, verifyENOENT, verifyENOENTSync, notFoundError, };
|