UNPKG

1.92 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.sanitizeErrorMessage = exports.stackTraceFilter = void 0;
4const constants_1 = require("./constants");
5/**
6 * filter stack array
7 * @param {string} stackRow
8 * @returns {boolean}
9 */
10const stackTraceFilter = (stackRow) => {
11 if (stackRow.match(constants_1.STACK_START)) {
12 return !constants_1.STACKTRACE_FILTER.some(r => stackRow.includes(r));
13 }
14 return true;
15};
16exports.stackTraceFilter = stackTraceFilter;
17/**
18 * Cleanup stack traces, merge and remove duplicates
19 * @param {Error|*} commandError Error object or anything else including undefined
20 * @param {Error} savedError Error with root stack trace
21 * @returns {Error}
22 */
23function sanitizeErrorMessage(commandError, savedError) {
24 var _a;
25 let name, stack, message;
26 if (commandError instanceof Error) {
27 ({ name, message, stack } = commandError);
28 }
29 else {
30 name = 'Error';
31 message = commandError;
32 }
33 const err = new Error(message);
34 err.name = name;
35 let stackArr = ((_a = savedError.stack) === null || _a === void 0 ? void 0 : _a.split('\n')) || [];
36 /**
37 * merge stack traces if `commandError` has stack trace
38 */
39 if (stack) {
40 // remove duplicated error name from stack trace
41 stack = stack.replace(`${err.name}: ${err.name}`, err.name);
42 // remove first stack trace line from second stack trace
43 stackArr[0] = '\n';
44 // merge
45 stackArr = [...stack.split('\n'), ...stackArr];
46 }
47 err.stack = stackArr
48 // filter stack trace
49 .filter(exports.stackTraceFilter)
50 // remove duplicates from stack traces
51 .reduce((acc, currentValue) => {
52 return acc.includes(currentValue) ? acc : `${acc}\n${currentValue}`;
53 }, '')
54 .trim();
55 return err;
56}
57exports.sanitizeErrorMessage = sanitizeErrorMessage;