telefunc
Version:
Remote functions. Instead of API.
35 lines (34 loc) • 1.13 kB
JavaScript
export { createErrorWithCleanStackTrace };
function createErrorWithCleanStackTrace(errorMessage, numberOfStackTraceLinesToRemove) {
const err = new Error(errorMessage);
err.stack = clean(err.stack, numberOfStackTraceLinesToRemove);
return err;
}
function clean(errStack, numberOfStackTraceLinesToRemove) {
if (!errStack) {
return errStack;
}
const stackLines = splitByLine(errStack);
let linesRemoved = 0;
const stackLine__cleaned = stackLines
.filter((line) => {
// Remove internal stack traces
if (line.includes(' (internal/') || line.includes(' (node:internal')) {
return false;
}
if (linesRemoved < numberOfStackTraceLinesToRemove && isStackTraceLine(line)) {
linesRemoved++;
return false;
}
return true;
})
.join('\n');
return stackLine__cleaned;
}
function isStackTraceLine(line) {
return line.startsWith(' at ');
}
function splitByLine(str) {
// https://stackoverflow.com/questions/21895233/how-in-node-to-split-string-by-newline-n
return str.split(/\r?\n/);
}