export function createStackTraces()

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
    }
  })
}