in packages/rum-core/src/error-logging/stack-trace.js [106:166]
export function createStackTraces(stackParser, errorEvent) {
const { error, filename, lineno, colno } = errorEvent
let stackTraces = []
if (error) {
try {
stackTraces = stackParser.parse(error)
} catch (e) {
/**
* Ignore library errors from error-stack-parser, since it does not
* provide any valuable information for the user
*/
}
}
// error-stack-parser library doesn't generate proper stack traces from Syntax Errors
// thrown during the browser document parsing process. The outcome of the library depends on the browser:
// 1. on non-chromium browsers it throws an exception.
// 2. on chromium browsers it returns a malformed single stack trace element not containing the lineNumber property
if (!isValidStackTrace(stackTraces)) {
stackTraces = [
{
fileName: filename,
lineNumber: lineno,
columnNumber: colno
}
]
}
const normalizedStackTraces = normalizeStackFrames(stackTraces)
return normalizedStackTraces.map(stack => {
const {
fileName,
lineNumber,
columnNumber,
functionName = '<anonymous>'
} = stack
if (!fileName && !lineNumber) {
return {}
}
if (!columnNumber && !lineNumber) {
return {}
}
const filePath = cleanFilePath(fileName)
let cleanedFileName = filePathToFileName(filePath)
if (isFileInline(filePath)) {
cleanedFileName = '(inline script)'
}
return {
abs_path: fileName,
filename: cleanedFileName,
function: functionName,
lineno: lineNumber,
colno: columnNumber
}
})
}