@sentry/browser 6.17.7 → 6.17.8-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /*! @sentry/browser 6.17.7 (635dfc2) | https://github.com/getsentry/sentry-javascript */
1
+ /*! @sentry/browser 6.17.8-beta.0 (07f9257) | https://github.com/getsentry/sentry-javascript */
2
2
  var Sentry = (function (exports) {
3
3
  /**
4
4
  * TODO(v7): Remove this enum and replace with SeverityLevel
@@ -4263,7 +4263,7 @@ var Sentry = (function (exports) {
4263
4263
  hub.bindClient(client);
4264
4264
  }
4265
4265
 
4266
- const SDK_VERSION = '6.17.7';
4266
+ const SDK_VERSION = '6.17.8-beta.0';
4267
4267
 
4268
4268
  let originalFunctionToString;
4269
4269
  /** Patch toString calls to return proper name for wrapped functions */
@@ -4494,10 +4494,6 @@ var Sentry = (function (exports) {
4494
4494
  InboundFilters: InboundFilters
4495
4495
  });
4496
4496
 
4497
- /**
4498
- * This was originally forked from https://github.com/occ/TraceKit, but has since been
4499
- * largely modified and is now maintained as part of Sentry JS SDK.
4500
- */
4501
4497
  // global reference to slice
4502
4498
  const UNKNOWN_FUNCTION = '?';
4503
4499
  // Chromium based browsers: Chrome, Brave, new Opera, new Edge
@@ -4511,10 +4507,11 @@ var Sentry = (function (exports) {
4511
4507
  const chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
4512
4508
  // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
4513
4509
  const reactMinifiedRegexp = /Minified React error #\d+;/i;
4510
+ const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
4511
+ const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
4514
4512
  /** JSDoc */
4515
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
4516
4513
  function computeStackTrace(ex) {
4517
- let stack = null;
4514
+ let frames = [];
4518
4515
  let popSize = 0;
4519
4516
  if (ex) {
4520
4517
  if (typeof ex.framesToPop === 'number') {
@@ -4525,47 +4522,50 @@ var Sentry = (function (exports) {
4525
4522
  }
4526
4523
  }
4527
4524
  try {
4528
- // This must be tried first because Opera 10 *destroys*
4529
- // its stacktrace property if you try to access the stack
4530
- // property first!!
4531
- stack = computeStackTraceFromStacktraceProp(ex);
4532
- if (stack) {
4533
- return popFrames(stack, popSize);
4534
- }
4525
+ // Access and store the stacktrace property before doing ANYTHING
4526
+ // else to it because Opera is not very good at providing it
4527
+ // reliably in other circumstances.
4528
+ const stacktrace = ex.stacktrace || ex.stack || '';
4529
+ frames = parseFrames(stacktrace);
4535
4530
  }
4536
4531
  catch (e) {
4537
4532
  // no-empty
4538
4533
  }
4539
- try {
4540
- stack = computeStackTraceFromStackProp(ex);
4541
- if (stack) {
4542
- return popFrames(stack, popSize);
4543
- }
4544
- }
4545
- catch (e) {
4546
- // no-empty
4534
+ if (frames.length && popSize > 0) {
4535
+ frames = frames.slice(popSize);
4547
4536
  }
4548
4537
  return {
4549
4538
  message: extractMessage(ex),
4550
4539
  name: ex && ex.name,
4551
- stack: [],
4552
- failed: true,
4540
+ stack: frames,
4553
4541
  };
4554
4542
  }
4555
4543
  /** JSDoc */
4556
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity
4557
- function computeStackTraceFromStackProp(ex) {
4558
- if (!ex || !ex.stack) {
4559
- return null;
4560
- }
4561
- const stack = [];
4562
- const lines = ex.stack.split('\n');
4544
+ // eslint-disable-next-line complexity
4545
+ function parseFrames(stackString) {
4546
+ const frames = [];
4547
+ const lines = stackString.split('\n');
4563
4548
  let isEval;
4564
4549
  let submatch;
4565
4550
  let parts;
4566
4551
  let element;
4567
4552
  for (const line of lines) {
4568
- if ((parts = chrome.exec(line))) {
4553
+ if ((parts = opera10Regex.exec(line))) {
4554
+ element = {
4555
+ filename: parts[2],
4556
+ function: parts[3] || UNKNOWN_FUNCTION,
4557
+ lineno: +parts[1],
4558
+ };
4559
+ }
4560
+ else if ((parts = opera11Regex.exec(line))) {
4561
+ element = {
4562
+ filename: parts[5],
4563
+ function: parts[3] || parts[4] || UNKNOWN_FUNCTION,
4564
+ lineno: +parts[1],
4565
+ colno: +parts[2],
4566
+ };
4567
+ }
4568
+ else if ((parts = chrome.exec(line))) {
4569
4569
  isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
4570
4570
  if (isEval && (submatch = chromeEval.exec(parts[2]))) {
4571
4571
  // throw out eval line/column and use top-most line/column number
@@ -4575,20 +4575,20 @@ var Sentry = (function (exports) {
4575
4575
  }
4576
4576
  // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
4577
4577
  // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
4578
- const [func, url] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);
4578
+ const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);
4579
4579
  element = {
4580
- url,
4581
- func,
4582
- line: parts[3] ? +parts[3] : null,
4583
- column: parts[4] ? +parts[4] : null,
4580
+ filename,
4581
+ function: func,
4582
+ lineno: parts[3] ? +parts[3] : undefined,
4583
+ colno: parts[4] ? +parts[4] : undefined,
4584
4584
  };
4585
4585
  }
4586
4586
  else if ((parts = winjs.exec(line))) {
4587
4587
  element = {
4588
- url: parts[2],
4589
- func: parts[1] || UNKNOWN_FUNCTION,
4590
- line: +parts[3],
4591
- column: parts[4] ? +parts[4] : null,
4588
+ filename: parts[2],
4589
+ function: parts[1] || UNKNOWN_FUNCTION,
4590
+ lineno: +parts[3],
4591
+ colno: parts[4] ? +parts[4] : undefined,
4592
4592
  };
4593
4593
  }
4594
4594
  else if ((parts = gecko.exec(line))) {
@@ -4600,78 +4600,22 @@ var Sentry = (function (exports) {
4600
4600
  parts[4] = submatch[2];
4601
4601
  parts[5] = ''; // no column when eval
4602
4602
  }
4603
- let url = parts[3];
4603
+ let filename = parts[3];
4604
4604
  let func = parts[1] || UNKNOWN_FUNCTION;
4605
- [func, url] = extractSafariExtensionDetails(func, url);
4605
+ [func, filename] = extractSafariExtensionDetails(func, filename);
4606
4606
  element = {
4607
- url,
4608
- func,
4609
- line: parts[4] ? +parts[4] : null,
4610
- column: parts[5] ? +parts[5] : null,
4607
+ filename,
4608
+ function: func,
4609
+ lineno: parts[4] ? +parts[4] : undefined,
4610
+ colno: parts[5] ? +parts[5] : undefined,
4611
4611
  };
4612
4612
  }
4613
4613
  else {
4614
4614
  continue;
4615
4615
  }
4616
- stack.push(element);
4617
- }
4618
- if (!stack.length) {
4619
- return null;
4620
- }
4621
- return {
4622
- message: extractMessage(ex),
4623
- name: ex.name,
4624
- stack,
4625
- };
4626
- }
4627
- /** JSDoc */
4628
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4629
- function computeStackTraceFromStacktraceProp(ex) {
4630
- if (!ex || !ex.stacktrace) {
4631
- return null;
4632
- }
4633
- // Access and store the stacktrace property before doing ANYTHING
4634
- // else to it because Opera is not very good at providing it
4635
- // reliably in other circumstances.
4636
- const stacktrace = ex.stacktrace;
4637
- const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
4638
- const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
4639
- const lines = stacktrace.split('\n');
4640
- const stack = [];
4641
- let parts;
4642
- for (let line = 0; line < lines.length; line += 2) {
4643
- let element = null;
4644
- if ((parts = opera10Regex.exec(lines[line]))) {
4645
- element = {
4646
- url: parts[2],
4647
- func: parts[3],
4648
- line: +parts[1],
4649
- column: null,
4650
- };
4651
- }
4652
- else if ((parts = opera11Regex.exec(lines[line]))) {
4653
- element = {
4654
- url: parts[5],
4655
- func: parts[3] || parts[4],
4656
- line: +parts[1],
4657
- column: +parts[2],
4658
- };
4659
- }
4660
- if (element) {
4661
- if (!element.func && element.line) {
4662
- element.func = UNKNOWN_FUNCTION;
4663
- }
4664
- stack.push(element);
4665
- }
4666
- }
4667
- if (!stack.length) {
4668
- return null;
4616
+ frames.push(element);
4669
4617
  }
4670
- return {
4671
- message: extractMessage(ex),
4672
- name: ex.name,
4673
- stack,
4674
- };
4618
+ return frames;
4675
4619
  }
4676
4620
  /**
4677
4621
  * Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
@@ -4693,25 +4637,16 @@ var Sentry = (function (exports) {
4693
4637
  * Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
4694
4638
  * and fix this case seems like an impossible, or at least way too time-consuming task.
4695
4639
  */
4696
- const extractSafariExtensionDetails = (func, url) => {
4640
+ const extractSafariExtensionDetails = (func, filename) => {
4697
4641
  const isSafariExtension = func.indexOf('safari-extension') !== -1;
4698
4642
  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
4699
4643
  return isSafariExtension || isSafariWebExtension
4700
4644
  ? [
4701
4645
  func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
4702
- isSafariExtension ? `safari-extension:${url}` : `safari-web-extension:${url}`,
4646
+ isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,
4703
4647
  ]
4704
- : [func, url];
4648
+ : [func, filename];
4705
4649
  };
4706
- /** Remove N number of frames from the stack */
4707
- function popFrames(stacktrace, popSize) {
4708
- try {
4709
- return Object.assign(Object.assign({}, stacktrace), { stack: stacktrace.stack.slice(popSize) });
4710
- }
4711
- catch (e) {
4712
- return stacktrace;
4713
- }
4714
- }
4715
4650
  /**
4716
4651
  * There are cases where stacktrace.message is an Event object
4717
4652
  * https://github.com/getsentry/sentry-javascript/issues/1949
@@ -4790,12 +4725,12 @@ var Sentry = (function (exports) {
4790
4725
  * @hidden
4791
4726
  */
4792
4727
  function prepareFramesForEvent(stack) {
4793
- if (!stack || !stack.length) {
4728
+ if (!stack.length) {
4794
4729
  return [];
4795
4730
  }
4796
4731
  let localStack = stack;
4797
- const firstFrameFunction = localStack[0].func || '';
4798
- const lastFrameFunction = localStack[localStack.length - 1].func || '';
4732
+ const firstFrameFunction = localStack[0].function || '';
4733
+ const lastFrameFunction = localStack[localStack.length - 1].function || '';
4799
4734
  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)
4800
4735
  if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {
4801
4736
  localStack = localStack.slice(1);
@@ -4807,12 +4742,12 @@ var Sentry = (function (exports) {
4807
4742
  // The frame where the crash happened, should be the last entry in the array
4808
4743
  return localStack
4809
4744
  .slice(0, STACKTRACE_LIMIT)
4810
- .map((frame) => ({
4811
- colno: frame.column === null ? undefined : frame.column,
4812
- filename: frame.url || localStack[0].url,
4813
- function: frame.func || '?',
4745
+ .map(frame => ({
4746
+ filename: frame.filename || localStack[0].filename,
4747
+ function: frame.function || '?',
4748
+ lineno: frame.lineno,
4749
+ colno: frame.colno,
4814
4750
  in_app: true,
4815
- lineno: frame.line === null ? undefined : frame.line,
4816
4751
  }))
4817
4752
  .reverse();
4818
4753
  }