58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
import { parse } from "next/dist/compiled/stacktrace-parser";
|
|
export function getFilesystemFrame(frame) {
|
|
const f = {
|
|
...frame
|
|
};
|
|
if (typeof f.file === "string") {
|
|
if (// Posix:
|
|
f.file.startsWith("/") || // Win32:
|
|
/^[a-z]:\\/i.test(f.file) || // Win32 UNC:
|
|
f.file.startsWith("\\\\")) {
|
|
f.file = "file://" + f.file;
|
|
}
|
|
}
|
|
return f;
|
|
}
|
|
const symbolError = Symbol("NextjsError");
|
|
export function getErrorSource(error) {
|
|
return error[symbolError] || null;
|
|
}
|
|
export function decorateServerError(error, type) {
|
|
Object.defineProperty(error, symbolError, {
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: false,
|
|
value: type
|
|
});
|
|
}
|
|
export function getServerError(error, type) {
|
|
let n;
|
|
try {
|
|
throw new Error(error.message);
|
|
} catch (e) {
|
|
n = e;
|
|
}
|
|
n.name = error.name;
|
|
try {
|
|
n.stack = n.toString() + "\n" + parse(error.stack).map(getFilesystemFrame).map((f)=>{
|
|
let str = " at " + f.methodName;
|
|
if (f.file) {
|
|
let loc = f.file;
|
|
if (f.lineNumber) {
|
|
loc += ":" + f.lineNumber;
|
|
if (f.column) {
|
|
loc += ":" + f.column;
|
|
}
|
|
}
|
|
str += " (" + loc + ")";
|
|
}
|
|
return str;
|
|
}).join("\n");
|
|
} catch (e) {
|
|
n.stack = error.stack;
|
|
}
|
|
decorateServerError(n, type);
|
|
return n;
|
|
}
|
|
|
|
//# sourceMappingURL=nodeStackFrames.js.map |