basant307/AI_Governance_Project
048
1import process from 'node:process';2import {signalsByName} from 'human-signals';3 4const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {5 if (timedOut) {6 return `timed out after ${timeout} milliseconds`;7 }8 9 if (isCanceled) {10 return 'was canceled';11 }12 13 if (errorCode !== undefined) {14 return `failed with ${errorCode}`;15 }16 17 if (signal !== undefined) {18 return `was killed with ${signal} (${signalDescription})`;19 }20 21 if (exitCode !== undefined) {22 return `failed with exit code ${exitCode}`;23 }24 25 return 'failed';26};27 28export const makeError = ({29 stdout,30 stderr,31 all,32 error,33 signal,34 exitCode,35 command,36 escapedCommand,37 timedOut,38 isCanceled,39 killed,40 parsed: {options: {timeout, cwd = process.cwd()}},41}) => {42 // `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.43 // We normalize them to `undefined`44 exitCode = exitCode === null ? undefined : exitCode;45 signal = signal === null ? undefined : signal;46 const signalDescription = signal === undefined ? undefined : signalsByName[signal].description;47 48 const errorCode = error && error.code;49 50 const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});51 const execaMessage = `Command ${prefix}: ${command}`;52 const isError = Object.prototype.toString.call(error) === '[object Error]';53 const shortMessage = isError ? `${execaMessage}\n${error.message}` : execaMessage;54 const message = [shortMessage, stderr, stdout].filter(Boolean).join('\n');55 56 if (isError) {57 error.originalMessage = error.message;58 error.message = message;59 } else {60 error = new Error(message);61 }62 63 error.shortMessage = shortMessage;64 error.command = command;65 error.escapedCommand = escapedCommand;66 error.exitCode = exitCode;67 error.signal = signal;68 error.signalDescription = signalDescription;69 error.stdout = stdout;70 error.stderr = stderr;71 error.cwd = cwd;72 73 if (all !== undefined) {74 error.all = all;75 }76 77 if ('bufferedData' in error) {78 delete error.bufferedData;79 }80 81 error.failed = true;82 error.timedOut = Boolean(timedOut);83 error.isCanceled = isCanceled;84 error.killed = killed && !timedOut;85 86 return error;87};88 