@sentry/browser 10.53.1 → 10.55.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.
Files changed (457) hide show
  1. package/build/npm/cjs/dev/client.js +15 -54
  2. package/build/npm/cjs/dev/client.js.map +1 -1
  3. package/build/npm/cjs/dev/debug-build.js +0 -5
  4. package/build/npm/cjs/dev/debug-build.js.map +1 -1
  5. package/build/npm/cjs/dev/diagnose-sdk.js +15 -37
  6. package/build/npm/cjs/dev/diagnose-sdk.js.map +1 -1
  7. package/build/npm/cjs/dev/eventbuilder.js +59 -217
  8. package/build/npm/cjs/dev/eventbuilder.js.map +1 -1
  9. package/build/npm/cjs/dev/feedbackAsync.js +1 -5
  10. package/build/npm/cjs/dev/feedbackAsync.js.map +1 -1
  11. package/build/npm/cjs/dev/feedbackSync.js +1 -2
  12. package/build/npm/cjs/dev/feedbackSync.js.map +1 -1
  13. package/build/npm/cjs/dev/helpers.js +24 -102
  14. package/build/npm/cjs/dev/helpers.js.map +1 -1
  15. package/build/npm/cjs/dev/index.js +4 -0
  16. package/build/npm/cjs/dev/index.js.map +1 -1
  17. package/build/npm/cjs/dev/integrations/breadcrumbs.js +53 -135
  18. package/build/npm/cjs/dev/integrations/breadcrumbs.js.map +1 -1
  19. package/build/npm/cjs/dev/integrations/browserapierrors.js +45 -111
  20. package/build/npm/cjs/dev/integrations/browserapierrors.js.map +1 -1
  21. package/build/npm/cjs/dev/integrations/browsersession.js +7 -35
  22. package/build/npm/cjs/dev/integrations/browsersession.js.map +1 -1
  23. package/build/npm/cjs/dev/integrations/contextlines.js +9 -45
  24. package/build/npm/cjs/dev/integrations/contextlines.js.map +1 -1
  25. package/build/npm/cjs/dev/integrations/culturecontext.js +11 -36
  26. package/build/npm/cjs/dev/integrations/culturecontext.js.map +1 -1
  27. package/build/npm/cjs/dev/integrations/featureFlags/growthbook/integration.js +1 -22
  28. package/build/npm/cjs/dev/integrations/featureFlags/growthbook/integration.js.map +1 -1
  29. package/build/npm/cjs/dev/integrations/featureFlags/launchdarkly/integration.js +6 -31
  30. package/build/npm/cjs/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  31. package/build/npm/cjs/dev/integrations/featureFlags/openfeature/integration.js +6 -12
  32. package/build/npm/cjs/dev/integrations/featureFlags/openfeature/integration.js.map +1 -1
  33. package/build/npm/cjs/dev/integrations/featureFlags/statsig/integration.js +5 -30
  34. package/build/npm/cjs/dev/integrations/featureFlags/statsig/integration.js.map +1 -1
  35. package/build/npm/cjs/dev/integrations/featureFlags/unleash/integration.js +10 -47
  36. package/build/npm/cjs/dev/integrations/featureFlags/unleash/integration.js.map +1 -1
  37. package/build/npm/cjs/dev/integrations/fetchStreamPerformance.js +60 -0
  38. package/build/npm/cjs/dev/integrations/fetchStreamPerformance.js.map +1 -0
  39. package/build/npm/cjs/dev/integrations/globalhandlers.js +38 -99
  40. package/build/npm/cjs/dev/integrations/globalhandlers.js.map +1 -1
  41. package/build/npm/cjs/dev/integrations/graphqlClient.js +31 -119
  42. package/build/npm/cjs/dev/integrations/graphqlClient.js.map +1 -1
  43. package/build/npm/cjs/dev/integrations/httpclient.js +43 -203
  44. package/build/npm/cjs/dev/integrations/httpclient.js.map +1 -1
  45. package/build/npm/cjs/dev/integrations/httpcontext.js +7 -17
  46. package/build/npm/cjs/dev/integrations/httpcontext.js.map +1 -1
  47. package/build/npm/cjs/dev/integrations/linkederrors.js +7 -15
  48. package/build/npm/cjs/dev/integrations/linkederrors.js.map +1 -1
  49. package/build/npm/cjs/dev/integrations/reportingobserver.js +19 -44
  50. package/build/npm/cjs/dev/integrations/reportingobserver.js.map +1 -1
  51. package/build/npm/cjs/dev/integrations/spanstreaming.js +11 -29
  52. package/build/npm/cjs/dev/integrations/spanstreaming.js.map +1 -1
  53. package/build/npm/cjs/dev/integrations/spotlight.js +17 -30
  54. package/build/npm/cjs/dev/integrations/spotlight.js.map +1 -1
  55. package/build/npm/cjs/dev/integrations/view-hierarchy.js +19 -46
  56. package/build/npm/cjs/dev/integrations/view-hierarchy.js.map +1 -1
  57. package/build/npm/cjs/dev/integrations/webWorker.js +40 -211
  58. package/build/npm/cjs/dev/integrations/webWorker.js.map +1 -1
  59. package/build/npm/cjs/dev/normalizeStringifyValue.js +27 -0
  60. package/build/npm/cjs/dev/normalizeStringifyValue.js.map +1 -0
  61. package/build/npm/cjs/dev/profiling/UIProfiler.js +87 -190
  62. package/build/npm/cjs/dev/profiling/UIProfiler.js.map +1 -1
  63. package/build/npm/cjs/dev/profiling/index.js +9 -30
  64. package/build/npm/cjs/dev/profiling/index.js.map +1 -1
  65. package/build/npm/cjs/dev/profiling/integration.js +30 -64
  66. package/build/npm/cjs/dev/profiling/integration.js.map +1 -1
  67. package/build/npm/cjs/dev/profiling/startProfileForSpan.js +28 -84
  68. package/build/npm/cjs/dev/profiling/startProfileForSpan.js.map +1 -1
  69. package/build/npm/cjs/dev/profiling/utils.js +131 -398
  70. package/build/npm/cjs/dev/profiling/utils.js.map +1 -1
  71. package/build/npm/cjs/dev/report-dialog.js +10 -25
  72. package/build/npm/cjs/dev/report-dialog.js.map +1 -1
  73. package/build/npm/cjs/dev/sdk.js +10 -76
  74. package/build/npm/cjs/dev/sdk.js.map +1 -1
  75. package/build/npm/cjs/dev/stack-parsers.js +42 -126
  76. package/build/npm/cjs/dev/stack-parsers.js.map +1 -1
  77. package/build/npm/cjs/dev/tracing/backgroundtab.js +4 -16
  78. package/build/npm/cjs/dev/tracing/backgroundtab.js.map +1 -1
  79. package/build/npm/cjs/dev/tracing/browserTracingIntegration.js +102 -291
  80. package/build/npm/cjs/dev/tracing/browserTracingIntegration.js.map +1 -1
  81. package/build/npm/cjs/dev/tracing/linkedTraces.js +25 -116
  82. package/build/npm/cjs/dev/tracing/linkedTraces.js.map +1 -1
  83. package/build/npm/cjs/dev/tracing/reportPageLoaded.js +1 -9
  84. package/build/npm/cjs/dev/tracing/reportPageLoaded.js.map +1 -1
  85. package/build/npm/cjs/dev/tracing/request.js +58 -223
  86. package/build/npm/cjs/dev/tracing/request.js.map +1 -1
  87. package/build/npm/cjs/dev/tracing/setActiveSpan.js +1 -48
  88. package/build/npm/cjs/dev/tracing/setActiveSpan.js.map +1 -1
  89. package/build/npm/cjs/dev/tracing/utils.js +4 -27
  90. package/build/npm/cjs/dev/tracing/utils.js.map +1 -1
  91. package/build/npm/cjs/dev/transports/fetch.js +10 -23
  92. package/build/npm/cjs/dev/transports/fetch.js.map +1 -1
  93. package/build/npm/cjs/dev/transports/offline.js +27 -84
  94. package/build/npm/cjs/dev/transports/offline.js.map +1 -1
  95. package/build/npm/cjs/dev/userfeedback.js +12 -22
  96. package/build/npm/cjs/dev/userfeedback.js.map +1 -1
  97. package/build/npm/cjs/dev/utils/detectBrowserExtension.js +5 -26
  98. package/build/npm/cjs/dev/utils/detectBrowserExtension.js.map +1 -1
  99. package/build/npm/cjs/dev/utils/lazyLoadIntegration.js +40 -75
  100. package/build/npm/cjs/dev/utils/lazyLoadIntegration.js.map +1 -1
  101. package/build/npm/cjs/prod/client.js +15 -54
  102. package/build/npm/cjs/prod/client.js.map +1 -1
  103. package/build/npm/cjs/prod/debug-build.js +0 -5
  104. package/build/npm/cjs/prod/debug-build.js.map +1 -1
  105. package/build/npm/cjs/prod/diagnose-sdk.js +15 -37
  106. package/build/npm/cjs/prod/diagnose-sdk.js.map +1 -1
  107. package/build/npm/cjs/prod/eventbuilder.js +59 -217
  108. package/build/npm/cjs/prod/eventbuilder.js.map +1 -1
  109. package/build/npm/cjs/prod/feedbackAsync.js +1 -5
  110. package/build/npm/cjs/prod/feedbackAsync.js.map +1 -1
  111. package/build/npm/cjs/prod/feedbackSync.js +1 -2
  112. package/build/npm/cjs/prod/feedbackSync.js.map +1 -1
  113. package/build/npm/cjs/prod/helpers.js +24 -102
  114. package/build/npm/cjs/prod/helpers.js.map +1 -1
  115. package/build/npm/cjs/prod/index.js +4 -0
  116. package/build/npm/cjs/prod/index.js.map +1 -1
  117. package/build/npm/cjs/prod/integrations/breadcrumbs.js +53 -135
  118. package/build/npm/cjs/prod/integrations/breadcrumbs.js.map +1 -1
  119. package/build/npm/cjs/prod/integrations/browserapierrors.js +45 -111
  120. package/build/npm/cjs/prod/integrations/browserapierrors.js.map +1 -1
  121. package/build/npm/cjs/prod/integrations/browsersession.js +7 -35
  122. package/build/npm/cjs/prod/integrations/browsersession.js.map +1 -1
  123. package/build/npm/cjs/prod/integrations/contextlines.js +9 -45
  124. package/build/npm/cjs/prod/integrations/contextlines.js.map +1 -1
  125. package/build/npm/cjs/prod/integrations/culturecontext.js +11 -36
  126. package/build/npm/cjs/prod/integrations/culturecontext.js.map +1 -1
  127. package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js +1 -22
  128. package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js.map +1 -1
  129. package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js +6 -31
  130. package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  131. package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js +6 -12
  132. package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js.map +1 -1
  133. package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js +5 -30
  134. package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js.map +1 -1
  135. package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js +10 -47
  136. package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js.map +1 -1
  137. package/build/npm/cjs/prod/integrations/fetchStreamPerformance.js +60 -0
  138. package/build/npm/cjs/prod/integrations/fetchStreamPerformance.js.map +1 -0
  139. package/build/npm/cjs/prod/integrations/globalhandlers.js +38 -99
  140. package/build/npm/cjs/prod/integrations/globalhandlers.js.map +1 -1
  141. package/build/npm/cjs/prod/integrations/graphqlClient.js +31 -119
  142. package/build/npm/cjs/prod/integrations/graphqlClient.js.map +1 -1
  143. package/build/npm/cjs/prod/integrations/httpclient.js +43 -203
  144. package/build/npm/cjs/prod/integrations/httpclient.js.map +1 -1
  145. package/build/npm/cjs/prod/integrations/httpcontext.js +7 -17
  146. package/build/npm/cjs/prod/integrations/httpcontext.js.map +1 -1
  147. package/build/npm/cjs/prod/integrations/linkederrors.js +7 -15
  148. package/build/npm/cjs/prod/integrations/linkederrors.js.map +1 -1
  149. package/build/npm/cjs/prod/integrations/reportingobserver.js +19 -44
  150. package/build/npm/cjs/prod/integrations/reportingobserver.js.map +1 -1
  151. package/build/npm/cjs/prod/integrations/spanstreaming.js +11 -29
  152. package/build/npm/cjs/prod/integrations/spanstreaming.js.map +1 -1
  153. package/build/npm/cjs/prod/integrations/spotlight.js +17 -30
  154. package/build/npm/cjs/prod/integrations/spotlight.js.map +1 -1
  155. package/build/npm/cjs/prod/integrations/view-hierarchy.js +19 -46
  156. package/build/npm/cjs/prod/integrations/view-hierarchy.js.map +1 -1
  157. package/build/npm/cjs/prod/integrations/webWorker.js +40 -211
  158. package/build/npm/cjs/prod/integrations/webWorker.js.map +1 -1
  159. package/build/npm/cjs/prod/normalizeStringifyValue.js +27 -0
  160. package/build/npm/cjs/prod/normalizeStringifyValue.js.map +1 -0
  161. package/build/npm/cjs/prod/profiling/UIProfiler.js +87 -190
  162. package/build/npm/cjs/prod/profiling/UIProfiler.js.map +1 -1
  163. package/build/npm/cjs/prod/profiling/index.js +9 -30
  164. package/build/npm/cjs/prod/profiling/index.js.map +1 -1
  165. package/build/npm/cjs/prod/profiling/integration.js +30 -64
  166. package/build/npm/cjs/prod/profiling/integration.js.map +1 -1
  167. package/build/npm/cjs/prod/profiling/startProfileForSpan.js +28 -84
  168. package/build/npm/cjs/prod/profiling/startProfileForSpan.js.map +1 -1
  169. package/build/npm/cjs/prod/profiling/utils.js +131 -398
  170. package/build/npm/cjs/prod/profiling/utils.js.map +1 -1
  171. package/build/npm/cjs/prod/report-dialog.js +10 -25
  172. package/build/npm/cjs/prod/report-dialog.js.map +1 -1
  173. package/build/npm/cjs/prod/sdk.js +7 -73
  174. package/build/npm/cjs/prod/sdk.js.map +1 -1
  175. package/build/npm/cjs/prod/stack-parsers.js +42 -126
  176. package/build/npm/cjs/prod/stack-parsers.js.map +1 -1
  177. package/build/npm/cjs/prod/tracing/backgroundtab.js +4 -16
  178. package/build/npm/cjs/prod/tracing/backgroundtab.js.map +1 -1
  179. package/build/npm/cjs/prod/tracing/browserTracingIntegration.js +102 -291
  180. package/build/npm/cjs/prod/tracing/browserTracingIntegration.js.map +1 -1
  181. package/build/npm/cjs/prod/tracing/linkedTraces.js +25 -117
  182. package/build/npm/cjs/prod/tracing/linkedTraces.js.map +1 -1
  183. package/build/npm/cjs/prod/tracing/reportPageLoaded.js +1 -9
  184. package/build/npm/cjs/prod/tracing/reportPageLoaded.js.map +1 -1
  185. package/build/npm/cjs/prod/tracing/request.js +58 -223
  186. package/build/npm/cjs/prod/tracing/request.js.map +1 -1
  187. package/build/npm/cjs/prod/tracing/setActiveSpan.js +1 -48
  188. package/build/npm/cjs/prod/tracing/setActiveSpan.js.map +1 -1
  189. package/build/npm/cjs/prod/tracing/utils.js +4 -27
  190. package/build/npm/cjs/prod/tracing/utils.js.map +1 -1
  191. package/build/npm/cjs/prod/transports/fetch.js +10 -23
  192. package/build/npm/cjs/prod/transports/fetch.js.map +1 -1
  193. package/build/npm/cjs/prod/transports/offline.js +27 -84
  194. package/build/npm/cjs/prod/transports/offline.js.map +1 -1
  195. package/build/npm/cjs/prod/userfeedback.js +12 -22
  196. package/build/npm/cjs/prod/userfeedback.js.map +1 -1
  197. package/build/npm/cjs/prod/utils/detectBrowserExtension.js +5 -26
  198. package/build/npm/cjs/prod/utils/detectBrowserExtension.js.map +1 -1
  199. package/build/npm/cjs/prod/utils/lazyLoadIntegration.js +40 -75
  200. package/build/npm/cjs/prod/utils/lazyLoadIntegration.js.map +1 -1
  201. package/build/npm/esm/dev/client.js +15 -54
  202. package/build/npm/esm/dev/client.js.map +1 -1
  203. package/build/npm/esm/dev/debug-build.js +0 -5
  204. package/build/npm/esm/dev/debug-build.js.map +1 -1
  205. package/build/npm/esm/dev/diagnose-sdk.js +15 -37
  206. package/build/npm/esm/dev/diagnose-sdk.js.map +1 -1
  207. package/build/npm/esm/dev/eventbuilder.js +59 -217
  208. package/build/npm/esm/dev/eventbuilder.js.map +1 -1
  209. package/build/npm/esm/dev/feedbackAsync.js +1 -5
  210. package/build/npm/esm/dev/feedbackAsync.js.map +1 -1
  211. package/build/npm/esm/dev/feedbackSync.js +1 -2
  212. package/build/npm/esm/dev/feedbackSync.js.map +1 -1
  213. package/build/npm/esm/dev/helpers.js +24 -102
  214. package/build/npm/esm/dev/helpers.js.map +1 -1
  215. package/build/npm/esm/dev/index.js +2 -0
  216. package/build/npm/esm/dev/index.js.map +1 -1
  217. package/build/npm/esm/dev/integrations/breadcrumbs.js +54 -136
  218. package/build/npm/esm/dev/integrations/breadcrumbs.js.map +1 -1
  219. package/build/npm/esm/dev/integrations/browserapierrors.js +45 -111
  220. package/build/npm/esm/dev/integrations/browserapierrors.js.map +1 -1
  221. package/build/npm/esm/dev/integrations/browsersession.js +7 -35
  222. package/build/npm/esm/dev/integrations/browsersession.js.map +1 -1
  223. package/build/npm/esm/dev/integrations/contextlines.js +9 -45
  224. package/build/npm/esm/dev/integrations/contextlines.js.map +1 -1
  225. package/build/npm/esm/dev/integrations/culturecontext.js +11 -36
  226. package/build/npm/esm/dev/integrations/culturecontext.js.map +1 -1
  227. package/build/npm/esm/dev/integrations/featureFlags/growthbook/integration.js +1 -22
  228. package/build/npm/esm/dev/integrations/featureFlags/growthbook/integration.js.map +1 -1
  229. package/build/npm/esm/dev/integrations/featureFlags/launchdarkly/integration.js +6 -31
  230. package/build/npm/esm/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  231. package/build/npm/esm/dev/integrations/featureFlags/openfeature/integration.js +6 -12
  232. package/build/npm/esm/dev/integrations/featureFlags/openfeature/integration.js.map +1 -1
  233. package/build/npm/esm/dev/integrations/featureFlags/statsig/integration.js +5 -30
  234. package/build/npm/esm/dev/integrations/featureFlags/statsig/integration.js.map +1 -1
  235. package/build/npm/esm/dev/integrations/featureFlags/unleash/integration.js +10 -47
  236. package/build/npm/esm/dev/integrations/featureFlags/unleash/integration.js.map +1 -1
  237. package/build/npm/esm/dev/integrations/fetchStreamPerformance.js +58 -0
  238. package/build/npm/esm/dev/integrations/fetchStreamPerformance.js.map +1 -0
  239. package/build/npm/esm/dev/integrations/globalhandlers.js +38 -99
  240. package/build/npm/esm/dev/integrations/globalhandlers.js.map +1 -1
  241. package/build/npm/esm/dev/integrations/graphqlClient.js +31 -119
  242. package/build/npm/esm/dev/integrations/graphqlClient.js.map +1 -1
  243. package/build/npm/esm/dev/integrations/httpclient.js +43 -203
  244. package/build/npm/esm/dev/integrations/httpclient.js.map +1 -1
  245. package/build/npm/esm/dev/integrations/httpcontext.js +7 -17
  246. package/build/npm/esm/dev/integrations/httpcontext.js.map +1 -1
  247. package/build/npm/esm/dev/integrations/linkederrors.js +7 -15
  248. package/build/npm/esm/dev/integrations/linkederrors.js.map +1 -1
  249. package/build/npm/esm/dev/integrations/reportingobserver.js +19 -44
  250. package/build/npm/esm/dev/integrations/reportingobserver.js.map +1 -1
  251. package/build/npm/esm/dev/integrations/spanstreaming.js +11 -29
  252. package/build/npm/esm/dev/integrations/spanstreaming.js.map +1 -1
  253. package/build/npm/esm/dev/integrations/spotlight.js +17 -30
  254. package/build/npm/esm/dev/integrations/spotlight.js.map +1 -1
  255. package/build/npm/esm/dev/integrations/view-hierarchy.js +19 -46
  256. package/build/npm/esm/dev/integrations/view-hierarchy.js.map +1 -1
  257. package/build/npm/esm/dev/integrations/webWorker.js +40 -211
  258. package/build/npm/esm/dev/integrations/webWorker.js.map +1 -1
  259. package/build/npm/esm/dev/normalizeStringifyValue.js +25 -0
  260. package/build/npm/esm/dev/normalizeStringifyValue.js.map +1 -0
  261. package/build/npm/esm/dev/package.json +1 -1
  262. package/build/npm/esm/dev/profiling/UIProfiler.js +87 -190
  263. package/build/npm/esm/dev/profiling/UIProfiler.js.map +1 -1
  264. package/build/npm/esm/dev/profiling/index.js +9 -30
  265. package/build/npm/esm/dev/profiling/index.js.map +1 -1
  266. package/build/npm/esm/dev/profiling/integration.js +30 -64
  267. package/build/npm/esm/dev/profiling/integration.js.map +1 -1
  268. package/build/npm/esm/dev/profiling/startProfileForSpan.js +28 -84
  269. package/build/npm/esm/dev/profiling/startProfileForSpan.js.map +1 -1
  270. package/build/npm/esm/dev/profiling/utils.js +131 -398
  271. package/build/npm/esm/dev/profiling/utils.js.map +1 -1
  272. package/build/npm/esm/dev/report-dialog.js +10 -25
  273. package/build/npm/esm/dev/report-dialog.js.map +1 -1
  274. package/build/npm/esm/dev/sdk.js +11 -77
  275. package/build/npm/esm/dev/sdk.js.map +1 -1
  276. package/build/npm/esm/dev/stack-parsers.js +42 -126
  277. package/build/npm/esm/dev/stack-parsers.js.map +1 -1
  278. package/build/npm/esm/dev/tracing/backgroundtab.js +4 -16
  279. package/build/npm/esm/dev/tracing/backgroundtab.js.map +1 -1
  280. package/build/npm/esm/dev/tracing/browserTracingIntegration.js +102 -291
  281. package/build/npm/esm/dev/tracing/browserTracingIntegration.js.map +1 -1
  282. package/build/npm/esm/dev/tracing/linkedTraces.js +25 -116
  283. package/build/npm/esm/dev/tracing/linkedTraces.js.map +1 -1
  284. package/build/npm/esm/dev/tracing/reportPageLoaded.js +1 -9
  285. package/build/npm/esm/dev/tracing/reportPageLoaded.js.map +1 -1
  286. package/build/npm/esm/dev/tracing/request.js +59 -224
  287. package/build/npm/esm/dev/tracing/request.js.map +1 -1
  288. package/build/npm/esm/dev/tracing/setActiveSpan.js +1 -48
  289. package/build/npm/esm/dev/tracing/setActiveSpan.js.map +1 -1
  290. package/build/npm/esm/dev/tracing/utils.js +4 -27
  291. package/build/npm/esm/dev/tracing/utils.js.map +1 -1
  292. package/build/npm/esm/dev/transports/fetch.js +10 -23
  293. package/build/npm/esm/dev/transports/fetch.js.map +1 -1
  294. package/build/npm/esm/dev/transports/offline.js +27 -84
  295. package/build/npm/esm/dev/transports/offline.js.map +1 -1
  296. package/build/npm/esm/dev/userfeedback.js +12 -22
  297. package/build/npm/esm/dev/userfeedback.js.map +1 -1
  298. package/build/npm/esm/dev/utils/detectBrowserExtension.js +5 -26
  299. package/build/npm/esm/dev/utils/detectBrowserExtension.js.map +1 -1
  300. package/build/npm/esm/dev/utils/lazyLoadIntegration.js +40 -75
  301. package/build/npm/esm/dev/utils/lazyLoadIntegration.js.map +1 -1
  302. package/build/npm/esm/prod/client.js +15 -54
  303. package/build/npm/esm/prod/client.js.map +1 -1
  304. package/build/npm/esm/prod/debug-build.js +0 -5
  305. package/build/npm/esm/prod/debug-build.js.map +1 -1
  306. package/build/npm/esm/prod/diagnose-sdk.js +15 -37
  307. package/build/npm/esm/prod/diagnose-sdk.js.map +1 -1
  308. package/build/npm/esm/prod/eventbuilder.js +59 -217
  309. package/build/npm/esm/prod/eventbuilder.js.map +1 -1
  310. package/build/npm/esm/prod/feedbackAsync.js +1 -5
  311. package/build/npm/esm/prod/feedbackAsync.js.map +1 -1
  312. package/build/npm/esm/prod/feedbackSync.js +1 -2
  313. package/build/npm/esm/prod/feedbackSync.js.map +1 -1
  314. package/build/npm/esm/prod/helpers.js +24 -102
  315. package/build/npm/esm/prod/helpers.js.map +1 -1
  316. package/build/npm/esm/prod/index.js +2 -0
  317. package/build/npm/esm/prod/index.js.map +1 -1
  318. package/build/npm/esm/prod/integrations/breadcrumbs.js +54 -136
  319. package/build/npm/esm/prod/integrations/breadcrumbs.js.map +1 -1
  320. package/build/npm/esm/prod/integrations/browserapierrors.js +45 -111
  321. package/build/npm/esm/prod/integrations/browserapierrors.js.map +1 -1
  322. package/build/npm/esm/prod/integrations/browsersession.js +7 -35
  323. package/build/npm/esm/prod/integrations/browsersession.js.map +1 -1
  324. package/build/npm/esm/prod/integrations/contextlines.js +9 -45
  325. package/build/npm/esm/prod/integrations/contextlines.js.map +1 -1
  326. package/build/npm/esm/prod/integrations/culturecontext.js +11 -36
  327. package/build/npm/esm/prod/integrations/culturecontext.js.map +1 -1
  328. package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js +1 -22
  329. package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js.map +1 -1
  330. package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js +6 -31
  331. package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
  332. package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js +6 -12
  333. package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js.map +1 -1
  334. package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js +5 -30
  335. package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js.map +1 -1
  336. package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js +10 -47
  337. package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js.map +1 -1
  338. package/build/npm/esm/prod/integrations/fetchStreamPerformance.js +58 -0
  339. package/build/npm/esm/prod/integrations/fetchStreamPerformance.js.map +1 -0
  340. package/build/npm/esm/prod/integrations/globalhandlers.js +38 -99
  341. package/build/npm/esm/prod/integrations/globalhandlers.js.map +1 -1
  342. package/build/npm/esm/prod/integrations/graphqlClient.js +31 -119
  343. package/build/npm/esm/prod/integrations/graphqlClient.js.map +1 -1
  344. package/build/npm/esm/prod/integrations/httpclient.js +43 -203
  345. package/build/npm/esm/prod/integrations/httpclient.js.map +1 -1
  346. package/build/npm/esm/prod/integrations/httpcontext.js +7 -17
  347. package/build/npm/esm/prod/integrations/httpcontext.js.map +1 -1
  348. package/build/npm/esm/prod/integrations/linkederrors.js +7 -15
  349. package/build/npm/esm/prod/integrations/linkederrors.js.map +1 -1
  350. package/build/npm/esm/prod/integrations/reportingobserver.js +19 -44
  351. package/build/npm/esm/prod/integrations/reportingobserver.js.map +1 -1
  352. package/build/npm/esm/prod/integrations/spanstreaming.js +11 -29
  353. package/build/npm/esm/prod/integrations/spanstreaming.js.map +1 -1
  354. package/build/npm/esm/prod/integrations/spotlight.js +17 -30
  355. package/build/npm/esm/prod/integrations/spotlight.js.map +1 -1
  356. package/build/npm/esm/prod/integrations/view-hierarchy.js +19 -46
  357. package/build/npm/esm/prod/integrations/view-hierarchy.js.map +1 -1
  358. package/build/npm/esm/prod/integrations/webWorker.js +40 -211
  359. package/build/npm/esm/prod/integrations/webWorker.js.map +1 -1
  360. package/build/npm/esm/prod/normalizeStringifyValue.js +25 -0
  361. package/build/npm/esm/prod/normalizeStringifyValue.js.map +1 -0
  362. package/build/npm/esm/prod/package.json +1 -1
  363. package/build/npm/esm/prod/profiling/UIProfiler.js +87 -190
  364. package/build/npm/esm/prod/profiling/UIProfiler.js.map +1 -1
  365. package/build/npm/esm/prod/profiling/index.js +9 -30
  366. package/build/npm/esm/prod/profiling/index.js.map +1 -1
  367. package/build/npm/esm/prod/profiling/integration.js +30 -64
  368. package/build/npm/esm/prod/profiling/integration.js.map +1 -1
  369. package/build/npm/esm/prod/profiling/startProfileForSpan.js +28 -84
  370. package/build/npm/esm/prod/profiling/startProfileForSpan.js.map +1 -1
  371. package/build/npm/esm/prod/profiling/utils.js +131 -398
  372. package/build/npm/esm/prod/profiling/utils.js.map +1 -1
  373. package/build/npm/esm/prod/report-dialog.js +10 -25
  374. package/build/npm/esm/prod/report-dialog.js.map +1 -1
  375. package/build/npm/esm/prod/sdk.js +8 -74
  376. package/build/npm/esm/prod/sdk.js.map +1 -1
  377. package/build/npm/esm/prod/stack-parsers.js +42 -126
  378. package/build/npm/esm/prod/stack-parsers.js.map +1 -1
  379. package/build/npm/esm/prod/tracing/backgroundtab.js +4 -16
  380. package/build/npm/esm/prod/tracing/backgroundtab.js.map +1 -1
  381. package/build/npm/esm/prod/tracing/browserTracingIntegration.js +102 -291
  382. package/build/npm/esm/prod/tracing/browserTracingIntegration.js.map +1 -1
  383. package/build/npm/esm/prod/tracing/linkedTraces.js +25 -117
  384. package/build/npm/esm/prod/tracing/linkedTraces.js.map +1 -1
  385. package/build/npm/esm/prod/tracing/reportPageLoaded.js +1 -9
  386. package/build/npm/esm/prod/tracing/reportPageLoaded.js.map +1 -1
  387. package/build/npm/esm/prod/tracing/request.js +59 -224
  388. package/build/npm/esm/prod/tracing/request.js.map +1 -1
  389. package/build/npm/esm/prod/tracing/setActiveSpan.js +1 -48
  390. package/build/npm/esm/prod/tracing/setActiveSpan.js.map +1 -1
  391. package/build/npm/esm/prod/tracing/utils.js +4 -27
  392. package/build/npm/esm/prod/tracing/utils.js.map +1 -1
  393. package/build/npm/esm/prod/transports/fetch.js +10 -23
  394. package/build/npm/esm/prod/transports/fetch.js.map +1 -1
  395. package/build/npm/esm/prod/transports/offline.js +27 -84
  396. package/build/npm/esm/prod/transports/offline.js.map +1 -1
  397. package/build/npm/esm/prod/userfeedback.js +12 -22
  398. package/build/npm/esm/prod/userfeedback.js.map +1 -1
  399. package/build/npm/esm/prod/utils/detectBrowserExtension.js +5 -26
  400. package/build/npm/esm/prod/utils/detectBrowserExtension.js.map +1 -1
  401. package/build/npm/esm/prod/utils/lazyLoadIntegration.js +40 -75
  402. package/build/npm/esm/prod/utils/lazyLoadIntegration.js.map +1 -1
  403. package/build/npm/types/eventbuilder.d.ts.map +1 -1
  404. package/build/npm/types/helpers.d.ts.map +1 -1
  405. package/build/npm/types/index.bundle.d.ts +2 -2
  406. package/build/npm/types/index.bundle.d.ts.map +1 -1
  407. package/build/npm/types/index.bundle.feedback.d.ts +2 -2
  408. package/build/npm/types/index.bundle.feedback.d.ts.map +1 -1
  409. package/build/npm/types/index.bundle.logs.metrics.d.ts +2 -2
  410. package/build/npm/types/index.bundle.logs.metrics.d.ts.map +1 -1
  411. package/build/npm/types/index.bundle.replay.d.ts +2 -2
  412. package/build/npm/types/index.bundle.replay.d.ts.map +1 -1
  413. package/build/npm/types/index.bundle.replay.feedback.d.ts +2 -2
  414. package/build/npm/types/index.bundle.replay.feedback.d.ts.map +1 -1
  415. package/build/npm/types/index.bundle.replay.logs.metrics.d.ts +2 -2
  416. package/build/npm/types/index.bundle.replay.logs.metrics.d.ts.map +1 -1
  417. package/build/npm/types/index.bundle.tracing.d.ts +1 -0
  418. package/build/npm/types/index.bundle.tracing.d.ts.map +1 -1
  419. package/build/npm/types/index.bundle.tracing.logs.metrics.d.ts +1 -0
  420. package/build/npm/types/index.bundle.tracing.logs.metrics.d.ts.map +1 -1
  421. package/build/npm/types/index.bundle.tracing.replay.d.ts +1 -0
  422. package/build/npm/types/index.bundle.tracing.replay.d.ts.map +1 -1
  423. package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts +1 -0
  424. package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts.map +1 -1
  425. package/build/npm/types/index.bundle.tracing.replay.feedback.logs.metrics.d.ts +1 -0
  426. package/build/npm/types/index.bundle.tracing.replay.feedback.logs.metrics.d.ts.map +1 -1
  427. package/build/npm/types/index.bundle.tracing.replay.logs.metrics.d.ts +1 -0
  428. package/build/npm/types/index.bundle.tracing.replay.logs.metrics.d.ts.map +1 -1
  429. package/build/npm/types/index.d.ts +2 -0
  430. package/build/npm/types/index.d.ts.map +1 -1
  431. package/build/npm/types/integrations/fetchStreamPerformance.d.ts +14 -0
  432. package/build/npm/types/integrations/fetchStreamPerformance.d.ts.map +1 -0
  433. package/build/npm/types/normalizeStringifyValue.d.ts +15 -0
  434. package/build/npm/types/normalizeStringifyValue.d.ts.map +1 -0
  435. package/build/npm/types/sdk.d.ts.map +1 -1
  436. package/build/npm/types/tracing/browserTracingIntegration.d.ts +3 -0
  437. package/build/npm/types/tracing/browserTracingIntegration.d.ts.map +1 -1
  438. package/build/npm/types/tracing/request.d.ts +3 -0
  439. package/build/npm/types/tracing/request.d.ts.map +1 -1
  440. package/build/npm/types-ts3.8/index.bundle.d.ts +2 -2
  441. package/build/npm/types-ts3.8/index.bundle.feedback.d.ts +2 -2
  442. package/build/npm/types-ts3.8/index.bundle.logs.metrics.d.ts +2 -2
  443. package/build/npm/types-ts3.8/index.bundle.replay.d.ts +2 -2
  444. package/build/npm/types-ts3.8/index.bundle.replay.feedback.d.ts +2 -2
  445. package/build/npm/types-ts3.8/index.bundle.replay.logs.metrics.d.ts +2 -2
  446. package/build/npm/types-ts3.8/index.bundle.tracing.d.ts +1 -0
  447. package/build/npm/types-ts3.8/index.bundle.tracing.logs.metrics.d.ts +1 -0
  448. package/build/npm/types-ts3.8/index.bundle.tracing.replay.d.ts +1 -0
  449. package/build/npm/types-ts3.8/index.bundle.tracing.replay.feedback.d.ts +1 -0
  450. package/build/npm/types-ts3.8/index.bundle.tracing.replay.feedback.logs.metrics.d.ts +1 -0
  451. package/build/npm/types-ts3.8/index.bundle.tracing.replay.logs.metrics.d.ts +1 -0
  452. package/build/npm/types-ts3.8/index.d.ts +2 -0
  453. package/build/npm/types-ts3.8/integrations/fetchStreamPerformance.d.ts +14 -0
  454. package/build/npm/types-ts3.8/normalizeStringifyValue.d.ts +15 -0
  455. package/build/npm/types-ts3.8/tracing/browserTracingIntegration.d.ts +3 -0
  456. package/build/npm/types-ts3.8/tracing/request.d.ts +3 -0
  457. package/package.json +7 -7
@@ -5,189 +5,105 @@ const OPERA11_PRIORITY = 20;
5
5
  const CHROME_PRIORITY = 30;
6
6
  const WINJS_PRIORITY = 40;
7
7
  const GECKO_PRIORITY = 50;
8
-
9
8
  function createFrame(filename, func, lineno, colno) {
10
9
  const frame = {
11
10
  filename,
12
- function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,
13
- in_app: true, // All browser frames are considered in_app
11
+ function: func === "<anonymous>" ? UNKNOWN_FUNCTION : func,
12
+ in_app: true
13
+ // All browser frames are considered in_app
14
14
  };
15
-
16
- if (lineno !== undefined) {
15
+ if (lineno !== void 0) {
17
16
  frame.lineno = lineno;
18
17
  }
19
-
20
- if (colno !== undefined) {
18
+ if (colno !== void 0) {
21
19
  frame.colno = colno;
22
20
  }
23
-
24
21
  return frame;
25
22
  }
26
-
27
- // This regex matches frames that have no function name (ie. are at the top level of a module).
28
- // For example "at http://localhost:5000//script.js:1:126"
29
- // Frames _with_ function names usually look as follows: "at commitLayoutEffects (react-dom.development.js:23426:1)"
30
23
  const chromeRegexNoFnName = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i;
31
-
32
- // This regex matches all the frames that have a function name.
33
- const chromeRegex =
34
- /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
35
-
24
+ const chromeRegex = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
36
25
  const chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
37
-
38
- // Matches stack frames with data URIs instead of filename so we can still get the function name
39
- // Example: "at dynamicFn (data:application/javascript,export function dynamicFn() {..."
40
26
  const chromeDataUriRegex = /at (.+?) ?\(data:(.+?),/;
41
-
42
- // Chromium based browsers: Chrome, Brave, new Opera, new Edge
43
- // We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments
44
- // See: https://github.com/getsentry/sentry-javascript/issues/6880
45
- const chromeStackParserFn = line => {
27
+ const chromeStackParserFn = (line) => {
46
28
  const dataUriMatch = line.match(chromeDataUriRegex);
47
29
  if (dataUriMatch) {
48
30
  return {
49
31
  filename: `<data:${dataUriMatch[2]}>`,
50
- function: dataUriMatch[1],
32
+ function: dataUriMatch[1]
51
33
  };
52
34
  }
53
-
54
- // If the stack line has no function name, we need to parse it differently
55
- const noFnParts = chromeRegexNoFnName.exec(line) ;
56
-
35
+ const noFnParts = chromeRegexNoFnName.exec(line);
57
36
  if (noFnParts) {
58
- const [, filename, line, col] = noFnParts;
59
- return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);
37
+ const [, filename, line2, col] = noFnParts;
38
+ return createFrame(filename, UNKNOWN_FUNCTION, +line2, +col);
60
39
  }
61
-
62
- const parts = chromeRegex.exec(line) ;
63
-
40
+ const parts = chromeRegex.exec(line);
64
41
  if (parts) {
65
- const isEval = parts[2]?.indexOf('eval') === 0; // start of line
66
-
42
+ const isEval = parts[2]?.indexOf("eval") === 0;
67
43
  if (isEval) {
68
- const subMatch = chromeEvalRegex.exec(parts[2]) ;
69
-
44
+ const subMatch = chromeEvalRegex.exec(parts[2]);
70
45
  if (subMatch) {
71
- // throw out eval line/column and use top-most line/column number
72
- parts[2] = subMatch[1]; // url
73
- parts[3] = subMatch[2]; // line
74
- parts[4] = subMatch[3]; // column
46
+ parts[2] = subMatch[1];
47
+ parts[3] = subMatch[2];
48
+ parts[4] = subMatch[3];
75
49
  }
76
50
  }
77
-
78
- // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
79
- // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
80
51
  const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);
81
-
82
- return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);
52
+ return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);
83
53
  }
84
-
85
54
  return;
86
55
  };
87
-
88
56
  const chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];
89
-
90
- // gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
91
- // generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
92
- // We need this specific case for now because we want no other regex to match.
93
- const geckoREgex =
94
- /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
57
+ const geckoREgex = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
95
58
  const geckoEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
96
-
97
- const gecko = line => {
98
- const parts = geckoREgex.exec(line) ;
99
-
59
+ const gecko = (line) => {
60
+ const parts = geckoREgex.exec(line);
100
61
  if (parts) {
101
- const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
62
+ const isEval = parts[3] && parts[3].indexOf(" > eval") > -1;
102
63
  if (isEval) {
103
- const subMatch = geckoEvalRegex.exec(parts[3]) ;
104
-
64
+ const subMatch = geckoEvalRegex.exec(parts[3]);
105
65
  if (subMatch) {
106
- // throw out eval line/column and use top-most line number
107
- parts[1] = parts[1] || 'eval';
66
+ parts[1] = parts[1] || "eval";
108
67
  parts[3] = subMatch[1];
109
68
  parts[4] = subMatch[2];
110
- parts[5] = ''; // no column when eval
69
+ parts[5] = "";
111
70
  }
112
71
  }
113
-
114
72
  let filename = parts[3];
115
73
  let func = parts[1] || UNKNOWN_FUNCTION;
116
74
  [func, filename] = extractSafariExtensionDetails(func, filename);
117
-
118
- return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);
75
+ return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);
119
76
  }
120
-
121
77
  return;
122
78
  };
123
-
124
79
  const geckoStackLineParser = [GECKO_PRIORITY, gecko];
125
-
126
80
  const winjsRegex = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
127
-
128
- const winjs = line => {
129
- const parts = winjsRegex.exec(line) ;
130
-
131
- return parts
132
- ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)
133
- : undefined;
81
+ const winjs = (line) => {
82
+ const parts = winjsRegex.exec(line);
83
+ return parts ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : void 0) : void 0;
134
84
  };
135
-
136
85
  const winjsStackLineParser = [WINJS_PRIORITY, winjs];
137
-
138
86
  const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
139
-
140
- const opera10 = line => {
141
- const parts = opera10Regex.exec(line) ;
142
- return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;
87
+ const opera10 = (line) => {
88
+ const parts = opera10Regex.exec(line);
89
+ return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : void 0;
143
90
  };
144
-
145
91
  const opera10StackLineParser = [OPERA10_PRIORITY, opera10];
146
-
147
- const opera11Regex =
148
- / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
149
-
150
- const opera11 = line => {
151
- const parts = opera11Regex.exec(line) ;
152
- return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;
92
+ const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
93
+ const opera11 = (line) => {
94
+ const parts = opera11Regex.exec(line);
95
+ return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : void 0;
153
96
  };
154
-
155
97
  const opera11StackLineParser = [OPERA11_PRIORITY, opera11];
156
-
157
98
  const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];
158
-
159
99
  const defaultStackParser = createStackParser(...defaultStackLineParsers);
160
-
161
- /**
162
- * Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
163
- * What it means, is that instead of format like:
164
- *
165
- * Error: wat
166
- * at function@url:row:col
167
- * at function@url:row:col
168
- * at function@url:row:col
169
- *
170
- * it produces something like:
171
- *
172
- * function@url:row:col
173
- * function@url:row:col
174
- * function@url:row:col
175
- *
176
- * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.
177
- * This function is extracted so that we can use it in both places without duplicating the logic.
178
- * Unfortunately "just" changing RegExp is too complicated now and making it pass all tests
179
- * and fix this case seems like an impossible, or at least way too time-consuming task.
180
- */
181
100
  const extractSafariExtensionDetails = (func, filename) => {
182
- const isSafariExtension = func.indexOf('safari-extension') !== -1;
183
- const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
184
-
185
- return isSafariExtension || isSafariWebExtension
186
- ? [
187
- func.indexOf('@') !== -1 ? (func.split('@')[0] ) : UNKNOWN_FUNCTION,
188
- isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,
189
- ]
190
- : [func, filename];
101
+ const isSafariExtension = func.indexOf("safari-extension") !== -1;
102
+ const isSafariWebExtension = func.indexOf("safari-web-extension") !== -1;
103
+ return isSafariExtension || isSafariWebExtension ? [
104
+ func.indexOf("@") !== -1 ? func.split("@")[0] : UNKNOWN_FUNCTION,
105
+ isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`
106
+ ] : [func, filename];
191
107
  };
192
108
 
193
109
  export { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };
@@ -1 +1 @@
1
- {"version":3,"file":"stack-parsers.js","sources":["../../../../src/stack-parsers.ts"],"sourcesContent":["// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/core/browser';\nimport { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core/browser';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Matches stack frames with data URIs instead of filename so we can still get the function name\n// Example: \"at dynamicFn (data:application/javascript,export function dynamicFn() {...\"\nconst chromeDataUriRegex = /at (.+?) ?\\(data:(.+?),/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n const dataUriMatch = line.match(chromeDataUriRegex);\n if (dataUriMatch) {\n return {\n filename: `<data:${dataUriMatch[2]}>`,\n function: dataUriMatch[1],\n };\n }\n\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) as null | [string, string, string, string];\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\n const parts = chromeRegex.exec(line) as null | [string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[2]?.indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]) as null | [string, string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line) as null | [string, string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]) as null | [string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line) as null | [string, string, string, string, string];\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line) as null | [string, string, string, string];\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line) as null | [string, string, string, string, string, string];\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? (func.split('@')[0] as string) : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack-parsers.js","sources":["../../../../src/stack-parsers.ts"],"sourcesContent":["// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/core/browser';\nimport { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core/browser';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Matches stack frames with data URIs instead of filename so we can still get the function name\n// Example: \"at dynamicFn (data:application/javascript,export function dynamicFn() {...\"\nconst chromeDataUriRegex = /at (.+?) ?\\(data:(.+?),/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n const dataUriMatch = line.match(chromeDataUriRegex);\n if (dataUriMatch) {\n return {\n filename: `<data:${dataUriMatch[2]}>`,\n function: dataUriMatch[1],\n };\n }\n\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) as null | [string, string, string, string];\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\n const parts = chromeRegex.exec(line) as null | [string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[2]?.indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]) as null | [string, string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line) as null | [string, string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]) as null | [string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line) as null | [string, string, string, string, string];\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line) as null | [string, string, string, string];\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line) as null | [string, string, string, string, string, string];\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? (func.split('@')[0] as string) : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n"],"names":["line"],"mappings":"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"}
@@ -2,41 +2,29 @@ import { getActiveSpan, getRootSpan, spanToJSON, debug, SPAN_STATUS_ERROR } from
2
2
  import { DEBUG_BUILD } from '../debug-build.js';
3
3
  import { WINDOW } from '../helpers.js';
4
4
 
5
- /**
6
- * Add a listener that cancels and finishes a transaction when the global
7
- * document is hidden.
8
- */
9
5
  function registerBackgroundTabDetection() {
10
6
  if (WINDOW.document) {
11
- WINDOW.document.addEventListener('visibilitychange', () => {
7
+ WINDOW.document.addEventListener("visibilitychange", () => {
12
8
  const activeSpan = getActiveSpan();
13
9
  if (!activeSpan) {
14
10
  return;
15
11
  }
16
-
17
12
  const rootSpan = getRootSpan(activeSpan);
18
-
19
13
  if (WINDOW.document.hidden && rootSpan) {
20
- const cancelledStatus = 'cancelled';
21
-
14
+ const cancelledStatus = "cancelled";
22
15
  const { op, status } = spanToJSON(rootSpan);
23
-
24
16
  if (DEBUG_BUILD) {
25
17
  debug.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);
26
18
  }
27
-
28
- // We should not set status if it is already set, this prevent important statuses like
29
- // error or data loss from being overwritten on transaction.
30
19
  if (!status) {
31
20
  rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });
32
21
  }
33
-
34
- rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');
22
+ rootSpan.setAttribute("sentry.cancellation_reason", "document.hidden");
35
23
  rootSpan.end();
36
24
  }
37
25
  });
38
26
  } else {
39
- DEBUG_BUILD && debug.warn('[Tracing] Could not set up background tab detection due to lack of global document');
27
+ DEBUG_BUILD && debug.warn("[Tracing] Could not set up background tab detection due to lack of global document");
40
28
  }
41
29
  }
42
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundtab.js","sources":["../../../../../src/tracing/backgroundtab.ts"],"sourcesContent":["import { debug, getActiveSpan, getRootSpan, SPAN_STATUS_ERROR, spanToJSON } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n debug.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && debug.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n"],"names":[],"mappings":";;;;AAIA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,GAAS;AACvD,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;AACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;AAC/D,MAAM,MAAM,UAAA,GAAa,aAAa,EAAE;AACxC,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,QAAA,GAAW,WAAW,CAAC,UAAU,CAAC;;AAE9C,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAA,IAAU,QAAQ,EAAE;AAC9C,QAAQ,MAAM,eAAA,GAAkB,WAAW;;AAE3C,QAAQ,MAAM,EAAE,EAAE,EAAE,MAAA,KAAW,UAAU,CAAC,QAAQ,CAAC;;AAEnD,QAAQ,IAAI,WAAW,EAAE;AACzB,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,eAAe,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAA,CAAA;AACA,QAAA;;AAEA;AACA;AACA,QAAA,IAAA,CAAA,MAAA,EAAA;AACA,UAAA,QAAA,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,CAAA;AACA,QAAA;;AAEA,QAAA,QAAA,CAAA,YAAA,CAAA,4BAAA,EAAA,iBAAA,CAAA;AACA,QAAA,QAAA,CAAA,GAAA,EAAA;AACA,MAAA;AACA,IAAA,CAAA,CAAA;AACA,EAAA,CAAA,MAAA;AACA,IAAA,WAAA,IAAA,KAAA,CAAA,IAAA,CAAA,oFAAA,CAAA;AACA,EAAA;AACA;;;;"}
1
+ {"version":3,"file":"backgroundtab.js","sources":["../../../../../src/tracing/backgroundtab.ts"],"sourcesContent":["import { debug, getActiveSpan, getRootSpan, SPAN_STATUS_ERROR, spanToJSON } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n debug.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && debug.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n"],"names":[],"mappings":";;;;AAQO,SAAS,8BAAA,GAAuC;AACrD,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAA,CAAO,QAAA,CAAS,gBAAA,CAAiB,kBAAA,EAAoB,MAAM;AACzD,MAAA,MAAM,aAAa,aAAA,EAAc;AACjC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,YAAY,UAAU,CAAA;AAEvC,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,IAAU,QAAA,EAAU;AACtC,QAAA,MAAM,eAAA,GAAkB,WAAA;AAExB,QAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAO,GAAI,WAAW,QAAQ,CAAA;AAE1C,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,KAAA,CAAM,GAAA,CAAI,CAAA,uBAAA,EAA0B,eAAe,CAAA,2CAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAAA,QACvG;AAIA,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,QAAA,CAAS,UAAU,EAAE,IAAA,EAAM,iBAAA,EAAmB,OAAA,EAAS,iBAAiB,CAAA;AAAA,QAC1E;AAEA,QAAA,QAAA,CAAS,YAAA,CAAa,8BAA8B,iBAAiB,CAAA;AACrE,QAAA,QAAA,CAAS,GAAA,EAAI;AAAA,MACf;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,WAAA,IAAe,KAAA,CAAM,KAAK,oFAAoF,CAAA;AAAA,EAChH;AACF;;;;"}