UNPKG

@sentry/browser

Version:
90 lines 3.14 kB
import { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils'; import { computeStackTrace } from './tracekit'; var STACKTRACE_LIMIT = 50; /** * This function creates an exception from an TraceKitStackTrace * @param stacktrace TraceKitStackTrace that will be converted to an exception * @hidden */ export function exceptionFromStacktrace(stacktrace) { var frames = prepareFramesForEvent(stacktrace.stack); var exception = { type: stacktrace.name, value: stacktrace.message, }; if (frames && frames.length) { exception.stacktrace = { frames: frames }; } if (exception.type === undefined && exception.value === '') { exception.value = 'Unrecoverable error caught'; } return exception; } /** * @hidden */ export function eventFromPlainObject(exception, syntheticException, rejection) { var event = { exception: { values: [ { type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error', value: "Non-Error " + (rejection ? 'promise rejection' : 'exception') + " captured with keys: " + extractExceptionKeysForMessage(exception), }, ], }, extra: { __serialized__: normalizeToSize(exception), }, }; if (syntheticException) { var stacktrace = computeStackTrace(syntheticException); var frames_1 = prepareFramesForEvent(stacktrace.stack); event.stacktrace = { frames: frames_1, }; } return event; } /** * @hidden */ export function eventFromStacktrace(stacktrace) { var exception = exceptionFromStacktrace(stacktrace); return { exception: { values: [exception], }, }; } /** * @hidden */ export function prepareFramesForEvent(stack) { if (!stack || !stack.length) { return []; } var localStack = stack; var firstFrameFunction = localStack[0].func || ''; var lastFrameFunction = localStack[localStack.length - 1].func || ''; // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call) if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) { localStack = localStack.slice(1); } // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call) if (lastFrameFunction.indexOf('sentryWrapped') !== -1) { localStack = localStack.slice(0, -1); } // The frame where the crash happened, should be the last entry in the array return localStack .slice(0, STACKTRACE_LIMIT) .map(function (frame) { return ({ colno: frame.column === null ? undefined : frame.column, filename: frame.url || localStack[0].url, function: frame.func || '?', in_app: true, lineno: frame.line === null ? undefined : frame.line, }); }) .reverse(); } //# sourceMappingURL=parsers.js.map