Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Re order so we dont break opera!
  • Loading branch information
timfish committed Feb 11, 2022
commit 328118bcbb6629edb4a7c6dd00bdc3a7cf9626f1
37 changes: 22 additions & 15 deletions packages/browser/src/parsers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ const STACKTRACE_LIMIT = 50;
* @hidden
*/
export function exceptionFromError(ex: Error): Exception {
// Get the frames first since Opera can lose the stack if we touch anything else first
const frames = parseStackFrames(ex);

const exception: Exception = {
type: ex && ex.name,
value: extractMessage(ex),
};

const frames = parseStackFrames(ex);

if (frames && frames.length) {
exception.stacktrace = { frames };
}
Expand Down Expand Up @@ -79,23 +80,17 @@ export function eventFromError(ex: Error): Event {
// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
const reactMinifiedRegexp = /Minified React error #\d+;/i;

/** JSDoc */
/** Parses stack frames from an error */
export function parseStackFrames(ex: Error & { framesToPop?: number; stacktrace?: string }): StackFrame[] {
let popSize = 0;
// Access and store the stacktrace property before doing ANYTHING
// else to it because Opera is not very good at providing it
// reliably in other circumstances.
const stacktrace = ex.stacktrace || ex.stack || '';

if (ex) {
if (typeof ex.framesToPop === 'number') {
popSize = ex.framesToPop;
} else if (reactMinifiedRegexp.test(ex.message)) {
popSize = 1;
}
}
const popSize = getPopSize(ex);

try {
// Access and store the stacktrace property before doing ANYTHING
// else to it because Opera is not very good at providing it
// reliably in other circumstances.
const stacktrace = ex.stacktrace || ex.stack || '';
// The order of the parsers in important
const frames = createStackParser(opera10, opera11, chrome, winjs, gecko)(stacktrace);

return popSize > 0 && frames.length >= popSize ? frames.slice(popSize) : frames;
Expand All @@ -106,6 +101,18 @@ export function parseStackFrames(ex: Error & { framesToPop?: number; stacktrace?
return [];
}

function getPopSize(ex: Error & { framesToPop?: number }): number {
if (ex) {
if (typeof ex.framesToPop === 'number') {
return ex.framesToPop;
} else if (reactMinifiedRegexp.test(ex.message)) {
return 1;
}
}

return 0;
}

/**
* There are cases where stacktrace.message is an Event object
* https://github.com/getsentry/sentry-javascript/issues/1949
Expand Down