vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
38 lines (37 loc) • 1.21 kB
JavaScript
export { createErrorWithCleanStackTrace };
import { isNodeJS } from './isNodeJS.js';
function createErrorWithCleanStackTrace(errorMessage, numberOfStackTraceLinesToRemove) {
const err = new Error(errorMessage);
if (isNodeJS()) {
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/);
}