{"version":3,"file":"node-stack-trace.js","sources":["../../../src/utils/node-stack-trace.ts"],"sourcesContent":["// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions://\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.//\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport type { StackLineParser, StackLineParserFn } from '../types-hoist/stacktrace';\nimport { normalizeStackTracePath, UNKNOWN_FUNCTION } from './stacktrace';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n  const DATA_URI_MATCH = /at (?:async )?(.+?) \\(data:(.*?),/;\n\n  return (line: string) => {\n    const dataUriMatch = line.match(DATA_URI_MATCH);\n    if (dataUriMatch) {\n      return {\n        filename: `<data:${dataUriMatch[2]}>`,\n        function: dataUriMatch[1],\n      };\n    }\n\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object: string | undefined;\n      let method: string | undefined;\n      let functionName: string | undefined;\n      let typeName: string | undefined;\n      let methodName: string | undefined;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || UNKNOWN_FUNCTION;\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = normalizeStackTracePath(lineMatch[2]);\n      const isNative = lineMatch[5] === 'native';\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      const maybeDecodedFilename = filename ? _safeDecodeURI(filename) : undefined;\n      return {\n        filename: maybeDecodedFilename ?? filename,\n        module: maybeDecodedFilename && getModule?.(maybeDecodedFilename),\n        function: functionName,\n        lineno: _parseIntOrUndefined(lineMatch[3]),\n        colno: _parseIntOrUndefined(lineMatch[4]),\n        in_app: filenameIsInApp(filename || '', isNative),\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/core so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n  return parseInt(input || '', 10) || undefined;\n}\n\nfunction _safeDecodeURI(filename: string): string | undefined {\n  try {\n    return decodeURI(filename);\n  } catch {\n    return undefined;\n  }\n}\n"],"names":[],"mappings":"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"}