| 'use strict'; | 
|   | 
| var isWin = process.platform === 'win32'; | 
| var resolveCommand = require('./util/resolveCommand'); | 
|   | 
| var isNode10 = process.version.indexOf('v0.10.') === 0; | 
|   | 
| function notFoundError(command, syscall) { | 
|     var err; | 
|   | 
|     err = new Error(syscall + ' ' + command + ' ENOENT'); | 
|     err.code = err.errno = 'ENOENT'; | 
|     err.syscall = syscall + ' ' + command; | 
|   | 
|     return err; | 
| } | 
|   | 
| function hookChildProcess(cp, parsed) { | 
|     var originalEmit; | 
|   | 
|     if (!isWin) { | 
|         return; | 
|     } | 
|   | 
|     originalEmit = cp.emit; | 
|     cp.emit = function (name, arg1) { | 
|         var err; | 
|   | 
|         // 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') { | 
|             err = verifyENOENT(arg1, parsed, 'spawn'); | 
|   | 
|             if (err) { | 
|                 return originalEmit.call(cp, 'error', err); | 
|             } | 
|         } | 
|   | 
|         return originalEmit.apply(cp, arguments); | 
|     }; | 
| } | 
|   | 
| 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'); | 
|     } | 
|   | 
|     // If we are in node 10, then we are using spawn-sync; if it exited | 
|     // with -1 it probably means that the command does not exist | 
|     if (isNode10 && status === -1) { | 
|         parsed.file = isWin ? parsed.file : resolveCommand(parsed.original); | 
|   | 
|         if (!parsed.file) { | 
|             return notFoundError(parsed.original, 'spawnSync'); | 
|         } | 
|     } | 
|   | 
|     return null; | 
| } | 
|   | 
| module.exports.hookChildProcess = hookChildProcess; | 
| module.exports.verifyENOENT = verifyENOENT; | 
| module.exports.verifyENOENTSync = verifyENOENTSync; | 
| module.exports.notFoundError = notFoundError; |