@sentry/react-native 8.6.0 → 8.7.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 (349) hide show
  1. package/android/build.gradle +2 -2
  2. package/android/expo-handler/build.gradle +1 -1
  3. package/android/libs/replay-stubs.jar +0 -0
  4. package/android/replay-stubs/build.gradle +1 -1
  5. package/android/src/main/java/io/sentry/react/RNSentryFrameDelayCollector.java +128 -0
  6. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +48 -0
  7. package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
  8. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +6 -0
  9. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +6 -0
  10. package/dist/js/NativeLogListener.d.ts.map +1 -1
  11. package/dist/js/NativeLogListener.js.map +1 -1
  12. package/dist/js/NativeRNSentry.d.ts +1 -0
  13. package/dist/js/NativeRNSentry.d.ts.map +1 -1
  14. package/dist/js/NativeRNSentry.js.map +1 -1
  15. package/dist/js/RNSentryReplayMaskNativeComponent.d.ts.map +1 -1
  16. package/dist/js/RNSentryReplayMaskNativeComponent.js +1 -2
  17. package/dist/js/RNSentryReplayMaskNativeComponent.js.map +1 -1
  18. package/dist/js/RNSentryReplayUnmaskNativeComponent.d.ts.map +1 -1
  19. package/dist/js/RNSentryReplayUnmaskNativeComponent.js +1 -2
  20. package/dist/js/RNSentryReplayUnmaskNativeComponent.js.map +1 -1
  21. package/dist/js/breadcrumb.d.ts.map +1 -1
  22. package/dist/js/breadcrumb.js.map +1 -1
  23. package/dist/js/client.d.ts.map +1 -1
  24. package/dist/js/client.js +1 -1
  25. package/dist/js/client.js.map +1 -1
  26. package/dist/js/feedback/FeedbackButton.d.ts +2 -1
  27. package/dist/js/feedback/FeedbackButton.d.ts.map +1 -1
  28. package/dist/js/feedback/FeedbackButton.js +5 -4
  29. package/dist/js/feedback/FeedbackButton.js.map +1 -1
  30. package/dist/js/feedback/{FeedbackWidget.d.ts → FeedbackForm.d.ts} +5 -5
  31. package/dist/js/feedback/FeedbackForm.d.ts.map +1 -0
  32. package/dist/js/feedback/{FeedbackWidget.js → FeedbackForm.js} +26 -24
  33. package/dist/js/feedback/FeedbackForm.js.map +1 -0
  34. package/dist/js/feedback/FeedbackForm.styles.d.ts +11 -0
  35. package/dist/js/feedback/FeedbackForm.styles.d.ts.map +1 -0
  36. package/dist/js/feedback/{FeedbackWidget.styles.js → FeedbackForm.styles.js} +1 -1
  37. package/dist/js/feedback/FeedbackForm.styles.js.map +1 -0
  38. package/dist/js/feedback/{FeedbackWidget.theme.d.ts → FeedbackForm.theme.d.ts} +7 -5
  39. package/dist/js/feedback/FeedbackForm.theme.d.ts.map +1 -0
  40. package/dist/js/feedback/{FeedbackWidget.theme.js → FeedbackForm.theme.js} +1 -1
  41. package/dist/js/feedback/FeedbackForm.theme.js.map +1 -0
  42. package/{ts3.8/dist/js/feedback/FeedbackWidget.types.d.ts → dist/js/feedback/FeedbackForm.types.d.ts} +305 -299
  43. package/dist/js/feedback/FeedbackForm.types.d.ts.map +1 -0
  44. package/dist/js/feedback/FeedbackForm.types.js +2 -0
  45. package/dist/js/feedback/FeedbackForm.types.js.map +1 -0
  46. package/dist/js/feedback/{FeedbackWidgetManager.d.ts → FeedbackFormManager.d.ts} +12 -4
  47. package/dist/js/feedback/FeedbackFormManager.d.ts.map +1 -0
  48. package/dist/js/feedback/{FeedbackWidgetManager.js → FeedbackFormManager.js} +22 -13
  49. package/dist/js/feedback/FeedbackFormManager.js.map +1 -0
  50. package/dist/js/feedback/{FeedbackWidgetProvider.d.ts → FeedbackFormProvider.d.ts} +10 -10
  51. package/dist/js/feedback/FeedbackFormProvider.d.ts.map +1 -0
  52. package/dist/js/feedback/{FeedbackWidgetProvider.js → FeedbackFormProvider.js} +18 -15
  53. package/dist/js/feedback/FeedbackFormProvider.js.map +1 -0
  54. package/dist/js/feedback/ScreenshotButton.d.ts +1 -1
  55. package/dist/js/feedback/ScreenshotButton.d.ts.map +1 -1
  56. package/dist/js/feedback/ScreenshotButton.js +6 -5
  57. package/dist/js/feedback/ScreenshotButton.js.map +1 -1
  58. package/dist/js/feedback/ShakeToReportBug.d.ts.map +1 -1
  59. package/dist/js/feedback/ShakeToReportBug.js.map +1 -1
  60. package/dist/js/feedback/defaults.d.ts +2 -2
  61. package/dist/js/feedback/defaults.d.ts.map +1 -1
  62. package/dist/js/feedback/defaults.js.map +1 -1
  63. package/dist/js/feedback/integration.d.ts +11 -11
  64. package/dist/js/feedback/integration.d.ts.map +1 -1
  65. package/dist/js/feedback/integration.js.map +1 -1
  66. package/dist/js/feedback/lazy.d.ts +5 -0
  67. package/dist/js/feedback/lazy.d.ts.map +1 -1
  68. package/dist/js/feedback/lazy.js +12 -0
  69. package/dist/js/feedback/lazy.js.map +1 -1
  70. package/dist/js/feedback/utils.d.ts.map +1 -1
  71. package/dist/js/feedback/utils.js +1 -0
  72. package/dist/js/feedback/utils.js.map +1 -1
  73. package/dist/js/index.d.ts +12 -3
  74. package/dist/js/index.d.ts.map +1 -1
  75. package/dist/js/index.js +12 -3
  76. package/dist/js/index.js.map +1 -1
  77. package/dist/js/integrations/appRegistry.d.ts.map +1 -1
  78. package/dist/js/integrations/appRegistry.js.map +1 -1
  79. package/dist/js/integrations/breadcrumbs.d.ts.map +1 -1
  80. package/dist/js/integrations/breadcrumbs.js +1 -1
  81. package/dist/js/integrations/breadcrumbs.js.map +1 -1
  82. package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
  83. package/dist/js/integrations/debugsymbolicator.js +1 -2
  84. package/dist/js/integrations/debugsymbolicator.js.map +1 -1
  85. package/dist/js/integrations/debugsymbolicatorutils.d.ts.map +1 -1
  86. package/dist/js/integrations/debugsymbolicatorutils.js.map +1 -1
  87. package/dist/js/integrations/default.d.ts.map +1 -1
  88. package/dist/js/integrations/default.js +0 -1
  89. package/dist/js/integrations/default.js.map +1 -1
  90. package/dist/js/integrations/devicecontext.d.ts.map +1 -1
  91. package/dist/js/integrations/devicecontext.js.map +1 -1
  92. package/dist/js/integrations/expoconstants.d.ts.map +1 -1
  93. package/dist/js/integrations/expoconstants.js.map +1 -1
  94. package/dist/js/integrations/expocontext.d.ts.map +1 -1
  95. package/dist/js/integrations/expocontext.js.map +1 -1
  96. package/dist/js/integrations/expoupdateslistener.d.ts.map +1 -1
  97. package/dist/js/integrations/expoupdateslistener.js +0 -1
  98. package/dist/js/integrations/expoupdateslistener.js.map +1 -1
  99. package/dist/js/integrations/graphql.d.ts.map +1 -1
  100. package/dist/js/integrations/graphql.js.map +1 -1
  101. package/dist/js/integrations/logEnricherIntegration.d.ts.map +1 -1
  102. package/dist/js/integrations/logEnricherIntegration.js.map +1 -1
  103. package/dist/js/integrations/modulesloader.d.ts.map +1 -1
  104. package/dist/js/integrations/modulesloader.js.map +1 -1
  105. package/dist/js/integrations/nativelinkederrors.d.ts.map +1 -1
  106. package/dist/js/integrations/nativelinkederrors.js +1 -1
  107. package/dist/js/integrations/nativelinkederrors.js.map +1 -1
  108. package/dist/js/integrations/primitiveTagIntegration.d.ts.map +1 -1
  109. package/dist/js/integrations/primitiveTagIntegration.js.map +1 -1
  110. package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
  111. package/dist/js/integrations/reactnativeerrorhandlers.js +2 -1
  112. package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
  113. package/dist/js/integrations/reactnativeerrorhandlersutils.d.ts.map +1 -1
  114. package/dist/js/integrations/reactnativeerrorhandlersutils.js +0 -5
  115. package/dist/js/integrations/reactnativeerrorhandlersutils.js.map +1 -1
  116. package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -1
  117. package/dist/js/integrations/reactnativeinfo.js.map +1 -1
  118. package/dist/js/integrations/release.d.ts.map +1 -1
  119. package/dist/js/integrations/release.js.map +1 -1
  120. package/dist/js/integrations/rewriteframes.d.ts.map +1 -1
  121. package/dist/js/integrations/rewriteframes.js.map +1 -1
  122. package/dist/js/integrations/screenshot.d.ts.map +1 -1
  123. package/dist/js/integrations/screenshot.js.map +1 -1
  124. package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
  125. package/dist/js/integrations/sdkinfo.js.map +1 -1
  126. package/dist/js/integrations/spotlight.d.ts.map +1 -1
  127. package/dist/js/integrations/spotlight.js.map +1 -1
  128. package/dist/js/integrations/supabase.d.ts.map +1 -1
  129. package/dist/js/integrations/supabase.js.map +1 -1
  130. package/dist/js/integrations/viewhierarchy.d.ts.map +1 -1
  131. package/dist/js/integrations/viewhierarchy.js.map +1 -1
  132. package/dist/js/options.d.ts.map +1 -1
  133. package/dist/js/options.js.map +1 -1
  134. package/dist/js/playground/examples.d.ts.map +1 -1
  135. package/dist/js/playground/examples.js.map +1 -1
  136. package/dist/js/playground/modal.d.ts.map +1 -1
  137. package/dist/js/playground/modal.js +4 -102
  138. package/dist/js/playground/modal.js.map +1 -1
  139. package/dist/js/playground/modal.styles.d.ts +100 -0
  140. package/dist/js/playground/modal.styles.d.ts.map +1 -0
  141. package/dist/js/playground/modal.styles.js +98 -0
  142. package/dist/js/playground/modal.styles.js.map +1 -0
  143. package/dist/js/profiling/cache.js +2 -2
  144. package/dist/js/profiling/cache.js.map +1 -1
  145. package/dist/js/profiling/convertHermesProfile.d.ts.map +1 -1
  146. package/dist/js/profiling/convertHermesProfile.js.map +1 -1
  147. package/dist/js/profiling/debugid.d.ts.map +1 -1
  148. package/dist/js/profiling/debugid.js.map +1 -1
  149. package/dist/js/profiling/hermes.d.ts.map +1 -1
  150. package/dist/js/profiling/hermes.js.map +1 -1
  151. package/dist/js/profiling/integration.d.ts.map +1 -1
  152. package/dist/js/profiling/integration.js.map +1 -1
  153. package/dist/js/profiling/types.d.ts.map +1 -1
  154. package/dist/js/profiling/types.js.map +1 -1
  155. package/dist/js/profiling/utils.d.ts.map +1 -1
  156. package/dist/js/profiling/utils.js +1 -1
  157. package/dist/js/profiling/utils.js.map +1 -1
  158. package/dist/js/replay/CustomMask.d.ts +1 -1
  159. package/dist/js/replay/CustomMask.d.ts.map +1 -1
  160. package/dist/js/replay/CustomMask.js +1 -1
  161. package/dist/js/replay/CustomMask.js.map +1 -1
  162. package/dist/js/replay/CustomMask.web.d.ts +1 -1
  163. package/dist/js/replay/CustomMask.web.d.ts.map +1 -1
  164. package/dist/js/replay/CustomMask.web.js +2 -2
  165. package/dist/js/replay/CustomMask.web.js.map +1 -1
  166. package/dist/js/replay/browserReplay.d.ts.map +1 -1
  167. package/dist/js/replay/browserReplay.js +0 -2
  168. package/dist/js/replay/browserReplay.js.map +1 -1
  169. package/dist/js/replay/mobilereplay.d.ts.map +1 -1
  170. package/dist/js/replay/mobilereplay.js.map +1 -1
  171. package/dist/js/replay/xhrUtils.d.ts.map +1 -1
  172. package/dist/js/replay/xhrUtils.js.map +1 -1
  173. package/dist/js/scopeSync.d.ts.map +1 -1
  174. package/dist/js/scopeSync.js +1 -1
  175. package/dist/js/scopeSync.js.map +1 -1
  176. package/dist/js/sdk.d.ts +21 -0
  177. package/dist/js/sdk.d.ts.map +1 -1
  178. package/dist/js/sdk.js +38 -16
  179. package/dist/js/sdk.js.map +1 -1
  180. package/dist/js/tools/ModulesCollector.js +1 -1
  181. package/dist/js/tools/ModulesCollector.js.map +1 -1
  182. package/dist/js/tools/collectModules.js +0 -1
  183. package/dist/js/tools/collectModules.js.map +1 -1
  184. package/dist/js/tools/easBuildHooks.d.ts.map +1 -1
  185. package/dist/js/tools/easBuildHooks.js.map +1 -1
  186. package/dist/js/tools/metroMiddleware.d.ts.map +1 -1
  187. package/dist/js/tools/metroMiddleware.js.map +1 -1
  188. package/dist/js/tools/metroconfig.d.ts.map +1 -1
  189. package/dist/js/tools/metroconfig.js +4 -5
  190. package/dist/js/tools/metroconfig.js.map +1 -1
  191. package/dist/js/tools/sentryBabelTransformerUtils.d.ts.map +1 -1
  192. package/dist/js/tools/sentryBabelTransformerUtils.js +2 -3
  193. package/dist/js/tools/sentryBabelTransformerUtils.js.map +1 -1
  194. package/dist/js/tools/sentryMetroSerializer.d.ts.map +1 -1
  195. package/dist/js/tools/sentryMetroSerializer.js +4 -5
  196. package/dist/js/tools/sentryMetroSerializer.js.map +1 -1
  197. package/dist/js/tools/sentryOptionsSerializer.d.ts.map +1 -1
  198. package/dist/js/tools/sentryOptionsSerializer.js +2 -3
  199. package/dist/js/tools/sentryOptionsSerializer.js.map +1 -1
  200. package/dist/js/tools/sentryReleaseInjector.d.ts.map +1 -1
  201. package/dist/js/tools/sentryReleaseInjector.js.map +1 -1
  202. package/dist/js/tools/utils.d.ts.map +1 -1
  203. package/dist/js/tools/utils.js +0 -3
  204. package/dist/js/tools/utils.js.map +1 -1
  205. package/dist/js/tools/vendor/metro/utils.d.ts.map +1 -1
  206. package/dist/js/tools/vendor/metro/utils.js +5 -5
  207. package/dist/js/tools/vendor/metro/utils.js.map +1 -1
  208. package/dist/js/touchevents.d.ts.map +1 -1
  209. package/dist/js/touchevents.js +19 -21
  210. package/dist/js/touchevents.js.map +1 -1
  211. package/dist/js/tracing/expoImage.d.ts.map +1 -1
  212. package/dist/js/tracing/expoImage.js +1 -1
  213. package/dist/js/tracing/expoImage.js.map +1 -1
  214. package/dist/js/tracing/expoRouter.d.ts.map +1 -1
  215. package/dist/js/tracing/expoRouter.js.map +1 -1
  216. package/dist/js/tracing/gesturetracing.d.ts.map +1 -1
  217. package/dist/js/tracing/gesturetracing.js.map +1 -1
  218. package/dist/js/tracing/integrations/appStart.d.ts +18 -0
  219. package/dist/js/tracing/integrations/appStart.d.ts.map +1 -1
  220. package/dist/js/tracing/integrations/appStart.js +141 -6
  221. package/dist/js/tracing/integrations/appStart.js.map +1 -1
  222. package/dist/js/tracing/integrations/nativeFrames.d.ts.map +1 -1
  223. package/dist/js/tracing/integrations/nativeFrames.js +43 -0
  224. package/dist/js/tracing/integrations/nativeFrames.js.map +1 -1
  225. package/dist/js/tracing/integrations/stalltracking.d.ts.map +1 -1
  226. package/dist/js/tracing/integrations/stalltracking.js +0 -1
  227. package/dist/js/tracing/integrations/stalltracking.js.map +1 -1
  228. package/dist/js/tracing/integrations/timeToDisplayIntegration.d.ts.map +1 -1
  229. package/dist/js/tracing/integrations/timeToDisplayIntegration.js +1 -1
  230. package/dist/js/tracing/integrations/timeToDisplayIntegration.js.map +1 -1
  231. package/dist/js/tracing/integrations/userInteraction.d.ts.map +1 -1
  232. package/dist/js/tracing/integrations/userInteraction.js.map +1 -1
  233. package/dist/js/tracing/onSpanEndUtils.d.ts.map +1 -1
  234. package/dist/js/tracing/onSpanEndUtils.js +23 -1
  235. package/dist/js/tracing/onSpanEndUtils.js.map +1 -1
  236. package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
  237. package/dist/js/tracing/reactnativenavigation.js.map +1 -1
  238. package/dist/js/tracing/reactnativeprofiler.d.ts.map +1 -1
  239. package/dist/js/tracing/reactnativeprofiler.js +2 -2
  240. package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
  241. package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
  242. package/dist/js/tracing/reactnativetracing.js +0 -1
  243. package/dist/js/tracing/reactnativetracing.js.map +1 -1
  244. package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
  245. package/dist/js/tracing/reactnavigation.js +2 -2
  246. package/dist/js/tracing/reactnavigation.js.map +1 -1
  247. package/dist/js/tracing/span.d.ts.map +1 -1
  248. package/dist/js/tracing/span.js +1 -1
  249. package/dist/js/tracing/span.js.map +1 -1
  250. package/dist/js/tracing/timetodisplay.d.ts.map +1 -1
  251. package/dist/js/tracing/timetodisplay.js +42 -19
  252. package/dist/js/tracing/timetodisplay.js.map +1 -1
  253. package/dist/js/tracing/timetodisplaynative.d.ts +1 -1
  254. package/dist/js/tracing/timetodisplaynative.d.ts.map +1 -1
  255. package/dist/js/tracing/timetodisplaynative.js +5 -4
  256. package/dist/js/tracing/timetodisplaynative.js.map +1 -1
  257. package/dist/js/tracing/types.js.map +1 -1
  258. package/dist/js/tracing/utils.d.ts.map +1 -1
  259. package/dist/js/tracing/utils.js.map +1 -1
  260. package/dist/js/transports/native.d.ts.map +1 -1
  261. package/dist/js/transports/native.js.map +1 -1
  262. package/dist/js/utils/envelope.d.ts.map +1 -1
  263. package/dist/js/utils/envelope.js.map +1 -1
  264. package/dist/js/utils/environment.d.ts.map +1 -1
  265. package/dist/js/utils/environment.js.map +1 -1
  266. package/dist/js/utils/expomodules.d.ts.map +1 -1
  267. package/dist/js/utils/expomodules.js.map +1 -1
  268. package/dist/js/utils/fill.js +1 -1
  269. package/dist/js/utils/fill.js.map +1 -1
  270. package/dist/js/utils/normalize.js +2 -2
  271. package/dist/js/utils/normalize.js.map +1 -1
  272. package/dist/js/utils/rnlibraries.d.ts.map +1 -1
  273. package/dist/js/utils/rnlibraries.js +1 -7
  274. package/dist/js/utils/rnlibraries.js.map +1 -1
  275. package/dist/js/utils/safe.d.ts.map +1 -1
  276. package/dist/js/utils/safe.js.map +1 -1
  277. package/dist/js/utils/span.d.ts.map +1 -1
  278. package/dist/js/utils/span.js.map +1 -1
  279. package/dist/js/utils/worldwide.d.ts.map +1 -1
  280. package/dist/js/utils/worldwide.js.map +1 -1
  281. package/dist/js/vendor/base64-js/fromByteArray.js +1 -1
  282. package/dist/js/vendor/base64-js/fromByteArray.js.map +1 -1
  283. package/dist/js/vendor/buffer/utf8ToBytes.js +1 -1
  284. package/dist/js/vendor/buffer/utf8ToBytes.js.map +1 -1
  285. package/dist/js/vendor/react-native/index.d.ts.map +1 -1
  286. package/dist/js/vendor/react-native/index.js.map +1 -1
  287. package/dist/js/version.d.ts +1 -1
  288. package/dist/js/version.js +1 -1
  289. package/dist/js/version.js.map +1 -1
  290. package/dist/js/wrapper.d.ts +1 -0
  291. package/dist/js/wrapper.d.ts.map +1 -1
  292. package/dist/js/wrapper.js +16 -4
  293. package/dist/js/wrapper.js.map +1 -1
  294. package/ios/RNSentry.mm +18 -1
  295. package/ios/RNSentryReplay.mm +1 -1
  296. package/ios/RNSentrySDK.m +1 -1
  297. package/ios/RNSentryTimeToDisplay.m +48 -32
  298. package/ios/RNSentryVersion.m +1 -1
  299. package/ios/SentryScreenFramesWrapper.h +2 -0
  300. package/ios/SentryScreenFramesWrapper.m +35 -0
  301. package/package.json +17 -21
  302. package/plugin/build/logger.js +1 -1
  303. package/plugin/build/utils.js +2 -0
  304. package/plugin/build/withSentry.js +1 -2
  305. package/plugin/build/withSentryAndroid.js +2 -0
  306. package/plugin/build/withSentryAndroidGradlePlugin.d.ts +1 -1
  307. package/plugin/build/withSentryAndroidGradlePlugin.js +1 -1
  308. package/plugin/build/withSentryIOS.js +1 -3
  309. package/scripts/eas-build-hook.js +0 -2
  310. package/scripts/expo-upload-sourcemaps.js +0 -1
  311. package/src/js/NativeRNSentry.ts +3 -0
  312. package/src/js/RNSentryReplayMaskNativeComponent.ts +2 -3
  313. package/src/js/RNSentryReplayUnmaskNativeComponent.ts +2 -3
  314. package/ts3.8/dist/js/NativeRNSentry.d.ts +1 -0
  315. package/ts3.8/dist/js/feedback/FeedbackButton.d.ts +2 -1
  316. package/ts3.8/dist/js/feedback/{FeedbackWidget.d.ts → FeedbackForm.d.ts} +5 -5
  317. package/ts3.8/dist/js/feedback/FeedbackForm.styles.d.ts +11 -0
  318. package/ts3.8/dist/js/feedback/{FeedbackWidget.theme.d.ts → FeedbackForm.theme.d.ts} +7 -5
  319. package/{dist/js/feedback/FeedbackWidget.types.d.ts → ts3.8/dist/js/feedback/FeedbackForm.types.d.ts} +305 -299
  320. package/ts3.8/dist/js/feedback/{FeedbackWidgetManager.d.ts → FeedbackFormManager.d.ts} +12 -4
  321. package/ts3.8/dist/js/feedback/{FeedbackWidgetProvider.d.ts → FeedbackFormProvider.d.ts} +10 -10
  322. package/ts3.8/dist/js/feedback/ScreenshotButton.d.ts +1 -1
  323. package/ts3.8/dist/js/feedback/defaults.d.ts +2 -2
  324. package/ts3.8/dist/js/feedback/integration.d.ts +11 -11
  325. package/ts3.8/dist/js/feedback/lazy.d.ts +5 -0
  326. package/ts3.8/dist/js/index.d.ts +12 -3
  327. package/ts3.8/dist/js/playground/modal.styles.d.ts +100 -0
  328. package/ts3.8/dist/js/replay/CustomMask.d.ts +1 -1
  329. package/ts3.8/dist/js/replay/CustomMask.web.d.ts +1 -1
  330. package/ts3.8/dist/js/sdk.d.ts +21 -0
  331. package/ts3.8/dist/js/tracing/integrations/appStart.d.ts +18 -0
  332. package/ts3.8/dist/js/tracing/timetodisplaynative.d.ts +1 -1
  333. package/ts3.8/dist/js/version.d.ts +1 -1
  334. package/ts3.8/dist/js/wrapper.d.ts +1 -0
  335. package/dist/js/feedback/FeedbackWidget.d.ts.map +0 -1
  336. package/dist/js/feedback/FeedbackWidget.js.map +0 -1
  337. package/dist/js/feedback/FeedbackWidget.styles.d.ts +0 -11
  338. package/dist/js/feedback/FeedbackWidget.styles.d.ts.map +0 -1
  339. package/dist/js/feedback/FeedbackWidget.styles.js.map +0 -1
  340. package/dist/js/feedback/FeedbackWidget.theme.d.ts.map +0 -1
  341. package/dist/js/feedback/FeedbackWidget.theme.js.map +0 -1
  342. package/dist/js/feedback/FeedbackWidget.types.d.ts.map +0 -1
  343. package/dist/js/feedback/FeedbackWidget.types.js +0 -2
  344. package/dist/js/feedback/FeedbackWidget.types.js.map +0 -1
  345. package/dist/js/feedback/FeedbackWidgetManager.d.ts.map +0 -1
  346. package/dist/js/feedback/FeedbackWidgetManager.js.map +0 -1
  347. package/dist/js/feedback/FeedbackWidgetProvider.d.ts.map +0 -1
  348. package/dist/js/feedback/FeedbackWidgetProvider.js.map +0 -1
  349. package/ts3.8/dist/js/feedback/FeedbackWidget.styles.d.ts +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MetroConfig, MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport type CountingSet from 'metro/src/lib/CountingSet'; // types are in src but exports are in private\nimport countLines from './vendor/metro/countLines';\n\nexport type MetroCustomSerializer = Required<Required<MetroConfig>['serializer']>['customSerializer'] | undefined;\n\n// Variant of MixedOutput\n// https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/DeltaBundler/types.flow.js#L21\nexport type VirtualJSOutput = {\n type: 'js/script/virtual';\n data: {\n code: string;\n lineCount: number;\n map: [];\n };\n};\n\nexport type Bundle = {\n modules: Array<[id: number, code: string]>;\n post: string;\n pre: string;\n};\n\nexport type SentryMetroSerializerOptionsExtras = {\n sentryBundleCallback?: (bundle: Bundle) => Bundle;\n};\n\nexport type SerializedBundle = { code: string; map: string };\n\nexport type MetroSerializerOutput = string | SerializedBundle | Promise<string | SerializedBundle>;\n\nexport type MetroSerializer = (\n entryPoint: string,\n preModules: ReadonlyArray<Module>,\n graph: ReadOnlyGraph,\n options: SerializerOptions & SentryMetroSerializerOptionsExtras,\n) => MetroSerializerOutput;\n\n/**\n * Returns minified Debug ID code snippet.\n */\nexport function createDebugIdSnippet(debugId: string): string {\n return `var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]=\"${debugId}\",_sentryDebugIdIdentifier=\"sentry-dbid-${debugId}\")}catch(e){}`;\n}\n\n/**\n * Deterministically hashes a string and turns the hash into a uuid.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/58271f1af2ade6b3e64d393d70376ae53bc5bd2f/packages/bundler-plugin-core/src/utils.ts#L174\n */\nexport function stringToUUID(str: string): string {\n const md5sum = crypto.createHash('md5');\n md5sum.update(str);\n const md5Hash = md5sum.digest('hex');\n\n // Position 16 is fixed to either 8, 9, a, or b in the uuid v4 spec (10xx in binary)\n // RFC 4122 section 4.4\n const v4variant = ['8', '9', 'a', 'b'][md5Hash.substring(16, 17).charCodeAt(0) % 4] as string;\n\n return `${md5Hash.substring(0, 8)}-${md5Hash.substring(8, 12)}-4${md5Hash.substring(\n 13,\n 16,\n )}-${v4variant}${md5Hash.substring(17, 20)}-${md5Hash.substring(20)}`.toLowerCase();\n}\n\n/**\n * Looks for a particular string pattern (`sdbid-[debug ID]`) in the bundle\n * source and extracts the bundle's debug ID from it.\n *\n * The string pattern is injected via the debug ID injection snipped.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/40f918458ed449d8b3eabaf64d13c08218213f65/packages/bundler-plugin-core/src/debug-id-upload.ts#L293-L294\n */\nexport function determineDebugIdFromBundleSource(code: string): string | undefined {\n const match = code.match(\n /sentry-dbid-([0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12})/,\n );\n return match ? match[1] : undefined;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction resolveSetCreator(): () => CountingSet<string> {\n const CountingSetFromPrivate = safeRequireCountingSetFromPrivate();\n if (CountingSetFromPrivate) {\n return () => new CountingSetFromPrivate.default();\n }\n\n const CountingSetFromSrc = safeRequireCountingSetFromSrc();\n if (CountingSetFromSrc) {\n return () => new CountingSetFromSrc.default();\n }\n\n return () => new Set() as unknown as CountingSet<string>;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction safeRequireCountingSetFromSrc(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/src/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * CountingSet was moved to private in Metro 0.83.0. (all src exports were moved to private)\n *\n * https://github.com/facebook/metro/commit/ae6f42372ed361611b5672705f22081c2022cf28\n */\nfunction safeRequireCountingSetFromPrivate(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n return require('metro/private/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\nexport const createSet = resolveSetCreator();\n\nconst PRELUDE_MODULE_PATH = '__prelude__';\n\n/**\n * Prepends the module after default required prelude modules.\n */\nexport function prependModule(\n modules: readonly Module<MixedOutput>[],\n module: Module<VirtualJSOutput>,\n): Module<MixedOutput>[] {\n const modifiedPreModules = [...modules];\n if (modifiedPreModules.length > 0 && modifiedPreModules[0]?.path === PRELUDE_MODULE_PATH) {\n // prelude module must be first as it measures the bundle startup time\n modifiedPreModules.unshift(modules[0] as Module<VirtualJSOutput>);\n modifiedPreModules[1] = module;\n } else {\n modifiedPreModules.unshift(module);\n }\n return modifiedPreModules;\n}\n\n/**\n * Creates a virtual JS module with the given path and code.\n */\nexport function createVirtualJSModule(\n modulePath: string,\n moduleCode: string,\n): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n let sourceCode = moduleCode;\n\n return {\n setSource: (code: string) => {\n sourceCode = code;\n },\n dependencies: new Map(),\n getSource: () => Buffer.from(sourceCode),\n inverseDependencies: createSet(),\n path: modulePath,\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: sourceCode,\n lineCount: countLines(sourceCode),\n map: [],\n },\n },\n ],\n };\n}\n\n/**\n * Tries to load Expo config using `@expo/config` package.\n */\nexport function getExpoConfig(projectRoot: string): Partial<{\n name: string;\n version: string;\n}> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-extraneous-dependencies\n const expoConfig = require('@expo/config') as {\n getConfig?: (projectRoot: string) => { exp: Record<string, unknown> };\n };\n if (expoConfig.getConfig) {\n const { exp } = expoConfig.getConfig(projectRoot);\n return {\n name: typeof exp.name === 'string' && exp.name ? exp.name : undefined,\n version: typeof exp.version === 'string' && exp.version ? exp.version : undefined,\n };\n }\n } catch {\n // @expo/config not available, do nothing\n }\n\n return {};\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tools/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetroConfig, MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport type CountingSet from 'metro/src/lib/CountingSet'; // types are in src but exports are in private\n\nimport * as crypto from 'crypto';\n\nimport countLines from './vendor/metro/countLines';\n\nexport type MetroCustomSerializer = Required<Required<MetroConfig>['serializer']>['customSerializer'] | undefined;\n\n// Variant of MixedOutput\n// https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/DeltaBundler/types.flow.js#L21\nexport type VirtualJSOutput = {\n type: 'js/script/virtual';\n data: {\n code: string;\n lineCount: number;\n map: [];\n };\n};\n\nexport type Bundle = {\n modules: Array<[id: number, code: string]>;\n post: string;\n pre: string;\n};\n\nexport type SentryMetroSerializerOptionsExtras = {\n sentryBundleCallback?: (bundle: Bundle) => Bundle;\n};\n\nexport type SerializedBundle = { code: string; map: string };\n\nexport type MetroSerializerOutput = string | SerializedBundle | Promise<string | SerializedBundle>;\n\nexport type MetroSerializer = (\n entryPoint: string,\n preModules: ReadonlyArray<Module>,\n graph: ReadOnlyGraph,\n options: SerializerOptions & SentryMetroSerializerOptionsExtras,\n) => MetroSerializerOutput;\n\n/**\n * Returns minified Debug ID code snippet.\n */\nexport function createDebugIdSnippet(debugId: string): string {\n return `var _sentryDebugIds,_sentryDebugIdIdentifier;void 0===_sentryDebugIds&&(_sentryDebugIds={});try{var stack=(new Error).stack;stack&&(_sentryDebugIds[stack]=\"${debugId}\",_sentryDebugIdIdentifier=\"sentry-dbid-${debugId}\")}catch(e){}`;\n}\n\n/**\n * Deterministically hashes a string and turns the hash into a uuid.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/58271f1af2ade6b3e64d393d70376ae53bc5bd2f/packages/bundler-plugin-core/src/utils.ts#L174\n */\nexport function stringToUUID(str: string): string {\n const md5sum = crypto.createHash('md5');\n md5sum.update(str);\n const md5Hash = md5sum.digest('hex');\n\n // Position 16 is fixed to either 8, 9, a, or b in the uuid v4 spec (10xx in binary)\n // RFC 4122 section 4.4\n const v4variant = ['8', '9', 'a', 'b'][md5Hash.substring(16, 17).charCodeAt(0) % 4] as string;\n\n return `${md5Hash.substring(0, 8)}-${md5Hash.substring(8, 12)}-4${md5Hash.substring(\n 13,\n 16,\n )}-${v4variant}${md5Hash.substring(17, 20)}-${md5Hash.substring(20)}`.toLowerCase();\n}\n\n/**\n * Looks for a particular string pattern (`sdbid-[debug ID]`) in the bundle\n * source and extracts the bundle's debug ID from it.\n *\n * The string pattern is injected via the debug ID injection snipped.\n *\n * https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/40f918458ed449d8b3eabaf64d13c08218213f65/packages/bundler-plugin-core/src/debug-id-upload.ts#L293-L294\n */\nexport function determineDebugIdFromBundleSource(code: string): string | undefined {\n const match = code.match(\n /sentry-dbid-([0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12})/,\n );\n return match ? match[1] : undefined;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction resolveSetCreator(): () => CountingSet<string> {\n const CountingSetFromPrivate = safeRequireCountingSetFromPrivate();\n if (CountingSetFromPrivate) {\n return () => new CountingSetFromPrivate.default();\n }\n\n const CountingSetFromSrc = safeRequireCountingSetFromSrc();\n if (CountingSetFromSrc) {\n return () => new CountingSetFromSrc.default();\n }\n\n return () => new Set() as unknown as CountingSet<string>;\n}\n\n/**\n * CountingSet was added in Metro 0.72.0 before that NodeJS Set was used.\n *\n * https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/CountingSet.js\n */\nfunction safeRequireCountingSetFromSrc(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n return require('metro/src/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\n/**\n * CountingSet was moved to private in Metro 0.83.0. (all src exports were moved to private)\n *\n * https://github.com/facebook/metro/commit/ae6f42372ed361611b5672705f22081c2022cf28\n */\nfunction safeRequireCountingSetFromPrivate(): { default: new <T>() => CountingSet<T> } | undefined {\n try {\n return require('metro/private/lib/CountingSet');\n } catch (e) {\n return undefined;\n }\n}\n\nexport const createSet = resolveSetCreator();\n\nconst PRELUDE_MODULE_PATH = '__prelude__';\n\n/**\n * Prepends the module after default required prelude modules.\n */\nexport function prependModule(\n modules: readonly Module<MixedOutput>[],\n module: Module<VirtualJSOutput>,\n): Module<MixedOutput>[] {\n const modifiedPreModules = [...modules];\n if (modifiedPreModules.length > 0 && modifiedPreModules[0]?.path === PRELUDE_MODULE_PATH) {\n // prelude module must be first as it measures the bundle startup time\n modifiedPreModules.unshift(modules[0] as Module<VirtualJSOutput>);\n modifiedPreModules[1] = module;\n } else {\n modifiedPreModules.unshift(module);\n }\n return modifiedPreModules;\n}\n\n/**\n * Creates a virtual JS module with the given path and code.\n */\nexport function createVirtualJSModule(\n modulePath: string,\n moduleCode: string,\n): Module<VirtualJSOutput> & { setSource: (code: string) => void } {\n let sourceCode = moduleCode;\n\n return {\n setSource: (code: string) => {\n sourceCode = code;\n },\n dependencies: new Map(),\n getSource: () => Buffer.from(sourceCode),\n inverseDependencies: createSet(),\n path: modulePath,\n output: [\n {\n type: 'js/script/virtual',\n data: {\n code: sourceCode,\n lineCount: countLines(sourceCode),\n map: [],\n },\n },\n ],\n };\n}\n\n/**\n * Tries to load Expo config using `@expo/config` package.\n */\nexport function getExpoConfig(projectRoot: string): Partial<{\n name: string;\n version: string;\n}> {\n try {\n const expoConfig = require('@expo/config') as {\n getConfig?: (projectRoot: string) => { exp: Record<string, unknown> };\n };\n if (expoConfig.getConfig) {\n const { exp } = expoConfig.getConfig(projectRoot);\n return {\n name: typeof exp.name === 'string' && exp.name ? exp.name : undefined,\n version: typeof exp.version === 'string' && exp.version ? exp.version : undefined,\n };\n }\n } catch {\n // @expo/config not available, do nothing\n }\n\n return {};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAe,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+CnD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,aAAa,EACpB,qBAEG;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,KACA,SAAS,MAAM,EAMjB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,QAAO,eAqC/C,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAe,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAKhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA8CnD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,aAAa,EACpB,qBAEG;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,KACA,SAAS,MAAM,EAMjB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,QAAO,eAqC/C,CAAC"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
+ /* oxlint-disable typescript-eslint(no-unsafe-member-access) */
2
3
  // Vendored / modified from @facebook/metro
3
4
  var _a, _b;
4
5
  Object.defineProperty(exports, "__esModule", { value: true });
5
6
  exports.createDefaultMetroSerializer = exports.getSortedModules = void 0;
7
+ // oxlint-disable-next-line typescript-eslint(no-explicit-any)
6
8
  let baseJSBundleModule;
7
9
  try {
8
10
  baseJSBundleModule = require('metro/private/DeltaBundler/Serializers/baseJSBundle');
@@ -12,11 +14,9 @@ catch (_c) {
12
14
  }
13
15
  const baseJSBundle = typeof baseJSBundleModule === 'function'
14
16
  ? baseJSBundleModule
15
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
16
- (_a = baseJSBundleModule === null || baseJSBundleModule === void 0 ? void 0 : baseJSBundleModule.baseJSBundle) !== null && _a !== void 0 ? _a : baseJSBundleModule === null || baseJSBundleModule === void 0 ? void 0 : baseJSBundleModule.default;
17
+ : ((_a = baseJSBundleModule === null || baseJSBundleModule === void 0 ? void 0 : baseJSBundleModule.baseJSBundle) !== null && _a !== void 0 ? _a : baseJSBundleModule === null || baseJSBundleModule === void 0 ? void 0 : baseJSBundleModule.default);
17
18
  let sourceMapString;
18
19
  try {
19
- // eslint-disable-next-line @typescript-eslint/no-var-requires
20
20
  const sourceMapStringModule = require('metro/private/DeltaBundler/Serializers/sourceMapString');
21
21
  sourceMapString = sourceMapStringModule.sourceMapString;
22
22
  }
@@ -28,6 +28,7 @@ catch (e) {
28
28
  sourceMapString = sourceMapString.sourceMapString;
29
29
  }
30
30
  }
31
+ // oxlint-disable-next-line typescript-eslint(no-explicit-any)
31
32
  let bundleToStringModule;
32
33
  try {
33
34
  bundleToStringModule = require('metro/private/lib/bundleToString');
@@ -37,8 +38,7 @@ catch (_d) {
37
38
  }
38
39
  const bundleToString = typeof bundleToStringModule === 'function'
39
40
  ? bundleToStringModule
40
- : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
41
- (_b = bundleToStringModule === null || bundleToStringModule === void 0 ? void 0 : bundleToStringModule.bundleToString) !== null && _b !== void 0 ? _b : bundleToStringModule === null || bundleToStringModule === void 0 ? void 0 : bundleToStringModule.default;
41
+ : ((_b = bundleToStringModule === null || bundleToStringModule === void 0 ? void 0 : bundleToStringModule.bundleToString) !== null && _b !== void 0 ? _b : bundleToStringModule === null || bundleToStringModule === void 0 ? void 0 : bundleToStringModule.default);
42
42
  /**
43
43
  * This function ensures that modules in source maps are sorted in the same
44
44
  * order as in a plain JS bundle.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Vendored / modified from @facebook/metro\n\n// https://github.com/facebook/metro/commit/9b85f83c9cc837d8cd897aa7723be7da5b296067\n\n// MIT License\n\n// Copyright (c) Meta Platforms, Inc. and affiliates.\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 all\n// 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 THE\n// SOFTWARE.\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type * as baseJSBundleType from 'metro/private/DeltaBundler/Serializers/baseJSBundle';\nimport type * as sourceMapStringType from 'metro/private/DeltaBundler/Serializers/sourceMapString';\nimport type * as bundleToStringType from 'metro/private/lib/bundleToString';\nimport type { MetroSerializer } from '../../utils';\n\nlet baseJSBundleModule: any;\ntry {\n baseJSBundleModule = require('metro/private/DeltaBundler/Serializers/baseJSBundle');\n} catch {\n baseJSBundleModule = require('metro/src/DeltaBundler/Serializers/baseJSBundle');\n}\n\nconst baseJSBundle: typeof baseJSBundleType =\n typeof baseJSBundleModule === 'function'\n ? baseJSBundleModule\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n baseJSBundleModule?.baseJSBundle ?? baseJSBundleModule?.default;\n\nlet sourceMapString: typeof sourceMapStringType;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sourceMapStringModule = require('metro/private/DeltaBundler/Serializers/sourceMapString');\n sourceMapString = (sourceMapStringModule as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n} catch (e) {\n sourceMapString = require('metro/src/DeltaBundler/Serializers/sourceMapString');\n if ('sourceMapString' in sourceMapString) {\n // Changed to named export in https://github.com/facebook/metro/commit/34148e61200a508923315fbe387b26d1da27bf4b\n // Metro 0.81.0 and 0.80.10 patch\n sourceMapString = (sourceMapString as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n }\n}\n\nlet bundleToStringModule: any;\ntry {\n bundleToStringModule = require('metro/private/lib/bundleToString');\n} catch {\n bundleToStringModule = require('metro/src/lib/bundleToString');\n}\n\nconst bundleToString: typeof bundleToStringType =\n typeof bundleToStringModule === 'function'\n ? bundleToStringModule\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n bundleToStringModule?.bundleToString ?? bundleToStringModule?.default;\n\ntype NewSourceMapStringExport = {\n // Since Metro v0.80.10 https://github.com/facebook/metro/compare/v0.80.9...v0.80.10#diff-1b836d1729e527a725305eef0cec22e44605af2700fa413f4c2489ea1a03aebcL28\n sourceMapString: typeof sourceMapString;\n};\n\n/**\n * This function ensures that modules in source maps are sorted in the same\n * order as in a plain JS bundle.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L984\n */\nexport const getSortedModules = (\n graph: ReadOnlyGraph,\n {\n createModuleId,\n }: {\n createModuleId: (file: string) => number;\n },\n): readonly Module[] => {\n const modules = [...graph.dependencies.values()];\n // Sort by IDs\n return modules.sort(\n (a: Module<MixedOutput>, b: Module<MixedOutput>) => createModuleId(a.path) - createModuleId(b.path),\n );\n};\n\n/**\n * Creates the default Metro plain bundle serializer.\n * Because Metro exports only the intermediate serializer functions, we need to\n * assemble the final serializer ourselves. We have to work with the modules the same as Metro does\n * to avoid unexpected changes in the final bundle.\n *\n * This is used when the user does not provide a custom serializer.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L244-L277\n */\nexport const createDefaultMetroSerializer = (): MetroSerializer => {\n return (entryPoint, preModules, graph, options) => {\n // baseJSBundle assigns IDs to modules in a consistent order\n let bundle = baseJSBundle(entryPoint, preModules, graph, options);\n if (options.sentryBundleCallback && !graph.transformOptions.hot) {\n bundle = options.sentryBundleCallback(bundle);\n }\n const { code } = bundleToString(bundle);\n if (graph.transformOptions.hot) {\n // Hot means running in dev server, sourcemaps are generated on demand\n return code;\n }\n\n let sourceMapStringFunction: typeof sourceMapString | undefined;\n if (typeof sourceMapString === 'function') {\n sourceMapStringFunction = sourceMapString;\n } else if (\n typeof sourceMapString === 'object' &&\n sourceMapString != null &&\n 'sourceMapString' in sourceMapString &&\n typeof sourceMapString['sourceMapString'] === 'function'\n ) {\n sourceMapStringFunction = (sourceMapString as NewSourceMapStringExport).sourceMapString;\n } else {\n throw new Error(`\n[@sentry/react-native/metro] Cannot find sourceMapString function in 'metro/src/DeltaBundler/Serializers/sourceMapString'.\nPlease check the version of Metro you are using and report the issue at http://www.github.com/getsentry/sentry-react-native/issues\n`);\n }\n\n // Always generate source maps, can't use Sentry without source maps\n const map = sourceMapStringFunction([...preModules, ...getSortedModules(graph, options)], {\n processModuleFilter: options.processModuleFilter,\n shouldAddToIgnoreList: options.shouldAddToIgnoreList || (() => false),\n });\n return { code, map };\n };\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/js/tools/vendor/metro/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* oxlint-disable typescript-eslint(no-unsafe-member-access) */\n// Vendored / modified from @facebook/metro\n\n// https://github.com/facebook/metro/commit/9b85f83c9cc837d8cd897aa7723be7da5b296067\n\n// MIT License\n\n// Copyright (c) Meta Platforms, Inc. and affiliates.\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 all\n// 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 THE\n// SOFTWARE.\n\nimport type { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type * as baseJSBundleType from 'metro/private/DeltaBundler/Serializers/baseJSBundle';\nimport type * as sourceMapStringType from 'metro/private/DeltaBundler/Serializers/sourceMapString';\nimport type * as bundleToStringType from 'metro/private/lib/bundleToString';\n\nimport type { MetroSerializer } from '../../utils';\n\n// oxlint-disable-next-line typescript-eslint(no-explicit-any)\nlet baseJSBundleModule: any;\ntry {\n baseJSBundleModule = require('metro/private/DeltaBundler/Serializers/baseJSBundle');\n} catch {\n baseJSBundleModule = require('metro/src/DeltaBundler/Serializers/baseJSBundle');\n}\n\nconst baseJSBundle: typeof baseJSBundleType =\n typeof baseJSBundleModule === 'function'\n ? baseJSBundleModule\n : (baseJSBundleModule?.baseJSBundle ?? baseJSBundleModule?.default);\n\nlet sourceMapString: typeof sourceMapStringType;\ntry {\n const sourceMapStringModule = require('metro/private/DeltaBundler/Serializers/sourceMapString');\n sourceMapString = (sourceMapStringModule as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n} catch (e) {\n sourceMapString = require('metro/src/DeltaBundler/Serializers/sourceMapString');\n if ('sourceMapString' in sourceMapString) {\n // Changed to named export in https://github.com/facebook/metro/commit/34148e61200a508923315fbe387b26d1da27bf4b\n // Metro 0.81.0 and 0.80.10 patch\n sourceMapString = (sourceMapString as { sourceMapString: typeof sourceMapStringType }).sourceMapString;\n }\n}\n\n// oxlint-disable-next-line typescript-eslint(no-explicit-any)\nlet bundleToStringModule: any;\ntry {\n bundleToStringModule = require('metro/private/lib/bundleToString');\n} catch {\n bundleToStringModule = require('metro/src/lib/bundleToString');\n}\n\nconst bundleToString: typeof bundleToStringType =\n typeof bundleToStringModule === 'function'\n ? bundleToStringModule\n : (bundleToStringModule?.bundleToString ?? bundleToStringModule?.default);\n\ntype NewSourceMapStringExport = {\n // Since Metro v0.80.10 https://github.com/facebook/metro/compare/v0.80.9...v0.80.10#diff-1b836d1729e527a725305eef0cec22e44605af2700fa413f4c2489ea1a03aebcL28\n sourceMapString: typeof sourceMapString;\n};\n\n/**\n * This function ensures that modules in source maps are sorted in the same\n * order as in a plain JS bundle.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L984\n */\nexport const getSortedModules = (\n graph: ReadOnlyGraph,\n {\n createModuleId,\n }: {\n createModuleId: (file: string) => number;\n },\n): readonly Module[] => {\n const modules = [...graph.dependencies.values()];\n // Sort by IDs\n return modules.sort(\n (a: Module<MixedOutput>, b: Module<MixedOutput>) => createModuleId(a.path) - createModuleId(b.path),\n );\n};\n\n/**\n * Creates the default Metro plain bundle serializer.\n * Because Metro exports only the intermediate serializer functions, we need to\n * assemble the final serializer ourselves. We have to work with the modules the same as Metro does\n * to avoid unexpected changes in the final bundle.\n *\n * This is used when the user does not provide a custom serializer.\n *\n * https://github.com/facebook/metro/blob/9b85f83c9cc837d8cd897aa7723be7da5b296067/packages/metro/src/Server.js#L244-L277\n */\nexport const createDefaultMetroSerializer = (): MetroSerializer => {\n return (entryPoint, preModules, graph, options) => {\n // baseJSBundle assigns IDs to modules in a consistent order\n let bundle = baseJSBundle(entryPoint, preModules, graph, options);\n if (options.sentryBundleCallback && !graph.transformOptions.hot) {\n bundle = options.sentryBundleCallback(bundle);\n }\n const { code } = bundleToString(bundle);\n if (graph.transformOptions.hot) {\n // Hot means running in dev server, sourcemaps are generated on demand\n return code;\n }\n\n let sourceMapStringFunction: typeof sourceMapString | undefined;\n if (typeof sourceMapString === 'function') {\n sourceMapStringFunction = sourceMapString;\n } else if (\n typeof sourceMapString === 'object' &&\n sourceMapString != null &&\n 'sourceMapString' in sourceMapString &&\n typeof sourceMapString['sourceMapString'] === 'function'\n ) {\n sourceMapStringFunction = (sourceMapString as NewSourceMapStringExport).sourceMapString;\n } else {\n throw new Error(`\n[@sentry/react-native/metro] Cannot find sourceMapString function in 'metro/src/DeltaBundler/Serializers/sourceMapString'.\nPlease check the version of Metro you are using and report the issue at http://www.github.com/getsentry/sentry-react-native/issues\n`);\n }\n\n // Always generate source maps, can't use Sentry without source maps\n const map = sourceMapStringFunction([...preModules, ...getSortedModules(graph, options)], {\n processModuleFilter: options.processModuleFilter,\n shouldAddToIgnoreList: options.shouldAddToIgnoreList || (() => false),\n });\n return { code, map };\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACrD,CAAC;AAsCF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IAYhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IAEH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuB1B;AAgFD;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAE1B,gBAAgB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EACxC,gBAAgB,uBAAuB,KACtC,KAAK,CAAC,iBAUR,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"touchevents.d.ts","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAItE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACrD,CAAC;AAsCF;;GAEG;AACH,cAAM,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACvE,OAAc,WAAW,EAAE,MAAM,CAAiC;IAClE,OAAc,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAK1D;IAEF,SAAgB,IAAI,EAAE,MAAM,CAAwB;IAEpD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IAYhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuB1B;AAwFD;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAE1B,gBAAgB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EACxC,gBAAgB,uBAAuB,KACtC,KAAK,CAAC,iBAUR,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -39,7 +39,7 @@ class TouchEventBoundary extends React.Component {
39
39
  */
40
40
  render() {
41
41
  return (React.createElement(View, { style: touchEventStyles.wrapperView,
42
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ // oxlint-disable-next-line typescript-eslint(no-explicit-any)
43
43
  onTouchStart: this._onTouchStart.bind(this) }, this.props.children));
44
44
  }
45
45
  /**
@@ -68,10 +68,8 @@ class TouchEventBoundary extends React.Component {
68
68
  */
69
69
  _isNameIgnored(name) {
70
70
  let ignoreNames = this.props.ignoreNames || [];
71
- // eslint-disable-next-line deprecation/deprecation
72
71
  if (this.props.ignoredDisplayNames) {
73
72
  // This is to make it compatible with prior version.
74
- // eslint-disable-next-line deprecation/deprecation
75
73
  ignoreNames = [...ignoreNames, ...this.props.ignoredDisplayNames];
76
74
  }
77
75
  return ignoreNames.some((ignoreName) => (typeof ignoreName === 'string' && name === ignoreName) ||
@@ -84,7 +82,6 @@ class TouchEventBoundary extends React.Component {
84
82
  * Traverses through the component tree when a touch happens and logs it.
85
83
  * @param e
86
84
  */
87
- // eslint-disable-next-line complexity
88
85
  _onTouchStart(e) {
89
86
  var _a, _b, _c;
90
87
  if (!e._targetInst) {
@@ -188,33 +185,36 @@ function getTouchedComponentInfo(currentInst, labelKey) {
188
185
  });
189
186
  }
190
187
  function getComponentName(props) {
191
- return typeof props[SENTRY_COMPONENT_PROP_KEY] === 'string' &&
188
+ return ((typeof props[SENTRY_COMPONENT_PROP_KEY] === 'string' &&
192
189
  props[SENTRY_COMPONENT_PROP_KEY].length > 0 &&
193
190
  props[SENTRY_COMPONENT_PROP_KEY] !== 'unknown' &&
194
- props[SENTRY_COMPONENT_PROP_KEY] || undefined;
191
+ props[SENTRY_COMPONENT_PROP_KEY]) ||
192
+ undefined);
195
193
  }
196
194
  function getElementName(props) {
197
- return typeof props[SENTRY_ELEMENT_PROP_KEY] === 'string' &&
195
+ return ((typeof props[SENTRY_ELEMENT_PROP_KEY] === 'string' &&
198
196
  props[SENTRY_ELEMENT_PROP_KEY].length > 0 &&
199
197
  props[SENTRY_ELEMENT_PROP_KEY] !== 'unknown' &&
200
- props[SENTRY_ELEMENT_PROP_KEY] || undefined;
198
+ props[SENTRY_ELEMENT_PROP_KEY]) ||
199
+ undefined);
201
200
  }
202
201
  function getFileName(props) {
203
- return typeof props[SENTRY_FILE_PROP_KEY] === 'string' &&
202
+ return ((typeof props[SENTRY_FILE_PROP_KEY] === 'string' &&
204
203
  props[SENTRY_FILE_PROP_KEY].length > 0 &&
205
204
  props[SENTRY_FILE_PROP_KEY] !== 'unknown' &&
206
- props[SENTRY_FILE_PROP_KEY] || undefined;
205
+ props[SENTRY_FILE_PROP_KEY]) ||
206
+ undefined);
207
207
  }
208
208
  function getLabelValue(props, labelKey) {
209
209
  return typeof props[SENTRY_LABEL_PROP_KEY] === 'string' && props[SENTRY_LABEL_PROP_KEY].length > 0
210
210
  ? props[SENTRY_LABEL_PROP_KEY]
211
- // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in
212
- // the "check-label" if sentence, so we have to assign it to a variable here first
213
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
214
- : typeof labelKey === 'string' && typeof props[labelKey] == 'string' && props[labelKey].length > 0
215
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
216
- ? props[labelKey]
217
- : undefined;
211
+ : // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in
212
+ // the "check-label" if sentence, so we have to assign it to a variable here first
213
+ // oxlint-disable-next-line typescript-eslint(no-unnecessary-type-assertion)
214
+ typeof labelKey === 'string' && typeof props[labelKey] == 'string' && props[labelKey].length > 0
215
+ ? // oxlint-disable-next-line typescript-eslint(no-unnecessary-type-assertion)
216
+ props[labelKey]
217
+ : undefined;
218
218
  }
219
219
  function getSpanAttributes(currentInst) {
220
220
  if (!currentInst.memoizedProps) {
@@ -223,9 +223,7 @@ function getSpanAttributes(currentInst) {
223
223
  const props = currentInst.memoizedProps;
224
224
  const attributes = props[SENTRY_SPAN_ATTRIBUTES_PROP_KEY];
225
225
  // Validate that it's an object (not null, not array)
226
- if (typeof attributes === 'object' &&
227
- attributes !== null &&
228
- !Array.isArray(attributes)) {
226
+ if (typeof attributes === 'object' && attributes !== null && !Array.isArray(attributes)) {
229
227
  return attributes;
230
228
  }
231
229
  return undefined;
@@ -236,7 +234,7 @@ function getSpanAttributes(currentInst) {
236
234
  * @param boundaryProps TouchEventBoundaryProps
237
235
  */
238
236
  const withTouchEventBoundary = (
239
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
237
+ // oxlint-disable-next-line typescript-eslint(no-explicit-any)
240
238
  InnerComponent, boundaryProps) => {
241
239
  const WrappedComponent = props => (React.createElement(TouchEventBoundary, Object.assign({}, (boundaryProps !== null && boundaryProps !== void 0 ? boundaryProps : {})),
242
240
  React.createElement(InnerComponent, Object.assign({}, props))));
@@ -1 +1 @@
1
- {"version":3,"file":"touchevents.js","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { SeverityLevel, SpanAttributeValue } from '@sentry/core';\nimport { addBreadcrumb, debug, dropUndefinedKeys, getClient, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport * as React from 'react';\nimport type { GestureResponderEvent } from 'react-native';\nimport { StyleSheet, View } from 'react-native';\nimport { createIntegration } from './integrations/factory';\nimport { startUserInteractionSpan } from './tracing/integrations/userInteraction';\nimport { UI_ACTION_TOUCH } from './tracing/ops';\nimport { SPAN_ORIGIN_AUTO_INTERACTION } from './tracing/origin';\n\nexport type TouchEventBoundaryProps = {\n /**\n * The category assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbCategory?: string;\n /**\n * The type assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbType?: string;\n /**\n * The max number of components to display when logging a touch's component tree.\n */\n maxComponentTreeSize?: number;\n /**\n * Component name(s) to ignore when logging the touch event. This prevents unhelpful logs such as\n * \"Touch event within element: View\" where you still can't tell which View it occurred in.\n */\n ignoreNames?: Array<string | RegExp>;\n /**\n * Deprecated, use ignoreNames instead\n * @deprecated\n */\n ignoredDisplayNames?: Array<string | RegExp>;\n /**\n * React Node wrapped by TouchEventBoundary.\n */\n children?: React.ReactNode;\n /**\n * Label Name used to identify the touched element.\n */\n labelName?: string;\n /**\n * Custom attributes to add to user interaction spans.\n * Accepts an object with string keys and values that are strings, numbers, booleans, or arrays.\n *\n * @experimental This API is experimental and may change in future releases.\n */\n spanAttributes?: Record<string, SpanAttributeValue>;\n};\n\nconst touchEventStyles = StyleSheet.create({\n wrapperView: {\n flex: 1,\n },\n});\n\nconst DEFAULT_BREADCRUMB_CATEGORY = 'touch';\nconst DEFAULT_BREADCRUMB_TYPE = 'user';\nconst DEFAULT_MAX_COMPONENT_TREE_SIZE = 20;\n\nconst SENTRY_LABEL_PROP_KEY = 'sentry-label';\nconst SENTRY_SPAN_ATTRIBUTES_PROP_KEY = 'sentry-span-attributes';\nconst SENTRY_COMPONENT_PROP_KEY = 'data-sentry-component';\nconst SENTRY_ELEMENT_PROP_KEY = 'data-sentry-element';\nconst SENTRY_FILE_PROP_KEY = 'data-sentry-source-file';\n\ninterface ElementInstance {\n elementType?: {\n displayName?: string;\n name?: string;\n };\n memoizedProps?: Record<string, unknown>;\n return?: ElementInstance;\n}\n\ninterface TouchedComponentInfo {\n name?: string;\n label?: string;\n element?: string;\n file?: string;\n}\n\ninterface PrivateGestureResponderEvent extends GestureResponderEvent {\n _targetInst?: ElementInstance;\n}\n\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\n public static displayName: string = '__Sentry.TouchEventBoundary';\n public static defaultProps: Partial<TouchEventBoundaryProps> = {\n breadcrumbCategory: DEFAULT_BREADCRUMB_CATEGORY,\n breadcrumbType: DEFAULT_BREADCRUMB_TYPE,\n ignoreNames: [],\n maxComponentTreeSize: DEFAULT_MAX_COMPONENT_TREE_SIZE,\n };\n\n public readonly name: string = 'TouchEventBoundary';\n\n /**\n * Registers the TouchEventBoundary as a Sentry Integration.\n */\n public componentDidMount(): void {\n const client = getClient();\n client?.addIntegration?.(createIntegration(this.name));\n }\n\n /**\n *\n */\n public render(): React.ReactNode {\n return (\n <View\n style={touchEventStyles.wrapperView}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onTouchStart={this._onTouchStart.bind(this) as any}\n >\n {this.props.children}\n </View>\n );\n }\n\n /**\n * Logs the touch event given the component tree names and a label.\n */\n private _logTouchEvent(touchPath: TouchedComponentInfo[], label?: string): void {\n const level = 'info' as SeverityLevel;\n\n const root = touchPath[0];\n if (!root) {\n debug.warn('[TouchEvents] No root component found in touch path.');\n return;\n }\n\n const detail = label ? label : `${root.name}${root.file ? ` (${root.file})` : ''}`;\n const crumb = {\n category: this.props.breadcrumbCategory,\n data: { path: touchPath },\n level: level,\n message: `Touch event within element: ${detail}`,\n type: this.props.breadcrumbType,\n };\n addBreadcrumb(crumb);\n\n debug.log(`[TouchEvents] ${crumb.message}`);\n }\n\n /**\n * Checks if the name is supposed to be ignored.\n */\n private _isNameIgnored(name: string): boolean {\n let ignoreNames = this.props.ignoreNames || [];\n // eslint-disable-next-line deprecation/deprecation\n if (this.props.ignoredDisplayNames) {\n // This is to make it compatible with prior version.\n // eslint-disable-next-line deprecation/deprecation\n ignoreNames = [...ignoreNames, ...this.props.ignoredDisplayNames];\n }\n\n return ignoreNames.some(\n (ignoreName: string | RegExp) =>\n (typeof ignoreName === 'string' && name === ignoreName) ||\n (ignoreName instanceof RegExp && name.match(ignoreName)),\n );\n }\n\n // Originally was going to clean the names of any HOCs as well but decided that it might hinder debugging effectively. Will leave here in case\n // private readonly _cleanName = (name: string): string =>\n // name.replace(/.*\\(/g, \"\").replace(/\\)/g, \"\");\n\n /**\n * Traverses through the component tree when a touch happens and logs it.\n * @param e\n */\n // eslint-disable-next-line complexity\n private _onTouchStart(e: PrivateGestureResponderEvent): void {\n if (!e._targetInst) {\n return;\n }\n\n let currentInst: ElementInstance | undefined = e._targetInst;\n const touchPath: TouchedComponentInfo[] = [];\n\n while (\n currentInst &&\n // maxComponentTreeSize will always be defined as we have a defaultProps. But ts needs a check so this is here.\n this.props.maxComponentTreeSize &&\n touchPath.length < this.props.maxComponentTreeSize\n ) {\n if (\n // If the loop gets to the boundary itself, break.\n currentInst.elementType?.displayName === TouchEventBoundary.displayName\n ) {\n break;\n }\n\n const info = getTouchedComponentInfo(currentInst, this.props.labelName);\n this._pushIfNotIgnored(touchPath, info);\n\n currentInst = currentInst.return;\n }\n\n const label = touchPath.find(info => info.label)?.label;\n if (touchPath.length > 0) {\n this._logTouchEvent(touchPath, label);\n }\n\n const span = startUserInteractionSpan({\n elementId: label,\n op: UI_ACTION_TOUCH,\n });\n if (span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_ORIGIN_AUTO_INTERACTION);\n\n // Apply custom attributes from sentry-span-attributes prop\n // Traverse the component tree to find custom attributes\n let instForAttributes: ElementInstance | undefined = e._targetInst;\n let customAttributes: Record<string, SpanAttributeValue> | undefined;\n\n while (instForAttributes) {\n if (instForAttributes.elementType?.displayName === TouchEventBoundary.displayName) {\n break;\n }\n\n customAttributes = getSpanAttributes(instForAttributes);\n if (customAttributes && Object.keys(customAttributes).length > 0) {\n break;\n }\n\n instForAttributes = instForAttributes.return;\n }\n\n if (customAttributes && Object.keys(customAttributes).length > 0) {\n span.setAttributes(customAttributes);\n }\n }\n }\n\n /**\n * Pushes the name to the componentTreeNames array if it is not ignored.\n */\n private _pushIfNotIgnored(touchPath: TouchedComponentInfo[], value: TouchedComponentInfo | undefined): boolean {\n if (!value) {\n return false;\n }\n\n if (!value.name && !value.label) {\n return false;\n }\n if (value.name && this._isNameIgnored(value.name)) {\n return false;\n }\n if (value.label && this._isNameIgnored(value.label)) {\n return false;\n }\n\n // Deduplicate same subsequent items.\n if (touchPath.length > 0 && JSON.stringify(touchPath[touchPath.length - 1]) === JSON.stringify(value)) {\n return false;\n }\n\n touchPath.push(value);\n return true;\n }\n}\n\nfunction getTouchedComponentInfo(currentInst: ElementInstance, labelKey: string | undefined): TouchedComponentInfo | undefined {\n const displayName = currentInst.elementType?.displayName;\n\n const props = currentInst.memoizedProps;\n if (!props) {\n // Early return if no props are available, as we can't extract any useful information\n if (displayName) {\n return {\n name: displayName,\n };\n }\n return undefined;\n }\n\n return dropUndefinedKeys<TouchedComponentInfo>({\n // provided by @sentry/babel-plugin-component-annotate\n name: getComponentName(props) || displayName,\n element: getElementName(props),\n file: getFileName(props),\n\n // `sentry-label` or user defined label key\n label: getLabelValue(props, labelKey),\n });\n}\n\nfunction getComponentName(props: Record<string, unknown>): string | undefined {\n return typeof props[SENTRY_COMPONENT_PROP_KEY] === 'string' &&\n props[SENTRY_COMPONENT_PROP_KEY].length > 0 &&\n props[SENTRY_COMPONENT_PROP_KEY] !== 'unknown' &&\n props[SENTRY_COMPONENT_PROP_KEY] || undefined;\n}\n\nfunction getElementName(props: Record<string, unknown>): string | undefined {\n return typeof props[SENTRY_ELEMENT_PROP_KEY] === 'string' &&\n props[SENTRY_ELEMENT_PROP_KEY].length > 0 &&\n props[SENTRY_ELEMENT_PROP_KEY] !== 'unknown' &&\n props[SENTRY_ELEMENT_PROP_KEY] || undefined;\n}\n\nfunction getFileName(props: Record<string, unknown>): string | undefined {\n return typeof props[SENTRY_FILE_PROP_KEY] === 'string' &&\n props[SENTRY_FILE_PROP_KEY].length > 0 &&\n props[SENTRY_FILE_PROP_KEY] !== 'unknown' &&\n props[SENTRY_FILE_PROP_KEY] || undefined;\n}\n\nfunction getLabelValue(props: Record<string, unknown>, labelKey: string | undefined): string | undefined {\n return typeof props[SENTRY_LABEL_PROP_KEY] === 'string' && props[SENTRY_LABEL_PROP_KEY].length > 0\n ? props[SENTRY_LABEL_PROP_KEY]\n // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in\n // the \"check-label\" if sentence, so we have to assign it to a variable here first\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n : typeof labelKey === 'string' && typeof props[labelKey] == 'string' && (props[labelKey] as string).length > 0\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ? (props[labelKey] as string)\n : undefined;\n}\n\nfunction getSpanAttributes(currentInst: ElementInstance): Record<string, SpanAttributeValue> | undefined {\n if (!currentInst.memoizedProps) {\n return undefined;\n }\n\n const props = currentInst.memoizedProps;\n const attributes = props[SENTRY_SPAN_ATTRIBUTES_PROP_KEY];\n\n // Validate that it's an object (not null, not array)\n if (\n typeof attributes === 'object' &&\n attributes !== null &&\n !Array.isArray(attributes)\n ) {\n return attributes as Record<string, SpanAttributeValue>;\n }\n\n return undefined;\n}\n\n/**\n * Convenience Higher-Order-Component for TouchEventBoundary\n * @param WrappedComponent any React Component\n * @param boundaryProps TouchEventBoundaryProps\n */\nconst withTouchEventBoundary = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InnerComponent: React.ComponentType<any>,\n boundaryProps?: TouchEventBoundaryProps,\n): React.FunctionComponent => {\n const WrappedComponent: React.FunctionComponent = props => (\n <TouchEventBoundary {...(boundaryProps ?? {})}>\n <InnerComponent {...props} />\n </TouchEventBoundary>\n );\n\n WrappedComponent.displayName = 'WithTouchEventBoundary';\n\n return WrappedComponent;\n};\n\nexport { TouchEventBoundary, withTouchEventBoundary };\n"]}
1
+ {"version":3,"file":"touchevents.js","sourceRoot":"","sources":["../../src/js/touchevents.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { SeverityLevel, SpanAttributeValue } from '@sentry/core';\nimport type { GestureResponderEvent } from 'react-native';\n\nimport { addBreadcrumb, debug, dropUndefinedKeys, getClient, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport * as React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { createIntegration } from './integrations/factory';\nimport { startUserInteractionSpan } from './tracing/integrations/userInteraction';\nimport { UI_ACTION_TOUCH } from './tracing/ops';\nimport { SPAN_ORIGIN_AUTO_INTERACTION } from './tracing/origin';\n\nexport type TouchEventBoundaryProps = {\n /**\n * The category assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbCategory?: string;\n /**\n * The type assigned to the breadcrumb that is logged by the touch event.\n */\n breadcrumbType?: string;\n /**\n * The max number of components to display when logging a touch's component tree.\n */\n maxComponentTreeSize?: number;\n /**\n * Component name(s) to ignore when logging the touch event. This prevents unhelpful logs such as\n * \"Touch event within element: View\" where you still can't tell which View it occurred in.\n */\n ignoreNames?: Array<string | RegExp>;\n /**\n * Deprecated, use ignoreNames instead\n * @deprecated\n */\n ignoredDisplayNames?: Array<string | RegExp>;\n /**\n * React Node wrapped by TouchEventBoundary.\n */\n children?: React.ReactNode;\n /**\n * Label Name used to identify the touched element.\n */\n labelName?: string;\n /**\n * Custom attributes to add to user interaction spans.\n * Accepts an object with string keys and values that are strings, numbers, booleans, or arrays.\n *\n * @experimental This API is experimental and may change in future releases.\n */\n spanAttributes?: Record<string, SpanAttributeValue>;\n};\n\nconst touchEventStyles = StyleSheet.create({\n wrapperView: {\n flex: 1,\n },\n});\n\nconst DEFAULT_BREADCRUMB_CATEGORY = 'touch';\nconst DEFAULT_BREADCRUMB_TYPE = 'user';\nconst DEFAULT_MAX_COMPONENT_TREE_SIZE = 20;\n\nconst SENTRY_LABEL_PROP_KEY = 'sentry-label';\nconst SENTRY_SPAN_ATTRIBUTES_PROP_KEY = 'sentry-span-attributes';\nconst SENTRY_COMPONENT_PROP_KEY = 'data-sentry-component';\nconst SENTRY_ELEMENT_PROP_KEY = 'data-sentry-element';\nconst SENTRY_FILE_PROP_KEY = 'data-sentry-source-file';\n\ninterface ElementInstance {\n elementType?: {\n displayName?: string;\n name?: string;\n };\n memoizedProps?: Record<string, unknown>;\n return?: ElementInstance;\n}\n\ninterface TouchedComponentInfo {\n name?: string;\n label?: string;\n element?: string;\n file?: string;\n}\n\ninterface PrivateGestureResponderEvent extends GestureResponderEvent {\n _targetInst?: ElementInstance;\n}\n\n/**\n * Boundary to log breadcrumbs for interaction events.\n */\nclass TouchEventBoundary extends React.Component<TouchEventBoundaryProps> {\n public static displayName: string = '__Sentry.TouchEventBoundary';\n public static defaultProps: Partial<TouchEventBoundaryProps> = {\n breadcrumbCategory: DEFAULT_BREADCRUMB_CATEGORY,\n breadcrumbType: DEFAULT_BREADCRUMB_TYPE,\n ignoreNames: [],\n maxComponentTreeSize: DEFAULT_MAX_COMPONENT_TREE_SIZE,\n };\n\n public readonly name: string = 'TouchEventBoundary';\n\n /**\n * Registers the TouchEventBoundary as a Sentry Integration.\n */\n public componentDidMount(): void {\n const client = getClient();\n client?.addIntegration?.(createIntegration(this.name));\n }\n\n /**\n *\n */\n public render(): React.ReactNode {\n return (\n <View\n style={touchEventStyles.wrapperView}\n // oxlint-disable-next-line typescript-eslint(no-explicit-any)\n onTouchStart={this._onTouchStart.bind(this) as any}\n >\n {this.props.children}\n </View>\n );\n }\n\n /**\n * Logs the touch event given the component tree names and a label.\n */\n private _logTouchEvent(touchPath: TouchedComponentInfo[], label?: string): void {\n const level = 'info' as SeverityLevel;\n\n const root = touchPath[0];\n if (!root) {\n debug.warn('[TouchEvents] No root component found in touch path.');\n return;\n }\n\n const detail = label ? label : `${root.name}${root.file ? ` (${root.file})` : ''}`;\n const crumb = {\n category: this.props.breadcrumbCategory,\n data: { path: touchPath },\n level: level,\n message: `Touch event within element: ${detail}`,\n type: this.props.breadcrumbType,\n };\n addBreadcrumb(crumb);\n\n debug.log(`[TouchEvents] ${crumb.message}`);\n }\n\n /**\n * Checks if the name is supposed to be ignored.\n */\n private _isNameIgnored(name: string): boolean {\n let ignoreNames = this.props.ignoreNames || [];\n if (this.props.ignoredDisplayNames) {\n // This is to make it compatible with prior version.\n ignoreNames = [...ignoreNames, ...this.props.ignoredDisplayNames];\n }\n\n return ignoreNames.some(\n (ignoreName: string | RegExp) =>\n (typeof ignoreName === 'string' && name === ignoreName) ||\n (ignoreName instanceof RegExp && name.match(ignoreName)),\n );\n }\n\n // Originally was going to clean the names of any HOCs as well but decided that it might hinder debugging effectively. Will leave here in case\n // private readonly _cleanName = (name: string): string =>\n // name.replace(/.*\\(/g, \"\").replace(/\\)/g, \"\");\n\n /**\n * Traverses through the component tree when a touch happens and logs it.\n * @param e\n */\n private _onTouchStart(e: PrivateGestureResponderEvent): void {\n if (!e._targetInst) {\n return;\n }\n\n let currentInst: ElementInstance | undefined = e._targetInst;\n const touchPath: TouchedComponentInfo[] = [];\n\n while (\n currentInst &&\n // maxComponentTreeSize will always be defined as we have a defaultProps. But ts needs a check so this is here.\n this.props.maxComponentTreeSize &&\n touchPath.length < this.props.maxComponentTreeSize\n ) {\n if (\n // If the loop gets to the boundary itself, break.\n currentInst.elementType?.displayName === TouchEventBoundary.displayName\n ) {\n break;\n }\n\n const info = getTouchedComponentInfo(currentInst, this.props.labelName);\n this._pushIfNotIgnored(touchPath, info);\n\n currentInst = currentInst.return;\n }\n\n const label = touchPath.find(info => info.label)?.label;\n if (touchPath.length > 0) {\n this._logTouchEvent(touchPath, label);\n }\n\n const span = startUserInteractionSpan({\n elementId: label,\n op: UI_ACTION_TOUCH,\n });\n if (span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_ORIGIN_AUTO_INTERACTION);\n\n // Apply custom attributes from sentry-span-attributes prop\n // Traverse the component tree to find custom attributes\n let instForAttributes: ElementInstance | undefined = e._targetInst;\n let customAttributes: Record<string, SpanAttributeValue> | undefined;\n\n while (instForAttributes) {\n if (instForAttributes.elementType?.displayName === TouchEventBoundary.displayName) {\n break;\n }\n\n customAttributes = getSpanAttributes(instForAttributes);\n if (customAttributes && Object.keys(customAttributes).length > 0) {\n break;\n }\n\n instForAttributes = instForAttributes.return;\n }\n\n if (customAttributes && Object.keys(customAttributes).length > 0) {\n span.setAttributes(customAttributes);\n }\n }\n }\n\n /**\n * Pushes the name to the componentTreeNames array if it is not ignored.\n */\n private _pushIfNotIgnored(touchPath: TouchedComponentInfo[], value: TouchedComponentInfo | undefined): boolean {\n if (!value) {\n return false;\n }\n\n if (!value.name && !value.label) {\n return false;\n }\n if (value.name && this._isNameIgnored(value.name)) {\n return false;\n }\n if (value.label && this._isNameIgnored(value.label)) {\n return false;\n }\n\n // Deduplicate same subsequent items.\n if (touchPath.length > 0 && JSON.stringify(touchPath[touchPath.length - 1]) === JSON.stringify(value)) {\n return false;\n }\n\n touchPath.push(value);\n return true;\n }\n}\n\nfunction getTouchedComponentInfo(\n currentInst: ElementInstance,\n labelKey: string | undefined,\n): TouchedComponentInfo | undefined {\n const displayName = currentInst.elementType?.displayName;\n\n const props = currentInst.memoizedProps;\n if (!props) {\n // Early return if no props are available, as we can't extract any useful information\n if (displayName) {\n return {\n name: displayName,\n };\n }\n return undefined;\n }\n\n return dropUndefinedKeys<TouchedComponentInfo>({\n // provided by @sentry/babel-plugin-component-annotate\n name: getComponentName(props) || displayName,\n element: getElementName(props),\n file: getFileName(props),\n\n // `sentry-label` or user defined label key\n label: getLabelValue(props, labelKey),\n });\n}\n\nfunction getComponentName(props: Record<string, unknown>): string | undefined {\n return (\n (typeof props[SENTRY_COMPONENT_PROP_KEY] === 'string' &&\n props[SENTRY_COMPONENT_PROP_KEY].length > 0 &&\n props[SENTRY_COMPONENT_PROP_KEY] !== 'unknown' &&\n props[SENTRY_COMPONENT_PROP_KEY]) ||\n undefined\n );\n}\n\nfunction getElementName(props: Record<string, unknown>): string | undefined {\n return (\n (typeof props[SENTRY_ELEMENT_PROP_KEY] === 'string' &&\n props[SENTRY_ELEMENT_PROP_KEY].length > 0 &&\n props[SENTRY_ELEMENT_PROP_KEY] !== 'unknown' &&\n props[SENTRY_ELEMENT_PROP_KEY]) ||\n undefined\n );\n}\n\nfunction getFileName(props: Record<string, unknown>): string | undefined {\n return (\n (typeof props[SENTRY_FILE_PROP_KEY] === 'string' &&\n props[SENTRY_FILE_PROP_KEY].length > 0 &&\n props[SENTRY_FILE_PROP_KEY] !== 'unknown' &&\n props[SENTRY_FILE_PROP_KEY]) ||\n undefined\n );\n}\n\nfunction getLabelValue(props: Record<string, unknown>, labelKey: string | undefined): string | undefined {\n return typeof props[SENTRY_LABEL_PROP_KEY] === 'string' && props[SENTRY_LABEL_PROP_KEY].length > 0\n ? props[SENTRY_LABEL_PROP_KEY]\n : // For some reason type narrowing doesn't work as expected with indexing when checking it all in one go in\n // the \"check-label\" if sentence, so we have to assign it to a variable here first\n // oxlint-disable-next-line typescript-eslint(no-unnecessary-type-assertion)\n typeof labelKey === 'string' && typeof props[labelKey] == 'string' && (props[labelKey] as string).length > 0\n ? // oxlint-disable-next-line typescript-eslint(no-unnecessary-type-assertion)\n (props[labelKey] as string)\n : undefined;\n}\n\nfunction getSpanAttributes(currentInst: ElementInstance): Record<string, SpanAttributeValue> | undefined {\n if (!currentInst.memoizedProps) {\n return undefined;\n }\n\n const props = currentInst.memoizedProps;\n const attributes = props[SENTRY_SPAN_ATTRIBUTES_PROP_KEY];\n\n // Validate that it's an object (not null, not array)\n if (typeof attributes === 'object' && attributes !== null && !Array.isArray(attributes)) {\n return attributes as Record<string, SpanAttributeValue>;\n }\n\n return undefined;\n}\n\n/**\n * Convenience Higher-Order-Component for TouchEventBoundary\n * @param WrappedComponent any React Component\n * @param boundaryProps TouchEventBoundaryProps\n */\nconst withTouchEventBoundary = (\n // oxlint-disable-next-line typescript-eslint(no-explicit-any)\n InnerComponent: React.ComponentType<any>,\n boundaryProps?: TouchEventBoundaryProps,\n): React.FunctionComponent => {\n const WrappedComponent: React.FunctionComponent = props => (\n <TouchEventBoundary {...(boundaryProps ?? {})}>\n <InnerComponent {...props} />\n </TouchEventBoundary>\n );\n\n WrappedComponent.displayName = 'WithTouchEventBoundary';\n\n return WrappedComponent;\n};\n\nexport { TouchEventBoundary, withTouchEventBoundary };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"expoImage.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/expoImage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,oBAAoB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5G,gBAAgB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAenE"}
1
+ {"version":3,"file":"expoImage.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/expoImage.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,oBAAoB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5G,gBAAgB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAenE"}
@@ -35,7 +35,7 @@ function wrapPrefetch(imageClass) {
35
35
  return;
36
36
  }
37
37
  const originalPrefetch = imageClass.prefetch.bind(imageClass);
38
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ // oxlint-disable-next-line typescript-eslint(no-explicit-any)
39
39
  imageClass.prefetch = ((urls, cachePolicyOrOptions) => {
40
40
  const urlList = Array.isArray(urls) ? urls : [urls];
41
41
  const urlCount = urlList.length;
@@ -1 +1 @@
1
- {"version":3,"file":"expoImage.js","sourceRoot":"","sources":["../../../src/js/tracing/expoImage.ts"],"names":[],"mappings":"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","sourcesContent":["import { SPAN_STATUS_ERROR, SPAN_STATUS_OK, startInactiveSpan } from '@sentry/core';\nimport { SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE } from './origin';\nimport { describeUrl, sanitizeUrl, traceAsyncOperation } from './utils';\n\n/**\n * Internal interface for expo-image's ImageSource.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageSource {\n uri?: string;\n headers?: Record<string, string>;\n width?: number | null;\n height?: number | null;\n cacheKey?: string;\n}\n\n/**\n * Internal interface for expo-image's ImageLoadOptions.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageLoadOptions {\n maxWidth?: number;\n maxHeight?: number;\n onError?(error: Error, retry: () => void): void;\n}\n\n/**\n * Internal interface for expo-image's ImageRef.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageRef {\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly mediaType: string | null;\n readonly isAnimated?: boolean;\n}\n\n/**\n * Represents the expo-image `Image` class with its static methods.\n * We only describe the methods that we instrument.\n */\nexport interface ExpoImage {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prefetch(urls: string | string[], cachePolicyOrOptions?: any): Promise<boolean>;\n loadAsync(source: ExpoImageSource | string | number, options?: ExpoImageLoadOptions): Promise<ExpoImageRef>;\n clearMemoryCache?(): Promise<boolean>;\n clearDiskCache?(): Promise<boolean>;\n}\n\n/**\n * Wraps expo-image's `Image` class to add automated performance monitoring.\n *\n * This function instruments `Image.prefetch` and `Image.loadAsync` static methods\n * to create performance spans that measure how long image prefetching and loading take.\n *\n * @param imageClass - The `Image` class from `expo-image`\n * @returns The same class with instrumented static methods\n *\n * @example\n * ```typescript\n * import { Image } from 'expo-image';\n * import * as Sentry from '@sentry/react-native';\n *\n * Sentry.wrapExpoImage(Image);\n * ```\n */\nexport function wrapExpoImage<T extends ExpoImage>(imageClass: T): T {\n if (!imageClass) {\n return imageClass;\n }\n\n if ((imageClass as T & { __sentryWrapped?: boolean }).__sentryWrapped) {\n return imageClass;\n }\n\n wrapPrefetch(imageClass);\n wrapLoadAsync(imageClass);\n\n (imageClass as T & { __sentryWrapped?: boolean }).__sentryWrapped = true;\n\n return imageClass;\n}\n\nfunction wrapPrefetch<T extends ExpoImage>(imageClass: T): void {\n if (!imageClass.prefetch) {\n return;\n }\n\n const originalPrefetch = imageClass.prefetch.bind(imageClass);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n imageClass.prefetch = ((urls: string | string[], cachePolicyOrOptions?: any): Promise<boolean> => {\n const urlList = Array.isArray(urls) ? urls : [urls];\n const urlCount = urlList.length;\n const firstUrl = urlList[0] || 'unknown';\n const description = urlCount === 1 ? describeUrl(firstUrl) : `${urlCount} images`;\n\n const span = startInactiveSpan({\n op: 'resource.image.prefetch',\n name: `Image prefetch ${description}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE,\n 'image.url_count': urlCount,\n ...(urlCount === 1 ? { 'image.url': sanitizeUrl(firstUrl) } : undefined),\n },\n });\n\n try {\n return originalPrefetch(urls, cachePolicyOrOptions)\n .then(result => {\n if (result) {\n span?.setStatus({ code: SPAN_STATUS_OK });\n } else {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: 'prefetch_failed' });\n }\n span?.end();\n return result;\n })\n .catch((error: unknown) => {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n });\n } catch (error) {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n }\n }) as T['prefetch'];\n}\n\nfunction wrapLoadAsync<T extends ExpoImage>(imageClass: T): void {\n if (!imageClass.loadAsync) {\n return;\n }\n\n const originalLoadAsync = imageClass.loadAsync.bind(imageClass);\n\n imageClass.loadAsync = ((\n source: ExpoImageSource | string | number,\n options?: ExpoImageLoadOptions,\n ): Promise<ExpoImageRef> => {\n const description = describeSource(source);\n\n const imageUrl =\n typeof source === 'string' ? source : typeof source === 'object' && source.uri ? source.uri : undefined;\n\n return traceAsyncOperation(\n {\n op: 'resource.image.load',\n name: `Image load ${description}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE,\n ...(imageUrl ? { 'image.url': sanitizeUrl(imageUrl) } : undefined),\n },\n },\n () => originalLoadAsync(source, options),\n );\n }) as T['loadAsync'];\n}\n\nfunction describeSource(source: ExpoImageSource | string | number): string {\n if (typeof source === 'number') {\n return `asset #${source}`;\n }\n if (typeof source === 'string') {\n return describeUrl(source);\n }\n if (source.uri) {\n return describeUrl(source.uri);\n }\n return 'unknown source';\n}\n"]}
1
+ {"version":3,"file":"expoImage.js","sourceRoot":"","sources":["../../../src/js/tracing/expoImage.ts"],"names":[],"mappings":"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","sourcesContent":["import { SPAN_STATUS_ERROR, SPAN_STATUS_OK, startInactiveSpan } from '@sentry/core';\n\nimport { SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE } from './origin';\nimport { describeUrl, sanitizeUrl, traceAsyncOperation } from './utils';\n\n/**\n * Internal interface for expo-image's ImageSource.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageSource {\n uri?: string;\n headers?: Record<string, string>;\n width?: number | null;\n height?: number | null;\n cacheKey?: string;\n}\n\n/**\n * Internal interface for expo-image's ImageLoadOptions.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageLoadOptions {\n maxWidth?: number;\n maxHeight?: number;\n onError?(error: Error, retry: () => void): void;\n}\n\n/**\n * Internal interface for expo-image's ImageRef.\n * We define this to avoid a hard dependency on expo-image.\n */\ninterface ExpoImageRef {\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly mediaType: string | null;\n readonly isAnimated?: boolean;\n}\n\n/**\n * Represents the expo-image `Image` class with its static methods.\n * We only describe the methods that we instrument.\n */\nexport interface ExpoImage {\n // oxlint-disable-next-line typescript-eslint(no-explicit-any)\n prefetch(urls: string | string[], cachePolicyOrOptions?: any): Promise<boolean>;\n loadAsync(source: ExpoImageSource | string | number, options?: ExpoImageLoadOptions): Promise<ExpoImageRef>;\n clearMemoryCache?(): Promise<boolean>;\n clearDiskCache?(): Promise<boolean>;\n}\n\n/**\n * Wraps expo-image's `Image` class to add automated performance monitoring.\n *\n * This function instruments `Image.prefetch` and `Image.loadAsync` static methods\n * to create performance spans that measure how long image prefetching and loading take.\n *\n * @param imageClass - The `Image` class from `expo-image`\n * @returns The same class with instrumented static methods\n *\n * @example\n * ```typescript\n * import { Image } from 'expo-image';\n * import * as Sentry from '@sentry/react-native';\n *\n * Sentry.wrapExpoImage(Image);\n * ```\n */\nexport function wrapExpoImage<T extends ExpoImage>(imageClass: T): T {\n if (!imageClass) {\n return imageClass;\n }\n\n if ((imageClass as T & { __sentryWrapped?: boolean }).__sentryWrapped) {\n return imageClass;\n }\n\n wrapPrefetch(imageClass);\n wrapLoadAsync(imageClass);\n\n (imageClass as T & { __sentryWrapped?: boolean }).__sentryWrapped = true;\n\n return imageClass;\n}\n\nfunction wrapPrefetch<T extends ExpoImage>(imageClass: T): void {\n if (!imageClass.prefetch) {\n return;\n }\n\n const originalPrefetch = imageClass.prefetch.bind(imageClass);\n\n // oxlint-disable-next-line typescript-eslint(no-explicit-any)\n imageClass.prefetch = ((urls: string | string[], cachePolicyOrOptions?: any): Promise<boolean> => {\n const urlList = Array.isArray(urls) ? urls : [urls];\n const urlCount = urlList.length;\n const firstUrl = urlList[0] || 'unknown';\n const description = urlCount === 1 ? describeUrl(firstUrl) : `${urlCount} images`;\n\n const span = startInactiveSpan({\n op: 'resource.image.prefetch',\n name: `Image prefetch ${description}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE,\n 'image.url_count': urlCount,\n ...(urlCount === 1 ? { 'image.url': sanitizeUrl(firstUrl) } : undefined),\n },\n });\n\n try {\n return originalPrefetch(urls, cachePolicyOrOptions)\n .then(result => {\n if (result) {\n span?.setStatus({ code: SPAN_STATUS_OK });\n } else {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: 'prefetch_failed' });\n }\n span?.end();\n return result;\n })\n .catch((error: unknown) => {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n });\n } catch (error) {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n }\n }) as T['prefetch'];\n}\n\nfunction wrapLoadAsync<T extends ExpoImage>(imageClass: T): void {\n if (!imageClass.loadAsync) {\n return;\n }\n\n const originalLoadAsync = imageClass.loadAsync.bind(imageClass);\n\n imageClass.loadAsync = ((\n source: ExpoImageSource | string | number,\n options?: ExpoImageLoadOptions,\n ): Promise<ExpoImageRef> => {\n const description = describeSource(source);\n\n const imageUrl =\n typeof source === 'string' ? source : typeof source === 'object' && source.uri ? source.uri : undefined;\n\n return traceAsyncOperation(\n {\n op: 'resource.image.load',\n name: `Image load ${description}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_RESOURCE_EXPO_IMAGE,\n ...(imageUrl ? { 'image.url': sanitizeUrl(imageUrl) } : undefined),\n },\n },\n () => originalLoadAsync(source, options),\n );\n }) as T['loadAsync'];\n}\n\nfunction describeSource(source: ExpoImageSource | string | number): string {\n if (typeof source === 'number') {\n return `asset #${source}`;\n }\n if (typeof source === 'string') {\n return describeUrl(source);\n }\n if (source.uri) {\n return describeUrl(source.uri);\n }\n return 'unknown source';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"expoRouter.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/expoRouter.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5G,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAgEjE"}
1
+ {"version":3,"file":"expoRouter.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/expoRouter.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5G,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAgEjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"expoRouter.js","sourceRoot":"","sources":["../../../src/js/tracing/expoRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,qCAAqC,EAAE,MAAM,UAAU,CAAC;AAcjE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAuB,MAAS;IAC5D,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oDAAoD;IACpD,IAAK,MAAoD,CAAC,uBAAuB,EAAE,CAAC;QAClF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEtD,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAwD,EAAE,EAAE;QAC9E,sDAAsD;QACtD,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnF,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC;YAC7B,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,YAAY,SAAS,EAAE;YAC7B,UAAU,EAAE;gBACV,eAAe,EAAE,qCAAqC;gBACtD,YAAY,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpE,YAAY,EAAE,SAAS;aACxB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEtC,8CAA8C;YAC9C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAClG,OAAO,MAAM;qBACV,IAAI,CAAC,GAAG,CAAC,EAAE;oBACV,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;oBAC1C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,CAAC;oBACZ,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACxB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACrE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,CAAC;oBACZ,MAAM,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACN,yBAAyB;gBACzB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC1C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,CAAC;YACZ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAA+B,CAAC;IAEjC,6CAA6C;IAC5C,MAAoD,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAErF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { SPAN_STATUS_ERROR, SPAN_STATUS_OK, startInactiveSpan } from '@sentry/core';\nimport { SPAN_ORIGIN_AUTO_EXPO_ROUTER_PREFETCH } from './origin';\n\n/**\n * Type definition for Expo Router's router object\n */\nexport interface ExpoRouter {\n prefetch?: (href: string | { pathname?: string; params?: Record<string, unknown> }) => void | Promise<void>;\n // Other router methods can be added here if needed\n push?: (...args: unknown[]) => void;\n replace?: (...args: unknown[]) => void;\n back?: () => void;\n navigate?: (...args: unknown[]) => void;\n}\n\n/**\n * Wraps Expo Router. It currently only does one thing: extends prefetch() method\n * to add automated performance monitoring.\n *\n * This function instruments the `prefetch` method of an Expo Router instance\n * to create performance spans that measure how long route prefetching takes.\n *\n * @param router - The Expo Router instance from `useRouter()` hook\n * @returns The same router instance with an instrumented prefetch method\n */\nexport function wrapExpoRouter<T extends ExpoRouter>(router: T): T {\n if (!router?.prefetch) {\n return router;\n }\n\n // Check if already wrapped to avoid double-wrapping\n if ((router as T & { __sentryPrefetchWrapped?: boolean }).__sentryPrefetchWrapped) {\n return router;\n }\n\n const originalPrefetch = router.prefetch.bind(router);\n\n router.prefetch = ((href: Parameters<NonNullable<ExpoRouter['prefetch']>>[0]) => {\n // Extract route name from href for better span naming\n let routeName = 'unknown';\n if (typeof href === 'string') {\n routeName = href;\n } else if (href && typeof href === 'object' && 'pathname' in href && href.pathname) {\n routeName = href.pathname;\n }\n\n const span = startInactiveSpan({\n op: 'navigation.prefetch',\n name: `Prefetch ${routeName}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_EXPO_ROUTER_PREFETCH,\n 'route.href': typeof href === 'string' ? href : JSON.stringify(href),\n 'route.name': routeName,\n },\n });\n\n try {\n const result = originalPrefetch(href);\n\n // Handle both promise and synchronous returns\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n return result\n .then(res => {\n span?.setStatus({ code: SPAN_STATUS_OK });\n span?.end();\n return res;\n })\n .catch((error: unknown) => {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n });\n } else {\n // Synchronous completion\n span?.setStatus({ code: SPAN_STATUS_OK });\n span?.end();\n return result;\n }\n } catch (error) {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n }\n }) as NonNullable<T['prefetch']>;\n\n // Mark as wrapped to prevent double-wrapping\n (router as T & { __sentryPrefetchWrapped?: boolean }).__sentryPrefetchWrapped = true;\n\n return router;\n}\n"]}
1
+ {"version":3,"file":"expoRouter.js","sourceRoot":"","sources":["../../../src/js/tracing/expoRouter.ts"],"names":[],"mappings":"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","sourcesContent":["import { SPAN_STATUS_ERROR, SPAN_STATUS_OK, startInactiveSpan } from '@sentry/core';\n\nimport { SPAN_ORIGIN_AUTO_EXPO_ROUTER_PREFETCH } from './origin';\n\n/**\n * Type definition for Expo Router's router object\n */\nexport interface ExpoRouter {\n prefetch?: (href: string | { pathname?: string; params?: Record<string, unknown> }) => void | Promise<void>;\n // Other router methods can be added here if needed\n push?: (...args: unknown[]) => void;\n replace?: (...args: unknown[]) => void;\n back?: () => void;\n navigate?: (...args: unknown[]) => void;\n}\n\n/**\n * Wraps Expo Router. It currently only does one thing: extends prefetch() method\n * to add automated performance monitoring.\n *\n * This function instruments the `prefetch` method of an Expo Router instance\n * to create performance spans that measure how long route prefetching takes.\n *\n * @param router - The Expo Router instance from `useRouter()` hook\n * @returns The same router instance with an instrumented prefetch method\n */\nexport function wrapExpoRouter<T extends ExpoRouter>(router: T): T {\n if (!router?.prefetch) {\n return router;\n }\n\n // Check if already wrapped to avoid double-wrapping\n if ((router as T & { __sentryPrefetchWrapped?: boolean }).__sentryPrefetchWrapped) {\n return router;\n }\n\n const originalPrefetch = router.prefetch.bind(router);\n\n router.prefetch = ((href: Parameters<NonNullable<ExpoRouter['prefetch']>>[0]) => {\n // Extract route name from href for better span naming\n let routeName = 'unknown';\n if (typeof href === 'string') {\n routeName = href;\n } else if (href && typeof href === 'object' && 'pathname' in href && href.pathname) {\n routeName = href.pathname;\n }\n\n const span = startInactiveSpan({\n op: 'navigation.prefetch',\n name: `Prefetch ${routeName}`,\n attributes: {\n 'sentry.origin': SPAN_ORIGIN_AUTO_EXPO_ROUTER_PREFETCH,\n 'route.href': typeof href === 'string' ? href : JSON.stringify(href),\n 'route.name': routeName,\n },\n });\n\n try {\n const result = originalPrefetch(href);\n\n // Handle both promise and synchronous returns\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n return result\n .then(res => {\n span?.setStatus({ code: SPAN_STATUS_OK });\n span?.end();\n return res;\n })\n .catch((error: unknown) => {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n });\n } else {\n // Synchronous completion\n span?.setStatus({ code: SPAN_STATUS_OK });\n span?.end();\n return result;\n }\n } catch (error) {\n span?.setStatus({ code: SPAN_STATUS_ERROR, message: String(error) });\n span?.end();\n throw error;\n }\n }) as NonNullable<T['prefetch']>;\n\n // Mark as wrapped to prevent double-wrapping\n (router as T & { __sentryPrefetchWrapped?: boolean }).__sentryPrefetchWrapped = true;\n\n return router;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"gesturetracing.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/gesturetracing.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,eAAO,MAAM,sBAAsB,QAA0B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAwBjD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ;AACzC;;;GAGG;AACH,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,GAChB,QAAQ,CA+CV"}
1
+ {"version":3,"file":"gesturetracing.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/gesturetracing.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,eAAO,MAAM,sBAAsB,QAA0B,CAAC;AAC9D,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAwBjD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ;AACzC;;;GAGG;AACH,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,GAChB,QAAQ,CA+CV"}
@@ -1 +1 @@
1
- {"version":3,"file":"gesturetracing.js","sourceRoot":"","sources":["../../../src/js/tracing/gesturetracing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Breadcrumb } from '@sentry/core';\nimport { addBreadcrumb, debug, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { startUserInteractionSpan } from './integrations/userInteraction';\nimport { UI_ACTION } from './ops';\nimport { SPAN_ORIGIN_AUTO_INTERACTION } from './origin';\n\nexport const DEFAULT_BREADCRUMB_CATEGORY = 'gesture';\nexport const DEFAULT_BREADCRUMB_TYPE = 'user';\n\nexport const GESTURE_POSTFIX_LENGTH = 'GestureHandler'.length;\nexport const ACTION_GESTURE_FALLBACK = 'gesture';\n\n/**\n * Internal interface following RNGH 2 Gesture Event API.\n * We need to use this to avoid importing RNGH 2 types and depending on it.\n * https://github.com/software-mansion/react-native-gesture-handler/blob/f0868f7ccf678c947ef65519ebf97ae149a10289/src/handlers/gestures/gesture.ts#L55\n * @hidden\n */\ntype GestureEvent = Record<string, unknown>;\n\n/**\n * Internal interface for RNGH 2 Gesture API.\n * We need to use this to avoid importing RNGH 2 types and depending on it.\n * https://github.com/software-mansion/react-native-gesture-handler/blob/2.9.0/src/handlers/gestures/gesture.ts#L120\n * @hidden\n */\ninterface BaseGesture {\n handlers?: {\n onBegin?: (event: GestureEvent) => void;\n onEnd?: (event: GestureEvent) => void;\n };\n handlerName: string;\n}\n\n/**\n * Patches React Native Gesture Handler v2 Gesture to start a transaction on gesture begin with the appropriate label.\n * Example: ShoppingCartScreen.dismissGesture\n */\nexport function sentryTraceGesture<GestureT>(\n /**\n * Label of the gesture to be used in transaction name.\n * Example: dismissGesture\n */\n label: string,\n gesture: GestureT,\n): GestureT {\n const gestureCandidate = gesture as unknown as BaseGesture | undefined | null;\n if (!gestureCandidate) {\n debug.warn('[GestureTracing] Gesture can not be undefined');\n return gesture;\n }\n if (!gestureCandidate.handlers) {\n debug.warn(\n '[GestureTracing] Can not wrap gesture without handlers. If you want to wrap a gesture composition wrap individual gestures.',\n );\n return gesture;\n }\n if (!label) {\n debug.warn('[GestureTracing] Can not wrap gesture without name.');\n return gesture;\n }\n const name =\n gestureCandidate.handlerName.length > GESTURE_POSTFIX_LENGTH\n ? gestureCandidate.handlerName\n .substring(0, gestureCandidate.handlerName.length - GESTURE_POSTFIX_LENGTH)\n .toLowerCase()\n : ACTION_GESTURE_FALLBACK;\n\n const originalOnBegin = gestureCandidate.handlers.onBegin;\n (gesture as unknown as Required<BaseGesture>).handlers.onBegin = (event: GestureEvent) => {\n const span = startUserInteractionSpan({ elementId: label, op: `${UI_ACTION}.${name}` });\n if (span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_ORIGIN_AUTO_INTERACTION);\n }\n\n addGestureBreadcrumb(`Gesture ${label} begin.`, { event, name });\n\n if (originalOnBegin) {\n originalOnBegin(event);\n }\n };\n\n const originalOnEnd = gestureCandidate.handlers.onEnd;\n (gesture as unknown as Required<BaseGesture>).handlers.onEnd = (event: GestureEvent) => {\n addGestureBreadcrumb(`Gesture ${label} end.`, { event, name });\n\n if (originalOnEnd) {\n originalOnEnd(event);\n }\n };\n\n return gesture;\n}\n\nfunction addGestureBreadcrumb(\n message: string,\n options: {\n event: Record<string, unknown> | undefined | null;\n name: string;\n },\n): void {\n const { event, name } = options;\n const crumb: Breadcrumb = {\n message,\n level: 'info',\n type: DEFAULT_BREADCRUMB_TYPE,\n category: DEFAULT_BREADCRUMB_CATEGORY,\n };\n\n if (event) {\n const data: Record<string, unknown> = {\n gesture: name,\n };\n for (const key of Object.keys(GestureEventKeys)) {\n const eventKey = GestureEventKeys[key as keyof typeof GestureEventKeys];\n if (eventKey in event) {\n data[eventKey] = event[eventKey];\n }\n }\n crumb.data = data;\n }\n\n addBreadcrumb(crumb);\n\n debug.log(`[GestureTracing] ${crumb.message}`);\n}\n\n/**\n * Selected keys from RNGH 2 Gesture Event API.\n * We only want to send relevant data to save on payload size.\n * @hidden\n */\nconst GestureEventKeys = {\n NUMBER_OF_POINTERS: 'numberOfPointers',\n NUMBER_OF_TOUCHES: 'numberOfTouches',\n FORCE: 'force',\n FORCE_CHANGE: 'forceChange',\n ROTATION: 'rotation',\n ROTATION_CHANGE: 'rotationChange',\n SCALE: 'scale',\n SCALE_CHANGE: 'scaleChange',\n DURATION: 'duration',\n VELOCITY: 'velocity',\n VELOCITY_X: 'velocityX',\n VELOCITY_Y: 'velocityY',\n} as const;\n"]}
1
+ {"version":3,"file":"gesturetracing.js","sourceRoot":"","sources":["../../../src/js/tracing/gesturetracing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Breadcrumb } from '@sentry/core';\n\nimport { addBreadcrumb, debug, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\nimport { startUserInteractionSpan } from './integrations/userInteraction';\nimport { UI_ACTION } from './ops';\nimport { SPAN_ORIGIN_AUTO_INTERACTION } from './origin';\n\nexport const DEFAULT_BREADCRUMB_CATEGORY = 'gesture';\nexport const DEFAULT_BREADCRUMB_TYPE = 'user';\n\nexport const GESTURE_POSTFIX_LENGTH = 'GestureHandler'.length;\nexport const ACTION_GESTURE_FALLBACK = 'gesture';\n\n/**\n * Internal interface following RNGH 2 Gesture Event API.\n * We need to use this to avoid importing RNGH 2 types and depending on it.\n * https://github.com/software-mansion/react-native-gesture-handler/blob/f0868f7ccf678c947ef65519ebf97ae149a10289/src/handlers/gestures/gesture.ts#L55\n * @hidden\n */\ntype GestureEvent = Record<string, unknown>;\n\n/**\n * Internal interface for RNGH 2 Gesture API.\n * We need to use this to avoid importing RNGH 2 types and depending on it.\n * https://github.com/software-mansion/react-native-gesture-handler/blob/2.9.0/src/handlers/gestures/gesture.ts#L120\n * @hidden\n */\ninterface BaseGesture {\n handlers?: {\n onBegin?: (event: GestureEvent) => void;\n onEnd?: (event: GestureEvent) => void;\n };\n handlerName: string;\n}\n\n/**\n * Patches React Native Gesture Handler v2 Gesture to start a transaction on gesture begin with the appropriate label.\n * Example: ShoppingCartScreen.dismissGesture\n */\nexport function sentryTraceGesture<GestureT>(\n /**\n * Label of the gesture to be used in transaction name.\n * Example: dismissGesture\n */\n label: string,\n gesture: GestureT,\n): GestureT {\n const gestureCandidate = gesture as unknown as BaseGesture | undefined | null;\n if (!gestureCandidate) {\n debug.warn('[GestureTracing] Gesture can not be undefined');\n return gesture;\n }\n if (!gestureCandidate.handlers) {\n debug.warn(\n '[GestureTracing] Can not wrap gesture without handlers. If you want to wrap a gesture composition wrap individual gestures.',\n );\n return gesture;\n }\n if (!label) {\n debug.warn('[GestureTracing] Can not wrap gesture without name.');\n return gesture;\n }\n const name =\n gestureCandidate.handlerName.length > GESTURE_POSTFIX_LENGTH\n ? gestureCandidate.handlerName\n .substring(0, gestureCandidate.handlerName.length - GESTURE_POSTFIX_LENGTH)\n .toLowerCase()\n : ACTION_GESTURE_FALLBACK;\n\n const originalOnBegin = gestureCandidate.handlers.onBegin;\n (gesture as unknown as Required<BaseGesture>).handlers.onBegin = (event: GestureEvent) => {\n const span = startUserInteractionSpan({ elementId: label, op: `${UI_ACTION}.${name}` });\n if (span) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_ORIGIN_AUTO_INTERACTION);\n }\n\n addGestureBreadcrumb(`Gesture ${label} begin.`, { event, name });\n\n if (originalOnBegin) {\n originalOnBegin(event);\n }\n };\n\n const originalOnEnd = gestureCandidate.handlers.onEnd;\n (gesture as unknown as Required<BaseGesture>).handlers.onEnd = (event: GestureEvent) => {\n addGestureBreadcrumb(`Gesture ${label} end.`, { event, name });\n\n if (originalOnEnd) {\n originalOnEnd(event);\n }\n };\n\n return gesture;\n}\n\nfunction addGestureBreadcrumb(\n message: string,\n options: {\n event: Record<string, unknown> | undefined | null;\n name: string;\n },\n): void {\n const { event, name } = options;\n const crumb: Breadcrumb = {\n message,\n level: 'info',\n type: DEFAULT_BREADCRUMB_TYPE,\n category: DEFAULT_BREADCRUMB_CATEGORY,\n };\n\n if (event) {\n const data: Record<string, unknown> = {\n gesture: name,\n };\n for (const key of Object.keys(GestureEventKeys)) {\n const eventKey = GestureEventKeys[key as keyof typeof GestureEventKeys];\n if (eventKey in event) {\n data[eventKey] = event[eventKey];\n }\n }\n crumb.data = data;\n }\n\n addBreadcrumb(crumb);\n\n debug.log(`[GestureTracing] ${crumb.message}`);\n}\n\n/**\n * Selected keys from RNGH 2 Gesture Event API.\n * We only want to send relevant data to save on payload size.\n * @hidden\n */\nconst GestureEventKeys = {\n NUMBER_OF_POINTERS: 'numberOfPointers',\n NUMBER_OF_TOUCHES: 'numberOfTouches',\n FORCE: 'force',\n FORCE_CHANGE: 'forceChange',\n ROTATION: 'rotation',\n ROTATION_CHANGE: 'rotationChange',\n SCALE: 'scale',\n SCALE_CHANGE: 'scaleChange',\n DURATION: 'duration',\n VELOCITY: 'velocity',\n VELOCITY_X: 'velocityX',\n VELOCITY_Y: 'velocityY',\n} as const;\n"]}
@@ -2,6 +2,9 @@ import type { Integration } from '@sentry/core';
2
2
  import type { NativeFramesResponse } from '../../NativeRNSentry';
3
3
  export type AppStartIntegration = Integration & {
4
4
  captureStandaloneAppStart: () => Promise<void>;
5
+ resetAppStartDataFlushed: () => void;
6
+ cancelDeferredStandaloneCapture: () => void;
7
+ scheduleDeferredStandaloneCapture: () => void;
5
8
  };
6
9
  interface AppStartEndData {
7
10
  timestampMs: number;
@@ -10,8 +13,17 @@ interface AppStartEndData {
10
13
  /**
11
14
  * Records the application start end.
12
15
  * Used automatically by `Sentry.wrap` and `Sentry.ReactNativeProfiler`.
16
+ *
17
+ * @deprecated Use {@link appLoaded} from the public SDK API instead (`Sentry.appLoaded()`).
13
18
  */
14
19
  export declare function captureAppStart(): Promise<void>;
20
+ /**
21
+ * Signals that the app has finished loading and is ready for user interaction.
22
+ * Called internally by `appLoaded()` from the public SDK API.
23
+ *
24
+ * @private
25
+ */
26
+ export declare function _appLoaded(): Promise<void>;
15
27
  /**
16
28
  * For internal use only.
17
29
  *
@@ -51,6 +63,12 @@ export declare const _updateAppStartEndFrames: (endFrames: NativeFramesResponse
51
63
  * @private
52
64
  */
53
65
  export declare function _clearRootComponentCreationTimestampMs(): void;
66
+ /**
67
+ * For testing purposes only.
68
+ *
69
+ * @private
70
+ */
71
+ export declare function _clearAppStartEndData(): void;
54
72
  /**
55
73
  * Adds AppStart spans from the native layer to the transaction event.
56
74
  */
@@ -1 +1 @@
1
- {"version":3,"file":"appStart.d.ts","sourceRoot":"","sources":["../../../../src/js/tracing/integrations/appStart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,WAAW,EAAoC,MAAM,cAAc,CAAC;AAiBjG,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAgBzF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,yBAAyB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,CAAC;AAeF,UAAU,eAAe;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxC;AAQD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BzF;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG9E;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,eAAe,KAAG,IAG3D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,WAAW,oBAAoB,GAAG,IAAI,KAAG,IAIjF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D;AAyBD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,kBAEjC;IACD;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,KAAG,mBAmVR,CAAC"}
1
+ {"version":3,"file":"appStart.d.ts","sourceRoot":"","sources":["../../../../src/js/tracing/integrations/appStart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,WAAW,EAAoC,MAAM,cAAc,CAAC;AAcjG,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAsBzF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,yBAAyB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,+BAA+B,EAAE,MAAM,IAAI,CAAC;IAC5C,iCAAiC,EAAE,MAAM,IAAI,CAAC;CAC/C,CAAC;AAeF,UAAU,eAAe;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxC;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAuChD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCzF;AAiBD;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG9E;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,eAAe,KAAG,IAG3D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,WAAW,oBAAoB,GAAG,IAAI,KAAG,IAIjF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAyBD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,kBAEjC;IACD;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,KAAG,mBA4YR,CAAC"}