版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

error.js 2.1 KiB

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