| 'use strict'; | 
| const {signalsByName} = require('human-signals'); | 
|   | 
| const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => { | 
|     if (timedOut) { | 
|         return `timed out after ${timeout} milliseconds`; | 
|     } | 
|   | 
|     if (isCanceled) { | 
|         return 'was canceled'; | 
|     } | 
|   | 
|     if (errorCode !== undefined) { | 
|         return `failed with ${errorCode}`; | 
|     } | 
|   | 
|     if (signal !== undefined) { | 
|         return `was killed with ${signal} (${signalDescription})`; | 
|     } | 
|   | 
|     if (exitCode !== undefined) { | 
|         return `failed with exit code ${exitCode}`; | 
|     } | 
|   | 
|     return 'failed'; | 
| }; | 
|   | 
| const makeError = ({ | 
|     stdout, | 
|     stderr, | 
|     all, | 
|     error, | 
|     signal, | 
|     exitCode, | 
|     command, | 
|     timedOut, | 
|     isCanceled, | 
|     killed, | 
|     parsed: {options: {timeout}} | 
| }) => { | 
|     // `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`. | 
|     // We normalize them to `undefined` | 
|     exitCode = exitCode === null ? undefined : exitCode; | 
|     signal = signal === null ? undefined : signal; | 
|     const signalDescription = signal === undefined ? undefined : signalsByName[signal].description; | 
|   | 
|     const errorCode = error && error.code; | 
|   | 
|     const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}); | 
|     const message = `Command ${prefix}: ${command}`; | 
|   | 
|     if (error instanceof Error) { | 
|         error.originalMessage = error.message; | 
|         error.message = `${message}\n${error.message}`; | 
|     } else { | 
|         error = new Error(message); | 
|     } | 
|   | 
|     error.command = command; | 
|     error.exitCode = exitCode; | 
|     error.signal = signal; | 
|     error.signalDescription = signalDescription; | 
|     error.stdout = stdout; | 
|     error.stderr = stderr; | 
|   | 
|     if (all !== undefined) { | 
|         error.all = all; | 
|     } | 
|   | 
|     if ('bufferedData' in error) { | 
|         delete error.bufferedData; | 
|     } | 
|   | 
|     error.failed = true; | 
|     error.timedOut = Boolean(timedOut); | 
|     error.isCanceled = isCanceled; | 
|     error.killed = killed && !timedOut; | 
|   | 
|     return error; | 
| }; | 
|   | 
| module.exports = makeError; |